openapi: 3.1.0
info:
  version: 3.0.0
  title: Connect Plug API
  contact:
    name: Contato
    email: contato@cplug.com.br
    url: https://www.connectplug.com.br/
  license:
    name: SAAS
    url: https://www.connectplug.com.br/
  x-logo:
    url: https://blog.connectplug.com.br/wp-content/uploads/2018/03/logo.png
  description: "## 📋 Changelog\n\n[Changelog](https://www.notion.so/deliverydireto/Changelog-da-API-V3-aa2bc3880bb0483aae7bbc3a40159b67)\n\n## 🚀 Introdução\n\nA API da ConnectPlug permite que parceiros utilizem diversos recursos da plataforma como gerenciar suas lojas e seus pedidos.\n\nA ConnectPlug oferece soluções para a operação e gestão das suas vendas e permite integrar seu PDV/POS ou qualquer outro aplicativo.\n\n### 🗂️ Organização da Documentação\n\nEsta documentação está organizada em categorias para facilitar a navegação:\n\n- **🔐 Autenticação**: Endpoints para obter tokens de acesso\n- **📦 Catálogo de Produtos**: Gerenciamento de produtos, categorias e unidades\n- **📦 Produtos - Funcionalidades Descontinuadas**: ⚠️ Endpoints que serão removidos em breve\n- **📱 Aplicativos**: Gerenciamento de aplicativos e disponibilidade de produtos\n- **💰 Financeiro**: Pagamentos, contas bancárias e transações\n- **🛒 Vendas**: Pedidos, vendas e promoções\n- **📦 Estoques**: Gerenciamento de estoque e compras\n- **🏢 Empresa**: Configurações da empresa e periféricos\n- **📊 Relatórios**: Relatórios de vendas e estatísticas\n\n### 🏗️ Arquitetura da API\n\nA API está organizada utilizando os padrões [REST](https://en.wikipedia.org/wiki/REST).\n\nOs recursos são orientados pelas URLs, aceitamos corpo de requisições (*Body Requests*) no formato [JSON](https://www.json.org/json-en.html). As respostas também utilizam o formato JSON.\n\nSendo assim, todas as *requests* devem conter os *Headers*\n\n```\nContent-Type: application/json\nAccept: application/json\n```\n\nAlém disso, utilizamos os padrões HTTP: *response codes*, verbos HTTP e autenticação.\n\n# 📚 Conhecimento Geral\n  ## 🔐 Autenticação\n\n  A API utiliza Oauth2 com o fluxo `password` (Grant Type Password).\n\n  Todos os *endpoints* devem conter o Token de acesso no *Header* `Authorization`, exceto os endpoints `/oauth/token` e `oauth/scopes` que são utilizados para gerar os Tokens de Acesso (*Access Token*).\n\n  Para obter o `access_token`, você irá precisar das seguintes informações:\n\n  - `CLIENT_ID` e `CLIENT_SECRET` do seu aplicativo.\n  - `email` e `password` do usuário com acesso à API.\n\n  Exemplo de chamada para gerar o *Access Token* utilizando cURL:\n\n  ```\n  curl --location --request POST 'http://connectplug.com.br/oauth/token' \\\n      --header 'Content-Type: application/json' \\\n      --data-raw '{\n        \"grant_type\": \"password\",\n        \"client_id\": \"<CLIENT_ID>\",\n        \"client_secret\": \"<CLIENT_SECRET>\",\n        \"username\": \"<email>\",\n        \"password\": \"<password>\",\n        \"scope\": \"*\"\n      }'\n  ```\n\n  Exemplo de chamada para renovação do *Access Token* via *Refresh Token* utilizando cURL:\n\n  ```\n  curl --location --request POST 'http://connectplug.com.br/oauth/token' \\\n      --header 'Content-Type: application/json' \\\n      --data-raw '{\n        \"grant_type\": \"refresh_token\",\n        \"client_id\": \"<CLIENT_ID>\",\n        \"client_secret\": \"<CLIENT_SECRET>\",\n        \"refresh_token\": \"<REFRESH_TOKEN>\",\n        \"scope\": \"*\"\n      }'\n  ```\n\n  Exemplo do uso do *Access Token* nas chamadas à API:\n\n  ```\n  curl --location --request POST 'http://connectplug.com.br/api/v3/categories' \\\n      --header 'Content-Type: application/json' \\\n      --header 'Authorization: Bearer <ACCESS_TOKEN>'\n  ```\n\n  ## 🔄 Verbos HTTP\n\n  Para cada *endpoint*, detalharemos as especificações dos parâmetros da requisição e do retorno, além dos métodos de requisição disponíveis (`GET`, `PUT`, `POST` e/ou `DELETE`). Parâmetros que exigem explicações mais detalhadas serão destacados após as informações de requisição e retorno de cada *endpoint*.\n\n  ## 🔢 HTTP Status\n\n  | Código | Nome | Descrição |\n  |--------|------|-----------|\n  | 200    | OK | O recurso solicitado foi processado e retornado com sucesso. |\n  | 201    | Created | O recurso informado foi criado com sucesso. |\n  | 401    | Unauthorized | A chave da API está desativada, incorreta ou não foi informada corretamente. Consulte a seção sobre autenticação da documentação. |\n  | 403    | Forbidden | O acesso ao recurso não foi autorizado. Isso pode acontecer quando a loja não tem permissão para acessar o recurso |\n  | 404    | Not Found | O recurso solicitado ou o endpoint não foi encontrado. |\n  | 422    | Unprocessable Entity | A requisição foi recebida com sucesso, porém contém parâmetros inválidos. |\n  | 429    | Too Many Requests | O limite de requisições (Rate Limit) foi atingido. |\n  | 400    | Bad Request | Não foi possível interpretar a requisição. Verifique as informações enviadas. |\n  | 500    | Internal Server Error | Ocorreu uma falha na plataforma. Por favor, entre em contato com o suporte. |\n\n  ## ⚠️ Códigos de Erro\n  | Código | Descrição |\n  |--------|-----------|\n  | bad_request | É retornado quando o servidor não consegue entender ou processar a solicitação, pois a solicitação está malformada, incompleta ou contém parâmetros inválidos. |\n  | not_found | É retornado quando o recurso solicitado não pode ser encontrado no servidor. |\n  | method_not_allowed | É retornado quando o método HTTP não é permitido para o recurso solicitado. |\n  | unprocessable_entity | É retornado quando houver erros de validação com os dados enviados. |\n  | too_many_requests | É retornado quando houver um número excessivo de requisições à API. Verifique a sessão de Rate Limit. |\n  | internal_server_error | É retornado quando houver uma falha na plataforma. Por favor, entre em contato com o suporte. |\n  | missing_headers | É retornado quando um *header* obrigatório não estiver presente na requisição. |\n  | max_upload_size_exceeded | Ocorre um retorno quando a imagem excede o limite de tamanho estabelecido. |\n  | unauthorized | É retornado quando a autenticação foi expirada. |\n  | invalid_scope | O retorno é gerado quando o escopo especificado na autenticação é inválido ou inexistente. |\n  | forbidden | O retorno ocorre quando se tenta realizar uma ação para a qual não se possui permissão. |\n  | uneditable_entity | Isso ocorre quando há uma tentativa de edição de um recurso que não é suscetível a modificações. |\n  | undeleted_resource_association | Isso ocorre quando há a tentativa de excluir um recurso, contudo, tal exclusão é inviável devido à sua associação com outro recurso. |\n  | product_combo_empty_components | Produtos do tipo \"Combo\" devem ter pelo menos um componente. |\n  | product_combo_attributes_not_allowed | Produtos do tipo \"Combo\" não podem ter atributos. |\n  | product_combo_component_combo_not_allowed | Produtos do tipo \"Combo\" não podem ter componentes do tipo \"Combo\". |\n  | product_combo_invalid_price | O valor do preço passado no produto do tipo \"Combo\" não é compatível com o calculo do preço dos componentes. |\n  | product_with_grid_cannot_have_components | Produtos com grade de preços não podem ter componentes. |\n  | option_cannot_be_associated_with_grid | Acontece quando uma opção de um atributo não pode ser associado em uma grade de preço. |\n  | grid_with_options_not_exclusive_by_attribute_group | Uma grade de preços de um produto não pode ter duas ou mais opções do mesmo grupo de atributos. |\n  | grid_with_duplicate_set_of_options | Uma grade de preço de um produto não pode ter opções de atributos duplicados. |\n\n  ## ⏱️ Rate Limit\n\n  O Rate limit atual da API é de 60 requisições por minuto.\n\n  ## 🔁 Chaves de Idempotência\n\n  A API utiliza idempotência nos endpoints que ocorrem operações de criação e atualização.\n\n  O `Idempotency-Key` é um ID aleatório gerado por você e deve ser passado no *header* `Idempotency-Key` das solicitações `POST` e `PUT`.\n\n  Nós utilizamos esse *header* para evitar duplicidade de registros, ou seja, caso você não tenha recebido a resposta de alguma requisição e mandar o mesmo `Idempotency-Key`, nós não duplicaremos o registro. Assim, se repetir ou houver duplicidade acidental da mesma *request*, não corre o risco de criar um segundo objeto ou efetuar a atualização duas vezes.\n\n  A idempotência funciona salvando o código de status resultante e o corpo da primeira solicitação feita para qualquer chave de idempotência, independentemente de ser bem-sucedida ou não. Os pedidos subsequentes com a mesma chave retornam o mesmo resultado, incluindo erros 500.\n\n  No *response* dos métodos `POST` e `PUT` é retornado dois *headers* adicionais:\n\n  - `Idempotency-Key`: que deve conter o identificador da *request* que você enviou.\n  - `Idempotency-Replayed`: que indica se a *request* é um *replay* de uma chamada anterior ou não.\n\n  Não é exigido um formato específico para o `Idempotency-Key`, porém sugerimos que utilize UUID ou alguma outra forma de geração de IDs aleatórios com entropia suficiente para evitar colisões. As chaves de idempotência têm um comprimento máximo de 100 caracteres.\n\n  ## 📝 Formato dos Dados\n\n  Visando facilitar a compreensão das nossas APIs para o maior número de desenvolvedores parceiros, alguns retornos tiveram seus formatos normalizados. A seguir, especificamos alguns dos formatos mais relevantes dos retornos da nossa API:\n\n  ### 📅 Datas e horários\n\n  Nossos campos que representam datas os horários são retornados no fuso horário da loja e são representadas em **UTC** utilizando o padrão [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601).\n\n  A informação de qual ***Timezone*** é utilizada na loja vem no próprio valor retornado.\n\n  Para os métodos em que é necessário passar uma data e horário no parâmetro, basta enviar as informações do horário local com a informação que determina o fuso horário em UTC.\n\n  ```text title='Formato datetime no padrão ISO 8601'\n  YYYY-MM-DDThh:mm:ss+hh:mm\n  ```\n\n  Onde:\n  * `YYYY` representa os 4 dígitos do ano.\n  * `MM` representa os 2 dígitos do mês.\n  * `DD` representa os 2 dígitos do dia do mês.\n  * `hh` representa os 2 dígitos da hora.\n  * `mm` representa os 2 dígitos do minuto.\n  * `ss` representa os 2 dígitos do segundo.\n  * `+hh:mm` representa o timezone, que pode ser positivo ou negativo. Por exemplo: o *timezone* `America/Sao_Paulo` é representado por `-03:00`.\n\n  ```text title='Exemplo de datetime no padrão ISO 8601'\n  2020-01-01T09:00:00-03:00\n  ```\n\n  ### 📅 Dias da semana\n\n  Para campos que representam dias de semana, são numeramos de `1` à `7`, onde:\n\n  * O dia `1` representa o domingo, e\n  * o dia `7` representa o sábado.\n\n  ## 📄 Paginação das respostas da API\n\n  Alguns de nossos *endpoints* possuem **paginação**.\n  Implementamos paginação para *endpoints* que tem o potencial de retornar um grande número de resultados.\n\n  Neste caso, temos o parâmetro `page` para operar a paginação via *query string*.\n\n  No retorno de *endpoints* com paginação enviamos o objeto `meta`, para consulta e referência do desenvolvedor parceiro.\n\n  Todos os nossos *endpoints* com paginação seguem um formato específico. Retornamos os resultados no formato JSON, com os seguintes campos sempre presentes:\n\n  * `data`: Campo utilizado para envolver a resposta da requisição.\n  * `meta`: Campo utilizado para referência da paginação, para os *endpoints* que se utilizam de paginação.\n  * `meta.current_page`: Campo utilizado para referência da paginação, para os *endpoints* que se utilizam de paginação.\n  * `meta.last_page`: Campo que identifica a quantidade de páginas.\n  * `meta.per_page`: Campo que identifica a quantidade por páginas.\n  * `meta.total`: Campo que identifica a quantidade total de objetos.\n\n  ```json title='Exemplo de resposta com paginação'\n  {\n    \"data\": {\n      ...\n    },\n    \"meta\": {\n      \"current_page\": 1,\n      \"last_page\": 2,\n      \"per_page\": 15,\n      \"total\": 17\n    }\n  }\n  ```\n  ## 📊 Tabela de Unidades de medida\n  A tabela de Unidades de Medida armazena informações sobre diferentes unidades de medida e suas descrições.\n  Essa tabela é usada para garantir a padronização das unidades de medida em diversos contextos.\n\n  | Código | Descrição |\n  |--------|-----------|\n  | AMPOLA |\tAMPOLA |\n  | BALDE |\tBALDE |\n  | BANDEJ |\tBANDEJA |\n  | BARRA |\tBARRA |\n  | BISNAG |\tBISNAGA |\n  | BLOCO |\tBLOCO |\n  | BOBINA |\tBOBINA |\n  | BOMB |\tBOMBONA |\n  | CAPS |\tCAPSULA |\n  | CART |\tCARTELA |\n  | CENTO |\tCENTO |\n  | CJ |\tCONJUNTO |\n  | CM |\tCENTIMETRO |\n  | CM2 |\tCENTIMETRO QUADRADO |\n  | CX |\tCAIXA |\n  | CX2 |\tCAIXA COM 2 UNIDADES |\n  | CX3 |\tCAIXA COM 3 UNIDADES |\n  | CX5 |\tCAIXA COM 5 UNIDADES |\n  | CX10 |\tCAIXA COM 10 UNIDADES |\n  | CX15 |\tCAIXA COM 15 UNIDADES |\n  | CX20 |\tCAIXA COM 20 UNIDADES |\n  | CX25 |\tCAIXA COM 25 UNIDADES |\n  | CX50 |\tCAIXA COM 50 UNIDADES |\n  | CX100 |\tCAIXA COM 100 UNIDADES |\n  | DISP |\tDISPLAY |\n  | DUZIA |\tDUZIA |\n  | EMBAL |\tEMBALAGEM |\n  | FARDO |\tFARDO |\n  | FOLHA |\tFOLHA |\n  | FRASCO |\tFRASCO |\n  | GALAO |\tGALÃO |\n  | GF |\tGARRAFA |\n  | GRAMAS |\tGRAMAS |\n  | JOGO |\tJOGO |\n  | KG |\tQUILOGRAMA |\n  | KIT |\tKIT |\n  | LATA |\tLATA |\n  | LITRO |\tLITRO |\n  | M |\tMETRO |\n  | M2 |\tMETRO QUADRADO |\n  | M3 |\tMETRO CÚBICO |\n  | MILHEI |\tMILHEIRO |\n  | ML |\tMILILITRO |\n  | MWH |\tMEGAWATT HORA |\n  | PACOTE |\tPACOTE |\n  | PALETE |\tPALETE |\n  | PARES |\tPARES |\n  | PC |\tPEÇA |\n  | POTE |\tPOTE |\n  | K |\tQUILATE |\n  | RESMA |\tRESMA |\n  | ROLO |\tROLO |\n  | SACO |\tSACO |\n  | SACOLA |\tSACOLA |\n  | TAMBOR |\tTAMBOR |\n  | TANQUE |\tTANQUE |\n  | TON |\tTONELADA |\n  | TUBO |\tTUBO |\n  | UNID |\tUNIDADE |\n  | VASIL |\tVASILHAME |\n  | VIDRO |\tVIDRO |\n\n\n  ## Tabela de tipos de código de barras\n\n  ### Tipos de código de barras 1D:\n\n  | Código | Descrição |\n  |--------|-----------|\n  | C39 | C39 |\n  | C39_PLUS | C39+ |\n  | C39E | C39E |\n  | C39E_PLUS | C39E+ |\n  | C93 | C93 |\n  | S25 | S25 |\n  | S25_PLUS | S25+ |\n  | I25 | I25 |\n  | I25_PLUS | I25+ |\n  | C128 | C128 |\n  | C128_A | C128A |\n  | C128_B | C128B |\n  | C128_C | C128C |\n  | EAN2 | EAN2 |\n  | EAN5 | EAN5 |\n  | EAN8 | EAN8 |\n  | EAN13 | EAN13 |\n  | UPCA | UPCA |\n  | UPCE | UPCE |\n  | MSI | MSI |\n  | MSI_PLUS | MSI+ |\n  | POSTNET | POSTNET |\n  | PLANET | PLANET |\n  | RMS4CC | RMS4CC |\n  | KIX | KIX |\n  | IMB | IMB |\n  | CODABAR | CODABAR |\n  | CODE11 | CODE11 |\n  | PHARMA | PHARMA |\n  | PHARMA2T | PHARMA2T |\n\n  ### Tipos de código 2D:\n\n  | Código | Descrição |\n  |--------|-----------|\n  | QRCODE | QRCODE |\n  | PDF417 | PDF417 |\n  | DATAMATRIX | DATAMATRIX |\n"
tags:
  - name: AccountPlan
    x-displayName: Plano de Contas
    description: Operações de plano de contas.
  - name: AppAdministration
    x-displayName: ↳ Administração de aplicativos
    description: Operações gerais de aplicativos.
  - name: AppCardContracts
    x-displayName: ↳ Contrato de cartão de um aplicativo
    description: Operações de contratos de cartão do aplicativo.
  - name: AppCategories
    x-displayName: ↳ Categorias de produtos de um aplicativo
    description: Operações de disponibilidade de uma categoria.
  - name: AppPaymentMethods
    x-displayName: ↳ Métodos de pagamento de um aplicativo
    description: Operações de métodos de pagamento do aplicativo.
  - name: AppProducts
    x-displayName: ↳ Produtos de um aplicativo
    description: Operações de disponibilidade de um produto.
  - name: Applications
    x-displayName: Aplicativos
    description: Operações do cadastro dos aplicativos ConnectPlug.
  - name: AttributeOptions
    x-displayName: ↳ Opções de um atributo
    description: Operações do cadastro de opções de um atributo.
  - name: Attributes
    x-displayName: Atributos
    description: Operações do cadastro de atributos de produto.
  - name: Authentication
    x-displayName: Oauth2
    description: Operações para autenticar um usuário.
  - name: BankAccounts
    x-displayName: Contas Bancárias
    description: Operações de cadastro de contas bancárias.
  - name: Banks
    x-displayName: Bancos
    description: Operações de cadastro de bancos.
  - name: Bulks
    x-displayName: Processamento em massa
    description: Operações de processamento em massa.
  - name: CardBrands
    x-displayName: Bandeiras de cartão
    description: Operações de bandeiras de cartão.
  - name: CardContracts
    x-displayName: Contratos de cartão
    description: Operações de contratos de cartão.
  - name: CardProviders
    x-displayName: Provedores de cartão
    description: Operações de provedores de cartão.
  - name: Carriers
    x-displayName: Transportadoras
    description: Operações de transportadoras.
  - name: CashRegisters
    x-displayName: Caixas Registradoras
    description: Operações de caixas registradoras.
  - name: Categories
    x-displayName: Categorias
    description: Operações de categoria de produtos.
  - name: Cities
    x-displayName: Cidades
    description: Lista de cidades.
  - name: CommandSeries
    x-displayName: Séries de Comandas
    description: Operações de séries de comandas.
  - name: Companies
    x-displayName: Empresas
    description: Operações de cadastro de empresas.
  - name: CompaniesBilling
    x-displayName: ↳ Dados de cobrança
    description: Operações de dados de cobrança de uma empresa.
  - name: CompaniesUseDefinitions
    x-displayName: ↳ Definições de uso
    description: Operações de definições de uso de uma empresa.
  - name: CostCenters
    x-displayName: Centros de custos
    description: Operações de cadastro de centros de custos.
  - name: CustomerCategory
    x-displayName: Categoria de Clientes
    description: Operações de cadastro de categoria de clientes.
  - name: Customers
    x-displayName: Clientes
    description: Operações de cadastro de clientes.
  - name: Customizations
    x-displayName: Customizações
    description: Operações de customizações.
  - name: DeliveryAreas
    x-displayName: Áreas de Entrega
    description: Operações de cadastro de áreas de entrega.
  - name: DigitalAccount
    x-displayName: Conta Digital
    description: Operação de ativação e visualização das contas digitais ativo na conta.
  - name: DigitalAccountComplements
    x-displayName: Endpoints Complementares
    description: Endpoints complementares para o uso da Conta Digital.
  - name: Districts
    x-displayName: Bairros
    description: Operações de bairros.
  - name: Dre
    x-displayName: Demonstrativo de Resultado do Exercício (DRE)
    description: >-
      Operações para geração do Demonstrativo de Resultado do Exercício (DRE)
      com informações sobre receitas e despesas organizadas por conta contábil.
  - name: ErpSettings
    x-displayName: Configurações gerais do ERP
    description: Operações de configurações gerais do ERP.
  - name: Files
    x-displayName: Arquivos
    description: Operações de arquivos.
  - name: Filters
    x-displayName: Filtros
    description: Endpoints para gerenciamento de filtros salvos.
  - name: Finances
    x-displayName: Transações Financeiras
    description: >-
      Operações de movimentações financeiras (Contas a pagar e Contas a
      receber).
  - name: FinancialGroup
    x-displayName: Grupos Financeiros
    description: Operações de grupos financeiros.
  - name: IcmsGroup
    x-displayName: Grupo de ICMS
    description: Operações de grupos de ICMS.
  - name: Icons
    x-displayName: Ícones
    description: Lista de ícones.
  - name: Integrations
    x-displayName: Integrações
    description: Operações de integrações disponíveis no sistema.
  - name: InvoiceSeries
    x-displayName: Séries de Notas Fiscais
    description: Operações de séries de notas fiscais.
  - name: IpiGroup
    x-displayName: Grupo de IPI
    description: Operações de grupos de IPI.
  - name: IssqnGroup
    x-displayName: Grupo de ISSQN
    description: Operações de grupos de ISSQN.
  - name: Kds
    x-displayName: Monitor de pedidos (KDS)
    description: Operações de monitoração de pedidos.
  - name: Labels
    x-displayName: Etiquetas
    description: Operações de etiquetas.
  - name: LegalTerms
    x-displayName: Temos Legais
    description: Operações de termos legais.
  - name: NatureOperations
    x-displayName: Naturezas de Operações
    description: Operações de naturezas de operações fiscais.
  - name: Nfe
    x-displayName: Notas Fiscais
    description: Operações relacionadas a notas fiscais.
  - name: NfeAdditionalInfos
    x-displayName: Informações Adicionais da NF-e
    description: Operações de informações adicionais da NF-e.
  - name: NfeEmittedDocumentsSchedules
    x-displayName: ↳ Envio de documentos fiscais
    description: Operações específicas de envio de documentos fiscais.
  - name: OpeningHours
    x-displayName: Horário de funcionamento
    description: Operações do cadastro de horário de funcionamento.
  - name: PasswordPanel
    x-displayName: Painel de Senha
    description: Configurações do painel de senha do PDV.
  - name: Payments
    x-displayName: Métodos de Pagamentos
    description: Operações do cadastro de métodos de pagamentos.
  - name: Peripherals
    x-displayName: Periféricos
    description: Operações do cadastro de periféricos.
  - name: Permissions
    x-displayName: Permissões
    description: Lista de Permissões.
  - name: PisCofinsGroup
    x-displayName: Grupo de PIS/COFINS
    description: Operações de grupos de PIS/COFINS.
  - name: Pos
    x-displayName: PDV
    description: Operações de PDV.
  - name: PriceListProducts
    x-displayName: ↳ Produtos de uma lista de preço
    description: Operações de produtos em uma lista de preço
  - name: PriceLists
    x-displayName: Listas de Preço
    description: Operações da lista de preço.
  - name: ProductApps
    x-displayName: ↳ Aplicativos de um produto
    description: Operações de disponibilidade de um aplicativo em um produto.
  - name: ProductAttributes
    x-displayName: ↳ Atributos de um produto
    description: Operações de atributos de um produto.
  - name: ProductCompositions
    x-displayName: ↳ Componentes de um produto
    description: Operações de componentes de um produto.
  - name: ProductConsumptionCoupons
    x-displayName: ↳ Fichas de Consumo de Produtos
    description: Operações de fichas de consumo de produtos.
  - name: ProductGrids
    x-displayName: ↳ Grade de preços de um produto
    description: Operações de grade de preços de um produto.
  - name: ProductSuppliers
    x-displayName: ↳ Fornecedores de um produto
    description: Operações de fornecedores de um produto.
  - name: ProductTaxes
    x-displayName: ↳ Operações fiscais de produtos
    description: Operações de configurações fiscais de produtos.
  - name: ProductionOrders
    x-displayName: Ordens de Produção
    description: Operações de ordens de produção.
  - name: Products
    x-displayName: Produtos
    description: Operações de cadastro de produtos.
  - name: Profiles
    x-displayName: Perfil
    description: Operações do cadastro de perfil de usuário.
  - name: Promotions
    x-displayName: Promoções
    description: Operações de promoções.
  - name: Purchase
    x-displayName: Compras
    description: Operações de compras.
  - name: PurchaseInvoices
    x-displayName: Importação de XML de Entrada
    description: >
      Importação de XML de Entrada.


      Fluxo de importação padrão:

      1) Faz o
      [upload](#tag/PurchaseInvoices/operation/post-purchase-invoices-file) da
      nota fiscal de entrada.


      2) [Obtém informações sobre o
      XML](#tag/PurchaseInvoices/operation/get-purchase-invoice-info-by-id) para
      verificase se o fornecedor está cadastrado;

          a) Se o campo `data.supplier.id` estiver com valor `null`, quer dizer que precisa [cadastrar um novo fornecedor](#tag/Suppliers/operation/post-suppliers).

      3) "Baixa" os itens do XML para o sistema por meio do endpoint [Faz um
      pré-processamento dos itens da
      nota](#tag/PurchaseInvoices/operation/put-purchase-invoice-prepare-items);


      4) [Obtém a lista de itens do
      XML](#tag/PurchaseInvoices/operation/get-purchase-invoice-items) para ver
      se precisa fazer alguma alteração ou associar um produto já cadastrado;


      5) Faça as operações necessárias do item;

          a) [Salva os itens em massa](#tag/PurchaseInvoices/operation/get-purchase-invoices) ou

          b) [Salva um item](#tag/PurchaseInvoices/operation/put-purchase-invoice-save-single-item) ou

          c) [Apaga um item do XML](#tag/PurchaseInvoices/operation/delete-purchase-invoice-a-single-item) ou

          d) [Reverte uma alteração para o estado inicial do XML](#tag/PurchaseInvoices/operation/put-purchase-invoice-revert-single-item) ou

          e) [Atualiza o preço de venda de todos os itens](#tag/PurchaseInvoices/operation/put-purchase-invoice-items-update-all-unitary-sale-price) ou

          f) [Atualiza os itens com os produtos do fornecedor](#tag/PurchaseInvoices/operation/put-purchase-invoice-items-update-linked-items).

      6) E finalmente [faz a importação dos itens que foram
      salvos](#tag/PurchaseInvoices/operation/put-purchase-invoice-import) no
      item anterior, adicionando as formas de pagamento para poder gerar uma
      compra no sistema.
  - name: Reconciliations
    x-displayName: Conciliação bancária
    description: Operações de conciliação bancária.
  - name: ReportSale
    x-displayName: Relatório de Vendas
    description: Obtem relatório de vendas.
  - name: SaleOrders
    x-displayName: Pedidos de Venda
    description: Operações de pedidos de venda.
  - name: Sales
    x-displayName: Vendas
    description: Operações de vendas.
  - name: Sources
    x-displayName: Canais de Vendas
    description: Operações de cadastro de canais de vendas.
  - name: StandardObservations
    x-displayName: Observações Padrões
    description: Operações de observações padrões.
  - name: States
    x-displayName: Estados
    description: Lista de estados.
  - name: Statistics
    x-displayName: Estatísticas (Dashboard)
    description: Operações de estatísticas.
  - name: Status
    x-displayName: Status
    description: Operações do cadastro dos status na ConnectPlug.
  - name: StockInventories
    x-displayName: Inventários de um estoque
    description: Operações de cadastro de inventários de um estoque.
  - name: StockMovementCategories
    x-displayName: Categoria de movimentação de estoque
    description: Operações de cadastro da categoria de movimentação de estoque.
  - name: StockMovements
    x-displayName: Movimentação de estoque
    description: Operações de entrada e saída de produtos no estoque.
  - name: StockProducts
    x-displayName: Movimentação de estoque de um produto
    description: Operações de movimentação de estoque de um produto no estoque.
  - name: StockTransfers
    x-displayName: Transferência entre estoques
    description: Operações de transferência de produtos entre estoques.
  - name: Stocks
    x-displayName: Estoques
    description: Operações de cadastro de estoques.
  - name: Store
    x-displayName: Loja
    description: Endpoint público da Loja para o consumidor final.
  - name: StoreCustomerAccount
    x-displayName: Conta do cliente
    description: Operações da conta do cliente.
  - name: StoreCustomerAddresses
    x-displayName: Endereços na loja
    description: Operações de endereços do cliente em uma loja.
  - name: StoreCustomerAuthentication
    x-displayName: Autenticação do cliente na loja
    description: Operações para autenticar um cliente na loja.
  - name: StoreCustomerOrders
    x-displayName: Pedidos do cliente na loja
    description: Operações de pedidos do cliente em uma loja.
  - name: StoreLegalTerms
    x-displayName: Temos Legais da loja
    description: Operações de termos legais da loja
  - name: Suppliers
    x-displayName: Fornecedores
    description: >-
      Fornecedores de serviços ou produtos. Podem ser pessoas jurídicas ou
      físicas
  - name: Tables
    x-displayName: Mesas
    description: Operações de mesas.
  - name: TaxSettingsDefaults
    x-displayName: Configurações Fiscais Padrão
    description: Operações de configurações fiscais padrão.
  - name: TaxSettingsNfe
    x-displayName: Configurações Fiscais
    description: Operações de configurações fiscais da empresa para NF-e.
  - name: TerminalSettings
    x-displayName: Configurações gerais do terminal
    description: Configurações gerais do terminal.
  - name: TotemSettings
    x-displayName: Configurações gerais do totem
    description: Configurações gerais do totem.
  - name: Tray
    x-displayName: ↳ Tray
    description: Operações específicas da integração Tray.
  - name: TypeBusiness
    x-displayName: Tipos de Negócio
    description: Operações de tipos de negócio disponíveis no sistema.
  - name: TypeInvoicePdv
    x-displayName: Tipo de Nota Emitida pelo PDV
    description: Operações de tipo de nota emitida pelo PDV.
  - name: Units
    x-displayName: Unidades de medidas
    description: Operações das unidades de medidas dos produtos.
  - name: Users
    x-displayName: Usuários
    description: Operações de cadastro de usuários.
  - name: WhitelabelSettings
    x-displayName: Configurações do Whitelabel
    description: >-
      Operações de configurações do whitelabel incluindo informações da empresa,
      contatos, cores e conteúdos.
  - name: ZipCodes
    x-displayName: Buscar Cep
    description: Operação de busca do endereço a partir de um cep informado.
x-tagGroups:
  - name: 🔐 Autenticação
    tags:
      - Authentication
  - name: 📋 Cadastros Auxiliares
    tags:
      - Categories
      - PriceLists
      - PriceListProducts
      - Attributes
      - AttributeOptions
      - Units
      - Peripherals
      - Suppliers
      - Carriers
  - name: 📦 Produtos
    tags:
      - Products
      - ProductAttributes
      - ProductCompositions
      - ProductGrids
      - ProductSuppliers
      - ProductTaxes
      - ProductApps
      - ProductConsumptionCoupons
  - name: 📦 Estoques
    tags:
      - Stocks
      - StockMovements
      - StockMovementCategories
      - StockProducts
      - StockTransfers
      - StockInventories
      - ProductionOrders
  - name: 🛒 Compras
    tags:
      - Purchase
      - PurchaseInvoices
  - name: 🛒 Vendas
    tags:
      - Sales
      - SaleOrders
      - Customers
      - CustomerCategory
      - Status
      - Promotions
  - name: 🖥️ Ponto de Venda (PDV)
    tags:
      - CashRegisters
      - Pos
      - CommandSeries
  - name: 📱 Aplicativos
    tags:
      - Applications
      - AppAdministration
      - AppProducts
      - AppCategories
      - AppPaymentMethods
      - AppCardContracts
  - name: 💰 Financeiro
    tags:
      - Finances
      - AccountPlan
      - Payments
      - BankAccounts
      - CostCenters
      - CardContracts
      - CardProviders
      - FinancialGroup
      - CardBrands
      - Banks
      - Reconciliations
  - name: ⚙️ Configurações
    tags:
      - ErpSettings
      - TerminalSettings
      - TotemSettings
      - Kds
      - PasswordPanel
      - Customizations
      - Tables
      - Icons
      - DeliveryAreas
      - OpeningHours
      - WhitelabelSettings
      - Labels
      - StandardObservations
      - Districts
  - name: 🧾 Configurações Fiscais
    tags:
      - TaxSettingsNfe
      - IcmsGroup
      - IpiGroup
      - PisCofinsGroup
      - IssqnGroup
      - NfeAdditionalInfos
      - InvoiceSeries
      - TypeInvoicePdv
      - NatureOperations
      - TaxSettingsDefaults
      - Nfe
      - NfeEmittedDocumentsSchedules
  - name: 🏢 Empresa
    tags:
      - Companies
      - CompaniesBilling
      - CompaniesUseDefinitions
  - name: 👤 Usuários, Perfis e Permissões
    tags:
      - Users
      - Profiles
      - Permissions
  - name: 📊 Relatórios
    tags:
      - Statistics
      - Dre
  - name: 📍 Dados de Endereço
    tags:
      - Cities
      - States
      - ZipCodes
  - name: 🔧 Outros
    tags:
      - Bulks
      - Filters
      - Integrations
      - Tray
      - TypeBusiness
      - Files
servers:
  - url: http://connectplug.com.br
    description: Dev
paths:
  /api/v3/apps:
    get:
      operationId: get-apps
      security:
        - OAuth2:
            - apps:read
      tags:
        - Applications
      summary: Lista de aplicativos
      description: Retorna lista dos aplicativos disponíveis.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: apps_id
          in: query
          description: >-
            Filtra pelos IDs dos aplicativos. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: number
            example: 123
        - name: name
          in: query
          description: Filtra pelo nome do aplicativo.
          schema:
            type: string
            example: App Name
        - name: type
          in: query
          description: Filtra pelo tipo do aplicativo.
          schema:
            $ref: '#/components/schemas/AppTypeEnum'
          example: totem
        - name: filter_type
          in: query
          description: >
            Define o tipo de filtro aplicado no type.


            - `only`: Retorna apenas os aplicativos que possuem o tipo
            informado.

            - `not_include`: Retorna os aplicativos que não possuem o tipo
            informado.


            *Default*: `only`
          schema:
            type: string
            enum:
              - only
              - not_include
          example: only
        - name: search
          in: query
          description: Filtra pelo nome, tipo ou nome do terminal ou nome do aparelho.
          schema:
            type: string
            example: PDV00001
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
      responses:
        '200':
          description: Lista dos aplicativos disponíveis.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      apps:
                        type: array
                        description: Representa a lista de aplicativos
                        items:
                          $ref: '#/components/schemas/Application'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-apps
      security:
        - OAuth2:
            - apps:write
      tags:
        - Applications
      summary: Cria novo aplicativo
      description: Cria novo aplicativo.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/Application'
      responses:
        '201':
          description: Novo aplicativo criado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Application'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/apps/{appId}:
    get:
      operationId: get-apps-id
      security:
        - OAuth2:
            - apps:read
      tags:
        - Applications
      summary: Obtém um aplicativo
      description: Obtém as informações de um aplicativo.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: appId
          in: path
          description: ID do aplicativo.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Aplicativo atualizado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Application'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-apps
      security:
        - OAuth2:
            - apps:write
      tags:
        - Applications
      summary: Atualiza um aplicativo
      description: Atualiza um aplicativo já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: appId
          in: path
          description: ID do aplicativo.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/Application'
      responses:
        '200':
          description: Aplicativo atualizada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Application'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-apps
      security:
        - OAuth2:
            - apps:delete
      tags:
        - Applications
      summary: Apaga um aplicativo
      description: Apaga um aplicativo.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: appId
          in: path
          description: ID do aplicativo.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/AppDeleteRequest'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/apps/{appId}/restore:
    put:
      operationId: put-apps-id-restore
      security:
        - OAuth2:
            - apps:write
      tags:
        - Applications
      summary: Restaurar um aplicativo
      description: Restaura um aplicativo que foi apagado.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: appId
          in: path
          description: ID do aplicativo que será restaurado.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/apps/{appId}/duplicate:
    post:
      operationId: post-apps-id-duplicate
      security:
        - OAuth2:
            - apps:write
      tags:
        - Applications
      summary: Duplicar aplicativo
      description: Duplica um aplicativo já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: appId
          in: path
          description: ID do aplicativo que será duplicado.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/AppDuplicateRequest'
      responses:
        '201':
          description: Aplicativo duplicado com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Application'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/apps/{appId}/image:
    post:
      operationId: post-apps-image
      security:
        - OAuth2:
            - apps:write.image
      tags:
        - Applications
      summary: Atualiza logo do aplicativo
      description: >
        Adiciona ou substitui a imagem principal (logo) do aplicativo.


        Este endpoint aceita solicitações HTTP no formato ***JSON***. A imagem
        deve ser do tipo JPEG ou PNG encodada em base64, seguindo o exemplo:


        ```

        curl --location --request POST
        'http://{BASE_URL}/api/v3/apps/{appId}/image' \

        --header 'Authorization: Bearer TOKEN' \

        --header 'Content-Type: application/json' \

        --data-raw '{
            "image": "data:image/png;base64,<imageBase64>"
        }'

        ```


        O tamanho máximo do arquivo é 5 MB.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: appId
          in: path
          description: ID do aplicativo ConnectPlug.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/UploadImageFile'
      responses:
        '201':
          description: Nova imagem adicionada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AppImage'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/apps/grouped-by-source:
    get:
      operationId: get-apps-grouped-by-source
      summary: Lista de aplicativos por canal de venda
      description: Retorna uma lista de aplicativos agrupados por canais de venda.
      tags:
        - Applications
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: apps_id
          in: query
          description: >-
            Filtra pelos IDs dos aplicativos. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: number
            example: 123
        - name: name
          in: query
          description: Filtra pelo nome do aplicativo.
          schema:
            type: string
            example: App Name
        - name: type
          in: query
          description: Filtra pelo tipo do aplicativo.
          schema:
            type: string
            example: totem
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: A list of apps grouped by source
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      sources:
                        type: array
                        items:
                          type: object
                          properties:
                            source:
                              type: string
                              description: Canais de venda
                              enum:
                                - totem
                                - pdv
                                - erp
                                - store
                              example: pdv
                            apps:
                              type: array
                              items:
                                type: object
                                properties:
                                  id:
                                    type: integer
                                    description: Identificador único do aplicativo.
                                    example: 1
                                  name:
                                    type: string
                                    description: Nome do aplicativo.
                                    example: Totem
                                  type:
                                    type: string
                                    enum:
                                      - totem
                                      - terminal
                                      - server
                                      - store
                                    description: Tipo do aplicativo.
                                    example: totem
                example:
                  data:
                    sources:
                      - source: totem
                        apps:
                          - id: 110
                            name: Loja
                            type: totem
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/apps/{appId}/revoke-license:
    post:
      operationId: post-apps-id-revoke-license
      security:
        - OAuth2:
            - apps:write
      tags:
        - AppAdministration
      summary: Revogar licença
      description: >
        Revoga as licenças existentes de um aplicativo do tipo Server e gera uma
        nova licença.


        Esta operação requer:

        - Confirmação através da senha do usuário

        - Frase de confirmação específica ("revogar") para evitar revogações
        acidentais

        - O aplicativo deve ser do tipo `Server`


        **Atenção**: Esta operação invalidará todas as licenças existentes do
        aplicativo e gerará uma nova licença.

        Dispositivos conectados com as licenças antigas perderão o acesso até
        serem reconfigurados com a nova licença.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: appId
          in: path
          description: |
            ID do aplicativo ConnectPlug.

            O aplicativo deve ser do tipo `Server`.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/AppRevokeLicenseBody'
      responses:
        '204':
          description: Licença revogada com sucesso
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/apps/{appId}/tefs/{action}:
    post:
      operationId: post-apps-tefs-action
      security:
        - OAuth2:
            - apps:write
      tags:
        - AppAdministration
      summary: Gerenciar configurações da VPN
      description: >
        Gerencia as configurações da VPN para aplicativos do tipo `totem` e
        `terminal`.


        **Aplicativos permitidos:** Apenas aplicativos do tipo `totem` e
        `terminal` são permitidos para operações de VPN.


        **Ações disponíveis:**

        - `install`: Instala uma nova configuração de VPN. Requer payload com
        `name` e opcionalmente `ip`.

        - `reinstall`: Reinstala a configuração de VPN existente. Só é possível
        se o app já tiver informações da VPN instaladas.

        - `cancel`: Cancela/remove a configuração de VPN existente. Só é
        possível se o app já tiver informações da VPN instaladas.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: appId
          in: path
          description: ID do aplicativo ConnectPlug.
          required: true
          schema:
            type: integer
            format: int64
        - name: action
          in: path
          description: Ação a ser executada para a VPN.
          required: true
          schema:
            type: string
            enum:
              - install
              - reinstall
              - cancel
            example: install
      requestBody:
        description: >
          Dados necessários para a operação de VPN.


          **Nota:** O request body é obrigatório apenas para a ação `install`. 

          Para as ações `reinstall` e `cancel`, o request body deve ser omitido
          ou vazio.
        required: false
        $ref: '#/components/requestBodies/AppTefBody'
      responses:
        '200':
          description: Operação de VPN executada com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Application'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/apps/{appId}/categories:
    get:
      operationId: get-app-products-categories
      security:
        - OAuth2:
            - apps:read
      tags:
        - AppCategories
      summary: Lista as categorias de produto
      description: Lista as categorias de produto vinculadas ao aplicativo.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: appId
          in: path
          description: ID do aplicativo.
          required: true
          schema:
            type: integer
            format: int64
        - name: category_ids
          in: query
          description: >
            Filtra pelos IDs das categorias de produto.


            Você pode localizar os IDs das categorias de produto no _endpoint_
            de [lista de categorias](#tag/Categories/operation/get-categories).
          schema:
            type: string
            example: 1,2,3
        - name: next_category_ids
          in: query
          description: >
            Filtra pelos IDs das próximas categorias de produto.


            Você pode localizar os IDs das categorias de produto no _endpoint_
            de [lista de categorias](#tag/Categories/operation/get-categories).
          schema:
            type: string
            example: 4,5,6
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista de categorias de produtos de um aplicativo.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      categories:
                        type: array
                        description: >-
                          Representa uma lista de categorias de produtos de um
                          aplicativo.
                        items:
                          $ref: '#/components/schemas/AppProductCategory'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-app-products-categories
      security:
        - OAuth2:
            - apps:write
      tags:
        - AppCategories
      summary: Cria ou atualiza categorias de produto
      description: Cria ou atualiza categorias de produtos vinculadas ao aplicativo.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: appId
          in: path
          description: ID do aplicativo.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição da atualização ou criação da categoria de um produto.
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                categories:
                  type: array
                  description: >-
                    Representa o corpo requisição da atualização ou criação da
                    categoria de um produto..
                  items:
                    $ref: '#/components/schemas/AppProductCategory'
      responses:
        '200':
          description: Lista de produtos em um aplicativo a serem criados ou atualizados.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      categories:
                        type: array
                        description: >-
                          Representa uma lista de categorias de produtos de um
                          aplicativo.
                        items:
                          $ref: '#/components/schemas/AppProductCategory'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/apps/{appId}/categories/{categoryId}:
    delete:
      operationId: delete-app-product-category
      security:
        - OAuth2:
            - apps:delete
      tags:
        - AppCategories
      summary: Apaga uma categoria de produto do aplicativo
      description: Apaga uma categoria de produto do aplicativo.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: appId
          in: path
          description: ID do aplicativo ConnectPlug.
          required: true
          schema:
            type: integer
            format: int64
        - name: categoryId
          in: path
          description: ID da categoria de produto.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/apps/{appId}/items:
    get:
      operationId: get-app-products
      security:
        - OAuth2:
            - apps:read
      tags:
        - AppProducts
      summary: Lista os produtos
      description: Lista os produtos de um aplicativo.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: appId
          in: path
          description: ID do aplicativo.
          required: true
          schema:
            type: integer
            format: int64
        - name: item_ids
          in: query
          description: >
            Filtra pelos IDs dos produtos.


            Você pode localizar os IDs dos produtos no _endpoint_ de [lista de
            produtos](#tag/Products/operation/get-products).
          schema:
            type: string
            example: 1,2,3
        - name: category_ids
          in: query
          description: >
            Filtra pelos IDs das categorias de produto.


            Você pode localizar os IDs das categorias de produto no _endpoint_
            de [lista de categorias](#tag/Categories/operation/get-categories).
          schema:
            type: string
            example: 4,5,6
        - name: is_available_for_sale
          in: query
          description: Filtra se está disponível para a venda ou não.
          schema:
            type: boolean
            example: true
        - name: min_price
          in: query
          description: Preço mínimo de venda deste produto vinculado ao aplicativo.
          schema:
            type: number
            example: 10
        - name: max_price
          in: query
          description: Preço máximo de venda deste produto vinculado ao aplicativo.
          schema:
            type: number
            example: 10
        - name: with_options
          in: query
          description: |
            Retorna apenas produtos que possuem ou não opções.
          schema:
            type: string
            default: all
            enum:
              - all
              - with
              - without
            example: all
        - name: option_ids
          in: query
          description: >
            Filtra pelos IDs das opções de um produto.


            Este parâmetro é ignorado se o parâmetro `with_options` for
            `without` ou `all`.
          schema:
            type: string
            example: 1,2,3
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista de produtos de um aplicativo.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      items:
                        type: array
                        description: Representa a lista de produtos de um aplicativo.
                        items:
                          $ref: '#/components/schemas/AppProduct'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-app-products
      security:
        - OAuth2:
            - apps:write
      tags:
        - AppProducts
      summary: Cria ou atualiza produtos
      description: Cria ou atualiza produtos em um aplicativo.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: appId
          in: path
          description: ID do aplicativo.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição da atualização de produtos.
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                items:
                  type: array
                  description: >-
                    Representa a lista de produtos em um aplicativo a serem
                    criados ou atualizados.
                  items:
                    $ref: '#/components/schemas/AppProduct'
      responses:
        '200':
          description: Lista de produtos em um aplicativo a serem criados ou atualizados.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      items:
                        type: array
                        description: >-
                          Representa a lista de produtos em um aplicativo a
                          serem criados ou atualizados.
                        items:
                          $ref: '#/components/schemas/AppProduct'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/apps/{appId}/items/{productId}/options:
    get:
      operationId: get-apps-item-options
      security:
        - OAuth2:
            - products:read
      tags:
        - AppProducts
      summary: Lista as opções de um produto
      description: Lista as opções de um produto em um aplicativo.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - name: appId
          in: path
          description: ID do aplicativo.
          required: true
          schema:
            type: integer
            format: int64
        - name: option_ids
          in: query
          description: >
            Filtra pelos IDs das opções de um produto.


            Você pode localizar os IDs das opções de um produto no _endpoint_ de
            [Lista de opções de
            atributos](#tag/Attributes/operation/get-attributes-options).
          schema:
            type: string
            example: 1,2,3
        - name: is_available_for_sale
          in: query
          description: Filtra se está disponível para a venda ou não.
          schema:
            type: boolean
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
      responses:
        '200':
          description: Lista de opções de um produto no aplicativo.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      options:
                        type: array
                        description: >-
                          Representa a lista de opções de um produto no
                          aplicativo.
                        items:
                          $ref: '#/components/schemas/ProductAppOption'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-apps-item-options
      security:
        - OAuth2:
            - products:write
      tags:
        - AppProducts
      summary: Cria ou atualiza as opções do produto
      description: Cria ou atualiza as opções do produto em um aplicativo.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - name: appId
          in: path
          description: ID do aplicativo.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: >-
          Corpo requisição da atualização ou da criação opções de um produto no
          aplicativo.
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                options:
                  type: array
                  description: >-
                    Representa a lista opções atualizadas ou cridas no
                    aplicativo.
                  items:
                    $ref: '#/components/schemas/ProductAppOption'
      responses:
        '200':
          description: Lista de opções de um produto no aplicativo.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      options:
                        type: array
                        description: >-
                          Representa a lista de opções de um produto no
                          aplicativo.
                        items:
                          $ref: '#/components/schemas/ProductAppOption'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/apps/{appId}/items/{productId}/options/{optionId}:
    delete:
      operationId: delete-apps-item-options
      security:
        - OAuth2:
            - products:delete
      tags:
        - AppProducts
      summary: Apaga uma opção de um produto
      description: Apaga uma opção de um produto no aplicativo.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - name: appId
          in: path
          description: ID do aplicativo.
          required: true
          schema:
            type: integer
            format: int64
        - name: optionId
          in: path
          description: ID da opção.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/apps/{appId}/items/{productId}/grids:
    get:
      operationId: get-apps-item-grids
      security:
        - OAuth2:
            - products:read
      tags:
        - AppProducts
      summary: Lista as grades de preço de um produto
      description: Lista as grades de preço de um produto.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - name: appId
          in: path
          description: ID do aplicativo.
          required: true
          schema:
            type: integer
            format: int64
        - name: grid_ids
          in: query
          description: >
            Filtra pelos IDs das grades de preço de um produto.


            Você pode localizar os IDs das grids de um produto na chave `grids`
            no _endpoint_ de [obter um
            produto](#tag/Products/operation/post-products).
          schema:
            type: string
            example: 1,2,3
        - name: is_available_for_sale
          in: query
          description: Filtra se está disponível para a venda ou não.
          schema:
            type: boolean
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista de grades de preço de um produto.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      grids:
                        type: array
                        description: >-
                          Representa a lista de grades de preço de um produto no
                          aplicativo.
                        items:
                          $ref: '#/components/schemas/ProductAppGrid'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-apps-item-grids
      security:
        - OAuth2:
            - products:write
      tags:
        - AppProducts
      summary: Cria ou atualiza as grades de preço de um produto
      description: Cria ou atualiza as grades de preço de um produto em um aplicativo.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - name: appId
          in: path
          description: ID do aplicativo.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição da grade de preços de um produto no aplicativo.
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                grids:
                  type: array
                  description: >-
                    Representa a lista de grades de preço de um produto no
                    aplicativo.
                  items:
                    $ref: '#/components/schemas/ProductAppGrid'
      responses:
        '200':
          description: Lista de grades de preço de um produto no aplicativo.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      grids:
                        type: array
                        description: >-
                          Representa a lista de grids de um produto no
                          aplicativo.
                        items:
                          $ref: '#/components/schemas/ProductAppGrid'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/apps/{appId}/items/{productId}/grids/{gridId}:
    delete:
      operationId: delete-apps-item-grids
      security:
        - OAuth2:
            - products:delete
      tags:
        - AppProducts
      summary: Apaga uma grade de preço de um produto
      description: Apaga uma grade de preço de um produto.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - name: appId
          in: path
          description: ID do aplicativo.
          required: true
          schema:
            type: integer
            format: int64
        - name: gridId
          in: path
          description: ID da grade de preço.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/apps/{appId}/card-contracts/{cardContractId}:
    patch:
      operationId: patch-apps-card-contract
      security:
        - OAuth2:
            - apps:update
      tags:
        - AppCardContracts
      summary: Vincular contrato de cartão
      description: |
        Permite associar um contrato de cartão ao aplicativo.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: appId
          in: path
          description: ID do aplicativo ConnectPlug.
          required: true
          schema:
            type: integer
            format: int64
        - name: cardContractId
          in: path
          description: ID do contrato de cartão.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/AppCardContractBadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-apps-card-contract
      security:
        - OAuth2:
            - apps:update
      tags:
        - AppCardContracts
      summary: Desvincular contrato de cartão
      description: |
        Permite desvincular um contrato de cartão do aplicativo.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: appId
          in: path
          description: ID do aplicativo ConnectPlug.
          required: true
          schema:
            type: integer
            format: int64
        - name: cardContractId
          in: path
          description: ID do contrato de cartão.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/apps/{appId}/credentials:
    get:
      operationId: get-apps-credentials
      security:
        - OAuth2:
            - apps:read
      tags:
        - AppAdministration
      summary: Obtém credenciais do aplicativo
      description: >
        Obtém as credenciais de acesso (login_code e PIN) para um aplicativo
        específico que suporta autenticação via PIN.


        **Tipos de aplicativo suportados:**

        - TOTEM

        - DIGITAL-MENU  

        - DESKTOP

        - POS-A

        - MOBILE-APP

        - ORDERSHEET-CHECK

        - REALTIME-MANAGEMENT

        - KDS-ANDROID

        - POS-TEF

        - CONFERENCE-APP


        **Comportamento do PIN:**

        - Gerado automaticamente quando não existe ou está expirado

        - Válido por 90 segundos

        - Formato: número de 6 dígitos (100000-999999)

        - Apenas um dispositivo pode usar a licença por vez
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: appId
          in: path
          description: ID do aplicativo ConnectPlug.
          required: true
          schema:
            type: integer
            format: int64
            minimum: 1
            maximum: 2147483647
      responses:
        '200':
          description: Credenciais do aplicativo obtidas com sucesso.
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  data:
                    $ref: '#/components/schemas/AppCredentials'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          description: Acesso negado. Tipo de aplicativo não suportado ou licença em uso.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/ErrorAppTypeNotSupported'
                  - $ref: '#/components/schemas/ErrorLicenseInUse'
        '404':
          description: Aplicativo ou configuração não encontrada.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/NotFound'
                  - $ref: '#/components/schemas/ErrorAppConfigNotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/apps/{appId}/payment-methods:
    get:
      operationId: GetAppPaymentMethods
      security:
        - OAuth2:
            - apps:read
      tags:
        - AppPaymentMethods
      summary: Lista métodos de pagamento
      description: Lista os métodos de pagamento vinculados ao aplicativo.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: appId
          in: path
          description: ID do aplicativo.
          required: true
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/AppPaymentMethodNameQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista de métodos de pagamento do aplicativo.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetAppPaymentMethodsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/apps/{appId}/payment-methods/sync:
    put:
      operationId: post-app-payment-methods-sync
      security:
        - OAuth2:
            - apps:write
      tags:
        - AppPaymentMethods
      summary: Sincroniza métodos de pagamento
      description: Sincroniza os métodos de pagamento do aplicativo.
      parameters:
        - name: appId
          in: path
          description: ID do aplicativo.
          required: true
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/AppSyncPaymentMethodRequest'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/apps/syncs:
    post:
      operationId: post-apps-syncs
      security:
        - OAuth2:
            - apps:write
      tags:
        - AppAdministration
      summary: Enviar sincronização para aplicativos
      description: Envia uma sincronização para os aplicativos informados.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/AppSyncRequest'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/apps/syncs/{notificationId}/confirm:
    put:
      operationId: put-apps-syncs-notificationId-confirm
      security:
        - OAuth2:
            - apps:write
      tags:
        - AppAdministration
      summary: Confirmar sincronização de aplicativos
      description: Confirma a sincronização de aplicativos.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: notificationId
          in: path
          description: ID da notificação de sincronização.
          required: true
          schema:
            type: string
            format: uuid
            example: 123e4567-e89b-12d3-a456-426614174000
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/bank-accounts:
    get:
      operationId: get-bank-accounts
      security:
        - OAuth2:
            - bankaccounts:read
      tags:
        - BankAccounts
      summary: Lista de contas bancárias
      description: Retorna lista de contas bancárias.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: bank_accounts_id
          in: query
          description: >-
            Filtro pelos IDs das contas bancárias. Pode passar mais de um ID
            numérico separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: name
          in: query
          description: Filtro pelo nome da conta bancária.
          schema:
            type: string
            example: Connectplug Bank
            maximum: 80
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista de conta bancária.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      bank_accounts:
                        type: array
                        description: Representa a lista de conta bancária
                        items:
                          $ref: '#/components/schemas/BankAccount'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-bank-accounts
      security:
        - OAuth2:
            - bankaccounts:write
      tags:
        - BankAccounts
      summary: Cria nova conta bancária
      description: Cria uma nova conta bancária.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        description: Corpo da requisição da criação da conta bancária.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BankAccountRequest'
      responses:
        '201':
          description: Conta bancária criada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/BankAccount'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/bank-accounts/{bankAccountId}:
    get:
      operationId: get-bank-account
      security:
        - OAuth2:
            - bankaccounts:read
      tags:
        - BankAccounts
      summary: Obtém uma conta bancária
      description: Retorna uma conta bancária.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: bankAccountId
          in: path
          description: ID da conta bancária.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Lista de conta bancária.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/BankAccount'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-bank-account
      security:
        - OAuth2:
            - bankaccounts:write
      tags:
        - BankAccounts
      summary: Atualiza uma conta bancária
      description: Atualiza uma conta bancária já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: bankAccountId
          in: path
          description: ID da conta bancária.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo da requisição da atualização da conta bancária.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BankAccountRequestUpdate'
      responses:
        '200':
          description: Conta bancária atualizada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/BankAccount'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-bank-account
      security:
        - OAuth2:
            - bankaccounts:delete
      tags:
        - BankAccounts
      summary: Apaga uma conta bancária
      description: Apaga uma conta bancária.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: bankAccountId
          in: path
          description: ID da conta bancária.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/bank-accounts/{bankAccountId}/history:
    get:
      operationId: get-bank-account-history
      security:
        - OAuth2:
            - bankaccounts:read
      tags:
        - BankAccounts
      summary: Obtém o histórico de uma conta bancária
      description: Retorna o histórico de uma conta bancária.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: bankAccountId
          in: path
          description: ID da conta bancária.
          required: true
          schema:
            type: integer
            format: int64
        - name: user_id
          in: query
          description: >
            Filtro pelo ID do usuário.


            Você pode localizar os IDs dos usuários no _endpoint_ de [listagem
            de usuários](#tag/Users/operation/get-users).
          schema:
            type: integer
            example: 1
        - $ref: '#/components/parameters/BankAccountTransactionDateFrom'
        - $ref: '#/components/parameters/BankAccountTransactionDateTo'
        - $ref: '#/components/parameters/BankAccountTransactionType'
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
      responses:
        '200':
          description: Lista de conta bancária.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/BankAccountHistory'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/bank-accounts/{bankAccountId}/transactions:
    get:
      operationId: get-bank-account-transactions
      security:
        - OAuth2:
            - bankaccounts:read
      tags:
        - BankAccounts
      summary: Obtém as movimentações de uma conta bancária
      description: Retorna as movimentações de uma conta bancária.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: bankAccountId
          in: path
          description: ID da conta bancária.
          required: true
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/BankAccountTransactionDateFrom'
        - $ref: '#/components/parameters/BankAccountTransactionDateTo'
        - $ref: '#/components/parameters/BankAccountTransactionType'
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
      responses:
        '200':
          description: Lista de transações de uma conta bancária.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/BankAccountTransactionData'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/cards/brands:
    get:
      operationId: get-cards-brands
      security:
        - OAuth2:
            - cards:read
      tags:
        - CardBrands
      summary: Lista de bandeiras de cartões
      description: Retorna lista de bandeiras de cartões.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: card_brands_id
          in: query
          description: >-
            Filtro pelos IDs das bandeiras dos cartões. Pode passar mais de um
            ID numérico separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: name
          in: query
          description: Filtro pelo nome da bandeira.
          schema:
            type: string
            example: Master
            maximum: 80
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Lista de bandeiras de cartões.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      card_brands:
                        type: array
                        description: Representa a lista de bandeiras de cartões
                        items:
                          $ref: '#/components/schemas/CardBrand'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/cards/contracts:
    get:
      operationId: get-cards-contracts
      security:
        - OAuth2:
            - cardContracts:read
      tags:
        - CardContracts
      summary: Lista de contratos de cartão
      description: Retorna lista de contratos de cartão.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: card_contract_ids
          in: query
          description: >-
            Filtro pelos IDs dos contratos dos cartões. Pode passar mais de um
            ID numérico separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: title
          in: query
          description: Filtro pelo título do contrato.
          schema:
            type: string
            example: Cielo
            maximum: 60
        - name: code
          in: query
          description: Filtro pelo código do contrato.
          schema:
            type: string
            example: CIE
            maximum: 60
        - name: status
          in: query
          description: Filtro pelo status do contrato.
          schema:
            type: string
            enum:
              - active
              - inactive
            default: inactive
            example: active
        - name: has_automatic_grouping
          in: query
          description: Filtro pelo agrupamento.
          schema:
            type: boolean
        - name: bank_account_id
          in: query
          description: Filtro pelo Id da conta bancária.
          schema:
            type: number
          example: 109
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Lista de contratos de cartão.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      card_contracts:
                        type: array
                        description: Representa a lista de contratos de cartão
                        items:
                          $ref: '#/components/schemas/CardContractDetail'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-cards-contracts
      security:
        - OAuth2:
            - cardContracts:read
      tags:
        - CardContracts
      summary: Criar um novo contrato de cartão
      description: Cria um novo contrato de cartão.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/CardContractRequest'
      responses:
        '201':
          description: Novo contrato criada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CardContractDetail'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/cards/contracts/{cardContractId}:
    get:
      operationId: get-single-cards-contract
      security:
        - OAuth2:
            - cardContracts:read
      tags:
        - CardContracts
      summary: Obtém um contrato de cartão
      description: Retorna um contrato de cartão.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: cardContractId
          in: path
          description: ID do contrato do cartão.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Contrato de cartão.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CardContractDetail'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-cards-contract
      security:
        - OAuth2:
            - cardContracts:write
      tags:
        - CardContracts
      summary: Atualiza um contrato de cartão
      description: Atualiza um contrato de cartão.
      parameters:
        - name: Idempotency-Key
          in: header
          description: >-
            UUID aleatório gerado por você. Nós utilizamos esse header para
            evitar duplicidade de registros, ou seja, caso você não tenha
            recebido a resposta de alguma requisição e mandar o mesmo UUID, nós
            não duplicaremos o registro.
          required: true
          schema:
            type: string
            format: uuid
        - name: CPlug-Company-Id
          in: header
          description: >
            Id da Empresa (Company).


            Você pode localizar os IDs das empresas no _endpoint_ de listagem de
            Empresas: `GET /api/v3/companies`.
          required: true
          schema:
            type: number
            example: 12
        - name: cardContractId
          in: path
          description: ID do contrato do cartão.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/CardContractUpdateRequest'
      responses:
        '200':
          description: Contrato de cartão atualizado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CardContractDetail'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-cards-contract
      security:
        - OAuth2:
            - cardContracts:delete
      tags:
        - CardContracts
      summary: Apaga um contrato de cartão
      description: Apaga um contrato de cartão.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: cardContractId
          in: path
          description: ID do contrato do cartão.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/cards/providers:
    get:
      operationId: get-cards-providers
      security:
        - OAuth2:
            - cardContracts:read
      tags:
        - CardProviders
      summary: Lista de provedores de cartão
      description: Retorna lista de provedores de cartão.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: card_provider_ids
          in: query
          description: >-
            Filtro pelos IDs dos provedores dos cartões. Pode passar mais de um
            ID numérico separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: name
          in: query
          description: Filtro pelo nome do provedor.
          schema:
            type: string
            example: Mercado Pago
            maximum: 60
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Lista de provedores de cartão.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      card_providers:
                        type: array
                        description: Representa a lista de provedores de cartão
                        items:
                          $ref: '#/components/schemas/CardProvider'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/cash-registers:
    get:
      operationId: list-cash-registers
      security:
        - OAuth2:
            - cash-registers:read
      tags:
        - CashRegisters
      summary: Lista caixas registradoras
      description: Retorna uma lista paginada de caixas registradoras.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: name
          in: query
          description: Filtrar por nome.
          required: false
          schema:
            type: string
        - name: status
          in: query
          description: Filtrar por status do registro de caixa.
          required: false
          schema:
            type: string
            enum:
              - active
              - inactive
            example: active
        - name: server_offline_id
          in: query
          description: Filtrar por ID do servidor offline.
          required: false
          schema:
            type: integer
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
        - name: deleted
          in: query
          description: Filtro para indicar se deve retornar dados apagados ou não.
          schema:
            type: string
            enum:
              - not_include
              - include
              - only
            default: not_include
            example: not_include
      responses:
        '200':
          description: Lista de caixas registradoras disponíveis.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      cash_registers:
                        type: array
                        description: Representa a lista de Caixas Registradoras
                        items:
                          $ref: '#/components/schemas/CashRegister'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      operationId: create-cash-register
      security:
        - OAuth2:
            - cash-registers:write
      tags:
        - CashRegisters
      summary: Criar caixa registradora
      description: Cria uma nova caixa registradora.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/CashRegister'
      responses:
        '201':
          description: Caixa registradora criada com sucesso.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/CashRegister'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/cash-registers/{cashRegisterId}:
    get:
      operationId: get-cash-register
      security:
        - OAuth2:
            - cash-registers:read
      tags:
        - CashRegisters
      summary: Obter caixa registradora
      description: Resgata uma caixa registradora já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: cashRegisterId
          in: path
          description: ID da caixa registradora.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Caixa registradora.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/CashRegister'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: update-cash-register
      security:
        - OAuth2:
            - cash-registers:write
      tags:
        - CashRegisters
      summary: Atualizar caixa registradora
      description: Atualiza uma caixa registradora existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: cashRegisterId
          in: path
          required: true
          description: ID da caixa registradora.
          schema:
            type: integer
      requestBody:
        $ref: '#/components/requestBodies/CashRegister'
      responses:
        '200':
          description: Caixa registradora atualizada.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/CashRegister'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-cash-register
      security:
        - OAuth2:
            - cash-registers:delete
      tags:
        - CashRegisters
      summary: Excluir caixa registradora
      description: Exclui uma caixa registradora existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: cashRegisterId
          in: path
          required: true
          description: ID da caixa registradora.
          schema:
            type: integer
      responses:
        '204':
          description: Caixa registradora excluída com sucesso.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v3/cost-centers:
    get:
      operationId: get-cost-centers
      security:
        - OAuth2:
            - cost-centers:read
      tags:
        - CostCenters
      summary: Lista dos centros de custos
      description: Retorna lista dos centros de custos disponíveis.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
        - name: search
          in: query
          description: Filtra pelo nome do centro de custo.
          schema:
            type: string
            example: Centro de custo ...
      responses:
        '200':
          description: Lista de centros de custos disponíveis.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      cost_centers:
                        type: array
                        description: Representa a lista de centros de custos
                        items:
                          $ref: '#/components/schemas/CostCenter'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-cost-centers
      security:
        - OAuth2:
            - cost-centers:write
      tags:
        - CostCenters
      summary: Cria um centro de custo
      description: Cria um centro de custo.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
      requestBody:
        $ref: '#/components/requestBodies/CostCenter'
      responses:
        '200':
          description: Centro de custo atualizado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CostCenter'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/cost-centers/{costCenterId}:
    get:
      operationId: get-cost-centers-id
      security:
        - OAuth2:
            - cost-centers:read
      tags:
        - CostCenters
      summary: Obtém um centro de custo
      description: Resgata um centro de custo já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: costCenterId
          in: path
          description: ID do centro de custo.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Representa um centro de custo.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CostCenter'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-cost-center
      security:
        - OAuth2:
            - cost-centers:write
      tags:
        - CostCenters
      summary: Atualiza um centro de custo
      description: Atualiza um centro de custo já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: costCenterId
          in: path
          description: ID do centro de custo.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/CostCenter'
      responses:
        '200':
          description: Centro de custo atualizado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CostCenter'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-cost-centers
      security:
        - OAuth2:
            - cost-centers:delete
      tags:
        - CostCenters
      summary: Apaga um centro de custo
      description: Apaga um centro de custo.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: costCenterId
          in: path
          description: ID do centro de custo.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /oauth/token:
    post:
      operationId: post-oauth-token
      security: []
      tags:
        - Authentication
      summary: Solicita Access Token
      description: Solicita Access Token.
      requestBody:
        $ref: '#/components/requestBodies/AccessToken'
      responses:
        '201':
          description: Nova Access Token gerado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessToken'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OauthError'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OauthError'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OauthError'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OauthError'
    delete:
      operationId: delete-oauth-token
      security: []
      tags:
        - Authentication
      summary: Revogar Access Token
      description: >
        Revogar Access Token.


        Invalida o Token de Acesso que for utilizado no `Authorization: Bearer
        <ACCESS_TOKEN>` da requisição.
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/v3/oauth/scopes:
    get:
      operationId: get-oauth-scopes
      security: []
      tags:
        - Authentication
      summary: Lista de escopos
      description: Retorna lista de escopos de autenticação disponíveis.
      responses:
        '200':
          description: Lista de escopos de autenticação disponíveis.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      scopes:
                        type: array
                        description: Representa a lista de escopos
                        items:
                          $ref: '#/components/schemas/Scope'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OauthError'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OauthError'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OauthError'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OauthError'
  /api/v3/legacy/login:
    post:
      operationId: post-legacy-login
      tags:
        - Authentication
      summary: Login legado
      description: >-
        Endpoint que faz login no sistema legado e redireciona de modo
        automático para o site da CPlug.
      requestBody:
        $ref: '#/components/requestBodies/LegacyLogin'
      responses:
        '200':
          description: >-
            Login realizado com sucesso e faz o redirecionamento para o site da
            CPlug.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  message:
                    type: string
                    example: Login realizado com sucesso
                  redirect_url:
                    type: string
                    example: https://cplug.com.br
        '302':
          description: Redirecionamento para o site da CPlug
          headers:
            Location:
              description: URL de redirecionamento
              schema:
                type: string
                example: https://cplug.com.br
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OauthError'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OauthError'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OauthError'
  /api/v3/categories:
    get:
      operationId: get-categories
      security:
        - OAuth2:
            - categories:read
      tags:
        - Categories
      summary: Lista de categorias
      description: Retorna lista de categorias de produtos disponíveis.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: categories_id
          in: query
          description: >-
            Filtra pelos IDs das categorias. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: name
          in: query
          description: Filtra pelo nome da categoria.
          schema:
            type: string
            example: pizzas
        - name: code
          in: query
          description: Filtra pelo código da categoria.
          schema:
            type: string
            example: PZ
        - name: status
          in: query
          description: Filtra por status.
          schema:
            type: string
            enum:
              - available
              - unavailable
            example: unavailable
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
        - name: with_parents
          in: query
          description: >-
            Ao informar true e combinado com as buscas por name ou code retorna
            a hierarquia das categorias pai caso a busca encontre categorias de
            níveis inferiores (filhas, netas...).
          schema:
            type: boolean
            default: 0
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
        - name: deleted
          in: query
          description: Filtro para indicar se deve retornar dados apagados ou não.
          schema:
            type: string
            enum:
              - not_include
              - include
              - only
            default: not_include
            example: not_include
      responses:
        '200':
          description: Lista de categorias de produtos disponíveis.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      categories:
                        type: array
                        description: Representa a lista de Categorias
                        items:
                          $ref: '#/components/schemas/Category'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-categories
      security:
        - OAuth2:
            - categories:write
      tags:
        - Categories
      summary: Cria nova categoria
      description: Cria nova categoria de produtos.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/Category'
      responses:
        '201':
          description: Nova categoria criada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Category'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/categories/{categoryId}:
    get:
      operationId: get-categories-id
      security:
        - OAuth2:
            - categories:read
      tags:
        - Categories
      summary: Obtém uma categoria
      description: Obtém informações sobre uma categoria.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: categoryId
          in: path
          description: ID da categoria.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Categoria de Produto.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Category'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-categories
      security:
        - OAuth2:
            - categories:write
      tags:
        - Categories
      summary: Atualiza uma categoria
      description: Atualiza uma categoria de produtos já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: categoryId
          in: path
          description: ID da categoria.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/Category'
      responses:
        '200':
          description: Categoria atualizada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Category'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-categories
      security:
        - OAuth2:
            - categories:delete
      tags:
        - Categories
      summary: Apaga uma categoria
      description: Apaga uma categoria de produtos.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: categoryId
          in: path
          description: ID da categoria.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/categories/reorder:
    put:
      operationId: reorder-categories
      security:
        - OAuth2:
            - categories:write
      tags:
        - Categories
      summary: Reordena as categorias
      description: Reordena a lista de categorias de produtos.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
      requestBody:
        description: Corpo requisição da reordenação de categorias.
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                categories:
                  type: array
                  description: >-
                    Representa a lista de ids de categorias com a nova
                    ordenação.
                  items:
                    type: integer
                  example:
                    - 2
                    - 3
                    - 5
                    - 1
                    - 4
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/icons:
    get:
      operationId: get-icons
      security:
        - OAuth2:
            - icons:read
      tags:
        - Icons
      summary: Lista de ícones
      description: Retorna uma lista de ícones.
      responses:
        '200':
          description: Lista de ícones.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      icons:
                        type: array
                        description: Representa a lista de ícones
                        items:
                          $ref: '#/components/schemas/Icon'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: create-icon
      security:
        - OAuth2:
            - icons:write
      tags:
        - Icons
      summary: Cria um novo ícone
      description: Cria um novo ícone.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/Icon'
                - type: object
                  properties:
                    icon:
                      type: string
                      format: base64
                      description: Base64 do ícone.
                      example: >-
                        data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABjUlEQVQ4jY2Tz0vDUBiGn
      responses:
        '200':
          description: Icone criado com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Icon'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/icons/{iconId}:
    get:
      operationId: get-icon-by-id
      security:
        - OAuth2:
            - icons:read
      tags:
        - Icons
      summary: Obtém um ícone
      description: Retorna um ícone.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: iconId
          in: path
          description: Identificador único do icone.
          required: true
          schema:
            type: integer
            example: 123
      responses:
        '200':
          description: Icone buscado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Icon'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: update-icons-id
      security:
        - OAuth2:
            - icons:write
      tags:
        - Icons
      summary: Atualiza um ícone
      description: Atualiza um ícone.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: iconId
          in: path
          description: ID do icone.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/Icon'
                - type: object
                  properties:
                    icon:
                      type: string
                      format: base64
                      description: Base64 do ícone.
                      example: >-
                        data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABjUlEQVQ4jY2Tz0vDUBiGn
      responses:
        '200':
          description: Icone atualizado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Icon'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-icon
      security:
        - OAuth2:
            - icons:delete
      tags:
        - Icons
      summary: Apaga um ícone
      description: Apaga um Icone.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: iconId
          in: path
          description: Identificador único do Icone.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/integrations:
    get:
      operationId: get-integrations
      security:
        - OAuth2:
            - integrations:read
      tags:
        - Integrations
      summary: Lista de integrações
      description: >
        Retorna lista de integrações disponíveis no sistema e seu status para o
        usuário.


        **O sistema suporta múltiplos tipos de integração** (delivery, tapp,
        ERP, general) com dezenas de fornecedores diferentes. Cada integração
        pode ter status ativo ou inativo conforme a configuração do usuário.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: name
          in: query
          description: Filtra pelo nome da integração.
          schema:
            type: string
            example: Accon
        - name: type
          in: query
          description: >
            Filtra pelo tipo da integração.


            - `delivery` integrações de delivery (Epadoca, Delivery Direto,
            iFood, Rappi, etc.)

            - `tapp` integrações de tapp/chopp (EasyChopp, Beerpass, ITap,
            Enjoy, etc.)

            - `general` integrações gerais (Fidelidade, CRM & Bonus, Todo
            Cartões, etc.)

            - `erp` integrações de ERP (Tray, etc.)
          schema:
            type: string
            enum:
              - delivery
              - tapp
              - general
              - erp
            example: tapp
        - name: status
          in: query
          description: |
            Filtra pelo status da integração.

            - `active` integração ativa
            - `inactive` integração inativa
          schema:
            type: string
            enum:
              - active
              - inactive
            example: active
        - $ref: '#/components/parameters/DeletedQuery'
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista de integrações.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      integrations:
                        type: array
                        description: Representa a lista de integrações.
                        items:
                          $ref: '#/components/schemas/Integration'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/integrations/{integrationId}:
    get:
      operationId: get-integration-by-id
      security:
        - OAuth2:
            - integrations:read
      tags:
        - Integrations
      summary: Obtém uma integração
      description: >
        Retorna os detalhes completos de uma integração específica incluindo
        autenticação e configurações.


        **O sistema suporta múltiplos tipos de integração** com diferentes
        fornecedores. Os campos retornados variam conforme o tipo e fornecedor
        da integração.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: integrationId
          in: path
          description: ID da integração.
          required: true
          schema:
            type: integer
            format: int64
            example: 5
      responses:
        '200':
          description: Detalhes da integração.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/IntegrationDetail'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-integration-by-id
      security:
        - OAuth2:
            - integrations:write
      tags:
        - Integrations
      summary: Atualiza uma integração
      description: >
        Atualiza uma integração existente incluindo suas credenciais de
        autenticação e configurações.


        **O sistema suporta múltiplos tipos de integração** (delivery, tapp,
        ERP, general) com diferentes fornecedores. Cada integração possui
        requisitos únicos de campos obrigatórios para autenticação e
        configuração.


        **Tipos de integração suportados incluem (não exaustivo):**

        - **Delivery**: Epadoca, Delivery Direto, iFood, Rappi, Aiqfome, Neemo,
        Onpedido, Quero Delivery, etc.

        - **Tapp**: EasyChopp, Beerpass, ITap, Enjoy, etc.

        - **ERP**: Tray, etc.

        - **General**: Fidelidade, CRM & Bonus, Todo Cartões, etc.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: integrationId
          in: path
          description: ID da integração.
          required: true
          schema:
            type: integer
            format: int64
            example: 5
      requestBody:
        $ref: '#/components/requestBodies/IntegrationUpdate'
      responses:
        '200':
          description: Integração atualizada com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/IntegrationUpdateResponse'
              examples:
                epadoca_success:
                  summary: Exemplo - Epadoca (Delivery) - Ativação bem-sucedida
                  value:
                    data:
                      id: 45
                      name: Epadoca
                      key: epadoca
                      type: delivery
                      auth:
                        credentials:
                          - client_id: epadoca_client_12345
                            client_secret: epadoca_secret_abcdef
                            status_code: 200
                            authenticated: true
                            access_token: >-
                              eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiIxIiwianRpIjoiYWJjZGVmZ2hpams
                            expires_in: '2024-01-20 18:45:30'
                            message: Autorizado com sucesso
                        status: success
                        message: Integração ativada com sucesso
                      configs:
                        payment_method_id: 1
                        seller_id: 8
                        auto_accept_order: true
                        name: Epadoca
                        url: https://api.epadoca.com/v1/
                        logo: build/images/integrations/epadoca.png
                        cover: build/images/integrations/epadoca_cover.png
                      rules:
                        - auth.credentials
                        - auth.credentials.*.client_id
                        - auth.credentials.*.client_secret
                        - configs.payment_method_id
                        - configs.seller_id
                        - configs.auto_accept_order
                      image: >-
                        http://erp.connectplug.com.br/build/images/integrations/epadoca.png
                      status: active
                      integration_status: Autorizado com sucesso
                      deleted: false
                      created_at: '2024-01-15T10:30:00.000000Z'
                      updated_at: '2024-01-20T15:45:30.000000Z'
                delivery_direto_success:
                  summary: Exemplo - Delivery Direto (Delivery) - Ativação bem-sucedida
                  value:
                    data:
                      id: 67
                      name: Delivery Direto
                      key: delivery_direto
                      type: delivery
                      auth:
                        credentials:
                          - merchant_name: Restaurante ABC
                            username: restaurante_abc
                            password: senha123
                            integration_id: dd_integration_456
                            authenticated: true
                            access_token: bearer_token_xyz789
                            expires_in: '2024-01-20 17:30:15'
                            message: Autorizado com sucesso
                        status: success
                        message: Integração ativada com sucesso
                      configs:
                        payment_method_id: 2
                        seller_id: 5
                        auto_accept_order: false
                      image: >-
                        http://erp.connectplug.com.br/build/images/integrations/delivery_direto.png
                      status: active
                      integration_status: Autorizado com sucesso
                      deleted: false
                      created_at: '2024-01-15T08:20:00.000000Z'
                      updated_at: '2024-01-20T17:30:15.000000Z'
                epadoca_failure:
                  summary: Exemplo - Epadoca (Delivery) - Falha na autenticação
                  value:
                    data:
                      id: 45
                      name: Epadoca
                      key: epadoca
                      type: delivery
                      auth:
                        credentials:
                          - client_id: epadoca_client_12345
                            client_secret: senha_incorreta
                            status_code: 401
                            authenticated: false
                            message: Credenciais inválidas
                        status: fail
                        message: Falha na autenticação
                      configs:
                        payment_method_id: 1
                        seller_id: 8
                        auto_accept_order: true
                      image: >-
                        http://erp.connectplug.com.br/build/images/integrations/epadoca.png
                      status: inactive
                      integration_status: Credenciais inválidas
                      deleted: false
                      created_at: '2024-01-15T10:30:00.000000Z'
                      updated_at: '2024-01-20T14:22:10.000000Z'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-integration-by-id
      security:
        - OAuth2:
            - integrations:delete
      tags:
        - Integrations
      summary: Apaga uma integração
      description: |
        Apaga uma integração do sistema.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: integrationId
          in: path
          description: ID da integração.
          required: true
          schema:
            type: integer
            format: int64
            example: 23
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/integrations/{integrationId}/restore:
    post:
      operationId: post-integration-restore
      security:
        - OAuth2:
            - integrations:write
      tags:
        - Integrations
      summary: Restaura uma integração
      description: |
        Restaura uma integração que foi previamente apagada.

        **Condições para restauração:**
        - A integração deve existir no sistema
        - A integração deve estar "apagada"
        - O usuário deve ter permissão para restaurar integrações
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: integrationId
          in: path
          description: ID da integração a ser restaurada.
          required: true
          schema:
            type: integer
            format: int64
            example: 23
      responses:
        '200':
          description: Integração restaurada com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/IntegrationDetail'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: Integração não encontrada.
          $ref: '#/components/responses/NotFound'
        '422':
          description: Integração não está deletada ou não pode ser restaurada.
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/integrations/tray/products:
    get:
      operationId: get-integrations-tray-products
      security:
        - OAuth2:
            - integrations:read
      tags:
        - Tray
      summary: Lista produtos da integração Tray
      description: >
        Retorna a lista de produtos da integração Tray com informações de
        conciliação entre o sistema ERP e a loja.


        **Esta integração permite sincronizar produtos entre o sistema ERP e a
        plataforma Tray**, facilitando a gestão de catálogos e estoques.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - name: erp_id
          in: query
          description: Filtra pelo ID do produto no sistema ERP.
          schema:
            type: integer
            minimum: 1
            example: 4
        - name: erp_name
          in: query
          description: Filtra pelo nome do produto no sistema ERP.
          schema:
            type: string
            example: vestidinho
        - name: store_id
          in: query
          description: Filtra pelo ID do produto na loja Tray.
          schema:
            type: string
            example: '31'
        - name: store_name
          in: query
          description: Filtra pelo nome do produto na loja Tray.
          schema:
            type: string
            example: vestidinho
        - name: conciliate
          in: query
          description: |
            Filtra produtos por status de conciliação.

            - `conciliate` apenas produtos conciliados
            - `not_conciliate` apenas produtos não conciliados
            - `only` todos os produtos (padrão)
          schema:
            type: string
            enum:
              - conciliate
              - not_conciliate
              - only
            default: only
            example: only
      responses:
        '200':
          description: Lista de produtos da integração Tray.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrayProducts'
              example:
                data:
                  products:
                    - integration_id: 98
                      product_erp:
                        id: 4
                        name: vestidinho
                      product_store:
                        id: 31
                        name: vestidinho
                      is_conciliate: true
                      error: null
                    - integration_id: 93
                      product_erp:
                        id: 5
                        name: Babado
                      product_store:
                        id: 21
                        name: Babado
                      is_conciliate: true
                      error: null
                    - integration_id: null
                      product_erp:
                        id: 35
                        name: Teste Atributo
                      product_store:
                        id: 0
                        name: ''
                      is_conciliate: false
                      error: null
                meta:
                  current_page: 1
                  from: 1
                  last_page: 1
                  per_page: 100
                  to: 32
                  total: 32
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/integrations/tray/products/{productId}/conciliation:
    put:
      operationId: put-integrations-tray-products-productId-conciliation
      security:
        - OAuth2:
            - integrations:write
      tags:
        - Tray
      summary: Conciliar produtos da integração Tray
      description: >
        Executa a conciliação ou desconciliação de produtos da plataforma Tray
        com produtos do sistema ERP.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productId
          in: path
          required: true
          description: ID do produto da integração Tray.
          schema:
            type: integer
            minimum: 1
          example: 123
      requestBody:
        $ref: '#/components/requestBodies/TrayProductsConciliationBody'
      responses:
        '200':
          description: Produto conciliado/desconciliado com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrayProduct'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/integrations/tray/import-products:
    post:
      operationId: post-integrations-tray-products-import
      security:
        - OAuth2:
            - integrations:write
      tags:
        - Tray
      summary: Importar produtos da integração Tray
      description: >
        Inicia o processo de importação de produtos da plataforma Tray para o
        sistema ERP.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
      requestBody:
        $ref: '#/components/requestBodies/TrayProductsImportBody'
      responses:
        '200':
          description: Processo de importação iniciado com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrayProductsJobResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-integrations-tray-products-import
      security:
        - OAuth2:
            - integrations:delete
      tags:
        - Tray
      summary: Apagar importação de produtos
      description: |
        Remove o processo de importação de produtos da plataforma Tray.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v3/integrations/tray/import-products/status:
    get:
      operationId: get-integrations-tray-products-import-status
      security:
        - OAuth2:
            - integrations:read
      tags:
        - Tray
      summary: Verifica situação da importação
      description: >
        Verifica o status atual do processo de importação de produtos da
        plataforma Tray.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
      responses:
        '200':
          description: Status da importação retornado com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrayProductsJobResponse'
              example:
                data:
                  total: 2
                  processed: 2
                  success: 2
                  failed: 0
                  finished: true
                  progress: 100
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v3/integrations/tray/export-products:
    post:
      operationId: post-integrations-tray-products-export
      security:
        - OAuth2:
            - integrations:write
      tags:
        - Tray
      summary: Exportar produtos da integração Tray
      description: >
        Inicia o processo de exportação de produtos do sistema ERP para a
        plataforma Tray.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
      requestBody:
        $ref: '#/components/requestBodies/TrayProductsExportBody'
      responses:
        '200':
          description: Processo de exportação iniciado com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrayProductsJobResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-integrations-tray-products-export
      security:
        - OAuth2:
            - integrations:delete
      tags:
        - Tray
      summary: Apagar exportação de produtos
      description: |
        Remove o processo de exportação de produtos para a plataforma Tray.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v3/integrations/tray/export-products/status:
    get:
      operationId: get-integrations-tray-products-export-status
      security:
        - OAuth2:
            - integrations:read
      tags:
        - Tray
      summary: Verifica situação da exportação
      description: >
        Verifica o status atual do processo de exportação de produtos para a
        plataforma Tray.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
      responses:
        '200':
          description: Status da exportação retornado com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrayProductsJobResponse'
              example:
                data:
                  total: 2
                  processed: 2
                  success: 2
                  failed: 0
                  finished: true
                  progress: 100
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v3/cities:
    get:
      operationId: get-cities
      security:
        - OAuth2:
            - cities:read
      tags:
        - Cities
      summary: Lista de cidades
      description: Retorna uma lista de cidades.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: cities_id
          in: query
          description: >-
            Filtra pelos IDs das cidades na CPlug. Pode passar mais de um ID
            numérico separado por virgula.
          schema:
            type: string
            example: 3898,1234
        - name: city
          in: query
          description: Filtra pelo nome da cidade.
          schema:
            type: string
            example: São Paulo
        - name: state
          in: query
          description: Filtra pela sigla do estado.
          schema:
            type: string
            example: SP
        - name: ibge_code
          in: query
          description: Filtra pelo código do IBGE.
          schema:
            type: string
            example: '3550308'
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
      responses:
        '200':
          description: Lista de cidades.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      cities:
                        type: array
                        description: Representa a lista de cidades
                        items:
                          $ref: '#/components/schemas/City'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/companies:
    get:
      operationId: get-companies
      security:
        - OAuth2:
            - companies:read
      tags:
        - Companies
      summary: Lista de empresas
      description: Retorna lista de empresas.
      parameters:
        - name: companies_id
          in: query
          description: >-
            Filtro pelos IDs das empresas. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: name
          in: query
          description: Filtro pelo nome fantasia da empresa.
          schema:
            type: string
            example: Connectplug
            maximum: 120
        - name: company_name
          in: query
          description: Filtro pela razão social da empresa.
          schema:
            type: string
            example: ConnectPlug Desenvolvimento de Software LTDA
            maximum: 120
        - name: cnpj
          in: query
          description: Filtro pelo CNPJ da empresa.
          schema:
            type: string
            example: 13.807.874/0001-05
            maximum: 40
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Lista de empresas.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      companies:
                        type: array
                        description: Representa a lista de empresas
                        items:
                          $ref: '#/components/schemas/Company'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-companies
      security:
        - OAuth2:
            - companies:create
      tags:
        - Companies
      summary: Cria uma nova empresa
      description: Cria uma nova empresa.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/Company'
      responses:
        '201':
          description: Nova empresa criada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Company'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/companies/{companyId}:
    get:
      operationId: get-companies-id
      security:
        - OAuth2:
            - companies:read
      tags:
        - Companies
      summary: Obtém uma empresa
      description: Resgata uma empresa já existente.
      parameters:
        - name: companyId
          in: path
          description: ID da empresa.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Dados da Empresa.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Company'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-companies
      security:
        - OAuth2:
            - companies:read
      tags:
        - Companies
      summary: Atualiza uma empresa
      description: Atualiza uma empresa já existente.
      parameters:
        - name: Idempotency-Key
          in: header
          description: >-
            UUID aleatório gerado por você. Nós utilizamos esse header para
            evitar duplicidade de registros, ou seja, caso você não tenha
            recebido a resposta de alguma requisição e mandar o mesmo UUID, nós
            não duplicaremos o registro.
          required: true
          schema:
            type: string
            format: uuid
        - name: companyId
          in: path
          description: ID da empresa.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/Company'
      responses:
        '200':
          description: Empresa atualizada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Company'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-companies-id
      security:
        - OAuth2:
            - companies:delete
      tags:
        - Companies
      summary: Apaga uma empresa
      description: |
        Apaga uma empresa específica.

        `Proibido deletar a empresa corrente`
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: companyId
          in: path
          description: ID da empresa.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/companies/{companyId}/image:
    post:
      operationId: post-companies-image
      security:
        - OAuth2:
            - companies:write
      tags:
        - Companies
      summary: Enviar logotipo da empresa
      description: |
        Faz o upload do logotipo da empresa.

        O arquivo deve ser enviado no formato base64.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: companyId
          in: path
          description: ID da empresa.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/UploadImageFile'
      responses:
        '200':
          description: Logotipo da empresa enviado com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      image_url:
                        type: string
                        format: uri
                        description: URL para acessar o conteúdo da imagem
                        example: >-
                          https://connectplug.com.br/api/v3/files/ey123123..../download
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/companies/{companyId}/upload-certificate:
    post:
      operationId: post-companies-upload-certificate
      security:
        - OAuth2:
            - companies:write
      tags:
        - Companies
      summary: Upload de certificado
      description: |
        Upload de certificado de uma empresa.

        O tamanho máximo do arquivo é 1 MB.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: companyId
          in: path
          description: ID da empresa.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/UploadCertificateFile'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/companies/{companyId}/revoke-api-token:
    post:
      operationId: post-companies-revoke-api-token
      security:
        - OAuth2:
            - companies:write
      tags:
        - Companies
      summary: Revoga licença
      description: |
        Cancela o acesso de todos aplicativos à empresa.

        É necessário fornecer a senha para confirmar a operação.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: companyId
          in: path
          description: ID da empresa.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              required:
                - password
              properties:
                password:
                  type: string
                  description: Senha do usuário para confirmar a revogação do token
                  example: '123123'
      responses:
        '204':
          description: Token de API revogado.
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/companies/{companyId}/get-api-token:
    post:
      operationId: post-companies-get-api-token
      security:
        - OAuth2:
            - companies:read
      tags:
        - Companies
      summary: Obtém token de API
      description: |
        Obtém o token de API.

        É necessário fornecer a senha para confirmar a operação.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: companyId
          in: path
          description: ID da empresa.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              required:
                - password
              properties:
                password:
                  type: string
                  description: Senha do usuário para confirmar a obtenção do token
                  example: suasenha
      responses:
        '200':
          description: Token de API obtido com sucesso.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/ApiTokenData'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/companies/{companyId}/billing:
    get:
      operationId: get-companies-billing
      security:
        - OAuth2:
            - companies:read
      tags:
        - CompaniesBilling
      summary: Obtém dados de cobrança da empresa
      description: Resgata os dados de cobrança de uma empresa já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: companyId
          in: path
          description: ID da empresa.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Dados de cobrança da empresa.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/CompanyBilling'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-companies-billing
      security:
        - OAuth2:
            - companies:update
      tags:
        - CompaniesBilling
      summary: Atualiza dados de cobrança da empresa
      description: Atualiza os dados de cobrança de uma empresa já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: companyId
          in: path
          description: ID da empresa.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/CompanyBillingBody'
      responses:
        '200':
          description: Dados de cobrança da empresa atualizados.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/CompanyBilling'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/companies/{companyId}/use-definitions:
    get:
      operationId: get-companies-use-definitions
      security:
        - OAuth2:
            - companies:read
      tags:
        - CompaniesUseDefinitions
      summary: Obtém definições de uso da empresa
      description: Resgata as definições de uso de uma empresa já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: companyId
          in: path
          description: ID da empresa.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Definições de uso da empresa.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/CompanyUseDefinitions'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-companies-use-definitions
      security:
        - OAuth2:
            - companies:update
      tags:
        - CompaniesUseDefinitions
      summary: Atualiza definições de uso da empresa
      description: Atualiza as definições de uso de uma empresa já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: companyId
          in: path
          description: ID da empresa.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/CompanyUseDefinitionsBody'
      responses:
        '200':
          description: Definições de uso da empresa atualizadas.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/CompanyUseDefinitions'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/companies/batch-delete:
    post:
      operationId: batch-delete-companies
      security:
        - OAuth2:
            - companies:delete
      tags:
        - Companies
      summary: Deleta empresas em massa
      description: |
        Apaga empresas em massa.

        `Proibido deletar a empresa corrente`
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
        - $ref: '#/components/parameters/CPlugCompanyId'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                company_ids:
                  type: array
                  items:
                    type: integer
                    example: 1
                  example:
                    - 2
                    - 3
              required:
                - company_ids
        required: true
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/cnaes:
    get:
      operationId: get-cnaes
      security:
        - OAuth2:
            - companies:read
      tags:
        - Companies
      summary: Lista de CNAEs
      description: Retorna uma lista de CNAEs.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: search_term
          in: query
          description: Filtra pelo código ou nome da CNAE.
          schema:
            type: string
            example: Cultivo de trigo
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista de CNAEs.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      cnaes:
                        type: array
                        description: Representa a lista de CNAEs
                        items:
                          $ref: '#/components/schemas/Cnae'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/units:
    get:
      operationId: get-units
      security:
        - OAuth2:
            - units:read
      tags:
        - Units
      summary: Lista de unidades de medidas
      description: Retorna lista das unidades de medidas disponíveis.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: units_id
          in: query
          description: >-
            Filtra pelos IDs das unidades de medida. Pode passar mais de um ID
            numérico separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: name
          in: query
          description: Filtra pelo nome da unidade de medida.
          schema:
            type: string
            example: kilos
        - name: abbreviation
          in: query
          description: >-
            Filtra pela sigla da unidade de medida. Veja a tabela com todas as
            referências em [Tabela de Unidades de
            medida](#section/Conhecimento-Geral/Tabelas).
          schema:
            type: string
            example: kg
        - name: search
          in: query
          description: >-
            Filtra pelo <u>nome</u> ou pela <u>sigla</u> da unidade de medida.
            Veja a tabela com todas as referências em [Tabela de Unidades de
            medida](#section/Conhecimento-Geral/Tabelas).
          schema:
            type: string
            example: metro
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
        - name: deleted
          in: query
          description: Filtro para indicar se deve retornar dados apagados ou não.
          schema:
            type: string
            enum:
              - not_include
              - include
              - only
            default: not_include
            example: not_include
      responses:
        '200':
          description: Lista das unidades de medidas disponíveis.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      units:
                        type: array
                        description: Representa a lista das unidades de medidas.
                        items:
                          $ref: '#/components/schemas/MeasurementUnit'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-units
      security:
        - OAuth2:
            - units:write
      tags:
        - Units
      summary: Cria nova unidade de medida
      description: Cria uma nova unidade de medida de produtos.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/MeasurementUnit'
      responses:
        '201':
          description: Nova unidade de medida criada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeasurementUnit'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/units/{unitId}:
    get:
      operationId: get-units-id
      security:
        - OAuth2:
            - units:read
      tags:
        - Units
      summary: Obtém uma unidade de medida
      description: Obtém uma unidade de medida.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: unitId
          in: path
          description: ID da unidade de medida.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Unidade de medida.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeasurementUnit'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-units
      security:
        - OAuth2:
            - units:write
      tags:
        - Units
      summary: Atualiza uma unidade de medida
      description: Atualiza uma unidade de medida.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: unitId
          in: path
          description: ID da unidade de medida.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/MeasurementUnit'
      responses:
        '200':
          description: Unidade de medida atualizada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeasurementUnit'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-units
      security:
        - OAuth2:
            - units:delete
      tags:
        - Units
      summary: Apaga uma unidade de medida
      description: Apaga uma unidade de medida.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: unitId
          in: path
          description: ID da unidade de medida.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products:
    get:
      operationId: get-products
      security:
        - OAuth2:
            - products:read
      tags:
        - Products
      summary: Lista de produtos
      description: Retorna lista de produtos cadastrados.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: products_id
          in: query
          description: >-
            Filtra pelos IDs dos produtos. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: search
          in: query
          description: >-
            Filtra pelas principais propriedades do produto, incluindo `name`,
            `sku`, e `description`.
          schema:
            type: string
            example: Celular
        - name: name
          in: query
          description: Filtra pelo nome do produto.
          schema:
            type: string
            example: Celular
        - name: sku
          in: query
          description: Filtra pelo SKU do produto.
          schema:
            type: string
            example: ABC123
        - name: categories_id
          in: query
          description: >-
            Filtra pelos IDs das categorias. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: unit_ids
          in: query
          description: Lista de IDs das unidades de medida para filtrar produtos.
          required: false
          style: form
          explode: false
          schema:
            type: array
            items:
              type: integer
              minimum: 1
          example:
            - 1
            - 2
            - 3
        - name: attribute_id
          in: query
          description: Filtra produtos contendo uma variação com esse ID.
          schema:
            type: number
            example: 123
        - name: price_list_ids
          in: query
          description: >-
            Filtra produtos associados a alguma lista de preços dentre os IDs
            informados. Permitido passar mais de um ID numérico separado por
            virgula.
          schema:
            type: string
            example: 1,2,3
        - name: price_list_ids_filter_type
          in: query
          description: >
            Altera o comportamento do filtro `price_list_ids`.

            - `include`: Retorna produtos que estão associados a alguma lista de
            preços dentre os IDs informados.

            - `exclude`: Exclui produtos que estão associados a alguma lista de
            preços dentre os IDs informados.
          schema:
            type: string
            enum:
              - include
              - exclude
            default: include
            example: include
        - name: barcode
          in: query
          description: Filtra pelo código de barra do produto.
          schema:
            type: string
            example: '1502298184770'
        - name: min_price
          in: query
          description: Filtra produtos com preço maior ou igual ao valor informado.
          schema:
            type: number
            format: float
            example: 10.5
        - name: max_price
          in: query
          description: Filtra produtos com preço menor ou igual ao valor informado.
          schema:
            type: number
            format: float
            example: 100
        - name: app_ids
          in: query
          description: >-
            Filtra produtos disponíveis nos aplicativos informados. Pode passar
            mais de um ID numérico separado por vírgula.
          schema:
            type: string
            example: 1,2,3
        - name: app_ids_filter_type
          in: query
          description: >
            Altera o comportamento do filtro `app_ids`.

            - `include`: Retorna produtos que estão disponíveis nos aplicativos
            informados.

            - `exclude`: Exclui produtos que estão disponíveis nos aplicativos
            informados.
          schema:
            type: string
            enum:
              - include
              - exclude
            default: include
            example: include
        - name: is_available_for_sale
          in: query
          description: |
            Filtra produtos disponíveis para venda nos aplicativos informados.
            Obrigatório informar `app_ids` quando este filtro for utilizado.
          schema:
            type: boolean
        - name: with_attributes
          in: query
          description: Filtro que seleciona produtos que contenham atributos.
          schema:
            type: boolean
        - name: with_grid
          in: query
          description: Filtro que seleciona produtos pelos atributos tipo grid.
          schema:
            type: boolean
        - name: with_optionals
          in: query
          description: Filtro que seleciona produtos pelos opcionais.
          schema:
            type: boolean
        - name: with_stock
          in: query
          description: Filtro que seleciona produtos pelo estoque.
          schema:
            type: boolean
        - name: with_price_list
          in: query
          description: >-
            Filtro permite retornar a listagem de listas de preços associados no
            produto.
          schema:
            type: boolean
        - name: order_by_field
          in: query
          description: |
            Ordena pelo campo.
            Exemplo:
              - `date` Data
              - `id` Código da transferência
          schema:
            type: string
            enum:
              - date
              - id
            default: date
            example: date
        - name: order_by_type
          $ref: '#/components/parameters/OrderByType'
        - name: types
          in: query
          description: >
            Filtro que seleciona produtos pelos tipos. Permitido passar mais de
            um tipo separado por virgula, sem espaços.


            - `simple`: Produto simples.

            - `combo`: Produto combo.

            - `production_process`: Processo produtivo.

            - `automatic_production`: Produção automática.

            - `component`: Insumo.
          schema:
            type: string
          example: simple,combo
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
        - name: created_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          required: false
          schema:
            type: string
            format: date-time
        - name: deleted
          in: query
          description: Filtro para indicar se deve retornar dados apagados ou não.
          schema:
            type: string
            enum:
              - not_include
              - include
              - only
            default: not_include
            example: not_include
      responses:
        '200':
          description: Lista de produtos cadastrados.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      products:
                        type: array
                        description: Representa a lista de produtos.
                        items:
                          $ref: '#/components/schemas/Product'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-products
      security:
        - OAuth2:
            - products:write
      tags:
        - Products
      summary: Cria novo produto
      description: Cria uma novo produto.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/Product'
      responses:
        '201':
          description: Novo produto criado criada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/{productId}:
    get:
      operationId: get-products-id
      security:
        - OAuth2:
            - products:read
      tags:
        - Products
      summary: Obtém um produto
      description: Resgata um produto já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Produto atualizado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-products
      security:
        - OAuth2:
            - products:write
      tags:
        - Products
      summary: Atualiza um produto
      description: >
        Atualiza um produto já existente.


        **ATENÇÃO:** Esse _endpoint_ sempre realiza o *sync* de dados dos compos
        `attributes` e `components`, ou seja, se por exemplo um produto já tenha
        atributos relacionados à ele e na edição o compo `attributes` for um
        *array* vazio, comportamento esperado é a remoção dos atributos do
        produto. 
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/Product'
      responses:
        '200':
          description: Produto atualizado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-products
      security:
        - OAuth2:
            - products:delete
      tags:
        - Products
      summary: Apaga um produto
      description: Apaga um produto.
      parameters:
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - in: query
          name: delete_mode
          schema:
            type: string
            enum:
              - default
              - ignore_association_rule
          description: "Ignorar a validação de relação com outros itens na exclusão. \n- _default_ (ou ausência) -\tAplica as regras normais de exclusão.\n- _ignore_association_rule_ - Exclui registros mesmo que tenham relações.\n"
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/{productId}/restore:
    post:
      operationId: post-products-id-restore
      security:
        - OAuth2:
            - products:write
      tags:
        - Products
      summary: Restaura um produto
      description: Restaura um produto que foi previamente excluído.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: productId
          in: path
          description: ID do produto a ser restaurado.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Produto restaurado com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/{productId}/duplicate:
    post:
      operationId: post-products-id-duplicate
      security:
        - OAuth2:
            - products:write
      tags:
        - Products
      summary: Duplica um produto
      description: Duplica um produto.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: productId
          in: path
          description: ID do produto a ser duplicado.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição de um produto.
        content:
          application/json:
            schema:
              type: object
              title: Produto
              description: Representa um Produto.
              properties:
                companies:
                  $ref: '#/components/schemas/ByCompany'
      responses:
        '201':
          description: Produto duplicado com sucesso.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Product'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/{productId}/image:
    post:
      operationId: post-products-image
      security:
        - OAuth2:
            - products:write.image
      tags:
        - Products
      summary: Atualiza imagem do produto
      description: |
        Adiciona ou atualiza a imagem principal do produto.

        A imagem deve ser do tipo JPEG ou PNG em base64.

        O tamanho máximo do arquivo é 5 MB.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/UploadImageFile'
      responses:
        '201':
          description: Nova imagem adicionada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductImage'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/barcodes:
    get:
      operationId: get-barcodes
      security:
        - OAuth2:
            - products:read
      tags:
        - Products
      summary: Gera códigos de barras
      description: Gera códigos de barras EAN-13 ou EAN-8 para utilizar em produtos.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: type
          in: query
          description: |
            Tipo do código de barras.

            - `ean13`: Código de barras EAN-13.
            - `ean8`: Código de barras EAN-8.
          schema:
            type: string
            enum:
              - ean13
              - ean8
            default: ean13
          example: ean13
        - name: amount
          in: query
          description: >-
            Quantidade de códigos de barras a serem gerados (mínimo 1, máximo
            20).
          schema:
            type: integer
            minimum: 1
            maximum: 20
            default: 1
          example: 1
      responses:
        '200':
          description: Lista de códigos de barras gerados.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      barcodes:
                        type: array
                        description: Lista de códigos de barras gerados.
                        items:
                          type: string
                          example: '3832661650631'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/{productId}/attributes:
    get:
      operationId: get-products-attributes
      security:
        - OAuth2:
            - products:read
      tags:
        - ProductAttributes
      summary: Lista os atributos
      description: Retorna a lista de atributos associados ao produto.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Lista de atributos do produto
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      attributes:
                        type: array
                        items:
                          $ref: '#/components/schemas/ProductAttributeAssociation'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-products-attributes
      security:
        - OAuth2:
            - products:write
      tags:
        - ProductAttributes
      summary: Atualiza os atributos
      description: Atualiza os atributos associados ao produto.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição de atributos do produto.
        required: true
        content:
          application/json:
            schema:
              type: object
              title: Atributos do produto
              description: Representa os atributos do produto.
              properties:
                attributes:
                  type: array
                  items:
                    $ref: '#/components/schemas/ProductAttributeAssociation'
      responses:
        '200':
          description: Lista de atributos do produto
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      attributes:
                        type: array
                        items:
                          $ref: '#/components/schemas/ProductAttributeAssociation'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/{productId}/attributes/{attributeId}:
    delete:
      operationId: delete-products-attributes
      security:
        - OAuth2:
            - products:delete
      tags:
        - ProductAttributes
      summary: Apaga atributo
      description: Apaga a associação do atributo com o produto em específico.
      parameters:
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - name: attributeId
          in: path
          description: ID do atributo.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/{productId}/compositions:
    parameters:
      - name: productId
        in: path
        required: true
        description: Identificador único do produto.
        schema:
          type: integer
          example: 3
    get:
      tags:
        - ProductCompositions
      summary: Lista as composições
      description: |
        Retorna as composições de um produto específico com filtros opcionais.
      operationId: getProductCompositions
      parameters:
        - name: search
          in: query
          required: false
          description: >-
            Termo de busca para filtrar composições (pode ser código de barras,
            nome, etc.).
          schema:
            type: string
            example: '5981945248564'
        - name: items_id
          in: query
          required: false
          description: Identificador específico do item para filtrar.
          schema:
            type: string
            example: 1,2,3
        - name: barcode
          in: query
          required: false
          description: Código de barras para filtrar composições.
          schema:
            type: string
            example: '5981945248564'
        - name: categories_id
          in: query
          required: false
          description: Identificador da categoria para filtrar composições.
          schema:
            type: string
            example: 1,2,3
        - name: withComponent
          in: query
          required: false
          description: Incluir informações detalhadas dos componentes.
          schema:
            type: boolean
            default: true
            example: true
        - name: withDisabled
          in: query
          required: false
          description: Incluir composições desabilitadas na resposta.
          schema:
            type: boolean
            default: false
            example: true
      responses:
        '200':
          description: Composições do produto retornadas com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductCompositionsResponse'
              example:
                data:
                  product:
                    id: 3
                    name: Travesseiro
                    sku: '3'
                    category:
                      id: 7
                      name: Mercadoria para Revenda
                    image_url: null
                    unitary_value:
                      amount: 45
                      currency: BRL
                  max_remove_components: 4
                  compositions:
                    - id: 2
                      id_component: 5
                      amount: 1.05
                      value:
                        amount: 72.4
                        currency: BRL
                      disabled: false
                      is_optional: true
                      order: 126
                      component:
                        id: 5
                        name: Penas
                        sku: '5'
                        category:
                          id: 6
                          name: Matéria-Prima
                        image_url: null
                        unitary_value:
                          amount: 0
                          currency: BRL
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: update-products-compositions
      security:
        - OAuth2:
            - products:write
      tags:
        - ProductCompositions
      summary: Cria ou atualiza composições
      description: >
        Atualiza ou insere itens na lista de composições de um produto.

        Esse endpoint deleta todos os componentes que não estiverem na lista de
        componentes informada.


        **Importante:** 

        - O produto que receberá os componentes deve ser COMBO ou
        PROCESSO-PRODUTIVO

        - Todos os produtos na lista de componentes devem ser do tipo componente
          - flg_component = true
          - composition_type = 0
        - Produtos com grade de preços não podem ter composições

        - Se o campo `id` for informado, o sistema fará um **update** da
        composição existente

        - Se o campo `id` não for informado, o sistema fará um **insert** de uma
        nova composição
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                max_remove_components:
                  type: integer
                  description: Número máximo de componentes que podem ser removidos.
                  example: 4
                components:
                  type: array
                  description: Lista de componentes do produto.
                  items:
                    type: object
                    properties:
                      id:
                        type: integer
                        description: >
                          Identificador único da associação do componente com o
                          produto.


                          Se informado, o sistema fará um **update** da
                          composição existente.

                          Se não informado, o sistema fará um **insert** de uma
                          nova composição.
                        example: 2
                      component_id:
                        type: integer
                        description: >-
                          Identificador do produto a ser associado como
                          componente.
                        example: 5
                      amount:
                        type: number
                        description: >-
                          Quantidade de itens do componente na venda do produto
                          principal.
                        minimum: 0
                        example: 1.45
                      is_optional:
                        type: boolean
                        description: Indica se o componente é opcional ou obrigatório.
                        example: true
                      value:
                        type: object
                        description: >
                          Valor unitário do produto na associação do componente
                          com o produto. 


                          Esse valor pode ser diferente do valor original do
                          produto.
                        allOf:
                          - $ref: '#/components/schemas/Money'
                      order:
                        type: integer
                        description: >-
                          Indica a posição de ordenação do componente em
                          listagens
                        minimum: 1
                        example: 1
                    required:
                      - component_id
                      - amount
                      - is_optional
                      - value
                      - order
              required:
                - max_remove_components
                - components
            example:
              max_remove_components: 4
              components:
                - component_id: 5
                  amount: 1.45
                  is_optional: true
                  value:
                    amount: 85.9
                    currency: BRL
                  order: 1
                - id: 2
                  component_id: 4
                  amount: 2.1
                  is_optional: false
                  value:
                    amount: 110
                    currency: BRL
                  order: 2
      responses:
        '200':
          description: Componentes atualizados com sucesso.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    description: Dados do produto com suas composições atualizadas.
                    properties:
                      product:
                        type: object
                        description: Informações do produto
                        properties:
                          id:
                            type: integer
                            description: ID do produto
                            example: 3
                          name:
                            type: string
                            description: Nome do produto
                            example: Travesseiro
                          sku:
                            type: string
                            description: SKU do produto
                            example: '3'
                          category:
                            type: object
                            properties:
                              id:
                                type: integer
                                example: 7
                              name:
                                type: string
                                example: Mercadoria para Revenda
                          image_url:
                            type: string
                            description: URL da imagem do produto
                            example: https://example.com/image.jpg
                          unitary_value:
                            type: object
                            description: Valor unitário do produto
                            allOf:
                              - $ref: '#/components/schemas/Money'
                      max_remove_components:
                        type: integer
                        description: Número máximo de componentes que podem ser removidos
                        example: 4
                      compositions:
                        type: array
                        description: Lista das composições do produto
                        items:
                          type: object
                          properties:
                            id:
                              type: integer
                              description: ID da composição
                              example: 1382
                            id_component:
                              type: integer
                              description: ID do produto componente
                              example: 5
                            amount:
                              type: number
                              description: Quantidade do componente
                              example: 1.45
                            value:
                              type: object
                              description: Valor do componente
                              allOf:
                                - $ref: '#/components/schemas/Money'
                            disabled:
                              type: boolean
                              description: Se o componente está desabilitado
                              example: false
                            is_optional:
                              type: boolean
                              description: Se o componente é opcional
                              example: true
                            order:
                              type: integer
                              description: Ordem do componente
                              example: 1
              example:
                data:
                  product:
                    id: 3
                    name: Travesseiro
                    sku: '3'
                    category:
                      id: 7
                      name: Mercadoria para Revenda
                    image_url: https://example.com/image.jpg
                    unitary_value:
                      amount: 45
                      currency: BRL
                  max_remove_components: 4
                  compositions:
                    - id: 1836
                      id_component: 5
                      amount: 1.45
                      value:
                        amount: 85.9
                        currency: BRL
                      disabled: false
                      is_optional: true
                      order: 0
                    - id: 1580
                      id_component: 5
                      amount: 1.45
                      value:
                        amount: 85.9
                        currency: BRL
                      disabled: false
                      is_optional: true
                      order: 1
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/{productId}/compositions/{componentId}:
    delete:
      operationId: delete-products-components
      security:
        - OAuth2:
            - products:delete
      tags:
        - ProductCompositions
      summary: Apaga uma composição
      description: Apaga a associação da composição com o produto em específico.
      parameters:
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - name: componentId
          in: path
          description: ID do componente.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/{productId}/composes:
    parameters:
      - name: productId
        in: path
        required: true
        description: >-
          Identificador único do produto/componente para consultar onde é
          utilizado.
        schema:
          type: integer
          example: 4
    get:
      tags:
        - ProductCompositions
      summary: Lista produtos que utilizam este componente
      description: >
        Retorna os produtos que são compostos por um determinado
        produto/componente.


        Este endpoint mostra onde um produto/componente específico é utilizado
        como componente de outros produtos.
      operationId: getProductComposes
      parameters:
        - name: search
          in: query
          required: false
          description: >-
            Termo de busca para filtrar produtos (pode ser código de barras,
            nome, etc.).
          schema:
            type: string
            example: '5981945248564'
        - name: items_id
          in: query
          required: false
          description: Identificador específico do item para filtrar.
          schema:
            type: string
            example: '4'
        - name: categoriesId
          in: query
          required: false
          description: Identificador da categoria para filtrar produtos.
          schema:
            type: string
            example: '7'
        - name: withProduct
          in: query
          required: false
          description: Incluir informações detalhadas dos produtos na resposta.
          schema:
            type: boolean
            default: true
            example: true
        - name: withDisabled
          in: query
          required: false
          description: Incluir produtos desabilitados na resposta.
          schema:
            type: boolean
            default: false
            example: true
      responses:
        '200':
          description: Produtos que utilizam este componente retornados com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductComposesResponse'
              example:
                data:
                  product:
                    id: 4
                    name: Penas de Ganso
                    sku: COPS7
                    category:
                      id: 1
                      name: Outras
                    image_url: null
                    unitary_value:
                      amount: 99.95
                      currency: BRL
                  composes:
                    - component_id: 4
                      product_id: 3
                      product:
                        id: 3
                        name: Travesseiro
                        sku: '3'
                        category:
                          id: 7
                          name: Mercadoria para Revenda
                        image_url: null
                        unitary_value:
                          amount: 45
                          currency: BRL
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/{productId}/balance:
    get:
      operationId: get-products-id-stocks-balance
      security:
        - OAuth2:
            - products:read
      tags:
        - Products
      summary: Obtém saldo em estoque
      description: Obtém informações sobre a quantidade produto em todos os estoques.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Informações sobre a quantidade produto nos estoques.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    $ref: '#/components/schemas/ProductStocksBalance'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/{productId}/weight-scale:
    patch:
      operationId: patch-products-id-weight-scale
      security:
        - OAuth2:
            - products:write
      tags:
        - Products
      summary: Atualiza tipo de balança e códigos de barras
      description: >
        Atualiza o tipo de balança do produto e também os códigos de barras do
        mesmo.


        Ambos os campos são opcionais:

        - Se `balance_type` não for enviado, o valor padrão será `null`

        - Se `barcodes` não for enviado, os códigos de barras do produto não
        serão alterados
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: >-
          Dados para atualização do tipo de balança e códigos de barras do
          produto.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductBalanceUpdate'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/{productId}/cost-history:
    get:
      operationId: get-products-id-cost-history
      security:
        - OAuth2:
            - products:read
      tags:
        - Products
      summary: Obtém custo de um produto
      description: Obtém informações sobre o custo de um produto.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Informações sobre o custo de um produto.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    $ref: '#/components/schemas/ProductCostHistory'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/{productId}/grids:
    get:
      operationId: get-product-grids
      security:
        - OAuth2:
            - products:read
      tags:
        - ProductGrids
      summary: Lista as grades de preço
      description: Retorna as grades de preços de um produto.
      parameters:
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Lista de grades de preços do produto.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      grids:
                        type: array
                        items:
                          $ref: '#/components/schemas/NewProductGrid'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-product-grids
      security:
        - OAuth2:
            - products:write
      tags:
        - ProductGrids
      summary: Cria ou atualiza as grades de preços
      description: >
        Atualiza as grades de preços de um produto.


        **Nota:** Esta operação substitui completamente as grades de preços
        existentes.


        - Para criar uma nova grade de preço, não informe o campo `id`.

        - Para atualizar uma grade de preço existente, informe o campo `id`.

        - Grades de preços existentes que não forem enviadas na requisição serão
        removidas.
      parameters:
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                grids:
                  type: array
                  description: >
                    Lista de grades de preços do produto.


                    Apenas produtos do tipo "**Simples**" podem conter grades de
                    preços.
                  items:
                    $ref: '#/components/schemas/ProductGrid'
              required:
                - grids
      responses:
        '200':
          description: Grades de preços atualizadas com sucesso.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      grids:
                        type: array
                        items:
                          $ref: '#/components/schemas/ProductGrid'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/{productId}/grids/{gridId}:
    delete:
      operationId: delete-product-grid
      security:
        - OAuth2:
            - products:write
      tags:
        - ProductGrids
      summary: Remove uma grade de preços
      description: |
        Remove uma grade de preços específica de um produto.

        **Nota:** Esta operação remove permanentemente a grade de preços.
      parameters:
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - name: gridId
          in: path
          description: ID da grade de preços.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          description: Grade de preços removida com sucesso.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/consumption-coupons:
    get:
      operationId: get-product-consumption-coupons
      security:
        - OAuth2:
            - products:read
      tags:
        - ProductConsumptionCoupons
      summary: Lista as configurações de fichas de consumo de produtos
      description: Lista as configurações de fichas de consumo de produtos.
      parameters:
        - name: product_id
          in: query
          description: ID do produto.
          schema:
            type: integer
            format: int64
        - name: is_enabled
          in: query
          description: Filtra por produtos com ficha de consumo habilitada.
          schema:
            type: boolean
      responses:
        '200':
          description: Configurações de fichas de consumo de produtos listadas com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductConsumptionCoupon'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: put-product-consumption-coupons
      security:
        - OAuth2:
            - products:write
      tags:
        - ProductConsumptionCoupons
      summary: Atualiza as configurações de fichas de consumo de produtos
      description: >
        Atualiza as configurações de fichas de consumo de produtos.


        **Atenção:** Só é permitido atualizar as informações quando a empresa
        estiver com as fichas de consumo de produtos habilitadas nas
        [Configurações do ERP](#tag/ErpSettings/get-settings-erp).
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/ProductConsumptionCouponRequest'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/attributes:
    get:
      operationId: get-attributes
      security:
        - OAuth2:
            - products:read
      tags:
        - Attributes
      summary: Lista de atributos
      description: |
        Retorna a lista dos atributos de produto cadastrados. 

        Os dados de atributos são compartilhados com todas as lojas da rede.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: attributes_id
          in: query
          description: >-
            Filtra pelos IDs dos atributos de produto. Pode passar mais de um ID
            numérico separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: search
          in: query
          description: >-
            Filtra pelas principais propriedades do atributo, incluindo `name`,
            e `code`.
          schema:
            type: string
            example: Cor
        - name: name
          in: query
          description: Filtra pelo nome do atributo.
          schema:
            type: string
            example: Cor
        - name: code
          in: query
          description: Filtra pelo código do atributo.
          schema:
            type: string
            example: ABC123
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
        - name: deleted
          in: query
          description: Filtro para indicar se deve retornar dados apagados ou não.
          schema:
            type: string
            enum:
              - not_include
              - include
              - only
            default: not_include
            example: not_include
        - name: orderByField
          in: query
          description: Define qual o campo que fará a ordenação na listagem de dados.
          schema:
            type: string
            enum:
              - id
              - name
              - position
        - name: orderByType
          in: query
          description: Define em qual ordem os campos serão listados.
          schema:
            type: string
            enum:
              - asc
              - desc
      responses:
        '200':
          description: Lista de atributos cadastrados.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      attributes:
                        type: array
                        description: Representa a lista de atributos.
                        items:
                          $ref: '#/components/schemas/ProductAttribute'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-attributes
      security:
        - OAuth2:
            - products:write
      tags:
        - Attributes
      summary: Cria novo atributo
      description: Cria um novo atributo de produto.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: Idempotency-Key
          in: header
          description: >-
            UUID aleatório gerado por você. Nós utilizamos esse header para
            evitar duplicidade de registros, ou seja, caso você não tenha
            recebido a resposta de alguma requisição e mandar o mesmo UUID, nós
            não duplicaremos o registro.
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        $ref: '#/components/requestBodies/ProductAttribute'
      responses:
        '201':
          description: Novo atributo de produto criado criada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductAttribute'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/attributes/{attributeId}:
    get:
      operationId: get-attributes-id
      security:
        - OAuth2:
            - products:read
      tags:
        - Attributes
      summary: Obtém um atributo
      description: Obtém informações sobre de atributo.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: attributeId
          in: path
          description: ID do atributo.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Atributo atualizado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductAttribute'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-attributes
      security:
        - OAuth2:
            - products:write
      tags:
        - Attributes
      summary: Atualiza um atributo
      description: >
        Atualiza os dados de um atributo.


        **Atenção:** No parâmetro `options`, se não for passado o `id` da Opção
        para atualização, será criada uma nova Opção. Para atualização de dados
        você deve passar o `id` da Opção no corpo da requisição.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: attributeId
          in: path
          description: ID do atributo.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/ProductAttribute'
      responses:
        '200':
          description: Atributo atualizado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductAttribute'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-attributes
      security:
        - OAuth2:
            - products:delete
      tags:
        - Attributes
      summary: Apaga um atributo
      description: Apaga um atributo.
      parameters:
        - name: attributeId
          in: path
          description: ID do atributo.
          required: true
          schema:
            type: integer
            format: int64
        - in: query
          name: delete_mode
          schema:
            type: string
            enum:
              - default
              - disable_association
          description: "Modo de exclusão do atributo.\n- _default_ (ou ausência) -\tAplica as regras normais de exclusão.\n- _disable_association_ - Exclui o atributo e as associações com produtos.\n"
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/attributes/{attributeId}/duplicate:
    post:
      operationId: post-attributes-duplicate
      security:
        - OAuth2:
            - products:write
      tags:
        - Attributes
      summary: Duplica um atributo
      description: Duplica um atributo de produto.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: attributeId
          in: path
          description: ID do atributo para ser duplicado.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '201':
          description: Atributo duplicado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductAttribute'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/attributes/{attributeId}/options:
    get:
      operationId: get-attributes-options
      security:
        - OAuth2:
            - products:read
      tags:
        - AttributeOptions
      summary: Lista opções
      description: |
        Retorna a lista das opções cadastradas para um atributo.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: attributeId
          in: path
          description: ID do atributo.
          required: true
          schema:
            type: integer
            format: int64
        - name: options_id
          in: query
          description: >-
            Filtra pelos IDs das opções de um atributo. Pode passar mais de um
            ID numérico separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: search
          in: query
          description: >-
            Filtra pelas principais propriedades da opção, incluindo `name`,
            `code` e `description`.
          schema:
            type: string
            example: Cor
        - name: name
          in: query
          description: Filtra pelo nome da opção.
          schema:
            type: string
            example: Cor
        - name: code
          in: query
          description: Filtra pelo código da opção.
          schema:
            type: string
            example: ABC123
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
        - name: deleted
          in: query
          description: Filtro para indicar se deve retornar dados apagados ou não.
          schema:
            type: string
            enum:
              - not_include
              - include
              - only
            default: not_include
            example: not_include
      responses:
        '200':
          description: Lista de opções cadastrados.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      options:
                        type: array
                        description: Representa a lista de opções.
                        items:
                          $ref: '#/components/schemas/ProductAttributeOption'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-attributes-options
      security:
        - OAuth2:
            - products:write
      tags:
        - AttributeOptions
      summary: Cria uma nova opção
      description: Cria uma nova opção de atributo.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: attributeId
          in: path
          description: ID do atributo.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/ProductAttributeOption'
      responses:
        '201':
          description: Novo opção do atributo criada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductAttributeOption'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/attributes/{attributeId}/options/{optionId}:
    put:
      operationId: put-attributes-options
      security:
        - OAuth2:
            - products:write
      tags:
        - AttributeOptions
      summary: Atualiza uma opção
      description: |
        Atualiza uma opção de um atributo.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: attributeId
          in: path
          description: ID do atributo.
          required: true
          schema:
            type: integer
            format: int64
        - name: optionId
          in: path
          description: ID da opção.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/ProductAttributeOption'
      responses:
        '200':
          description: Opção atualizado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductAttributeOption'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-attributes-options
      security:
        - OAuth2:
            - products:delete
      tags:
        - AttributeOptions
      summary: Apaga uma opção
      description: Apaga uma opção de um atributo.
      parameters:
        - name: attributeId
          in: path
          description: ID do atributo.
          required: true
          schema:
            type: integer
            format: int64
        - name: optionId
          in: path
          description: ID da opção.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/attributes/{attributeId}/options/{optionId}/image:
    post:
      operationId: post-attributes-options-image
      security:
        - OAuth2:
            - products:write.image
      tags:
        - AttributeOptions
      summary: Atualiza imagem da opção
      description: |
        Adiciona ou atualiza a imagem de uma opção de um atributo.

        A imagem deve ser do tipo JPEG ou PNG em base64.

        O tamanho máximo do arquivo é 5 MB.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: attributeId
          in: path
          description: ID do atributo.
          required: true
          schema:
            type: integer
            format: int64
        - name: optionId
          in: path
          description: ID da opção.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/UploadImageFile'
      responses:
        '201':
          description: Nova imagem adicionada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductImage'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/attributes/batch-delete:
    delete:
      operationId: delete-batch-attributes
      security:
        - OAuth2:
            - products:delete
      tags:
        - Attributes
      summary: Apaga atributos em massa
      description: Apaga atributos em massa.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
      requestBody:
        description: Corpo requisição da reordenação de atributos.
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                attributes:
                  type: array
                  description: Representa a lista de ids de atributos a serem excluídos.
                  items:
                    type: integer
                  example:
                    - 1
                    - 2
                    - 3
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/customers:
    get:
      operationId: get-customers
      security:
        - OAuth2:
            - customer:read
      tags:
        - Customers
      summary: Lista de clientes
      description: Retorna lista de clientes pessoas física ou jurídica.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: search
          in: query
          description: >-
            Filtra pelas principais propriedades do cliente, incluindo `name`,
            contatos (`phone`, `mobile`, `email`), e documentos (`cpf`, e
            `cnpj`).
          schema:
            type: string
            example: Connectplug
        - name: customers_id
          in: query
          description: >-
            Filtra pelos IDs dos clientes pessoas física ou jurídica. Pode
            passar mais de um ID numérico separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: city_id
          in: query
          description: Id da cidade.
          schema:
            type: number
          example: 3898
        - name: document_type
          in: query
          description: |
            Indica o tipo do documento. 

            - `cpf`: CPF Pessoa física.
            - `rg`: RG Pessoa física.
            - `cnpj`: CNPJ Pessoa jurídica.
            - `ie`: Inscrição Estadual Pessoa jurídica.
            - `im`: Inscrição Municipal Pessoa jurídica.
          schema:
            type: string
            enum:
              - cpf
              - rg
              - cnpj
              - ie
              - im
          example: cnpj
        - name: document_value
          in: query
          description: Filtro pelo Valor do documento.
          schema:
            type: string
          example: '22423374000152'
        - name: city
          in: query
          description: Filtro pelo Nome da cidade.
          schema:
            type: string
          example: São Paulo
        - name: state
          in: query
          description: Filtro pela Sigla do estado.
          schema:
            type: string
          example: SP
        - name: ibge_code
          in: query
          description: Filtro pelo Código da cidade segundo IBGE.
          schema:
            type: string
          example: '3550308'
        - name: customer_id
          in: query
          description: Filtro pelo Id do cliente na CPlug.
          schema:
            type: number
          example: 109
        - name: company_name
          in: query
          description: Filtro pelo nome fantasia da empresa., quando aplicável.
          schema:
            type: string
          example: Connectplug
        - name: name
          in: query
          description: |
            Nome do cliente ou razão social quando aplicável.

            Ex: `Connectplug Desenvolvimento de Softwares Ltda`
          schema:
            type: string
          example: Connectplug Desenvolvimento de Softwares Ltda
        - name: type
          in: query
          description: |
            Tipo de cliente

            - `company`: quando o cliente é uma pessoa jurídica.
            - `individual`: quando o cliente é uma pessoa física.
          schema:
            type: string
            enum:
              - company
              - individual
          example: company
        - name: birthday
          in: query
          description: 'Filtro pelo data de aniversário do cliente. (Formato: YYYY-MM-DD).'
          schema:
            type: string
            format: date
          example: '2015-05-26'
        - name: customer_category_ids
          in: query
          description: >-
            Filtra pelos IDs das categoria dos clientes. Pode passar mais de um
            ID numérico separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
        - name: deleted
          in: query
          description: Filtro para indicar se deve retornar dados apagados ou não.
          schema:
            type: string
            enum:
              - not_include
              - include
              - only
            default: not_include
            example: not_include
      responses:
        '200':
          description: Lista de clientes.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      customers:
                        type: array
                        description: Representa a lista de Clientes
                        items:
                          $ref: '#/components/schemas/Customer'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-customers
      security:
        - OAuth2:
            - customer:write
      tags:
        - Customers
      summary: Cria um novo cliente
      description: Cria umnovo cliente.
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
        - $ref: '#/components/parameters/CPlugCompanyId'
      requestBody:
        $ref: '#/components/requestBodies/Customer'
      responses:
        '201':
          description: Novo cliente criado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Customer'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/customers/{customerId}:
    get:
      operationId: get-customers-id
      security:
        - OAuth2:
            - customers:read
      tags:
        - Customers
      summary: Obtém um cliente
      description: Resgata um cliente já existente.
      parameters:
        - name: customerId
          in: path
          description: ID do cliente.
          required: true
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/CPlugCompanyId'
      responses:
        '200':
          description: Cliente.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Customer'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-customers
      security:
        - OAuth2:
            - customers:write
      tags:
        - Customers
      summary: Atualiza um cliente
      description: Atualiza um cliente já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: customerId
          in: path
          description: ID do cliente.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/Customer'
      responses:
        '200':
          description: Cliente atualizado.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Customer'
                required:
                  - data
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-customers
      security:
        - OAuth2:
            - customers:delete
      tags:
        - Customers
      summary: Apaga um cliente
      description: Apaga um cliente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: customerId
          in: path
          description: ID do cliente.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/customers/batch-delete:
    post:
      operationId: batch-delete-customers
      security:
        - OAuth2:
            - customer:delete
      tags:
        - Customers
      summary: Deleta clientes em massa
      description: Apaga clientes em massa.
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
        - $ref: '#/components/parameters/CPlugCompanyId'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                customer_ids:
                  items:
                    type: integer
                    example: 1
                  example:
                    - 2
                    - 3
              required:
                - customer_ids
        required: true
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/customers/{customerId}/addresses:
    get:
      operationId: get-customers-id-addresses
      security:
        - OAuth2:
            - customer:read
      tags:
        - Customers
      summary: Lista os endereços do cliente
      description: Lista os endereços do cliente.
      parameters:
        - name: customerId
          in: path
          description: ID do cliente.
          required: true
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
        - name: ibge_code
          in: query
          description: Filtro pelo Código da cidade segundo o IBGE.
          schema:
            type: string
          example: '3550308'
        - name: city_id
          in: query
          description: Filtro pelo Código da cidade na CPlug.
          schema:
            type: number
          example: 3898
        - name: state
          in: query
          description: Filtro pela Sigla do estado.
          schema:
            type: string
          example: SP
        - name: city
          in: query
          description: Filtro pelo Nome da cidade.
          schema:
            type: string
          example: São Paulo
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Lista de endereços.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      addresses:
                        type: array
                        description: Representa a lista de endereços
                        items:
                          $ref: '#/components/schemas/Address'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-customers-id-addresses
      security:
        - OAuth2:
            - customer:write
      tags:
        - Customers
      summary: Cria ou atualiza endereços
      description: >
        Cria ou atualiza endereços para um cliente.


        Se na requisição tiver o campo `id`, então o endereço que possui esse
        `id` será atualizado, caso contrário será criado.


        O Sistema permite que um cliente tenha multiplos endereços do tipo
        'other' mas somente um endereço de cada para os tipos 'default' e
        'shipping'. Se um novo endereço 'shipping' ou 'default' for enviado, o
        endereço atual será sobrescrito.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: customerId
          in: path
          description: ID do cliente.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/Addresses'
      responses:
        '201':
          description: Lista de endereços salvos.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      addresses:
                        type: array
                        description: Representa a lista de endereços
                        items:
                          $ref: '#/components/schemas/Address'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/customers/{customerId}/addresses/{addressId}:
    delete:
      operationId: delete-customers-id-addresses-id
      security:
        - OAuth2:
            - customer:delete
      tags:
        - Customers
      summary: Apaga um endereço
      description: Apaga um endereço.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: customerId
          in: path
          description: ID do cliente.
          required: true
          schema:
            type: integer
            format: int64
        - name: addressId
          in: path
          description: ID do endereço na CPlug.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/customers/{customerId}/documents:
    get:
      operationId: get-customers-id-documents
      security:
        - OAuth2:
            - customer:read
      tags:
        - Customers
      summary: Lista os documentos do cliente
      description: Lista documentos do cliente.
      parameters:
        - name: customerId
          in: path
          description: ID do cliente.
          required: true
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: type
          in: query
          description: |
            Indica o tipo do documento. 
              
            - `cpf`: CPF Pessoa física.
            - `rg`: RG Pessoa física.
            - `cnpj`: CNPJ Pessoa jurídica.
            - `ie`: Inscrição Estadual Pessoa jurídica.
            - `im`: Inscrição Municipal Pessoa jurídica.
          schema:
            type: string
            enum:
              - cpf
              - rg
              - cnpj
              - ie
              - im
            example: cnpj
        - name: identify
          in: query
          description: >-
            Número de identificação do documento. Somente números. Ex:
            22.423.374/0001-52 => 22423374000152.
          schema:
            type: string
          example: '22423374000152'
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Lista de documentos.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      documents:
                        type: array
                        description: Representa a lista de documentos
                        items:
                          $ref: '#/components/schemas/Document'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-customers-id-documents
      security:
        - OAuth2:
            - customer:write
      tags:
        - Customers
      summary: Salva lista de documentos
      description: Cria ou atualiza um documento.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: customerId
          in: path
          description: ID do cliente.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/Documents'
      responses:
        '201':
          description: Lista de documentos salvos.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      documents:
                        type: array
                        description: Representa a lista de documentos
                        items:
                          $ref: '#/components/schemas/Document'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/customers/{customerId}/documents/{documentType}:
    delete:
      operationId: delete-customers-id-documents-documentType
      security:
        - OAuth2:
            - customer:delete
      tags:
        - Customers
      summary: Apaga um documento
      description: Apaga um documento.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: customerId
          in: path
          description: ID do cliente.
          required: true
          schema:
            type: integer
            format: int64
        - name: documentType
          in: path
          description: |
            Indica o tipo do documento a ser apagado.
              
            - `cpf`: CPF Pessoa física
            - `rg`: RG Pessoa física
            - `cnpj`: CNPJ Pessoa jurídica
            - `ie`: Inscrição Estadual Pessoa jurídica
            - `im`: Inscrição Municipal Pessoa jurídica
          required: true
          schema:
            type: string
            enum:
              - cpf
              - rg
              - cnpj
              - ie
              - im
            example: cnpj
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/dre:
    get:
      operationId: get-dre
      security:
        - OAuth2:
            - dre:read
      tags:
        - Dre
      summary: Demonstrativo de Resultado do Exercício (DRE)
      description: >
        Retorna o Demonstrativo de Resultado do Exercício (DRE) com informações
        sobre receitas e despesas organizadas por conta contábil.


        O DRE agrupa as movimentações financeiras por conta contábil (plano de
        contas) e calcula os totais de receitas e despesas para o período
        especificado.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: date_start
          in: query
          description: |
            Data de início do período para geração do DRE.
            Se não informada, utiliza o primeiro dia do mês atual.
          required: false
          schema:
            type: string
            format: date
            example: '2024-01-01'
        - name: date_end
          in: query
          description: |
            Data de fim do período para geração do DRE.
            Se não informada, utiliza o último dia do mês atual.
            O período máximo permitido é de 60 dias.
          required: false
          schema:
            type: string
            format: date
            example: '2024-01-31'
        - name: company_id
          in: query
          description: |
            ID da empresa para filtrar os resultados.
            Se não informado, utiliza a empresa selecionada na sessão.
          required: false
          schema:
            type: integer
            example: 123
      responses:
        '200':
          description: DRE gerado com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      results:
                        type: array
                        description: >-
                          Lista de contas contábeis com suas respectivas
                          movimentações
                        items:
                          $ref: '#/components/schemas/DreFinancialAccount'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/dre/pdf:
    get:
      operationId: get-dre-pdf
      security:
        - OAuth2:
            - dre:read
      tags:
        - Dre
      summary: Exportar DRE em PDF
      description: >
        Exporta o Demonstrativo de Resultado do Exercício (DRE) em formato PDF
        para download.


        O arquivo PDF contém todas as informações do DRE organizadas por conta
        contábil,

        incluindo receitas, despesas e totalizações para o período especificado.


        O nome do arquivo gerado segue o padrão: `Resultados_YYYYMMDDHHMM.pdf`
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: date_start
          in: query
          description: |
            Data de início do período para geração do DRE.
          required: true
          schema:
            type: string
            format: date
            example: '2024-01-01'
        - name: date_end
          in: query
          description: |
            Data de fim do período para geração do DRE.
            O período máximo permitido é de 60 dias.
          required: true
          schema:
            type: string
            format: date
            example: '2024-01-31'
        - name: company_id
          in: query
          description: |
            ID da empresa para filtrar os resultados.
            Se não informado, utiliza a empresa selecionada na sessão.
          required: false
          schema:
            type: integer
            example: 123
      responses:
        '200':
          description: PDF do DRE gerado com sucesso
          headers:
            Content-Disposition:
              description: Nome do arquivo para download
              schema:
                type: string
                example: attachment; filename="Resultados_202401151430.pdf"
            Content-Type:
              description: Tipo de conteúdo do arquivo
              schema:
                type: string
                example: application/pdf
            Cache-Control:
              description: Controle de cache
              schema:
                type: string
                example: no-cache
          content:
            application/pdf:
              schema:
                type: string
                format: binary
                description: Arquivo PDF contendo o relatório DRE
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/dre/excel:
    get:
      operationId: get-dre-excel
      security:
        - OAuth2:
            - dre:read
      tags:
        - Dre
      summary: Exportar DRE em Excel
      description: >
        Exporta o Demonstrativo de Resultado do Exercício (DRE) em formato Excel
        (.xlsx) para download.


        O arquivo Excel contém todas as informações do DRE organizadas em
        planilha estruturada,

        incluindo receitas, despesas e totalizações para o período especificado.


        O nome do arquivo gerado segue o padrão: `Resultados_YYYYMMDDHHMM.xlsx`
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: date_start
          in: query
          description: |
            Data de início do período para geração do DRE.
          required: true
          schema:
            type: string
            format: date
            example: '2024-01-01'
        - name: date_end
          in: query
          description: |
            Data de fim do período para geração do DRE.
            O período máximo permitido é de 60 dias.
          required: true
          schema:
            type: string
            format: date
            example: '2024-01-31'
        - name: company_id
          in: query
          description: |
            ID da empresa para filtrar os resultados.
            Se não informado, utiliza a empresa selecionada na sessão.
          required: false
          schema:
            type: integer
            example: 123
      responses:
        '200':
          description: Arquivo Excel do DRE gerado com sucesso
          headers:
            Content-Disposition:
              description: Nome do arquivo para download
              schema:
                type: string
                example: attachment; filename="Resultados_202401151430.xlsx"
            Content-Type:
              description: Tipo de conteúdo do arquivo
              schema:
                type: string
                example: >-
                  application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
            Cache-Control:
              description: Controle de cache
              schema:
                type: string
                example: no-cache
          content:
            application/vnd.openxmlformats-officedocument.spreadsheetml.sheet:
              schema:
                type: string
                format: binary
                description: Arquivo Excel contendo o relatório DRE
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/delivery-areas:
    get:
      operationId: get-delivery-areas
      security:
        - OAuth2:
            - delivery-areas:read
      tags:
        - DeliveryAreas
      summary: Lista de áreas de entrega
      description: Retorna uma lista de áreas de entrega.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - $ref: '#/components/parameters/DeletedQuery'
        - name: term
          in: query
          description: Filtro por um termo, busca pelo nome bairro ou cidade.
          schema:
            type: string
            example: Centro
      responses:
        '200':
          description: Lista de áreas de entrega.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      delivery_areas:
                        type: array
                        description: Representa a lista de áreas de entrega.
                        items:
                          $ref: '#/components/schemas/DeliveryArea'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-delivery-areas
      security:
        - OAuth2:
            - delivery-areas:write
      tags:
        - DeliveryAreas
      summary: Cria uma área de entrega
      description: >
        Cria uma nova área de entrega.


        **Atenção**: Não é permitido criar áreas de entrega quando existe uma
        taxa fixa configurada.
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
        - $ref: '#/components/parameters/CPlugCompanyId'
      requestBody:
        $ref: '#/components/requestBodies/DeliveryArea'
      responses:
        '201':
          description: Nova área de entrega criada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeliveryArea'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/delivery-areas/{deliveryAreaId}:
    get:
      operationId: get-delivery-area-id
      security:
        - OAuth2:
            - delivery-areas:read
      tags:
        - DeliveryAreas
      summary: Obtém uma área de entrega
      description: Retorna uma lista de áreas de entrega.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: deliveryAreaId
          in: path
          description: ID da área de entrega.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Dados da área de entrega.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    $ref: '#/components/schemas/DeliveryArea'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: put-delivery-area-id
      security:
        - OAuth2:
            - delivery-areas:write
      tags:
        - DeliveryAreas
      summary: Atualiza uma área de entrega
      description: Atualiza uma área de entrega já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: deliveryAreaId
          in: path
          description: ID da área de entrega.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/DeliveryArea'
      responses:
        '200':
          description: Área de entrega atualizada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeliveryArea'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-delivery-areas
      security:
        - OAuth2:
            - delivery-areas:delete
      tags:
        - DeliveryAreas
      summary: Apaga uma área de entrega
      description: Apaga uma área de entrega.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: deliveryAreaId
          in: path
          description: ID do área de entrega.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/files/{hash}/download:
    get:
      operationId: get-files-download
      security:
        - OAuth2:
            - nfe:read
      tags:
        - Files
      summary: Download de Arquivo
      description: >-
        Retorna o arquivo armazenado correspondente ao hash fornecido. Pode
        retornar arquivos XML, PDF, imagens ou outros tipos de arquivo
        diretamente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: hash
          in: path
          description: Hash único do arquivo.
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Arquivo encontrado e retornado com sucesso.
          content:
            application/xml:
              schema:
                type: string
                description: Arquivo XML
            text/xml:
              schema:
                type: string
                description: Arquivo XML como texto
            application/pdf:
              schema:
                type: string
                format: binary
                description: Arquivo PDF
            application/octet-stream:
              schema:
                type: string
                format: binary
                description: Arquivo binário genérico
            image/jpeg:
              schema:
                type: string
                format: binary
                description: Imagem JPEG
            image/png:
              schema:
                type: string
                format: binary
                description: Imagem PNG
            text/plain:
              schema:
                type: string
                description: Arquivo de texto
          headers:
            Content-Type:
              description: Tipo MIME do arquivo retornado
              schema:
                type: string
            Content-Disposition:
              description: Header de disposição do arquivo
              schema:
                type: string
            Content-Length:
              description: Tamanho do arquivo em bytes
              schema:
                type: integer
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/nfes/received-documents/manifest:
    post:
      operationId: post-nfe-received-documents-manifest
      security:
        - OAuth2:
            - nfeReceivedDocuments:write
      tags:
        - Nfe
      summary: Realiza a manifestação de um documento fiscal eletrônico recebido
      description: >
        Transmite uma manifestação (ciência, confirmação, desconhecimento ou
        operação não realizada) 

        para um documento fiscal eletrônico recebido através da SEFAZ.


        **Tipos de manifestação:**

        - `210200`: Confirmação da Operação

        - `210210`: Ciência da Operação  

        - `210220`: Desconhecimento da Operação

        - `210240`: Operação não Realizada (requer justificativa)
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NfeManifestBody'
            examples:
              ciencia:
                summary: Ciência da Operação
                value:
                  key: '43200714200166000187550010000000047423090038'
                  type: '210210'
              confirmacao:
                summary: Confirmação da Operação
                value:
                  key: '43200714200166000187550010000000047423090038'
                  type: '210200'
              desconhecimento:
                summary: Desconhecimento da Operação
                value:
                  key: '43200714200166000187550010000000047423090038'
                  type: '210220'
              operacao_nao_realizada:
                summary: Operação não Realizada
                value:
                  key: '43200714200166000187550010000000047423090038'
                  type: '210240'
                  justification: Operação não foi realizada devido a problemas técnicos
      responses:
        '200':
          description: Manifestação transmitida com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      code:
                        type: integer
                        description: Código de retorno da SEFAZ
                        example: 135
                      message:
                        type: string
                        description: Mensagem de retorno da SEFAZ
                        example: Evento registrado e vinculado a NF-e
                    required:
                      - code
                      - message
                required:
                  - data
              examples:
                sucesso_geral:
                  summary: Sucesso - Evento Registrado
                  value:
                    data:
                      code: 135
                      message: Evento registrado e vinculado a NF-e
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/nfes/received-documents/import:
    post:
      operationId: import-nfe-documents
      security:
        - OAuth2:
            - nfeReceivedDocuments:read
      tags:
        - Nfe
      summary: Importa documentos fiscais eletrônicos
      description: |
        Executa a importação de documentos fiscais eletrônicos.

        `Essa solicitação é limitada a uma solicitação por hora.`
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /api/v3/nfes/emitted-documents:
    get:
      operationId: get-nfe-emitted-documents
      security:
        - OAuth2:
            - nfe:read
      tags:
        - Nfe
      summary: Lista documentos fiscais eletrônicos emitidos
      description: >-
        Retorna uma lista paginada de documentos fiscais eletrônicos emitidos,
        com filtros opcionais por data, busca, ordenação e paginação.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: date_start
          in: query
          description: Data inicial para filtrar os documentos (data de emissão).
          schema:
            type: string
            format: date
            example: '2000-01-01'
        - name: date_end
          in: query
          description: Data final para filtrar os documentos (data de emissão).
          schema:
            type: string
            format: date
            example: '2025-12-31'
        - name: search
          in: query
          description: >-
            Termo de busca para filtrar documentos (número, nome do cliente,
            CNPJ do cliente, id da venda).
          schema:
            type: string
            example: '9001'
        - name: min_value
          in: query
          description: Filtro pelo valor mínimo do documento.
          schema:
            type: number
            example: 100
        - name: max_value
          in: query
          description: Filtro pelo valor máximo do documento.
          schema:
            type: number
            example: 1000
        - name: order_by_field
          in: query
          description: |
            Campo para ordenação dos documentos.
            Exemplo:
              - `number` Número do documento
              - `emitted_at` Data de emissão
              - `customer` Nome do cliente
          schema:
            type: string
            enum:
              - emitted_at
              - number
              - serie
              - model
              - value
              - customer
            default: number
            example: number
        - name: order_by_type
          $ref: '#/components/parameters/OrderByType'
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista de documentos fiscais eletrônicos emitidos.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NfeEmittedDocumentsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/nfes/emitted-documents/schedules:
    get:
      operationId: get-emitted-documents-schedules
      security:
        - OAuth2:
            - nfeEmittedDocumentsSchedules:read
      tags:
        - NfeEmittedDocumentsSchedules
      summary: Lista os envios automáticos
      description: |
        Obtém a lista de envios automáticos de notas fiscais eletrônicas.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
      responses:
        '200':
          description: Lista de envios automáticos de notas fiscais.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    description: Dados da resposta
                    additionalProperties: false
                    properties:
                      emitted_document_schedules:
                        type: array
                        description: Lista de envios automáticos de notas fiscais.
                        items:
                          $ref: '#/components/schemas/RequestedNotesSchedule'
              examples:
                default:
                  summary: Exemplo de resposta
                  value:
                    data:
                      emitted_document_schedules:
                        - id: 3
                          user:
                            id: 1
                            name: Usuario Teste
                            email: teste@teste.com
                          created_at: '2025-09-11T12:44:09.000000Z'
                          day: 10
                          email: teste@teste.com
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: create-emitted-documents-schedules
      security:
        - OAuth2:
            - nfeEmittedDocumentsSchedules:write
      tags:
        - NfeEmittedDocumentsSchedules
      summary: Cria um envio automático
      description: |
        Cria um novo registro de envio automático de notas fiscais.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/RequestedNotesScheduleCreateRequest'
      responses:
        '201':
          description: Envio automático criado com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/RequestedNotesSchedule'
              examples:
                default:
                  summary: Exemplo de resposta
                  value:
                    data:
                      id: 3
                      user:
                        id: 1
                        name: Usuario Teste
                        email: teste@teste.com
                      created_at: '2025-09-11T12:44:09.000000Z'
                      day: 10
                      email: teste@teste.com
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/nfes/emitted-documents/schedules/{id}:
    delete:
      operationId: delete-emitted-documents-schedules
      security:
        - OAuth2:
            - nfeEmittedDocumentsSchedules:delete
      tags:
        - NfeEmittedDocumentsSchedules
      summary: Apaga um registro
      description: |
        Apaga um registro de envio automático de notas fiscais eletrônicas.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: id
          in: path
          required: true
          description: ID do agendamento a ser excluído.
          schema:
            type: integer
            example: 3
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v3/nfes/emitted-documents/send-email:
    post:
      operationId: post-nfe-emitted-documents-send-email
      security:
        - OAuth2:
            - nfe:write
      tags:
        - Nfe
      summary: Envia NFe emitidas por e-mail
      description: >-
        Envia documentos fiscais eletrônicos emitidos por e-mail para o endereço
        especificado, filtrados pelo período informado.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/NfeEmittedDocumentsSendEmailRequest'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/nfes/emitted-documents/sending-history:
    get:
      operationId: get-nfe-emitted-documents-sending-history
      security:
        - OAuth2:
            - nfe:read
      tags:
        - Nfe
      summary: Lista histórico de envios de NFe por e-mail
      description: >
        Obtém o histórico de envios de documentos fiscais eletrônicos emitidos
        por e-mail, com filtros opcionais por status, período das NFe e período
        de solicitação.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: status
          in: query
          description: |
            Filtra por situação do envio.

            - `waiting`: Em processamento
            - `processing`: Buscando notas  
            - `done`: Concluído
            - `not_found`: Nenhuma nota encontrada
          schema:
            type: string
            enum:
              - waiting
              - processing
              - done
              - not_found
            example: done
        - name: date_start
          in: query
          description: Data inicial para filtrar os históricos pelo período.
          schema:
            type: string
            format: date
            example: '2025-09-01'
        - name: date_end
          in: query
          description: Data final para filtrar os históricos pelo período.
          schema:
            type: string
            format: date
            example: '2025-09-30'
        - name: requested_start
          in: query
          description: Data inicial para filtrar os históricos pelo período de solicitação.
          schema:
            type: string
            format: date
            example: '2025-09-01'
        - name: requested_end
          in: query
          description: Data final para filtrar os históricos pelo período de solicitação.
          schema:
            type: string
            format: date
            example: '2025-09-30'
      responses:
        '200':
          description: Lista de históricos de envio de NFe.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NfeSendingHistoriesResponse'
              examples:
                default:
                  summary: Exemplo de resposta
                  value:
                    data:
                      sending_histories:
                        - id: 3
                          user:
                            id: 1
                            name: Marlon Minotti
                            email: teste@teste.com
                          date_start: '2025-09-01T03:00:00.000000Z'
                          date_end: '2025-09-30T03:00:00.000000Z'
                          file_url: https://s3.amazonaws.com.....
                          status: done
                          expired_at: '2025-10-12T17:45:40.000000Z'
                          requested_at: '2025-09-12T17:45:40.000000Z'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/nfes/received-documents/statistics:
    get:
      operationId: get-nfe
      security:
        - OAuth2:
            - nfe:read
      tags:
        - Nfe
      summary: Obtém estatísticas da importação
      description: >
        Solicita a importação de documentos fiscais eletrônicos e retorna a
        informações do último log de importação juntamente com os totais de
        documentos importados.


        `Só realiza a importação se a ultima importação ocorreu há mais de 1
        hora.`
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
      responses:
        '200':
          description: Informações da última importação de documentos fiscais eletrônicos.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    description: >-
                      Dados da última importação de documentos fiscais
                      eletrônicos
                    additionalProperties: false
                    properties:
                      last_log_created_at:
                        type: string
                        description: Data e hora da criação do último log de importação
                        example: '2025-07-14 12:01:45'
                      next_log_created_at:
                        type: string
                        description: Data e hora prevista para a próxima importação
                        example: '2025-07-14 13:01:45'
                      last_nsu:
                        type: integer
                        description: Último NSU (Número Sequencial Único) processado
                        example: 2465
                      homologation:
                        type: boolean
                        description: Indica se está em ambiente de homologação
                        example: true
                      total:
                        type: object
                        description: Totais de documentos importados
                        additionalProperties: false
                        properties:
                          total:
                            type: integer
                            description: Total de documentos
                            example: 36
                          authorized:
                            type: integer
                            description: Documentos autorizados
                            example: 29
                          canceled:
                            type: integer
                            description: Documentos cancelados
                            example: 3
                          final_manifestations:
                            type: integer
                            description: Manifestações finais
                            example: 0
                          not_manifested:
                            type: integer
                            description: Documentos não manifestados
                            example: 36
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/nfes/received-documents:
    get:
      operationId: get-nfe-received-documents
      security:
        - OAuth2:
            - nfeReceivedDocuments:read
      tags:
        - Nfe
      summary: Lista os documentos fiscais eletrônicos recebidos
      description: >-
        Retorna uma lista paginada de documentos fiscais eletrônicos recebidos,
        com filtros opcionais por data, busca, ordenação e paginação.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: date_start
          in: query
          description: Data inicial para filtrar os documentos (data de emissão).
          schema:
            type: string
            format: date
            example: '2000-01-01'
        - name: date_end
          in: query
          description: Data final para filtrar os documentos (data de emissão).
          schema:
            type: string
            format: date
            example: '2025-12-31'
        - name: search
          in: query
          description: >-
            Termo de busca para filtrar documentos (número, razão social, CNPJ
            do remetente).
          schema:
            type: string
            example: '9001'
        - name: was_imported
          in: query
          description: |
            Filtra pelo status de importação.

            - `1`: Lista apenas os documentos importados
            - `0`: Lista apenas os documentos não importados

            Se não enviar, lista todos os documentos.
          schema:
            type: integer
            example: 1
        - name: min_value
          in: query
          description: Filtro pelo valor mínimo do documento.
          schema:
            type: number
            example: 100
        - name: max_value
          in: query
          description: Filtro pelo valor máximo do documento.
          schema:
            type: number
            example: 1000
        - name: order_by_field
          in: query
          description: |
            Campo para ordenação dos documentos.
            Exemplo:
              - `number` Número do documento
              - `emitted_at` Data de emissão
          schema:
            type: string
            enum:
              - emitted_at
              - number
              - serie
              - model
              - value
              - emitter
              - status
              - imported
              - created_at
            default: number
            example: number
        - name: order_by_type
          $ref: '#/components/parameters/OrderByType'
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista de documentos fiscais eletrônicos recebidos.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      documents:
                        type: array
                        description: Lista de documentos fiscais eletrônicos recebidos
                        items:
                          $ref: '#/components/schemas/NfeReceivedDocument'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
                required:
                  - data
                  - meta
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/nfes/received-documents/{nfeInId}/events:
    get:
      operationId: get-nfe-received-documents-events
      security:
        - OAuth2:
            - nfeReceivedDocuments:read
      tags:
        - Nfe
      summary: Lista os eventos de um documento fiscal eletrônico recebido
      description: >-
        Retorna uma lista paginada de eventos de um documento fiscal eletrônico
        recebido.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: nfeInId
          in: path
          description: >
            Identificador único do documento Fiscal.


            Você pode localizar os IDs dos documentos fiscais no _endpoint_ de
            [listagem de documentos fiscais
            Recebidos](#tag/Nfe/operation/get-nfe-received-documents).
          required: true
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista de eventos de um documento fiscal eletrônico recebido.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      document:
                        type: object
                        properties:
                          id:
                            type: integer
                            description: ID único do documento fiscal
                            example: 1240
                          key:
                            type: string
                            description: Chave de acesso do documento fiscal
                            example: '35240503620142000220550000001380751409369001'
                          emitted_at:
                            type: string
                            format: date
                            description: Data de emissão do documento
                            example: '2024-05-09'
                          number:
                            type: string
                            description: Número do documento
                            example: '138075'
                          serie:
                            type: string
                            description: Série do documento
                            example: '0'
                          model:
                            type: integer
                            description: Modelo do documento
                            example: 55
                          value:
                            $ref: '#/components/schemas/Money'
                          status:
                            type: string
                            description: Status do documento
                            example: Transmitted
                            enum:
                              - Pending
                              - Transmitted
                              - Canceled
                        required:
                          - id
                          - key
                          - emitted_at
                          - number
                          - serie
                          - model
                          - value
                          - status
                      events:
                        type: array
                        description: Lista de eventos do documentos fiscal
                        items:
                          $ref: '#/components/schemas/NfeReceivedDocumentEvent'
                    required:
                      - document
                      - events
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
                required:
                  - data
                  - meta
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/opening-hours:
    get:
      operationId: get-opening-hours
      security:
        - OAuth2:
            - opening-hours:read
      tags:
        - OpeningHours
      summary: Lista de horários de funcionamento
      description: Retorna lista dos horários de funcionamento.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: week_day
          in: query
          description: |
            Dia da semana do turno de horário de funcionamento.

            - `0`: Domingo
            - `1`: Segunda-feira
            - `2`: Terça-feira
            - `3`: Quarta-feira
            - `4`: Quinta-feira
            - `5`: Sexta-feira
            - `6`: Sábado
          schema:
            type: integer
            example: 0
        - $ref: '#/components/parameters/DeletedQuery'
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
      responses:
        '200':
          description: Lista de horários de funcionamento.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/OpeningHours'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: sync-opening-hours
      security:
        - OAuth2:
            - opening-hours:write
      tags:
        - OpeningHours
      summary: Sincroniza horários de funcionamento
      description: Sincroniza lista dos horários de funcionamento.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/OpeningHoursRequest'
      responses:
        '200':
          description: Horários de funcionamento sincronizados.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OpeningHours'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/payments:
    get:
      operationId: get-payments
      security:
        - OAuth2:
            - payments:read
      tags:
        - Payments
      summary: Lista de formas de pagamentos
      description: Retorna lista de formas de pagamentos disponíveis.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: payments_id
          in: query
          description: >-
            Filtra pelos ID das formas de pagamento. Pode passar mais de um ID
            numérico separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: name
          in: query
          description: Filtra pelo nome do método de pagamento.
          schema:
            type: string
            example: Visa
        - name: fiscal_code
          in: query
          description: Filtra pelo Código Fiscal do método de pagamento.
          schema:
            type: string
            example: '00'
        - name: is_default
          in: query
          description: Filtra por formas de pagamento padrão.
          schema:
            type: boolean
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
        - name: deleted
          in: query
          description: Filtro para indicar se deve retornar dados apagados ou não.
          schema:
            type: string
            enum:
              - not_include
              - include
              - only
            default: not_include
            example: not_include
      responses:
        '200':
          description: Lista de formas de pagamentos disponíveis.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      payments:
                        type: array
                        description: Representa a lista de formas de pagamentos
                        items:
                          $ref: '#/components/schemas/Payment'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-payments
      security:
        - OAuth2:
            - payments:write
      tags:
        - Payments
      summary: Cria novo método de pagamento
      description: Cria novo método de pagamento.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/Payment'
      responses:
        '201':
          description: Nova método de pagamento criada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payment'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/payments/{paymentId}:
    get:
      operationId: get-payments-id
      security:
        - OAuth2:
            - payments:read
      tags:
        - Payments
      summary: Obtém método de pagamento
      description: Resgata um método de pagamento já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: paymentId
          in: path
          description: ID do método de pagamento.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Método de pagamento.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payment'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-payments
      security:
        - OAuth2:
            - payments:write
      tags:
        - Payments
      summary: Atualiza método de pagamento
      description: Atualiza um método de pagamento já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: paymentId
          in: path
          description: ID do método de pagamento.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/Payment'
      responses:
        '200':
          description: Método de pagamento atualizado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payment'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-payments
      security:
        - OAuth2:
            - payments:delete
      tags:
        - Payments
      summary: Apaga método de pagamento
      description: Apaga um método de pagamento.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: paymentId
          in: path
          description: ID do método de pagamento.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/sale-orders:
    get:
      operationId: get-sale-orders
      security:
        - OAuth2:
            - saleorders:read
      tags:
        - SaleOrders
      summary: Lista de pedidos de venda
      description: Retorna lista de pedidos de Venda.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: search_term
          in: query
          description: Filtro pelo Nome do cliente ou ID do pedido de venda.
          schema:
            type: string
            example: '123'
        - name: sale_orders_id
          in: query
          description: >-
            Filtra pelos IDs dos pedidos de venda. Pode passar mais de um ID
            numérico separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: item_name
          in: query
          description: Filtro pelo Nome do produto.
          schema:
            type: string
            example: Banana
            maximum: 80
        - name: item_id
          in: query
          description: Filtro pelo ID do produto.
          schema:
            type: integer
            example: 123
        - $ref: '#/components/parameters/SourceTypeQuery'
        - name: unique_id
          in: query
          description: Filtro pelo ID único da venda.
          schema:
            type: string
            example: cf2e0a5e-aa58-4181-9c9b
        - name: seller_id
          in: query
          description: Filtro pelo ID do vendedor.
          schema:
            type: integer
            example: 123
        - name: user_id
          in: query
          description: Filtro pelo ID do usuário.
          schema:
            type: integer
            example: 123
        - name: customer_name
          in: query
          description: Filtro pelo Nome do cliente.
          schema:
            type: string
            example: CPlug
        - name: customer_document
          in: query
          description: Número do documento do cliente. Pode ser CPF ou CNPJ.
          schema:
            type: string
            example: '43496196000'
        - name: customer_id
          in: query
          description: Filtro pelo ID do cliente.
          schema:
            type: integer
            example: 123
        - name: start_date_time
          in: query
          description: >-
            Filtra por dados que foram registrados a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
        - name: end_date_time
          in: query
          description: >-
            Filtra por dados que foram registrados até uma data. (Formato:
            YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
        - name: status
          in: query
          description: |
            Status do pedido de venda

            - `canceled` pedido de venda cancelada.
            - `closed` pedido de venda fechada.
            - `in_preparation` pedido em preparação.
            - `in_route` pedido em entrega.
            - `open` pedido de venda aberta.
            - `reserved` pedido de venda reservada.
            - `takeout` pedido para retirar.
            - `waiting` pedido de venda em espera.
          schema:
            type: string
            enum:
              - canceled
              - closed
              - in_preparation
              - in_route
              - open
              - reserved
              - takeout
              - waiting
        - name: delivery_type
          in: query
          description: |
            Tipo de entrega do pedido:

              - `delivery` entrega.
              - `withdrawal` retirada.
          schema:
            type: string
            enum:
              - delivery
              - withdrawal
            example: delivery
        - name: with_items
          in: query
          description: Indica se devolve a lista de itens da venda.
          schema:
            type: boolean
            default: 1
        - name: with_payments
          in: query
          description: Indica se devolve a lista de pagamentos da venda.
          schema:
            type: boolean
            default: 1
        - name: with_seller
          in: query
          description: Indica se devolve quem fez a venda.
          schema:
            type: boolean
            default: 1
        - name: sort_by
          in: query
          description: |
            Campo para ordenação.

            Exemplo:
              - `created_at` Data de criação do pedido de venda.
          schema:
            type: string
            enum:
              - created_at
        - name: sorting_type
          in: query
          description: |
            Tipo de ordenação.
            Exemplo:
              - `asc` Ascendente
              - `desc` Descendente
          schema:
            type: string
            enum:
              - asc
              - desc
            default: asc
            example: asc
        - name: total_from
          in: query
          description: >-
            Filtra por total do pedido de venda maior ou igual que o valor
            informado.
          schema:
            type: number
            example: 100
        - name: total_to
          in: query
          description: >-
            Filtra por total do pedido de venda menor ou igual que o valor
            informado.
          schema:
            type: number
            example: 100
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista de pedidos de venda.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      sale_orders:
                        type: array
                        description: Representa a lista de pedidos de venda
                        items:
                          $ref: '#/components/schemas/SaleOrder'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-sale-orders
      security:
        - OAuth2:
            - saleorders:write
      tags:
        - SaleOrders
      summary: Cria um novo pedido de venda
      description: Cria um novo pedido de venda com status em aberto.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/SaleOrderRequest'
      responses:
        '201':
          description: Novo pedido de venda criado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SaleOrder'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/sale-orders/convert-to-sale:
    post:
      operationId: post-sale-orders-convert-to-sale
      security:
        - OAuth2:
            - sales:write
      tags:
        - SaleOrders
      summary: Converte um pedido de venda em uma venda
      description: Converte um pedido de venda em uma venda.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/SaleOrderConvertToSaleRequest'
      responses:
        '200':
          description: Lista de vendas que foram criadas.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      sales:
                        type: array
                        description: Representa a lista de vendas que foram criadas
                        items:
                          $ref: '#/components/schemas/Sale'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/sale-orders/{saleOrderId}:
    get:
      operationId: get-sale-orders-ids
      security:
        - OAuth2:
            - saleorders:read
      tags:
        - SaleOrders
      summary: Obtém um pedido de venda
      description: Resgata um pedido de venda.
      parameters:
        - name: saleOrderId
          in: path
          description: ID do pedido de venda.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Dados deste pedido de venda.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SaleOrder'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-sale-orders
      security:
        - OAuth2:
            - saleorders:write
      tags:
        - SaleOrders
      summary: Atualiza um pedido de venda
      description: >-
        Atualiza um pedido de venda. Só permite que o pedido seja atualizado
        enquanto ele estiver em aberto, caso contrário, não será possível.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: saleOrderId
          in: path
          description: ID do pedido de venda.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/SaleOrderUpdateRequest'
      responses:
        '200':
          description: Pedido de venda atualizado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SaleOrder'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-sale-orders-id
      security:
        - OAuth2:
            - saleorders:delete
      tags:
        - SaleOrders
      summary: Apaga um pedido de venda
      description: Apaga um pedido de venda.
      parameters:
        - name: saleOrderId
          in: path
          description: ID do pedido de venda.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/sale-orders/{saleOrderId}/download-pdf:
    get:
      operationId: get-sale-order-download-pdf
      security:
        - OAuth2:
            - saleorders:read
      tags:
        - SaleOrders
      summary: Download PDF de um pedido de venda
      description: Retorna o blob do PDF do pedido de venda.
      parameters:
        - name: saleOrderId
          in: path
          description: Identificador único do pedido de venda.
          required: true
          schema:
            type: integer
            format: int64
        - name: with_grouped_products
          in: query
          description: Se true, o PDF será gerado com os produtos agrupados.
          schema:
            type: boolean
            default: true
        - name: with_price
          in: query
          description: Se true, o PDF será gerado com os preços dos produtos.
          schema:
            type: boolean
            default: true
      responses:
        '200':
          description: Blob do PDF do pedido de venda.
          content:
            application/pdf:
              schema:
                type: string
                format: binary
              examples:
                default:
                  summary: A sample report
                  value: "%PDF-1.4\n%äüöß\n2 0 obj\n<</Length 3 0 R/Filter/FlateDecode>>\nstream\nx�=��\n\x021\fE����v\x11���0\b\x0E�~��\x0F�\0\x17���߷��d�{r\x12\"X�\r��²�G\n�\x19�\r�\x1D^�Y��AS!��0X�r�b\x7FVhl�\x1D��8��\x0F(O�vN�3J�$o�z\f\x1C6\x10��Сw���$ɝj�O��Q��N�f��\x01˒(\n\nendstream\nendobj\n\n3 0 obj\n134\nendobj\n\n5 0 obj\n<</Length 6 0 R/Filter/FlateDecode/Length1 23164>>\nstream\nx��|y|[Օ���=-v�Ȼ�E�Q�*^��q\x16\x13��BR7�\x13;�\x0E��,+��m)�\x14\x13�&a+`��ai)L1��m#�\x01�\x04\x1A\x03e��P�a��N\x19�k�����t(eZb����y#�ig~\x7F�>�_��w�=�l��s�}O�\x15\x1C\x0Ey(�\x0E�BN��˿$13��������\x05�?ܞ�\x14�i\"Ӛ��=�_x���#��#2�t�����J��.Q�{�\x1EW�#�y4�(�m�X�\x0Fĥ�W��r ���\x0F\x06��2���x\x03�U\x03>���Z��\\�qΠ�\n�\x0F,/\x18\x01ށ�6�\x1A�lT\x7F{3�G�*���@�T\x16%�(�k�a�?yK�&�O$\x10Y|�1��\vcf\x14c��\x06��\x1C\x17����|\x19�S�l\x0FS�ZD�[���6퍾.�D�\x7F\vg�ǚ���7觬�i4��LY�>�f�i#��'d�\x11:KwR:u�],��R&m��L\x05��nf�D�Eߢ�����S���c��\"�\x03�\x0F\v�MeTG�A��<���\x06uG�Bf��\x16�Z��2�E?�����v����>\x17}\x1FZ��jȫ�Fj�>\e����f��ᕸ'�6:��Qw�K�i\t�rG�'�ר���k�\r��`S�\x06*���:�2�V�\x01Н�u�f\t|��d8\tM\e�\x12\x1A�\x11\x1A���\a,��\e^1�\x13�l�M2R\x1A��&/��j�&���\x10]\x17�9]J��{X�xO���\x0F\e.�n��}�9ʠ�X<{�=k�6�z�����o!#�h9<�\x19zz�\x1Az��O�N\x7F�\a�\ai\x03u@�\v,�i�\b\x1E�\t��\a�\x01�e��jw��\x10�GaD�8��g��\x7F���\x06Kg��\x13������\x13x\x1F\x7FI�G9�����G�o;\x15�GAz���~~�^b\x06ȯb��3�Ǿ�����a�6��jV�Q���5\x14M���Kts�d�\x1C�$]I\a�ۯ�\x04\x1D�\x1Fҏ�\x0F�\x1F�\x1E��U������4{���%|\v�������f�6�Y�V]�^������\x05�M&�i����o����OE\x7F��I��\"j�G�BV<H'�eH�\x19�J�\x14�\x03�k�\x0E�ih\t�\e�\x1D��\x05�#�[���{\t_˛��Ǉ᧫���\x0Eh\x7F\t�S���U�;�GŠ,QV*{����2��R~�Z�\"�B]�nQw�QD��p������q�s�w���>���\e�զk��t���M�t�txz\x02�kF&]\tO|�\x1E@�\x1FE\f~\0��\x10\x16��w\x11�\x1CV��a�j����&�)v\x19�����ؗ�=�\x01�-�\0k�&���������_˯��x\x1F���?��3�<K�+\x0Ee��Q١\\�\fa\rA�r-<{������\e�\f���.VC������Q�G�O\x1A\x06�~�p�0e���\x03�\aFn�1�\x19+��1>b���hZij7�h�\x17�\x7F��,���rm~���؃��c<]=��\0��TJ��\x1D�C\av�\x7FP�2��$�yؖ���4�it�a�\a�\t�e/�A#WP���\x14a�����E�c�òՇ�!�\x0Fx\x01=�jt�?�O��t���K��\n�7�#�\x06��\n��]�\x02�8;�ְϳ:v���g*\x1D�Z��>�U\x16�6�w\b\x16�Uj\x1F}�� [M������&��C}���\x10�o�k�Q�33D�FuSP�\\�27#߯#Q�vb�\x1D�~�F\x05\x190�DGŉb�3�S��w�?�-�qd�zT�7���W�_E���a�e�\b�]?]�\x1D�\x06��\x19���2��xԒj��v�A}�yT�ۢ���k���>�G���-c\x7Ffc�\x11�ਧ���E�\x19�\t�����)0�GS�[fe��\x1A��a���1�Q÷\r/\x1A�����=��_\"��\x027��~K\x7Fbf�&��Q\r�]\x05ۻh�w+�P\x13�!?�l\t��z}%\x01H�\x1A޻\x17��\x19�wP'.�o�+��,��\r�f�i��w��!D�\x1A6\x01L\x1F�v\x19�\x0E�Nb�x\x10���t\x17��\x14l�\x05�\x1AގJ���.4�K �O�)ꃆ����\x11�'i5*k��O��Rf��l\t�:�z�C�(�V\e~�8-��\x1C]Ž�38c�����ʥ��^X��u��\f��j���������Άu\x17կ]�zU]m͊��U�\x15��\x1Ce�%�E�K�K\n4����ܜlkVfFzZj�%9)1aQ|��d4�\ng����ڣ��z�j�}Ær1���p�C�5�Z\x17҄�\x1EI�-�t�r��(�1J�,%�h�T_�Lk�k�\x17���$۱�\v�-��n-|F\x9B$|X\x89�\v\n���X���0��Z­��G[z�!n|Q|���\x13_����\x17\x01\\\x04(�e����uL\x02<�e�8's\"�\n�؛[���faAX)lq��۷v�4�\x16\x14t�/\v�&��7L���d�$�&�&ll\n��\x1A�+VC7i�˦Fo��Po�#���纬+�����\x14\a�6���|�:7��Ԧ�����*�-V�&����kᩭ]�g\vĵ�\e2��\v[{F[��f8��C�6~]wW�]\a��X�XUl}\x1E{���|F\v�����G?Ӄ�䌆i���HN��X�4�h��]��pC���՜7�N���Od;��3���-)1ǎ'%�@B�|�3;'!I.��m��e�\"�F$DXsk��ˎ5�\x12\x17�*\x1Au�\x02\x19^�\f\\�>D�\e�k�\x19��\x11x�\x1F6\x14Z���\x1F\t\x19`?��B�K�\x18\v-\x7F$\x01�<�M5���a�#\\V&R�Ԅ���ur\\[�l�$_i�[4tp\x1F�÷��5�p\x7FA�\b�M�N�� |hkWl�Qon�����0�\x113S33\x19��̡��Y�\x1E;2��|\x10�\b��f�%[2�Z�ׄY��L{b�m\x1D���;����\x1Eݷm�\vF��U�s:\x14Nk�Rr�\x0E�\\E�\")/�%\x16����Z�\x7FF��}a\x05I)\x11Lk\r[z6Į��\x05\x05\x1F�3i2�c���#�d7Ǧ[\x19^�X8^�`����Q\x05��E��s��h���V\x14���V��:�3Ꚍ\x1E�k\x16��1�0\x7Fx���3\x13����rí7wc\x11�l\r����q;�a븓�б��\x05Oo7tvE8�M=�Ǘb��\x18nE�\x12�g�b��\x11�1$z���T�1'�!9�J�\x1C�'\x19I�y\x06��=�c8���U��\x14\x11|\x03�8�M��(g�F�$op��A�V(ޤN3�6\e\r�\\y�\x15Q\x1Cnv�duXޫ?[���n�����\0��\x01.˫\nR\nR\nqa���@S�>p\x1A�/��SЅ'\x182��e!\e\x1Dt�(1��_��Q=\t����Y\e2�3�3\r��V�^�{��E\x06[J!#��Z�l1g\x17\x1F11�dtj\"nQ\rL�ٙv��i\x05U\x05� %U#�Re�I~ӄ����i;�m�,;���ػ�4�A�H;���i\x05�Y���\x19�\x17��^�RVT׭�5EE�E�;x�S=WM�����tM��Ͼ�J^�\\݆]��\x03\x1D�0\x1C�+zn��\x1F>q͘��̦>�AmR�%/<�ؓ�S�ĳ�-�ߨ\x1D��ˤ{�Y�Jٓr�A�3f\e�y}J\eoKy���'yЙ�.ʤ�����8cZzQF\x06M�RgR�S[Zs$�E3Yf�\x15�vf.YZs�:f�~�;V�{+��/*�3��dЎ��;ff��j��k�;�\x10�ߌ�\x0F;�C�t��\"#Uo�\x17\x1A�\b/��\x05�F�}IQQ-������z�J\x01*��<���O�l۶�\r�e,�����~�.>6m=�Y�%�:�����:\x0F�~���:*fk�Q)�ٙ\x12�`0\x1A\x132��\t5J���Zco�-�\x16k�=AS*K;�zJ\x0F��W�u�æ�\x12�0>�\x10.=Uz�4�J+K�1q���Rc�3'��\x01�Cr�`*PM9��pY$�T <�X5YRR�s���\x19\x19�-E�)�\x1D�=)̗�R&y�39'�(?\x0F8_\x1E��cy�\x1D-Dt\x19|\x1C!*\x16ɔ\x1C� z�J�]\f�bg#Z=���b皋j*�_*~�XI.�\x15\x1F*V�X+�*�\x16���%���Z�8�B�����۹ׁD{o�N�������p��\fKI]Mh˫ذc�N���V��rEuf�Jy��@\bj��K�F\t\x16̀\a�r��Z\x1F�,�@I�����[��WL���aec\x7F���j�m�vn�޹��/��滾ZQ�ᦻ�9o�gǲ�k�>�\x01b�4�U݆�Lc5GSK\f,m2z�iMH�1g&&ט��(.�L�p�-gM\r��&.J2Z8�\x19�4�*\n���z,�2Ɏ8S\x17%'V&���Q�ѓ����2�\x7F�\x14Ոޙ���&#++G]�8��5\a\x15�L�bg\x1C�#T?1J�Ӊ3oe�FU�\x16���\x19�9ر�l6��g=�����k�c��&˻�SÙ��\rҵ,uu��k�j\0�$���\x0E&㲳-l�h\v�Aŏ�\x16:\x1E}�X��q\x05��xu�D9F��o�I�)\ri��l\\R�\r\x06�!\x13\x18�>�qLVwZAZZ\x013%)�%��b��%1����>}cSaӧ\x0E�oݜ������j��$��\x0F����\x17-I�Eb�[��;�,�>j`2�G��Fñ�cV�b\x03�c�����\x14&&%Q��\x10.I&s�9U/Ӗ_�ߓ��?�oȷ$k,�,Q��\x16\x16�ٺ'�^��ʹڷ\"�@C��H7��g��r�׈�w'�W����c�_����?���}M��P;f8�Y���'�)\x19g\x7F�>7�S���ޟ\x18�l�\x12�s-�\x13G��\x06�A5\x1A\nM���|���Y�4\x1F6s��\x14U�'�̦\x06�\x16<�oSp��\x1CmQ�\"�H�������@�z\x0F\0\x06s�ع\x17�b��c5XHF�l_RΜ]����k8���MT'+\x1C�k�˨\x93��*+S5��ҭ\x1E�\x1A��I+��L�驙)Ii�dIJcd��q��Elע(\f\x13e&��R�c�XV\x1D��x�\x16���������nV�%�ʔ])<e���Ĥ�\"����2�2y&B�d\\BMfv�\x15Ǹ���\x1C{�7�������~��X�X\x15Z\x03.����By\x10�!mEm�(\vY&Q\x0422Vd�Q\x12��{W�\x1D�\"PԴ��\x7F���7�U�ڿpm���XVom{�����\"�n���@l��>r��\x0F\eP�q�q�P\\8n*�T���\f�����qc@\x18\x14�\t\a��L�I��Ĩ�N�\"\x18\rF�\x1A�MEL\x15{9�`i��m֏\x1A�~\v \x03�%����`\x01Î4���ng��o�l�I�N\x7F�O�E8@�<\v;�\x16�r�\n�\f�\x06~�\x106L\x19N\x19~o0�\f=���1 \f0\x067%\\)b4c\te��X��^\x11�k8��Vx�\x11gr1Ϊt�c_;F�����E���J�]�G\f\x0Fǟ�;�8�c6��\r�bck��ŏ$>i|2���K�I�+\t����������ͯ�p&��$g��x)C��.yq�쓲��[�\t�I��I=I<ɚ�D\x16d�ְ\x15���|�F�KJc��<�[�d�LNJ�\x19\x13��\x16��+5\x15�7�.J��\f\\��D\x05�2�`K\x12Kʩ\\�k�o�}����\x05f'��9;��\x18�Ʀ3r�l:�.��\x19\x149g��Y��`u.N�%ׂK^J�,j\rge\x11L�\x11�H\x15ƀH��\x13}d�\x14�,���0��L�g�.<\x11\x17�N\x0E\e\v\x1A\x1C$�_w�(�ꓜ�R�P�$�'9�,�BQ�\x1C\x0E\x1C���\vC�v\x0E�#Ǯ\x15\x17�ZhE5)\x05��$M\x1C�&c\x16�3��|�������ϰT�Y�r�k��b�K.��gl[�W�\x7F�W�\x19�����|��\rl�ʃMM\x01�1�����{��q��]��\x7F4g��C\x0F��~�S\x7F��j�2�\aCmc3\x1F�\x11��Mo���\x0F�>�\x01S�\x11(�w�\x0E�Wt�)�\x0E�\x01J�q�{\t�\tܗ�cd��v�0�\b���8����|Rє!�\x7F�\rj��Y]z\x02� \rċ#!*i;�6[|�\b\x02�K���ݻ4X^\x15�\x17/G��\x9D�\x0E+��,:�R:��a\x03Y��t�\b�\x0E\x1D6�w�7t�LEܯ�q4����x�9E��E�k��\x0E'�ns�\x0E'\x1A��\x1F��$�,�ӳ~;�|\\��6�j\x1D�Z��B�,�uX�xː\x0E\e(�r�\x0E\e\x01_��&�\x1C�a3�Y���qԒb��x�J��\x0E/��i��~[�\"�\x17:���HO��$����\x12�\n�'e}I�U��zP�\x06��N�J�Yߗ�\x11xc�k:�Rj�\e\x126��d�I�\x11������'X�tX%��&�8\x11_k�\x0E#�ٵ:\f9�\r:��f_�Ð�}�\x0E#��\x13:��f��\x0E#�ٿ�a�7�a\x1DF|s^�a�7�S:��j�:��j��a�W�_:��\x16�)�x��\x7F�a��8��E���d�J�K\x1C\x12N\x10k)٨ð�d���D�xtX�����-R�m:,�|M�i��%��0|^�]\t�\v{J~�ð��M\tg\0�^�tX%�4C\x99���V�A_�$�lI�S�\x05�^\t�\x1C(�M��\x03��H8_�S:�ð��)\t�$��uXп,�\"\aJ��a�@�\x1F%\\&�S����OY��rQ\t�JuX������0�/��c��*۪�\x02�K�\t1��:,��KXƥ�~\x1D\x16z\x1F�N�O~��nr�\e�F��uR��7���Ђ:����a���\x02�+)4`\x06�_\x01�Y�]�CI���iԁ�\x01\n��\x04�ۈ>�o9�ƻ��u�Zb\e�1�~\ex������\x06y\x01�aڇk\x1F��1�\x02�z���\x1C;�̣�f���%RJ`��\x15�Z���*�\tX7f}����A*=����1G[>Ϯ�y�oI�\n��A� �a�\x1C8����s\rX\x0F��MAi�𑆱�\t�R�#\x1E\x1A�K~����M�n�����.�\v>\x0F�\no�HN!��<6���^a�\x1F��?��#�KЍH�������[.��^���r�_z�\x05k���>,g�2S;p\rI�c\x11�e�*�R��$(�<�aآ�ʥ�b,����}2�D�\rI]����e��m�sPJ\x14v�C���\x18�&�vI}n=\x1A�\x19au@��K�1Ʒ\x7F6�^=��z\x04=�7\x01�����Dȥ�\x1F��4�a�U3�\x17�\x11�\x11)�\x7F^6\bZ��\x15�=��y;�{ĭgj�\x1C� dz�W��c��:&$=-2j.�}r�\x0EK�\x0EH~a����5��-���Z��Jc�QH���nP\ni1�_��w}�J��>$GsQ\r�,\x1D�֝?'fjk`v-bnPʛ�!��庵.��nY�4}����O��#�1~�üz\f����9��U��}��c\x12檽K�*�\x1D���[_�WFm@���ދe�䌭d~v{g3K��+��\fJkDn���V��\f��1(Gs�\e�Љ\x14���ܺ�^)!$=ݷ 7=�\x17�\x19ϊ�vϮp��mM��\x15ҷ\x01�w��z\x12���=�߃zՈ����es�36;(#�+%\x7F�j!�-g�2-��Oz�/w���U��\x1E�5S̻�'�u\x1Db\x0Fż\x18��3\x16�H��\x1C\x1A�usƶ\ny�\x051�\x06gj%�w���_a+du\x1A\x04E��K\x03�\x06\x01\r�\by�(@�d\x0E�\"^1K�\x7FWÈ̘\x18�g��ͨ��8�[њ�y\x02�\x02�8\x01Zq��ķ\0Ӂ��͋q\x12��Ib;)\x11OS�u�l\n�'״Y|l��<��}>��\x7F�)6\x17���<\x13�^9�\x1F��Y����\x16���h~��U��:\x1Aۿ^�f\x06�=�GJ���D�[�umbw��ki��i\x14�\x19�\x18���Α����w�g6��e�\b��y�������.\x14\x1E�̓2����ק��\"\x03{ee�YݫGfH�|�\b\x15�U-�T�\"��\x15�j��m���佨\vZ\ato\a�\x1A�Q����\x033Wg��\x13\v�~�1��+V�]�\"���W���kb��84����\x15��Oz�;�\x14\x19�w��l�zx^�Ν�\x1F�)aݠ�?�W�\x05�Fd�/�ќ\x7F\x1F:S\x1F�(}��ݡ��ǅ�����욟݃zE��?���z~�Uޅ9�q+�ˏ�r��Fn��K�9\x1E�\x0E-�����[Fu�C1\x18����$\a��jH���Ρ}��h���]��џ�7���y�g���ŝ\eǘ���X�R��x&b�\x0F�z��d휗�հ�_h�G��\r�왑 �O\x1A)�$P�{�\x1A����r���|U#��ħ#۩M����r���p\x1D���$�J�ų�hB��v���Oƙ��\x0Fyo�<�����v�=ڣZg�G��\e�\x05�Қ|�~߰+��\ri�\x01w���\n��\v�J!L��\r�\x04&�m\x1C\x02��ի��q���\x1A\a\x06�m�=�����\x13�\f���5\x0E{]\x03�}\x03}32�H�&Pk.�\f\a��\x15\x15UUZ�&�{�\x17��\x0E�Α̧��r)�S\x8Fh�î>Ϡk�rͷ�c-׆={���g�ӧy�� H�wh���V�unҶ��]����4�@�3�\x0F��YIX�oϰ�߿\x7F>ʣ5\x0F�F�C{\x04�\x17�-׶�z!z����\ep\x05�\t��^�ץu�BC}X\b\\����7\x14�\f\nۆ�k\x01\x17�\bGywk}��w��2-�v7�\\^L\x0E��=Z\x7Fh�5\x04�5w�k���20�\x03X�kH��~�~/���\x02=nO ��:� \x17����W\x17%\x16\x1F\x1A�h#�`�tà��'�\x05\f��0�\r�\x06fp�\x11�P��\x01�\e@hx\x7F�&=���\x19v!��a�+8�)��\x0E!�\x01�L��3,M�\x1D\x1A\x18\0(m��A\x1F�x��B��\\j �\x7F�3�\x13\"[\x03B�gx�;$)�}�C�\v��CP\x14\v`�׵�'�G��s��3��G|�\x1E�>�$�i��\x06�\x0Em�\x03�\ry� w��\x1E�q�큒����Y��\n,f�3�_��\x02ȝ\x01!c�; �\e�7R@��\x06G�G\v\x05�Rқ��!al�-����aɐ�E\x05�\"O��a\x0F�\x1EDj L\x01�L�'���=�+�C\x10�\t��Ŝ\x06�>o�?��/T\b�!�H����4���Ġ7 \x04\vr��o�'�U�\a��5��###\x15�z�V�}����������ے���.�Xx�@��\f#�\x01`=�e�΍�\e�\x1A;7n٬mi�>���esG��x񶖖M-�;\x13�\x13�;���\x19�\t\x17���P� (=z�-&\x17#\x12Y��w���\x17\x12�n�m��G��Dr�\x1CE|���@��3��L�к���B\x1A�z�6\x02gp�1\";GD:y\x108�����\x1DD�wÏsv�\x10��x$�\f�,\x1FB���\r\x05!\x1Af����-�80c\x14\x12y�\x15��\"۴}����\x17\x19�\n C�sWhۇd��Y\x05֤W.��K\v�=n/�ι+���!�m�����\x159��\x1C�Uy�@\x0FK����!�\x06��^� (�t#���\x03�$��(��\x11\x14�P�7�/�@V�݃HT؏P��k���=�P�����s�\x13�ko�\x13�jP�ܞ�!}\x05úݒ8��\v\r�a\x0F��zFb���\v:D҃\n�7W�f�\b�dau\a�b,\x16�ҭ�}~���Y\x06}�날�\x15\\#\b�w4�\x10(YUSW��-_U^USU\x15\x17��\rȪ��kjp�[Q�խ�]]�:1�#v��nF1��͓�\x10��\x1E�&I�����e�L�B,\x11�\x06o-���\x1Fsk:�U��c���SnP�Q����u|��\x02���\r.|mp�k�\v_\e\\�����\x06\x17�6�����\r.|mp�k�\v_\e\\�����\x06\x17�6�\x7F�k���\x0F��Q�,�f>�>��>�\t-�=w�bY5\x02\v�fp��\x16Ɨ�{�\x7F\v���:,��ᙹ��W���%\x12�O\x13�l��}���\vg���7$��|rWΧ>��|O�>҇>զ�SתM�Ju��T/R�����;�y�Ot氭�'�i\x13#�\x1C4���m����\x1F�x\x1E���/\x15;�d��,�͛��7\x7F����+���S��~J�y}�:��P2cd�N)_���W;'��'�Ӫ��\x16�NjG�\x14V6�\x14\x1A'�r\e\x1DD� o��/�>&����j\v�o\"\r�\x10�Bc�29v�\t��&�2��k\"�)�ﳑ��\x180a�V�7�+W\x10S<�\x10�ɦ\x1C@�\x18�\e}>�^�\x0F�B��H�T\x1F��\x06�7(\x19(C6�Qɤj��J\x0E�J�P$)�'\x14))�n�W�\x14�$IV\x12Q�l�Y1E�m�\tE�ٰS�a\"n��%��\x19�:�D�:\x04�,[�3J<U���tN�%V\x1FnLP:��N�Ŧ���\x7F��:��\b\x04A_��G���\\ɧ\f����H�m�r�$�;!\x05��E�+D7��T=�\x18���\a\b+���Jm�'�VUSc�RBU��\x13\tM9\b�����(�Q�i\x14�\x19EhFa�(\x19\x11�\e1s#h*�+ɯ��a��\0�\x10�\x11�\a�I`iI�1%[��\x13�\x13�\x1D\x036g\".IXf���I2�DBRu�3J���q\x18\x1F�ȲV�N(er)�&����\x1F�K��b�\0c���3J��Xz\"_z �hØQ�b#�\x7F�O\t����E|�O���\x1F��E��a��N�S\x13����,�Ӎy�\r\b��_��\0q~�?����\x7F�'�\x15�g�\x185�\x7F\x05�>��Я@\x7F<R�=�$��@\a��$f����#�J\x1D�\x15�@V�\x0E�fV7\x16�����\a\x11?E�\x14��|���?�ފ~�\a�{�൴\x16�Q��\x0E\x7FZ�4\x7F�?�3��'\"I\x84p�$�#\x11��\x15�ب���4�\x16\x7F�r@��HQ\x0E��L\x14-�%��<�\x1F��H�-�1��Ϻػ \x1A�WDO���H�\x10r8�f;�\x0F��Nk���Y�|H�*�*�zH�\n�r�N{Hk��[�\0�a��p��̑=hN���ƈZ\x17n<�5�uq:�똄zp�K�p��ξ#�\x06~\x1DmA�q\0� �!��H��J�Ϣ}\x0E��\x12\x13D\v���|���\a�\x1F\x1C~��\a�\x1F\x1C~p�%�_j\x0F�\t�\x1Ep�\a\x1C=��\a\x1C=��\x01G��\x10����Gr���\x1D\x1C��h�\x1C��h\aG;8�%G;8���.9��p��\t\x0E��p��\t\x0E'8���\t\x0E'8���\n\x1CU�\x02G��\x02G\x158��Q%9��Q\x05�*ɡ�C\x03�\x06\x0EMrh�����C�\x1C\x1A84ph��\x02\x0E\v8,�H\x0E\v8,ఀ�\"9,2>!4�q\x1A\x1C��q\x1A\x1C�%�ip�\x06�ip��\x1C��q\x1A\x1C��ȸr��\x05��\x02�)���,��r\n,��rJ��\x02�)��җ\x1E���H�\x03h\a�\x0E�\t�)�N�w\n�S�wJ�W\bM���\x11\x06G\x18\x1Ca�\x11\x06G\x18\x1Cap�%G\x18\x1Cap�%�\x188��1\x06�1�1\x06�1p��cLr���\r�\t��=)����X�\x19�+?�Je\x7F�ޖ�\x01zE���q�\x7F�\x1E��g�j�_Iu�\x1F�\"�C��d3���.�1\x13%`\v�.4\x1F�}hG�N��$�\x12�khQ^�\\�&����3\x1D1�4\x19��N�x�q��>�\x11�I���k��<Q�Q�\x16���\x1E���h8Dpm�P\x03���\x1A��Z�kx�3���2�R\x19;YƎ��/���8~1Se�Ý>��˙P���\nZ]Q�:T�[�|;�\x16)Zi�dOǺR�\x03��h�h\x0F�]�V�V�V�V�f��2�w9��\"�F+F+@ӄ\n����Mj��y�'��&^H�8���\x04|'\"�U�&#�[�=\x15)�5Ʊ'�X�\x06�'\x10���\x1F��^��7c�7\"�\x13�\x1E��j��\x14W��4R���1�m'�*X;��\x03�\x16����\x12�m��J�9\"�E��\f�\n1[ʺ�u�:�Ҙ&{Ķ\x16ݒ�m��6S�\b<3R�4π&ze\x02\x06��\x18�R�s���v��`�\x1D\x1C����6��{�p�]⌷=]�U\x107�\"��\x1E�øއE�����\em�@\x16+|�v���vk��\x19�[`��RE�v�6�\x1Fw��\x0E٪l���m\x01�'l.�6��B�#��lO\v3��u�ǟ��C�F��0b��pR��j�osڊm����\x7FiULn]���\x03T\x1DӾ\f�-+�\x149��n��8�L�\x0E�.5�7�5�MKL�M��ts��bN2'���f�Ѭ�������\x1D\x1C��+Ӎ��ɨ��*a\v\x17W\x1E�KS�̜>A�4���u�gm�)7��j��:�,~뎰����Sۨ�s}x��m�\x14�\x16�s��M�v�3vk7�a~�$�ήI\x16\x15��r�\x0FQ�3���c�X�u�tw�5s_��!u]�����\\z��c�e�\x0F��j��\n?��\x1D�\x16@4��-|����c<�'�4\x1F�I���:��yr�6�W��� {]�!��@FŢ\x03�y=i�\f�d� C�btE`\a]��@\x17�HE��(>QҩLЍ���4�k��)$zEҼRH�h�1�m\x1E/*�Tv�u\t*�eפa�R��\x06�r�$���M\n�1�,\\9GR���Β�J]\n����h�Kfh�K@��\x1F�<�\x1Dlby���◿z�-\x1E���M����C��6~ ��$XQO��_�.O8d�4�\x0F؛���ϟg�y1���<NϷtv�?��4G�;���]��\x13\r�]�\vt�8����<�ꅰ.����<Ӎb�A�j\x14�\x1A��\x06g����\x15y��5n���wAd?�\x17�#�{r\v��gZ��DB\x1F[[`=�{\\%�\b-rt�\x13��Éhb����QLa���$��n����ڂ���\x11}�\x02t�}=͸�\x04Q[�vk[��cG�H���u��\x05�KN[��ی\x7F\x18\ae�{>%\x05��\n��\x15\n�\x02�\x12r�)�-\\��\x16^�\x15��LP���\r\\�\fNQ$n<.�e2:�I\a�`A�N@\x0E&~#�\x19��.\x13\x1F3���xT\bN��W���\t~\x10\r�q|$R)����ĒB��\x12�����x>\x15}$��Z�\x14A\x1DXE_\x18�)�\0\x0E\x17\x1E.?\\7V8V>Vg\x14?��\x10����Q\x1A�|H��#0�\b��n��t\x01��\x1F�˗��\x04�pt;\x02�7^�îv�#\x03��:6�K\rH������\x01�\x11�&\x1D�\x19���\"'C�E*�?X�6\x13\nendstream\nendobj\n\n6 0 obj\n10825\nendobj\n\n7 0 obj\n<</Type/FontDescriptor/FontName/BAAAAA+Arial-BoldMT\n/Flags 4\n/FontBBox[-627 -376 2000 1011]/ItalicAngle 0\n/Ascent 905\n/Descent 211\n/CapHeight 1010\n/StemV 80\n/FontFile2 5 0 R>>\nendobj\n\n8 0 obj\n<</Length 272/Filter/FlateDecode>>\nstream\nx�]��n� \x10��<\x05��a\x03Zu��1ٺ��C���\x0F�0Z��\x04���\x17\x06�&=@~��7�f`usm�r��΢\x05G\a���e^�\0�è4IR*�p{���:C�׶��`j�0�%ao>�8���E�=�\x11�b%X�Gz��[\x1F��1_0�v����\x12\x06��3��\x04\fU�F��r��K�\n�7\x034�8�V�,a1�\0��\x11H�yE�ۭ\"��\\�K�A|v֗&���,�<�ȧ<�=rq\r���s�\x1C9�\v�\x1C�\x14�\x14�\x1F�\x16�\x1C\x19���u���9���\x04�a�?k�b�֯\0��������\x7F1�\t*<�;���\nendstream\nendobj\n\n9 0 obj\n<</Type/Font/Subtype/TrueType/BaseFont/BAAAAA+Arial-BoldMT\n/FirstChar 0\n/LastChar 11\n/Widths[750 722 610 889 556 277 666 610 333 277 277 556 ]\n/FontDescriptor 7 0 R\n/ToUnicode 8 0 R\n>>\nendobj\n\n10 0 obj\n<<\n/F1 9 0 R\n>>\nendobj\n\n11 0 obj\n<</Font 10 0 R\n/ProcSet[/PDF/Text]>>\nendobj\n\n1 0 obj\n<</Type/Page/Parent 4 0 R/Resources 11 0 R/MediaBox[0 0 595 842]/Group<</S/Transparency/CS/DeviceRGB/I true>>/Contents 2 0 R>>\nendobj\n\n12 0 obj\n<</Count 1/First 13 0 R/Last 13 0 R\n>>\nendobj\n\n13 0 obj\n<</Title<FEFF00440075006D006D00790020005000440046002000660069006C0065>\n/Dest[1 0 R/XYZ 56.7 773.3 0]/Parent 12 0 R>>\nendobj\n\n4 0 obj\n<</Type/Pages\n/Resources 11 0 R\n/MediaBox[ 0 0 595 842 ]\n/Kids[ 1 0 R ]\n/Count 1>>\nendobj\n\n14 0 obj\n<</Type/Catalog/Pages 4 0 R\n/Outlines 12 0 R\n>>\nendobj\n\n15 0 obj\n<</Author<FEFF004500760061006E00670065006C006F007300200056006C006100630068006F006700690061006E006E00690073>\n/Creator<FEFF005700720069007400650072>\n/Producer<FEFF004F00700065006E004F00660066006900630065002E006F0072006700200032002E0031>\n/CreationDate(D:20070223175637+02'00')>>\nendobj\n\nxref\n0 16\n0000000000 65535 f \n0000011997 00000 n \n0000000019 00000 n \n0000000224 00000 n \n0000012330 00000 n \n0000000244 00000 n \n0000011154 00000 n \n0000011176 00000 n \n0000011368 00000 n \n0000011709 00000 n \n0000011910 00000 n \n0000011943 00000 n \n0000012140 00000 n \n0000012196 00000 n \n0000012429 00000 n \n0000012494 00000 n \ntrailer\n<</Size 16/Root 14 0 R\n/Info 15 0 R\n/ID [ <F7D77B3D22B9F92829D49FF5D78B8F28>\n<F7D77B3D22B9F92829D49FF5D78B8F28> ]\n>>\nstartxref\n12787\n%%EOF\n"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/sale-orders/{saleOrderId}/print:
    get:
      operationId: get-sale-order-print
      security:
        - OAuth2:
            - saleorders:read
      tags:
        - SaleOrders
      summary: Imprimir um pedido de venda
      description: Retorna o HTML do pedido de venda.
      parameters:
        - name: saleOrderId
          in: path
          description: Identificador único do pedido de venda.
          required: true
          schema:
            type: integer
            format: int64
        - name: with_grouped_products
          in: query
          description: Se true, o HTML será gerado com os produtos agrupados.
          schema:
            type: boolean
            default: true
        - name: with_price
          in: query
          description: Se true, o HTML será gerado com os preços dos produtos.
          schema:
            type: boolean
            default: true
      responses:
        '200':
          description: HTML do pedido de venda.
          content:
            text/html:
              schema:
                type: string
                example: |
                  <html>
                    <body>
                      <h1>Pedido de Venda</h1>
                    </body>
                  </html>
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/sale-orders/{saleOrderId}/status:
    put:
      operationId: put-sale-orders-status
      security:
        - OAuth2:
            - saleorders:write
      tags:
        - SaleOrders
      summary: Atualiza um status de pedido de venda
      description: Atualiza um status de pedido de venda.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: saleOrderId
          in: path
          description: ID do pedido de venda.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/SaleOrderStatusUpdateRequest'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/sale-orders/{saleOrderId}/send-receipt-by-email:
    post:
      operationId: post-sale-orders-send-receipt-by-email
      security:
        - OAuth2:
            - saleorders:write
      tags:
        - SaleOrders
      summary: Envia o recibo de pedido de venda por e-mail
      description: Envia o recibo de pedido de venda por e-mail.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: saleOrderId
          in: path
          description: Identificador único do pedido de venda.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição de envio do recibo de pedido de venda por e-mail.
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: E-mail para o qual o recibo de pedido de venda será enviado.
                  example: cliente@email.com
                with_grouped_products:
                  type: boolean
                  description: >-
                    Se true, o recibo de pedido de venda será enviado com os
                    produtos agrupados.
                  example: true
                  default: true
                with_price:
                  type: boolean
                  description: >-
                    Se true, o recibo de pedido de venda será enviado com os
                    preços dos produtos.
                  example: true
                  default: true
              required:
                - email
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/sales:
    get:
      operationId: get-sales
      security:
        - OAuth2:
            - sales:read
      tags:
        - Sales
      summary: Lista de vendas
      description: Retorna lista de Vendas.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: sales_id
          in: query
          description: >-
            Filtra pelos IDs das vendas. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: item_name
          in: query
          description: Filtro pelo Nome do produto.
          schema:
            type: string
            example: Banana
            maximum: 80
        - name: item_id
          in: query
          description: Filtro pelo ID do produto.
          schema:
            type: integer
            example: 123
        - $ref: '#/components/parameters/SourceTypeQuery'
        - name: unique_id
          in: query
          description: Filtro pelo ID único da venda.
          schema:
            type: string
            example: cf2e0a5e-aa58-4181-9c9b
        - name: seller_id
          in: query
          description: Filtro pelo ID do vendedor.
          schema:
            type: integer
            example: 123
        - name: customer_name
          in: query
          description: Filtro pelo Nome do cliente.
          schema:
            type: string
            example: CPlug
        - name: customer_document
          in: query
          description: Número do documento do cliente. Pode ser CPF ou CNPJ.
          schema:
            type: string
            example: '43496196000'
        - name: customer_id
          in: query
          description: Filtro pelo ID do cliente.
          schema:
            type: integer
            example: 123
        - name: start_date_time
          in: query
          description: >-
            Filtra por dados que foram registrados a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
        - name: end_date_time
          in: query
          description: >-
            Filtra por dados que foram registrados até uma data. (Formato:
            YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
        - name: status
          in: query
          description: |
            Status da venda

            - `canceled` venda cancelada.
            - `closed` venda fechada.
            - `in_preparation` venda em preparação.
            - `in_route` venda em entrega.
            - `open` venda em aberta.
            - `reserved` venda reservada.
            - `takeout` venda para retirar.
            - `waiting` venda em espera.
          schema:
            type: string
            enum:
              - canceled
              - closed
              - in_preparation
              - in_route
              - open
              - reserved
              - takeout
              - waiting
        - name: delivery_type
          in: query
          description: |
            Tipo de entrega do pedido:

              - `delivery` entrega.
              - `withdrawal` retirada.
          schema:
            type: string
            enum:
              - delivery
              - withdrawal
            example: delivery
        - name: with_items
          in: query
          description: Indica se devolve a lista de itens da venda.
          schema:
            type: boolean
            default: 1
        - name: with_payments
          in: query
          description: Indica se devolve a lista de pagamentos da venda.
          schema:
            type: boolean
            default: 1
        - name: with_seller
          in: query
          description: Indica se devolve quem fez a venda.
          schema:
            type: boolean
            default: 1
        - name: sale_orders_id
          in: query
          description: >-
            Filtra pelos IDs dos pedidos de vendas. Pode passar mais de um ID
            numérico separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: search_term
          in: query
          description: |
            Filtro pelo termo de busca em:

            - Código da venda ou
            - Nome do cliente ou
            - Código da nota fiscal vinculada a venda ou
            - Código do pedido vinculado a venda.
          schema:
            type: string
            example: Cliente
        - name: sort_by
          in: query
          description: >
            Campo para ordenação.


            Exemplo:
              - `created_at` Data de criação da venda.

            **Obs**: Se não enviar, a ordenação padrão por id descrescente será
            aplicada.
          schema:
            type: string
            enum:
              - created_at
        - name: sorting_type
          in: query
          description: |
            Tipo de ordenação.
            Exemplo:
              - `asc` Ascendente
              - `desc` Descendente
          schema:
            type: string
            enum:
              - asc
              - desc
            default: asc
            example: asc
        - name: total_from
          in: query
          description: Filtra por total da venda maior ou igual que o valor informado.
          schema:
            type: number
            example: 100
        - name: total_to
          in: query
          description: Filtra por total da venda menor ou igual que o valor informado.
          schema:
            type: number
            example: 100
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista de vendas.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      sales:
                        type: array
                        description: Representa a lista de vendas
                        items:
                          $ref: '#/components/schemas/Sale'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-sale
      security:
        - OAuth2:
            - sales:write
      tags:
        - Sales
      summary: Cria uma nova venda
      description: Cria uma nova venda com status em aberto.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/Sale'
      responses:
        '201':
          description: Nova venda criado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Sale'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/sales/{saleId}:
    get:
      operationId: get-sales-id
      security:
        - OAuth2:
            - sales:read
      tags:
        - Sales
      summary: Obtém uma venda
      description: Resgata uma venda.
      parameters:
        - name: saleId
          in: path
          description: ID da venda.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Dados desta venda.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Sale'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-sales-id
      security:
        - OAuth2:
            - sales:delete
      tags:
        - Sales
      summary: Cancela uma venda
      description: Cancela uma venda.
      parameters:
        - name: saleId
          in: path
          description: ID da venda.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/sales/{saleId}/download-pdf:
    get:
      operationId: get-sale-download-pdf
      security:
        - OAuth2:
            - sales:read
      tags:
        - Sales
      summary: Download PDF de uma venda
      description: Retorna o blob do PDF da venda.
      parameters:
        - name: saleId
          in: path
          description: Identificador único da venda.
          required: true
          schema:
            type: integer
            format: int64
        - name: with_price
          in: query
          description: Se true, o PDF será gerado com os preços dos produtos.
          schema:
            type: boolean
            default: true
      responses:
        '200':
          description: Blob do PDF da venda.
          content:
            application/pdf:
              schema:
                type: string
                format: binary
              examples:
                default:
                  summary: A sample report
                  value: "%PDF-1.4\n%äüöß\n2 0 obj\n<</Length 3 0 R/Filter/FlateDecode>>\nstream\nx�=��\n\x021\fE����v\x11���0\b\x0E�~��\x0F�\0\x17���߷��d�{r\x12\"X�\r��²�G\n�\x19�\r�\x1D^�Y��AS!��0X�r�b\x7FVhl�\x1D��8��\x0F(O�vN�3J�$o�z\f\x1C6\x10��Сw���$ɝj�O��Q��N�f��\x01˒(\n\nendstream\nendobj\n\n3 0 obj\n134\nendobj\n\n5 0 obj\n<</Length 6 0 R/Filter/FlateDecode/Length1 23164>>\nstream\nx��|y|[Օ���=-v�Ȼ�E�Q�*^��q\x16\x13��BR7�\x13;�\x0E��,+��m)�\x14\x13�&a+`��ai)L1��m#�\x01�\x04\x1A\x03e��P�a��N\x19�k�����t(eZb����y#�ig~\x7F�>�_��w�=�l��s�}O�\x15\x1C\x0Ey(�\x0E�BN��˿$13��������\x05�?ܞ�\x14�i\"Ӛ��=�_x���#��#2�t�����J��.Q�{�\x1EW�#�y4�(�m�X�\x0Fĥ�W��r ���\x0F\x06��2���x\x03�U\x03>���Z��\\�qΠ�\n�\x0F,/\x18\x01ށ�6�\x1A�lT\x7F{3�G�*���@�T\x16%�(�k�a�?yK�&�O$\x10Y|�1��\vcf\x14c��\x06��\x1C\x17����|\x19�S�l\x0FS�ZD�[���6퍾.�D�\x7F\vg�ǚ���7觬�i4��LY�>�f�i#��'d�\x11:KwR:u�],��R&m��L\x05��nf�D�Eߢ�����S���c��\"�\x03�\x0F\v�MeTG�A��<���\x06uG�Bf��\x16�Z��2�E?�����v����>\x17}\x1FZ��jȫ�Fj�>\e����f��ᕸ'�6:��Qw�K�i\t�rG�'�ר���k�\r��`S�\x06*���:�2�V�\x01Н�u�f\t|��d8\tM\e�\x12\x1A�\x11\x1A���\a,��\e^1�\x13�l�M2R\x1A��&/��j�&���\x10]\x17�9]J��{X�xO���\x0F\e.�n��}�9ʠ�X<{�=k�6�z�����o!#�h9<�\x19zz�\x1Az��O�N\x7F�\a�\ai\x03u@�\v,�i�\b\x1E�\t��\a�\x01�e��jw��\x10�GaD�8��g��\x7F���\x06Kg��\x13������\x13x\x1F\x7FI�G9�����G�o;\x15�GAz���~~�^b\x06ȯb��3�Ǿ�����a�6��jV�Q���5\x14M���Kts�d�\x1C�$]I\a�ۯ�\x04\x1D�\x1Fҏ�\x0F�\x1F�\x1E��U������4{���%|\v�������f�6�Y�V]�^������\x05�M&�i����o����OE\x7F��I��\"j�G�BV<H'�eH�\x19�J�\x14�\x03�k�\x0E�ih\t�\e�\x1D��\x05�#�[���{\t_˛��Ǉ᧫���\x0Eh\x7F\t�S���U�;�GŠ,QV*{����2��R~�Z�\"�B]�nQw�QD��p������q�s�w���>���\e�զk��t���M�t�txz\x02�kF&]\tO|�\x1E@�\x1FE\f~\0��\x10\x16��w\x11�\x1CV��a�j����&�)v\x19�����ؗ�=�\x01�-�\0k�&���������_˯��x\x1F���?��3�<K�+\x0Ee��Q١\\�\fa\rA�r-<{������\e�\f���.VC������Q�G�O\x1A\x06�~�p�0e���\x03�\aFn�1�\x19+��1>b���hZij7�h�\x17�\x7F��,���rm~���؃��c<]=��\0��TJ��\x1D�C\av�\x7FP�2��$�yؖ���4�it�a�\a�\t�e/�A#WP���\x14a�����E�c�òՇ�!�\x0Fx\x01=�jt�?�O��t���K��\n�7�#�\x06��\n��]�\x02�8;�ְϳ:v���g*\x1D�Z��>�U\x16�6�w\b\x16�Uj\x1F}�� [M������&��C}���\x10�o�k�Q�33D�FuSP�\\�27#߯#Q�vb�\x1D�~�F\x05\x190�DGŉb�3�S��w�?�-�qd�zT�7���W�_E���a�e�\b�]?]�\x1D�\x06��\x19���2��xԒj��v�A}�yT�ۢ���k���>�G���-c\x7Ffc�\x11�ਧ���E�\x19�\t�����)0�GS�[fe��\x1A��a���1�Q÷\r/\x1A�����=��_\"��\x027��~K\x7Fbf�&��Q\r�]\x05ۻh�w+�P\x13�!?�l\t��z}%\x01H�\x1A޻\x17��\x19�wP'.�o�+��,��\r�f�i��w��!D�\x1A6\x01L\x1F�v\x19�\x0E�Nb�x\x10���t\x17��\x14l�\x05�\x1AގJ���.4�K �O�)ꃆ����\x11�'i5*k��O��Rf��l\t�:�z�C�(�V\e~�8-��\x1C]Ž�38c�����ʥ��^X��u��\f��j���������Άu\x17կ]�zU]m͊��U�\x15��\x1Ce�%�E�K�K\n4����ܜlkVfFzZj�%9)1aQ|��d4�\ng����ڣ��z�j�}Ær1���p�C�5�Z\x17҄�\x1EI�-�t�r��(�1J�,%�h�T_�Lk�k�\x17���$۱�\v�-��n-|F\x9B$|X\x89�\v\n���X���0��Z­��G[z�!n|Q|���\x13_����\x17\x01\\\x04(�e����uL\x02<�e�8's\"�\n�؛[���faAX)lq��۷v�4�\x16\x14t�/\v�&��7L���d�$�&�&ll\n��\x1A�+VC7i�˦Fo��Po�#���纬+�����\x14\a�6���|�:7��Ԧ�����*�-V�&����kᩭ]�g\vĵ�\e2��\v[{F[��f8��C�6~]wW�]\a��X�XUl}\x1E{���|F\v�����G?Ӄ�䌆i���HN��X�4�h��]��pC���՜7�N���Od;��3���-)1ǎ'%�@B�|�3;'!I.��m��e�\"�F$DXsk��ˎ5�\x12\x17�*\x1Au�\x02\x19^�\f\\�>D�\e�k�\x19��\x11x�\x1F6\x14Z���\x1F\t\x19`?��B�K�\x18\v-\x7F$\x01�<�M5���a�#\\V&R�Ԅ���ur\\[�l�$_i�[4tp\x1F�÷��5�p\x7FA�\b�M�N�� |hkWl�Qon�����0�\x113S33\x19��̡��Y�\x1E;2��|\x10�\b��f�%[2�Z�ׄY��L{b�m\x1D���;����\x1Eݷm�\vF��U�s:\x14Nk�Rr�\x0E�\\E�\")/�%\x16����Z�\x7FF��}a\x05I)\x11Lk\r[z6Į��\x05\x05\x1F�3i2�c���#�d7Ǧ[\x19^�X8^�`����Q\x05��E��s��h���V\x14���V��:�3Ꚍ\x1E�k\x16��1�0\x7Fx���3\x13����rí7wc\x11�l\r����q;�a븓�б��\x05Oo7tvE8�M=�Ǘb��\x18nE�\x12�g�b��\x11�1$z���T�1'�!9�J�\x1C�'\x19I�y\x06��=�c8���U��\x14\x11|\x03�8�M��(g�F�$op��A�V(ޤN3�6\e\r�\\y�\x15Q\x1Cnv�duXޫ?[���n�����\0��\x01.˫\nR\nR\nqa���@S�>p\x1A�/��SЅ'\x182��e!\e\x1Dt�(1��_��Q=\t����Y\e2�3�3\r��V�^�{��E\x06[J!#��Z�l1g\x17\x1F11�dtj\"nQ\rL�ٙv��i\x05U\x05� %U#�Re�I~ӄ����i;�m�,;���ػ�4�A�H;���i\x05�Y���\x19�\x17��^�RVT׭�5EE�E�;x�S=WM�����tM��Ͼ�J^�\\݆]��\x03\x1D�0\x1C�+zn��\x1F>q͘��̦>�AmR�%/<�ؓ�S�ĳ�-�ߨ\x1D��ˤ{�Y�Jٓr�A�3f\e�y}J\eoKy���'yЙ�.ʤ�����8cZzQF\x06M�RgR�S[Zs$�E3Yf�\x15�vf.YZs�:f�~�;V�{+��/*�3��dЎ��;ff��j��k�;�\x10�ߌ�\x0F;�C�t��\"#Uo�\x17\x1A�\b/��\x05�F�}IQQ-������z�J\x01*��<���O�l۶�\r�e,�����~�.>6m=�Y�%�:�����:\x0F�~���:*fk�Q)�ٙ\x12�`0\x1A\x132��\t5J���Zco�-�\x16k�=AS*K;�zJ\x0F��W�u�æ�\x12�0>�\x10.=Uz�4�J+K�1q���Rc�3'��\x01�Cr�`*PM9��pY$�T <�X5YRR�s���\x19\x19�-E�)�\x1D�=)̗�R&y�39'�(?\x0F8_\x1E��cy�\x1D-Dt\x19|\x1C!*\x16ɔ\x1C� z�J�]\f�bg#Z=���b皋j*�_*~�XI.�\x15\x1F*V�X+�*�\x16���%���Z�8�B�����۹ׁD{o�N�������p��\fKI]Mh˫ذc�N���V��rEuf�Jy��@\bj��K�F\t\x16̀\a�r��Z\x1F�,�@I�����[��WL���aec\x7F���j�m�vn�޹��/��滾ZQ�ᦻ�9o�gǲ�k�>�\x01b�4�U݆�Lc5GSK\f,m2z�iMH�1g&&ט��(.�L�p�-gM\r��&.J2Z8�\x19�4�*\n���z,�2Ɏ8S\x17%'V&���Q�ѓ����2�\x7F�\x14Ոޙ���&#++G]�8��5\a\x15�L�bg\x1C�#T?1J�Ӊ3oe�FU�\x16���\x19�9ر�l6��g=�����k�c��&˻�SÙ��\rҵ,uu��k�j\0�$���\x0E&㲳-l�h\v�Aŏ�\x16:\x1E}�X��q\x05��xu�D9F��o�I�)\ri��l\\R�\r\x06�!\x13\x18�>�qLVwZAZZ\x013%)�%��b��%1����>}cSaӧ\x0E�oݜ������j��$��\x0F����\x17-I�Eb�[��;�,�>j`2�G��Fñ�cV�b\x03�c�����\x14&&%Q��\x10.I&s�9U/Ӗ_�ߓ��?�oȷ$k,�,Q��\x16\x16�ٺ'�^��ʹڷ\"�@C��H7��g��r�׈�w'�W����c�_����?���}M��P;f8�Y���'�)\x19g\x7F�>7�S���ޟ\x18�l�\x12�s-�\x13G��\x06�A5\x1A\nM���|���Y�4\x1F6s��\x14U�'�̦\x06�\x16<�oSp��\x1CmQ�\"�H�������@�z\x0F\0\x06s�ع\x17�b��c5XHF�l_RΜ]����k8���MT'+\x1C�k�˨\x93��*+S5��ҭ\x1E�\x1A��I+��L�驙)Ii�dIJcd��q��Elע(\f\x13e&��R�c�XV\x1D��x�\x16���������nV�%�ʔ])<e���Ĥ�\"����2�2y&B�d\\BMfv�\x15Ǹ���\x1C{�7�������~��X�X\x15Z\x03.����By\x10�!mEm�(\vY&Q\x0422Vd�Q\x12��{W�\x1D�\"PԴ��\x7F���7�U�ڿpm���XVom{�����\"�n���@l��>r��\x0F\eP�q�q�P\\8n*�T���\f�����qc@\x18\x14�\t\a��L�I��Ĩ�N�\"\x18\rF�\x1A�MEL\x15{9�`i��m֏\x1A�~\v \x03�%����`\x01Î4���ng��o�l�I�N\x7F�O�E8@�<\v;�\x16�r�\n�\f�\x06~�\x106L\x19N\x19~o0�\f=���1 \f0\x067%\\)b4c\te��X��^\x11�k8��Vx�\x11gr1Ϊt�c_;F�����E���J�]�G\f\x0Fǟ�;�8�c6��\r�bck��ŏ$>i|2���K�I�+\t����������ͯ�p&��$g��x)C��.yq�쓲��[�\t�I��I=I<ɚ�D\x16d�ְ\x15���|�F�KJc��<�[�d�LNJ�\x19\x13��\x16��+5\x15�7�.J��\f\\��D\x05�2�`K\x12Kʩ\\�k�o�}����\x05f'��9;��\x18�Ʀ3r�l:�.��\x19\x149g��Y��`u.N�%ׂK^J�,j\rge\x11L�\x11�H\x15ƀH��\x13}d�\x14�,���0��L�g�.<\x11\x17�N\x0E\e\v\x1A\x1C$�_w�(�ꓜ�R�P�$�'9�,�BQ�\x1C\x0E\x1C���\vC�v\x0E�#Ǯ\x15\x17�ZhE5)\x05��$M\x1C�&c\x16�3��|�������ϰT�Y�r�k��b�K.��gl[�W�\x7F�W�\x19�����|��\rl�ʃMM\x01�1�����{��q��]��\x7F4g��C\x0F��~�S\x7F��j�2�\aCmc3\x1F�\x11��Mo���\x0F�>�\x01S�\x11(�w�\x0E�Wt�)�\x0E�\x01J�q�{\t�\tܗ�cd��v�0�\b���8����|Rє!�\x7F�\rj��Y]z\x02� \rċ#!*i;�6[|�\b\x02�K���ݻ4X^\x15�\x17/G��\x9D�\x0E+��,:�R:��a\x03Y��t�\b�\x0E\x1D6�w�7t�LEܯ�q4����x�9E��E�k��\x0E'�ns�\x0E'\x1A��\x1F��$�,�ӳ~;�|\\��6�j\x1D�Z��B�,�uX�xː\x0E\e(�r�\x0E\e\x01_��&�\x1C�a3�Y���qԒb��x�J��\x0E/��i��~[�\"�\x17:���HO��$����\x12�\n�'e}I�U��zP�\x06��N�J�Yߗ�\x11xc�k:�Rj�\e\x126��d�I�\x11������'X�tX%��&�8\x11_k�\x0E#�ٵ:\f9�\r:��f_�Ð�}�\x0E#��\x13:��f��\x0E#�ٿ�a�7�a\x1DF|s^�a�7�S:��j�:��j��a�W�_:��\x16�)�x��\x7F�a��8��E���d�J�K\x1C\x12N\x10k)٨ð�d���D�xtX�����-R�m:,�|M�i��%��0|^�]\t�\v{J~�ð��M\tg\0�^�tX%�4C\x99���V�A_�$�lI�S�\x05�^\t�\x1C(�M��\x03��H8_�S:�ð��)\t�$��uXп,�\"\aJ��a�@�\x1F%\\&�S����OY��rQ\t�JuX������0�/��c��*۪�\x02�K�\t1��:,��KXƥ�~\x1D\x16z\x1F�N�O~��nr�\e�F��uR��7���Ђ:����a���\x02�+)4`\x06�_\x01�Y�]�CI���iԁ�\x01\n��\x04�ۈ>�o9�ƻ��u�Zb\e�1�~\ex������\x06y\x01�aڇk\x1F��1�\x02�z���\x1C;�̣�f���%RJ`��\x15�Z���*�\tX7f}����A*=����1G[>Ϯ�y�oI�\n��A� �a�\x1C8����s\rX\x0F��MAi�𑆱�\t�R�#\x1E\x1A�K~����M�n�����.�\v>\x0F�\no�HN!��<6���^a�\x1F��?��#�KЍH�������[.��^���r�_z�\x05k���>,g�2S;p\rI�c\x11�e�*�R��$(�<�aآ�ʥ�b,����}2�D�\rI]����e��m�sPJ\x14v�C���\x18�&�vI}n=\x1A�\x19au@��K�1Ʒ\x7F6�^=��z\x04=�7\x01�����Dȥ�\x1F��4�a�U3�\x17�\x11�\x11)�\x7F^6\bZ��\x15�=��y;�{ĭgj�\x1C� dz�W��c��:&$=-2j.�}r�\x0EK�\x0EH~a����5��-���Z��Jc�QH���nP\ni1�_��w}�J��>$GsQ\r�,\x1D�֝?'fjk`v-bnPʛ�!��庵.��nY�4}����O��#�1~�üz\f����9��U��}��c\x12檽K�*�\x1D���[_�WFm@���ދe�䌭d~v{g3K��+��\fJkDn���V��\f��1(Gs�\e�Љ\x14���ܺ�^)!$=ݷ 7=�\x17�\x19ϊ�vϮp��mM��\x15ҷ\x01�w��z\x12���=�߃zՈ����es�36;(#�+%\x7F�j!�-g�2-��Oz�/w���U��\x1E�5S̻�'�u\x1Db\x0Fż\x18��3\x16�H��\x1C\x1A�usƶ\ny�\x051�\x06gj%�w���_a+du\x1A\x04E��K\x03�\x06\x01\r�\by�(@�d\x0E�\"^1K�\x7FWÈ̘\x18�g��ͨ��8�[њ�y\x02�\x02�8\x01Zq��ķ\0Ӂ��͋q\x12��Ib;)\x11OS�u�l\n�'״Y|l��<��}>��\x7F�)6\x17���<\x13�^9�\x1F��Y����\x16���h~��U��:\x1Aۿ^�f\x06�=�GJ���D�[�umbw��ki��i\x14�\x19�\x18���Α����w�g6��e�\b��y�������.\x14\x1E�̓2����ק��\"\x03{ee�YݫGfH�|�\b\x15�U-�T�\"��\x15�j��m���佨\vZ\ato\a�\x1A�Q����\x033Wg��\x13\v�~�1��+V�]�\"���W���kb��84����\x15��Oz�;�\x14\x19�w��l�zx^�Ν�\x1F�)aݠ�?�W�\x05�Fd�/�ќ\x7F\x1F:S\x1F�(}��ݡ��ǅ�����욟݃zE��?���z~�Uޅ9�q+�ˏ�r��Fn��K�9\x1E�\x0E-�����[Fu�C1\x18����$\a��jH���Ρ}��h���]��џ�7���y�g���ŝ\eǘ���X�R��x&b�\x0F�z��d휗�հ�_h�G��\r�왑 �O\x1A)�$P�{�\x1A����r���|U#��ħ#۩M����r���p\x1D���$�J�ų�hB��v���Oƙ��\x0Fyo�<�����v�=ڣZg�G��\e�\x05�Қ|�~߰+��\ri�\x01w���\n��\v�J!L��\r�\x04&�m\x1C\x02��ի��q���\x1A\a\x06�m�=�����\x13�\f���5\x0E{]\x03�}\x03}32�H�&Pk.�\f\a��\x15\x15UUZ�&�{�\x17��\x0E�Α̧��r)�S\x8Fh�î>Ϡk�rͷ�c-׆={���g�ӧy�� H�wh���V�unҶ��]����4�@�3�\x0F��YIX�oϰ�߿\x7F>ʣ5\x0F�F�C{\x04�\x17�-׶�z!z����\ep\x05�\t��^�ץu�BC}X\b\\����7\x14�\f\nۆ�k\x01\x17�\bGywk}��w��2-�v7�\\^L\x0E��=Z\x7Fh�5\x04�5w�k���20�\x03X�kH��~�~/���\x02=nO ��:� \x17����W\x17%\x16\x1F\x1A�h#�`�tà��'�\x05\f��0�\r�\x06fp�\x11�P��\x01�\e@hx\x7F�&=���\x19v!��a�+8�)��\x0E!�\x01�L��3,M�\x1D\x1A\x18\0(m��A\x1F�x��B��\\j �\x7F�3�\x13\"[\x03B�gx�;$)�}�C�\v��CP\x14\v`�׵�'�G��s��3��G|�\x1E�>�$�i��\x06�\x0Em�\x03�\ry� w��\x1E�q�큒����Y��\n,f�3�_��\x02ȝ\x01!c�; �\e�7R@��\x06G�G\v\x05�Rқ��!al�-����aɐ�E\x05�\"O��a\x0F�\x1EDj L\x01�L�'���=�+�C\x10�\t��Ŝ\x06�>o�?��/T\b�!�H����4���Ġ7 \x04\vr��o�'�U�\a��5��###\x15�z�V�}����������ے���.�Xx�@��\f#�\x01`=�e�΍�\e�\x1A;7n٬mi�>���esG��x񶖖M-�;\x13�\x13�;���\x19�\t\x17���P� (=z�-&\x17#\x12Y��w���\x17\x12�n�m��G��Dr�\x1CE|���@��3��L�к���B\x1A�z�6\x02gp�1\";GD:y\x108�����\x1DD�wÏsv�\x10��x$�\f�,\x1FB���\r\x05!\x1Af����-�80c\x14\x12y�\x15��\"۴}����\x17\x19�\n C�sWhۇd��Y\x05֤W.��K\v�=n/�ι+���!�m�����\x159��\x1C�Uy�@\x0FK����!�\x06��^� (�t#���\x03�$��(��\x11\x14�P�7�/�@V�݃HT؏P��k���=�P�����s�\x13�ko�\x13�jP�ܞ�!}\x05úݒ8��\v\r�a\x0F��zFb���\v:D҃\n�7W�f�\b�dau\a�b,\x16�ҭ�}~���Y\x06}�날�\x15\\#\b�w4�\x10(YUSW��-_U^USU\x15\x17��\rȪ��kjp�[Q�խ�]]�:1�#v��nF1��͓�\x10��\x1E�&I�����e�L�B,\x11�\x06o-���\x1Fsk:�U��c���SnP�Q����u|��\x02���\r.|mp�k�\v_\e\\�����\x06\x17�6�����\r.|mp�k�\v_\e\\�����\x06\x17�6�\x7F�k���\x0F��Q�,�f>�>��>�\t-�=w�bY5\x02\v�fp��\x16Ɨ�{�\x7F\v���:,��ᙹ��W���%\x12�O\x13�l��}���\vg���7$��|rWΧ>��|O�>҇>զ�SתM�Ju��T/R�����;�y�Ot氭�'�i\x13#�\x1C4���m����\x1F�x\x1E���/\x15;�d��,�͛��7\x7F����+���S��~J�y}�:��P2cd�N)_���W;'��'�Ӫ��\x16�NjG�\x14V6�\x14\x1A'�r\e\x1DD� o��/�>&����j\v�o\"\r�\x10�Bc�29v�\t��&�2��k\"�)�ﳑ��\x180a�V�7�+W\x10S<�\x10�ɦ\x1C@�\x18�\e}>�^�\x0F�B��H�T\x1F��\x06�7(\x19(C6�Qɤj��J\x0E�J�P$)�'\x14))�n�W�\x14�$IV\x12Q�l�Y1E�m�\tE�ٰS�a\"n��%��\x19�:�D�:\x04�,[�3J<U���tN�%V\x1FnLP:��N�Ŧ���\x7F��:��\b\x04A_��G���\\ɧ\f����H�m�r�$�;!\x05��E�+D7��T=�\x18���\a\b+���Jm�'�VUSc�RBU��\x13\tM9\b�����(�Q�i\x14�\x19EhFa�(\x19\x11�\e1s#h*�+ɯ��a��\0�\x10�\x11�\a�I`iI�1%[��\x13�\x13�\x1D\x036g\".IXf���I2�DBRu�3J���q\x18\x1F�ȲV�N(er)�&����\x1F�K��b�\0c���3J��Xz\"_z �hØQ�b#�\x7F�O\t����E|�O���\x1F��E��a��N�S\x13����,�Ӎy�\r\b��_��\0q~�?����\x7F�'�\x15�g�\x185�\x7F\x05�>��Я@\x7F<R�=�$��@\a��$f����#�J\x1D�\x15�@V�\x0E�fV7\x16�����\a\x11?E�\x14��|���?�ފ~�\a�{�൴\x16�Q��\x0E\x7FZ�4\x7F�?�3��'\"I\x84p�$�#\x11��\x15�ب���4�\x16\x7F�r@��HQ\x0E��L\x14-�%��<�\x1F��H�-�1��Ϻػ \x1A�WDO���H�\x10r8�f;�\x0F��Nk���Y�|H�*�*�zH�\n�r�N{Hk��[�\0�a��p��̑=hN���ƈZ\x17n<�5�uq:�똄zp�K�p��ξ#�\x06~\x1DmA�q\0� �!��H��J�Ϣ}\x0E��\x12\x13D\v���|���\a�\x1F\x1C~��\a�\x1F\x1C~p�%�_j\x0F�\t�\x1Ep�\a\x1C=��\a\x1C=��\x01G��\x10����Gr���\x1D\x1C��h�\x1C��h\aG;8�%G;8���.9��p��\t\x0E��p��\t\x0E'8���\t\x0E'8���\n\x1CU�\x02G��\x02G\x158��Q%9��Q\x05�*ɡ�C\x03�\x06\x0EMrh�����C�\x1C\x1A84ph��\x02\x0E\v8,�H\x0E\v8,ఀ�\"9,2>!4�q\x1A\x1C��q\x1A\x1C�%�ip�\x06�ip��\x1C��q\x1A\x1C��ȸr��\x05��\x02�)���,��r\n,��rJ��\x02�)��җ\x1E���H�\x03h\a�\x0E�\t�)�N�w\n�S�wJ�W\bM���\x11\x06G\x18\x1Ca�\x11\x06G\x18\x1Cap�%G\x18\x1Cap�%�\x188��1\x06�1�1\x06�1p��cLr���\r�\t��=)����X�\x19�+?�Je\x7F�ޖ�\x01zE���q�\x7F�\x1E��g�j�_Iu�\x1F�\"�C��d3���.�1\x13%`\v�.4\x1F�}hG�N��$�\x12�khQ^�\\�&����3\x1D1�4\x19��N�x�q��>�\x11�I���k��<Q�Q�\x16���\x1E���h8Dpm�P\x03���\x1A��Z�kx�3���2�R\x19;YƎ��/���8~1Se�Ý>��˙P���\nZ]Q�:T�[�|;�\x16)Zi�dOǺR�\x03��h�h\x0F�]�V�V�V�V�f��2�w9��\"�F+F+@ӄ\n����Mj��y�'��&^H�8���\x04|'\"�U�&#�[�=\x15)�5Ʊ'�X�\x06�'\x10���\x1F��^��7c�7\"�\x13�\x1E��j��\x14W��4R���1�m'�*X;��\x03�\x16����\x12�m��J�9\"�E��\f�\n1[ʺ�u�:�Ҙ&{Ķ\x16ݒ�m��6S�\b<3R�4π&ze\x02\x06��\x18�R�s���v��`�\x1D\x1C����6��{�p�]⌷=]�U\x107�\"��\x1E�øއE�����\em�@\x16+|�v���vk��\x19�[`��RE�v�6�\x1Fw��\x0E٪l���m\x01�'l.�6��B�#��lO\v3��u�ǟ��C�F��0b��pR��j�osڊm����\x7FiULn]���\x03T\x1DӾ\f�-+�\x149��n��8�L�\x0E�.5�7�5�MKL�M��ts��bN2'���f�Ѭ�������\x1D\x1C��+Ӎ��ɨ��*a\v\x17W\x1E�KS�̜>A�4���u�gm�)7��j��:�,~뎰����Sۨ�s}x��m�\x14�\x16�s��M�v�3vk7�a~�$�ήI\x16\x15��r�\x0FQ�3���c�X�u�tw�5s_��!u]�����\\z��c�e�\x0F��j��\n?��\x1D�\x16@4��-|����c<�'�4\x1F�I���:��yr�6�W��� {]�!��@FŢ\x03�y=i�\f�d� C�btE`\a]��@\x17�HE��(>QҩLЍ���4�k��)$zEҼRH�h�1�m\x1E/*�Tv�u\t*�eפa�R��\x06�r�$���M\n�1�,\\9GR���Β�J]\n����h�Kfh�K@��\x1F�<�\x1Dlby���◿z�-\x1E���M����C��6~ ��$XQO��_�.O8d�4�\x0F؛���ϟg�y1���<NϷtv�?��4G�;���]��\x13\r�]�\vt�8����<�ꅰ.����<Ӎb�A�j\x14�\x1A��\x06g����\x15y��5n���wAd?�\x17�#�{r\v��gZ��DB\x1F[[`=�{\\%�\b-rt�\x13��Éhb����QLa���$��n����ڂ���\x11}�\x02t�}=͸�\x04Q[�vk[��cG�H���u��\x05�KN[��ی\x7F\x18\ae�{>%\x05��\n��\x15\n�\x02�\x12r�)�-\\��\x16^�\x15��LP���\r\\�\fNQ$n<.�e2:�I\a�`A�N@\x0E&~#�\x19��.\x13\x1F3���xT\bN��W���\t~\x10\r�q|$R)����ĒB��\x12�����x>\x15}$��Z�\x14A\x1DXE_\x18�)�\0\x0E\x17\x1E.?\\7V8V>Vg\x14?��\x10����Q\x1A�|H��#0�\b��n��t\x01��\x1F�˗��\x04�pt;\x02�7^�îv�#\x03��:6�K\rH������\x01�\x11�&\x1D�\x19���\"'C�E*�?X�6\x13\nendstream\nendobj\n\n6 0 obj\n10825\nendobj\n\n7 0 obj\n<</Type/FontDescriptor/FontName/BAAAAA+Arial-BoldMT\n/Flags 4\n/FontBBox[-627 -376 2000 1011]/ItalicAngle 0\n/Ascent 905\n/Descent 211\n/CapHeight 1010\n/StemV 80\n/FontFile2 5 0 R>>\nendobj\n\n8 0 obj\n<</Length 272/Filter/FlateDecode>>\nstream\nx�]��n� \x10��<\x05��a\x03Zu��1ٺ��C���\x0F�0Z��\x04���\x17\x06�&=@~��7�f`usm�r��΢\x05G\a���e^�\0�è4IR*�p{���:C�׶��`j�0�%ao>�8���E�=�\x11�b%X�Gz��[\x1F��1_0�v����\x12\x06��3��\x04\fU�F��r��K�\n�7\x034�8�V�,a1�\0��\x11H�yE�ۭ\"��\\�K�A|v֗&���,�<�ȧ<�=rq\r���s�\x1C9�\v�\x1C�\x14�\x14�\x1F�\x16�\x1C\x19���u���9���\x04�a�?k�b�֯\0��������\x7F1�\t*<�;���\nendstream\nendobj\n\n9 0 obj\n<</Type/Font/Subtype/TrueType/BaseFont/BAAAAA+Arial-BoldMT\n/FirstChar 0\n/LastChar 11\n/Widths[750 722 610 889 556 277 666 610 333 277 277 556 ]\n/FontDescriptor 7 0 R\n/ToUnicode 8 0 R\n>>\nendobj\n\n10 0 obj\n<<\n/F1 9 0 R\n>>\nendobj\n\n11 0 obj\n<</Font 10 0 R\n/ProcSet[/PDF/Text]>>\nendobj\n\n1 0 obj\n<</Type/Page/Parent 4 0 R/Resources 11 0 R/MediaBox[0 0 595 842]/Group<</S/Transparency/CS/DeviceRGB/I true>>/Contents 2 0 R>>\nendobj\n\n12 0 obj\n<</Count 1/First 13 0 R/Last 13 0 R\n>>\nendobj\n\n13 0 obj\n<</Title<FEFF00440075006D006D00790020005000440046002000660069006C0065>\n/Dest[1 0 R/XYZ 56.7 773.3 0]/Parent 12 0 R>>\nendobj\n\n4 0 obj\n<</Type/Pages\n/Resources 11 0 R\n/MediaBox[ 0 0 595 842 ]\n/Kids[ 1 0 R ]\n/Count 1>>\nendobj\n\n14 0 obj\n<</Type/Catalog/Pages 4 0 R\n/Outlines 12 0 R\n>>\nendobj\n\n15 0 obj\n<</Author<FEFF004500760061006E00670065006C006F007300200056006C006100630068006F006700690061006E006E00690073>\n/Creator<FEFF005700720069007400650072>\n/Producer<FEFF004F00700065006E004F00660066006900630065002E006F0072006700200032002E0031>\n/CreationDate(D:20070223175637+02'00')>>\nendobj\n\nxref\n0 16\n0000000000 65535 f \n0000011997 00000 n \n0000000019 00000 n \n0000000224 00000 n \n0000012330 00000 n \n0000000244 00000 n \n0000011154 00000 n \n0000011176 00000 n \n0000011368 00000 n \n0000011709 00000 n \n0000011910 00000 n \n0000011943 00000 n \n0000012140 00000 n \n0000012196 00000 n \n0000012429 00000 n \n0000012494 00000 n \ntrailer\n<</Size 16/Root 14 0 R\n/Info 15 0 R\n/ID [ <F7D77B3D22B9F92829D49FF5D78B8F28>\n<F7D77B3D22B9F92829D49FF5D78B8F28> ]\n>>\nstartxref\n12787\n%%EOF\n"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/sales/{saleId}/print:
    get:
      operationId: get-sale-print
      security:
        - OAuth2:
            - sales:read
      tags:
        - Sales
      summary: Imprimir uma venda
      description: Retorna o HTML da venda.
      parameters:
        - name: saleId
          in: path
          description: Identificador único da venda.
          required: true
          schema:
            type: integer
            format: int64
        - name: with_price
          in: query
          description: Se true, o HTML será gerado com os preços dos produtos.
          schema:
            type: boolean
            default: true
      responses:
        '200':
          description: HTML da venda.
          content:
            text/html:
              schema:
                type: string
                example: |
                  <html>
                    <body>
                      <h1>Venda</h1>
                    </body>
                  </html>
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/sales/{saleId}/send-receipt-by-email:
    post:
      operationId: post-sales-send-receipt-by-email
      security:
        - OAuth2:
            - sales:write
      tags:
        - Sales
      summary: Envia o recibo de venda por e-mail
      description: Envia o recibo de venda por e-mail.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: saleId
          in: path
          description: Identificador único da venda.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição de envio do recibo de venda por e-mail.
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: E-mail para o qual o recibo de venda será enviado.
                  example: cliente@email.com
                with_price:
                  type: boolean
                  description: >-
                    Se true, o recibo de venda será enviado com os preços dos
                    produtos.
                  example: true
                  default: true
              required:
                - email
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/sales/{saleId}/incomes:
    get:
      operationId: get-sale-incomes
      security:
        - OAuth2:
            - sales:read
      tags:
        - Sales
      summary: Lista recebimentos de uma venda
      description: Retorna os recebimentos de uma venda.
      parameters:
        - name: saleId
          in: path
          description: Identificador único da venda.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Lista dos recebimentos.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      sale_incomes:
                        type: array
                        description: Representa a lista dos recebimentos.
                        items:
                          $ref: '#/components/schemas/SaleIncome'
                      has_devolution:
                        type: boolean
                        description: Indica se a venda tem devolução.
                        example: false
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/sources:
    get:
      operationId: get-sourcces
      security:
        - OAuth2:
            - sources:read
      tags:
        - Sources
      summary: Lista de canais de vendas
      description: Retorna lista de canal de venda.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: sources_id
          in: query
          description: >-
            Filtra pelos IDs dos canais de venda. Pode passar mais de um ID
            numérico separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Lista de canal de venda.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      sources:
                        type: array
                        description: Representa a lista de canal de venda
                        items:
                          $ref: '#/components/schemas/Source'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-sources
      security:
        - OAuth2:
            - sources:write
      tags:
        - Sources
      summary: Cria novo canal de venda
      description: Cria novo canal de venda.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        description: Corpo requisição de um canal de venda.
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  minimum: 1
                  maximum: 80
                  description: Nome da origem.
                  example: PDV
      responses:
        '201':
          description: Novo canal de venda criada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Source'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/sources/{sourceId}:
    put:
      operationId: put-sources
      security:
        - OAuth2:
            - sources:write
      tags:
        - Sources
      summary: Atualiza canal de venda
      description: Atualiza um canal de venda já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: sourceId
          in: path
          description: ID do canal de venda.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição de um canal de venda.
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  minimum: 1
                  maximum: 80
                  description: Nome da origem.
                  example: PDV
      responses:
        '200':
          description: Canal de venda atualizado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Source'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-sources
      security:
        - OAuth2:
            - sources:delete
      tags:
        - Sources
      summary: Apaga canal de venda
      description: Apaga um canal de venda.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: sourceId
          in: path
          description: ID do canal de venda.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/standard-observations:
    get:
      operationId: get-standard-observations
      security:
        - OAuth2:
            - standardObservations:read
      tags:
        - StandardObservations
      summary: Lista as observações padrão
      description: Retorna uma lista de observações padrão disponíveis no sistema.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
        - name: term
          in: query
          description: Filtra pelo titulo ou descrição.
          schema:
            type: string
            example: Observação 1
      responses:
        '200':
          description: Lista das observações padrões disponíveis.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      observation_templates:
                        type: array
                        description: Representa a lista de templates de observação
                        items:
                          $ref: '#/components/schemas/StandardObservation'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    post:
      operationId: post-standard-observations
      security:
        - OAuth2:
            - standardObservations:write
      tags:
        - StandardObservations
      summary: Cria nova observação padrão
      description: Cria nova observação padrão.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        description: Corpo requisição da criação de uma observação padrão.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StandardObservationRequest'
      responses:
        '201':
          description: Nova observação padrão criada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/StandardObservation'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/standard-observations/{standardObservationId}:
    get:
      operationId: get-standard-observation-id
      security:
        - OAuth2:
            - standardObservations:read
      tags:
        - StandardObservations
      summary: Obtém uma observação padrão
      description: Retorna uma observação padrão específica.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: standardObservationId
          in: path
          description: ID da observação padrão.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Observação padrão encontrada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/StandardObservation'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: put-standard-observations-id
      security:
        - OAuth2:
            - standardObservations:write
      tags:
        - StandardObservations
      summary: Atualiza uma observação padrão
      description: Atualiza uma observação padrão.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: standardObservationId
          in: path
          description: ID da observação padrão.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição da atualização de uma observação padrão.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StandardObservationRequest'
      responses:
        '201':
          description: Observação padrão atualizada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/StandardObservation'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-standard-observations-id
      security:
        - OAuth2:
            - standardObservations:delete
      tags:
        - StandardObservations
      summary: Deleta uma observação padrão
      description: Deleta uma observação padrão.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: standardObservationId
          in: path
          description: ID da observação padrão.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/states:
    get:
      operationId: get-states
      security:
        - OAuth2:
            - states:read
      tags:
        - States
      summary: Lista de estados
      description: Retorna uma lista de estados.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: ibge_code
          in: query
          description: Filtra pelo código do IBGE.
          schema:
            type: string
            example: '3550308'
        - name: name
          in: query
          description: Filtra pelo nome do estado.
          schema:
            type: string
            example: São Paulo
        - name: state
          in: query
          description: Filtra pela sigla do estado.
          schema:
            type: string
            example: SP
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
      responses:
        '200':
          description: Lista de estados.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      states:
                        type: array
                        description: Representa a lista de estados
                        items:
                          $ref: '#/components/schemas/State'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/users:
    get:
      operationId: get-users
      security:
        - OAuth2:
            - users:read
      tags:
        - Users
      summary: Lista de usuários
      description: Retorna lista de usuários.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: users_ids
          in: query
          description: >-
            Filtro pelos IDs dos usuários. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: name
          in: query
          description: Filtro pelo Nome do usuário.
          schema:
            type: string
            example: Connectplug
            minimum: 1
            maximum: 80
        - name: email
          in: query
          description: Filtro pelo E-mail do usuário.
          schema:
            type: string
            example: contato@cplug.com.br
            maximum: 120
        - name: profile_id
          in: query
          description: Filtro pelo ID do profile.
          schema:
            type: integer
            example: 3
        - name: companies_ids
          in: query
          description: >-
            Filtro pelos IDs das empresas. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
        - name: deleted
          in: query
          description: Filtro para indicar se deve retornar dados apagados ou não.
          schema:
            type: string
            enum:
              - not_include
              - include
              - only
            default: not_include
            example: not_include
      responses:
        '200':
          description: Lista de usuários.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      users:
                        type: array
                        description: Representa a lista de usuários
                        items:
                          $ref: '#/components/schemas/User'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-users
      security:
        - OAuth2:
            - users:write
      tags:
        - Users
      summary: Cria um novo usuário
      description: Cria um novo usuário.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        description: Corpo requisição de um usuário.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserBody'
      responses:
        '201':
          description: Novo usuário criado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/users/{userId}:
    get:
      operationId: get-users-id
      security:
        - OAuth2:
            - users:read
      tags:
        - Users
      summary: Obtém um usuário
      description: Resgata um usuário já existente.
      parameters:
        - name: userId
          in: path
          description: ID do usuário.
          required: true
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/CPlugCompanyId'
      responses:
        '200':
          description: Usuário.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-user
      security:
        - OAuth2:
            - users:write
      tags:
        - Users
      summary: Atualiza um usuário
      description: Atualiza um usuário já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: userId
          in: path
          description: ID do usuário.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição de um usuário.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserBody'
      responses:
        '200':
          description: Usuário atualizado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-user
      security:
        - OAuth2:
            - users:delete
      tags:
        - Users
      summary: Apaga um usuário
      description: Apaga um usuário.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: userId
          in: path
          description: ID do usuário.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: restore-user
      security:
        - OAuth2:
            - users:write
      tags:
        - Users
      summary: Restaura um usuário
      description: >
        Restaura um usuário que foi previamente excluído.


        ##### ⚠️ Validações Importantes


        **Conflito de Email**: Se outro usuário foi criado com o mesmo email do
        usuário excluído, 

        não será possível restaurar e um erro `400 Bad Request` será retornado.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: userId
          in: path
          description: ID do usuário a ser restaurado.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/users/me:
    get:
      operationId: get-users-me
      security:
        - OAuth2:
            - users:read
      tags:
        - Users
      summary: Obtém o usuário autenticado
      description: >-
        Resgata o usuário autenticado baseado no `Authorization: Bearer
        <ACCESS_TOKEN>` da requisição.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
      responses:
        '200':
          description: Usuário.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-users-me
      security:
        - OAuth2:
            - users:write
      tags:
        - Users
      summary: Atualiza o usuário autenticado
      description: Atualiza o usuário autenticado.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        description: Corpo requisição para atualizar um usuário autenticado.
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  minimum: 1
                  maximum: 80
                  description: Nome do usuário.
                  example: Meu usuário
                email:
                  type: string
                  maximum: 120
                  description: E-mail do usuário.
                  example: meuUsuario@email.com
                current_password:
                  type: string
                  minimum: 6
                  maximum: 60
                  description: Senha atual do usuário, necessária para atualizar a senha.
                  example: senhaAntiga123
                password:
                  type: string
                  minimum: 6
                  maximum: 60
                  description: Nova senha do usuário.
                  example: novaSenha123
                password_confirmation:
                  type: string
                  minimum: 6
                  maximum: 60
                  description: Confirmação da nova senha, deve ser igual a `password`.
                  example: novaSenha123
      responses:
        '200':
          description: Usuário atualizado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/users/me/permissions:
    get:
      operationId: get-me-permissions
      security:
        - OAuth2:
            - users:read
      tags:
        - Users
      summary: Obtém as permissões do usuário autenticado
      description: Retorna as permissões vinculadas ao perfil do usuário autenticado.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Permissões vinculadas ao perfil do usuário autenticado.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      permissions:
                        type: array
                        description: >-
                          Representa a lista de permissões vinculadas ao perfil
                          do usuário autenticado
                        items:
                          $ref: '#/components/schemas/Permission'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/users/sessions:
    get:
      operationId: get-users-sessions
      security:
        - OAuth2:
            - users:read
      tags:
        - Users
      summary: Obtém as sessões ativas dos usuários
      description: Retorna as sessões ativas dos usuários.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - name: user_id
          in: query
          description: Filtrar sessões por ID do usuário.
          required: false
          schema:
            type: integer
            format: int64
            example: 1
      responses:
        '200':
          description: Sessões ativas dos usuários.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      sessions:
                        type: array
                        description: Representa a lista de sessões ativas dos usuários
                        items:
                          $ref: '#/components/schemas/OAuthAccessTokenSlim'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/users/sessions/{accessTokenId}:
    put:
      operationId: revoke-users-sessions-access-token
      security:
        - OAuth2:
            - users:write
      tags:
        - Users
      summary: Revogar uma sessão de acesso
      description: Revoga uma sessão de acesso.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: accessTokenId
          in: path
          description: ID da sessão de acesso.
          required: true
          schema:
            type: string
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/profiles:
    get:
      operationId: get-profiles
      security:
        - OAuth2:
            - profiles:read
      tags:
        - Profiles
      summary: Lista os perfis
      description: Retorna lista dos perfis.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
        - name: deleted
          in: query
          description: Filtro para indicar se deve retornar dados apagados ou não.
          schema:
            type: string
            enum:
              - not_include
              - include
              - only
            default: not_include
            example: not_include
      responses:
        '200':
          description: Lista os perfis.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      profiles:
                        type: array
                        description: Representa a lista de perfis
                        items:
                          $ref: '#/components/schemas/Profile'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-profiles
      security:
        - OAuth2:
            - profiles:write
      tags:
        - Profiles
      summary: Cria um novo perfil
      description: Cria um novo perfil para relacionar ao usuário.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/Profile'
      responses:
        '201':
          description: Novo perfil ConnectPlug criado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Profile'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/profiles/{profileId}:
    get:
      operationId: get-profile-id
      security:
        - OAuth2:
            - profile:read
      tags:
        - Profiles
      summary: Obtém um perfil
      description: Resgata um perfil já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: profileId
          in: path
          description: ID do perfil.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Dados do perfil.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Profile'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-profile
      security:
        - OAuth2:
            - profile:write
      tags:
        - Profiles
      summary: Atualiza um perfil
      description: Atualiza um perfil já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: profileId
          in: path
          description: ID do perfil.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/Profile'
      responses:
        '200':
          description: Produto atualizado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Profile'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-profile
      security:
        - OAuth2:
            - profile:delete
      tags:
        - Profiles
      summary: Apaga um perfil
      description: Apaga um perfil.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: profileId
          in: path
          description: ID do perfil.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/profiles/{profileId}/permissions:
    get:
      operationId: get-profile-id-permissions
      security:
        - OAuth2:
            - profile:read
      tags:
        - Profiles
      summary: Obtém as permissões do perfil
      description: Resgata as permissões relacionadas ao perfil.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: profileId
          in: path
          description: ID do perfil.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Dados do perfil.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      permissions:
                        type: array
                        description: Representa a lista de permissões associados ao perfil
                        items:
                          $ref: '#/components/schemas/Permission'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/profiles/{profileId}/pdv-permissions:
    get:
      operationId: get-profile-id-pdv-permissions
      security:
        - OAuth2:
            - profile:read
      tags:
        - Profiles
      summary: Obtém as permissões de PDV do perfil
      description: Resgata as permissões de PDV relacionadas ao perfil.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: profileId
          in: path
          description: ID do perfil.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Permissões de PDV do perfil.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      pdv_permissions:
                        type: array
                        description: >-
                          Representa a lista de permissões de PDV associados ao
                          perfil
                        items:
                          $ref: '#/components/schemas/PdvPermission'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/profiles/discount-limits:
    get:
      operationId: get-profiles-discount-limits
      security:
        - OAuth2:
            - profile:read
      tags:
        - Profiles
      summary: Obtém os limites de desconto dos perfis
      description: Obtém os limites de desconto dos perfis.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: profile_id
          in: query
          description: ID do perfil.
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Dados dos limites de desconto por perfil.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      discount_limits:
                        type: array
                        description: >-
                          Representa a lista de limites de desconto associados
                          aos perfis
                        items:
                          $ref: '#/components/schemas/ProfileDiscountLimit'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v3/profiles/discount-limits/sync:
    put:
      operationId: put-profiles-discount-limits
      security:
        - OAuth2:
            - profile:write
      tags:
        - Profiles
      summary: Sincroniza os limites de desconto dos perfis
      description: Sincroniza os limites de desconto dos perfis.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/ProfileDiscountLimitsSyncRequest'
      responses:
        '200':
          description: Dados dos limites de desconto por perfil.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      discount_limits:
                        type: array
                        description: >-
                          Representa a lista de limites de desconto associados
                          aos perfis
                        items:
                          $ref: '#/components/schemas/ProfileDiscountLimit'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/permissions:
    get:
      operationId: get-permissions
      security:
        - OAuth2:
            - permissions:read
      tags:
        - Permissions
      summary: Lista as permissões
      description: Retorna uma lista de permissões disponíveis no sistema.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Lista das permissões disponíveis.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      permissions:
                        type: array
                        description: Representa das permissões
                        items:
                          $ref: '#/components/schemas/Permission'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/pdv-permissions:
    get:
      operationId: get-pdv-permissions
      security:
        - OAuth2:
            - permissions:read
      tags:
        - Permissions
      summary: Lista as permissões de PDV
      description: Retorna uma lista de permissões de PDV disponíveis no sistema.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Lista das permissões de PDV disponíveis.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      pdv_permissions:
                        type: array
                        description: Representa das permissões de PDV
                        items:
                          $ref: '#/components/schemas/PdvPermission'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/types-of-business:
    get:
      operationId: get-types-of-business
      tags:
        - TypeBusiness
      summary: Lista os tipos de negócio
      security: []
      description: Retorna uma lista de tipos de negócio disponíveis no sistema.
      parameters:
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
        - name: type
          in: query
          description: Filtra por tipo do negócio.
          schema:
            type: string
        - name: description
          in: query
          description: Filtra por descrição do tipo de negócio.
          schema:
            type: string
      responses:
        '200':
          description: Lista dos tipos de negócio disponíveis.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      types_of_business:
                        type: array
                        description: Lista dos tipos de negócio
                        items:
                          $ref: '#/components/schemas/TypeOfBusiness'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/status:
    get:
      operationId: get-status
      security:
        - OAuth2:
            - status:read
      tags:
        - Status
      summary: Lista de status
      description: Retorna lista de status.
      parameters:
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Lista de status.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      status:
                        type: array
                        description: Representa a lista de status
                        items:
                          $ref: '#/components/schemas/Status'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/status/{statusId}/details:
    get:
      operationId: get-status-details
      security:
        - OAuth2:
            - status:read
      tags:
        - Status
      summary: Lista de detalhes do status
      description: Retorna lista de detalhes do status.
      parameters:
        - name: statusId
          in: path
          description: ID do status.
          required: true
          schema:
            type: integer
            format: int64
        - name: system_area_type
          in: query
          description: |
            Filtra pelo tipo de de área do sistema.

            Exemplo:
              - `sale_order` Detalhes de status relacionado ao pedido de vendas.
              - `stock` Detalhes de status relacionado ao estoque ou compras.
              - `delivery` Detalhes de status relacionado ao delivery.
          schema:
            type: string
            enum:
              - sale_order
              - stock
              - delivery
            example: sale_order
            default: sale_order
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista de detalhes do status.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      status_details:
                        type: array
                        description: Representa a lista de detalhes do status
                        items:
                          $ref: '#/components/schemas/StatusDetail'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/status/sync-details:
    put:
      operationId: put-status-sync-details
      security:
        - OAuth2:
            - status:write
      tags:
        - Status
      summary: Sincroniza detalhes dos status
      description: Sincroniza detalhes dos status.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/SyncStatusDetailRequest'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v1/store/orders:
    get:
      operationId: get-stores-customers-orders
      tags:
        - StoreCustomerOrders
      summary: Lista de pedidos de venda do cliente na loja
      description: Retorna lista de pedidos de Venda.
      parameters:
        - $ref: '#/components/parameters/CPlugStoreDomain'
        - $ref: '#/components/parameters/StoreCustomerAuthorization'
        - $ref: '#/components/parameters/SourceTypeQuery'
        - name: start_date_time
          in: query
          description: >-
            Filtra por dados que foram registrados a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
        - name: end_date_time
          in: query
          description: >-
            Filtra por dados que foram registrados até uma data. (Formato:
            YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
        - name: status
          in: query
          description: |
            Status do pedido de venda

            - `canceled` pedido de venda cancelada.
            - `closed` pedido de venda fechada.
            - `open` pedido de venda aberta.
            - `reserved` pedido de venda reservada.
            - `waiting` pedido de venda em espera.
          schema:
            type: string
            enum:
              - canceled
              - closed
              - open
              - reserved
              - waiting
        - name: delivery_type
          in: query
          description: |
            Tipo de entrega do pedido:

              - `delivery` entrega.
              - `withdrawal` retirada.
          schema:
            type: string
            enum:
              - delivery
              - withdrawal
            example: delivery
        - name: with_items
          in: query
          description: Indica se devolve a lista de itens da venda.
          schema:
            type: boolean
            default: 1
        - name: with_payments
          in: query
          description: Indica se devolve a lista de pagamentos da venda.
          schema:
            type: boolean
            default: 1
        - name: with_seller
          in: query
          description: Indica se devolve quem fez a venda.
          schema:
            type: boolean
            default: 1
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
        - name: deleted
          in: query
          description: Filtro para indicar se deve retornar dados apagados ou não.
          schema:
            type: string
            enum:
              - not_include
              - include
              - only
            default: not_include
            example: not_include
      responses:
        '200':
          description: Lista de pedidos de venda de um cliente na loja.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      sale_orders:
                        type: array
                        description: Representa a lista de pedidos de venda
                        items:
                          $ref: '#/components/schemas/SaleOrder'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-stores-customers-orders
      tags:
        - StoreCustomerOrders
      summary: Cria um novo pedido de venda para um cliente de uma loja
      description: >-
        Cria um novo pedido de venda para um cliente de uma loja com status em
        aberto.
      parameters:
        - $ref: '#/components/parameters/CPlugStoreDomain'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/StoreCustomerOrderRequest'
      responses:
        '201':
          description: Novo pedido de venda criado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SaleOrder'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v1/store/orders/{orderUuid}:
    get:
      operationId: get-stores-customers-orders-ids
      tags:
        - StoreCustomerOrders
      summary: Obter um pedido de venda de um cliente na loja
      description: Resgata um pedido de venda.
      parameters:
        - $ref: '#/components/parameters/CPlugStoreDomain'
        - $ref: '#/components/parameters/StoreCustomerAuthorization'
        - name: orderUuid
          in: path
          description: unique_id do pedido de venda.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Dados deste pedido de venda.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SaleOrder'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v1/store:
    get:
      operationId: get-store
      tags:
        - Store
      summary: Informações da Loja
      parameters:
        - $ref: '#/components/parameters/CPlugStoreDomain'
      description: >
        Retorna um objeto que indica onde estão localizados os principais
        recurso que a loja pode precisar para poder ser exibida para o
        consumidor final.
      responses:
        '200':
          description: Recurso com as informações da loja.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    $ref: '#/components/schemas/StoreBasicInfo'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v1/store/payments:
    get:
      operationId: get-store-payments
      tags:
        - Store
      summary: Métodos de pagamentos
      parameters:
        - $ref: '#/components/parameters/CPlugStoreDomain'
      description: Retorna os métodos de pagamento aceitos na loja.
      responses:
        '200':
          description: Lista dos métodos de pagamento.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      payments:
                        type: array
                        description: Representa a lista de métodos de pagamento.
                        items:
                          $ref: '#/components/schemas/StorePayment'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v1/store/opening-hours:
    get:
      operationId: get-store-opening-hours
      tags:
        - Store
      summary: Horário de funcionamento
      parameters:
        - $ref: '#/components/parameters/CPlugStoreDomain'
      description: Retorna os horários de funcionamento da loja por canal de atendimento.
      responses:
        '200':
          description: Lista de horários de funcionamento.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/StoreOpeningHours'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v3/peripherals:
    get:
      operationId: get-peripherals
      security:
        - OAuth2:
            - peripherals:read
      tags:
        - Peripherals
      summary: Lista de periféricos
      description: Retorna lista de periféricos.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: peripherals_id
          in: query
          description: >-
            Filtra pelos ID dos periféricos. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: name
          in: query
          description: Filtra pelo nome do periférico.
          schema:
            type: string
            example: Impressora 1
        - name: type
          in: query
          description: Filtra pelo tipo do periférico.
          schema:
            type: string
            example: printer
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
      responses:
        '200':
          description: Lista de periféricos.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      peripherals:
                        type: array
                        description: Representa a lista de periféricos
                        items:
                          $ref: '#/components/schemas/Peripheral'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-peripherals
      security:
        - OAuth2:
            - peripherals:write
      tags:
        - Peripherals
      summary: Cria um novo periférico
      description: Cria um novo periférico.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/Peripherals'
      responses:
        '201':
          description: Novo periférico criado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Peripheral'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/peripherals/{peripheralId}:
    get:
      operationId: get-peripherals-id
      security:
        - OAuth2:
            - peripherals:read
      tags:
        - Peripherals
      summary: Obtém um periférico
      description: Resgata um periférico já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: peripheralId
          in: path
          description: ID do periférico.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Periférico.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Peripheral'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-peripherals
      security:
        - OAuth2:
            - peripherals:write
      tags:
        - Peripherals
      summary: Atualiza um periférico
      description: Atualiza um periférico já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: peripheralId
          in: path
          description: ID do periférico.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/Peripherals'
      responses:
        '200':
          description: Periférico atualizado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Peripheral'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-peripherals
      security:
        - OAuth2:
            - peripherals:delete
      tags:
        - Peripherals
      summary: Apaga um periférico
      description: Apaga um periférico.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: peripheralId
          in: path
          description: ID do periférico.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/peripherals/manufacturers:
    get:
      operationId: get-peripherals-manufacturers
      security:
        - OAuth2:
            - peripherals:read
      tags:
        - Peripherals
      summary: Lista de fabricantes de periféricos
      description: Retorna lista de fabricantes de periféricos.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
      responses:
        '200':
          description: Lista de periféricos.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      manufacturers:
                        type: array
                        description: Representa a lista de fabricantes de periféricos
                        items:
                          $ref: '#/components/schemas/PeripheralManufacturers'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/peripherals/{peripheralId}/products:
    get:
      operationId: get-peripheral-products
      security:
        - OAuth2:
            - peripherals:read
      tags:
        - Peripherals
      summary: Lista de produtos relacionados ao periférico
      description: Retorna lista de produtos relacionados a um periférico.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: peripheralId
          in: path
          description: ID do periférico.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
        - name: search
          in: query
          description: >-
            Filtra pelas principais propriedades do produto, incluindo `name`,
            `sku`, e `description`.
          schema:
            type: string
            example: Celular
        - name: is_associated
          in: query
          description: Filtra se o produto está associado ou não ao periférico.
          schema:
            type: boolean
            example: true
        - name: categories_id
          in: query
          description: >-
            Filtra pelos IDs das categorias. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: unit_ids
          in: query
          description: Lista de IDs das unidades de medida para filtrar produtos.
          required: false
          style: form
          explode: false
          schema:
            type: array
            items:
              type: integer
              minimum: 1
          example:
            - 1
            - 2
            - 3
        - name: attribute_id
          in: query
          description: Filtra produtos contendo uma variação com esse ID.
          schema:
            type: number
            example: 123
        - name: with_attributes
          in: query
          description: Filtro que seleciona produtos que contenham atributos.
          schema:
            type: boolean
      responses:
        '200':
          description: Lista de produtos cadastrados.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      products:
                        type: array
                        description: Representa a lista de produtos.
                        items:
                          $ref: '#/components/schemas/PeripheralProducts'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    patch:
      operationId: patch-peripheral-products
      security:
        - OAuth2:
            - peripherals:write
      tags:
        - Peripherals
      summary: Associa produtos a um periférico
      description: Associa uma lista de produtos a um periférico específico.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: peripheralId
          in: path
          description: ID do periférico.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      requestBody:
        description: Corpo da requisição para associar produtos ao periférico.
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                items:
                  type: array
                  description: Lista de produtos a serem associados ao periférico.
                  items:
                    type: object
                    additionalProperties: false
                    properties:
                      id:
                        type: integer
                        format: int64
                        description: ID do produto
                        example: 1
                    required:
                      - id
                  example:
                    - id: 1
                    - id: 2
                    - id: 3
                    - id: 4
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/peripherals/{peripheralId}/products/{productId}:
    post:
      operationId: post-peripheral-product
      security:
        - OAuth2:
            - peripherals:write
      tags:
        - Peripherals
      summary: Associa um produto a um periférico
      description: Associa um produto a um periférico.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: peripheralId
          in: path
          description: ID do periférico.
          required: true
          schema:
            type: integer
            format: int64
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-peripheral-product
      security:
        - OAuth2:
            - peripherals:delete
      tags:
        - Peripherals
      summary: Desassociar um produto de um periférico
      description: Desassocia um produto a um periférico.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: peripheralId
          in: path
          description: ID do periférico.
          required: true
          schema:
            type: integer
            format: int64
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v1/store/oauth/token:
    post:
      operationId: post-store-customer-oauth-token
      security: []
      tags:
        - StoreCustomerAuthentication
      summary: Solicita Access Token
      parameters:
        - $ref: '#/components/parameters/CPlugStoreDomain'
        - $ref: '#/components/parameters/IdempotencyKey'
      description: Solicita Access Token.
      requestBody:
        $ref: '#/components/requestBodies/StoreCustomerAccessToken'
      responses:
        '201':
          description: Nova Access Token gerado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessToken'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OauthError'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OauthError'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OauthError'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OauthError'
    delete:
      operationId: delete-store-customer-oauth-token
      security: []
      tags:
        - StoreCustomerAuthentication
      summary: Revogar Access Token
      description: >
        Revogar Access Token.


        Invalida o Token de Acesso que for utilizado no `Authorization: Bearer
        <ACCESS_TOKEN>` da requisição.
      parameters:
        - $ref: '#/components/parameters/CPlugStoreDomain'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/v1/store/oauth/scopes:
    get:
      operationId: get-store-customer-oauth-scopes
      security: []
      tags:
        - StoreCustomerAuthentication
      summary: Lista de escopos
      description: Retorna lista de escopos de autenticação disponíveis.
      parameters:
        - $ref: '#/components/parameters/CPlugStoreDomain'
      responses:
        '200':
          description: Lista de escopos de autenticação disponíveis.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      scopes:
                        type: array
                        description: Representa a lista de escopos
                        items:
                          $ref: '#/components/schemas/Scope'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OauthError'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OauthError'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OauthError'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OauthError'
  /api/v3/carriers:
    get:
      operationId: get-carriers
      security:
        - OAuth2:
            - carriers:read
      tags:
        - Carriers
      summary: Lista de transportadoras
      description: Retorna lista de transportadoras.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: search
          in: query
          description: >-
            Filtra pelas principais propriedades da transportadora, incluindo
            `name`, `company_name`, `cnpj` e `cpf`.
          schema:
            type: string
            example: Connectplug
        - name: document_type
          in: query
          description: |
            Indica o tipo do documento.

            - `cpf`: CPF Pessoa física.
            - `rg`: RG Pessoa física.
            - `cnpj`: CNPJ Pessoa jurídica.
            - `ie`: Inscrição Estadual Pessoa jurídica.
            - `im`: Inscrição Municipal Pessoa jurídica.
          schema:
            type: string
            enum:
              - cpf
              - rg
              - cnpj
              - ie
              - im
          example: cnpj
        - name: document_value
          in: query
          description: Filtro pelo Valor do documento.
          schema:
            type: string
          example: '22423374000152'
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
        - name: deleted
          in: query
          description: Filtro para indicar se deve retornar dados apagados ou não.
          schema:
            type: string
            enum:
              - not_include
              - include
              - only
            default: not_include
            example: not_include
      responses:
        '200':
          description: Lista de transportadoras.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      carriers:
                        type: array
                        description: Representa a lista de transportadoras
                        items:
                          $ref: '#/components/schemas/Carrier'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-carriers
      security:
        - OAuth2:
            - carriers:write
      tags:
        - Carriers
      summary: Cria uma nova transportadora
      description: Cria uma nova transportadora.
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
        - $ref: '#/components/parameters/CPlugCompanyId'
      requestBody:
        $ref: '#/components/requestBodies/Carrier'
      responses:
        '201':
          description: Nova transportadora criada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Carrier'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/carriers/{carrierId}:
    get:
      operationId: get-carrier
      security:
        - OAuth2:
            - carriers:read
      tags:
        - Carriers
      summary: Obtém uma transportadora
      description: Obtém os dados de uma transportadora.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: carrierId
          in: path
          description: ID da transportadora.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Transportadora.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Carrier'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-carriers
      security:
        - OAuth2:
            - carriers:write
      tags:
        - Carriers
      summary: Atualiza uma transportadora
      description: Atualiza uma transportadora.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: carrierId
          in: path
          description: ID da transportadora.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/Carrier'
      responses:
        '200':
          description: Transportadora atualizada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Carrier'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-carriers
      security:
        - OAuth2:
            - carriers:delete
      tags:
        - Carriers
      summary: Apaga uma transportadora
      description: Apaga uma transportadora.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: carrierId
          in: path
          description: ID da transportadora.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/carriers/{carrierId}/restore:
    post:
      operationId: post-restore-carriers
      security:
        - OAuth2:
            - carriers:write
      tags:
        - Carriers
      summary: Restaura uma transportadora
      description: Restaura uma transportadora removida.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: carrierId
          in: path
          description: ID da transportadora.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Transportadora restaurada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Carrier'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/suppliers:
    get:
      operationId: get-suppliers
      security:
        - OAuth2:
            - suppliers:read
      tags:
        - Suppliers
      summary: Lista de fornecedores
      description: Retorna lista de fornecedores.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: search
          in: query
          description: >-
            Filtra pelas principais propriedades do fornecedor, incluindo
            `name`, `company_name`, `cnpj` e `cpf`.
          schema:
            type: string
            example: Connectplug
        - name: document_type
          in: query
          description: |
            Indica o tipo do documento.

            - `cpf`: CPF Pessoa física.
            - `rg`: RG Pessoa física.
            - `cnpj`: CNPJ Pessoa jurídica.
            - `ie`: Inscrição Estadual Pessoa jurídica.
            - `im`: Inscrição Municipal Pessoa jurídica.
          schema:
            type: string
            enum:
              - cpf
              - rg
              - cnpj
              - ie
              - im
          example: cnpj
        - name: document_value
          in: query
          description: Filtro pelo Valor do documento.
          schema:
            type: string
          example: '22423374000152'
        - name: updated_from
          in: query
          description: >-
            Filtra por dados que foram atualizadas a partir de uma data.
            (Formato: YYYY-MM-DDThh:mm:ss+hh:mm).
          schema:
            type: string
            format: date-time
        - name: deleted
          in: query
          description: Filtro para indicar se deve retornar dados apagados ou não.
          schema:
            type: string
            enum:
              - not_include
              - include
              - only
            default: not_include
            example: not_include
      responses:
        '200':
          description: Lista de fornecedores.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      suppliers:
                        type: array
                        description: Representa a lista de fornecedores
                        items:
                          $ref: '#/components/schemas/Supplier'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-suppliers
      security:
        - OAuth2:
            - supplier:write
      tags:
        - Suppliers
      summary: Cria um novo fornecedor
      description: Cria um novo fornecedor.
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
        - $ref: '#/components/parameters/CPlugCompanyId'
      requestBody:
        $ref: '#/components/requestBodies/Supplier'
      responses:
        '201':
          description: Novo fornecedor criado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/suppliers/{supplierId}:
    get:
      operationId: get-supplier
      security:
        - OAuth2:
            - suppliers:write
      tags:
        - Suppliers
      summary: Obtém um fornecedor
      description: Obtém os dados de um fornecedor.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: supplierId
          in: path
          description: ID do fornecedor.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Fornecedor.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-suppliers
      security:
        - OAuth2:
            - suppliers:write
      tags:
        - Suppliers
      summary: Atualiza um fornecedor
      description: Atualiza um fornecedor.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: supplierId
          in: path
          description: ID do fornecedor.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/Supplier'
      responses:
        '200':
          description: Fornecedor atualizado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-suppliers
      security:
        - OAuth2:
            - suppliers:delete
      tags:
        - Suppliers
      summary: Apaga um fornecedor
      description: Apaga um fornecedor.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: supplierId
          in: path
          description: ID do fornecedor.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/suppliers/{supplierId}/restore:
    post:
      operationId: post-restore-suppliers
      security:
        - OAuth2:
            - suppliers:write
      tags:
        - Suppliers
      summary: Restaura um fornecedor
      description: Restaura um fornecedor removido.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: supplierId
          in: path
          description: ID do fornecedor.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Fornecedor restaurado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/zip-codes/{zipCode}:
    get:
      operationId: get-zip-codes-single
      tags:
        - ZipCodes
      summary: Obter informações de um CEP
      description: Resgata um endereço de um CEP.
      parameters:
        - name: zipCode
          in: path
          description: CEP.
          example: 05707-001
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Dados informações do CEP.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddressZipCode'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/financial/groups:
    get:
      operationId: get-financial-groups
      security:
        - OAuth2:
            - accountPlans:read
      tags:
        - FinancialGroup
      summary: Lista de grupos financeiros
      description: Retorna a lista de grupos financeiros.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: financial_groups_id
          in: query
          description: >-
            Filtra pelos IDs das contas. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: name
          in: query
          description: Filtra pelo nome da conta.
          schema:
            type: string
            example: Conta padrão
        - name: type
          in: query
          description: |
            Filtra pelo tipo da movimentação financeira.

            Exemplo:

              - `income`: Receita
              - `expense`: Despesa
          schema:
            type: string
            enum:
              - income
              - expense
            example: income
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista de contas cadastrados.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      financial_groups:
                        type: array
                        description: Representa a lista de contas.
                        items:
                          $ref: '#/components/schemas/FinancialGroup'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-financial-accounts
      security:
        - OAuth2:
            - accountPlans:write
      tags:
        - FinancialGroup
      summary: Cria um grupo financeiro
      description: Cria um grupo financeiro.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/FinancialGroup'
      responses:
        '201':
          description: Grupo financeiro criado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FinancialGroup'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/financial/groups/{groupId}:
    put:
      operationId: put-financial-group
      security:
        - OAuth2:
            - accountPlans:write
      tags:
        - FinancialGroup
      summary: Atualiza um grupo financeiro
      description: Atualiza um grupo financeiro.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: groupId
          in: path
          description: ID do grupo financeiro.
          required: true
          schema:
            type: string
      requestBody:
        $ref: '#/components/requestBodies/FinancialGroup'
      responses:
        '200':
          description: Grupo financeiro atualizado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FinancialGroup'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-financial-group
      security:
        - OAuth2:
            - accountPlans:delete
      tags:
        - FinancialGroup
      summary: Apaga um grupo financeiro
      description: Apaga um grupo financeiro.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: groupId
          in: path
          description: ID da conta financeira.
          required: true
          schema:
            type: string
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/financial/account-plans:
    get:
      operationId: get-financial-account-plans
      security:
        - OAuth2:
            - accountPlans:read
      tags:
        - AccountPlan
      summary: Lista de plano de contas
      description: Retorna a lista de plano de contas.
      parameters:
        - name: name
          in: query
          description: Filtra pelo nome do plano de contas.
          schema:
            type: string
            example: Despesas Administrativas
        - name: type
          in: query
          description: Filtra por categoria de movimentação.
          schema:
            type: string
            enum:
              - income
              - expense
            example: income
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: account_plans_id
          in: query
          description: >-
            Filtra pelos IDs dos planos de contas. Pode passar mais de um ID
            numérico separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: financial_groups_id
          in: query
          description: >-
            Filtra pelos IDs das contas. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista de plano de contas cadastrados.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      account_plans:
                        type: array
                        description: Representa a lista de plano de contas.
                        items:
                          $ref: '#/components/schemas/FinancialAccountPlans'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-financial-account-plans
      security:
        - OAuth2:
            - accountPlans:write
      tags:
        - AccountPlan
      summary: Cria um plano de contas
      description: Cria um plano de contas.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/FinancialAccountPlan'
      responses:
        '201':
          description: Plano de contas criado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FinancialAccountPlans'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/financial/account-plans/{accountPlanId}:
    put:
      operationId: put-financial-account-plans
      security:
        - OAuth2:
            - accountPlans:write
      tags:
        - AccountPlan
      summary: Atualiza um plano de contas
      description: Atualiza um plano de contas.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: accountPlanId
          in: path
          description: ID do plano de conta.
          required: true
          schema:
            type: string
      requestBody:
        $ref: '#/components/requestBodies/FinancialAccountPlan'
      responses:
        '200':
          description: Plano de conta atualizada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FinancialAccountPlans'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-financial-account-plans
      security:
        - OAuth2:
            - accountPlans:delete
      tags:
        - AccountPlan
      summary: Apaga um plano de contas
      description: Apaga um plano de contas.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: accountPlanId
          in: path
          description: ID do plano de contas.
          required: true
          schema:
            type: string
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/financial/transactions:
    get:
      operationId: get-financial-transactions
      security:
        - OAuth2:
            - accountTransactions:read
      tags:
        - Finances
      summary: Lista de transações financeiras
      description: >-
        Retorna lista das transações financeiras (Contas a pagar e Contas a
        receber).
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: financial_transactions_id
          in: query
          description: >-
            Filtra pelos IDs das transações financeiras. Pode passar mais de um
            ID alfanumérico separado por virgula.
          schema:
            type: string
            example: 696e636f6d657c3235
        - name: type
          in: query
          description: |
            Filtra pelo tipo da transação financeira.

            Exemplo:

              - `income`: Receita
              - `expense`: Despesa
          schema:
            type: string
            enum:
              - income
              - expense
            example: income
        - name: date_fields
          in: query
          description: >-
            Determina o campo de data que será utilizado para filtrar as
            transações financeiras nos campos `date_start` e `date_end`. Pode
            passar mais de um separado por virgula.
          schema:
            type: string
            enum:
              - due_date
              - payment_date
              - competence_date
            example: due_date
            default: due_date,payment_date,competence_date
        - name: date_start
          in: query
          description: Data inicial para filtrar as transações financeiras.
          schema:
            type: string
            example: '2025-01-01'
            format: date
        - name: date_end
          in: query
          description: Data final para filtrar as transações financeiras.
          schema:
            type: string
            example: '2025-01-01'
            format: date
        - name: status
          in: query
          description: |
            Filtra pelo status da transação financeira.

            Exemplo:

              - `paid`: Pago
              - `unpaid`: Não pago
              - `partially_paid`: Parcialmente pago
          schema:
            type: string
            enum:
              - paid
              - unpaid
              - partially_paid
        - name: description
          in: query
          description: Descrição da transação financeira.
          schema:
            type: string
            example: Compra de equipamentos
        - name: account_plan_id
          in: query
          description: Indica o ID do plano de contas.
          schema:
            type: number
            example: 134
        - name: bank_account_id
          in: query
          description: Filtra pelo ID da conta bancária.
          schema:
            type: number
            example: 134
        - name: cost_center_id
          in: query
          description: Filtra pelo ID do centro de custo.
          schema:
            type: number
            example: 134
        - name: payment_method_id
          in: query
          description: Filtra pelo ID do método de pagamento.
          schema:
            type: number
            example: 134
        - name: card_brand_id
          in: query
          description: Filtra pelo ID da bandeira de cartão.
          schema:
            type: number
            example: 134
        - name: customer_id
          in: query
          description: Filtra pelo ID do cliente.
          schema:
            type: number
            example: 134
        - name: supplier_id
          in: query
          description: Filtra pelo ID do fornecedor.
          schema:
            type: number
            example: 134
        - name: transfer
          in: query
          description: >
            Filtro para determinar a inclusão de registros de transferência.


            - `include`: Inclui todos os registros, independente de ser de
            transferência ou não.

            - `not_include`: Oculta os registros de transferência.

            - `only`: Exibe apenas os registros de transferência.
          schema:
            type: string
            enum:
              - not_include
              - include
              - only
            default: include
            example: include
        - name: min_value
          in: query
          description: Valor mínimo para filtrar as transações financeiras.
          schema:
            type: number
            format: float
            minimum: 0
            example: 100.5
        - name: max_value
          in: query
          description: Valor máximo para filtrar as transações financeiras.
          schema:
            type: number
            format: float
            minimum: 0
            example: 1000
        - name: is_to_hide_pos_bank_account
          in: query
          description: >
            Filtro para ocultar contas bancárias do PDV.


            - `0` (false): Exibe todas as transações, incluindo as de contas
            bancárias do PDV

            - `1` (true): Oculta as transações cujas contas bancárias são do PDV
          schema:
            type: integer
            enum:
              - 0
              - 1
            default: 0
            example: 0
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: >-
            Lista das transações financeiras (Contas a pagar e Contas a
            receber).
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      financial_transactions:
                        type: array
                        description: Representa a lista de transações financeiras
                        items:
                          $ref: '#/components/schemas/FinancialTransaction'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
              examples:
                transactions:
                  $ref: '#/components/examples/transactions'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-financial-transactions
      security:
        - OAuth2:
            - accountTransactions:write
      tags:
        - Finances
      summary: Cria uma transação financeira
      description: >
        Cria uma transação financeira (Conta a pagar ou Conta a receber).


        Para criar uma movimentação de conta a pagar, é necessário que o campo
        `type` seja preenchido com `expense`.


        Para criar uma movimentação de conta a receber, é necessário que o campo
        `type` seja preenchido com `income`.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/FinancialTransaction'
      responses:
        '201':
          description: Transação financeira criada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FinancialTransaction'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/financial/transactions/{transactionId}:
    get:
      operationId: get-financial-transaction
      security:
        - OAuth2:
            - accountTransactions:read
      tags:
        - Finances
      summary: Obtém uma transação financeira
      description: Obtém uma transação financeira (Conta a pagar ou Conta a receber).
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: transactionId
          in: path
          description: ID da movimentação financeira.
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Movimentação financeira atualizada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FinancialTransaction'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-financial-transactions
      security:
        - OAuth2:
            - accountTransactions:write
      tags:
        - Finances
      summary: Atualiza uma transação financeira
      description: Atualiza uma transação financeira (Conta a pagar ou Conta a receber).
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: transactionId
          in: path
          description: ID da movimentação financeira.
          required: true
          schema:
            type: string
      requestBody:
        $ref: '#/components/requestBodies/FinancialTransaction'
      responses:
        '200':
          description: Movimentação financeira atualizada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FinancialTransaction'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-financial-transaction
      security:
        - OAuth2:
            - accountTransactions:delete
      tags:
        - Finances
      summary: Apaga uma transação financeira
      description: Apaga uma transação financeira (Conta a pagar ou Conta a receber).
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: transactionId
          in: path
          description: ID da movimentação financeira.
          required: true
          schema:
            type: string
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/financial/transactions/{transactionId}/groupings:
    get:
      operationId: get-financial-transactions-grouping
      security:
        - OAuth2:
            - accountTransactions:read
      tags:
        - Finances
      summary: Transações financeiras de um agrupamento
      description: >-
        Retorna lista das transações financeiras (Contas a pagar e Contas a
        receber) de um agrupamento.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: transactionId
          in: path
          description: ID da transação financeira.
          required: true
          schema:
            type: string
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
      responses:
        '200':
          description: >-
            Lista das transações financeiras (Contas a pagar e Contas a receber)
            de um agrupamento.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      financial_transactions:
                        type: array
                        description: >-
                          Representa a lista de transações financeiras que foram
                          agrupadas
                        items:
                          $ref: '#/components/schemas/FinancialTransaction'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/financial/transactions/{transactionId}/files:
    post:
      operationId: post-financial-transactions-files
      security:
        - OAuth2:
            - accountTransactions:write
      tags:
        - Finances
      summary: Adiciona um anexo
      description: >
        Adiciona um novo arquivo para anexar à transação financeira.


        Este endpoint aceita solicitações HTTP no formato ***Form-Data***. Veja
        um exemplo:


        ```

        curl --location
        'http://{BASE_URL}/api/v3/financial-transactions/{transactionId}/files'
        \

        --header 'CPlug-Company-Id: COMPANY_ID' \

        --header 'Idempotency-Key: IDEMPOTENCY_KEY' \

        --header 'Authorization: Bearer TOKEN' \

        --form 'file[]=@"/path/to/file.png"'

        --form 'file[]=@"/path/to/file2.png"'

        ```


        O tamanho máximo do arquivo é 5 MB.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: transactionId
          in: path
          description: ID da transação financeira.
          required: true
          schema:
            type: string
      requestBody:
        $ref: '#/components/requestBodies/FinancialTransactionFile'
      responses:
        '200':
          description: Novo anexo adicionado.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      files:
                        type: array
                        description: Representa a lista de anexos adicionados
                        items:
                          $ref: '#/components/schemas/FinancialTransactionFile'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/financial/transactions/{transactionId}/files/{fileId}:
    delete:
      operationId: delete-financial-transactions-files
      security:
        - OAuth2:
            - accountTransactions:delete
      tags:
        - Finances
      summary: Apaga um anexo
      description: Apaga um anexo de transação financeira.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: transactionId
          in: path
          description: ID da transação financeira.
          required: true
          schema:
            type: string
        - name: fileId
          in: path
          description: Identificador do arquivo de transação financeira.
          required: true
          schema:
            type: string
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/stocks/movements/categories:
    get:
      operationId: get-stock-movement-categories
      security:
        - OAuth2:
            - stockMovementCategories:read
      tags:
        - StockMovementCategories
      summary: Lista de categorias de movimentação de estoque
      description: Retorna lista de categoria de movimentação de estoque.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: name
          in: query
          description: Filtra pelo nome da categoria.
          schema:
            type: string
            example: Vendas
        - name: type
          in: query
          description: |
            Filtra pelo tipo de movimentação de estoque.
            Exemplo:
              - `in` Entrada
              - `out` Saída
          schema:
            type: string
            enum:
              - in
              - out
            example: out
        - name: stock_category_ids
          in: query
          description: >-
            Filtra pelos IDs das categorias. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
      responses:
        '200':
          description: Lista de categorias de movimentação de estoque.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      stock_movement_categories:
                        type: array
                        description: >-
                          Representa a lista de categorias de movimentação de
                          estoque
                        items:
                          $ref: '#/components/schemas/StockMovementCategory'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-stock-movement-categories
      security:
        - OAuth2:
            - stockMovementCategories:write
      tags:
        - StockMovementCategories
      summary: Cria nova categoria de movimentação de estoque
      description: Cria nova categoria de movimentação de estoque.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        description: Corpo requisição da atualização de uma categoria.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StockMovementCategory'
      responses:
        '201':
          description: Nova categoria criada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/StockMovementCategory'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/stocks/movements/categories/{stockMovementCategoryId}:
    get:
      operationId: get-single-stock-movement-categories
      security:
        - OAuth2:
            - stockMovementCategories:read
      tags:
        - StockMovementCategories
      summary: Obtém uma categoria de movimentação de estoque
      description: Obtém uma categoria de movimentação de estoque.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: stockMovementCategoryId
          in: path
          description: ID da categoria.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Informações da categoria de movimentação de estoque.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/StockMovementCategory'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-stock-movement-categories
      security:
        - OAuth2:
            - stockMovementCategories:write
      tags:
        - StockMovementCategories
      summary: Atualiza uma categoria de movimentação de estoque
      description: Atualiza uma categoria de movimentação de estoque existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: stockMovementCategoryId
          in: path
          description: ID da categoria.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição da criação de uma categoria.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StockMovementCategory'
      responses:
        '200':
          description: Categoria atualizada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/StockMovementCategory'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-stock-movement-categories
      security:
        - OAuth2:
            - stockMovementCategories:delete
      tags:
        - StockMovementCategories
      summary: Apaga uma categoria de movimentação de estoque
      description: Apaga uma categoria de movimentação de estoque.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: stockMovementCategoryId
          in: path
          description: ID da categoria.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/stocks/{stockId}/movements:
    post:
      operationId: post-register-stocks-movements
      security:
        - OAuth2:
            - stocks:write
      tags:
        - StockMovements
      summary: Registra uma nova movimentação
      description: Registra uma nova movimentação de estoque.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: stockId
          in: path
          description: ID do estoque.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição do registro de movimentação do estoque.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StockMovementRegister'
      responses:
        '201':
          description: Lista as movimentações criadas no estoque.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      movements:
                        type: array
                        description: >-
                          Representa a lista de movimentações no estoque de um
                          produto
                        items:
                          $ref: '#/components/schemas/StockProductMovement'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/stocks/{stockId}/movements/{stockMovementId}/composition:
    get:
      operationId: get-stocks-stock-movement-composition-detail
      security:
        - OAuth2:
            - stocks:read
      tags:
        - StockMovements
      summary: Obtém detalhes de uma movimentação
      description: Obtém os detalhes de uma movimentação de estoque.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: stockId
          in: path
          description: ID do estoque.
          required: true
          schema:
            type: integer
            format: int64
        - name: stockMovementId
          in: path
          description: ID da movimentação de estoque de saída.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Detalhes da composição de um movimento de estoque.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StockMovementCompositionDetail'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/stocks/{stockId}/products:
    get:
      operationId: get-stocks-products
      security:
        - OAuth2:
            - stocks:read
      tags:
        - StockProducts
      summary: Lista os produtos de um estoque
      description: Lista os produtos de um estoque.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: stockId
          in: path
          description: ID do estoque.
          required: true
          schema:
            type: integer
            format: int64
        - name: term
          in: query
          description: >-
            Busca pelo termo. Nome, código, ou código de barras do produto e
            etc.
          schema:
            type: string
            example: Produto simples
        - name: order_by_field
          in: query
          description: |
            Orderna pelo campo.
            Exemplo:
              - `code` Código do produto.
              - `name` Nome do produto.
          schema:
            type: string
            enum:
              - code
              - name
            example: code
        - name: order_by_type
          $ref: '#/components/parameters/OrderByType'
        - name: product_ids
          in: query
          description: >-
            Filtra pelos IDs dos produtos. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: amount_in_stock
          in: query
          description: |
            Filtra pela quantidade em estoque.

            - `all` Todas as quantidades.
            - `positive` Quantidades positivas.
            - `negative` Quantidades negativas.
            - `zero` Quantidades zero, sem movimentações.
          schema:
            type: string
            enum:
              - all
              - positive
              - negative
              - zero
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
      responses:
        '200':
          description: Lista de produtos no estoque.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      stock_products:
                        type: array
                        description: Representa a lista de produtos no estoque
                        items:
                          $ref: '#/components/schemas/StockProduct'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/stocks/{stockId}/products/{productId}/balance:
    get:
      operationId: get-stocks-products-balance
      security:
        - OAuth2:
            - stocks:read
      tags:
        - StockProducts
      summary: Obtém o balanço do produto no estoque
      description: Obtém o balanço do produto no estoque.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: stockId
          in: path
          description: ID do estoque.
          required: true
          schema:
            type: integer
            format: int64
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - name: movement_type
          in: query
          description: |
            Tipo de movimentação de estoque.

            - `all` Todas as movimentações.
            - `in` Entradas.
            - `out` Saídas.
          required: false
          schema:
            type: string
            enum:
              - all
              - in
              - out
            default: all
        - name: option_ids
          in: query
          description: Filtra apenas as opções informadas.
          required: false
          schema:
            type: string
          example: 1,7
      responses:
        '200':
          description: Balanço do produto.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StockProductBalance'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/stocks/{stockId}/products/{productId}/batches:
    get:
      operationId: get-product-batches
      security:
        - OAuth2:
            - stocks:read
      tags:
        - StockProducts
      summary: Obtém os lotes de entrada de um produto
      description: >-
        Obtém os movimentos de estoque de entrade de um produto num determinado
        estoque.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: stockId
          in: path
          description: ID do estoque.
          required: true
          schema:
            type: integer
            format: int64
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - name: option_ids
          in: query
          description: >-
            Filtra pelos IDs das opções. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: string
            example: 1,2,3
      responses:
        '200':
          description: Lotes do produto.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductBatches'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/stocks/{stockId}/products/{productId}/movements:
    get:
      operationId: get-stocks-products-movements
      security:
        - OAuth2:
            - stocks:read
      tags:
        - StockProducts
      summary: Lista as movimentações de um produto
      description: Lista as movimentações de um produto em um estoque..
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: stockId
          in: path
          description: ID do estoque.
          required: true
          schema:
            type: integer
            format: int64
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - name: order_by_field
          in: query
          description: |
            Ordena pelo campo.
            Exemplo:
              - `date` Data
              - `id` Número do lote
          schema:
            type: string
            enum:
              - date
              - id
            example: date
        - name: order_by_type
          $ref: '#/components/parameters/OrderByType'
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - name: deleted
          in: query
          description: Filtro para indicar se deve retornar dados apagados ou não.
          schema:
            type: string
            enum:
              - not_include
              - only
            default: not_include
            example: not_include
        - name: type
          in: query
          description: |
            Tipo de movimentação de estoque.

            - `all` Todas as movimentações.
            - `in` Entradas.
            - `out` Saídas.
          schema:
            type: string
            enum:
              - all
              - in
              - out
            default: all
      responses:
        '200':
          description: Lista as movimentações de um produto em um estoque.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      movements:
                        type: array
                        description: >-
                          Representa a lista de movimentações de um produto em
                          um estoque.
                        items:
                          $ref: '#/components/schemas/StockProductMovement'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/stocks/{stockId}/products/{productId}/movements/{stockMovementId}:
    patch:
      operationId: delete-stock-product-movement
      security:
        - OAuth2:
            - stocks:delete
      tags:
        - StockProducts
      summary: Apaga uma movimentação de um produto
      description: Apaga uma movimentação de um produto em um estoque.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: stockId
          in: path
          description: ID do estoque.
          required: true
          schema:
            type: integer
            format: int64
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - name: stockMovementId
          in: path
          description: ID da movimentação do estoque (lote).
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: >
          Corpo de uma requisição para apagar uma movimentação no estoque.


          **Obs**: enviar este body quando há uma movimentação de saída na
          movimentação de entreda. 

          Campo `has_movevement_out` no _endpoint_ de [listagem de
          movimentações](#tag/StockProducts/operation/get-stocks-products).


          O campo `value` só surte efeito quando o campo `action` for igual ao
          `custom`.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StockMovementDelete'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/stocks/{stockId}/products/{productId}/reset:
    delete:
      operationId: stock-product-reset
      security:
        - OAuth2:
            - stocks:delete
      tags:
        - StockProducts
      summary: Apaga todas as movimentações de um produto
      description: Apaga todas as movimentações de um produto em um estoque.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: stockId
          in: path
          description: ID do estoque.
          required: true
          schema:
            type: integer
            format: int64
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição do reset de movimentações de um estoque e um produto.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StockProductResetMovementsBody'
      responses:
        '200':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/stocks:
    get:
      operationId: get-stocks
      security:
        - OAuth2:
            - stocks:read
      tags:
        - Stocks
      summary: Lista de estoques
      description: Retorna lista de estoques.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: name
          in: query
          description: Filtra pelo nome do estoque.
          schema:
            type: string
            example: estoque padão
        - name: stock_location
          in: query
          description: |
            Filtra pelo tipo de propriedade dos produtos.
            Exemplo:
              - `own_local` O estoque está localizado na empresa.
              - `third_party_from_customer` Estoque está localizado na empresa do Cliente. Exemplo: Cliente utiliza equipamentos da empresa por possuir um contrato de aluguel.
              - `third_party_from_supplier` Estoque está localizado na empresa do fornecedor. Exemplo: Fornecedor fica em seu estoque com equipamentos da empresa enquanto presta manutenção.
          schema:
            type: string
            enum:
              - own_local
              - third_party_from_customer
              - third_party_from_supplier
            example: own_local
        - name: stock_property_type
          in: query
          description: |
            Filtra pelo tipo de propriedade dos produtos.
            Exemplo:
              - `own_products` Estoque armazena produtos da própria empresa
              - `third_party_from_customer` Estoque armazena produto de Clientes. Exemplo: Empresa realiza manutenção em equipamentos de clientes.
              - `third_party_from_supplier` Estoque armazena produtos de fornecedores. Exemplo: Empresa aluga de um fornecedor equipamentos, como impressoras.
          schema:
            type: string
            enum:
              - own_products
              - third_party_from_customer
              - third_party_from_supplier
            example: own_products
        - name: stocks_id
          in: query
          description: >-
            Filtra pelos IDs dos estoques. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista de estoques.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      stocks:
                        type: array
                        description: Representa a lista de estoques
                        items:
                          $ref: '#/components/schemas/Stock'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-stocks
      security:
        - OAuth2:
            - stocks:write
      tags:
        - Stocks
      summary: Cria novo estoque
      description: Cria novo estoque.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        description: Corpo requisição da atualização de um estoque.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Stock'
      responses:
        '201':
          description: Novo estoque criado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Stock'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/stocks/{stockId}:
    get:
      operationId: get-single-stocks
      security:
        - OAuth2:
            - stocks:read
      tags:
        - Stocks
      summary: Obtém um estoque
      description: Obtém um estoque.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: stockId
          in: path
          description: ID do estoque.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Informações do estoque.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Stock'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-stocks
      security:
        - OAuth2:
            - stocks:write
      tags:
        - Stocks
      summary: Atualiza um estoque
      description: Atualiza um estoque existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: stockId
          in: path
          description: ID do estoque.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição da criação de um estoque.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Stock'
      responses:
        '200':
          description: Estoque atualizado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Stock'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-stocks
      security:
        - OAuth2:
            - stocks:delete
      tags:
        - Stocks
      summary: Apaga um estoque
      description: Apaga um estoque.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: stockId
          in: path
          description: >
            ID do estoque.


            **Obs**: os estoques **padrão** e **consignado** não podem ser
            apagados.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/stocks/{stockId}/reset:
    delete:
      operationId: reset-movements
      security:
        - OAuth2:
            - stocks:delete
      tags:
        - StockMovements
      summary: Apaga movimentações de um estoque
      description: Apaga todas as movimentações de um estoque.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: stockId
          in: path
          description: ID do estoque.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: >-
          Corpo da requisição para a operação de resetar os movimentos de
          estoque;
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StockResetMovementsBody'
      responses:
        '200':
          description: Informações sobre a solicição de reset de movimentações.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StockOrderReset'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/stocks/{stockId}/reset-status:
    get:
      operationId: get-stock-reset-status
      security:
        - OAuth2:
            - stocks:read
      tags:
        - StockMovements
      summary: Obtém situação da remoção de movimentações
      description: >-
        Obtém a situação da solicitação para remoção das movimentações de um
        estoque.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: stockId
          in: path
          description: ID do estoque.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Informações sobre a solicição de reset de movimentações.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StockOrderReset'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/stocks/{stockId}/inventories:
    get:
      operationId: get-stock-inventories
      security:
        - OAuth2:
            - stocks:read
      tags:
        - StockInventories
      summary: Lista os inventários
      description: Lista os inventários de um estoque.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: stockId
          in: path
          description: ID do estoque.
          example: 1
          required: true
          schema:
            type: integer
            format: int64
        - name: name
          in: query
          description: Filtra pelo nome do inventário.
          schema:
            type: string
            example: Inventário 1
        - name: is_finalized
          in: query
          description: Filtra pelo status do inventário.
          schema:
            type: boolean
            example: true
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
      responses:
        '200':
          description: Lista dos inventários do estoque.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      inventories:
                        type: array
                        description: Representa a lista dos inventários do estoque.
                        items:
                          $ref: '#/components/schemas/StockInventory'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-stocks-inventories
      security:
        - OAuth2:
            - stocks:write
      tags:
        - StockInventories
      summary: Cria novo inventário
      description: Cria novo inventário.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: stockId
          in: path
          description: ID do estoque.
          example: 1
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição da criação de um inventário.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StockInventory'
      responses:
        '201':
          description: Novo inventário criado.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/StockInventory'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/stocks/{stockId}/inventories/{inventoryId}:
    get:
      operationId: get-stock-inventory
      security:
        - OAuth2:
            - stocks:read
      tags:
        - StockInventories
      summary: Obtém um inventário
      description: Obtém um inventário de um estoque.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: stockId
          in: path
          description: ID do estoque.
          example: 1
          required: true
          schema:
            type: integer
            format: int64
        - name: inventoryId
          in: path
          description: ID do inventário.
          example: 1
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Informações do inventário.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/StockInventory'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-stocks-inventories
      security:
        - OAuth2:
            - stocks:write
      tags:
        - StockInventories
      summary: Atualiza um inventário
      description: Atualiza um inventário existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: stockId
          in: path
          description: ID do estoque.
          example: 1
          required: true
          schema:
            type: integer
            format: int64
        - name: inventoryId
          in: path
          description: ID do inventário.
          example: 1
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição da atualização de um inventário.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StockInventory'
      responses:
        '200':
          description: Inventário atualizado.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/StockInventory'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-stock-inventory
      security:
        - OAuth2:
            - stocks:delete
      tags:
        - StockInventories
      summary: Apaga um inventário
      description: Apaga um inventário.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: stockId
          in: path
          description: ID do estoque.
          example: 1
          required: true
          schema:
            type: integer
            format: int64
        - name: inventoryId
          in: path
          description: ID do inventário.
          example: 1
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/stocks/{stockId}/inventories/{inventoryId}/items:
    get:
      operationId: get-stock-inventory-items
      security:
        - OAuth2:
            - stocks:read
      tags:
        - StockInventories
      summary: Lista os itens de um inventário
      description: Lista os itens de um inventário de um estoque.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: stockId
          in: path
          description: ID do estoque.
          example: 1
          required: true
          schema:
            type: integer
            format: int64
        - name: inventoryId
          in: path
          description: ID do inventário.
          example: 1
          required: true
          schema:
            type: integer
            format: int64
        - name: item_ids
          in: query
          description: >-
            Filtra pelos IDs dos produtos. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: inventory_item_ids
          in: query
          description: >-
            Filtra pelos IDs dos inventários de produto. Pode passar mais de um
            ID numérico separado por virgula.
          schema:
            type: string
            example: 10,20,30
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista dos itens do inventário do estoque.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      inventory_items:
                        type: array
                        description: Representa a lista dos itens do inventário do estoque.
                        items:
                          $ref: '#/components/schemas/StockInventoryItem'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-stocks-inventories-items
      security:
        - OAuth2:
            - stocks:write
      tags:
        - StockInventories
      summary: Cria, atualiza e remove itens de um inventário
      description: |
        Cria, atualiza e remove itens de um inventário de um estoque.

        Funcionamento:
          1. Se passar um item que está no inventário, ele será removido.
          2. Se não passar um item que não está no inventário, ele será adicionado.
          3. Para remover um atributo de um item, basta preencher o campo removed_inventory_product_attribute_ids
          4. Se adicionar um atributo de um item que não está no produto de um inventário, ele será adicionado.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: stockId
          in: path
          description: ID do estoque.
          example: 1
          required: true
          schema:
            type: integer
            format: int64
        - name: inventoryId
          in: path
          description: ID do inventário.
          example: 1
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição da criação de um inventário.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpsertStockInventoryItems'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/stocks/{stockId}/inventories/{inventoryId}/upload:
    post:
      operationId: post-stocks-inventories-upload
      security:
        - OAuth2:
            - stocks:write
      tags:
        - StockInventories
      summary: Upload de uma planilha de inventário
      description: >
        Upload de uma planilha de inventário.


        Este endpoint aceita solicitações HTTP no formato ***Form-Data***. Veja
        um exemplo:


        ```

        curl --location
        'http://{BASE_URL}/api/v3/stocks/{stockId}/inventories/{inventoryId}/upload'
        \

        --header 'CPlug-Company-Id: COMPANY_ID' \

        --header 'Idempotency-Key: IDEMPOTENCY_KEY' \

        --header 'Authorization: Bearer TOKEN' \

        --form 'file=@"/path/to/spreadsheet.xlsx"'

        ```


        * Quando o arquivo é validado com sucesso, este endpoint já salva os
        itens no inventário.

        * Se o arquivo não for validado com sucesso, este endpoint retorna todos
        os itens da planilha e em cada item, mostra qual foi o(s) erro(s)
        encontrado(s).
          * Neste caso, o usuário deve corrigir os itens e enviar novamente ou
          * Enviar os itens para o [endpoint de importação](#tag/StockInventories/operation/post-stocks-inventories-import) que foram devolvidos neste endpoint.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: stockId
          in: path
          description: ID do estoque.
          example: 1
          required: true
          schema:
            type: integer
            format: int64
        - name: inventoryId
          in: path
          description: ID do inventário.
          example: 1
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição da atualização de um inventário.
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadStockInventoryItems'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/stocks/{stockId}/inventories/{inventoryId}/import:
    post:
      operationId: post-stocks-inventories-import
      security:
        - OAuth2:
            - stocks:write
      tags:
        - StockInventories
      summary: Importação de uma planilha de inventário
      description: >
        Importa os itens de um inventário de um estoque através de uma planilha
        seguindo exportado neste
        [endpoint](#tag/StockInventories/operation/get-export-inventory-products).
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: stockId
          in: path
          description: ID do estoque.
          example: 1
          required: true
          schema:
            type: integer
            format: int64
        - name: inventoryId
          in: path
          description: ID do inventário.
          example: 1
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição da criação de um inventário.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ImportStockInventoryItems'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/stocks/{stockId}/inventories/{inventoryId}/finalize:
    post:
      operationId: post-stocks-inventories-finalize
      security:
        - OAuth2:
            - stocks:write
      tags:
        - StockInventories
      summary: Finaliza um inventário
      description: >-
        Finaliza um inventário de estoque. Após finalizar, o inventário não pode
        ser alterado.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: stockId
          in: path
          description: ID do estoque.
          example: 1
          required: true
          schema:
            type: integer
            format: int64
        - name: inventoryId
          in: path
          description: ID do inventário.
          example: 1
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Inventário finalizado com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/StockInventory'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/export-inventory:
    get:
      operationId: get-export-inventory-products
      security:
        - OAuth2:
            - stocks:read
      tags:
        - StockInventories
      summary: Exporta planilha de produtos para inventário
      description: >
        Este endpoint exporta uma planilha com os produtos de um estoque para
        ser
        [importado](#tag/StockInventories/operation/post-stocks-inventories-upload)
        em um inventário.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: sorting_type
          in: query
          description: |
            Tipo de ordenação.
            Exemplo:
              - `asc` Ascendente
              - `desc` Descendente
          schema:
            type: string
            enum:
              - asc
              - desc
            default: asc
            example: asc
        - name: categories_id
          in: query
          description: >-
            ID da categoria dos produtos. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: include_attributes
          in: query
          description: Incluir atributos dos produtos.
          schema:
            type: boolean
            default: false
            example: true
      responses:
        '200':
          description: Informações do inventário de produtos em arquivo.
          content:
            application/vnd.openxmlformats-officedocument.spreadsheetml.sheet:
              schema:
                type: string
                format: binary
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/stock-transfers:
    get:
      operationId: get-stock-transfers
      security:
        - OAuth2:
            - stocks:read
      tags:
        - StockTransfers
      summary: Lista transferências entre estoques
      description: Retorna lista transferências entre estoques.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: stock_in_id
          in: query
          description: Filtra pelo identificador único do estoque de destino.
          schema:
            type: integer
        - name: stock_out_id
          in: query
          description: Filtra pelo identificador único do estoque de origem.
          schema:
            type: integer
        - name: responsible_name
          in: query
          description: Filtra pelo nome do resposável pela transferência.
          schema:
            type: string
        - name: carrier_id
          in: query
          description: Filtra pelo identificador único da transportadora.
          schema:
            type: integer
        - name: start_date
          in: query
          description: >-
            Filtra por dados que foram registrados a partir de uma data.
            (Formato: YYYY-MM-DD).
          schema:
            type: string
            format: date
        - name: end_date
          in: query
          description: >-
            Filtra por dados que foram registrados até uma data. (Formato:
            YYYY-MM-DD).
          schema:
            type: string
            format: date
        - name: order_by_field
          in: query
          description: |
            Ordena pelo campo.
            Exemplo:
              - `date` Data
              - `id` Código da transferência
          schema:
            type: string
            enum:
              - date
              - id
            default: date
            example: date
        - name: order_by_type
          $ref: '#/components/parameters/OrderByType'
        - name: stock_transfer_ids
          in: query
          description: >-
            Filtra pelos IDs dos movimentos de transferencias. Pode passar mais
            de um ID numérico separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - name: deleted
          in: query
          description: Filtro para indicar se deve retornar dados apagados ou não.
          schema:
            type: string
            enum:
              - not_include
              - only
            default: not_include
            example: not_include
      responses:
        '200':
          description: Lista de transferências.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      transfers:
                        type: array
                        description: Representa uma lista de transferências entre estoques
                        items:
                          $ref: '#/components/schemas/StockTransfer'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-stock-transfers
      security:
        - OAuth2:
            - stocks:write
      tags:
        - StockTransfers
      summary: Cria uma nova transferência entre estoques
      description: Cria uma nova transferência entre estoques.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        description: Corpo requisição da atualização de uma transferência.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StockTransferBody'
      responses:
        '201':
          description: Novo estoque criado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StockTransfer'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/stock-transfers/{transferId}:
    delete:
      operationId: delete-stock-transfers
      security:
        - OAuth2:
            - stocks:delete
      tags:
        - StockTransfers
      summary: Apaga uma transferência entre estoques
      description: Apaga uma transferência entre estoques.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: transferId
          in: path
          description: Identificador único da transferência.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/stock-transfers/{transferId}/download-pdf:
    get:
      operationId: get-download-pdf-stock-transfers
      security:
        - OAuth2:
            - stocks:read
      tags:
        - StockTransfers
      summary: Download PDF da transferência de estoque
      description: Download do PDF de informações sobre as transferência entre estoque.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: transferId
          in: path
          description: Identificador único da transferência.
          required: true
          schema:
            type: integer
            format: int64
        - name: show_unitary_cost
          in: query
          description: Mostra ou não o custo unitário.
          schema:
            type: boolean
            default: 0
      responses:
        '200':
          description: Informações da transferência entre estoque em PDF.
          content:
            application/pdf:
              schema:
                format: binary
              examples:
                default:
                  summary: A sample report
                  value: "%PDF-1.4\n%äüöß\n2 0 obj\n<</Length 3 0 R/Filter/FlateDecode>>\nstream\nx�=��\n\x021\fE����v\x11���0\b\x0E�~��\x0F�\0\x17���߷��d�{r\x12\"X�\r��²�G\n�\x19�\r�\x1D^�Y��AS!��0X�r�b\x7FVhl�\x1D��8��\x0F(O�vN�3J�$o�z\f\x1C6\x10��Сw���$ɝj�O��Q��N�f��\x01˒(\n\nendstream\nendobj\n\n3 0 obj\n134\nendobj\n\n5 0 obj\n<</Length 6 0 R/Filter/FlateDecode/Length1 23164>>\nstream\nx��|y|[Օ���=-v�Ȼ�E�Q�*^��q\x16\x13��BR7�\x13;�\x0E��,+��m)�\x14\x13�&a+`��ai)L1��m#�\x01�\x04\x1A\x03e��P�a��N\x19�k�����t(eZb����y#�ig~\x7F�>�_��w�=�l��s�}O�\x15\x1C\x0Ey(�\x0E�BN��˿$13��������\x05�?ܞ�\x14�i\"Ӛ��=�_x���#��#2�t�����J��.Q�{�\x1EW�#�y4�(�m�X�\x0Fĥ�W��r ���\x0F\x06��2���x\x03�U\x03>���Z��\\�qΠ�\n�\x0F,/\x18\x01ށ�6�\x1A�lT\x7F{3�G�*���@�T\x16%�(�k�a�?yK�&�O$\x10Y|�1��\vcf\x14c��\x06��\x1C\x17����|\x19�S�l\x0FS�ZD�[���6퍾.�D�\x7F\vg�ǚ���7觬�i4��LY�>�f�i#��'d�\x11:KwR:u�],��R&m��L\x05��nf�D�Eߢ�����S���c��\"�\x03�\x0F\v�MeTG�A��<���\x06uG�Bf��\x16�Z��2�E?�����v����>\x17}\x1FZ��jȫ�Fj�>\e����f��ᕸ'�6:��Qw�K�i\t�rG�'�ר���k�\r��`S�\x06*���:�2�V�\x01Н�u�f\t|��d8\tM\e�\x12\x1A�\x11\x1A���\a,��\e^1�\x13�l�M2R\x1A��&/��j�&���\x10]\x17�9]J��{X�xO���\x0F\e.�n��}�9ʠ�X<{�=k�6�z�����o!#�h9<�\x19zz�\x1Az��O�N\x7F�\a�\ai\x03u@�\v,�i�\b\x1E�\t��\a�\x01�e��jw��\x10�GaD�8��g��\x7F���\x06Kg��\x13������\x13x\x1F\x7FI�G9�����G�o;\x15�GAz���~~�^b\x06ȯb��3�Ǿ�����a�6��jV�Q���5\x14M���Kts�d�\x1C�$]I\a�ۯ�\x04\x1D�\x1Fҏ�\x0F�\x1F�\x1E��U������4{���%|\v�������f�6�Y�V]�^������\x05�M&�i����o����OE\x7F��I��\"j�G�BV<H'�eH�\x19�J�\x14�\x03�k�\x0E�ih\t�\e�\x1D��\x05�#�[���{\t_˛��Ǉ᧫���\x0Eh\x7F\t�S���U�;�GŠ,QV*{����2��R~�Z�\"�B]�nQw�QD��p������q�s�w���>���\e�զk��t���M�t�txz\x02�kF&]\tO|�\x1E@�\x1FE\f~\0��\x10\x16��w\x11�\x1CV��a�j����&�)v\x19�����ؗ�=�\x01�-�\0k�&���������_˯��x\x1F���?��3�<K�+\x0Ee��Q١\\�\fa\rA�r-<{������\e�\f���.VC������Q�G�O\x1A\x06�~�p�0e���\x03�\aFn�1�\x19+��1>b���hZij7�h�\x17�\x7F��,���rm~���؃��c<]=��\0��TJ��\x1D�C\av�\x7FP�2��$�yؖ���4�it�a�\a�\t�e/�A#WP���\x14a�����E�c�òՇ�!�\x0Fx\x01=�jt�?�O��t���K��\n�7�#�\x06��\n��]�\x02�8;�ְϳ:v���g*\x1D�Z��>�U\x16�6�w\b\x16�Uj\x1F}�� [M������&��C}���\x10�o�k�Q�33D�FuSP�\\�27#߯#Q�vb�\x1D�~�F\x05\x190�DGŉb�3�S��w�?�-�qd�zT�7���W�_E���a�e�\b�]?]�\x1D�\x06��\x19���2��xԒj��v�A}�yT�ۢ���k���>�G���-c\x7Ffc�\x11�ਧ���E�\x19�\t�����)0�GS�[fe��\x1A��a���1�Q÷\r/\x1A�����=��_\"��\x027��~K\x7Fbf�&��Q\r�]\x05ۻh�w+�P\x13�!?�l\t��z}%\x01H�\x1A޻\x17��\x19�wP'.�o�+��,��\r�f�i��w��!D�\x1A6\x01L\x1F�v\x19�\x0E�Nb�x\x10���t\x17��\x14l�\x05�\x1AގJ���.4�K �O�)ꃆ����\x11�'i5*k��O��Rf��l\t�:�z�C�(�V\e~�8-��\x1C]Ž�38c�����ʥ��^X��u��\f��j���������Άu\x17կ]�zU]m͊��U�\x15��\x1Ce�%�E�K�K\n4����ܜlkVfFzZj�%9)1aQ|��d4�\ng����ڣ��z�j�}Ær1���p�C�5�Z\x17҄�\x1EI�-�t�r��(�1J�,%�h�T_�Lk�k�\x17���$۱�\v�-��n-|F\x9B$|X\x89�\v\n���X���0��Z­��G[z�!n|Q|���\x13_����\x17\x01\\\x04(�e����uL\x02<�e�8's\"�\n�؛[���faAX)lq��۷v�4�\x16\x14t�/\v�&��7L���d�$�&�&ll\n��\x1A�+VC7i�˦Fo��Po�#���纬+�����\x14\a�6���|�:7��Ԧ�����*�-V�&����kᩭ]�g\vĵ�\e2��\v[{F[��f8��C�6~]wW�]\a��X�XUl}\x1E{���|F\v�����G?Ӄ�䌆i���HN��X�4�h��]��pC���՜7�N���Od;��3���-)1ǎ'%�@B�|�3;'!I.��m��e�\"�F$DXsk��ˎ5�\x12\x17�*\x1Au�\x02\x19^�\f\\�>D�\e�k�\x19��\x11x�\x1F6\x14Z���\x1F\t\x19`?��B�K�\x18\v-\x7F$\x01�<�M5���a�#\\V&R�Ԅ���ur\\[�l�$_i�[4tp\x1F�÷��5�p\x7FA�\b�M�N�� |hkWl�Qon�����0�\x113S33\x19��̡��Y�\x1E;2��|\x10�\b��f�%[2�Z�ׄY��L{b�m\x1D���;����\x1Eݷm�\vF��U�s:\x14Nk�Rr�\x0E�\\E�\")/�%\x16����Z�\x7FF��}a\x05I)\x11Lk\r[z6Į��\x05\x05\x1F�3i2�c���#�d7Ǧ[\x19^�X8^�`����Q\x05��E��s��h���V\x14���V��:�3Ꚍ\x1E�k\x16��1�0\x7Fx���3\x13����rí7wc\x11�l\r����q;�a븓�б��\x05Oo7tvE8�M=�Ǘb��\x18nE�\x12�g�b��\x11�1$z���T�1'�!9�J�\x1C�'\x19I�y\x06��=�c8���U��\x14\x11|\x03�8�M��(g�F�$op��A�V(ޤN3�6\e\r�\\y�\x15Q\x1Cnv�duXޫ?[���n�����\0��\x01.˫\nR\nR\nqa���@S�>p\x1A�/��SЅ'\x182��e!\e\x1Dt�(1��_��Q=\t����Y\e2�3�3\r��V�^�{��E\x06[J!#��Z�l1g\x17\x1F11�dtj\"nQ\rL�ٙv��i\x05U\x05� %U#�Re�I~ӄ����i;�m�,;���ػ�4�A�H;���i\x05�Y���\x19�\x17��^�RVT׭�5EE�E�;x�S=WM�����tM��Ͼ�J^�\\݆]��\x03\x1D�0\x1C�+zn��\x1F>q͘��̦>�AmR�%/<�ؓ�S�ĳ�-�ߨ\x1D��ˤ{�Y�Jٓr�A�3f\e�y}J\eoKy���'yЙ�.ʤ�����8cZzQF\x06M�RgR�S[Zs$�E3Yf�\x15�vf.YZs�:f�~�;V�{+��/*�3��dЎ��;ff��j��k�;�\x10�ߌ�\x0F;�C�t��\"#Uo�\x17\x1A�\b/��\x05�F�}IQQ-������z�J\x01*��<���O�l۶�\r�e,�����~�.>6m=�Y�%�:�����:\x0F�~���:*fk�Q)�ٙ\x12�`0\x1A\x132��\t5J���Zco�-�\x16k�=AS*K;�zJ\x0F��W�u�æ�\x12�0>�\x10.=Uz�4�J+K�1q���Rc�3'��\x01�Cr�`*PM9��pY$�T <�X5YRR�s���\x19\x19�-E�)�\x1D�=)̗�R&y�39'�(?\x0F8_\x1E��cy�\x1D-Dt\x19|\x1C!*\x16ɔ\x1C� z�J�]\f�bg#Z=���b皋j*�_*~�XI.�\x15\x1F*V�X+�*�\x16���%���Z�8�B�����۹ׁD{o�N�������p��\fKI]Mh˫ذc�N���V��rEuf�Jy��@\bj��K�F\t\x16̀\a�r��Z\x1F�,�@I�����[��WL���aec\x7F���j�m�vn�޹��/��滾ZQ�ᦻ�9o�gǲ�k�>�\x01b�4�U݆�Lc5GSK\f,m2z�iMH�1g&&ט��(.�L�p�-gM\r��&.J2Z8�\x19�4�*\n���z,�2Ɏ8S\x17%'V&���Q�ѓ����2�\x7F�\x14Ոޙ���&#++G]�8��5\a\x15�L�bg\x1C�#T?1J�Ӊ3oe�FU�\x16���\x19�9ر�l6��g=�����k�c��&˻�SÙ��\rҵ,uu��k�j\0�$���\x0E&㲳-l�h\v�Aŏ�\x16:\x1E}�X��q\x05��xu�D9F��o�I�)\ri��l\\R�\r\x06�!\x13\x18�>�qLVwZAZZ\x013%)�%��b��%1����>}cSaӧ\x0E�oݜ������j��$��\x0F����\x17-I�Eb�[��;�,�>j`2�G��Fñ�cV�b\x03�c�����\x14&&%Q��\x10.I&s�9U/Ӗ_�ߓ��?�oȷ$k,�,Q��\x16\x16�ٺ'�^��ʹڷ\"�@C��H7��g��r�׈�w'�W����c�_����?���}M��P;f8�Y���'�)\x19g\x7F�>7�S���ޟ\x18�l�\x12�s-�\x13G��\x06�A5\x1A\nM���|���Y�4\x1F6s��\x14U�'�̦\x06�\x16<�oSp��\x1CmQ�\"�H�������@�z\x0F\0\x06s�ع\x17�b��c5XHF�l_RΜ]����k8���MT'+\x1C�k�˨\x93��*+S5��ҭ\x1E�\x1A��I+��L�驙)Ii�dIJcd��q��Elע(\f\x13e&��R�c�XV\x1D��x�\x16���������nV�%�ʔ])<e���Ĥ�\"����2�2y&B�d\\BMfv�\x15Ǹ���\x1C{�7�������~��X�X\x15Z\x03.����By\x10�!mEm�(\vY&Q\x0422Vd�Q\x12��{W�\x1D�\"PԴ��\x7F���7�U�ڿpm���XVom{�����\"�n���@l��>r��\x0F\eP�q�q�P\\8n*�T���\f�����qc@\x18\x14�\t\a��L�I��Ĩ�N�\"\x18\rF�\x1A�MEL\x15{9�`i��m֏\x1A�~\v \x03�%����`\x01Î4���ng��o�l�I�N\x7F�O�E8@�<\v;�\x16�r�\n�\f�\x06~�\x106L\x19N\x19~o0�\f=���1 \f0\x067%\\)b4c\te��X��^\x11�k8��Vx�\x11gr1Ϊt�c_;F�����E���J�]�G\f\x0Fǟ�;�8�c6��\r�bck��ŏ$>i|2���K�I�+\t����������ͯ�p&��$g��x)C��.yq�쓲��[�\t�I��I=I<ɚ�D\x16d�ְ\x15���|�F�KJc��<�[�d�LNJ�\x19\x13��\x16��+5\x15�7�.J��\f\\��D\x05�2�`K\x12Kʩ\\�k�o�}����\x05f'��9;��\x18�Ʀ3r�l:�.��\x19\x149g��Y��`u.N�%ׂK^J�,j\rge\x11L�\x11�H\x15ƀH��\x13}d�\x14�,���0��L�g�.<\x11\x17�N\x0E\e\v\x1A\x1C$�_w�(�ꓜ�R�P�$�'9�,�BQ�\x1C\x0E\x1C���\vC�v\x0E�#Ǯ\x15\x17�ZhE5)\x05��$M\x1C�&c\x16�3��|�������ϰT�Y�r�k��b�K.��gl[�W�\x7F�W�\x19�����|��\rl�ʃMM\x01�1�����{��q��]��\x7F4g��C\x0F��~�S\x7F��j�2�\aCmc3\x1F�\x11��Mo���\x0F�>�\x01S�\x11(�w�\x0E�Wt�)�\x0E�\x01J�q�{\t�\tܗ�cd��v�0�\b���8����|Rє!�\x7F�\rj��Y]z\x02� \rċ#!*i;�6[|�\b\x02�K���ݻ4X^\x15�\x17/G��\x9D�\x0E+��,:�R:��a\x03Y��t�\b�\x0E\x1D6�w�7t�LEܯ�q4����x�9E��E�k��\x0E'�ns�\x0E'\x1A��\x1F��$�,�ӳ~;�|\\��6�j\x1D�Z��B�,�uX�xː\x0E\e(�r�\x0E\e\x01_��&�\x1C�a3�Y���qԒb��x�J��\x0E/��i��~[�\"�\x17:���HO��$����\x12�\n�'e}I�U��zP�\x06��N�J�Yߗ�\x11xc�k:�Rj�\e\x126��d�I�\x11������'X�tX%��&�8\x11_k�\x0E#�ٵ:\f9�\r:��f_�Ð�}�\x0E#��\x13:��f��\x0E#�ٿ�a�7�a\x1DF|s^�a�7�S:��j�:��j��a�W�_:��\x16�)�x��\x7F�a��8��E���d�J�K\x1C\x12N\x10k)٨ð�d���D�xtX�����-R�m:,�|M�i��%��0|^�]\t�\v{J~�ð��M\tg\0�^�tX%�4C\x99���V�A_�$�lI�S�\x05�^\t�\x1C(�M��\x03��H8_�S:�ð��)\t�$��uXп,�\"\aJ��a�@�\x1F%\\&�S����OY��rQ\t�JuX������0�/��c��*۪�\x02�K�\t1��:,��KXƥ�~\x1D\x16z\x1F�N�O~��nr�\e�F��uR��7���Ђ:����a���\x02�+)4`\x06�_\x01�Y�]�CI���iԁ�\x01\n��\x04�ۈ>�o9�ƻ��u�Zb\e�1�~\ex������\x06y\x01�aڇk\x1F��1�\x02�z���\x1C;�̣�f���%RJ`��\x15�Z���*�\tX7f}����A*=����1G[>Ϯ�y�oI�\n��A� �a�\x1C8����s\rX\x0F��MAi�𑆱�\t�R�#\x1E\x1A�K~����M�n�����.�\v>\x0F�\no�HN!��<6���^a�\x1F��?��#�KЍH�������[.��^���r�_z�\x05k���>,g�2S;p\rI�c\x11�e�*�R��$(�<�aآ�ʥ�b,����}2�D�\rI]����e��m�sPJ\x14v�C���\x18�&�vI}n=\x1A�\x19au@��K�1Ʒ\x7F6�^=��z\x04=�7\x01�����Dȥ�\x1F��4�a�U3�\x17�\x11�\x11)�\x7F^6\bZ��\x15�=��y;�{ĭgj�\x1C� dz�W��c��:&$=-2j.�}r�\x0EK�\x0EH~a����5��-���Z��Jc�QH���nP\ni1�_��w}�J��>$GsQ\r�,\x1D�֝?'fjk`v-bnPʛ�!��庵.��nY�4}����O��#�1~�üz\f����9��U��}��c\x12檽K�*�\x1D���[_�WFm@���ދe�䌭d~v{g3K��+��\fJkDn���V��\f��1(Gs�\e�Љ\x14���ܺ�^)!$=ݷ 7=�\x17�\x19ϊ�vϮp��mM��\x15ҷ\x01�w��z\x12���=�߃zՈ����es�36;(#�+%\x7F�j!�-g�2-��Oz�/w���U��\x1E�5S̻�'�u\x1Db\x0Fż\x18��3\x16�H��\x1C\x1A�usƶ\ny�\x051�\x06gj%�w���_a+du\x1A\x04E��K\x03�\x06\x01\r�\by�(@�d\x0E�\"^1K�\x7FWÈ̘\x18�g��ͨ��8�[њ�y\x02�\x02�8\x01Zq��ķ\0Ӂ��͋q\x12��Ib;)\x11OS�u�l\n�'״Y|l��<��}>��\x7F�)6\x17���<\x13�^9�\x1F��Y����\x16���h~��U��:\x1Aۿ^�f\x06�=�GJ���D�[�umbw��ki��i\x14�\x19�\x18���Α����w�g6��e�\b��y�������.\x14\x1E�̓2����ק��\"\x03{ee�YݫGfH�|�\b\x15�U-�T�\"��\x15�j��m���佨\vZ\ato\a�\x1A�Q����\x033Wg��\x13\v�~�1��+V�]�\"���W���kb��84����\x15��Oz�;�\x14\x19�w��l�zx^�Ν�\x1F�)aݠ�?�W�\x05�Fd�/�ќ\x7F\x1F:S\x1F�(}��ݡ��ǅ�����욟݃zE��?���z~�Uޅ9�q+�ˏ�r��Fn��K�9\x1E�\x0E-�����[Fu�C1\x18����$\a��jH���Ρ}��h���]��џ�7���y�g���ŝ\eǘ���X�R��x&b�\x0F�z��d휗�հ�_h�G��\r�왑 �O\x1A)�$P�{�\x1A����r���|U#��ħ#۩M����r���p\x1D���$�J�ų�hB��v���Oƙ��\x0Fyo�<�����v�=ڣZg�G��\e�\x05�Қ|�~߰+��\ri�\x01w���\n��\v�J!L��\r�\x04&�m\x1C\x02��ի��q���\x1A\a\x06�m�=�����\x13�\f���5\x0E{]\x03�}\x03}32�H�&Pk.�\f\a��\x15\x15UUZ�&�{�\x17��\x0E�Α̧��r)�S\x8Fh�î>Ϡk�rͷ�c-׆={���g�ӧy�� H�wh���V�unҶ��]����4�@�3�\x0F��YIX�oϰ�߿\x7F>ʣ5\x0F�F�C{\x04�\x17�-׶�z!z����\ep\x05�\t��^�ץu�BC}X\b\\����7\x14�\f\nۆ�k\x01\x17�\bGywk}��w��2-�v7�\\^L\x0E��=Z\x7Fh�5\x04�5w�k���20�\x03X�kH��~�~/���\x02=nO ��:� \x17����W\x17%\x16\x1F\x1A�h#�`�tà��'�\x05\f��0�\r�\x06fp�\x11�P��\x01�\e@hx\x7F�&=���\x19v!��a�+8�)��\x0E!�\x01�L��3,M�\x1D\x1A\x18\0(m��A\x1F�x��B��\\j �\x7F�3�\x13\"[\x03B�gx�;$)�}�C�\v��CP\x14\v`�׵�'�G��s��3��G|�\x1E�>�$�i��\x06�\x0Em�\x03�\ry� w��\x1E�q�큒����Y��\n,f�3�_��\x02ȝ\x01!c�; �\e�7R@��\x06G�G\v\x05�Rқ��!al�-����aɐ�E\x05�\"O��a\x0F�\x1EDj L\x01�L�'���=�+�C\x10�\t��Ŝ\x06�>o�?��/T\b�!�H����4���Ġ7 \x04\vr��o�'�U�\a��5��###\x15�z�V�}����������ے���.�Xx�@��\f#�\x01`=�e�΍�\e�\x1A;7n٬mi�>���esG��x񶖖M-�;\x13�\x13�;���\x19�\t\x17���P� (=z�-&\x17#\x12Y��w���\x17\x12�n�m��G��Dr�\x1CE|���@��3��L�к���B\x1A�z�6\x02gp�1\";GD:y\x108�����\x1DD�wÏsv�\x10��x$�\f�,\x1FB���\r\x05!\x1Af����-�80c\x14\x12y�\x15��\"۴}����\x17\x19�\n C�sWhۇd��Y\x05֤W.��K\v�=n/�ι+���!�m�����\x159��\x1C�Uy�@\x0FK����!�\x06��^� (�t#���\x03�$��(��\x11\x14�P�7�/�@V�݃HT؏P��k���=�P�����s�\x13�ko�\x13�jP�ܞ�!}\x05úݒ8��\v\r�a\x0F��zFb���\v:D҃\n�7W�f�\b�dau\a�b,\x16�ҭ�}~���Y\x06}�날�\x15\\#\b�w4�\x10(YUSW��-_U^USU\x15\x17��\rȪ��kjp�[Q�խ�]]�:1�#v��nF1��͓�\x10��\x1E�&I�����e�L�B,\x11�\x06o-���\x1Fsk:�U��c���SnP�Q����u|��\x02���\r.|mp�k�\v_\e\\�����\x06\x17�6�����\r.|mp�k�\v_\e\\�����\x06\x17�6�\x7F�k���\x0F��Q�,�f>�>��>�\t-�=w�bY5\x02\v�fp��\x16Ɨ�{�\x7F\v���:,��ᙹ��W���%\x12�O\x13�l��}���\vg���7$��|rWΧ>��|O�>҇>զ�SתM�Ju��T/R�����;�y�Ot氭�'�i\x13#�\x1C4���m����\x1F�x\x1E���/\x15;�d��,�͛��7\x7F����+���S��~J�y}�:��P2cd�N)_���W;'��'�Ӫ��\x16�NjG�\x14V6�\x14\x1A'�r\e\x1DD� o��/�>&����j\v�o\"\r�\x10�Bc�29v�\t��&�2��k\"�)�ﳑ��\x180a�V�7�+W\x10S<�\x10�ɦ\x1C@�\x18�\e}>�^�\x0F�B��H�T\x1F��\x06�7(\x19(C6�Qɤj��J\x0E�J�P$)�'\x14))�n�W�\x14�$IV\x12Q�l�Y1E�m�\tE�ٰS�a\"n��%��\x19�:�D�:\x04�,[�3J<U���tN�%V\x1FnLP:��N�Ŧ���\x7F��:��\b\x04A_��G���\\ɧ\f����H�m�r�$�;!\x05��E�+D7��T=�\x18���\a\b+���Jm�'�VUSc�RBU��\x13\tM9\b�����(�Q�i\x14�\x19EhFa�(\x19\x11�\e1s#h*�+ɯ��a��\0�\x10�\x11�\a�I`iI�1%[��\x13�\x13�\x1D\x036g\".IXf���I2�DBRu�3J���q\x18\x1F�ȲV�N(er)�&����\x1F�K��b�\0c���3J��Xz\"_z �hØQ�b#�\x7F�O\t����E|�O���\x1F��E��a��N�S\x13����,�Ӎy�\r\b��_��\0q~�?����\x7F�'�\x15�g�\x185�\x7F\x05�>��Я@\x7F<R�=�$��@\a��$f����#�J\x1D�\x15�@V�\x0E�fV7\x16�����\a\x11?E�\x14��|���?�ފ~�\a�{�൴\x16�Q��\x0E\x7FZ�4\x7F�?�3��'\"I\x84p�$�#\x11��\x15�ب���4�\x16\x7F�r@��HQ\x0E��L\x14-�%��<�\x1F��H�-�1��Ϻػ \x1A�WDO���H�\x10r8�f;�\x0F��Nk���Y�|H�*�*�zH�\n�r�N{Hk��[�\0�a��p��̑=hN���ƈZ\x17n<�5�uq:�똄zp�K�p��ξ#�\x06~\x1DmA�q\0� �!��H��J�Ϣ}\x0E��\x12\x13D\v���|���\a�\x1F\x1C~��\a�\x1F\x1C~p�%�_j\x0F�\t�\x1Ep�\a\x1C=��\a\x1C=��\x01G��\x10����Gr���\x1D\x1C��h�\x1C��h\aG;8�%G;8���.9��p��\t\x0E��p��\t\x0E'8���\t\x0E'8���\n\x1CU�\x02G��\x02G\x158��Q%9��Q\x05�*ɡ�C\x03�\x06\x0EMrh�����C�\x1C\x1A84ph��\x02\x0E\v8,�H\x0E\v8,ఀ�\"9,2>!4�q\x1A\x1C��q\x1A\x1C�%�ip�\x06�ip��\x1C��q\x1A\x1C��ȸr��\x05��\x02�)���,��r\n,��rJ��\x02�)��җ\x1E���H�\x03h\a�\x0E�\t�)�N�w\n�S�wJ�W\bM���\x11\x06G\x18\x1Ca�\x11\x06G\x18\x1Cap�%G\x18\x1Cap�%�\x188��1\x06�1�1\x06�1p��cLr���\r�\t��=)����X�\x19�+?�Je\x7F�ޖ�\x01zE���q�\x7F�\x1E��g�j�_Iu�\x1F�\"�C��d3���.�1\x13%`\v�.4\x1F�}hG�N��$�\x12�khQ^�\\�&����3\x1D1�4\x19��N�x�q��>�\x11�I���k��<Q�Q�\x16���\x1E���h8Dpm�P\x03���\x1A��Z�kx�3���2�R\x19;YƎ��/���8~1Se�Ý>��˙P���\nZ]Q�:T�[�|;�\x16)Zi�dOǺR�\x03��h�h\x0F�]�V�V�V�V�f��2�w9��\"�F+F+@ӄ\n����Mj��y�'��&^H�8���\x04|'\"�U�&#�[�=\x15)�5Ʊ'�X�\x06�'\x10���\x1F��^��7c�7\"�\x13�\x1E��j��\x14W��4R���1�m'�*X;��\x03�\x16����\x12�m��J�9\"�E��\f�\n1[ʺ�u�:�Ҙ&{Ķ\x16ݒ�m��6S�\b<3R�4π&ze\x02\x06��\x18�R�s���v��`�\x1D\x1C����6��{�p�]⌷=]�U\x107�\"��\x1E�øއE�����\em�@\x16+|�v���vk��\x19�[`��RE�v�6�\x1Fw��\x0E٪l���m\x01�'l.�6��B�#��lO\v3��u�ǟ��C�F��0b��pR��j�osڊm����\x7FiULn]���\x03T\x1DӾ\f�-+�\x149��n��8�L�\x0E�.5�7�5�MKL�M��ts��bN2'���f�Ѭ�������\x1D\x1C��+Ӎ��ɨ��*a\v\x17W\x1E�KS�̜>A�4���u�gm�)7��j��:�,~뎰����Sۨ�s}x��m�\x14�\x16�s��M�v�3vk7�a~�$�ήI\x16\x15��r�\x0FQ�3���c�X�u�tw�5s_��!u]�����\\z��c�e�\x0F��j��\n?��\x1D�\x16@4��-|����c<�'�4\x1F�I���:��yr�6�W��� {]�!��@FŢ\x03�y=i�\f�d� C�btE`\a]��@\x17�HE��(>QҩLЍ���4�k��)$zEҼRH�h�1�m\x1E/*�Tv�u\t*�eפa�R��\x06�r�$���M\n�1�,\\9GR���Β�J]\n����h�Kfh�K@��\x1F�<�\x1Dlby���◿z�-\x1E���M����C��6~ ��$XQO��_�.O8d�4�\x0F؛���ϟg�y1���<NϷtv�?��4G�;���]��\x13\r�]�\vt�8����<�ꅰ.����<Ӎb�A�j\x14�\x1A��\x06g����\x15y��5n���wAd?�\x17�#�{r\v��gZ��DB\x1F[[`=�{\\%�\b-rt�\x13��Éhb����QLa���$��n����ڂ���\x11}�\x02t�}=͸�\x04Q[�vk[��cG�H���u��\x05�KN[��ی\x7F\x18\ae�{>%\x05��\n��\x15\n�\x02�\x12r�)�-\\��\x16^�\x15��LP���\r\\�\fNQ$n<.�e2:�I\a�`A�N@\x0E&~#�\x19��.\x13\x1F3���xT\bN��W���\t~\x10\r�q|$R)����ĒB��\x12�����x>\x15}$��Z�\x14A\x1DXE_\x18�)�\0\x0E\x17\x1E.?\\7V8V>Vg\x14?��\x10����Q\x1A�|H��#0�\b��n��t\x01��\x1F�˗��\x04�pt;\x02�7^�îv�#\x03��:6�K\rH������\x01�\x11�&\x1D�\x19���\"'C�E*�?X�6\x13\nendstream\nendobj\n\n6 0 obj\n10825\nendobj\n\n7 0 obj\n<</Type/FontDescriptor/FontName/BAAAAA+Arial-BoldMT\n/Flags 4\n/FontBBox[-627 -376 2000 1011]/ItalicAngle 0\n/Ascent 905\n/Descent 211\n/CapHeight 1010\n/StemV 80\n/FontFile2 5 0 R>>\nendobj\n\n8 0 obj\n<</Length 272/Filter/FlateDecode>>\nstream\nx�]��n� \x10��<\x05��a\x03Zu��1ٺ��C���\x0F�0Z��\x04���\x17\x06�&=@~��7�f`usm�r��΢\x05G\a���e^�\0�è4IR*�p{���:C�׶��`j�0�%ao>�8���E�=�\x11�b%X�Gz��[\x1F��1_0�v����\x12\x06��3��\x04\fU�F��r��K�\n�7\x034�8�V�,a1�\0��\x11H�yE�ۭ\"��\\�K�A|v֗&���,�<�ȧ<�=rq\r���s�\x1C9�\v�\x1C�\x14�\x14�\x1F�\x16�\x1C\x19���u���9���\x04�a�?k�b�֯\0��������\x7F1�\t*<�;���\nendstream\nendobj\n\n9 0 obj\n<</Type/Font/Subtype/TrueType/BaseFont/BAAAAA+Arial-BoldMT\n/FirstChar 0\n/LastChar 11\n/Widths[750 722 610 889 556 277 666 610 333 277 277 556 ]\n/FontDescriptor 7 0 R\n/ToUnicode 8 0 R\n>>\nendobj\n\n10 0 obj\n<<\n/F1 9 0 R\n>>\nendobj\n\n11 0 obj\n<</Font 10 0 R\n/ProcSet[/PDF/Text]>>\nendobj\n\n1 0 obj\n<</Type/Page/Parent 4 0 R/Resources 11 0 R/MediaBox[0 0 595 842]/Group<</S/Transparency/CS/DeviceRGB/I true>>/Contents 2 0 R>>\nendobj\n\n12 0 obj\n<</Count 1/First 13 0 R/Last 13 0 R\n>>\nendobj\n\n13 0 obj\n<</Title<FEFF00440075006D006D00790020005000440046002000660069006C0065>\n/Dest[1 0 R/XYZ 56.7 773.3 0]/Parent 12 0 R>>\nendobj\n\n4 0 obj\n<</Type/Pages\n/Resources 11 0 R\n/MediaBox[ 0 0 595 842 ]\n/Kids[ 1 0 R ]\n/Count 1>>\nendobj\n\n14 0 obj\n<</Type/Catalog/Pages 4 0 R\n/Outlines 12 0 R\n>>\nendobj\n\n15 0 obj\n<</Author<FEFF004500760061006E00670065006C006F007300200056006C006100630068006F006700690061006E006E00690073>\n/Creator<FEFF005700720069007400650072>\n/Producer<FEFF004F00700065006E004F00660066006900630065002E006F0072006700200032002E0031>\n/CreationDate(D:20070223175637+02'00')>>\nendobj\n\nxref\n0 16\n0000000000 65535 f \n0000011997 00000 n \n0000000019 00000 n \n0000000224 00000 n \n0000012330 00000 n \n0000000244 00000 n \n0000011154 00000 n \n0000011176 00000 n \n0000011368 00000 n \n0000011709 00000 n \n0000011910 00000 n \n0000011943 00000 n \n0000012140 00000 n \n0000012196 00000 n \n0000012429 00000 n \n0000012494 00000 n \ntrailer\n<</Size 16/Root 14 0 R\n/Info 15 0 R\n/ID [ <F7D77B3D22B9F92829D49FF5D78B8F28>\n<F7D77B3D22B9F92829D49FF5D78B8F28> ]\n>>\nstartxref\n12787\n%%EOF\n"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/production-orders:
    get:
      operationId: get-production-orders
      security:
        - OAuth2:
            - productionOrders:read
      tags:
        - ProductionOrders
      summary: Lista de ordens de produção
      description: Retorna lista das ordens de produção disponíveis.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: status
          in: query
          description: Filtra pelo status da ordem de produção.
          schema:
            type: string
            enum:
              - order
              - in_progress
              - finished
            example: order
        - name: responsible_id
          in: query
          description: Filtra pelo ID do usuário responsável.
          schema:
            type: integer
            example: 123
        - name: requester_id
          in: query
          description: Filtra pelo ID do usuário solicitante.
          schema:
            type: integer
            example: 123
        - name: date_start
          in: query
          description: Filtra por data de criação inicial (formato YYYY-MM-DD).
          schema:
            type: string
            format: date
            example: '2025-01-01'
        - name: date_end
          in: query
          description: Filtra por data de criação final (formato YYYY-MM-DD).
          schema:
            type: string
            format: date
            example: '2025-12-31'
        - name: deadline_start
          in: query
          description: Filtra por data de entrega inicial (formato YYYY-MM-DD).
          schema:
            type: string
            format: date
            example: '2025-12-31'
        - name: deadline_end
          in: query
          description: Filtra por data de entrega final (formato YYYY-MM-DD).
          schema:
            type: string
            format: date
            example: '2025-12-31'
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista das ordens de produção disponíveis.
          content:
            application/json:
              schema:
                properties:
                  data:
                    type: object
                    properties:
                      production_orders:
                        type: array
                        description: Lista de ordens de produção.
                        items:
                          $ref: '#/components/schemas/ProductionOrder'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      operationId: create-production-order
      security:
        - OAuth2:
            - productionOrders:write
      tags:
        - ProductionOrders
      summary: Cria uma ordem de produção
      description: >-
        Cria uma nova ordem de produção com produtos, componentes e opções
        especificados.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
      requestBody:
        $ref: '#/components/requestBodies/ProductionOrderCreateBody'
      responses:
        '201':
          description: Ordem de produção criada com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/ProductionOrder'
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/production-orders/{productionOrderId}:
    get:
      operationId: get-production-order
      security:
        - OAuth2:
            - productionOrders:read
      tags:
        - ProductionOrders
      summary: Obtém uma ordem de produção
      description: >-
        Retorna os detalhes de uma ordem de produção específica, incluindo seus
        itens, componentes, etc.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productionOrderId
          in: path
          required: true
          description: ID da ordem de produção.
          schema:
            type: integer
            example: 8
        - name: status
          in: query
          required: false
          description: >
            Status da ordem de produção.


            Se não for informado, será retornado o status da ordem de produção
            atual.

            Caso informado, será retornado os dados da ordem de produção com o
            status informado.


            **Exemplo:**

            - `status=order` - Retorna os dados da ordem de produção no momento
            do status `order`.

            - `status=in_production` - Retorna os dados da ordem de produção no
            momento do status `in_production`.

            - `status=finished` - Retorna os dados da ordem de produção no
            momento do status `finished`.
          schema:
            type: string
            enum:
              - order
              - in_production
              - finished
      responses:
        '200':
          description: Detalhes da ordem de produção.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/ProductionOrder'
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: update-production-order
      security:
        - OAuth2:
            - productionOrders:write
      tags:
        - ProductionOrders
      summary: Atualiza uma ordem de produção
      description: >
        Atualiza uma ordem de produção existente.


        As permissões de alteração variam conforme o status da ordem:

        - **order**: Permite alterar todos os campos

        - **in_production**: Permite alterar apenas componentes dos produtos
        (quantidade, stock_id), proibido enviar 'options'

        - **finished**: Permite alterar apenas dados do produto (stock_id,
        quantidade)
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productionOrderId
          in: path
          required: true
          description: ID da ordem de produção.
          schema:
            type: integer
            example: 8
      requestBody:
        $ref: '#/components/requestBodies/ProductionOrderUpdateBody'
      responses:
        '200':
          description: Ordem de produção atualizada com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/ProductionOrder'
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/production-orders/{productionOrderId}/advance:
    post:
      operationId: advance-production-order
      security:
        - OAuth2:
            - productionOrders:write
      tags:
        - ProductionOrders
      summary: Avança etapa da ordem de produção
      description: >
        Avança o status da ordem de produção através das etapas do processo.


        **Sequência de status:**

        1. `order` → `in_progress` (inicia a produção)

        2. `in_progress` → `finished` (finaliza a produção)


        Não é possível retroceder etapas. Uma vez que uma ordem de produção
        avança de status, 

        não pode retornar ao status anterior.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productionOrderId
          in: path
          required: true
          description: ID da ordem de produção.
          schema:
            type: integer
            example: 8
      responses:
        '200':
          description: Status da ordem de produção avançado com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/ProductionOrder'
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/production-orders/{productionOrderId}/cancel:
    post:
      operationId: cancel-production-order
      security:
        - OAuth2:
            - productionOrders:write
      tags:
        - ProductionOrders
      summary: Cancela uma ordem de produção
      description: >
        Cancela uma ordem de produção existente e opcionalmente reverte as
        movimentações de estoque.


        **Comportamento:**

        - Altera o status da ordem de produção para `canceled`

        - Se `is_revert_stock` for `true`, reverte as movimentações de estoque
        dos componentes consumidos e produtos produzidos

        - Se `is_revert_stock` for `false` ou não informado, mantém as
        movimentações de estoque


        **Restrições:**

        - A ordem de produção deve estar em um status válido para cancelamento
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productionOrderId
          in: path
          required: true
          description: ID da ordem de produção.
          schema:
            type: integer
            example: 8
      requestBody:
        $ref: '#/components/requestBodies/ProductionOrderCancelBody'
      responses:
        '200':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/production-orders/{productionOrderId}/finish:
    post:
      operationId: finish-production-order
      security:
        - OAuth2:
            - productionOrders:write
      tags:
        - ProductionOrders
      summary: Finaliza uma ordem de produção
      description: >
        Finaliza e conclui definitivamente uma ordem de produção que está com
        status `finished`.


        **Restrições:**

        - A ordem de produção deve estar com status `finished` para ser
        finalizada

        - Ordens com outros status não podem ser finalizadas através deste
        endpoint
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productionOrderId
          in: path
          required: true
          description: ID da ordem de produção.
          schema:
            type: integer
            example: 8
      responses:
        '200':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v1/store/auth/{socialType}/callback:
    post:
      operationId: post-store-customer-social-login-callback
      tags:
        - StoreCustomerAccount
      summary: Social Signin
      description: Social Signin.
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
        - $ref: '#/components/parameters/CPlugStoreDomain'
        - name: socialType
          in: path
          description: |
            Nome da rede social.

            - `google`: Google Signin.
          schema:
            type: string
            enum:
              - google
            example: google
      requestBody:
        $ref: '#/components/requestBodies/StoreCustomerSocialLogin'
      responses:
        '201':
          description: Dados do login.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/AccessToken'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v1/store/signup:
    post:
      operationId: post-store-customer-create
      tags:
        - StoreCustomerAccount
      summary: Cria uma nova conta do cliente na loja
      description: Cria uma nova conta do cliente na loja.
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
        - $ref: '#/components/parameters/CPlugStoreDomain'
      requestBody:
        description: Corpo da requisição da criação da conta do cliente na loja.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StoreCustomer'
      responses:
        '201':
          description: Conta criada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/StoreCustomer'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v1/store/accounts:
    get:
      operationId: get-store-customer-account
      tags:
        - StoreCustomerAccount
      summary: Obtém informações da conta do cliente logado
      description: Obtém informações da conta do cliente logado.
      parameters:
        - $ref: '#/components/parameters/CPlugStoreDomain'
        - $ref: '#/components/parameters/StoreCustomerAuthorization'
      responses:
        '200':
          description: Informações da conta do cliente logado.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/StoreCustomerAccount'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-store-customer-account
      tags:
        - StoreCustomerAccount
      summary: Atualiza os dados da conta do cliente logado
      description: Atualiza os dados da conta do cliente logado.
      parameters:
        - $ref: '#/components/parameters/CPlugStoreDomain'
        - $ref: '#/components/parameters/StoreCustomerAuthorization'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/UpdateStoreCustomerAccount'
      responses:
        '200':
          description: Informações atualizadas da conta do cliente logado.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/StoreCustomerAccount'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v1/store/accounts/addresses:
    get:
      operationId: get-stores-customers-addresses
      tags:
        - StoreCustomerAddresses
      summary: Lista de endereços do cliente na loja
      description: Retorna de endereços do cliente na loja.
      parameters:
        - $ref: '#/components/parameters/CPlugStoreDomain'
        - $ref: '#/components/parameters/StoreCustomerAuthorization'
      responses:
        '200':
          description: Lista de endereços do cliente na loja.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      addresses:
                        type: array
                        description: Representa a lista de endereços do cliente na loja
                        items:
                          $ref: '#/components/schemas/Address'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: post-stores-customers-addresses
      tags:
        - StoreCustomerAddresses
      summary: Cria/Atualiza os endereços de um cliente da Loja
      description: Cria/Atualiza os endereços de um cliente da Loja.
      parameters:
        - $ref: '#/components/parameters/CPlugStoreDomain'
        - $ref: '#/components/parameters/StoreCustomerAuthorization'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/StoreCustomerAddresses'
      responses:
        '200':
          description: Endereço criado ou atualizado.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  addresses:
                    type: array
                    description: Representa a lista de endereços do cliente na loja
                    items:
                      $ref: '#/components/schemas/Address'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v1/store/accounts/addresses/{addressId}:
    get:
      operationId: get-stores-customers-address-ids
      tags:
        - StoreCustomerAddresses
      summary: Obter um endereço de do cliente na loja
      description: Resgata um endereço de do cliente na loja.
      parameters:
        - $ref: '#/components/parameters/CPlugStoreDomain'
        - $ref: '#/components/parameters/StoreCustomerAuthorization'
        - name: addressId
          in: path
          description: ID do endereço.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Dados do endereço.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    $ref: '#/components/schemas/Address'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-stores-customers-address-ids
      tags:
        - StoreCustomerAddresses
      summary: Atualiza um endereço do cliente na loja
      description: Atualiza um endereço do cliente na loja.
      parameters:
        - $ref: '#/components/parameters/CPlugStoreDomain'
        - $ref: '#/components/parameters/IdempotencyKey'
        - $ref: '#/components/parameters/StoreCustomerAuthorization'
        - name: addressId
          in: path
          description: ID do endereço.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição de um endereço.
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                address:
                  type: object
                  $ref: '#/components/schemas/StoreCustomerAddress'
      responses:
        '200':
          description: Dados do endereço.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    $ref: '#/components/schemas/Address'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-stores-customers-address-id
      tags:
        - StoreCustomerAddresses
      summary: Apaga um endereço do cliente na loja
      description: Apaga um endereço do cliente na loja.
      parameters:
        - $ref: '#/components/parameters/CPlugStoreDomain'
        - $ref: '#/components/parameters/StoreCustomerAuthorization'
        - name: addressId
          in: path
          description: ID do endereço.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v1/store/accounts/delete:
    post:
      operationId: post-store-customer-account-delete
      tags:
        - StoreCustomerAccount
      summary: Apaga a conta do cliente na loja
      description: Apaga a conta do cliente na loja.
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
        - $ref: '#/components/parameters/CPlugStoreDomain'
        - $ref: '#/components/parameters/StoreCustomerAuthorization'
      requestBody:
        description: Corpo da requisição para apagar da conta do cliente na loja.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StoreCustomerDelete'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v1/store/accounts/legal-terms:
    get:
      operationId: get-check-store-customer-legal-terms-accepted
      tags:
        - StoreLegalTerms
      summary: Verifica quais os termos legais que foram ou não aceitos
      description: Retorna lista dos termos legais que que foram ou não aceitos.
      parameters:
        - $ref: '#/components/parameters/CPlugStoreDomain'
      responses:
        '200':
          description: Lista de termos legais aceitos ou não aceitos.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      company_legal_term_status:
                        type: array
                        description: >-
                          Representa lista de termos legais aceitos ou não
                          aceitos
                        items:
                          $ref: '#/components/schemas/StoreCustomerLegalTermAccepted'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-store-customer-legal-terms-accept
      tags:
        - StoreLegalTerms
      summary: Aceita os termos legais
      description: Aceita os termos legais.
      parameters:
        - $ref: '#/components/parameters/CPlugStoreDomain'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        description: Corpo requisição do aceite dos termos legais.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StoreCustomerLegalTermAccept'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v1/store/accounts/password-reset:
    post:
      operationId: post-store-customer-request-password-reset
      tags:
        - StoreCustomerAccount
      summary: Solicitação de recuperação de senha
      description: Solicitação de recuperação de senha.
      parameters:
        - $ref: '#/components/parameters/CPlugStoreDomain'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        description: Corpo requisição da recuperação de senha.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StoreCustomerPasswordRequest'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v1/store/accounts/password-reset/reset:
    post:
      operationId: post-store-customer-request-password-reset-reset
      tags:
        - StoreCustomerAccount
      summary: Alteração da senha da conta
      description: Alteração da senha da conta.
      parameters:
        - $ref: '#/components/parameters/CPlugStoreDomain'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        description: Corpo requisição da alteração da senha da conta.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StoreCustomerPasswordRequestResetReset'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v1/store/legal-terms:
    get:
      operationId: get-store-legal-terms
      tags:
        - StoreLegalTerms
      summary: Lista de termos legais da loja
      description: Retorna lista de termos legais da loja.
      parameters:
        - $ref: '#/components/parameters/CPlugStoreDomain'
        - $ref: '#/components/parameters/LegalTermType'
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista de estoques.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      legal_terms:
                        type: array
                        description: Representa uma lista de termos legais da loja
                        items:
                          $ref: '#/components/schemas/LegalTerm'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v1/store/legal-terms/{legalTermType}:
    get:
      operationId: get-single-store-legal-term
      tags:
        - StoreLegalTerms
      summary: Obtém um termo legal da loja
      description: Retorna um termo legal da loja.
      parameters:
        - $ref: '#/components/parameters/CPlugStoreDomain'
        - name: legalTermType
          in: path
          description: |
            Filtro pelo tipo do termo legal.

            - `custom`: Customizado;
            - `delivery_policy`: Política de Entrega;
            - `privacy_policy`: Política de Privacidade;
            - `returns_policy`: Política de Devolução;
            - `terms_of_use`: Termos de Uso. 
          schema:
            type: string
            enum:
              - custom
              - delivery_policy
              - privacy_policy
              - returns_policy
              - terms_of_use
            example: terms_of_use
      responses:
        '200':
          description: Informações do termo legal.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/LegalTerm'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/legal-terms:
    get:
      operationId: get-legal-terms
      security:
        - OAuth2:
            - legalTerms:read
      tags:
        - LegalTerms
      summary: Lista de termos legais padrão do sistema
      description: Retorna lista de termos legais padrão do sistema.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/LegalTermType'
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista de termos legais padrão.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      legal_terms:
                        type: array
                        description: Representa uma lista de termos legais da loja
                        items:
                          $ref: '#/components/schemas/LegalTerm'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-store-legal-term
      security:
        - OAuth2:
            - legalTerms:write
      tags:
        - LegalTerms
      summary: Cria novo termo legal
      description: Cria novo termo legal.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        description: Corpo requisição da criação do termo legal.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LegalTerm'
      responses:
        '201':
          description: Novo termo do termo legal criado.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/LegalTerm'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/legal-terms/{legalTermId}:
    get:
      operationId: get-single-legal-term
      security:
        - OAuth2:
            - legalTerms:read
      tags:
        - LegalTerms
      summary: Obtém um termo legal
      description: Obtém um termo legal.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: legalTermId
          in: path
          description: ID do termo legal.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Informações do termo legal.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/LegalTerm'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/legal-terms/apps/{appId}:
    get:
      operationId: get-legal-terms-by-app
      security:
        - OAuth2:
            - legalTerms:read
      tags:
        - LegalTerms
      summary: Lista de termos legais de um aplicativo
      description: Retorna lista de termos legais de um aplicativo.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: appId
          in: path
          description: >
            Identificador único do aplicativo na CPlug.


            Você pode localizar os IDs dos aplicativos no _endpoint_ de
            [listagem de aplicativos](#tag/Applications/operation/get-apps).
          required: true
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/LegalTermType'
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista de termos legais.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      legal_terms:
                        type: array
                        description: Representa uma lista de termos legais
                        items:
                          $ref: '#/components/schemas/LegalTerm'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/labels:
    get:
      operationId: get-labels
      security:
        - OAuth2:
            - labels:read
      tags:
        - Labels
      summary: Lista de etiquetas
      description: Retorna lista de etiquetas para impressão.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: name
          in: query
          description: Filtro pelo nome da etiqueta.
          schema:
            type: string
            example: Etiqueta Produtos
        - name: type
          in: query
          description: |
            Filtra pelo tipo de etiqueta.

            - `PDF`: Etiqueta em formato PDF.
            - `PPLA`: Etiqueta em formato PPLA (linguagem de impressora).
            - `BPLB`: Etiqueta em formato BPLB (linguagem de impressora).
          schema:
            type: string
            enum:
              - PDF
              - PPLA
              - BPLB
            example: PDF
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista de etiquetas.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      labels:
                        type: array
                        description: Representa a lista de etiquetas
                        items:
                          $ref: '#/components/schemas/LabelSlim'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-labels
      security:
        - OAuth2:
            - labels:write
      tags:
        - Labels
      summary: Cria uma nova etiqueta
      description: Cria uma nova etiqueta para impressão.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/LabelBody'
      responses:
        '201':
          description: Etiqueta criada com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      label:
                        $ref: '#/components/schemas/Label'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/labels/download:
    post:
      operationId: post-labels-download
      security:
        - OAuth2:
            - labels:read
      tags:
        - Labels
      summary: Gera PDF de etiquetas
      description: >-
        Gera um arquivo PDF com as etiquetas dos produtos especificados,
        **permitido apenas para modelos de impressão PDF**.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
      requestBody:
        $ref: '#/components/requestBodies/LabelGenerate'
      responses:
        '200':
          description: PDF das etiquetas gerado com sucesso.
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/labels/print:
    post:
      operationId: post-labels-print
      security:
        - OAuth2:
            - labels:read
      tags:
        - Labels
      summary: Prepara etiquetas para impressão
      description: >-
        Prepara os dados das etiquetas para envio à impressora, **permitido
        apenas para modelos de impressão PPLA ou BPLB**.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
      requestBody:
        $ref: '#/components/requestBodies/LabelGenerate'
      responses:
        '200':
          description: Dados das etiquetas preparados para impressão.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LabelPrint'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/labels/{labelId}:
    get:
      operationId: get-label-by-id
      security:
        - OAuth2:
            - labels:read
      tags:
        - Labels
      summary: Visualiza uma etiqueta
      description: Retorna os detalhes de uma etiqueta específica.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: labelId
          in: path
          description: ID da etiqueta.
          required: true
          schema:
            type: integer
            format: int64
            minimum: 1
            example: 123
      responses:
        '200':
          description: Detalhes da etiqueta.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      label:
                        $ref: '#/components/schemas/Label'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: put-label
      security:
        - OAuth2:
            - labels:write
      tags:
        - Labels
      summary: Atualiza uma etiqueta
      description: Atualiza os dados de uma etiqueta existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: labelId
          in: path
          description: ID da etiqueta.
          required: true
          schema:
            type: integer
            format: int64
            minimum: 1
            example: 123
      requestBody:
        $ref: '#/components/requestBodies/LabelBody'
      responses:
        '200':
          description: Etiqueta atualizada com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      label:
                        $ref: '#/components/schemas/Label'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-labels
      security:
        - OAuth2:
            - labels:delete
      tags:
        - Labels
      summary: Apaga uma etiqueta
      description: Apaga uma etiqueta marcando como desabilitada.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: labelId
          in: path
          description: ID da etiqueta.
          required: true
          schema:
            type: integer
            format: int64
            minimum: 1
            example: 123
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/settings/erp:
    get:
      operationId: get-settings-erp
      security:
        - OAuth2:
            - erpSettings:read
      tags:
        - ErpSettings
      summary: Lista as configurações do ERP
      description: Retorna as configurações do ERP.
      responses:
        '200':
          description: Lista as configurações do ERP.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/ErpSettings'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    patch:
      operationId: patch-settings-erp
      security:
        - OAuth2:
            - erpSettings:write
      tags:
        - ErpSettings
      summary: Atualiza as configurações do ERP
      description: Atualiza as configurações do ERP.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        description: Corpo requisição de atualização das configurações do ERP.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ErpSettings'
      responses:
        '200':
          description: Lista as configurações do ERP.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/ErpSettings'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/settings/terminal:
    get:
      operationId: get-settings-terminal
      security:
        - OAuth2:
            - terminalSettings:read
      tags:
        - TerminalSettings
      summary: Lista as configurações do terminal
      description: Retorna as configurações do terminal.
      responses:
        '200':
          description: Lista as configurações do terminal.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/TerminalSettings'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    patch:
      operationId: put-settings-terminal
      security:
        - OAuth2:
            - terminalSettings:write
      tags:
        - TerminalSettings
      summary: Atualiza as configurações do terminal
      description: Atualiza as configurações do terminal.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        description: Corpo requisição de atualização das configurações do terminal.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TerminalSettings'
      responses:
        '200':
          description: Lista as configurações do terminal.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/TerminalSettings'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/settings/totem:
    get:
      operationId: get-totem-settings
      security:
        - OAuth2:
            - totemSettings:read
      tags:
        - TotemSettings
      summary: Lista as configurações do Totem
      description: Retorna as configurações do Totem.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: company_id
          in: query
          description: Filtra pelo ID da empresa.
          schema:
            type: number
            example: 123
      responses:
        '200':
          description: Lista as configurações do Totem.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/TotemSettings'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: put-totem-settings
      security:
        - OAuth2:
            - totemSettings:write
      tags:
        - TotemSettings
      summary: Atualiza as configurações do Totem
      description: Atualiza as configurações do Totem existente com novas configurações.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/TotemSettings'
      responses:
        '200':
          description: Configurações do Totem atualizado com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/TotemSettings'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/settings/districts:
    get:
      operationId: get-settings-districts
      security:
        - OAuth2:
            - terminalSettings:read
      tags:
        - Districts
      summary: Lista os bairros de uma cidade
      description: Retorna os bairros de uma cidade.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: ibge_code
          required: true
          in: query
          description: Filtra pelo código do IBGE.
          schema:
            type: string
            example: '3550308'
            maxLength: 50
        - name: name
          in: query
          description: Filtra pelo nome do bairro.
          schema:
            type: string
            example: Centro
            maxLength: 100
        - name: type_filter
          in: query
          description: Filtra pelo tipo de bairro.
          schema:
            type: string
            default: all
            example: exclude_custom
            enum:
              - all
              - exclude_custom
              - only_custom
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista os bairros de uma cidade.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/Districts'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    post:
      operationId: post-settings-districts
      security:
        - OAuth2:
            - terminalSettings:write
      tags:
        - Districts
      summary: Cria um bairro customizado
      description: Cria um bairro customizado.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/CreateDistrictsRequest'
      responses:
        '200':
          description: Bairro customizado criado.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/Districts'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/settings/districts/{id}:
    put:
      operationId: put-settings-districts
      security:
        - OAuth2:
            - terminalSettings:write
      tags:
        - Districts
      summary: Atualiza um bairro customizado
      description: Atualiza um bairro customizado.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: id
          in: path
          description: ID do bairro customizado.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/UpdateDistrictsRequest'
      responses:
        '200':
          description: Bairro customizado atualizado.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/Districts'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-settings-districts
      security:
        - OAuth2:
            - terminalSettings:delete
      tags:
        - Districts
      summary: Apaga um bairro customizado
      description: Apaga um bairro customizado.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: id
          in: path
          description: ID do bairro customizado.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v3/settings/password-panel:
    get:
      operationId: get-password-panel
      security:
        - OAuth2:
            - passwordPanel:read
      tags:
        - PasswordPanel
      summary: Lista as configurações do painel de senha
      description: Retorna as configurações do painel de senha da empresa logada.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
      responses:
        '200':
          description: Lista das configurações do painel de senha.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/PasswordPanel'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: put-password-panel
      security:
        - OAuth2:
            - passwordPanel:write
      tags:
        - PasswordPanel
      summary: Atualiza as configurações do painel de senha
      description: Atualiza as configurações do painel de senha da empresa logada.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/PasswordPanelRequest'
      responses:
        '200':
          description: Lista das configurações do painel de senha.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/PasswordPanel'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tax-settings/icms:
    get:
      operationId: get-tax-settings-icms
      security:
        - OAuth2:
            - grupoIcms:read
      tags:
        - IcmsGroup
      summary: Lista os grupos de ICMS
      description: Retorna uma lista de grupos de ICMS da Empresa.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: name
          in: query
          description: Filtra pelo nome do grupo de ICMS.
          schema:
            type: string
            example: Grupo ...
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista os grupos de ICMS da Empresa.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      icms:
                        type: array
                        description: Representa uma lista grupos de ICMS
                        items:
                          $ref: '#/components/schemas/Icms'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-tax-settings-icms
      security:
        - OAuth2:
            - grupoIcms:write
      tags:
        - IcmsGroup
      summary: Cria um grupo de ICMS
      description: >
        Cria um novo grupo de ICMS com configurações específicas baseadas no
        grupo tributário.


        Para informações detalhadas sobre grupos tributários, validações e
        configurações, consulte a seção [📋 Grupos de
        ICMS](#section/Conhecimento-Geral/Grupos-de-ICMS) na documentação
        principal.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/IcmsCreateUpdate'
      responses:
        '201':
          description: Grupo de ICMS criado com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/IcmsDetail'
              examples:
                '0':
                  $ref: '#/components/examples/0'
                '10':
                  $ref: '#/components/examples/10'
                '20':
                  $ref: '#/components/examples/20'
                '30':
                  $ref: '#/components/examples/30'
                '40':
                  $ref: '#/components/examples/40'
                '41':
                  $ref: '#/components/examples/41'
                '50':
                  $ref: '#/components/examples/50'
                '51':
                  $ref: '#/components/examples/51'
                '60':
                  $ref: '#/components/examples/60'
                '70':
                  $ref: '#/components/examples/70'
                '90':
                  $ref: '#/components/examples/90'
                '101':
                  $ref: '#/components/examples/101'
                '102':
                  $ref: '#/components/examples/102'
                '103':
                  $ref: '#/components/examples/103'
                '201':
                  $ref: '#/components/examples/201'
                '202':
                  $ref: '#/components/examples/202'
                '203':
                  $ref: '#/components/examples/203'
                '300':
                  $ref: '#/components/examples/300'
                '400':
                  $ref: '#/components/examples/400'
                '500':
                  $ref: '#/components/examples/500'
                '900':
                  $ref: '#/components/examples/900'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tax-settings/icms/{id}:
    get:
      operationId: get-tax-settings-icms-id
      security:
        - OAuth2:
            - grupoIcms:read
      tags:
        - IcmsGroup
      summary: Obtém um grupo de ICMS
      description: >
        Retorna os detalhes completos de um grupo de ICMS específico, incluindo
        configurações tributárias e percentuais.


        Para informações detalhadas sobre grupos tributários e suas
        configurações, consulte a seção [📋 Grupos de
        ICMS](#section/Conhecimento-Geral/Grupos-de-ICMS) na documentação
        principal.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: id
          in: path
          description: ID do grupo de ICMS.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      responses:
        '200':
          description: Detalhes do grupo de ICMS.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/IcmsDetail'
              examples:
                '0':
                  $ref: '#/components/examples/0'
                '10':
                  $ref: '#/components/examples/10'
                '20':
                  $ref: '#/components/examples/20'
                '30':
                  $ref: '#/components/examples/30'
                '40':
                  $ref: '#/components/examples/40'
                '41':
                  $ref: '#/components/examples/41'
                '50':
                  $ref: '#/components/examples/50'
                '51':
                  $ref: '#/components/examples/51'
                '60':
                  $ref: '#/components/examples/60'
                '70':
                  $ref: '#/components/examples/70'
                '90':
                  $ref: '#/components/examples/90'
                '101':
                  $ref: '#/components/examples/101'
                '102':
                  $ref: '#/components/examples/102'
                '103':
                  $ref: '#/components/examples/103'
                '201':
                  $ref: '#/components/examples/201'
                '202':
                  $ref: '#/components/examples/202'
                '203':
                  $ref: '#/components/examples/203'
                '300':
                  $ref: '#/components/examples/300'
                '400':
                  $ref: '#/components/examples/400'
                '500':
                  $ref: '#/components/examples/500'
                '900':
                  $ref: '#/components/examples/900'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-tax-settings-icms-id
      security:
        - OAuth2:
            - grupoIcms:write
      tags:
        - IcmsGroup
      summary: Atualiza um grupo de ICMS
      description: >
        Atualiza um grupo de ICMS existente com novas configurações.


        **🔄 Limpeza de Campos:** Se alterar o tipo do grupo de ICMS
        (`tributary_group_id`), os campos do grupo anterior serão
        automaticamente limpos e apenas os campos específicos do novo grupo
        serão aceitos.


        Para informações detalhadas sobre grupos tributários, validações e
        configurações, consulte a seção [📋 Grupos de
        ICMS](#section/Conhecimento-Geral/Grupos-de-ICMS) na documentação
        principal.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: id
          in: path
          description: ID do grupo de ICMS.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      requestBody:
        $ref: '#/components/requestBodies/IcmsCreateUpdate'
      responses:
        '200':
          description: Grupo de ICMS atualizado com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IcmsDetail'
              examples:
                '0':
                  $ref: '#/components/examples/0'
                '10':
                  $ref: '#/components/examples/10'
                '20':
                  $ref: '#/components/examples/20'
                '30':
                  $ref: '#/components/examples/30'
                '40':
                  $ref: '#/components/examples/40'
                '41':
                  $ref: '#/components/examples/41'
                '50':
                  $ref: '#/components/examples/50'
                '51':
                  $ref: '#/components/examples/51'
                '60':
                  $ref: '#/components/examples/60'
                '70':
                  $ref: '#/components/examples/70'
                '90':
                  $ref: '#/components/examples/90'
                '101':
                  $ref: '#/components/examples/101'
                '102':
                  $ref: '#/components/examples/102'
                '103':
                  $ref: '#/components/examples/103'
                '201':
                  $ref: '#/components/examples/201'
                '202':
                  $ref: '#/components/examples/202'
                '203':
                  $ref: '#/components/examples/203'
                '300':
                  $ref: '#/components/examples/300'
                '400':
                  $ref: '#/components/examples/400'
                '500':
                  $ref: '#/components/examples/500'
                '900':
                  $ref: '#/components/examples/900'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-tax-settings-icms-id
      security:
        - OAuth2:
            - grupoIcms:delete
      tags:
        - IcmsGroup
      summary: Apaga um grupo de ICMS
      description: >
        Apaga um grupo de ICMS específico.


        **🔒 Guarda de Exclusão:**


        Antes de excluir, o sistema verifica se o grupo de ICMS está sendo
        utilizado como "Taxa de Serviço da NF-e". A validação considera:


        - Se o campo `flg_nfe_service_tax` do grupo de ICMS está ativo

        - Se a configuração da empresa `flg_service_tax_product` está ativa


        **⚠️ Se ambas as condições forem verdadeiras**, a API retorna um erro
        **409 Conflict** com uma mensagem clara informando que o grupo não pode
        ser excluído.


        **✅ Se a validação passar**, o grupo de ICMS será excluído
        permanentemente e a API retorna **204 No Content**.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: id
          in: path
          description: ID do grupo de ICMS.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: Conflito - Grupo de ICMS não pode ser excluído
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IcmsCannotBeDeletedException'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tax-settings/icms/{id}/set-default:
    put:
      operationId: post-tax-settings-icms-id-set-default
      security:
        - OAuth2:
            - grupoIcms:write
      tags:
        - IcmsGroup
      summary: Define um grupo de ICMS como padrão
      description: >
        Define o grupo de ICMS especificado como o padrão para a empresa.


        Ao definir um grupo como padrão, todos os outros grupos de ICMS serão
        marcados como não padrão.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: id
          in: path
          description: ID do grupo de ICMS a ser definido como padrão.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v3/tax-settings/icms/tributary-groups:
    get:
      operationId: get-tax-settings-icms-tributary-groups
      security:
        - OAuth2:
            - icms:read
      tags:
        - IcmsGroup
      summary: Lista os grupos tributários
      description: Retorna uma lista de grupos tributários de ICMS.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: search
          in: query
          description: Filtra pelas principais propriedades do grupo tributário.
          schema:
            type: string
            example: outros
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista os grupos tributários de ICMS.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      icms_tributary_groups:
                        type: array
                        description: Representa uma lista de grupos tributários de ICMS
                        items:
                          $ref: '#/components/schemas/IcmsTributaryGroup'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tax-settings/icms/exemptions:
    get:
      operationId: get-tax-settings-icms-exemptions
      security:
        - OAuth2:
            - grupoIcms:read
      tags:
        - IcmsGroup
      summary: Lista motivos de desoneração
      description: >
        Retorna uma lista de motivos de desoneração de ICMS disponíveis para um
        grupo tributário específico.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IcmsTributaryGroupIdQuery'
      responses:
        '200':
          description: >-
            Lista de motivos de desoneração de ICMS disponíveis para o grupo
            tributário especificado.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: array
                    description: Lista de motivos de desoneração de ICMS
                    items:
                      $ref: '#/components/schemas/IcmsExemption'
              example:
                data:
                  - id: 3
                    name: Uso na agropecuária
                  - id: 9
                    name: Outros
                  - id: 12
                    name: Órgão de fomento e desenvolvimento agropecuário
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v3/tax-settings/ipi:
    get:
      operationId: get-tax-settings-IPI
      security:
        - OAuth2:
            - grupoIpi:read
      tags:
        - IpiGroup
      summary: Lista os grupos de IPI
      description: Retorna uma lista de grupos de IPI da Empresa.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: name
          in: query
          description: Filtra pelo nome do grupo de IPI.
          schema:
            type: string
            example: Grupo ...
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista os grupos de IPI da Empresa.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      ipis:
                        type: array
                        description: Representa uma lista grupos de IPI
                        items:
                          $ref: '#/components/schemas/Ipi'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-tax-settings-ipi
      security:
        - OAuth2:
            - grupoIpi:write
      tags:
        - IpiGroup
      summary: Cria um grupo de IPI
      description: >
        Cria um novo grupo de IPI com configurações específicas baseadas no
        grupo tributário.


        Para informações detalhadas sobre grupos tributários, validações e
        configurações, consulte a seção [📋 Grupos de
        IPI](#section/Conhecimento-Geral/Grupos-de-IPI) na documentação
        principal.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/IpiCreateOrUpdate'
      responses:
        '201':
          description: Grupo de IPI criado com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/IpiDetail'
              examples:
                entrada_recuperacao_credito_example:
                  $ref: '#/components/examples/entrada_recuperacao_credito_example'
                entrada_tributada_zero_example:
                  $ref: '#/components/examples/entrada_tributada_zero_example'
                base_isento_example:
                  $ref: '#/components/examples/base_isento_example'
                entrada_nao_tributada_example:
                  $ref: '#/components/examples/entrada_nao_tributada_example'
                base_imune_example:
                  $ref: '#/components/examples/base_imune_example'
                base_suspensao_example:
                  $ref: '#/components/examples/base_suspensao_example'
                outras_entradas_example:
                  $ref: '#/components/examples/outras_entradas_example'
                base_saida_tributada_example:
                  $ref: '#/components/examples/base_saida_tributada_example'
                saida_tributada_zero_example:
                  $ref: '#/components/examples/saida_tributada_zero_example'
                base_saida_isenta_example:
                  $ref: '#/components/examples/base_saida_isenta_example'
                saida_nao_tributada_example:
                  $ref: '#/components/examples/saida_nao_tributada_example'
                saida_imune_example:
                  $ref: '#/components/examples/saida_imune_example'
                saida_suspensao_example:
                  $ref: '#/components/examples/saida_suspensao_example'
                base_outras_saidas_example:
                  $ref: '#/components/examples/base_outras_saidas_example'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tax-settings/ipi/{id}:
    get:
      operationId: get-tax-settings-ipi-id
      security:
        - OAuth2:
            - grupoIpi:read
      tags:
        - IpiGroup
      summary: Obtém um grupo de IPI
      description: >
        Retorna os detalhes completos de um grupo de IPI específico, incluindo
        grupo tributário, classificação legal e percentuais.


        Para informações detalhadas sobre grupos tributários, classificações
        legais e configurações, consulte a seção [📋 Grupos de
        IPI](#section/Conhecimento-Geral/Grupos-de-IPI) na documentação
        principal.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: id
          in: path
          description: ID do grupo de IPI.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      responses:
        '200':
          description: Detalhes do grupo de IPI.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/IpiDetail'
              examples:
                entrada_recuperacao_credito_example:
                  $ref: '#/components/examples/entrada_recuperacao_credito_example'
                entrada_tributada_zero_example:
                  $ref: '#/components/examples/entrada_tributada_zero_example'
                base_isento_example:
                  $ref: '#/components/examples/base_isento_example'
                entrada_nao_tributada_example:
                  $ref: '#/components/examples/entrada_nao_tributada_example'
                base_imune_example:
                  $ref: '#/components/examples/base_imune_example'
                base_suspensao_example:
                  $ref: '#/components/examples/base_suspensao_example'
                outras_entradas_example:
                  $ref: '#/components/examples/outras_entradas_example'
                base_saida_tributada_example:
                  $ref: '#/components/examples/base_saida_tributada_example'
                saida_tributada_zero_example:
                  $ref: '#/components/examples/saida_tributada_zero_example'
                base_saida_isenta_example:
                  $ref: '#/components/examples/base_saida_isenta_example'
                saida_nao_tributada_example:
                  $ref: '#/components/examples/saida_nao_tributada_example'
                saida_imune_example:
                  $ref: '#/components/examples/saida_imune_example'
                saida_suspensao_example:
                  $ref: '#/components/examples/saida_suspensao_example'
                base_outras_saidas_example:
                  $ref: '#/components/examples/base_outras_saidas_example'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-tax-settings-ipi-id
      security:
        - OAuth2:
            - grupoIpi:write
      tags:
        - IpiGroup
      summary: Atualiza um grupo de IPI
      description: >
        Atualiza um grupo de IPI existente com novas configurações.


        **🔄 Limpeza de Campos:** Se alterar o tipo do grupo de IPI
        (`tributary_group_id`), os campos do grupo anterior serão
        automaticamente limpos e apenas os campos específicos do novo grupo
        serão aceitos.


        Para informações detalhadas sobre grupos tributários, validações e
        configurações, consulte a seção [📋 Grupos de
        IPI](#section/Conhecimento-Geral/Grupos-de-IPI) na documentação
        principal.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: id
          in: path
          description: ID do grupo de IPI.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      requestBody:
        $ref: '#/components/requestBodies/IpiCreateOrUpdate'
      responses:
        '200':
          description: Grupo de IPI atualizado com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/IpiDetail'
              examples:
                entrada_recuperacao_credito_example:
                  $ref: '#/components/examples/entrada_recuperacao_credito_example'
                entrada_tributada_zero_example:
                  $ref: '#/components/examples/entrada_tributada_zero_example'
                base_isento_example:
                  $ref: '#/components/examples/base_isento_example'
                entrada_nao_tributada_example:
                  $ref: '#/components/examples/entrada_nao_tributada_example'
                base_imune_example:
                  $ref: '#/components/examples/base_imune_example'
                base_suspensao_example:
                  $ref: '#/components/examples/base_suspensao_example'
                outras_entradas_example:
                  $ref: '#/components/examples/outras_entradas_example'
                base_saida_tributada_example:
                  $ref: '#/components/examples/base_saida_tributada_example'
                saida_tributada_zero_example:
                  $ref: '#/components/examples/saida_tributada_zero_example'
                base_saida_isenta_example:
                  $ref: '#/components/examples/base_saida_isenta_example'
                saida_nao_tributada_example:
                  $ref: '#/components/examples/saida_nao_tributada_example'
                saida_imune_example:
                  $ref: '#/components/examples/saida_imune_example'
                saida_suspensao_example:
                  $ref: '#/components/examples/saida_suspensao_example'
                base_outras_saidas_example:
                  $ref: '#/components/examples/base_outras_saidas_example'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-tax-settings-ipi-id
      security:
        - OAuth2:
            - grupoIpi:delete
      tags:
        - IpiGroup
      summary: Apaga um grupo de IPI
      description: |
        Apaga um grupo de IPI específico.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: id
          in: path
          description: ID do grupo de IPI.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tax-settings/ipi/{id}/set-default:
    put:
      operationId: post-tax-settings-ipi-id-set-default
      security:
        - OAuth2:
            - grupoIpi:write
      tags:
        - IpiGroup
      summary: Define um grupo de IPI como padrão
      description: >
        Define o grupo de IPI especificado como o padrão para a empresa.


        Ao definir um grupo como padrão, todos os outros grupos de IPI serão
        marcados como não padrão.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: id
          in: path
          description: ID do grupo de IPI a ser definido como padrão.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tax-settings/ipi/tributary-groups:
    get:
      operationId: get-tax-settings-ipi-tributary-groups
      security:
        - OAuth2:
            - ipi:read
      tags:
        - IpiGroup
      summary: Lista os grupos tributários de IPI
      description: Retorna uma lista de grupos tributários de IPI.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: search
          in: query
          description: Filtra pelas principais propriedades do grupo tributário.
          schema:
            type: string
            example: entrada
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista os grupos tributários de IPI.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      ipi_tributary_groups:
                        type: array
                        description: Representa uma lista de grupos tributários de IPI
                        items:
                          $ref: '#/components/schemas/IpiTributaryGroup'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tax-settings/ipi/legal-classifications:
    get:
      operationId: get-tax-settings-ipi-legal-classifications
      security:
        - OAuth2:
            - ipi:read
      tags:
        - IpiGroup
      summary: Lista as classificações legais de IPI
      description: Retorna uma lista de classificações legais de IPI.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: search
          in: query
          description: Filtra pelas principais propriedades da classificação legal.
          schema:
            type: string
            example: livros
        - name: tributary_group_id
          in: query
          description: Filtra pelo ID do grupo tributário de IPI.
          schema:
            type: integer
            example: 0
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista as classificações legais de IPI.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      ipi_legal_classifications:
                        type: array
                        description: Representa uma lista de classificações legais de IPI
                        items:
                          $ref: '#/components/schemas/IpiLegalClassification'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tax-settings/pis-cofins:
    get:
      operationId: get-tax-settings-pis-cofins
      security:
        - OAuth2:
            - grupoPisCofins:read
      tags:
        - PisCofinsGroup
      summary: Lista os grupos de PIS/COFINS
      description: Retorna uma lista de grupos de PIS/COFINS da Empresa.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: name
          in: query
          description: Filtra pelo nome do grupo de PIS/COFINS.
          schema:
            type: string
            example: Grupo ...
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista os grupos de PIS/COFINS da Empresa.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      pis_cofins:
                        type: array
                        description: Representa uma lista grupos de PIS/COFINS
                        items:
                          $ref: '#/components/schemas/PisCofins'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-tax-settings-pis-cofins
      security:
        - OAuth2:
            - grupoPisCofins:write
      tags:
        - PisCofinsGroup
      summary: Cria um grupo de PIS/COFINS
      description: >
        Cria um novo grupo de PIS/COFINS com configurações específicas baseadas
        nas situações tributárias.


        Para informações detalhadas sobre situações tributárias, validações e
        configurações, consulte a seção [📋 Grupos de
        PIS/COFINS](#section/Conhecimento-Geral/Grupos-de-PIS-COFINS) na
        documentação principal.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/PisCofinsCreateOrUpdate'
      responses:
        '201':
          description: Grupo de PIS/COFINS criado com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/PisCofins'
              examples:
                situacao_com_percentual_example:
                  $ref: '#/components/examples/situacao_com_percentual_example'
                situacao_sem_percentual_example:
                  $ref: '#/components/examples/situacao_sem_percentual_example'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tax-settings/pis-cofins/{id}:
    get:
      operationId: get-tax-settings-pis-cofins-id
      security:
        - OAuth2:
            - grupoPisCofins:read
      tags:
        - PisCofinsGroup
      summary: Obtém um grupo de PIS/COFINS
      description: >
        Retorna os detalhes completos de um grupo de PIS/COFINS específico,
        incluindo situações tributárias e percentuais configurados.


        Para informações detalhadas sobre situações tributárias, validações e
        configurações, consulte a seção [📋 Grupos de
        PIS/COFINS](#section/Conhecimento-Geral/Grupos-de-PIS-COFINS) na
        documentação principal.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: id
          in: path
          description: ID do grupo de PIS/COFINS.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      responses:
        '200':
          description: Detalhes do grupo de PIS/COFINS.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/PisCofins'
              examples:
                situacao_com_percentual_example:
                  $ref: '#/components/examples/situacao_com_percentual_example'
                situacao_sem_percentual_example:
                  $ref: '#/components/examples/situacao_sem_percentual_example'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-tax-settings-pis-cofins-id
      security:
        - OAuth2:
            - grupoPisCofins:write
      tags:
        - PisCofinsGroup
      summary: Atualiza um grupo de PIS/COFINS
      description: >
        Atualiza um grupo de PIS/COFINS existente com novas configurações.


        **🔄 Limpeza de Campos:** Se alterar as situações tributárias
        (`pis_tributary_group_id` ou `cofins_tributary_group_id`), os campos de
        percentual serão automaticamente ajustados conforme as novas situações.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: id
          in: path
          description: ID do grupo de PIS/COFINS.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      requestBody:
        $ref: '#/components/requestBodies/PisCofinsCreateOrUpdate'
      responses:
        '200':
          description: Grupo de PIS/COFINS atualizado com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/PisCofins'
              examples:
                situacao_com_percentual_example:
                  $ref: '#/components/examples/situacao_com_percentual_example'
                situacao_sem_percentual_example:
                  $ref: '#/components/examples/situacao_sem_percentual_example'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-tax-settings-pis-cofins-id
      security:
        - OAuth2:
            - grupoPisCofins:delete
      tags:
        - PisCofinsGroup
      summary: Apaga um grupo de PIS/COFINS
      description: |
        Apaga um grupo de PIS/COFINS específico.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: id
          in: path
          description: ID do grupo de PIS/COFINS.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v3/tax-settings/pis-cofins/{id}/set-default:
    put:
      operationId: post-tax-settings-pis-cofins-id-set-default
      security:
        - OAuth2:
            - grupoPisCofins:write
      tags:
        - PisCofinsGroup
      summary: Define um grupo de PIS/COFINS como padrão
      description: >
        Define o grupo de PIS/COFINS especificado como o padrão para a empresa.


        Ao definir um grupo como padrão, todos os outros grupos de PIS/COFINS
        serão marcados como não padrão.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: id
          in: path
          description: ID do grupo de PIS/COFINS a ser definido como padrão.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v3/tax-settings/pis-cofins/tributary-groups:
    get:
      operationId: get-tax-settings-pis-cofins-tributary-groups
      security:
        - OAuth2:
            - pisCofins:read
      tags:
        - PisCofinsGroup
      summary: Lista os grupos tributários de PIS/COFINS
      description: Retorna uma lista de grupos tributários de PIS/COFINS.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: search
          in: query
          description: Filtra pelas principais propriedades do grupo tributário.
          schema:
            type: string
            example: tributável
        - name: type
          in: query
          description: Filtra pelo tipo de tributação (PIS ou COFINS).
          schema:
            type: string
            enum:
              - pis
              - cofins
            default: pis
            example: pis
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista os grupos tributários de PIS/COFINS.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    additionalProperties: false
                    properties:
                      pis_tributary_groups:
                        type: array
                        description: >-
                          Representa uma lista de grupos tributários de PIS
                          (retornado quando type=pis)
                        items:
                          $ref: '#/components/schemas/PisCofinsTributaryGroup'
                      cofins_tributary_groups:
                        type: array
                        description: >-
                          Representa uma lista de grupos tributários de COFINS
                          (retornado quando type=cofins)
                        items:
                          $ref: '#/components/schemas/PisCofinsTributaryGroup'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
                required:
                  - data
                  - meta
              examples:
                pis_response:
                  summary: Resposta para type=pis
                  value:
                    data:
                      pis_tributary_groups:
                        - id: 4
                          code: '04'
                          description: >-
                            04 - Operação Tributável (tributação monofásica
                            (alíquota zero))
                    meta:
                      current_page: 1
                      per_page: 30
                      last_page: 1
                      total: 1
                cofins_response:
                  summary: Resposta para type=cofins
                  value:
                    data:
                      cofins_tributary_groups:
                        - id: 4
                          code: '04'
                          description: >-
                            04 - Operação Tributável (tributação monofásica
                            (alíquota zero))
                    meta:
                      current_page: 1
                      per_page: 30
                      last_page: 1
                      total: 1
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tax-settings/issqns:
    get:
      operationId: get-tax-settings-issqns
      security:
        - OAuth2:
            - grupoIssqn:read
      tags:
        - IssqnGroup
      summary: Lista os grupos de ISSQN
      description: Retorna uma lista de grupos de ISSQN da Empresa.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: name
          in: query
          description: Filtra pelo nome do grupo de ISSQN.
          schema:
            type: string
            example: Grupo ...
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista os grupos de ISSQN da Empresa.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      issqns:
                        type: array
                        description: Representa uma lista grupos de ISSQN
                        items:
                          $ref: '#/components/schemas/Issqn'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
              examples:
                issqn_group_list_example:
                  $ref: '#/components/examples/issqn_group_list_example'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-tax-settings-issqns
      security:
        - OAuth2:
            - grupoIssqn:write
      tags:
        - IssqnGroup
      summary: Cria um grupo de ISSQN
      description: >
        Cria um novo grupo de ISSQN com configurações específicas para ISS
        (Imposto Sobre Serviços).


        Para informações detalhadas sobre indicadores ISS, incentivos fiscais e
        configurações, consulte a seção [📋 Grupos de
        ISSQN](#section/Conhecimento-Geral/Grupos-de-ISSQN) na documentação
        principal.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/IssqnCreateOrUpdate'
      responses:
        '201':
          description: Grupo de ISSQN criado com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/Issqn'
              examples:
                issqn_group_example:
                  $ref: '#/components/examples/issqn_group_example'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tax-settings/issqns/{id}:
    get:
      operationId: get-tax-settings-issqns-id
      security:
        - OAuth2:
            - grupoIssqn:read
      tags:
        - IssqnGroup
      summary: Obtém um grupo de ISSQN
      description: >
        Retorna os detalhes completos de um grupo de ISSQN específico, incluindo
        indicadores ISS e de incentivo fiscal.


        Para informações detalhadas sobre indicadores ISS, incentivos fiscais e
        configurações, consulte a seção [📋 Grupos de
        ISSQN](#section/Conhecimento-Geral/Grupos-de-ISSQN) na documentação
        principal.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: id
          in: path
          description: ID do grupo de ISSQN.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      responses:
        '200':
          description: Detalhes do grupo de ISSQN.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/Issqn'
              examples:
                issqn_group_example:
                  $ref: '#/components/examples/issqn_group_example'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-tax-settings-issqns-id
      security:
        - OAuth2:
            - grupoIssqn:write
      tags:
        - IssqnGroup
      summary: Atualiza um grupo de ISSQN
      description: >
        Atualiza um grupo de ISSQN existente com novas configurações.


        Para informações detalhadas sobre indicadores ISS, incentivos fiscais e
        configurações, consulte a seção [📋 Grupos de
        ISSQN](#section/Conhecimento-Geral/Grupos-de-ISSQN) na documentação
        principal.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: id
          in: path
          description: ID do grupo de ISSQN.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      requestBody:
        $ref: '#/components/requestBodies/IssqnCreateOrUpdate'
      responses:
        '200':
          description: Grupo de ISSQN atualizado com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/Issqn'
              examples:
                issqn_group_example:
                  $ref: '#/components/examples/issqn_group_example'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-tax-settings-issqns-id
      security:
        - OAuth2:
            - grupoIssqn:delete
      tags:
        - IssqnGroup
      summary: Apaga um grupo de ISSQN
      description: |
        Apaga um grupo de ISSQN específico.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: id
          in: path
          description: ID do grupo de ISSQN.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tax-settings/issqns/{id}/set-default:
    put:
      operationId: put-tax-settings-issqns-id-set-default
      security:
        - OAuth2:
            - grupoIssqn:write
      tags:
        - IssqnGroup
      summary: Define um grupo de ISSQN como padrão
      description: >
        Define um grupo de ISSQN específico como o padrão da empresa. 


        Quando um grupo é definido como padrão, todos os outros grupos de ISSQN
        da empresa perdem automaticamente o status de padrão.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: id
          in: path
          description: ID do grupo de ISSQN a ser definido como padrão.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      responses:
        '200':
          description: Grupo de ISSQN definido como padrão com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/Issqn'
              examples:
                issqn_group_default_example:
                  summary: Grupo de ISSQN definido como padrão
                  value:
                    data:
                      id: 1
                      name: Grupo 1 ISSQN
                      issqn_percent: 123
                      iss_indicator:
                        id: 1
                        name: Exigível
                      incentive_indicator: 'no'
                      is_default: true
                      disabled: false
                      created_at: '2025-04-08T18:43:44.000000Z'
                      updated_at: '2025-08-24T13:30:26.000000Z'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tax-settings/nfe-additional-infos:
    get:
      operationId: get-tax-settings-additional-info-nfe
      security:
        - OAuth2:
            - taxSettings:read
      tags:
        - NfeAdditionalInfos
      summary: Lista informações adicionais da NF-e
      description: Retorna uma lista de informações adicionais da NF-e da Empresa.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: search
          in: query
          description: Filtra pelo título ou descrição.
          schema:
            type: string
            example: título bacana
        - name: type
          in: query
          description: Filtra pelo tipo da informação adicional.
          schema:
            type: string
            enum:
              - NFE
              - NFSE
              - NFCE
            example: NFE
            default: NFE
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista de informações adicionais da NF-e da Empresa.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      additional_info_nfe:
                        type: array
                        description: Representa uma lista de informações adicionais da NF-e
                        items:
                          $ref: '#/components/schemas/AdditionalInfoNfe'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-tax-settings-additional-info-nfe
      security:
        - OAuth2:
            - taxSettings:write
      tags:
        - NfeAdditionalInfos
      summary: Cria uma informação adicional da NF-e
      description: Cria uma nova informação adicional da NF-e.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/AdditionalInfoNfeCreate'
      responses:
        '201':
          description: Informação adicional da NF-e criada com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/AdditionalInfoNfe'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tax-settings/nfe-additional-infos/{id}:
    get:
      operationId: get-tax-settings-additional-info-nfe-id
      security:
        - OAuth2:
            - taxSettings:read
      tags:
        - NfeAdditionalInfos
      summary: Obtém uma informação adicional da NF-e
      description: Retorna os detalhes de uma informação adicional da NF-e específica.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: id
          in: path
          description: ID da informação adicional da NF-e.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      responses:
        '200':
          description: Detalhes da informação adicional da NF-e.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/AdditionalInfoNfe'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-tax-settings-additional-info-nfe-id
      security:
        - OAuth2:
            - taxSettings:write
      tags:
        - NfeAdditionalInfos
      summary: Atualiza uma informação adicional da NF-e
      description: Atualiza uma informação adicional da NF-e existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: id
          in: path
          description: ID da informação adicional da NF-e.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      requestBody:
        $ref: '#/components/requestBodies/AdditionalInfoNfeUpdate'
      responses:
        '200':
          description: Informação adicional da NF-e atualizada com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/AdditionalInfoNfe'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-tax-settings-additional-info-nfe-id
      security:
        - OAuth2:
            - taxSettings:delete
      tags:
        - NfeAdditionalInfos
      summary: Apaga uma informação adicional da NF-e
      description: Apaga uma informação adicional da NF-e específica.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: id
          in: path
          description: ID da informação adicional da NF-e.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tax-settings/invoice-series:
    get:
      operationId: get-tax-settings-invoice-series
      security:
        - OAuth2:
            - taxSettings:read
      tags:
        - InvoiceSeries
      summary: Lista séries de notas fiscais
      description: Retorna uma lista de séries de notas fiscais da Empresa.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista de séries de notas fiscais da Empresa.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      invoice_series:
                        type: array
                        description: Representa uma lista de séries de notas fiscais
                        items:
                          $ref: '#/components/schemas/InvoiceSeries'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-tax-settings-invoice-series
      security:
        - OAuth2:
            - taxSettings:write
      tags:
        - InvoiceSeries
      summary: Cria uma série de nota fiscal
      description: Cria uma nova série de nota fiscal.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/InvoiceSeriesCreate'
      responses:
        '201':
          description: Série de nota fiscal criada com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/InvoiceSeries'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tax-settings/invoice-series/{id}:
    get:
      operationId: get-tax-settings-invoice-series-id
      security:
        - OAuth2:
            - taxSettings:read
      tags:
        - InvoiceSeries
      summary: Obtém uma série de nota fiscal
      description: Retorna os detalhes de uma série de nota fiscal específica.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: id
          in: path
          description: ID da série de nota fiscal.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      responses:
        '200':
          description: Detalhes da série de nota fiscal.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/InvoiceSeries'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-tax-settings-invoice-series-id
      security:
        - OAuth2:
            - taxSettings:write
      tags:
        - InvoiceSeries
      summary: Atualiza uma série de nota fiscal
      description: Atualiza uma série de nota fiscal existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: id
          in: path
          description: ID da série de nota fiscal.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      requestBody:
        $ref: '#/components/requestBodies/InvoiceSeriesUpdate'
      responses:
        '200':
          description: Série de nota fiscal atualizada com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/InvoiceSeries'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-tax-settings-invoice-series-id
      security:
        - OAuth2:
            - taxSettings:delete
      tags:
        - InvoiceSeries
      summary: Apaga uma série de nota fiscal
      description: Apaga uma série de nota fiscal específica.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: id
          in: path
          description: ID da série de nota fiscal.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tax-settings/type-invoice-pdv:
    get:
      operationId: get-tax-settings-type-invoice-pdv
      security:
        - OAuth2:
            - taxSettings:read
      tags:
        - TypeInvoicePdv
      summary: Obtém o tipo de nota emitida pelo PDV
      description: Retorna a configuração do tipo de nota emitida pelo PDV.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
      responses:
        '200':
          description: Configuração do tipo de nota emitida pelo PDV.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/TypeInvoicePdv'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-tax-settings-type-invoice-pdv
      security:
        - OAuth2:
            - taxSettings:write
      tags:
        - TypeInvoicePdv
      summary: Atualiza o tipo de nota emitida pelo PDV
      description: Atualiza a configuração do tipo de nota emitida pelo PDV.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/TypeInvoicePdvUpdate'
      responses:
        '200':
          description: >-
            Configuração do tipo de nota emitida pelo PDV atualizada com
            sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/TypeInvoicePdv'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tax-settings/nature-operations:
    get:
      operationId: get-tax-settings-nature-operations
      security:
        - OAuth2:
            - taxSettings:read
      tags:
        - NatureOperations
      summary: Lista naturezas de operações
      description: Retorna uma lista de naturezas de operações da Empresa.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: search
          in: query
          description: Filtra pelo nome e descrição da natureza da operação.
          schema:
            type: string
            example: Devolução
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista de naturezas de operações da Empresa.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      nature_operations:
                        type: array
                        description: Representa uma lista de naturezas de operações
                        items:
                          $ref: '#/components/schemas/NatureOperations'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-tax-settings-nature-operations
      security:
        - OAuth2:
            - taxSettings:write
      tags:
        - NatureOperations
      summary: Cria uma natureza de operação
      description: Cria uma nova natureza de operação.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/NatureOperationsCreate'
      responses:
        '201':
          description: Natureza de operação criada com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/NatureOperationsDetail'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tax-settings/nature-operations/{id}:
    get:
      operationId: get-tax-settings-nature-operations-id
      security:
        - OAuth2:
            - taxSettings:read
      tags:
        - NatureOperations
      summary: Obtém uma natureza de operação
      description: Retorna os detalhes de uma natureza de operação específica.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: id
          in: path
          description: ID da natureza de operação.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      responses:
        '200':
          description: Detalhes da natureza de operação.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/NatureOperationsDetail'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-tax-settings-nature-operations-id
      security:
        - OAuth2:
            - taxSettings:write
      tags:
        - NatureOperations
      summary: Atualiza uma natureza de operação
      description: Atualiza uma natureza de operação existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: id
          in: path
          description: ID da natureza de operação.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      requestBody:
        $ref: '#/components/requestBodies/NatureOperationsUpdate'
      responses:
        '200':
          description: Natureza de operação atualizada com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/NatureOperationsDetail'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-tax-settings-nature-operations-id
      security:
        - OAuth2:
            - taxSettings:delete
      tags:
        - NatureOperations
      summary: Apaga uma natureza de operação
      description: Apaga uma natureza de operação específica.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: id
          in: path
          description: ID da natureza de operação.
          required: true
          schema:
            type: integer
            format: int64
            example: 123
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tax-settings/defaults:
    get:
      operationId: get-tax-settings-defaults
      security:
        - OAuth2:
            - taxSettings:read
      tags:
        - TaxSettingsDefaults
      summary: Obtém as configurações fiscais padrão
      description: >-
        Retorna as configurações fiscais padrão da empresa, incluindo grupos de
        ICMS, IPI, PIS/COFINS, ISSQN e CFOP.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
      responses:
        '200':
          description: Configurações fiscais padrão obtidas com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/TaxSettingsDefaults'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: put-tax-settings-defaults
      security:
        - OAuth2:
            - taxSettings:write
      tags:
        - TaxSettingsDefaults
      summary: Atualiza as configurações fiscais padrão
      description: |
        Atualiza as configurações fiscais padrão da empresa.

        Os IDs dos grupos devem existir e pertencer à empresa.
        O código CFOP deve ser um dos valores permitidos no enum.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/TaxSettingsDefaultsUpdate'
      responses:
        '200':
          description: Configurações fiscais padrão atualizadas com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/TaxSettingsDefaults'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tax-settings/general-settings:
    get:
      operationId: get-tax-settings-general-settings
      security:
        - OAuth2:
            - taxSettings:read
      tags:
        - TaxSettingsNfe
      summary: Obtém as configurações gerais da NFe
      description: >
        Retorna as configurações gerais para emissão de NFe/NFCe da empresa,
        incluindo 

        configurações tributárias, de impostos, autenticação, justificativas
        padrão, 

        acesso, taxas de serviço e outras configurações específicas.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
      responses:
        '200':
          description: Configurações gerais da NFe obtidas com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConfigNfeGeneralSettingsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      operationId: patch-tax-settings-general-settings
      security:
        - OAuth2:
            - taxSettings:write
      tags:
        - TaxSettingsNfe
      summary: Atualiza as configurações gerais da NFe
      description: >
        Atualiza as configurações fiscais gerais de NFe da empresa.


        **Regras de validação:**

        - Ao menos um objeto deve ser enviado no PATCH

        - Se `is_state_registration_exempt` for true, `state_registration` deve
        ser vazio ou null

        - Para remover os `xml_authorizeds` deve ser enviado um array vazio, se
        não enviar nada não será atualizado

        - `state_registration_st`, além de seguir o mesmo princípio de remoção
        do `xml_authorizeds`, não pode enviar estados repetidos

        - `transaction_intermediaries` também segue a mesma lógica de remoção do
        `xml_authorizeds`

        - Em `payment_settings`, se enviar `state` é obrigatório enviar os dois
        outros campos. Se `state` for null ou vazio os outros campos devem ser
        null ou vazios também, sendo proibido algum valor para eles
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
      requestBody:
        $ref: '#/components/requestBodies/ConfigNfeGeneralSettingsBody'
      responses:
        '200':
          description: Configurações gerais da NFe atualizadas com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConfigNfeGeneralSettingsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/customer-categories:
    get:
      operationId: get-customer-categories
      security:
        - OAuth2:
            - customerCategory:read
      tags:
        - CustomerCategory
      summary: Lista de categorias de clientes
      description: Retorna lista de categorias de clientes.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: name
          in: query
          description: Filtra pelo nome da categoria de cliente.
          schema:
            type: string
            example: Ouro
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista de categorias de cliente.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      customer_categories:
                        type: array
                        description: Representa a lista de categorias de cliente
                        items:
                          $ref: '#/components/schemas/CustomerCategory'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-customer-category
      security:
        - OAuth2:
            - customerCategory:write
      tags:
        - CustomerCategory
      summary: Cria uma nova categoria de cliente
      description: Cria uma nova categoria de cliente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        description: Corpo requisição da criação de uma categoria de cliente.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerCategory'
      responses:
        '201':
          description: Nova categoria de cliente criada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/CustomerCategory'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/customer-categories/{customerCategoryId}:
    get:
      operationId: get-customer-category-id
      security:
        - OAuth2:
            - customerCategory:read
      tags:
        - CustomerCategory
      summary: Obtém uma categoria de cliente
      description: Resgata uma categoria de cliente já existente.
      parameters:
        - name: customerCategoryId
          in: path
          description: ID da categoria de cliente.
          required: true
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/CPlugCompanyId'
      responses:
        '200':
          description: Categoria de cliente.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/CustomerCategory'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-customer-category
      security:
        - OAuth2:
            - customerCategory:write
      tags:
        - CustomerCategory
      summary: Atualiza uma categoria de cliente
      description: Atualiza um categoria de cliente já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: customerCategoryId
          in: path
          description: ID da categoria de cliente.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição da atualização de uma categoria de cliente.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerCategory'
      responses:
        '200':
          description: categoria de cliente atualizada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/CustomerCategory'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-customer-category
      security:
        - OAuth2:
            - customerCategory:delete
      tags:
        - CustomerCategory
      summary: Apaga uma categoria de cliente
      description: Apaga uma categoria de cliente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: customerCategoryId
          in: path
          description: ID da categoria de cliente.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/kds:
    get:
      operationId: get-kds
      security:
        - OAuth2:
            - kds:read
      tags:
        - Kds
      summary: Lista os KDS
      description: Retorna lista os KDS.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: name
          in: query
          description: Filtra pelo nome do KDS.
          schema:
            type: string
            example: KDS Cozinha
        - name: is_active
          in: query
          description: Filtra se o KDS está ativo ou não.
          schema:
            type: boolean
        - name: is_expedition
          in: query
          description: Filtra se a expedição está ativo ou não.
          schema:
            type: boolean
        - name: kds_ids
          in: query
          description: >-
            Filtra pelos IDs dos KDS. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista de KDS.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      kds:
                        type: array
                        description: Representa uma lista KDS
                        items:
                          $ref: '#/components/schemas/Kds'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-kds
      security:
        - OAuth2:
            - kds:write
      tags:
        - Kds
      summary: Cria um novo KDS
      description: Cria um novo KDS.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        description: Corpo requisição da criação do KDS.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Kds'
      responses:
        '201':
          description: Novo KDS criado.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/Kds'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/kds/{kdsId}:
    get:
      operationId: get-kds-by-id
      security:
        - OAuth2:
            - kds:read
      tags:
        - Kds
      summary: Obtém um KDS
      description: Retorna um KDS.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: kdsId
          in: path
          description: Identificador único do KDS.
          required: true
          schema:
            type: integer
            example: 123
      responses:
        '200':
          description: Lista de KDS.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/Kds'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-kds
      security:
        - OAuth2:
            - kds:write
      tags:
        - Kds
      summary: Atualiza um KDS
      description: Atualiza um KDS.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: kdsId
          in: path
          description: Identificador único do KDS.
          required: true
          schema:
            type: integer
            example: 123
      requestBody:
        description: Corpo requisição da atualização do KDS.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Kds'
      responses:
        '200':
          description: KDS atualizado.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/Kds'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-kds
      security:
        - OAuth2:
            - kds:delete
      tags:
        - Kds
      summary: Apaga um KDS
      description: Apaga um KDS.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: kdsId
          in: path
          description: Identificador único do KDS.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/{productId}/apps:
    get:
      operationId: get-product-apps
      security:
        - OAuth2:
            - products:read
      tags:
        - ProductApps
      summary: Lista os aplicativos
      description: Lista os aplicativos de um produto.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - name: app_ids
          in: query
          description: >
            Filtra pelos IDs dos aplicativos.


            Você pode localizar os IDs dos aplicativos no _endpoint_ de [lista
            de aplicativos](#tag/Applications/operation/get-apps).
          schema:
            type: string
            example: 1,2,3
        - name: category_ids
          in: query
          description: >
            Filtra pelos IDs das categorias de produto.


            Você pode localizar os IDs das categorias de produto no _endpoint_
            de [lista de categorias](#tag/Categories/operation/get-categories).
          schema:
            type: string
            example: 4,5,6
        - name: is_available_for_sale
          in: query
          description: Filtra se está disponível para a venda ou não.
          schema:
            type: boolean
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista de aplicativos de um produto.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      product_apps:
                        type: array
                        description: Representa a lista de aplicativos de um produto.
                        items:
                          $ref: '#/components/schemas/ProductApp'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-product-apps
      security:
        - OAuth2:
            - products:write
      tags:
        - ProductApps
      summary: Cria ou atualiza aplicativos
      description: Cria ou atualiza aplicativos de um produto.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição da atualização de um aplicativo.
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                apps:
                  type: array
                  description: >-
                    Representa a lista de aplicativos de um produto a serem
                    criados ou atualizados.
                  items:
                    $ref: '#/components/schemas/ProductApp'
      responses:
        '200':
          description: Lista de aplicativos de um produto criados ou atualizados.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      product_apps:
                        type: array
                        description: >-
                          Representa a lista de aplicativos de um produto
                          criados ou atualizados.
                        items:
                          $ref: '#/components/schemas/ProductApp'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/{productId}/apps/{appId}:
    get:
      operationId: get-product-apps-by-id
      security:
        - OAuth2:
            - products:read
      tags:
        - ProductApps
      summary: Obtém um aplicativo
      description: Obtém um aplicativo de um produto.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - name: appId
          in: path
          description: ID do aplicativo.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Aplicativo de um produto.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/ProductApp'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-product-apps-by-id
      security:
        - OAuth2:
            - products:write
      tags:
        - ProductApps
      summary: Atualiza um aplicativo
      description: Atualiza um aplicativo de um produto.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - name: appId
          in: path
          description: ID do aplicativo.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição da atualização de um aplicativo em um produto.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductAppSingle'
      responses:
        '200':
          description: Aplicativos de um produto atualizado.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/ProductApp'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-product-apps-by-id
      security:
        - OAuth2:
            - products:delete
      tags:
        - ProductApps
      summary: Apaga um aplicativo de um produto
      description: Apaga um aplicativo de um produto.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - name: appId
          in: path
          description: ID do aplicativo.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/{productId}/apps/{appId}/shifts:
    delete:
      operationId: delete-product-apps-shifts
      security:
        - OAuth2:
            - products:delete
      tags:
        - ProductApps
      summary: Apaga todos os horário de um produto no aplicativo
      description: Apaga todos os horário de um produto no aplicativo.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - name: appId
          in: path
          description: ID do aplicativo.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/tax-settings:
    get:
      operationId: get-products-tax-settings
      security:
        - OAuth2:
            - products:read
      tags:
        - ProductTaxes
      summary: Lista informações tributárias dos produtos
      description: >-
        Retorna uma lista de produtos com suas respectivas configurações
        fiscais.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: search
          in: query
          description: Termo de busca para filtrar produtos por nome, categoria ou SKU.
          required: false
          schema:
            type: string
            example: produção
        - name: categories_id
          in: query
          description: >-
            Filtra pelos IDs das categorias. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: with_icms
          in: query
          description: Filtro para produtos que possuem ou não configuração de ICMS.
          required: false
          schema:
            type: boolean
        - name: with_ipi
          in: query
          description: Filtro para produtos que possuem ou não configuração de IPI.
          required: false
          schema:
            type: boolean
        - name: with_pis_cofins
          in: query
          description: Filtro para produtos que possuem ou não configuração de PIS/COFINS.
          required: false
          schema:
            type: boolean
        - name: with_issqn
          in: query
          description: Filtro para produtos que possuem ou não configuração de ISSQN.
          required: false
          schema:
            type: boolean
        - name: ncm_id
          in: query
          description: Filtro pelo ID do NCM.
          required: false
          schema:
            type: integer
            example: 123
        - name: cest_id
          in: query
          description: Filtro pelo ID do CEST.
          required: false
          schema:
            type: integer
            example: 456
        - name: origem_id
          in: query
          description: Filtro pelo ID da origem de mercadoria do ICMS.
          required: false
          schema:
            type: integer
            example: 789
        - name: cfop_id
          in: query
          description: Filtro pelo ID do CFOP.
          required: false
          schema:
            type: integer
            example: 5102
        - name: order_by_field
          in: query
          description: Campo usado para ordenação dos resultados.
          required: false
          schema:
            type: string
            enum:
              - name
              - created_at
            default: name
            example: name
        - name: order_by_type
          in: query
          description: Direção da ordenação.
          required: false
          schema:
            type: string
            enum:
              - asc
              - desc
            default: asc
            example: asc
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
      responses:
        '200':
          description: Lista de produtos com suas configurações fiscais.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      products:
                        type: array
                        description: Lista de produtos com suas configurações fiscais.
                        items:
                          $ref: '#/components/schemas/ProductWithTaxSettings'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/{productId}/tax-settings:
    get:
      operationId: get-product-tax-settings
      security:
        - OAuth2:
            - products:read
      tags:
        - ProductTaxes
      summary: Obtém informações tributárias de um produto
      description: Retorna as configurações fiscais de um produto específico.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Configurações fiscais do produto.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/ProductWithTaxSettings'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-product-tax-settings
      security:
        - OAuth2:
            - products:write
      tags:
        - ProductTaxes
      summary: Cria ou atualiza informações tributárias
      description: Cria ou atualiza as configurações fiscais de um produto específico.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo da requisição para atualização das configurações fiscais.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductTaxSettingsBody'
      responses:
        '200':
          description: Configurações fiscais do produto atualizadas com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/ProductWithTaxSettings'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/cfop:
    get:
      operationId: get-cfop
      security:
        - OAuth2:
            - products:read
      tags:
        - ProductTaxes
      summary: Lista de CFOP
      description: Retorna lista de CFOP disponíveis.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: code
          in: query
          description: Filtra pelo código do CFOP.
          schema:
            type: string
            example: '6125'
        - name: description
          in: query
          description: Filtra pela descrição do CFOP.
          schema:
            type: string
            example: Industrialização
        - name: is_only_nfce
          in: query
          description: Lista apenas os códigos para NFCe.
          schema:
            type: boolean
            default: 0
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
      responses:
        '200':
          description: Lista de CFOP disponíveis.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      cfops:
                        type: array
                        description: Representa a lista de CFOP.
                        items:
                          $ref: '#/components/schemas/Cfop'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/ncm:
    get:
      operationId: get-ncm
      security:
        - OAuth2:
            - products:read
      tags:
        - ProductTaxes
      summary: Lista de NCM
      description: Retorna lista de NCM disponíveis.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: code
          in: query
          description: Filtra pelo código do NCM.
          schema:
            type: string
            example: '6125'
        - name: description
          in: query
          description: Filtra pela descrição do NCM.
          schema:
            type: string
            example: Cavalos
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
      responses:
        '200':
          description: Lista de NCM disponíveis.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      ncms:
                        type: array
                        description: Representa a lista de NCM.
                        items:
                          $ref: '#/components/schemas/Ncm'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/origin:
    get:
      operationId: get-origin
      security:
        - OAuth2:
            - products:read
      tags:
        - ProductTaxes
      summary: Lista de ICMS de Origem
      description: Retorna lista de ICMS de Origem disponíveis.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: description
          in: query
          description: Filtra pela descrição do ICMS de Origem.
          schema:
            type: string
            example: indicadas
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
      responses:
        '200':
          description: Lista de ICMS de Origem disponíveis.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      origins:
                        type: array
                        description: Representa a lista de ICMS de Origem.
                        items:
                          $ref: '#/components/schemas/Origin'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/cest:
    get:
      operationId: get-cest
      security:
        - OAuth2:
            - products:read
      tags:
        - ProductTaxes
      summary: Lista de CEST
      description: Retorna lista de CEST disponíveis.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: description
          in: query
          description: Filtra pela descrição do CEST.
          schema:
            type: string
            example: frisos
        - name: ncm_code
          in: query
          description: Filtra pelo código do NCM.
          schema:
            type: string
            example: '39263000'
        - name: page
          in: query
          description: Indica a página da paginação.
          schema:
            type: number
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Indica a quantidade de itens por página.
          schema:
            type: number
            default: 30
            minimum: 1
            maximum: 100
      responses:
        '200':
          description: Lista de CEST disponíveis.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      cests:
                        type: array
                        description: Representa a lista de CEST.
                        items:
                          $ref: '#/components/schemas/Cest'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/price-lists:
    get:
      operationId: get-price-lists
      security:
        - OAuth2:
            - priceList:read
      tags:
        - PriceLists
      summary: Lista de Listas de preços
      description: Retorna uma lista de Listas de Preços.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: name
          in: query
          description: Filtra pelo nome da lista de preço.
          schema:
            type: string
            example: Lista Padrão
        - name: modules
          in: query
          description: |
            Filtra pelo módulo da lista de preço separado por vírgula.
          schema:
            type: string
            example: delivery
            enum:
              - delivery_withdrawal
              - delivery
              - attendance
              - point_of_sale
              - totem
              - integrations
        - name: sources
          in: query
          description: Filtra pela fonte do aplicativo vinculado a lista de preço.
          schema:
            type: string
            example: store
            enum:
              - totem
              - pdv
              - erp
              - store
        - name: validity_types
          in: query
          description: >
            Filtra pelo tipo de validade da lista de preço separado por vírgula.


            Tipos disponíveis:

            - `no_expiration_date`: Sem validade - Lista de preços que não
            possui data de expiração

            - `interval`: Intervalo - Lista de preços com data inicial e final
            definidas  

            - `hours`: Por horário - Lista de preços com um único horário de
            funcionamento

            - `days`: Por dias da semana - Lista de preços com horários
            específicos para dias da semana

            - `specific`: Horários específicos - Lista de preços com múltiplos
            horários/períodos configurados
          schema:
            type: string
            example: no_expiration_date,interval
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista de preços.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      price_lists:
                        type: array
                        description: Representa a lista de preços
                        items:
                          $ref: '#/components/schemas/PriceList'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-price-list
      security:
        - OAuth2:
            - priceList:write
      tags:
        - PriceLists
      summary: Cria uma nova lista de preço
      description: Cria uma nova lista de preço.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        description: Corpo requisição da criação de uma lista de preços.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PriceListBody'
      responses:
        '201':
          description: Nova lista de preços criada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/PriceList'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/price-lists/{priceListId}:
    get:
      operationId: get-price-list-by-id
      security:
        - OAuth2:
            - priceList:read
      tags:
        - PriceLists
      summary: Obtém uma lista de preço
      description: Resgata uma lista de preço.
      parameters:
        - name: priceListId
          in: path
          description: ID da lista de preço.
          required: true
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/CPlugCompanyId'
      responses:
        '200':
          description: Lista de preço.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/PriceList'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-price-list
      security:
        - OAuth2:
            - priceList:write
      tags:
        - PriceLists
      summary: Atualiza uma lista de preço
      description: Atualiza uma lista de preço.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: priceListId
          in: path
          description: ID da lista de preço.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição da atualização de uma lista de preço.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PriceListBody'
      responses:
        '200':
          description: Lista de preço atualizada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/PriceList'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-price-list
      security:
        - OAuth2:
            - priceList:delete
      tags:
        - PriceLists
      summary: Apaga uma lista de preço
      description: Apaga uma lista de preço.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: priceListId
          in: path
          description: ID da lista de preço.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/price-lists/{priceListId}/duplicate:
    post:
      operationId: post-price-list-duplicate
      security:
        - OAuth2:
            - priceList:write
      tags:
        - PriceLists
      summary: Duplica uma lista de preços
      description: Duplica uma lista de preços e seus produtos.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: priceListId
          in: path
          description: ID da lista de preço.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição da duplicação de uma lista de preços.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PriceListDuplicateBody'
      responses:
        '201':
          description: Nova lista de preços criada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    allOf:
                      - $ref: '#/components/schemas/PriceList'
                      - type: object
                        properties:
                          is_duplicating:
                            type: boolean
                            example: true
                            default: true
                            readOnly: true
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/price-lists/update-order:
    post:
      operationId: post-price-list-update-order
      security:
        - OAuth2:
            - priceList:write
      tags:
        - PriceLists
      summary: Atualiza a ordem das listas de preços
      description: Atualiza a ordem das listas de preços.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        description: >
          Corpo requisição da atualização da ordem das listas de preços.


          **Atenção:** A ordem da Lista de Preço Padrão não pode ser alterada,
          ela sempre será a primeira.


          O array `price_list_ids` deve conter os IDs das listas de preços que
          deseja reordenar.


          **Importante:** A ordenação da lista de preços pode ser feita enviando
          todos os IDs das listas de preços que deseja reordenar ou apenas
          alguns.


          **Exemplo:** Se a ordem das listas de preços é:

          ```

          [1, 2, 3, 4, 5, 6]

          ```


          E for enviado o array:

          ```

          [3, 6]

          ```


          A nova ordem das listas de preços será:

          ```

          [1, 3, 6, 2, 4, 5]

          ```
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                price_list_ids:
                  type: array
                  example:
                    - 2
                    - 3
                    - 4
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/price-lists/{priceListId}/items:
    get:
      operationId: get-price-list-products
      security:
        - OAuth2:
            - priceList:read
      tags:
        - PriceListProducts
      summary: Obtém a lista de produtos
      description: Resgata uma lista produtos de uma lista de preço.
      parameters:
        - name: priceListId
          in: path
          description: ID da lista de preço.
          required: true
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: product_ids
          in: query
          description: >-
            Filtra pelos IDs dos produtos. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: search_term
          in: query
          description: Filtra pelos nome ou código do produto.
          schema:
            type: string
            example: Banana
        - name: category_ids
          in: query
          description: >-
            Filtra pelos IDs das categoria dos produtos. Pode passar mais de um
            ID numérico separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
      responses:
        '200':
          description: Lista de produto de uma lista de preço.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      items:
                        type: array
                        description: Representa a lista de produto de uma lista de preço.
                        items:
                          $ref: '#/components/schemas/PriceListProduct'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    patch:
      operationId: patch-price-list-products
      security:
        - OAuth2:
            - priceList:write
      tags:
        - PriceListProducts
      summary: Cria ou atualiza produtos
      description: Cria ou atualiza uma lista de produtos na lista de preço.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: priceListId
          in: path
          description: ID da lista de preço.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: >-
          Corpo requisição da atualização ou criação de uma lista de produtos na
          lista de preço.
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                items:
                  type: array
                  description: Representa a lista de produto de uma lista de preço.
                  items:
                    $ref: '#/components/schemas/PriceListProductBody'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-price-list-products-delete
      security:
        - OAuth2:
            - priceList:write
      tags:
        - PriceListProducts
      summary: Apaga produtos em massa
      description: Apaga uma lista de produtos na lista de preço.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: priceListId
          in: path
          description: ID da lista de preço.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: >-
          Corpo requisição da exclusão de uma lista de produtos na lista de
          preço.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PriceListProductDeleteBody'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/price-lists/{priceListId}/items/update-prices:
    put:
      operationId: put-price-list-products-price-batch
      security:
        - OAuth2:
            - priceList:write
      tags:
        - PriceListProducts
      summary: Atualiza os preços dos produtos em massa
      description: Atualiza os preços dos produtos de uma lista em massa.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: priceListId
          in: path
          description: ID da lista de preço.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: >-
          Corpo requisição para atualização de preço de um produto de uma lista
          em massa.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PriceListProductPriceUpdateInBatchBody'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/price-lists/{priceListId}/items/export:
    get:
      operationId: get-export-price-list-products
      security:
        - OAuth2:
            - priceList:read
      tags:
        - PriceListProducts
      summary: Obtém uma lista produtos em CSV
      description: Resgata uma lista produtos de uma lista de preço em CSV.
      parameters:
        - name: priceListId
          in: path
          description: ID da lista de preço.
          required: true
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/CPlugCompanyId'
      responses:
        '200':
          description: CSV.
          content:
            text/csv:
              schema:
                type: array
                items:
                  type: object
                  title: Produto
                  description: Representa um produto de uma lista de preço.
                  properties:
                    Código:
                      type: integer
                      description: Código do produto.
                      example: 123
                    Nome:
                      type: string
                      description: Nome do produto.
                      example: Produto 1
                    Preço:
                      type: number
                      description: preço do produto.
                      format: decimal
                      example: 16.99
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/price-lists/{priceListId}/items/{productId}/options:
    get:
      operationId: get-price-list-product-options
      security:
        - OAuth2:
            - priceList:read
      tags:
        - PriceListProducts
      summary: Obtém as opções de um produto
      description: Resgata uma lista de opções de um produto de uma lista de preço.
      parameters:
        - name: priceListId
          in: path
          description: ID da lista de preço.
          required: true
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista de opções de um produto de uma lista de preço.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      options:
                        type: array
                        description: >-
                          Representa a lista de opções de um produto de uma
                          lista de preço.
                        items:
                          $ref: '#/components/schemas/ProductPriceListOption'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-price-list-product-options
      security:
        - OAuth2:
            - priceList:write
      tags:
        - PriceListProducts
      summary: Cria ou atualiza uma opção de um produto
      description: Cria ou atualiza uma opção de um produto de uma lista de preço.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: priceListId
          in: path
          description: ID da lista de preço.
          required: true
          schema:
            type: integer
            format: int64
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: >-
          Corpo requisição da criação ou atualização de uma opção de um produto
          de uma lista de preço.
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                options:
                  type: array
                  description: Lista de opções do produto.
                  items:
                    $ref: '#/components/schemas/PriceListProductAttributeOptionBody'
      responses:
        '200':
          description: Lista de opções de um produto de uma lista de preço.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      options:
                        type: array
                        description: >-
                          Representa a lista de opções de um produto de uma
                          lista de preço.
                        items:
                          $ref: '#/components/schemas/ProductPriceListOption'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/price-lists/{priceListId}/items/{productId}/grids:
    get:
      operationId: get-price-list-product-grids
      security:
        - OAuth2:
            - priceList:read
      tags:
        - PriceListProducts
      summary: Lista as grades de preço de um produto
      description: >-
        Resgata uma lista de grades de preço de um produto de uma lista de
        preço.
      parameters:
        - name: priceListId
          in: path
          description: ID da lista de preço.
          required: true
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista de grades de um produto de uma lista de preço.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      grids:
                        type: array
                        description: >-
                          Representa a lista de grades de um produto de uma
                          lista de preço.
                        items:
                          $ref: '#/components/schemas/ProductPriceListGrid'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-price-list-product-grids
      security:
        - OAuth2:
            - priceList:write
      tags:
        - PriceListProducts
      summary: Cria ou atualiza uma grade de preço de um produto
      description: Cria ou atualiza uma grade de um produto de uma lista de preço.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: priceListId
          in: path
          description: ID da lista de preço.
          required: true
          schema:
            type: integer
            format: int64
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: >-
          Corpo requisição da criação ou atualização de uma grade de um produto
          de uma lista de preço.
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                grids:
                  type: array
                  description: Lista de grades do produto.
                  items:
                    $ref: '#/components/schemas/PriceListProductGridBody'
      responses:
        '200':
          description: Lista de grades de um produto de uma lista de preço.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      grids:
                        type: array
                        description: >-
                          Representa a lista de grades de um produto de uma
                          lista de preço.
                        items:
                          $ref: '#/components/schemas/ProductPriceListGrid'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/price-lists/{priceListId}/logs:
    get:
      operationId: get-price-list-logs
      security:
        - OAuth2:
            - priceList:read
      tags:
        - PriceLists
      summary: Histórico de modificações de uma lista de preço
      description: Histórico de modificações de uma lista de preço.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: priceListId
          in: path
          description: >
            ID da lista de preço.


            Você pode localizar os IDs da lista de preço no _endpoint_ de
            [listagem de lista de
            preços](#tag/PriceLists/operation/get-price-lists).
          required: true
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Histórico de modificações de uma lista de preço.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    description: Representa uma lista de modificações.
                    properties:
                      price_list_logs:
                        type: array
                        description: Representa uma modificação.
                        items:
                          $ref: '#/components/schemas/PriceListLog'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/price-lists/{priceListId}/items/{productId}/logs:
    get:
      operationId: get-price-list-product-logs
      security:
        - OAuth2:
            - priceList:read
      tags:
        - PriceListProducts
      summary: Obtém histórico de modificações do preço de um produto
      description: >-
        Histórico de modificações do preço de um produto em uma determinada
        lista de preço.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: priceListId
          in: path
          description: >
            ID da lista de preço.


            Você pode localizar os IDs da lista de preço no _endpoint_ de
            [listagem de lista de
            preços](#tag/PriceLists/operation/get-price-lists).
          required: true
          schema:
            type: integer
            format: int64
        - name: productId
          in: path
          description: >
            ID do produto.


            Você pode localizar os IDs do produto no _endpoint_ de [listagem de
            produtos](#tag/Products/operation/get-products).
          required: true
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: >-
            Histórico de modificações do preço de um produto em uma determinada
            lista de preço.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    description: Representa uma lista de modificações.
                    properties:
                      price_list_product_logs:
                        type: array
                        description: Representa uma modificação.
                        items:
                          $ref: '#/components/schemas/PriceListProductLog'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/promotions:
    get:
      operationId: get-promotions
      security:
        - OAuth2:
            - promotions:read
      tags:
        - Promotions
      summary: Lista de Promoções
      description: Retorna uma lista das promoções.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: name
          in: query
          description: Filtra pelo nome da promoção.
          schema:
            type: string
            example: Promoção de Natal
        - name: type
          in: query
          description: Filtra pelo tipo da promoção.
          schema:
            type: string
            enum:
              - TAKE_MORE_PAY_LESS
              - DISCOUNT_COUPON
              - ABOVE_VALUE_GET_DISCOUNT
              - ABOVE_AMOUNT_GET_DISCOUNT
              - ABOVE_VALUE_GET_PRODUCT
              - ABOVE_AMOUNT_GET_PRODUCT
          example: TAKE_MORE_PAY_LESS
        - name: status
          in: query
          description: Filtra pelo status da promoção.
          schema:
            type: string
            enum:
              - updating_vouchers
              - awaiting_voucher_processing
              - creating_vouchers
              - processed
          example: processed
        - name: startDate
          in: query
          description: Filtra por promoções com inicio de vigência a partir desta data.
          schema:
            type: string
            format: date
          example: '2025-02-01'
        - name: end_date
          in: query
          description: Filtra por promoções com fim de vigência até esta data.
          schema:
            type: string
            format: date
          example: '2025-03-01'
        - $ref: '#/components/parameters/DeletedQuery'
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
      responses:
        '200':
          description: Lista de promoções.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      promotions:
                        type: array
                        description: Representa a lista de promoções
                        items:
                          $ref: '#/components/schemas/PromotionList'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    post:
      operationId: post-promotions
      security:
        - OAuth2:
            - promotions:write
      tags:
        - Promotions
      summary: Cria uma nova promoção
      description: Cria uma nova promoção.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/PromotionCreationRequest'
      responses:
        '201':
          description: Promoção criada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Promotion'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/promotions/{promotionId}:
    get:
      operationId: get-promotion-id
      security:
        - OAuth2:
            - promotions:read
      tags:
        - Promotions
      summary: Obtém uma promoção
      description: Retorna uma promoção já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: promotionId
          in: path
          description: ID da promoção.
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: Dados da promoção.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    $ref: '#/components/schemas/Promotion'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: put-promotions-id
      security:
        - OAuth2:
            - promotions:write
      tags:
        - Promotions
      summary: Atualiza uma promoção
      description: Atualiza uma promoção já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: promotionId
          in: path
          description: ID da promoção.
          required: true
          schema:
            type: integer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PromotionUpdateRequest'
      responses:
        '200':
          description: Promoção atualizada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    $ref: '#/components/schemas/Promotion'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-promotion-id
      security:
        - OAuth2:
            - promotions:delete
      tags:
        - Promotions
      summary: Apaga uma promoção
      description: Apaga uma promoção.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: promotionId
          in: path
          description: ID da promoção.
          required: true
          schema:
            type: integer
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v3/promotions/{promotionId}/vouchers:
    get:
      operationId: get-promotions-id-vouchers
      security:
        - OAuth2:
            - promotions:read
      tags:
        - Promotions
      summary: Lista os vouchers de uma promoção
      description: Retorna uma lista dos vouchers de uma promoção.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: promotionId
          in: path
          description: ID da promoção.
          schema:
            type: integer
            example: 123456
        - name: status
          in: query
          description: Filtra pelo status do voucher.
          schema:
            type: string
            enum:
              - unused
              - waiting
              - used
          example: unused
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista de vouchers.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      vouchers:
                        type: array
                        description: Representa a lista de vouchers
                        items:
                          $ref: '#/components/schemas/Voucher'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v3/promotions/{promotionId}/vouchers/export:
    get:
      operationId: get-promotions-id-vouchers-export
      security:
        - OAuth2:
            - promotions:read
      tags:
        - Promotions
      summary: Exporta os vouchers de uma promoção
      description: Exporta um arquivo `xlsx` com os códigos dos vouchers de uma promoção.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: promotionId
          in: path
          description: ID da promoção.
          schema:
            type: integer
            example: 123456
      responses:
        '200':
          description: Arquivo Excel (.xlsx) com os códigos dos vouchers.
          content:
            application/vnd.openxmlformats-officedocument.spreadsheetml.sheet:
              schema:
                type: string
                format: binary
              example: |
                |Código|
                |------|
                |PROMO1|
                |PROMO2|
                |PROMO3|
                |PROMO4|
                |PROMO5|
                |PROMO6|
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v3/reports/sales:
    get:
      operationId: get-report-sale
      security:
        - OAuth2:
            - reports:read
      tags:
        - ReportSale
      summary: Obter relatório de vendas
      description: Resgata um relatório de vendas.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
      responses:
        '200':
          description: Dados do relatório.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Report'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/purchases:
    get:
      operationId: get-purchases
      security:
        - OAuth2:
            - purchase:read
      tags:
        - Purchase
      summary: Lista de compras
      description: Retorna listas de compras.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: search_term
          in: query
          description: Filtra pelo ID da compra ou pelo número da nota fiscal.
          schema:
            type: integer
            example: 123
        - name: purchase_status
          in: query
          description: |
            Filtra pelo status da compra.
            Exemplo:
              - `pending` Aguardando.
              - `received` Entregue.
          schema:
            type: string
            enum:
              - pending
              - received
            example: pending
        - name: supplier_ids
          in: query
          description: >
            Filtra pelos IDs dos fornecedores. Pode passar mais de um ID
            numérico separado por virgula.


            Você pode localizar os IDs dos fornecedores no _endpoint_ de
            [listagem de fornecedores](#tag/Suppliers/operation/get-suppliers).
          schema:
            type: string
            example: 1,2,3
        - name: registration_start
          in: query
          description: data inicial do registro de compra.
          schema:
            type: string
            format: date
            example: '2025-01-14'
        - name: registration_end
          in: query
          description: data final do registro de compra.
          schema:
            type: string
            format: date
            example: '2025-01-14'
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista de compras.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      purchases:
                        type: array
                        description: Representa a lista de compras
                        items:
                          $ref: '#/components/schemas/Purchase'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-purchase
      security:
        - OAuth2:
            - purchase:write
      tags:
        - Purchase
      summary: Cria uma nova compra
      description: Cria uma nova compra.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        description: Corpo requisição da criação de uma compra.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PurchaseBody'
      responses:
        '201':
          description: Nova compra criada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/PurchaseDetail'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/purchases/{purchaseId}:
    get:
      operationId: get-purchase-by-id
      security:
        - OAuth2:
            - purchase:read
      tags:
        - Purchase
      summary: Obtém uma compra
      description: Resgata uma compra.
      parameters:
        - name: purchaseId
          in: path
          description: ID da compra.
          required: true
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/CPlugCompanyId'
      responses:
        '200':
          description: Representa uma compra.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/PurchaseDetail'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-purchase
      security:
        - OAuth2:
            - purchase:write
      tags:
        - Purchase
      summary: Atualiza uma compra
      description: Atualiza uma compra.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: purchaseId
          in: path
          description: ID da compra.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição da atualização de uma compra.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PurchaseDetail'
      responses:
        '200':
          description: Compra atualizada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/PurchaseDetail'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-purchase
      security:
        - OAuth2:
            - purchase:delete
      tags:
        - Purchase
      summary: Apaga uma compra
      description: Apaga uma compra.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: purchaseId
          in: path
          description: ID da compra.
          required: true
          schema:
            type: integer
            format: int64
        - name: delete_stock_movement
          in: query
          description: Se as movimentações de estoque devem ser apagadas.
          required: false
          schema:
            type: boolean
            default: true
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/purchases/{purchaseId}/mark-all-items-delivered:
    post:
      operationId: post-purchase-mark-all-items-delivered
      security:
        - OAuth2:
            - purchase:write
      tags:
        - Purchase
      summary: Marca todos os itens da compra como entregues
      description: Marca todos os itens da compra como entregues.
      parameters:
        - name: purchaseId
          in: path
          description: ID da compra.
          required: true
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      responses:
        '200':
          description: Todos os itens da compra foram marcados como entregues.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/Purchase'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/purchases/{purchaseId}/files:
    post:
      operationId: post-purchase-files
      security:
        - OAuth2:
            - purchase:write
      tags:
        - Purchase
      summary: Adiciona anexo a uma compra
      description: >
        Adiciona um novo arquivo para anexar à compra.


        Este endpoint aceita solicitações HTTP no formato ***Form-Data***. Veja
        um exemplo:


        ```

        curl --location 'http://{BASE_URL}/api/v3/purchase/{purchaseId}/files' \

        --header 'CPlug-Company-Id: COMPANY_ID' \

        --header 'Idempotency-Key: IDEMPOTENCY_KEY' \

        --header 'Authorization: Bearer TOKEN' \

        --form 'files[0]=@"/path/to/file0.png"'

        --form 'files[1]=@"/path/to/file1.pdf"'

        ```


        O tamanho máximo do arquivo é 5 MB.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: purchaseId
          in: path
          description: ID da compra.
          required: true
          schema:
            type: integer
      requestBody:
        $ref: '#/components/requestBodies/PurchaseFileBody'
      responses:
        '200':
          description: Nova anexo adicionada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      files:
                        type: array
                        description: Representa a lista de anexos
                        items:
                          $ref: '#/components/schemas/PurchaseFile'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/purchases/{purchaseId}/files/{fileId}:
    delete:
      operationId: delete-purchase-file-by-id
      security:
        - OAuth2:
            - purchase:delete
      tags:
        - Purchase
      summary: Apaga um anexo
      description: Apaga um anexo.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: purchaseId
          in: path
          description: ID da compra.
          required: true
          schema:
            type: integer
            format: int64
        - name: fileId
          in: path
          description: ID do arquivo de compra.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/purchases/{purchaseId}/download-pdf:
    get:
      operationId: get-purchase-print
      security:
        - OAuth2:
            - purchase:read
      tags:
        - Purchase
      summary: Download PDF de uma compra
      description: Retorna o blob do PDF da compra.
      parameters:
        - name: purchaseId
          in: path
          description: Identificador único da compra.
          required: true
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/CPlugCompanyId'
      responses:
        '200':
          description: Blob do PDF da compra.
          content:
            application/pdf:
              schema:
                type: string
                format: binary
              examples:
                default:
                  summary: A sample report
                  value: "%PDF-1.4\n%äüöß\n2 0 obj\n<</Length 3 0 R/Filter/FlateDecode>>\nstream\nx�=��\n\x021\fE����v\x11���0\b\x0E�~��\x0F�\0\x17���߷��d�{r\x12\"X�\r��²�G\n�\x19�\r�\x1D^�Y��AS!��0X�r�b\x7FVhl�\x1D��8��\x0F(O�vN�3J�$o�z\f\x1C6\x10��Сw���$ɝj�O��Q��N�f��\x01˒(\n\nendstream\nendobj\n\n3 0 obj\n134\nendobj\n\n5 0 obj\n<</Length 6 0 R/Filter/FlateDecode/Length1 23164>>\nstream\nx��|y|[Օ���=-v�Ȼ�E�Q�*^��q\x16\x13��BR7�\x13;�\x0E��,+��m)�\x14\x13�&a+`��ai)L1��m#�\x01�\x04\x1A\x03e��P�a��N\x19�k�����t(eZb����y#�ig~\x7F�>�_��w�=�l��s�}O�\x15\x1C\x0Ey(�\x0E�BN��˿$13��������\x05�?ܞ�\x14�i\"Ӛ��=�_x���#��#2�t�����J��.Q�{�\x1EW�#�y4�(�m�X�\x0Fĥ�W��r ���\x0F\x06��2���x\x03�U\x03>���Z��\\�qΠ�\n�\x0F,/\x18\x01ށ�6�\x1A�lT\x7F{3�G�*���@�T\x16%�(�k�a�?yK�&�O$\x10Y|�1��\vcf\x14c��\x06��\x1C\x17����|\x19�S�l\x0FS�ZD�[���6퍾.�D�\x7F\vg�ǚ���7觬�i4��LY�>�f�i#��'d�\x11:KwR:u�],��R&m��L\x05��nf�D�Eߢ�����S���c��\"�\x03�\x0F\v�MeTG�A��<���\x06uG�Bf��\x16�Z��2�E?�����v����>\x17}\x1FZ��jȫ�Fj�>\e����f��ᕸ'�6:��Qw�K�i\t�rG�'�ר���k�\r��`S�\x06*���:�2�V�\x01Н�u�f\t|��d8\tM\e�\x12\x1A�\x11\x1A���\a,��\e^1�\x13�l�M2R\x1A��&/��j�&���\x10]\x17�9]J��{X�xO���\x0F\e.�n��}�9ʠ�X<{�=k�6�z�����o!#�h9<�\x19zz�\x1Az��O�N\x7F�\a�\ai\x03u@�\v,�i�\b\x1E�\t��\a�\x01�e��jw��\x10�GaD�8��g��\x7F���\x06Kg��\x13������\x13x\x1F\x7FI�G9�����G�o;\x15�GAz���~~�^b\x06ȯb��3�Ǿ�����a�6��jV�Q���5\x14M���Kts�d�\x1C�$]I\a�ۯ�\x04\x1D�\x1Fҏ�\x0F�\x1F�\x1E��U������4{���%|\v�������f�6�Y�V]�^������\x05�M&�i����o����OE\x7F��I��\"j�G�BV<H'�eH�\x19�J�\x14�\x03�k�\x0E�ih\t�\e�\x1D��\x05�#�[���{\t_˛��Ǉ᧫���\x0Eh\x7F\t�S���U�;�GŠ,QV*{����2��R~�Z�\"�B]�nQw�QD��p������q�s�w���>���\e�զk��t���M�t�txz\x02�kF&]\tO|�\x1E@�\x1FE\f~\0��\x10\x16��w\x11�\x1CV��a�j����&�)v\x19�����ؗ�=�\x01�-�\0k�&���������_˯��x\x1F���?��3�<K�+\x0Ee��Q١\\�\fa\rA�r-<{������\e�\f���.VC������Q�G�O\x1A\x06�~�p�0e���\x03�\aFn�1�\x19+��1>b���hZij7�h�\x17�\x7F��,���rm~���؃��c<]=��\0��TJ��\x1D�C\av�\x7FP�2��$�yؖ���4�it�a�\a�\t�e/�A#WP���\x14a�����E�c�òՇ�!�\x0Fx\x01=�jt�?�O��t���K��\n�7�#�\x06��\n��]�\x02�8;�ְϳ:v���g*\x1D�Z��>�U\x16�6�w\b\x16�Uj\x1F}�� [M������&��C}���\x10�o�k�Q�33D�FuSP�\\�27#߯#Q�vb�\x1D�~�F\x05\x190�DGŉb�3�S��w�?�-�qd�zT�7���W�_E���a�e�\b�]?]�\x1D�\x06��\x19���2��xԒj��v�A}�yT�ۢ���k���>�G���-c\x7Ffc�\x11�ਧ���E�\x19�\t�����)0�GS�[fe��\x1A��a���1�Q÷\r/\x1A�����=��_\"��\x027��~K\x7Fbf�&��Q\r�]\x05ۻh�w+�P\x13�!?�l\t��z}%\x01H�\x1A޻\x17��\x19�wP'.�o�+��,��\r�f�i��w��!D�\x1A6\x01L\x1F�v\x19�\x0E�Nb�x\x10���t\x17��\x14l�\x05�\x1AގJ���.4�K �O�)ꃆ����\x11�'i5*k��O��Rf��l\t�:�z�C�(�V\e~�8-��\x1C]Ž�38c�����ʥ��^X��u��\f��j���������Άu\x17կ]�zU]m͊��U�\x15��\x1Ce�%�E�K�K\n4����ܜlkVfFzZj�%9)1aQ|��d4�\ng����ڣ��z�j�}Ær1���p�C�5�Z\x17҄�\x1EI�-�t�r��(�1J�,%�h�T_�Lk�k�\x17���$۱�\v�-��n-|F\x9B$|X\x89�\v\n���X���0��Z­��G[z�!n|Q|���\x13_����\x17\x01\\\x04(�e����uL\x02<�e�8's\"�\n�؛[���faAX)lq��۷v�4�\x16\x14t�/\v�&��7L���d�$�&�&ll\n��\x1A�+VC7i�˦Fo��Po�#���纬+�����\x14\a�6���|�:7��Ԧ�����*�-V�&����kᩭ]�g\vĵ�\e2��\v[{F[��f8��C�6~]wW�]\a��X�XUl}\x1E{���|F\v�����G?Ӄ�䌆i���HN��X�4�h��]��pC���՜7�N���Od;��3���-)1ǎ'%�@B�|�3;'!I.��m��e�\"�F$DXsk��ˎ5�\x12\x17�*\x1Au�\x02\x19^�\f\\�>D�\e�k�\x19��\x11x�\x1F6\x14Z���\x1F\t\x19`?��B�K�\x18\v-\x7F$\x01�<�M5���a�#\\V&R�Ԅ���ur\\[�l�$_i�[4tp\x1F�÷��5�p\x7FA�\b�M�N�� |hkWl�Qon�����0�\x113S33\x19��̡��Y�\x1E;2��|\x10�\b��f�%[2�Z�ׄY��L{b�m\x1D���;����\x1Eݷm�\vF��U�s:\x14Nk�Rr�\x0E�\\E�\")/�%\x16����Z�\x7FF��}a\x05I)\x11Lk\r[z6Į��\x05\x05\x1F�3i2�c���#�d7Ǧ[\x19^�X8^�`����Q\x05��E��s��h���V\x14���V��:�3Ꚍ\x1E�k\x16��1�0\x7Fx���3\x13����rí7wc\x11�l\r����q;�a븓�б��\x05Oo7tvE8�M=�Ǘb��\x18nE�\x12�g�b��\x11�1$z���T�1'�!9�J�\x1C�'\x19I�y\x06��=�c8���U��\x14\x11|\x03�8�M��(g�F�$op��A�V(ޤN3�6\e\r�\\y�\x15Q\x1Cnv�duXޫ?[���n�����\0��\x01.˫\nR\nR\nqa���@S�>p\x1A�/��SЅ'\x182��e!\e\x1Dt�(1��_��Q=\t����Y\e2�3�3\r��V�^�{��E\x06[J!#��Z�l1g\x17\x1F11�dtj\"nQ\rL�ٙv��i\x05U\x05� %U#�Re�I~ӄ����i;�m�,;���ػ�4�A�H;���i\x05�Y���\x19�\x17��^�RVT׭�5EE�E�;x�S=WM�����tM��Ͼ�J^�\\݆]��\x03\x1D�0\x1C�+zn��\x1F>q͘��̦>�AmR�%/<�ؓ�S�ĳ�-�ߨ\x1D��ˤ{�Y�Jٓr�A�3f\e�y}J\eoKy���'yЙ�.ʤ�����8cZzQF\x06M�RgR�S[Zs$�E3Yf�\x15�vf.YZs�:f�~�;V�{+��/*�3��dЎ��;ff��j��k�;�\x10�ߌ�\x0F;�C�t��\"#Uo�\x17\x1A�\b/��\x05�F�}IQQ-������z�J\x01*��<���O�l۶�\r�e,�����~�.>6m=�Y�%�:�����:\x0F�~���:*fk�Q)�ٙ\x12�`0\x1A\x132��\t5J���Zco�-�\x16k�=AS*K;�zJ\x0F��W�u�æ�\x12�0>�\x10.=Uz�4�J+K�1q���Rc�3'��\x01�Cr�`*PM9��pY$�T <�X5YRR�s���\x19\x19�-E�)�\x1D�=)̗�R&y�39'�(?\x0F8_\x1E��cy�\x1D-Dt\x19|\x1C!*\x16ɔ\x1C� z�J�]\f�bg#Z=���b皋j*�_*~�XI.�\x15\x1F*V�X+�*�\x16���%���Z�8�B�����۹ׁD{o�N�������p��\fKI]Mh˫ذc�N���V��rEuf�Jy��@\bj��K�F\t\x16̀\a�r��Z\x1F�,�@I�����[��WL���aec\x7F���j�m�vn�޹��/��滾ZQ�ᦻ�9o�gǲ�k�>�\x01b�4�U݆�Lc5GSK\f,m2z�iMH�1g&&ט��(.�L�p�-gM\r��&.J2Z8�\x19�4�*\n���z,�2Ɏ8S\x17%'V&���Q�ѓ����2�\x7F�\x14Ոޙ���&#++G]�8��5\a\x15�L�bg\x1C�#T?1J�Ӊ3oe�FU�\x16���\x19�9ر�l6��g=�����k�c��&˻�SÙ��\rҵ,uu��k�j\0�$���\x0E&㲳-l�h\v�Aŏ�\x16:\x1E}�X��q\x05��xu�D9F��o�I�)\ri��l\\R�\r\x06�!\x13\x18�>�qLVwZAZZ\x013%)�%��b��%1����>}cSaӧ\x0E�oݜ������j��$��\x0F����\x17-I�Eb�[��;�,�>j`2�G��Fñ�cV�b\x03�c�����\x14&&%Q��\x10.I&s�9U/Ӗ_�ߓ��?�oȷ$k,�,Q��\x16\x16�ٺ'�^��ʹڷ\"�@C��H7��g��r�׈�w'�W����c�_����?���}M��P;f8�Y���'�)\x19g\x7F�>7�S���ޟ\x18�l�\x12�s-�\x13G��\x06�A5\x1A\nM���|���Y�4\x1F6s��\x14U�'�̦\x06�\x16<�oSp��\x1CmQ�\"�H�������@�z\x0F\0\x06s�ع\x17�b��c5XHF�l_RΜ]����k8���MT'+\x1C�k�˨\x93��*+S5��ҭ\x1E�\x1A��I+��L�驙)Ii�dIJcd��q��Elע(\f\x13e&��R�c�XV\x1D��x�\x16���������nV�%�ʔ])<e���Ĥ�\"����2�2y&B�d\\BMfv�\x15Ǹ���\x1C{�7�������~��X�X\x15Z\x03.����By\x10�!mEm�(\vY&Q\x0422Vd�Q\x12��{W�\x1D�\"PԴ��\x7F���7�U�ڿpm���XVom{�����\"�n���@l��>r��\x0F\eP�q�q�P\\8n*�T���\f�����qc@\x18\x14�\t\a��L�I��Ĩ�N�\"\x18\rF�\x1A�MEL\x15{9�`i��m֏\x1A�~\v \x03�%����`\x01Î4���ng��o�l�I�N\x7F�O�E8@�<\v;�\x16�r�\n�\f�\x06~�\x106L\x19N\x19~o0�\f=���1 \f0\x067%\\)b4c\te��X��^\x11�k8��Vx�\x11gr1Ϊt�c_;F�����E���J�]�G\f\x0Fǟ�;�8�c6��\r�bck��ŏ$>i|2���K�I�+\t����������ͯ�p&��$g��x)C��.yq�쓲��[�\t�I��I=I<ɚ�D\x16d�ְ\x15���|�F�KJc��<�[�d�LNJ�\x19\x13��\x16��+5\x15�7�.J��\f\\��D\x05�2�`K\x12Kʩ\\�k�o�}����\x05f'��9;��\x18�Ʀ3r�l:�.��\x19\x149g��Y��`u.N�%ׂK^J�,j\rge\x11L�\x11�H\x15ƀH��\x13}d�\x14�,���0��L�g�.<\x11\x17�N\x0E\e\v\x1A\x1C$�_w�(�ꓜ�R�P�$�'9�,�BQ�\x1C\x0E\x1C���\vC�v\x0E�#Ǯ\x15\x17�ZhE5)\x05��$M\x1C�&c\x16�3��|�������ϰT�Y�r�k��b�K.��gl[�W�\x7F�W�\x19�����|��\rl�ʃMM\x01�1�����{��q��]��\x7F4g��C\x0F��~�S\x7F��j�2�\aCmc3\x1F�\x11��Mo���\x0F�>�\x01S�\x11(�w�\x0E�Wt�)�\x0E�\x01J�q�{\t�\tܗ�cd��v�0�\b���8����|Rє!�\x7F�\rj��Y]z\x02� \rċ#!*i;�6[|�\b\x02�K���ݻ4X^\x15�\x17/G��\x9D�\x0E+��,:�R:��a\x03Y��t�\b�\x0E\x1D6�w�7t�LEܯ�q4����x�9E��E�k��\x0E'�ns�\x0E'\x1A��\x1F��$�,�ӳ~;�|\\��6�j\x1D�Z��B�,�uX�xː\x0E\e(�r�\x0E\e\x01_��&�\x1C�a3�Y���qԒb��x�J��\x0E/��i��~[�\"�\x17:���HO��$����\x12�\n�'e}I�U��zP�\x06��N�J�Yߗ�\x11xc�k:�Rj�\e\x126��d�I�\x11������'X�tX%��&�8\x11_k�\x0E#�ٵ:\f9�\r:��f_�Ð�}�\x0E#��\x13:��f��\x0E#�ٿ�a�7�a\x1DF|s^�a�7�S:��j�:��j��a�W�_:��\x16�)�x��\x7F�a��8��E���d�J�K\x1C\x12N\x10k)٨ð�d���D�xtX�����-R�m:,�|M�i��%��0|^�]\t�\v{J~�ð��M\tg\0�^�tX%�4C\x99���V�A_�$�lI�S�\x05�^\t�\x1C(�M��\x03��H8_�S:�ð��)\t�$��uXп,�\"\aJ��a�@�\x1F%\\&�S����OY��rQ\t�JuX������0�/��c��*۪�\x02�K�\t1��:,��KXƥ�~\x1D\x16z\x1F�N�O~��nr�\e�F��uR��7���Ђ:����a���\x02�+)4`\x06�_\x01�Y�]�CI���iԁ�\x01\n��\x04�ۈ>�o9�ƻ��u�Zb\e�1�~\ex������\x06y\x01�aڇk\x1F��1�\x02�z���\x1C;�̣�f���%RJ`��\x15�Z���*�\tX7f}����A*=����1G[>Ϯ�y�oI�\n��A� �a�\x1C8����s\rX\x0F��MAi�𑆱�\t�R�#\x1E\x1A�K~����M�n�����.�\v>\x0F�\no�HN!��<6���^a�\x1F��?��#�KЍH�������[.��^���r�_z�\x05k���>,g�2S;p\rI�c\x11�e�*�R��$(�<�aآ�ʥ�b,����}2�D�\rI]����e��m�sPJ\x14v�C���\x18�&�vI}n=\x1A�\x19au@��K�1Ʒ\x7F6�^=��z\x04=�7\x01�����Dȥ�\x1F��4�a�U3�\x17�\x11�\x11)�\x7F^6\bZ��\x15�=��y;�{ĭgj�\x1C� dz�W��c��:&$=-2j.�}r�\x0EK�\x0EH~a����5��-���Z��Jc�QH���nP\ni1�_��w}�J��>$GsQ\r�,\x1D�֝?'fjk`v-bnPʛ�!��庵.��nY�4}����O��#�1~�üz\f����9��U��}��c\x12檽K�*�\x1D���[_�WFm@���ދe�䌭d~v{g3K��+��\fJkDn���V��\f��1(Gs�\e�Љ\x14���ܺ�^)!$=ݷ 7=�\x17�\x19ϊ�vϮp��mM��\x15ҷ\x01�w��z\x12���=�߃zՈ����es�36;(#�+%\x7F�j!�-g�2-��Oz�/w���U��\x1E�5S̻�'�u\x1Db\x0Fż\x18��3\x16�H��\x1C\x1A�usƶ\ny�\x051�\x06gj%�w���_a+du\x1A\x04E��K\x03�\x06\x01\r�\by�(@�d\x0E�\"^1K�\x7FWÈ̘\x18�g��ͨ��8�[њ�y\x02�\x02�8\x01Zq��ķ\0Ӂ��͋q\x12��Ib;)\x11OS�u�l\n�'״Y|l��<��}>��\x7F�)6\x17���<\x13�^9�\x1F��Y����\x16���h~��U��:\x1Aۿ^�f\x06�=�GJ���D�[�umbw��ki��i\x14�\x19�\x18���Α����w�g6��e�\b��y�������.\x14\x1E�̓2����ק��\"\x03{ee�YݫGfH�|�\b\x15�U-�T�\"��\x15�j��m���佨\vZ\ato\a�\x1A�Q����\x033Wg��\x13\v�~�1��+V�]�\"���W���kb��84����\x15��Oz�;�\x14\x19�w��l�zx^�Ν�\x1F�)aݠ�?�W�\x05�Fd�/�ќ\x7F\x1F:S\x1F�(}��ݡ��ǅ�����욟݃zE��?���z~�Uޅ9�q+�ˏ�r��Fn��K�9\x1E�\x0E-�����[Fu�C1\x18����$\a��jH���Ρ}��h���]��џ�7���y�g���ŝ\eǘ���X�R��x&b�\x0F�z��d휗�հ�_h�G��\r�왑 �O\x1A)�$P�{�\x1A����r���|U#��ħ#۩M����r���p\x1D���$�J�ų�hB��v���Oƙ��\x0Fyo�<�����v�=ڣZg�G��\e�\x05�Қ|�~߰+��\ri�\x01w���\n��\v�J!L��\r�\x04&�m\x1C\x02��ի��q���\x1A\a\x06�m�=�����\x13�\f���5\x0E{]\x03�}\x03}32�H�&Pk.�\f\a��\x15\x15UUZ�&�{�\x17��\x0E�Α̧��r)�S\x8Fh�î>Ϡk�rͷ�c-׆={���g�ӧy�� H�wh���V�unҶ��]����4�@�3�\x0F��YIX�oϰ�߿\x7F>ʣ5\x0F�F�C{\x04�\x17�-׶�z!z����\ep\x05�\t��^�ץu�BC}X\b\\����7\x14�\f\nۆ�k\x01\x17�\bGywk}��w��2-�v7�\\^L\x0E��=Z\x7Fh�5\x04�5w�k���20�\x03X�kH��~�~/���\x02=nO ��:� \x17����W\x17%\x16\x1F\x1A�h#�`�tà��'�\x05\f��0�\r�\x06fp�\x11�P��\x01�\e@hx\x7F�&=���\x19v!��a�+8�)��\x0E!�\x01�L��3,M�\x1D\x1A\x18\0(m��A\x1F�x��B��\\j �\x7F�3�\x13\"[\x03B�gx�;$)�}�C�\v��CP\x14\v`�׵�'�G��s��3��G|�\x1E�>�$�i��\x06�\x0Em�\x03�\ry� w��\x1E�q�큒����Y��\n,f�3�_��\x02ȝ\x01!c�; �\e�7R@��\x06G�G\v\x05�Rқ��!al�-����aɐ�E\x05�\"O��a\x0F�\x1EDj L\x01�L�'���=�+�C\x10�\t��Ŝ\x06�>o�?��/T\b�!�H����4���Ġ7 \x04\vr��o�'�U�\a��5��###\x15�z�V�}����������ے���.�Xx�@��\f#�\x01`=�e�΍�\e�\x1A;7n٬mi�>���esG��x񶖖M-�;\x13�\x13�;���\x19�\t\x17���P� (=z�-&\x17#\x12Y��w���\x17\x12�n�m��G��Dr�\x1CE|���@��3��L�к���B\x1A�z�6\x02gp�1\";GD:y\x108�����\x1DD�wÏsv�\x10��x$�\f�,\x1FB���\r\x05!\x1Af����-�80c\x14\x12y�\x15��\"۴}����\x17\x19�\n C�sWhۇd��Y\x05֤W.��K\v�=n/�ι+���!�m�����\x159��\x1C�Uy�@\x0FK����!�\x06��^� (�t#���\x03�$��(��\x11\x14�P�7�/�@V�݃HT؏P��k���=�P�����s�\x13�ko�\x13�jP�ܞ�!}\x05úݒ8��\v\r�a\x0F��zFb���\v:D҃\n�7W�f�\b�dau\a�b,\x16�ҭ�}~���Y\x06}�날�\x15\\#\b�w4�\x10(YUSW��-_U^USU\x15\x17��\rȪ��kjp�[Q�խ�]]�:1�#v��nF1��͓�\x10��\x1E�&I�����e�L�B,\x11�\x06o-���\x1Fsk:�U��c���SnP�Q����u|��\x02���\r.|mp�k�\v_\e\\�����\x06\x17�6�����\r.|mp�k�\v_\e\\�����\x06\x17�6�\x7F�k���\x0F��Q�,�f>�>��>�\t-�=w�bY5\x02\v�fp��\x16Ɨ�{�\x7F\v���:,��ᙹ��W���%\x12�O\x13�l��}���\vg���7$��|rWΧ>��|O�>҇>զ�SתM�Ju��T/R�����;�y�Ot氭�'�i\x13#�\x1C4���m����\x1F�x\x1E���/\x15;�d��,�͛��7\x7F����+���S��~J�y}�:��P2cd�N)_���W;'��'�Ӫ��\x16�NjG�\x14V6�\x14\x1A'�r\e\x1DD� o��/�>&����j\v�o\"\r�\x10�Bc�29v�\t��&�2��k\"�)�ﳑ��\x180a�V�7�+W\x10S<�\x10�ɦ\x1C@�\x18�\e}>�^�\x0F�B��H�T\x1F��\x06�7(\x19(C6�Qɤj��J\x0E�J�P$)�'\x14))�n�W�\x14�$IV\x12Q�l�Y1E�m�\tE�ٰS�a\"n��%��\x19�:�D�:\x04�,[�3J<U���tN�%V\x1FnLP:��N�Ŧ���\x7F��:��\b\x04A_��G���\\ɧ\f����H�m�r�$�;!\x05��E�+D7��T=�\x18���\a\b+���Jm�'�VUSc�RBU��\x13\tM9\b�����(�Q�i\x14�\x19EhFa�(\x19\x11�\e1s#h*�+ɯ��a��\0�\x10�\x11�\a�I`iI�1%[��\x13�\x13�\x1D\x036g\".IXf���I2�DBRu�3J���q\x18\x1F�ȲV�N(er)�&����\x1F�K��b�\0c���3J��Xz\"_z �hØQ�b#�\x7F�O\t����E|�O���\x1F��E��a��N�S\x13����,�Ӎy�\r\b��_��\0q~�?����\x7F�'�\x15�g�\x185�\x7F\x05�>��Я@\x7F<R�=�$��@\a��$f����#�J\x1D�\x15�@V�\x0E�fV7\x16�����\a\x11?E�\x14��|���?�ފ~�\a�{�൴\x16�Q��\x0E\x7FZ�4\x7F�?�3��'\"I\x84p�$�#\x11��\x15�ب���4�\x16\x7F�r@��HQ\x0E��L\x14-�%��<�\x1F��H�-�1��Ϻػ \x1A�WDO���H�\x10r8�f;�\x0F��Nk���Y�|H�*�*�zH�\n�r�N{Hk��[�\0�a��p��̑=hN���ƈZ\x17n<�5�uq:�똄zp�K�p��ξ#�\x06~\x1DmA�q\0� �!��H��J�Ϣ}\x0E��\x12\x13D\v���|���\a�\x1F\x1C~��\a�\x1F\x1C~p�%�_j\x0F�\t�\x1Ep�\a\x1C=��\a\x1C=��\x01G��\x10����Gr���\x1D\x1C��h�\x1C��h\aG;8�%G;8���.9��p��\t\x0E��p��\t\x0E'8���\t\x0E'8���\n\x1CU�\x02G��\x02G\x158��Q%9��Q\x05�*ɡ�C\x03�\x06\x0EMrh�����C�\x1C\x1A84ph��\x02\x0E\v8,�H\x0E\v8,ఀ�\"9,2>!4�q\x1A\x1C��q\x1A\x1C�%�ip�\x06�ip��\x1C��q\x1A\x1C��ȸr��\x05��\x02�)���,��r\n,��rJ��\x02�)��җ\x1E���H�\x03h\a�\x0E�\t�)�N�w\n�S�wJ�W\bM���\x11\x06G\x18\x1Ca�\x11\x06G\x18\x1Cap�%G\x18\x1Cap�%�\x188��1\x06�1�1\x06�1p��cLr���\r�\t��=)����X�\x19�+?�Je\x7F�ޖ�\x01zE���q�\x7F�\x1E��g�j�_Iu�\x1F�\"�C��d3���.�1\x13%`\v�.4\x1F�}hG�N��$�\x12�khQ^�\\�&����3\x1D1�4\x19��N�x�q��>�\x11�I���k��<Q�Q�\x16���\x1E���h8Dpm�P\x03���\x1A��Z�kx�3���2�R\x19;YƎ��/���8~1Se�Ý>��˙P���\nZ]Q�:T�[�|;�\x16)Zi�dOǺR�\x03��h�h\x0F�]�V�V�V�V�f��2�w9��\"�F+F+@ӄ\n����Mj��y�'��&^H�8���\x04|'\"�U�&#�[�=\x15)�5Ʊ'�X�\x06�'\x10���\x1F��^��7c�7\"�\x13�\x1E��j��\x14W��4R���1�m'�*X;��\x03�\x16����\x12�m��J�9\"�E��\f�\n1[ʺ�u�:�Ҙ&{Ķ\x16ݒ�m��6S�\b<3R�4π&ze\x02\x06��\x18�R�s���v��`�\x1D\x1C����6��{�p�]⌷=]�U\x107�\"��\x1E�øއE�����\em�@\x16+|�v���vk��\x19�[`��RE�v�6�\x1Fw��\x0E٪l���m\x01�'l.�6��B�#��lO\v3��u�ǟ��C�F��0b��pR��j�osڊm����\x7FiULn]���\x03T\x1DӾ\f�-+�\x149��n��8�L�\x0E�.5�7�5�MKL�M��ts��bN2'���f�Ѭ�������\x1D\x1C��+Ӎ��ɨ��*a\v\x17W\x1E�KS�̜>A�4���u�gm�)7��j��:�,~뎰����Sۨ�s}x��m�\x14�\x16�s��M�v�3vk7�a~�$�ήI\x16\x15��r�\x0FQ�3���c�X�u�tw�5s_��!u]�����\\z��c�e�\x0F��j��\n?��\x1D�\x16@4��-|����c<�'�4\x1F�I���:��yr�6�W��� {]�!��@FŢ\x03�y=i�\f�d� C�btE`\a]��@\x17�HE��(>QҩLЍ���4�k��)$zEҼRH�h�1�m\x1E/*�Tv�u\t*�eפa�R��\x06�r�$���M\n�1�,\\9GR���Β�J]\n����h�Kfh�K@��\x1F�<�\x1Dlby���◿z�-\x1E���M����C��6~ ��$XQO��_�.O8d�4�\x0F؛���ϟg�y1���<NϷtv�?��4G�;���]��\x13\r�]�\vt�8����<�ꅰ.����<Ӎb�A�j\x14�\x1A��\x06g����\x15y��5n���wAd?�\x17�#�{r\v��gZ��DB\x1F[[`=�{\\%�\b-rt�\x13��Éhb����QLa���$��n����ڂ���\x11}�\x02t�}=͸�\x04Q[�vk[��cG�H���u��\x05�KN[��ی\x7F\x18\ae�{>%\x05��\n��\x15\n�\x02�\x12r�)�-\\��\x16^�\x15��LP���\r\\�\fNQ$n<.�e2:�I\a�`A�N@\x0E&~#�\x19��.\x13\x1F3���xT\bN��W���\t~\x10\r�q|$R)����ĒB��\x12�����x>\x15}$��Z�\x14A\x1DXE_\x18�)�\0\x0E\x17\x1E.?\\7V8V>Vg\x14?��\x10����Q\x1A�|H��#0�\b��n��t\x01��\x1F�˗��\x04�pt;\x02�7^�îv�#\x03��:6�K\rH������\x01�\x11�&\x1D�\x19���\"'C�E*�?X�6\x13\nendstream\nendobj\n\n6 0 obj\n10825\nendobj\n\n7 0 obj\n<</Type/FontDescriptor/FontName/BAAAAA+Arial-BoldMT\n/Flags 4\n/FontBBox[-627 -376 2000 1011]/ItalicAngle 0\n/Ascent 905\n/Descent 211\n/CapHeight 1010\n/StemV 80\n/FontFile2 5 0 R>>\nendobj\n\n8 0 obj\n<</Length 272/Filter/FlateDecode>>\nstream\nx�]��n� \x10��<\x05��a\x03Zu��1ٺ��C���\x0F�0Z��\x04���\x17\x06�&=@~��7�f`usm�r��΢\x05G\a���e^�\0�è4IR*�p{���:C�׶��`j�0�%ao>�8���E�=�\x11�b%X�Gz��[\x1F��1_0�v����\x12\x06��3��\x04\fU�F��r��K�\n�7\x034�8�V�,a1�\0��\x11H�yE�ۭ\"��\\�K�A|v֗&���,�<�ȧ<�=rq\r���s�\x1C9�\v�\x1C�\x14�\x14�\x1F�\x16�\x1C\x19���u���9���\x04�a�?k�b�֯\0��������\x7F1�\t*<�;���\nendstream\nendobj\n\n9 0 obj\n<</Type/Font/Subtype/TrueType/BaseFont/BAAAAA+Arial-BoldMT\n/FirstChar 0\n/LastChar 11\n/Widths[750 722 610 889 556 277 666 610 333 277 277 556 ]\n/FontDescriptor 7 0 R\n/ToUnicode 8 0 R\n>>\nendobj\n\n10 0 obj\n<<\n/F1 9 0 R\n>>\nendobj\n\n11 0 obj\n<</Font 10 0 R\n/ProcSet[/PDF/Text]>>\nendobj\n\n1 0 obj\n<</Type/Page/Parent 4 0 R/Resources 11 0 R/MediaBox[0 0 595 842]/Group<</S/Transparency/CS/DeviceRGB/I true>>/Contents 2 0 R>>\nendobj\n\n12 0 obj\n<</Count 1/First 13 0 R/Last 13 0 R\n>>\nendobj\n\n13 0 obj\n<</Title<FEFF00440075006D006D00790020005000440046002000660069006C0065>\n/Dest[1 0 R/XYZ 56.7 773.3 0]/Parent 12 0 R>>\nendobj\n\n4 0 obj\n<</Type/Pages\n/Resources 11 0 R\n/MediaBox[ 0 0 595 842 ]\n/Kids[ 1 0 R ]\n/Count 1>>\nendobj\n\n14 0 obj\n<</Type/Catalog/Pages 4 0 R\n/Outlines 12 0 R\n>>\nendobj\n\n15 0 obj\n<</Author<FEFF004500760061006E00670065006C006F007300200056006C006100630068006F006700690061006E006E00690073>\n/Creator<FEFF005700720069007400650072>\n/Producer<FEFF004F00700065006E004F00660066006900630065002E006F0072006700200032002E0031>\n/CreationDate(D:20070223175637+02'00')>>\nendobj\n\nxref\n0 16\n0000000000 65535 f \n0000011997 00000 n \n0000000019 00000 n \n0000000224 00000 n \n0000012330 00000 n \n0000000244 00000 n \n0000011154 00000 n \n0000011176 00000 n \n0000011368 00000 n \n0000011709 00000 n \n0000011910 00000 n \n0000011943 00000 n \n0000012140 00000 n \n0000012196 00000 n \n0000012429 00000 n \n0000012494 00000 n \ntrailer\n<</Size 16/Root 14 0 R\n/Info 15 0 R\n/ID [ <F7D77B3D22B9F92829D49FF5D78B8F28>\n<F7D77B3D22B9F92829D49FF5D78B8F28> ]\n>>\nstartxref\n12787\n%%EOF\n"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/purchases/{purchaseId}/send-email:
    post:
      operationId: post-purchase-send-email
      security:
        - OAuth2:
            - purchase:write
      tags:
        - Purchase
      summary: Envia email de uma compra
      description: Envia email de uma compra.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: purchaseId
          in: path
          description: ID da compra.
          required: true
          schema:
            type: integer
      requestBody:
        description: Corpo requisição para envio de email de uma compra.
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              required:
                - email
              properties:
                email:
                  type: string
                  description: E-mail para envio da compra.
                  example: joao@cplug.com.br
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/purchases/{purchaseId}/items:
    get:
      operationId: get-purchase-items
      security:
        - OAuth2:
            - purchase:read
      tags:
        - Purchase
      summary: Lista os produtos de uma compra
      description: |
        Retorna os produtos de uma compra.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: items_id
          in: query
          description: >-
            Filtra pelos IDs dos produtos. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: search
          in: query
          description: >-
            Filtra pelas principais propriedades do produto, incluindo `name`,
            `sku`, e `description`.
          schema:
            type: string
            example: Celular
        - name: categories_id
          in: query
          description: >-
            Filtra pelos IDs das categorias. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: barcode
          in: query
          description: Filtra pelo código de barra do produto.
          schema:
            type: string
            example: '1502298184770'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: purchaseId
          in: path
          description: ID da compra.
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: Lista de produtos de uma compra.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      items:
                        type: array
                        description: Representa a lista de produtos.
                        items:
                          $ref: '#/components/schemas/PurchaseDetailItem'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/pos/{posId}/drawer-open:
    post:
      operationId: open-pos
      security:
        - OAuth2:
            - pos:write
      tags:
        - Pos
      summary: Abrir caixa
      description: Abre um caixa do PDV.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: posId
          in: path
          description: ID do PDV.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Informações do caixa aberto.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PosOpen'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/pos/{posId}/drawer-close:
    post:
      operationId: close-pos
      security:
        - OAuth2:
            - pos:write
      tags:
        - Pos
      summary: Fechar caixa
      description: Fecha um caixa do PDV.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: posId
          in: path
          description: ID do PDV.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/PosClose'
      responses:
        '200':
          description: Informações do caixa fechado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PosClose'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/pos/drawer-list:
    get:
      operationId: get-drawer-list
      security:
        - OAuth2:
            - pos:read
      tags:
        - Pos
      summary: Listar fechamentos de caixa
      description: Lista todos os fechamentos de caixa do PDV.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: pos_id
          in: query
          description: ID do PDV.
          required: true
          schema:
            type: integer
            format: int64
            example: 1
        - name: seller_id
          in: query
          description: ID do vendedor.
          required: false
          schema:
            type: integer
            format: int64
            example: 1
        - name: user_id
          in: query
          description: ID do usuário operador.
          required: false
          schema:
            type: integer
            format: int64
            example: 1
        - name: start_date
          in: query
          description: Data de início do abertura de caixa.
          required: false
          schema:
            type: string
            format: date
            example: '2025-01-01'
        - name: end_date
          in: query
          description: Data de fim do abertura de caixa.
          required: false
          schema:
            type: string
            format: date
            example: '2025-01-31'
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
      responses:
        '200':
          description: Lista dos fechamentos de caixa.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      drawers:
                        type: array
                        description: Representa a lista dos fechamentos de caixa.
                        items:
                          $ref: '#/components/schemas/PosStatus'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/pos/drawer-list/{drawerListId}/sales:
    get:
      operationId: get-drawer-list-sales
      security:
        - OAuth2:
            - pos:read
      tags:
        - Pos
      summary: Listar vendas de um fechamento de caixa
      description: Lista todas as vendas de um fechamento de caixa.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: drawerListId
          in: path
          description: >
            ID do fechamento de caixa.


            Para encontrar o ID do fechamento de caixa, você pode usar o
            endpoint `GET /pos/drawer-list`.
          required: true
          schema:
            type: integer
            format: int64
            example: 1
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista das vendas de um fechamento de caixa.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/PosStatusSales'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/purchase-invoices:
    get:
      operationId: get-purchase-invoices
      security:
        - OAuth2:
            - purchaseInvoices:read
      tags:
        - PurchaseInvoices
      summary: Lista os XMLs de entrada
      description: Retorna uma lista de XMLs de entrada.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: search_term
          in: query
          description: Filtra pelo número da nota ou razão social ou cnpj.
          schema:
            type: string
            example: CPlug Supplier Chain
        - name: status
          in: query
          description: |
            Filtra pelo status do XML.
            Exemplo:
              - `all` Todos os status;
              - `imported` Somente os importados;
              - `not_imported` Somente os não importados.
          schema:
            type: string
            enum:
              - all
              - imported
              - not_imported
            example: all
            default: all
        - name: source
          in: query
          description: |
            Filtra pela origem do XML.
            Exemplo:
             - `all` Todas as origens;
             - `automated` Facilita NFe;
             - `manual` Importação de XML.
          schema:
            type: string
            enum:
              - all
              - automated
              - manual
            example: all
            default: all
        - name: import_date_start
          in: query
          description: data inicial da importação.
          schema:
            type: string
            format: date
            example: '2025-01-21'
        - name: import_date_end
          in: query
          description: data final da importação.
          schema:
            type: string
            format: date
            example: '2025-01-31'
        - name: issue_date_start
          in: query
          description: data inicial da emissão.
          schema:
            type: string
            format: date
            example: '2025-01-10'
        - name: issue_date_end
          in: query
          description: data final da emissão.
          schema:
            type: string
            format: date
            example: '2025-01-31'
        - name: issuer_company_name
          in: query
          description: Filtra pela razão social.
          schema:
            type: string
            example: CPlug Supplier Chain LTDA
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista de xmls.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      purchase-invoices:
                        type: array
                        description: Representa a lista de xmls
                        items:
                          $ref: '#/components/schemas/PurchaseInvoice'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-purchase-invoices-file
      security:
        - OAuth2:
            - purchaseInvoices:write
      tags:
        - PurchaseInvoices
      summary: Upload de XML
      description: >
        Adiciona um novo arquivo xml.


        Este endpoint aceita solicitações HTTP no formato ***Form-Data***. Veja
        um exemplo:


        ```

        curl --location 'http://{BASE_URL}/api/v3/purchase-invoices' \

        --header 'CPlug-Company-Id: COMPANY_ID' \

        --header 'Idempotency-Key: IDEMPOTENCY_KEY' \

        --header 'Authorization: Bearer TOKEN' \

        --form 'files=@"/path/to/nfeIn.xml"'

        ```


        O tamanho máximo do arquivo é 5 MB.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        description: Corpo requisição de upload de arquivo xml.
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
              required:
                - file
      responses:
        '200':
          description: Novo arquivo xml adicionado.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/PurchaseInvoice'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/purchase-invoices/{purchaseInvoiceId}/prepare-items:
    put:
      operationId: put-purchase-invoice-prepare-items
      security:
        - OAuth2:
            - purchaseInvoices:write
      tags:
        - PurchaseInvoices
      summary: Pré-processa os itens da nota
      description: >-
        Um pré-processamento dos itens da nota, guardando eles no banco e
        associando a um fornecedor, caso tenha.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/PurchaseInvoiceId'
      requestBody:
        description: Corpo requisição da preparação do processamento do XML.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PrepareItems'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/purchase-invoices/{purchaseInvoiceId}/info:
    get:
      operationId: get-purchase-invoice-info-by-id
      security:
        - OAuth2:
            - purchaseInvoices:read
      tags:
        - PurchaseInvoices
      summary: Obtém informações sobre o XML
      description: Retorna informações sobre o XML.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/PurchaseInvoiceId'
      responses:
        '200':
          description: Informações sobre o XML.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/Info'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/purchase-invoices/{purchaseInvoiceId}/items:
    get:
      operationId: get-purchase-invoice-items
      security:
        - OAuth2:
            - purchaseInvoices:read
      tags:
        - PurchaseInvoices
      summary: Lista os itens do XML
      description: Retorna uma lista de itens do XML.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/PurchaseInvoiceId'
        - name: search_term
          in: query
          description: Filtra pelo número da nota ou razão social ou cnpj.
          schema:
            type: string
            example: CPlug Supplier Chain
        - name: status
          in: query
          description: |
            Filtra pelo status do item.

            Exemplo:
              - `all` Todos os status;
              - `not_saved` Somente os itens não salvos;
              - `saved` Somente os itens salvos.
          schema:
            type: string
            enum:
              - all
              - not_saved
              - saved
            example: all
            default: all
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista de items do XML.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      purchase-invoice-items:
                        type: array
                        description: Representa a lista de itens do XML
                        items:
                          $ref: '#/components/schemas/Item'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-purchase-invoice-save-all-item
      security:
        - OAuth2:
            - purchaseInvoices:write
      tags:
        - PurchaseInvoices
      summary: Salva os itens em massa
      description: Salva os itens em massa.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/PurchaseInvoiceId'
      requestBody:
        description: Corpo requisição da atualização de um item.
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                purchase-invoice-items:
                  type: array
                  description: Representa a lista de itens do XML a ser modificados
                  items:
                    $ref: '#/components/schemas/Item'
      responses:
        '200':
          description: Lista de items do XML.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      purchase-invoice-items:
                        type: array
                        description: Representa a lista de itens do XML
                        items:
                          $ref: '#/components/schemas/Item'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/purchase-invoices/{purchaseInvoiceId}/rollback-items:
    put:
      operationId: put-purchase-invoice-items-rollback
      security:
        - OAuth2:
            - purchaseInvoices:write
      tags:
        - PurchaseInvoices
      summary: Reverte alterações de itens
      description: >
        **Atenção**


        Este endpoint irá reverter todas as alterações feitas **`em todos os
        itens`** da nota para o seu estado original.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/PurchaseInvoiceId'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/purchase-invoices/{purchaseInvoiceId}/update-all-unitary-sale-price:
    put:
      operationId: put-purchase-invoice-items-update-all-unitary-sale-price
      security:
        - OAuth2:
            - purchaseInvoices:write
      tags:
        - PurchaseInvoices
      summary: Atualiza o preço de venda em massa
      description: >
        Este endpoint irá atualizar o preço de venda de todos os itens da nota
        conforme a porcetagem informada.


        Exemplo:
          - Considere que o preço unitário de um item é R$ 10,00:
          - Se a porcetagem for 200%, o preço de venda deste item será de R$ 30,00.

        Esse cálculo é aplicado individualmente para cada item da nota.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/PurchaseInvoiceId'
      requestBody:
        description: >-
          Corpo requisição da atualização do preço de venda em porcentagem dos
          itens.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UnitarySalePrice'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/purchase-invoices/{purchaseInvoiceId}/update-linked-items:
    put:
      operationId: put-purchase-invoice-items-update-linked-items
      security:
        - OAuth2:
            - purchaseInvoices:write
      tags:
        - PurchaseInvoices
      summary: Sincroniza itens com produtos do fornecedor
      description: >
        Essa ação irá atualizar, em massa, os itens da nota comparando com
        produtos cujo código do fornecedor corresponde ao da nota fiscal,
        sincronizando suas informações.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/PurchaseInvoiceId'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/purchase-invoices/{purchaseInvoiceId}/items/{purchaseInvoiceItemId}:
    put:
      operationId: put-purchase-invoice-save-single-item
      security:
        - OAuth2:
            - purchaseInvoices:write
      tags:
        - PurchaseInvoices
      summary: Salva um item do XML
      description: Salva apenas um item do do XML.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/PurchaseInvoiceId'
        - $ref: '#/components/parameters/PurchaseInvoiceItemId'
      requestBody:
        description: Corpo requisição da atualização de um item.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Item'
      responses:
        '200':
          description: Retorna as informações atualizada do item.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/Item'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-purchase-invoice-a-single-item
      security:
        - OAuth2:
            - purchaseInvoices:delete
      tags:
        - PurchaseInvoices
      summary: Apaga um item do XML
      description: Apaga um item, ou seja, este item não vai ser importado.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/PurchaseInvoiceId'
        - $ref: '#/components/parameters/PurchaseInvoiceItemId'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/purchase-invoices/{purchaseInvoiceId}/items/{purchaseInvoiceItemId}/revert:
    put:
      operationId: put-purchase-invoice-revert-single-item
      security:
        - OAuth2:
            - purchaseInvoices:write
      tags:
        - PurchaseInvoices
      summary: Reverte uma alteração de um item
      description: Reverte uma alteração de um item para a configuração original do XML.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/PurchaseInvoiceId'
        - $ref: '#/components/parameters/PurchaseInvoiceItemId'
      responses:
        '200':
          description: Retorna as informações originais do item.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/Item'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/purchase-invoices/{purchaseInvoiceId}/import:
    put:
      operationId: put-purchase-invoice-import
      security:
        - OAuth2:
            - purchaseInvoices:write
      tags:
        - PurchaseInvoices
      summary: Finalizar importação
      description: |
        Finaliza a importação dos itens salvos da nota.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/PurchaseInvoiceId'
      requestBody:
        description: Corpo requisição para a importação dos itens salvos.
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                payments:
                  type: array
                  description: Representa a lista pagamentos
                  items:
                    $ref: '#/components/schemas/RequestPayment'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/purchase-invoices/{purchaseInvoiceId}:
    delete:
      operationId: delete-purchase-invoices
      security:
        - OAuth2:
            - purchaseInvoices:delete
      tags:
        - PurchaseInvoices
      summary: Apaga XML
      description: Apaga um XML.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/PurchaseInvoiceId'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/purchase-invoices/{purchaseInvoiceId}/download:
    get:
      operationId: get-purchase-invoice-download-file
      security:
        - OAuth2:
            - purchaseInvoices:read
      tags:
        - PurchaseInvoices
      summary: Download do XML da NF-e
      description: Faz o download do arquivo XML da NF-e.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: purchaseInvoiceId
          in: path
          description: Identificador único da NF-e.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Arquivo XML da NF-e.
          content:
            text/xml:
              schema:
                type: string
                description: Arquivo XML
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/{productId}/suppliers:
    get:
      operationId: get-products-suppliers
      security:
        - OAuth2:
            - products:read
      tags:
        - ProductSuppliers
      summary: Lista fornecedores
      description: Retorna a lista de fornecedores associados ao produto.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - name: page
          in: query
          description: Número da página para paginação.
          required: false
          schema:
            type: integer
            default: 1
        - name: perPage
          in: query
          description: Quantidade de itens por página.
          required: false
          schema:
            type: integer
            default: 30
        - name: code
          in: query
          description: Filtrar por código do fornecedor.
          required: false
          schema:
            type: string
        - name: supplier_name
          in: query
          description: Filtrar por nome do fornecedor.
          required: false
          schema:
            type: string
        - name: order_by_field
          in: query
          description: Campo para ordenação.
          required: false
          schema:
            type: string
            enum:
              - supplier_id
              - supplier_name
        - name: order_by_type
          in: query
          description: Tipo de ordenação.
          required: false
          schema:
            type: string
            enum:
              - asc
              - desc
            default: asc
      responses:
        '200':
          description: Lista de fornecedores do produto
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      product_suppliers:
                        type: array
                        items:
                          $ref: '#/components/schemas/ProductSupplier'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-products-suppliers
      security:
        - OAuth2:
            - products:write
      tags:
        - ProductSuppliers
      summary: Adiciona fornecedor
      description: Adiciona um novo fornecedor ao produto.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/ProductSupplier'
      responses:
        '201':
          description: Fornecedor adicionado ao produto com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductSupplier'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/{productId}/suppliers/{productSupplierId}:
    get:
      operationId: get-products-suppliers-by-id
      security:
        - OAuth2:
            - products:read
      tags:
        - ProductSuppliers
      summary: Obtém fornecedor
      description: Retorna os detalhes de um fornecedor específico associado ao produto.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - name: productSupplierId
          in: path
          description: ID do relacionamento entre produto e fornecedor.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Detalhes do fornecedor do produto
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductSupplier'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-products-suppliers
      security:
        - OAuth2:
            - products:write
      tags:
        - ProductSuppliers
      summary: Atualiza fornecedor
      description: Atualiza os dados de um fornecedor específico associado ao produto.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - name: productSupplierId
          in: path
          description: ID do relacionamento entre produto e fornecedor.
          required: true
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/ProductSupplier'
      responses:
        '200':
          description: Fornecedor do produto atualizado com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductSupplier'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-products-suppliers
      security:
        - OAuth2:
            - products:delete
      tags:
        - ProductSuppliers
      summary: Apaga fornecedor
      description: Remove um fornecedor específico associado ao produto.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - name: productSupplierId
          in: path
          description: ID do relacionamento entre produto e fornecedor.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          description: Fornecedor removido do produto com sucesso.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/{productId}/grids/{gridId}/image:
    post:
      operationId: post-products-grids-image
      security:
        - OAuth2:
            - products:write.image
      tags:
        - ProductGrids
      summary: Atualiza imagem de uma grade de preço
      description: >
        Adiciona, atualiza ou remove a imagem de uma grade de preço.


        A imagem deve ser do tipo JPEG ou PNG em base64.


        Para remover a imagem existente, envie o campo `image` como `null` ou
        uma string vazia.


        O tamanho máximo do arquivo é 5 MB.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
        - name: gridId
          in: path
          description: ID da grade do produto.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo requisição do upload de uma imagem.
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                image:
                  description: >-
                    Arquivo a ser enviado no formato base64. Exemplo:
                    `data:image/png;base64,<imageBase64>`. Envie null ou string
                    vazia para remover a imagem.
                  type:
                    - 'null'
                    - string
                  format: base64
                  example: data:image/png;base64,<imageBase64>
      responses:
        '200':
          description: Imagem atualizada ou removida com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
        '201':
          description: Nova imagem adicionada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/products/{productId}/integrations:
    get:
      operationId: get-products-integrations
      security:
        - OAuth2:
            - products:read
      tags:
        - Products
      summary: Lista integrações de um produto
      description: Retorna a lista de integrações associadas ao produto.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: productId
          in: path
          description: ID do produto.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Lista de integrações do produto
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      product:
                        $ref: '#/components/schemas/ProductSlim'
                      product_integrations:
                        type: array
                        items:
                          $ref: '#/components/schemas/IntegrationProduct'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/bulks:
    get:
      operationId: get-bulks
      security:
        - OAuth2:
            - bulks:read
      tags:
        - Bulks
      summary: Lista os lotes da empresa
      description: Retorna uma lista de todos os lotes da empresa.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: kind
          in: query
          description: Filtra pelo tipo de lote.
          schema:
            type: string
            example: product
        - name: status
          in: query
          description: >-
            Filtra pelo status do lote. Se não informado, serão retornados todos
            os lotes.
          schema:
            type: string
            enum:
              - pending
              - processing
              - finished
              - failed
            example: pending
      responses:
        '200':
          description: Lista de lotes
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      bulks:
                        type: array
                        description: Representa a lista de lotes.
                        items:
                          $ref: '#/components/schemas/Bulk'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/bulks/{bulkId}:
    get:
      operationId: get-bulk-by-id
      security:
        - OAuth2:
            - bulks:read
      tags:
        - Bulks
      summary: Obtém os dados de um lote da empresa
      description: Retorna os detalhes de um lote específico.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: bulkId
          in: path
          required: true
          description: ID do lote.
          schema:
            type: integer
      responses:
        '200':
          description: Detalhes do lote
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Bulk'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v3/bulks/{bulkId}/items:
    get:
      tags:
        - Bulks
      summary: Lista todos os itens de todos os processos em massa
      description: Retorna uma lista paginada de itens de todos os processos em massa.
      operationId: listBulkItems
      security:
        - OAuth2:
            - bulkProcesses:read
      parameters:
        - in: path
          name: bulkId
          required: true
          schema:
            type: integer
          description: O ID do lote.
        - in: query
          name: page
          schema:
            type: integer
            default: 1
          description: Página da paginação.
        - in: query
          name: per_page
          schema:
            type: integer
            default: 15
          description: Quantidade de itens por página.
      responses:
        '200':
          description: Lista de itens dos processos em massa
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      items:
                        type: array
                        items:
                          $ref: '#/components/schemas/BulkItem'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/bulks/items-add:
    post:
      operationId: post-bulk-items-add
      security:
        - OAuth2:
            - bulks:write
      tags:
        - Bulks
      summary: Adiciona itens ao lote
      description: Adiciona itens a um lote existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/BulkItems'
      responses:
        '200':
          description: Itens adicionados com sucesso
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Bulk'
                maxItems: 100
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/bulks/items-add-by-filter:
    post:
      operationId: post-bulk-items-add-by-filter
      security:
        - OAuth2:
            - bulks:write
      tags:
        - Bulks
      summary: Adiciona itens ao lote por filtro
      description: Adiciona itens a um lote existente por filtro.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/BulkItemsByFilter'
      responses:
        '200':
          description: Itens adicionados com sucesso
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Bulk'
                maxItems: 100
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/bulks/items-remove:
    post:
      operationId: post-bulk-items-remove
      security:
        - OAuth2:
            - bulks:write
      tags:
        - Bulks
      summary: Remove itens do lote
      description: Remove itens de um lote existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/BulkItems'
      responses:
        '200':
          description: Itens removidos com sucesso
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Bulk'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/bulks/finish:
    post:
      operationId: post-bulk-finish
      security:
        - OAuth2:
            - bulks:write
      tags:
        - Bulks
      summary: Finaliza um lote
      description: Finaliza um lote e envia para ser processado.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/BulkFinish'
      responses:
        '200':
          description: Lote finalizado com sucesso
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkStatus'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/bulks/{kind}/status:
    get:
      operationId: get-bulk-status
      security:
        - OAuth2:
            - bulks:read
      tags:
        - Bulks
      summary: Obtém o status do lote
      description: >-
        Retorna o status do último lote da empresa por tipo (kind), independente
        do status.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: kind
          in: path
          required: true
          description: Tipo do lote.
          schema:
            type: string
      responses:
        '200':
          description: Status do lote
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkStatus'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v3/bulks/{kind}/destroy:
    delete:
      operationId: delete-bulk-destroy
      security:
        - OAuth2:
            - bulks:write
      tags:
        - Bulks
      summary: Apaga um lote
      description: Remove completamente um lote e todos os seus itens.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: kind
          in: path
          required: true
          description: Tipo do lote.
          schema:
            type: string
      responses:
        '204':
          description: Lote excluído com sucesso
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v3/whitelabel/settings:
    get:
      operationId: get-whitelabel-settings
      security:
        - OAuth2:
            - whitelabel:read
      tags:
        - WhitelabelSettings
      summary: Configurações do whitelabel
      description: >-
        Retorna as configurações do whitelabel incluindo informações da empresa,
        contatos, cores, conteúdos e outras configurações visuais.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
      responses:
        '200':
          description: Configurações do whitelabel.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/WhitelabelSettings'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tables:
    get:
      operationId: get-tables
      security:
        - OAuth2:
            - tables:read
      tags:
        - Tables
      summary: Lista de mesas
      description: Retorna lista das mesas disponíveis.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: name
          in: query
          description: Filtra pelo nome da mesa.
          schema:
            type: string
            example: Mesa 1
        - name: is_enabled
          in: query
          description: Filtra pelo status da mesa.
          schema:
            type: boolean
            example: true
        - name: unique_id
          in: query
          description: Filtra pela identificador único da mesa.
          schema:
            type: string
            format: uuid
            example: f81d4fae-7dec-11d0-a765-00a0c91e6bf6
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista das mesas.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      tables:
                        type: array
                        description: Representa a lista das mesas.
                        items:
                          $ref: '#/components/schemas/Table'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-tables
      security:
        - OAuth2:
            - tables:write
      tags:
        - Tables
      summary: Cria uma nova mesa
      description: Cria uma nova mesa.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        description: Corpo da requisição da criação da mesa.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Table'
      responses:
        '201':
          description: Mesa criada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/Table'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tables/{tableId}:
    get:
      operationId: get-table
      security:
        - OAuth2:
            - tables:read
      tags:
        - Tables
      summary: Obtém uma mesa
      description: Resgata uma mesa já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: tableId
          in: path
          description: ID da mesa.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Mesa.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/Table'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-table
      security:
        - OAuth2:
            - tables:write
      tags:
        - Tables
      summary: Atualiza uma mesa
      description: Atualiza uma mesa já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: tableId
          in: path
          description: ID da mesa.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo da requisição da atualização da mesa.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Table'
      responses:
        '200':
          description: Mesa atualizada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/Table'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-table
      security:
        - OAuth2:
            - tables:delete
      tags:
        - Tables
      summary: Apaga uma mesa
      description: Apaga uma mesa.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: tableId
          in: path
          description: ID da mesa.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tables/{tableId}/restore:
    post:
      operationId: post-table-id-restore
      security:
        - OAuth2:
            - tables:write
      tags:
        - Tables
      summary: Restaura uma mesa excluída
      description: Restaura uma mesa excluída.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: tableId
          in: path
          description: ID da mesa.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Mesa restaurada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/Table'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/tables/batch:
    post:
      operationId: post-tables-batch
      security:
        - OAuth2:
            - tables:write
      tags:
        - Tables
      summary: Cria novas mesas em massa
      description: Cria novas mesas em massa.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        description: Corpo da requisição da criação das mesas.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TableBatch'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/customizations:
    get:
      operationId: get-customizations
      security:
        - OAuth2:
            - customizations:read
      tags:
        - Customizations
      summary: Lista de customizações
      description: Retorna lista de customizações cadastradas.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: name
          in: query
          description: Filtra pelo nome da customização.
          schema:
            type: string
            example: Customização Promocional
        - name: type
          in: query
          description: |
            Filtra pelo tipo da customização.

            - `FULL_VIDEO`: Vídeo em tela cheia
            - `BACK_VIDEO`: Vídeo de fundo
            - `FULL_IMAGE`: Imagem em tela cheia
            - `BACK_IMAGE`: Imagem de fundo
            - `DYNAMIC_CATEGORY`: Categoria dinâmica
          schema:
            type: string
            enum:
              - FULL_VIDEO
              - BACK_VIDEO
              - FULL_IMAGE
              - BACK_IMAGE
              - DYNAMIC_CATEGORY
            example: FULL_IMAGE
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista de customizações cadastradas.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      customizations:
                        type: array
                        description: Representa a lista de customizações.
                        items:
                          $ref: '#/components/schemas/Customization'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-customizations
      security:
        - OAuth2:
            - customizations:write
      tags:
        - Customizations
      summary: Cria uma nova customização
      description: Cria uma nova customização.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/Customization'
      responses:
        '201':
          description: Nova customização criada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/Customization'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/customizations/{customizationId}:
    get:
      operationId: get-customization
      security:
        - OAuth2:
            - customizations:read
      tags:
        - Customizations
      summary: Obtém uma customização
      description: Retorna uma customização específica.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: customizationId
          in: path
          required: true
          description: Identificador único da customização.
          schema:
            type: integer
            example: 123
      responses:
        '200':
          description: Customização encontrada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/Customization'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-customization
      security:
        - OAuth2:
            - customizations:write
      tags:
        - Customizations
      summary: Atualiza uma customização
      description: Atualiza uma customização existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: customizationId
          in: path
          required: true
          description: Identificador único da customização.
          schema:
            type: integer
            example: 123
      requestBody:
        $ref: '#/components/requestBodies/Customization'
      responses:
        '200':
          description: Customização atualizada com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/Customization'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-customization
      security:
        - OAuth2:
            - customizations:delete
      tags:
        - Customizations
      summary: Apaga uma customização
      description: Apaga uma customização existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: customizationId
          in: path
          required: true
          description: Identificador único da customização.
          schema:
            type: integer
            example: 123
      responses:
        '204':
          description: Customização removida com sucesso.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/customizations/{customizationId}/media:
    post:
      operationId: post-customization-media
      security:
        - OAuth2:
            - customizations:write
      tags:
        - Customizations
      summary: Adiciona uma mídia em uma customização
      description: Adiciona uma mídia (imagem ou vídeo) em uma customização.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: customizationId
          in: path
          required: true
          description: Identificador único da customização.
          schema:
            type: integer
            example: 123
      requestBody:
        $ref: '#/components/requestBodies/CustomizationMedia'
      responses:
        '201':
          description: Mídia enviada com sucesso.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/CustomizationMedia'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '413':
          description: Arquivo muito grande.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: O arquivo enviado excede o tamanho máximo permitido.
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/customizations/{customizationId}/media/{mediaId}:
    delete:
      operationId: delete-customization-media
      security:
        - OAuth2:
            - customizations:delete
      tags:
        - Customizations
      summary: Apaga uma mídia de uma customização
      description: Apaga uma mídia específica de uma customização.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: customizationId
          in: path
          required: true
          description: Identificador único da customização.
          schema:
            type: integer
            example: 123
        - name: mediaId
          in: path
          required: true
          description: Identificador único da mídia.
          schema:
            type: integer
            example: 456
      responses:
        '204':
          description: Mídia removida com sucesso.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/banks:
    get:
      operationId: get-banks
      security:
        - OAuth2:
            - banks:read
      tags:
        - Banks
      summary: Lista de bancos
      description: Retorna lista de bancos.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: banks_id
          in: query
          description: >-
            Filtro pelos IDs dos bancos. Pode passar mais de um ID numérico
            separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: name
          in: query
          description: Filtro pelo nome do banco.
          schema:
            type: string
            example: Connectplug Bank
            maximum: 80
        - name: code
          in: query
          description: Filtro pelo código do banco.
          schema:
            type: integer
            example: 123
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
      responses:
        '200':
          description: Lista de bancos.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      banks:
                        type: array
                        description: Representa a lista de bancos
                        items:
                          $ref: '#/components/schemas/Bank'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/command-series:
    get:
      operationId: get-command-series
      security:
        - OAuth2:
            - commandSeries:read
      tags:
        - CommandSeries
      summary: Lista de séries de comanda
      description: Retorna lista de séries de comanda.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: command_series_id
          in: query
          description: >-
            Filtro pelos IDs das séries de comanda. Pode passar mais de um ID
            numérico separado por virgula.
          schema:
            type: string
            example: 1,2,3
        - name: name
          in: query
          description: Filtro pelo nome da série de comanda.
          schema:
            type: string
            example: Comanda
            maximum: 80
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista de séries de comanda.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      command_series:
                        type: array
                        description: Representa a lista de séries de comanda
                        items:
                          $ref: '#/components/schemas/CommandSeries'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-command-series
      security:
        - OAuth2:
            - commandSeries:write
      tags:
        - CommandSeries
      summary: Cria nova série de comanda
      description: Cria uma nova série de comanda.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        description: Corpo da requisição da criação da série de comanda.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommandSeries'
      responses:
        '201':
          description: Série de comanda criada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/CommandSeries'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/command-series/{commandSeriesId}:
    get:
      operationId: get-command-series-by-id
      security:
        - OAuth2:
            - commandSeries:read
      tags:
        - CommandSeries
      summary: Obtém uma série de comanda
      description: Retorna uma série de comanda.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: commandSeriesId
          in: path
          description: ID da série de comanda.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Lista de série de comanda.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/CommandSeries'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-command-series
      security:
        - OAuth2:
            - commandSeries:write
      tags:
        - CommandSeries
      summary: Atualiza uma série de comanda
      description: Atualiza uma série de comanda já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: commandSeriesId
          in: path
          description: ID da série de comanda.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Corpo da requisição da atualização da série de comanda.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommandSeries'
      responses:
        '200':
          description: Série de comanda atualizada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/CommandSeries'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-command-series
      security:
        - OAuth2:
            - commandSeries:delete
      tags:
        - CommandSeries
      summary: Apaga uma série de comanda
      description: Apaga uma série de comanda.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: commandSeriesId
          in: path
          description: ID da série de comanda.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/statistics/aggregate:
    get:
      operationId: get-statistics-aggregate
      security:
        - OAuth2:
            - statistics:read
      tags:
        - Statistics
      summary: Busca valores agregados
      description: Busca valores agregados baseados nos parâmetros fornecidos.
      parameters:
        - name: data_source
          description: |
            Fonte de dados a ser utilizada.

            - `sale`: Vendas
            - `transaction`: Transações
          in: query
          schema:
            type: string
            enum:
              - sale
              - transaction
            example: sale
          required: true
        - name: metric
          description: |
            Métrica a ser utilizada.

            - `total_amount`: Valor total das vendas
            - `ticket_avg`: Valor médio das vendas
          in: query
          schema:
            type: string
            enum:
              - total_amount
              - ticket_avg
            example: total_amount
          required: true
        - name: begin_date
          description: |
            Data inicial do período de busca.

            Formato: `YYYY-MM-DD`
          in: query
          schema:
            type: string
            format: date
            example: '2025-01-01'
          required: true
        - name: until_date
          description: |
            Data final do período de busca.

            Formato: `YYYY-MM-DD`
          in: query
          schema:
            type: string
            format: date
            example: '2025-01-31'
          required: true
        - name: filters
          description: >
            Filtros a serem aplicados de acordo com o módulo referente ao
            `data_source`.


            Atualmente implementado apenas para:

            - `transaction`: Utiliza o mesmo filtro da rota
            `/api/v3/financial/transactions`
          in: query
          schema:
            type: object
            example:
              type: income
              description: Receita
        - name: with_additional_data
          description: >
            Incluir dados do período anterior.


            Para estatísticas agregadas, o período anterior será a mesma
            quantidade de dias do filtro selecionado imediatamente antes do
            filtro inicial.


            Exemplo: se o filtro inicial for `2025-01-08` e o filtro final for
            `2025-01-14`, o período anterior será `2024-01-01` e `2024-01-07`.
          in: query
          schema:
            type: boolean
            default: false
            example: false
          required: false
      responses:
        '200':
          description: Resposta com sucesso
          content:
            application/json:
              schema:
                properties:
                  data:
                    description: Dados estatísticos agregados
                    $ref: '#/components/schemas/Aggregate'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/statistics/series:
    get:
      operationId: get-statistics-series
      security:
        - OAuth2:
            - statistics:read
      tags:
        - Statistics
      summary: Busca dados estatísticos
      description: Busca dados estatísticos baseados nos parâmetros fornecidos.
      parameters:
        - name: data_source
          description: |
            Fonte de dados a ser utilizada.

            - `sale`: Vendas
            - `transaction`: Transações
          in: query
          schema:
            type: string
            enum:
              - sale
              - transaction
            example: sale
          required: true
        - name: metric
          description: |
            Métrica a ser utilizada.

            - `total_amount`: Valor total das vendas
            - `ticket_avg`: Valor médio das vendas
          in: query
          schema:
            type: string
            enum:
              - total_amount
              - ticket_avg
            example: total_amount
          required: true
        - name: begin_date
          description: |
            Data inicial do período de busca.

            Formato: `YYYY-MM-DD`
          in: query
          schema:
            type: string
            format: date
            example: '2025-01-01'
          required: true
        - name: until_date
          description: |
            Data final do período de busca.

            Formato: `YYYY-MM-DD`
          in: query
          schema:
            type: string
            format: date
            example: '2025-01-31'
          required: true
        - name: group_type
          description: |
            Tipo de agrupamento dos dados.

            - `year`: Agrupamento por ano
            - `month`: Agrupamento por mês
            - `day`: Agrupamento por dia
          in: query
          schema:
            type: string
            enum:
              - year
              - month
              - day
            default: month
            example: month
        - name: with_additional_data
          description: >
            Incluir dados do período anterior.


            Para estatísticas por série, o período anterior será sempre o mesmo
            do período atual, porém com dados do ano anterior.
          in: query
          schema:
            type: boolean
            default: false
            example: false
          required: false
      responses:
        '200':
          description: Resposta com sucesso
          content:
            application/json:
              schema:
                properties:
                  data:
                    description: Dados estatísticos por série
                    $ref: '#/components/schemas/Series'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/filters:
    get:
      operationId: get-filters
      security:
        - OAuth2:
            - filters:read
      tags:
        - Filters
      summary: Lista de filtros
      description: Retorna lista de filtros salvos de uma área específica do sistema.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: system_area
          in: query
          description: >
            Área do sistema para filtrar os resultados. Nem todas as áreas estão
            disponíveis no momento.


            - `extract`: Extrato
          required: true
          schema:
            type: string
            enum:
              - extract
          example: extract
        - name: name
          in: query
          description: Filtra pelo nome do filtro.
          schema:
            type: string
            example: Produtos em estoque baixo
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista de filtros retornada com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FiltersResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    post:
      operationId: post-filters
      security:
        - OAuth2:
            - filters:write
      tags:
        - Filters
      summary: Cria um filtro
      description: Cria um novo filtro salvo para uma área específica do sistema.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        $ref: '#/components/requestBodies/FilterBody'
      responses:
        '201':
          description: Filtro criado com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Filter'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/filters/{filterId}:
    get:
      operationId: get-filters-id
      security:
        - OAuth2:
            - filters:read
      tags:
        - Filters
      summary: Obtém um filtro
      description: Resgata um filtro salvo já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: filterId
          in: path
          description: ID do filtro.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Filtro retornado com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Filter'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    put:
      operationId: put-filters
      security:
        - OAuth2:
            - filters:write
      tags:
        - Filters
      summary: Atualiza um filtro
      description: Atualiza um filtro salvo já existente.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: filterId
          in: path
          description: ID do filtro.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/FilterUpdateBody'
      responses:
        '200':
          description: Filtro atualizado com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Filter'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: delete-filters
      security:
        - OAuth2:
            - filters:delete
      tags:
        - Filters
      summary: Apaga um filtro
      description: Apaga um filtro salvo do sistema.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: filterId
          in: path
          description: ID do filtro.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          description: Filtro removido com sucesso.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/reconciliations:
    get:
      operationId: get-reconciliations
      security:
        - OAuth2:
            - reconciliations:read
      tags:
        - Reconciliations
      summary: Lista de conciliações bancárias
      description: Retorna lista das conciliações bancárias disponíveis.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: account_code
          in: query
          description: Filtra pelo código da conta.
          schema:
            type: string
            example: '123456'
        - name: bank_name
          in: query
          description: Filtra pelo nome do banco.
          schema:
            type: string
            example: Banco da ConnectPlug
        - name: status
          in: query
          description: |
            Status da conciliação bancária

            - `pending` conciliação pendente.
            - `completed` conciliação concluída.
            - `partial` conciliação parcialmente concluída.
          schema:
            type: string
            enum:
              - pending
              - completed
              - partial
        - name: date_start
          in: query
          description: >-
            Filtra por dados que foram registrados a partir de uma data.
            (Formato: YYYY-MM-DD).
          schema:
            type: string
            format: date
        - name: date_end
          in: query
          description: >-
            Filtra por dados que foram registrados até uma data. (Formato:
            YYYY-MM-DD).
          schema:
            type: string
            format: date
        - name: search
          in: query
          description: Filtra pelo nome do banco ou código da conta.
          schema:
            type: string
            example: Cplug
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
        - $ref: '#/components/parameters/DeletedQuery'
      responses:
        '200':
          description: Lista das conciliações bancárias.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      reconciliations:
                        type: array
                        description: Representa a lista das conciliações bancárias.
                        items:
                          $ref: '#/components/schemas/Reconciliation'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/reconciliations/import:
    post:
      operationId: post-reconciliations-import
      security:
        - OAuth2:
            - reconciliations:write
      tags:
        - Reconciliations
      summary: Upload de um arquivo de conciliação bancária
      description: >
        Upload de um arquivo de conciliação bancária.


        Este endpoint aceita solicitações HTTP no formato ***Form-Data***. Veja
        um exemplo:


        ```

        curl --location 'http://{BASE_URL}/api/v3/reconciliations/import' \

        --header 'CPlug-Company-Id: COMPANY_ID' \

        --header 'Idempotency-Key: IDEMPOTENCY_KEY' \

        --header 'Authorization: Bearer TOKEN' \

        --form 'file=@"/path/to/reconciliation.ofx"'
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        description: Corpo requisição da atualização de um inventário.
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
      responses:
        '201':
          description: Dados desta conciliação bancária.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Reconciliation'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/reconciliations/{reconciliationId}:
    delete:
      operationId: delete-reconciliation
      security:
        - OAuth2:
            - reconciliations:delete
      tags:
        - Reconciliations
      summary: Apaga uma conciliação bancária
      description: Apaga uma conciliação bancária.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: reconciliationId
          in: path
          description: Identificador único da conciliação.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          description: Conciliação bancária apagada com sucesso.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    get:
      operationId: get-reconciliation
      security:
        - OAuth2:
            - reconciliations:read
      tags:
        - Reconciliations
      summary: Obtém uma conciliação bancária
      description: Resgata uma conciliação bancária.
      parameters:
        - name: reconciliationId
          in: path
          description: Identificador único da conciliação.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Dados desta conciliação bancária.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/Reconciliation'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/reconciliations/{reconciliationId}/download:
    get:
      operationId: get-download-reconciliation-file
      security:
        - OAuth2:
            - reconciliations:read
      tags:
        - Reconciliations
      summary: Download do arquivo de uma conciliação bancária
      description: Faz o download do arquivo OFX original enviado na conciliação bancária.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: reconciliationId
          in: path
          description: Identificador único da conciliação.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Arquivo de conciliação original.
          content:
            application/octet-stream:
              schema:
                format: binary
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/reconciliations/{reconciliationId}/transactions:
    get:
      operationId: get-reconciliations-transactions
      security:
        - OAuth2:
            - reconciliations:read
      tags:
        - Reconciliations
      summary: Lista de transações de uma conciliação bancária
      description: Retorna lista das transações de uma conciliação bancária.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: reconciliationId
          in: path
          description: Identificador único da conciliação.
          required: true
          schema:
            type: integer
            format: int64
        - name: status
          in: query
          description: |
            Status da transação

            - `deleted` transação apagada.
            - `pending` transação pendente.
            - `reconciled` transação conciliada.
          schema:
            type: string
            enum:
              - pending
              - deleted
              - reconciled
        - name: date_start
          in: query
          description: >-
            Filtra por dados que foram registrados a partir de uma data.
            (Formato: YYYY-MM-DD).
          schema:
            type: string
            format: date
        - name: date_end
          in: query
          description: >-
            Filtra por dados que foram registrados até uma data. (Formato:
            YYYY-MM-DD).
          schema:
            type: string
            format: date
        - name: search
          in: query
          description: Filtra pelo nome ou pela descrição da transação.
          schema:
            type: string
            example: Transferência bancária
        - $ref: '#/components/parameters/PaginationPageQuery'
        - $ref: '#/components/parameters/PaginationPerPageQuery'
        - $ref: '#/components/parameters/UpdateFromQuery'
      responses:
        '200':
          description: Lista das transações de uma conciliação bancária.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      reconciliation_transactions:
                        type: array
                        description: >-
                          Representa a lista das transações de uma conciliação
                          bancária.
                        items:
                          $ref: '#/components/schemas/ReconciliationTransaction'
                  meta:
                    $ref: '#/components/schemas/MetaPagination'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/reconciliations/{reconciliationId}/transactions/{transactionId}:
    delete:
      operationId: delete-reconciliation-transaction
      security:
        - OAuth2:
            - reconciliations:delete
      tags:
        - Reconciliations
      summary: Apaga uma transação de uma conciliação bancária
      description: Apaga uma transação de uma conciliação bancária.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: reconciliationId
          in: path
          description: Identificador único da conciliação.
          required: true
          schema:
            type: integer
            format: int64
        - name: transactionId
          in: path
          description: Identificador único da transação.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '204':
          description: Transação de conciliação bancária apagada com sucesso.
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/reconciliations/{reconciliationId}/transactions/{transactionId}/suggestions:
    get:
      operationId: get-reconciliations-transactions-suggestions
      security:
        - OAuth2:
            - reconciliations:read
      tags:
        - Reconciliations
      summary: Lista de sugestões de transações de uma conciliação bancária
      description: Retorna lista de sugestões de transações de uma conciliação bancária.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - name: reconciliationId
          in: path
          description: Identificador único da conciliação.
          required: true
          schema:
            type: integer
            format: int64
        - name: transactionId
          in: path
          description: Identificador único da transação.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Lista de sugestões de transações de uma conciliação bancária.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      suggestion_type:
                        type: string
                        description: |
                          Tipo de sugestão de transação.

                          - `similar`: Transação similar.
                          - `suggested`: Transação sugerida.
                        enum:
                          - similar
                          - suggested
                        example: similar
                      financial_transactions:
                        type: array
                        description: Representa a lista de transações financeiras.
                        items:
                          $ref: '#/components/schemas/FinancialTransaction'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/reconciliations/{reconciliationId}/transactions/reconcile:
    post:
      operationId: post-reconciliations-reconcile
      security:
        - OAuth2:
            - reconciliations:write
      tags:
        - Reconciliations
      summary: Concilia uma transação bancária
      description: Faz a conciliação de uma transação de uma conciliação bancária.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: reconciliationId
          in: path
          description: Identificador único da conciliação.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/ReconciliationTransactions'
      responses:
        '200':
          description: Lista das transações de uma conciliação bancária.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      reconciliation_transactions:
                        type: array
                        description: >-
                          Representa a lista das transações de uma conciliação
                          bancária.
                        items:
                          $ref: '#/components/schemas/ReconciliationTransaction'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/reconciliations/{reconciliationId}/transactions/restore:
    post:
      operationId: post-reconciliations-restore
      security:
        - OAuth2:
            - reconciliations:write
      tags:
        - Reconciliations
      summary: Restaura uma transação bancária
      description: Restaura uma transação de uma conciliação bancária.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: reconciliationId
          in: path
          description: Identificador único da conciliação.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/RestoreReconciliationTransactions'
      responses:
        '200':
          description: Transação restaurada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      reconciliation_transactions:
                        type: array
                        description: Representa a transação restaurada.
                        items:
                          $ref: '#/components/schemas/ReconciliationTransaction'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /api/v3/reconciliations/{reconciliationId}/transactions/unreconcile:
    post:
      operationId: post-reconciliations-unreconcile
      security:
        - OAuth2:
            - reconciliations:write
      tags:
        - Reconciliations
      summary: Desconcilia uma transação bancária
      description: Desconcilia uma transação de uma conciliação bancária.
      parameters:
        - $ref: '#/components/parameters/CPlugCompanyId'
        - $ref: '#/components/parameters/IdempotencyKey'
        - name: reconciliationId
          in: path
          description: Identificador único da conciliação.
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        $ref: '#/components/requestBodies/UnreconcileReconciliationTransactions'
      responses:
        '200':
          description: Transação desconciliada.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    type: object
                    properties:
                      reconciliation_transactions:
                        type: array
                        description: Representa a transação desconciliada.
                        items:
                          $ref: '#/components/schemas/ReconciliationTransaction'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
components:
  securitySchemes:
    OAuth2:
      type: oauth2
      flows:
        password:
          tokenUrl: http://connectplug.com.br/oauth/token
          refreshUrl: http://connectplug.com.br/oauth/token
          scopes:
            '*': Full Access
            accountPlans:*: All Access Account Plans
            accountPlans:read: Can Read Account Plans
            accountPlans:write: Can Write/Update Account Plans
            accountPlans:delete: Can Delete Account Plans
            accountTransactions:*: All Access Account Transactions
            accountTransactions:read: Can Read Account Transactions
            accountTransactions:write: Can Write/Update Account Transactions
            accountTransactions:delete: Can Delete Account Transactions
            apps:*: All Access Apps
            apps:read: Can Read Apps
            apps:write: Can Write/Update Apps
            apps:write.image: Can Update App Image
            apps:delete: Can Delete Apps
            customizations:*: All Access Customizations
            customizations:read: Can Read Customizations
            customizations:write: Can Write/Update Customizations
            customizations:delete: Can Delete Customizations
            dre:*: All Access Demonstrativo de Resultado do Exercício (DRE)
            dre:read: Can Read Demonstrativo de Resultado do Exercício (DRE)
            suppliers:*: All Access Suppliers
            suppliers:read: Can read Suppliers
            suppliers:write: Can Write/Update Suppliers
            suppliers:delete: Can Delete Suppliers
            bankaccounts:*: All Access Bank Account
            bankaccounts:read: Can Read Bank Account
            bankaccounts:write: Can Write/Update Bank Account
            bankaccounts:delete: Can Delete Bank Account
            banks:*: All Access Banks
            banks:read: Can Read Banks
            banks:write: Can Write/Update Banks
            banks:delete: Can Delete Banks
            cards:*: All Access Cards
            cards:read: Can Read Cards
            cards:write: Can Write/Update Cards
            cards:delete: Can Delete Cards
            cardContracts:*: All Access Card Contracts
            cardContracts:read: Can Read Card Contracts
            cardContracts:write: Can Write/Update Card Contracts
            cardContracts:delete: Can Delete Card Contracts
            cardProviders:*: All Access Card Providers
            cardProviders:read: Can Read Card Providers
            categories:*: All Access Category
            categories:read: Can Read Category
            categories:write: Can Write/Update Category
            categories:delete: Can Delete Category
            cities:*: All Access Cities
            cities:read: Can Read Cities
            commandSeries:*: All Access Command Series
            commandSeries:read: Can Read Command Series
            commandSeries:write: Can Write/Update Command Series
            commandSeries:delete: Can Delete Command Series
            companies:*: All Access Companies
            companies:read: Can Read Companies
            companies:write: Can Write/Update Companies
            companies:delete: Can Delete Companies
            customerCategory:*: All Access Customer Category
            customerCategory:read: Can Read Customer Category
            customerCategory:write: Can Write/Update Customer Category
            customerCategory:delete: Can Delete Customer Category
            customers:*: All Access Customers
            customers:read: Can Read Customers
            customers:write: Can Write/Update Customers
            customers:delete: Can Delete Customers
            delivery-areas:*: All Access Delivery Areas
            delivery-areas:read: Can Read Delivery Areas
            delivery-areas:write: Can Write/Update Delivery Areas
            delivery-areas:delete: Can Delete Delivery Areas
            nfe:*: All Access NFE
            nfe:read: Can Read NFE
            nfeEmittedDocuments:*: All Access NFE Emitted Documents
            nfeEmittedDocuments:read: Can Read NFE Emitted Documents
            nfeEmittedDocuments:write: Can Write/Update NFE Emitted Documents
            nfeEmittedDocuments:delete: Can Delete NFE Emitted Documents
            nfeReceivedDocuments:*: All Access Received Documents
            nfeReceivedDocuments:read: Can Read Received Documents
            nfeReceivedDocuments:write: Can Write/Update Received Documents
            digitalAccount:*: All Access Digital Account
            digitalAccount:read: Can Read Digital Account
            digitalAccount:write: Can Write/Update Digital Account
            digitalAccount:delete: Can Delete Digital Account
            filters:*: All Access Filters
            filters:read: Can Read Filters
            filters:write: Can Write/Update Filters
            filters:delete: Can Delete Filters
            grupoIcms:*: All Access Grupo ICMS
            grupoIcms:read: Can Read Grupo ICMS
            grupoIcms:write: Can Write/Update Grupo ICMS
            grupoIcms:delete: Can Delete Grupo ICMS
            grupoIpi:*: All Access Grupo IPI
            grupoIpi:read: Can Read Grupo IPI
            grupoIpi:write: Can Write/Update Grupo IPI
            grupoIpi:delete: Can Delete Grupo IPI
            grupoPisCofins:*: All Access Grupo Pis/Cofins
            grupoPisCofins:read: Can Read Grupo Pis/Cofins
            grupoPisCofins:write: Can Write/Update Grupo Pis/Cofins
            grupoPisCofins:delete: Can Delete Grupo Pis/Cofins
            icons:*: All Access Icons
            icons:read: Can Read Icons
            integrations:*: All Access Integrations
            integrations:read: Can Read Integrations
            integrations:write: Can Write/Update Integrations
            integrations:delete: Can Delete Integrations
            kds:*: All Access KDS
            kds:read: Can Read KDS
            kds:write: Can Write/Update KDS
            kds:delete: Can Delete KDS
            labels:*: All Access Labels
            labels:read: Can Read Labels
            labels:write: Can Write/Update Labels
            labels:delete: Can Delete Labels
            legalTerms:*: All Access Legal Terms
            legalTerms:read: Can Read Legal Terms
            legalTerms:write: Can Write/Update Legal Terms
            legalTerms:delete: Can Delete Legal Terms
            erpSettings:*: All Access Erp Settings
            erpSettings:read: Can Read Erp Settings
            erpSettings:write: Can Write/Update Erp Settings
            erpSettings:delete: Can Delete Erp Settings
            taxSettings:*: All Access Tax Settings
            taxSettings:read: Can Read Tax Settings
            taxSettings:write: Can Write/Update Tax Settings
            taxSettings:delete: Can Delete Tax Settings
            passwordPanel:*: All Access Password Panel
            passwordPanel:read: Can Read Password Panel
            passwordPanel:write: Can Write/Update Password Panel
            passwordPanel:delete: Can Delete Password Panel
            payments:*: All Access Payments
            payments:read: Can Read Payments
            payments:write: Can Write/Update Payments
            payments:delete: Can Delete Payments
            peripherals:*: All Access Peripherals
            peripherals:read: Can Read Peripherals
            peripherals:write: Can Write/Update Peripherals
            peripherals:delete: Can Delete Peripherals
            pos:*: All Access Pos
            pos:read: Can Read Pos
            pos:write: Can Write/Update Pos
            pos:delete: Can Delete Pos
            priceList:*: All Access Price List
            priceList:read: Can Read Price List
            priceList:write: Can Write/Update Price List
            priceList:delete: Can Delete Price List
            products:*: All Access Products
            products:read: Can Read Products
            products:write: Can Write/Update Products
            products:write.image: Can Update Product Image
            products:delete: Can Delete Products
            productionOrders:*: All Access Production Orders
            productionOrders:read: Can Read Production Orders
            productionOrders:write: Can Write/Update Production Orders
            productionOrders:delete: Can Delete Production Orders
            promotions:*: All Access Promotions
            promotions:read: Can Read Promotions
            promotions:write: Can Write/Update Promotions
            promotions:delete: Can Delete Promotions
            purchase:*: All Access Purchase
            purchase:read: Can Read Purchase
            purchase:write: Can Write/Update Purchase
            purchase:delete: Can Delete Purchase
            purchaseInvoices:*: All Access Purchase Invoices
            purchaseInvoices:read: Can Read Purchase Invoices
            purchaseInvoices:write: Can Write/Update Purchase Invoices
            purchaseInvoices:delete: Can Delete Purchase Invoices
            reconciliations:*: All Access Reconciliations
            reconciliations:read: Can Read Reconciliations
            reconciliations:write: Can Write/Update Reconciliations
            reconciliations:delete: Can Delete Reconciliations
            saleorders:*: All Access Sale Orders
            saleorders:read: Can Read Sale Orders
            saleorders:write: Can Write/Update Sale Orders
            saleorders:delete: Can Delete Sale Orders
            sales:*: All Access Sale
            sales:read: Can Read Sale
            sales:write: Can Write/Update Sale
            sales:delete: Can Delete Sale
            statistics:*: All Access Statistics
            statistics:read: Can Read Statistics
            stockMovementCategories:*: All Access stock Movement Categories
            stockMovementCategories:read: Can Read stock Movement Categories
            stockMovementCategories:write: Can Write/Update stock Movement Categories
            stockMovementCategories:delete: Can Delete stock Movement Categories
            stocks:*: All Access Stocks
            stocks:read: Can Read Stocks
            stocks:write: Can Write/Update Stocks
            stocks:delete: Can Delete Stocks
            sources:*: All Access Sources
            sources:read: Can Read Sources
            sources:write: Can Write/Update Sources
            sources:delete: Can Delete Sources
            status:*: All Access Status
            status:read: Can Read Status
            status:write: Can Write/Update Status
            status:delete: Can Delete Status
            standardObservations:*: All Access Standard Observations
            standardObservations:read: Can Read Standard Observations
            standardObservations:write: Can Write/Update Standard Observations
            standardObservations:delete: Can Delete Standard Observations
            states:*: All Access States
            states:read: Can Read States
            tables:*: All Access Tables
            tables:read: Can Read Tables
            tables:write: Can Write/Update Tables
            tables:delete: Can Delete Tables
            terminalSettings:*: All Access Terminal Settings
            terminalSettings:read: Can Read Terminal Settings
            terminalSettings:write: Can Write/Update Terminal Settings
            totemSettings:*: All Access Totem Settings
            totemSettings:read: Can Read Totem Settings
            totemSettings:write: Can Write/Update Totem Settings
            units:*: All Access Units
            units:read: Can Read Units
            units:write: Can Write/Update Units
            units:delete: Can Delete Units
            users:*: All Access Users
            users:read: Can Read Users
            users:write: Can Write/Update Users
            users:delete: Can Delete Users
            whitelabel:*: All Access Whitelabel Settings
            whitelabel:read: Can Read Whitelabel Settings
            whitelabel:write: Can Write/Update Whitelabel Settings
            whitelabel:delete: Can Delete Whitelabel Settings
  parameters:
    CPlugCompanyId:
      name: CPlug-Company-Id
      in: header
      description: >
        Id da Empresa (Company).


        Você pode localizar os IDs das empresas no _endpoint_ de [listagem de
        empresas](#tag/Companies/operation/get-companies).
      required: true
      schema:
        type: number
        example: 12
    PaginationPageQuery:
      name: page
      in: query
      description: Indica a página da paginação.
      schema:
        type: number
        minimum: 1
        default: 1
    PaginationPerPageQuery:
      name: per_page
      in: query
      description: Indica a quantidade de itens por página.
      schema:
        type: number
        default: 30
        minimum: 1
        maximum: 100
    UpdateFromQuery:
      name: updated_from
      in: query
      description: >-
        Filtra por dados que foram atualizadas a partir de uma data. (Formato:
        YYYY-MM-DDThh:mm:ss+hh:mm).
      schema:
        type: string
        format: date-time
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      description: >-
        UUID aleatório gerado por você. Nós utilizamos esse header para evitar
        duplicidade de registros, ou seja, caso você não tenha recebido a
        resposta de alguma requisição e mandar o mesmo UUID, nós não
        duplicaremos o registro.
      required: true
      schema:
        type: string
        format: uuid
    DeletedQuery:
      name: deleted
      in: query
      description: Filtro para indicar se deve retornar dados apagados ou não.
      schema:
        type: string
        enum:
          - not_include
          - include
          - only
        default: not_include
        example: not_include
    AppPaymentMethodNameQuery:
      name: name
      in: query
      description: Filtra pelo nome do método de pagamento.
      schema:
        type: string
        example: pix
    BankAccountTransactionDateFrom:
      name: date_from
      in: query
      description: >-
        Filtra por dados que foram registrados a partir de uma data. (Formato:
        YYYY-MM-DD).
      schema:
        type: string
        format: date
    BankAccountTransactionDateTo:
      name: date_to
      in: query
      description: >-
        Filtra por dados que foram registrados até uma data. (Formato:
        YYYY-MM-DD).
      schema:
        type: string
        format: date
    BankAccountTransactionType:
      name: type
      in: query
      description: |
        Filtra por tipo de movimentação.
        Exemplo:
        - `new`: Nova
        - `update_value`: Atualização valor
        - `update_date`: Atualização data
        - `cancelled`: Cancelamento
        - `disabled`: Exclusão
        - `update_bank`: Alteração conta
        - `grouped`: Agrupamento
        - `restored`: Restauração
      schema:
        type: string
        enum:
          - new
          - update_value
          - update_date
          - cancelled
          - disabled
          - update_bank
          - grouped
          - restored
        example: new
    OrderByType:
      name: order_by_type
      in: query
      description: |
        Tipo de ordenação.
        Exemplo:
          - `asc` Ascendente
          - `desc` Descendente
      schema:
        type: string
        enum:
          - asc
          - desc
        default: desc
        example: asc
    SourceTypeQuery:
      name: source_type
      in: query
      description: |
        Canal de venda.

        - `erp`
        - `pdv`
        - `store`
        - `totem`
      schema:
        type: string
        enum:
          - erp
          - pdv
          - store
          - totem
    CPlugStoreDomain:
      name: CPlug-Store-Domain
      in: header
      description: >
        Domínio da loja que está sendo utilizado pelo cliente para fazer as
        requisições (O domínio já deve estar previamente configurado no
        sistema).


        Domínio sem `http` ou `https` ou `/`. Exemplo: `loja.connectplug.com.br`
      required: true
      schema:
        type: string
        example: loja.connectplug.com.br
    StoreCustomerAuthorization:
      name: Authorization
      in: header
      description: >-
        Token de accesso obtido em [Solicita Access
        Token](#tag/StoreCustomerAuthentication/operation/post-store-customer-oauth-token).
      required: true
      schema:
        type: string
        example: Bearer <ACCESS_TOKEN>
    LegalTermType:
      name: type
      in: query
      description: |
        Filtro pelo tipo do termo legal.

        - `custom`: Customizado;
        - `delivery_policy`: Política de Entrega;
        - `privacy_policy`: Política de Privacidade;
        - `returns_policy`: Política de Devolução;
        - `terms_of_use`: Termos de Uso. 
      schema:
        type: string
        enum:
          - custom
          - delivery_policy
          - privacy_policy
          - returns_policy
          - terms_of_use
        example: terms_of_use
    IcmsTributaryGroupIdQuery:
      name: icms_tributary_group_id
      in: query
      description: ID do grupo tributário de ICMS para filtrar as isenções disponíveis.
      required: true
      schema:
        type: integer
        example: 90
    PurchaseInvoiceId:
      name: purchaseInvoiceId
      in: path
      description: >
        ID do arquivo xml de entrada


        Você pode localizar os IDs dos XMLs no _endpoint_ de [listagem de XMLs
        de entrada](#tag/PurchaseInvoices/operation/get-purchase-invoices).
      required: true
      schema:
        type: integer
        format: int64
        example: 123
    PurchaseInvoiceItemId:
      name: purchaseInvoiceItemId
      in: path
      description: >
        ID do arquivo xml de entrada


        Você pode localizar os IDs dos XMLs no _endpoint_ de [listagem de XMLs
        de entrada](#tag/PurchaseInvoices/operation/get-purchase-invoices).
      required: true
      schema:
        type: integer
        format: int64
        example: 123
  schemas:
    AppTypeEnum:
      type: string
      enum:
        - totem
        - terminal
        - server
        - ordersheet-check
        - pos-a
        - mobile-app
        - store
        - digital-menu
      description: Tipo do aplicativo.
      example: totem
    Money:
      type: object
      properties:
        amount:
          type: number
          description: >-
            Valor expresso como um número decimal das principais unidades
            monetárias
          format: decimal
          example: 99.95
        currency:
          type: string
          description: Código de moeda de 3 letras conforme definido pela ISO-4217
          format: iso-4217
          example: BRL
      required:
        - amount
        - currency
    AppStoreSettings:
      title: Store Settings
      type: object
      description: Configurações do aplicativo "Loja".
      properties:
        theme:
          type: object
          description: Configurações do tema do aplicativo.
          properties:
            primary_color:
              type: string
              description: Cor primária do tema no formato hexadecimal.
              default: '#009FE3'
              example: '#009FE3'
            secondary_color:
              type: string
              description: Cor secundária do tema no formato hexadecimal.
              default: '#009FE3'
              example: '#009FE3'
            background_color:
              type: string
              description: Cor de fundo do tema no formato hexadecimal.
              default: '#ffffff'
              example: '#ffffff'
        basic_info:
          type: object
          description: Informações básicas para apresentação do aplicativo.
          properties:
            display_name:
              type: string
              description: Nome da loja a ser exibido para o consumidor final.
              example: Minha loja
            description:
              type: string
              description: Descrição da loja a ser exibido para o consumidor final.
              example: Breve descrição sobre minha loja
        fulfillment:
          type: object
          description: Configurações de canais de atendimento.
          properties:
            fulfillments_available:
              type: array
              description: Tipos de entrega disponíveis no aplicativo.
              items:
                type: string
                description: |
                  Tipo de entrega.

                  - `delivery`: Entrega.
                  - `pickup`: Retirada.
                enum:
                  - delivery
                  - pickup
              example:
                - delivery
                - pickup
            min_pickup_time:
              type: integer
              description: Tempo mínimo de retirada em minutos.
              example: 15
            min_pickup_order_value:
              description: Valor mínimo de pedido para retirada.
              $ref: '#/components/schemas/Money'
            min_delivery_order_value:
              description: Valor mínimo de pedido para entrega.
              $ref: '#/components/schemas/Money'
            free_delivery_fee_from_order_value:
              description: Valor mínimo para cobrar o frete grátis.
              $ref: '#/components/schemas/Money'
        contacts:
          type: array
          description: >-
            Lista de contatos da loja para que o consumidor possa entrar em
            contato com a loja.
          items:
            type: object
            description: Dados de contato da loja.
            properties:
              type:
                type: string
                enum:
                  - email
                  - phone
                  - whatsapp
                description: |
                  Indica o tipo do contato.

                  - `whatsapp`: Número do WhatsApp para contato com a loja
                  - `phone`: Número de telefone (fixo ou celular)
                  - `email`: E-mail de contato da loja
                example: email
              value:
                type: string
                description: Dados do contato.
                example: joe@example.com
        contact_notes:
          type:
            - 'null'
            - string
          description: Observações de contato com a loja.
          example: Respondemos de 12 a 24 horas!
        social_media:
          type: array
          description: Lista das redes sociais da loja.
          items:
            type: object
            description: Dados da rede social da loja.
            properties:
              type:
                type: string
                enum:
                  - facebook
                  - instagram
                  - linkedin
                  - pinterest
                  - snapchat
                  - tiktok
                  - tumblr
                  - twitter
                  - vimeo
                  - youtube
                description: Tipo da rede social
                example: instagram
              url:
                type: string
                description: Url da rede social da loja.
                example: https://...
    ApplicationServerSlim:
      type: object
      description: Dados do aplicativo
      properties:
        id:
          type: integer
          description: Identificador único do servidor.
          example: 123
        name:
          type: string
          description: Nome do servidor.
          example: Servidor
        type:
          type: string
          description: Tipo do servidor.
          example: server
    CustomizationSlim:
      type: object
      title: Customização
      description: Representa uma customização da tela.
      properties:
        id:
          type: integer
          description: Identificador único da customização.
          readOnly: true
          example: 123
        name:
          type: string
          maxLength: 255
          minLength: 1
          description: Nome da customização.
          example: Customização Promocional
    PeripheralSlim:
      type: object
      title: Periférico
      description: Representa um periférico.
      properties:
        id:
          type: integer
          description: Identificador único do periférico.
          readOnly: true
          example: 1
        name:
          type: string
          description: Nome do periférico.
          example: Impressora 1
        type:
          type: string
          description: >
            Tipo do periférico.


            Obrigatório caso seja passado um manufacturer


            Caso passado um manufacturer, aceita apenas os types vinculados ao
            manufacturer listados no endpoint de [listagem de
            fabricantes](#tag/Peripherals/operation/get-peripherals-manufacturers)


            - `printer`: Impressora.

            - `label_printer`: Etiquetadora.

            - `scale`: Balança.

            - `sat`: SAT.

            - `other`: Outro.
          enum:
            - printer
            - label_printer
            - scale
            - sat
            - other
          example: printer
          default: other
    VpnSettings:
      type: object
      description: Configurações de VPN
      properties:
        terminal:
          type: string
          description: Terminal
          example: TT000108
        id:
          type: string
          description: ID junto à SITEF
          example: MTFPZVCB
        cnpj_integrator:
          type: string
          description: CNPJ do integrador
          example: '22423374000152'
        cnpj_client:
          type: string
          description: CNPJ do cliente
          example: '00000000000000'
        ip:
          type: string
          description: IP do totem
          example: 127.0.0.1
        otp:
          type: string
          description: OTP do totem
          example: '123456'
    AppTotemSettings:
      title: Totem Settings
      type: object
      description: Configurações do aplicativo "Totem".
      properties:
        server:
          $ref: '#/components/schemas/ApplicationServerSlim'
        customization:
          $ref: '#/components/schemas/CustomizationSlim'
        sub_type:
          type: string
          description: Subtipo do totem
          example: default
          enum:
            - default
            - selfcheckout
            - selfcheckout_hybrid
            - selfcheckout_ordersheet
            - tapp
        theme:
          type: object
          description: Configurações de tema
          properties:
            primary_color:
              type: string
              description: Cor primária do tema
              example: '#236CFF'
            secondary_color:
              type: string
              description: Cor secundária do tema
              example: '#26413C'
        welcome_screen:
          type: object
          description: Configurações da tela de boas-vindas
          properties:
            welcome_message:
              type: string
              description: Mensagem de boas-vindas
              example: Seja bem-vindo(a)! Toque na tela para começar seu atendimento.
            finish_message:
              type: string
              description: Mensagem de finalização
              example: Tudo certo! Seu atendimento foi concluído com sucesso.
        use_params:
          type: object
          description: Parâmetros de uso e configurações de interface
          properties:
            is_request_table_identifier:
              type: boolean
              description: Solicitar número da mesa no início do pedido
              example: true
            is_hidden_consumption_location:
              type: boolean
              description: Ocultar seleção de local de consumo
              example: true
            is_hidden_sale_number:
              type: boolean
              description: Ocultar número da venda na impressão
              example: true
            is_accept_discount_voucher:
              type: boolean
              description: Aceitar cupom de desconto
              example: true
            is_display_quantity_selector:
              type: boolean
              description: Exibir seletor de quantidade no catálogo de produtos
              example: true
            is_show_price_with_discount:
              type: boolean
              description: Mostrar preço com desconto
              example: true
        fiscal:
          type: object
          description: Configurações fiscais
          properties:
            is_generate_invoice:
              type: boolean
              description: Gerar Nota Fiscal no Totem
              example: true
            generate_invoice_type:
              type: string
              description: Selecione o tipo de emissão de Nota Fiscal
              enum:
                - online
                - contingency
              example: online
            is_document_in_invoice:
              type: boolean
              description: CPF/CNPJ na Nota
              example: true
            is_send_invoice_to_email:
              type: boolean
              description: Enviar nota fiscal por e-mail (Sem impressão automática)
              example: false
        peripherals:
          type: object
          description: Configurações de periféricos
          properties:
            sat:
              $ref: '#/components/schemas/PeripheralSlim'
            print_point:
              $ref: '#/components/schemas/PeripheralSlim'
            print_point_expedition:
              $ref: '#/components/schemas/PeripheralSlim'
        vpn:
          $ref: '#/components/schemas/VpnSettings'
    KdsSlim:
      type: object
      description: Representa um KDS.
      properties:
        id:
          type: integer
          description: Identificador único do KDS na CPlug.
          example: 1
          readOnly: true
        name:
          type: string
          description: Nome do KDS.
          example: KDS Cozinha
    AppTerminalSettings:
      title: Terminal Settings
      type: object
      description: Configurações do aplicativo PDV Desktop.
      properties:
        server:
          $ref: '#/components/schemas/ApplicationServerSlim'
        modules:
          type: array
          description: Lista de módulos disponíveis no PDV Desktop.
          items:
            type: object
            properties:
              kind:
                type: string
                enum:
                  - PASSWORD_PANEL
                  - KDS
                  - CASHIER
                  - CUSTOMER_SERVICE
                description: |
                  Tipo do módulo do PDV Desktop.

                  - `PASSWORD_PANEL`: Painel de Senha
                  - `KDS`: KDS (Kitchen Display System)
                  - `CASHIER`: Balcão
                  - `CUSTOMER_SERVICE`: Atendimento de Mesa
                example: CASHIER
              settings:
                type: object
                description: Configurações específicas do módulo.
                properties:
                  kds:
                    $ref: '#/components/schemas/KdsSlim'
            required:
              - kind
        print_point_redirects:
          type: array
          description: Lista de redirecionamentos de pontos de impressão.
          items:
            type: object
            properties:
              from:
                $ref: '#/components/schemas/PeripheralSlim'
              to:
                $ref: '#/components/schemas/PeripheralSlim'
        peripherals:
          type: object
          description: Configurações de periféricos do PDV Desktop.
          properties:
            sat:
              $ref: '#/components/schemas/PeripheralSlim'
        vpn:
          $ref: '#/components/schemas/VpnSettings'
    AppServerSettings:
      title: Server Settings
      type: object
      description: Configurações do aplicativo Servidor.
      properties:
        ip:
          type: string
          description: Endereço IP do servidor.
          format: ipv4
          example: 192.168.0.123
    AppOrdersheetCheckSettings:
      title: Ordersheet-Check Settings
      type: object
      description: Configurações do aplicativo Conferência de Comanda.
    AppPosASettings:
      title: POS-A Settings
      type: object
      description: Configurações do aplicativo PDV Android.
      properties:
        server:
          $ref: '#/components/schemas/ApplicationServerSlim'
        sat:
          $ref: '#/components/schemas/PeripheralSlim'
    AppMobileAppSettings:
      title: Mobile-App Settings
      type: object
      description: Configurações do aplicativo "Atendimento Mobile".
      properties:
        print_point_redirects:
          type: array
          description: Lista de redirecionamentos de pontos de impressão.
          items:
            type: object
            properties:
              from:
                $ref: '#/components/schemas/PeripheralSlim'
              to:
                $ref: '#/components/schemas/PeripheralSlim'
    AppDigitalMenuSettings:
      title: Digital-Menu Settings
      type: object
      description: Configurações do aplicativo "Cardápio Digital".
      properties:
        customization:
          $ref: '#/components/schemas/CustomizationSlim'
        theme:
          type: object
          description: Configurações de tema
          properties:
            primary_color:
              type: string
              description: Cor primária do tema
              example: '#236CFF'
            secondary_color:
              type: string
              description: Cor secundária do tema
              example: '#26413C'
        welcome_screen:
          type: object
          description: Configurações da tela de boas-vindas
          properties:
            welcome_message:
              type: string
              description: Mensagem de boas-vindas
              example: Seja bem-vindo(a)! Toque na tela para começar seu atendimento.
            finish_message:
              type: string
              description: Mensagem de finalização
              example: Tudo certo! Seu atendimento foi concluído com sucesso.
        use_params:
          type: object
          description: Parâmetros de uso e configurações de interface
          properties:
            is_hidden_button_close_account:
              type: boolean
              description: Define se o botão de "Fechar conta" está oculto
              example: true
            is_hidden_button_waiter_call:
              type: boolean
              description: Define se o botão de "Chamar garçom" está oculto
              example: false
    AppCategory:
      description: Categorias vinculadas no Aplicativo
      type: array
      items:
        type: object
        properties:
          product_category_id:
            type: integer
            description: >
              Id da Categoria


              Você pode localizar os ID da categoria no _endpoint_ de [listagem
              de categorias](#tag/Companies/operation/get-categories).
            example: 1
            writeOnly: true
          category:
            type: object
            description: Categoria vinculada com o Aplicativo.
            readOnly: true
            properties:
              id:
                type: integer
                description: Id da categoria vinculada com o Aplicativo.
                example: 1
              name:
                type: string
                description: Nome da categoria vinculada com o Aplicativo.
                example: Categoria 1
              subcategories:
                $ref: '#/components/schemas/AppCategory'
                readOnly: true
          preparation_time:
            type: integer
            description: >-
              Tempo adicional em minutos para o preparo de items desta
              categoria. Esse valor será adicionado ao tempo da área de entrega
              no caso de pedidos via Delivery.
            example: 10
    AppCardContract:
      description: Contrato de Cartão vinculado no Aplicativo
      type: array
      items:
        type: object
        properties:
          card_contract_id:
            type: integer
            description: |
              Id do Contrato de Cartão
            example: 1
            writeOnly: true
          id:
            type: integer
            description: |
              Id do contrato de cartão
            example: 1
            readOnly: true
          title:
            type: string
            description: Titulo do Contrato de Cartão.
            example: Cielo
            readOnly: true
          code:
            type:
              - string
              - 'null'
            description: Código do Contrato
            example: CODE-1
            readOnly: true
          status:
            type: string
            description: Status do Contrato
            example: active
            readOnly: true
    Application:
      type: object
      description: Dados do aplicativo
      properties:
        id:
          type: integer
          description: Identificador único do aplicativo.
          readOnly: true
          example: 123
        name:
          type: string
          maxLength: 40
          minLength: 1
          description: Nome do aplicativo.
          example: Totem
        type:
          type: string
          enum:
            - totem
            - terminal
            - server
            - ordersheet-check
            - pos-a
            - mobile-app
            - store
            - digital-menu
          description: Tipo do aplicativo.
          example: totem
        image_url:
          type:
            - 'null'
            - string
          description: >-
            URL da imagem principal do aplicativo. Essa imagem é utilizada como
            Logo do aplicativo.
          format: url
          readOnly: true
          example: https://images.connectplug.com.br/4f01c1252eea.jpg
        domain:
          type:
            - 'null'
            - string
          maxLength: 255
          minLength: 1
          description: Domínio do aplicativo. Válido apenas para aplicativos tipo `store`.
          example: minhaloja.connectplug.com.br
        settings:
          oneOf:
            - $ref: '#/components/schemas/AppStoreSettings'
            - $ref: '#/components/schemas/AppTotemSettings'
            - $ref: '#/components/schemas/AppTerminalSettings'
            - $ref: '#/components/schemas/AppServerSettings'
            - $ref: '#/components/schemas/AppOrdersheetCheckSettings'
            - $ref: '#/components/schemas/AppPosASettings'
            - $ref: '#/components/schemas/AppMobileAppSettings'
            - $ref: '#/components/schemas/AppDigitalMenuSettings'
        categories:
          $ref: '#/components/schemas/AppCategory'
        card_contracts:
          $ref: '#/components/schemas/AppCardContract'
        terminal:
          type:
            - 'null'
            - string
          maxLength: 40
          minLength: 1
          description: Nome do terminal.
          example: PDV00001
        device:
          type:
            - 'null'
            - object
          properties:
            model:
              type: string
              maxLength: 40
              minLength: 1
              description: Modelo do aparelho.
              example: iPhone 13
      required:
        - name
    MetaPagination:
      title: MetaPagination
      type: object
      description: Representa as informações de Metadado da paginação da listagem.
      properties:
        current_page:
          type: integer
          description: Página atual na paginação.
          minimum: 0
          example: 1
        last_page:
          type: integer
          description: Quantidade total de páginas.
          minimum: 0
          example: 10
        per_page:
          type: integer
          description: Quantidade de resultados por página.
          minimum: 0
          example: 20
        total:
          type: integer
          description: Quantidade total de itens.
          minimum: 0
          example: 200
      required:
        - current_page
        - per_page
        - last_page
        - total
    Error:
      title: Error
      type: object
      description: Representa um erro.
      properties:
        code:
          type: string
          description: Código de erro.
          example: missing_headers
        message:
          type: string
          description: Descrição do erro.
          example: error message
        meta:
          type: array
          description: Dados adicionais sobre o erro.
          additionalProperties: true
      required:
        - code
    MetaValidationsRulesError:
      title: MetaValidationsRulesError
      type: object
      description: Representa as informações de Metadado das regras de um erro validação.
      properties:
        type:
          type: string
          description: Tipo da validação aplicada.
          example: Required
        value:
          type: array
          description: Tipo de valor aplicável (esse campo pode ser vazio).
          items:
            type:
              - integer
              - number
              - string
              - boolean
      required:
        - type
    MetaValidationError:
      title: MetaValidationError
      type: object
      description: Representa as informações de Metadado de um erro validação.
      properties:
        field:
          type: string
          description: Nome do campo no qual existe um erro de validação.
          example: name
        validations:
          type: array
          items:
            $ref: '#/components/schemas/MetaValidationsRulesError'
      required:
        - field
    ValidationError:
      title: ValidationError
      type: object
      description: Representa um erro de Validação.
      properties:
        code:
          type: string
          description: Código de erro.
          example: uneditable_entity
        message:
          type: string
          description: Descrição do erro.
          example: description error
        meta:
          type: array
          description: Dados adicionais sobre o erro.
          items:
            $ref: '#/components/schemas/MetaValidationError'
      required:
        - code
    AppTotemSettingsBody:
      title: Totem Settings
      type: object
      description: Configurações do aplicativo "Totem".
      properties:
        server_id:
          type: integer
          description: ID do servidor
          default: null
          example: 69
        customization_id:
          type: integer
          description: ID da configuração de mídia para o totem
          default: null
          example: 1
        sub_type:
          type: string
          description: Subtipo do totem
          default: default
          example: default
          enum:
            - default
            - selfcheckout
            - selfcheckout_hybrid
            - selfcheckout_ordersheet
            - tapp
        theme:
          type: object
          description: Configurações de tema
          properties:
            primary_color:
              type: string
              description: Cor primária do tema
              default: '#236CFF'
              example: '#CCCCCC'
            secondary_color:
              type: string
              description: Cor secundária do tema
              default: '#000000'
              example: '#EEEEEE'
        welcome_screen:
          type: object
          description: Configurações da tela de boas-vindas
          properties:
            welcome_message:
              type: string
              description: Mensagem de boas-vindas
              default: Seja bem-vindo(a)! Toque na tela para começar seu atendimento.
              example: Bem vindo
            finish_message:
              type: string
              description: Mensagem de finalização
              default: Tudo certo! Seu atendimento foi concluído com sucesso.
              example: Obrigado
        use_params:
          type: object
          description: Parâmetros de uso e configurações de interface
          properties:
            is_request_table_identifier:
              type: boolean
              description: Solicitar número da mesa no início do pedido
              example: true
              default: false
            is_hidden_consumption_location:
              type: boolean
              description: Ocultar seleção de local de consumo
              example: true
              default: false
            is_hidden_sale_number:
              type: boolean
              description: Ocultar número da venda na impressão
              example: true
              default: false
            is_accept_discount_voucher:
              type: boolean
              description: Aceitar cupom de desconto
              example: true
              default: false
            is_display_quantity_selector:
              type: boolean
              description: Exibir seletor de quantidade no catálogo de produtos
              example: true
              default: false
            is_show_price_with_discount:
              type: boolean
              description: Mostrar preço com desconto
              example: true
              default: false
        fiscal:
          type: object
          description: Configurações fiscais
          properties:
            is_generate_invoice:
              type: boolean
              description: Gerar Nota Fiscal no Totem
              example: true
              default: false
            generate_invoice_type:
              type: string
              description: |
                Selecione o tipo de emissão de Nota Fiscal

                Campo obrigatório se `is_generate_invoice` for `true`.
              enum:
                - online
                - contingency
              example: online
              default: online
            is_document_in_invoice:
              type: boolean
              description: CPF/CNPJ na Nota
              example: true
              default: false
            is_send_invoice_to_email:
              type: boolean
              description: Enviar nota fiscal por e-mail (Sem impressão automática)
              example: false
              default: false
        peripherals:
          type: object
          description: Configurações de periféricos
          properties:
            sat_id:
              type: integer
              description: ID do SAT
              example: 20
            print_point_id:
              type: integer
              description: Ponto de impressão do totem
              example: 1
            print_point_expedition_id:
              type: integer
              description: Ponto de impressão da expedição
              example: 1
    AppTerminalSettingsBody:
      title: Terminal Settings
      type: object
      description: Configurações do aplicativo PDV Desktop.
      properties:
        server_id:
          type: integer
          description: ID do servidor associado ao PDV Desktop.
          example: 69
        modules:
          type: array
          description: Lista de módulos disponíveis no PDV Desktop.
          items:
            type: object
            properties:
              kind:
                type: string
                enum:
                  - PASSWORD_PANEL
                  - KDS
                  - CASHIER
                  - CUSTOMER_SERVICE
                description: |
                  Tipo do módulo do PDV Desktop.

                  - `PASSWORD_PANEL`: Painel de Senha
                  - `KDS`: KDS (Kitchen Display System)
                  - `CASHIER`: Balcão
                  - `CUSTOMER_SERVICE`: Atendimento de Mesa
                example: CASHIER
              settings:
                type: object
                description: >-
                  Configurações específicas do módulo (obrigatório quando
                  kind=KDS).
                properties:
                  kds_id:
                    type: integer
                    description: ID do KDS (obrigatório quando kind=KDS).
                    example: 1
            required:
              - kind
        print_point_redirects:
          type: array
          description: Lista de redirecionamentos de pontos de impressão.
          items:
            type: object
            properties:
              from_id:
                type: integer
                description: ID do ponto de impressão origem.
                example: 1
              to_id:
                type: integer
                description: ID do ponto de impressão destino.
                example: 2
            required:
              - from_id
              - to_id
        peripherals:
          type: object
          description: Configurações de periféricos do PDV Desktop.
          properties:
            sat_id:
              type: integer
              description: ID do equipamento SAT associado ao PDV Desktop.
              example: 19
    AppServerSettingsBody:
      title: Server Settings
      type: object
      description: Configurações do aplicativo Servidor.
      properties:
        ip:
          type: string
          description: Endereço IP do servidor.
          format: ipv4
          example: 192.168.0.123
    AppOrdersheetCheckSettingsBody:
      title: Ordersheet-Check Settings
      type: object
      description: Configurações do aplicativo Conferência de Comanda.
    AppPosASettingsBody:
      title: POS-A Settings
      type: object
      description: Configurações do aplicativo PDV Android.
      properties:
        server_id:
          type: integer
          description: ID do servidor associado ao PDV Android.
          example: 69
        sat_id:
          type: integer
          description: ID do equipamento SAT associado ao PDV Android.
          example: 19
    AppMobileAppSettingsBody:
      title: Mobile-App Settings
      type: object
      description: Configurações do aplicativo "Atendimento Mobile".
      properties:
        print_point_redirects:
          type: array
          description: Lista de redirecionamentos de pontos de impressão.
          items:
            type: object
            properties:
              from_id:
                type: integer
                description: ID do ponto de impressão origem.
                example: 1
              to_id:
                type: integer
                description: ID do ponto de impressão destino.
                example: 2
            required:
              - from_id
              - to_id
    AppDigitalMenuSettingsBody:
      title: Digital-Menu Settings
      type: object
      description: Configurações do aplicativo "Cardápio Digital".
      properties:
        customization_id:
          type: integer
          description: ID da configuração de mídia para o cardápio digital
          default: null
          example: 1
        theme:
          type: object
          description: Configurações de tema
          properties:
            primary_color:
              type: string
              description: Cor primária do tema
              default: '#236CFF'
              example: '#CCCCCC'
            secondary_color:
              type: string
              description: Cor secundária do tema
              default: '#000000'
              example: '#26413C'
        welcome_screen:
          type: object
          description: Configurações da tela de boas-vindas
          properties:
            welcome_message:
              type: string
              description: Mensagem de boas-vindas
              default: Seja bem-vindo(a)! Toque na tela para começar seu atendimento.
              example: Bem vindo
            finish_message:
              type: string
              description: Mensagem de finalização
              default: Tudo certo! Seu atendimento foi concluído com sucesso.
              example: Obrigado
        use_params:
          type: object
          description: Parâmetros de uso e configurações de interface
          properties:
            is_hidden_button_close_account:
              type: boolean
              description: Define se o botão de "Fechar conta" está oculto
              example: true
              default: false
            is_hidden_button_waiter_call:
              type: boolean
              description: Define se o botão de "Chamar garçom" está oculto
              example: false
              default: false
    AppImage:
      type: object
      title: Imagem do aplicativo ConnectPlug.
      description: Dados da imagem do aplicativo.
      properties:
        image_url:
          type: string
          format: url
          description: URL da imagem principal (logo) do aplicativo.
          example: https://images.connectplug.com.br/4f01c1252eea.jpg
      required:
        - image_url
    AppProductCategoryHierarchy:
      type: object
      title: Hierarquia de categorias em um aplicativo
      description: Representa a hierarquia de categorias em um aplicativo.
      properties:
        id:
          type: integer
          description: Identificador único da categoria.
          example: 123
        name:
          type: string
          maxLength: 120
          minLength: 1
          description: Nome da categoria.
          example: Categoria
          readOnly: true
        subcategories:
          type: array
          description: Categorias filhas da categoria.
          items:
            type: object
            title: Hierarquia de categorias em um aplicativo
            description: Representa a hierarquia de cate em um aplicativo.
            properties:
              id:
                type: integer
                description: Identificador único da categoria.
                example: 123
              name:
                type: string
                maxLength: 120
                minLength: 1
                description: Nome da categoria.
                example: Categoria
                readOnly: true
              subcategories:
                type: array
                description: Categorias filhas da categoria.
                items:
                  $ref: '#/components/schemas/AppProductCategoryHierarchy'
    AppProductCategory:
      type: object
      title: Categoria do produto em um aplicativo
      description: Representa a categoria do produto em um aplicativo.
      properties:
        id:
          type: integer
          description: Identificador único da categoria.
          example: 123
        name:
          type: string
          maxLength: 120
          minLength: 1
          description: Nome da categoria.
          example: Categoria
          readOnly: true
        next_category_id:
          type: integer
          writeOnly: true
          description: Identificador único da categoria.
          example: 124
        next_category:
          type: object
          title: Pŕoxima categoria do produto em um aplicativo
          description: Representa a categoria do produto em um aplicativo.
          readOnly: true
          properties:
            id:
              type: integer
              description: Identificador único da categoria.
              readOnly: true
              example: 123
            name:
              type: string
              maxLength: 120
              minLength: 1
              description: Nome da categoria.
              example: Próxima Categoria
        category_hierarchy:
          $ref: '#/components/schemas/AppProductCategoryHierarchy'
          readOnly: true
        position:
          type: integer
          description: Posição desta categoria no aplicativo.
          example: 1
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
      required:
        - id
        - name
        - position
    ProductSlim:
      type: object
      title: Produto
      description: Representa um Produto.
      readOnly: true
      properties:
        id:
          type: integer
          description: >
            Identificador único do produto.


            Você pode localizar os IDs dos produtos no _endpoint_ de [lista de
            produtos](#tag/Products/operation/get-products).
          example: 123
        name:
          type: string
          description: Nome do produto.
          example: Banana
          readOnly: true
        sku:
          type: string
          description: Código do produto.
          example: COD001
          readOnly: true
        category:
          type: object
          description: Categoria do produto.
          readOnly: true
          properties:
            id:
              type: integer
              description: Identificador único da categoria.
              example: 1
            name:
              type: string
              minLength: 1
              maxLength: 120
              description: Nome da categoria.
              example: Nome da categoria
        image_url:
          type:
            - 'null'
            - string
          description: URL da imagem principal do produto.
          format: url
          readOnly: true
          example: https://images.connectplug.com.br/4f01c1252eea.jpg
        stock_settings:
          type: object
          description: Configurações de estoque do produto.
          properties:
            is_stock_control:
              type: boolean
              description: Se este produto possui um controle de estoque.
              example: true
        unitary_value:
          description: >
            Preço do produto.


            Esse campo pode ser opcional quando o produto for do tipo
            "**Combo**".
          $ref: '#/components/schemas/Money'
      required:
        - id
        - name
        - sku
        - unitary_value
    ProductAppShift:
      type: object
      title: Turnos do horário de disponibilidade.
      description: Representa um turno de horário de disponibilidade.
      properties:
        week_day:
          type: string
          description: |
            Dia da semana do turno de horário de disponibilidade.

            - `sunday`: Domingo;
            - `monday`: Segunda-feira;
            - `tuesday`: Terça-feira;
            - `wednesday`: Quarta-feira;
            - `thursday`: Quinta-feira;
            - `friday`: Sexta-feira;
            - `saturday`: Sábado;
          example: tuesday
        start:
          type: string
          description: >-
            Hora de início do turno de horário de disponibilidade no formato
            `H:i`.
          example: '09:00'
        end:
          type: string
          description: Hora de fim do turno de horário de disponibilidade no formato `H:i`.
          example: '18:00'
      required:
        - week_day
        - start
        - end
    ProductOptionType:
      type: object
      title: Opção de Produto
      description: >-
        Representa a configuração sobre as variações, grades e opções do
        produto.
      readOnly: true
      properties:
        type:
          type: string
          description: |
            Tipo de opção do produto.

            - `simple`: Produto sem variações ou grades.
            - `composition`: Produto com variações.
            - `grid`: Produto com grades.
          example: simple
          enum:
            - simple
            - composition
            - grid
        count:
          type: integer
          description: >
            Quantidade de opções disponíveis para este produto.


            Para cada `type` temos:


            - `simple`: Sempre será `0`

            - `composition`: Será a quantidade de variações disponíveis para
            este produto.

            - `grid`: Será a quantidade de grades disponíveis para este produto.
          example: 0
          readOnly: true
    AppProduct:
      type: object
      title: Representa um produto de um aplicativo
      description: Representa um produto de um aplicativo.
      properties:
        product:
          description: Informações sobre o produto.
          $ref: '#/components/schemas/ProductSlim'
        id:
          type: integer
          description: >
            Identificador único do produto.


            Você pode localizar os IDs dos produtos no _endpoint_ de [lista de
            produtos](#tag/Products/operation/get-products).
          example: 123
          writeOnly: true
        category:
          type: object
          title: Categoria de um produto
          description: Representa uma categoria de um produto.
          readOnly: true
          properties:
            id:
              type: integer
              description: Identificador único do produto.
              example: 123
            name:
              type: string
              description: Nome do aplicativo.
              example: Totem
        position:
          type: integer
          description: Posição deste produto que irá aparecer no aplicativo.
          example: 1
        shifts:
          type: array
          description: Lista de horário que está disponível este produto no aplicativo.
          items:
            $ref: '#/components/schemas/ProductAppShift'
        category_id:
          type: integer
          description: >
            Identificador único da categoria de um produto.


            Você pode localizar os IDs das categorias de produto no _endpoint_
            de [lista de categorias](#tag/Categories/operation/get-categories).
          example: 456
          writeOnly: true
        is_available_for_sale:
          type: boolean
          description: >-
            Indica se está disponível para a venda ou não deste produto no
            aplicativo.
          example: true
        option_type:
          description: Informações sobre as opções do produto relacionado ao aplicativo.
          $ref: '#/components/schemas/ProductOptionType'
        unitary_value:
          readOnly: true
          description: |
            Preço do produto vinculado ao aplicativo.
          $ref: '#/components/schemas/Money'
        created_at:
          type: string
          description: Data da última criação do produto no aplicativo.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização do produto no aplicativo.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
      required:
        - id
        - position
    ProductAppOption:
      type: object
      title: Opção de um produto no aplicativo
      description: Representa uma opção de um produto no aplicativo.
      properties:
        id:
          type: integer
          description: Identificador único da opção.
          example: 123
        name:
          type: string
          description: Nome da opção.
          example: Branca
          readOnly: true
        image:
          readOnly: true
          type: string
          description: URL da imagem da opção.
          example: https://example.com/image.jpg
        is_available_for_sale:
          type: boolean
          description: >-
            Indica se está disponível para a venda ou não deste produto no
            aplicativo.
          example: true
        order:
          type: integer
          description: Ordem da opção.
          example: 1
        attribute:
          type: object
          title: Atributo de um produto
          description: Representa um atributo de um produto.
          readOnly: true
          properties:
            id:
              type: integer
              description: Identificador único do atributo.
              example: 123
            name:
              type: string
              description: Nome do atributo.
              example: Cor
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
      required:
        - id
    ProductAppGridOption:
      type: object
      title: Item da grade de preço
      description: Representa um item (opção) da grade de preço.
      properties:
        id:
          type: integer
          description: Identificador único da opção.
          example: 123
        name:
          type: string
          description: Nome da opção.
          example: Opção 1
        position:
          type: integer
          description: Posição do item na grade de preço.
          minimum: 0
          example: 0
    ProductAppGrid:
      type: object
      title: Grid de um produto no aplicativo
      description: Representa uma grid de um produto no aplicativo.
      properties:
        id:
          type: integer
          description: Identificador único da grid.
          example: 123
        is_available_for_sale:
          type: boolean
          description: >-
            Indica se está disponível para a venda ou não deste produto no
            aplicativo.
          example: true
        order:
          type: integer
          description: Ordem da grid.
          example: 1
        image:
          readOnly: true
          type: string
          description: URL da imagem da grid.
          example: https://example.com/image.jpg
        options:
          readOnly: true
          type: array
          description: Lista de opções da grade.
          items:
            $ref: '#/components/schemas/ProductAppGridOption'
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
      required:
        - id
    CardContractAlreadyAssociatedException:
      title: Card Contract Already Associated Exception
      type: object
      description: >-
        O erro ocorre quando é realizado a tentiva de associar mais de um
        contrato de cartão no mesmo app.
      properties:
        code:
          type: string
          description: bad_request
          example: bad_request
        message:
          type: string
          description: There is already a card contract associated with this app.
          example: There is already a card contract associated with this app.
        meta:
          type: array
          description: '[]'
          example: []
      required:
        - code
    AppCredentials:
      type: object
      description: Credenciais de acesso para aplicativos que suportam autenticação via PIN
      required:
        - login_code
        - pin
        - app
        - updated_at
      properties:
        login_code:
          type: integer
          description: Código de login da empresa
          minimum: 10000
          maximum: 99999
          example: 54321
        pin:
          type: object
          description: Informações do PIN gerado
          required:
            - pin
            - expirated_at
          properties:
            pin:
              type: integer
              description: PIN de 6 dígitos para autenticação
              minimum: 100000
              maximum: 999999
              example: 654321
            expirated_at:
              type: string
              format: date-time
              description: Data/hora de expiração do PIN (ISO 8601)
              example: '2024-01-15T10:32:30-03:00'
        app:
          type: object
          description: Informações básicas do aplicativo
          required:
            - id
            - name
            - type
            - key
          properties:
            id:
              type: integer
              description: ID do aplicativo
              example: 1
            name:
              type: string
              description: Nome do aplicativo
              example: Totem Principal
            type:
              type: string
              description: Tipo do aplicativo
              enum:
                - TOTEM
                - DIGITAL-MENU
                - DESKTOP
                - POS-A
                - MOBILE-APP
                - ORDERSHEET-CHECK
                - REALTIME-MANAGEMENT
                - KDS-ANDROID
                - POS-TEF
                - CONFERENCE-APP
              example: TOTEM
            key:
              type: string
              description: Chave de integração do aplicativo
              example: app-key-12345
        updated_at:
          type: string
          format: date-time
          description: Data/hora da última atualização das credenciais
          example: '2024-01-15T10:30:00-03:00'
    ErrorAppTypeNotSupported:
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          description: Erro quando o tipo de aplicativo não suporta geração de credenciais
          properties:
            code:
              type: string
              enum:
                - forbidden
              example: forbidden
            message:
              type: string
              example: >-
                This application type does not support access credentials
                generation.
            meta:
              type: array
              items:
                type: object
                properties:
                  field:
                    type: string
                    example: app_type
                  validations:
                    type: array
                    items:
                      type: object
                      properties:
                        type:
                          type: string
                          example: Invalid
                        value:
                          type: array
                          items:
                            type: string
                          example:
                            - SERVER
    ErrorLicenseInUse:
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          description: Erro quando a licença já está sendo usada por outro dispositivo
          properties:
            code:
              type: string
              enum:
                - forbidden
              example: forbidden
            message:
              type: string
              example: >-
                This license is already in use by another device. Only one
                device can use the credentials at a time.
            meta:
              type: array
              items:
                type: object
                properties:
                  field:
                    type: string
                    example: license_authorization
                  validations:
                    type: array
                    items:
                      type: object
                      properties:
                        type:
                          type: string
                          example: Invalid
                        value:
                          type: array
                          items:
                            type: string
                          example:
                            - in_use
    NotFound:
      description: Not Found
    ErrorAppConfigNotFound:
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          description: >-
            Erro quando a configuração do aplicativo não é encontrada na API
            Master
          properties:
            code:
              type: string
              enum:
                - not_found
              example: not_found
            message:
              type: string
              example: Application configuration not found in Master API.
            meta:
              type: array
              items:
                type: object
                properties:
                  field:
                    type: string
                    example: app_company
                  validations:
                    type: array
                    items:
                      type: object
                      properties:
                        type:
                          type: string
                          example: NotFound
                        value:
                          type: array
                          items:
                            type: string
                          example:
                            - app-key-missing
    CardContractinstallment:
      type: object
      title: Configurações de parcelamento do método de pagamento
      description: Representa uma configuração de parcelamento do método de pagamento.
      properties:
        min:
          type: integer
          description: Quantidade mínima de parcelas.
          minimum: 1
          maximum: 999
          example: 1
        max:
          type: integer
          description: Quantidade máxima de parcelas.
          minimum: 1
          maximum: 999
          example: 5
        days_between:
          type: integer
          description: >-
            Dias entre as parcelas. Deve estar presente se e somente se o `max`
            seja maior que 1.
          example: 30
      required:
        - min
        - max
    CardBrand:
      type: object
      title: Bandeira de cartão
      description: Representa uma bandeira de cartão.
      properties:
        id:
          type: integer
          description: Identificador único da bandeira.
          readOnly: true
          example: 123
        name:
          type: string
          maxLength: 80
          description: Nome da bandeira.
          example: Master
        icon:
          type: string
          description: ícone da bandeira.
          example: mastercard.png
        nfe_code:
          type: string
          description: Código da NFe da bandeira.
          example: '02'
    CardContractPaymentMethodRule:
      type: object
      title: Regra de calculo de um método de pagamento
      description: Representa uma regra de cálculo para um método de pagamento
      properties:
        installment:
          $ref: '#/components/schemas/CardContractinstallment'
        card_brand:
          description: >
            Bandeira do cartão.


            Caso `null`, significa que essa regra de cálculo se aplica a todos
            as outras bandeiras aceitas

            pelo método de pagamento, ou que o método de pagamento não aceita
            bandeiras.
          $ref: '#/components/schemas/CardBrand'
        rate:
          type: number
          description: Taxa(%) da parcela.
          format: decimal
          example: 0.85
        fare:
          description: Tarifa da parcela.
          $ref: '#/components/schemas/Money'
        days_first_payment:
          type: integer
          description: Dias para o 1º pagamento.
          example: 15
      required:
        - installment
        - rate
        - fare
        - days_first_payment
    AppPaymentMethod:
      type: object
      title: Método de pagamento do aplicativo
      description: Representa um método de pagamento de um aplicativo.
      properties:
        id:
          type: integer
          description: Identificador único do método de pagamento.
          example: 1
        name:
          type: string
          description: Nome do método de pagamento.
          example: Dinheiro
        type:
          type: string
          description: Tipo do método de pagamento.
          enum:
            - MONEY
            - CREDIT
            - DEBIT
            - OTHERS
          example: MONEY
        installment_settings:
          type: array
          description: Configurações de parcelamento do método de pagamento.
          items:
            $ref: '#/components/schemas/CardContractPaymentMethodRule'
        fiscal_code:
          type: string
          description: Código fiscal do método de pagamento.
          example: '01'
        is_installment_allowed:
          type: boolean
          description: Indica se o método de pagamento permite parcelamento.
          example: false
        created_at:
          type: string
          description: Data da criação.
          format: date-time
          readOnly: true
          example: '2025-06-23T19:15:27.000000Z'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2025-06-23T19:15:27.000000Z'
      required:
        - id
        - name
        - type
        - installment_settings
        - fiscal_code
        - is_installment_allowed
        - created_at
        - updated_at
    GetAppPaymentMethodsResponse:
      type: object
      title: Resposta da listagem de métodos de pagamento do aplicativo
      description: >-
        Representa a resposta da listagem de métodos de pagamento de um
        aplicativo.
      properties:
        data:
          type: object
          properties:
            app_payment_methods:
              type: array
              description: Lista de métodos de pagamento do aplicativo.
              items:
                $ref: '#/components/schemas/AppPaymentMethod'
          required:
            - app_payment_methods
        meta:
          $ref: '#/components/schemas/MetaPagination'
      required:
        - data
        - meta
    Bank:
      type: object
      title: Banco
      description: Representa um banco.
      properties:
        id:
          type: integer
          description: Identificador único do banco.
          readOnly: true
          example: 123
        name:
          type: string
          maxLength: 80
          description: Nome da conta bancária
          example: ConnectPlug Bank
        code:
          type: integer
          description: Código do banco
          example: 10
        image:
          type: string
          description: URL da imagem do banco
          example: https://connectplug.com.br/images/banks/10.png
    RelationCompany:
      type: object
      description: Dados da empresa relacionado.
      properties:
        id:
          type: integer
          description: Identificador único da empresa
          example: 1234
        name:
          type: string
          description: Nome fantasia da empresa.
          example: CPlug
        company_name:
          type:
            - string
            - 'null'
          description: Razão social da empresa.
          example: CPlug Tecnologia da Informação
    BankAccount:
      type: object
      title: Conta Bancária
      description: Representa uma conta bancária.
      properties:
        id:
          type: integer
          description: Identificador único da conta bancária.
          readOnly: true
          example: 123
        name:
          type: string
          maxLength: 80
          description: Nome da conta bancária
          example: ConnectPlug Bank
        initial_date:
          type: string
          description: Data.
          format: date
          example: '2025-01-30'
        initial_value:
          description: Valor inicial da conta bancária
          $ref: '#/components/schemas/Money'
        bank:
          $ref: '#/components/schemas/Bank'
        deleted:
          type: boolean
          description: Indica se está apagado ou não.
          example: false
        companies:
          type: array
          description: Lista de empresas que permite visualizar.
          items:
            $ref: '#/components/schemas/RelationCompany'
        first_transaction_date:
          type: string
          description: Data da primeira transação na conta bancária.
          format: date
          example: '2025-01-30'
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    ByCompany:
      type: array
      description: >
        Id da Empresa (Company). 


        Por padrão é considerado a empresa informado no header em
        CPlug-Company-Id.


        Você pode localizar os IDs das empresas no _endpoint_ de [listagem de
        empresas](#tag/Companies/operation/get-companies).
      items:
        type: integer
        example: 1
      example:
        - 1
        - 2
        - 3
    BankAccountRequest:
      type: object
      title: Conta Bancária
      description: Representa uma conta bancária.
      properties:
        name:
          type: string
          maxLength: 80
          description: Nome da conta bancária
          example: ConnectPlug Bank
        initial_date:
          type: string
          description: Data.
          format: date
          example: '2025-01-30'
        initial_value:
          description: Valor inicial da conta bancária
          $ref: '#/components/schemas/Money'
        bank_id:
          type: integer
          description: Identificador único do banco.
          example: 123
        companies:
          $ref: '#/components/schemas/ByCompany'
      required:
        - name
        - initial_date
        - initial_value
        - bank_id
        - companies
    BankAccountRequestUpdate:
      type: object
      title: Conta Bancária
      description: Representa uma conta bancária.
      properties:
        name:
          type: string
          maxLength: 80
          description: Nome da conta bancária
          example: ConnectPlug Bank
        initial_date:
          type: string
          description: Data.
          format: date
          example: '2025-01-30'
        bank_id:
          type: integer
          description: Identificador único do banco.
          example: 123
        companies:
          $ref: '#/components/schemas/ByCompany'
      required:
        - name
        - initial_date
        - bank_id
        - companies
    UserSettings:
      type: object
      properties:
        notifications:
          type: object
          description: Configurações de notificações.
          properties:
            receive_financial_emails:
              type: boolean
              description: Indica se o usuário pode receber e-mails financeiros.
              example: true
            receive_contract_emails:
              type: boolean
              description: Indica se o usuário pode receber e-mails de contratos de planos.
              example: false
        pos:
          type: object
          description: Configurações do PDV.
          properties:
            show_in_list_on_open:
              type: boolean
              description: Indica se o usuário pode aparecer na listagem ao abrir o PDV.
              example: true
            show_in_sellers_list:
              type: boolean
              description: Indica se o usuário pode aparecer na lista de vendedores do PDV.
              example: true
    User:
      type: object
      title: Usuário
      description: Representa um usuário.
      properties:
        id:
          type: integer
          description: ID do usuário.
          example: 123
        name:
          type: string
          description: Nome do usuário.
          example: Fulando usuário
        username:
          type: string
          description: Nome de usuário do usuário.
          example: fulano
          readOnly: true
        email:
          type: string
          description: E-mail do usuário.
          example: fulano@email.com
        profile:
          type: object
          description: Perfil do usuário.
          properties:
            id:
              type: integer
              description: Identificador único do perfil.
              example: 1
            name:
              type: string
              description: Nome do perfil.
              example: Administrador
            description:
              type: string
              description: Descrição do perfil.
              example: Administrador do sistema
        settings:
          type: object
          description: Configurações do usuário.
          $ref: '#/components/schemas/UserSettings'
        companies:
          type: array
          description: Lista de empresas que permite visualizar.
          items:
            $ref: '#/components/schemas/RelationCompany'
    BankAccountHistoryTransaction:
      type: object
      title: Transação na Conta Bancária
      description: Representa uma transação na conta bancária.
      properties:
        value:
          description: Valor da transação.
          $ref: '#/components/schemas/Money'
        type:
          type: string
          example: new
          description: |
            Tipo da transação.

            - `new`: Nova
            - `update_value`: Atualização valor
            - `update_date`: Atualização data
            - `cancelled`: Cancelamento
            - `disabled`: Exclusão
            - `update_bank`: Alteração conta
            - `grouped`: Agrupamento
            - `restored`: Restauração
          enum:
            - new
            - update_value
            - update_date
            - cancelled
            - disabled
            - update_bank
            - grouped
            - restored
        due_date:
          type: string
          description: Data de vencimento.
          format: date
          example: '2025-01-30'
        payment_date:
          type: string
          description: Data de pagamento.
          format: date
          example: '2025-01-30'
        description:
          description: Descrição da transação.
          type: string
          example: Pagamento de conta de luz
        user:
          $ref: '#/components/schemas/User'
        account_plan:
          type: object
          title: Plano de conta
          description: Representa um plano de conta.
          properties:
            id:
              type: integer
              description: Identificador único do plano de conta.
              example: 123
            name:
              type: string
              example: Despesas Administrativas
        is_transfer:
          type: boolean
          description: Indica se a transação é uma transferência.
          example: false
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    BankAccountBalanceByDate:
      type: array
      description: |
        Histórico de saldos organizados por data.
      items:
        type: object
        properties:
          date:
            type: string
            format: date
            description: Data do saldo no formato YYYY-MM-DD.
            example: '2025-07-04'
          balance:
            $ref: '#/components/schemas/Money'
            description: Saldo da conta na data especificada.
        required:
          - date
          - balance
      example:
        - date: '2025-07-04'
          balance:
            amount: 11100
            currency: BRL
        - date: '2025-07-02'
          balance:
            amount: 100
            currency: BRL
    BankAccountHistory:
      type: object
      title: Histórico de Conta Bancária
      description: Representa um histórico de conta bancária.
      properties:
        bank_account_transactions:
          type: array
          description: Histórico de transações da conta bancária.
          items:
            $ref: '#/components/schemas/BankAccountHistoryTransaction'
        balance_by_date:
          $ref: '#/components/schemas/BankAccountBalanceByDate'
        current_balance:
          description: Saldo atual da conta bancária.
          $ref: '#/components/schemas/Money'
        bank_account:
          $ref: '#/components/schemas/BankAccount'
    FinancialGroupSlim:
      type: object
      title: Dados do Grupo financeiro
      description: Representa um grupo financeiro.
      properties:
        id:
          type: integer
          description: Identificador único do grupo financeiro.
          example: 123
          readOnly: true
        name:
          type: string
          description: Nome do grupo financeiro.
          example: Receitas Operacionais
        type:
          type: string
          enum:
            - income
            - expense
          description: |
            Tipo da movimentação financeira.

            Exemplo:

              - `income`: Receita
              - `expense`: Despesa
          example: expense
        order:
          type: integer
          description: Ordem que este grupo será ordenado.
          example: 1
    FinancialTransactionAccountPlan:
      type: object
      title: Plano de conta associado com a movimentação financeira
      description: Representa um plano de conta associado a uma movimentação financeira.
      properties:
        account_plan_id:
          type: integer
          description: Identificador único do plano de conta.
          example: 123
          writeOnly: true
        account_plan:
          type: object
          description: Dados do plano de conta.
          readOnly: true
          properties:
            id:
              type: integer
              description: Identificador único do plano de conta.
              example: 123
            name:
              type: string
              description: Nome do plano de conta.
              example: Plano de conta 1
            financial_group:
              $ref: '#/components/schemas/FinancialGroupSlim'
        cost_center_id:
          type: integer
          description: Identificador único do centro de custo.
          example: 123
          writeOnly: true
        cost_center:
          type: object
          description: Dados do centro de custo associado a uma movimentação financeira.
          readOnly: true
          properties:
            id:
              type: integer
              description: Identificador único do centro de custo.
              example: 123
            name:
              type: string
              description: Nome do centro de custo.
              example: Centro de custo 1
        value:
          description: >
            Valor referente ao plano de conta na movimentação financeira.


            Exemplo: 

            - Se uma movimentação financeira for de R$ 100,00, o valor do plano
            de conta seria 100.00.

            - Se uma movimentação financeira for de R$ 100,00, houver 2 planos
            de contas divididos em 50% entre eles, então o valor do plano de
            contas seria 50.00 para cada.
          $ref: '#/components/schemas/Money'
      required:
        - account_plan_id
        - value
    FinancialTransactionPayment:
      type: object
      title: Método de pagamento da movimentação financeira
      description: Representa um Método de pagamento.
      properties:
        payment_method_id:
          type: integer
          description: Identificador único da um método de pagamento.
          example: 123
          writeOnly: true
        payment_method:
          type: object
          description: Dados do método de pagamento.
          readOnly: true
          properties:
            id:
              type: integer
              description: Identificador do método de pagamento.
              example: 123
            name:
              type: string
              description: Nome do método de pagamento.
              example: Cartão de Crédito
        card_brand_id:
          type: integer
          description: Identificador da bandeira do cartão.
          example: 123
          writeOnly: true
        card_brand:
          type: object
          description: Dados da bandeira do cartão.
          readOnly: true
          properties:
            id:
              type: integer
              description: Identificador da bandeira do cartão.
              example: 123
            name:
              type: string
              description: Nome da bandeira do cartão.
              example: Visa
        value:
          description: Valor do pagamento.
          $ref: '#/components/schemas/Money'
        payment_date:
          type: string
          description: Data do pagamento.
          example: '2022-01-01'
    BankAccountSlim:
      type: object
      title: Conta Bancária
      description: Representa uma conta bancária.
      properties:
        id:
          type: integer
          description: Identificador único da conta bancária.
          readOnly: true
          example: 123
        name:
          type: string
          maxLength: 80
          description: Nome da conta bancária
          example: ConnectPlug Bank
        bank:
          $ref: '#/components/schemas/Bank'
        companies:
          type: array
          description: Lista de empresas que permite visualizar.
          items:
            $ref: '#/components/schemas/RelationCompany'
    Contact:
      type: object
      description: Dados de contato.
      properties:
        type:
          type: string
          enum:
            - mobile
            - phone
            - email
          description: |
            Indica o tipo do contato.

            - `mobile`: Número de telefone celular
            - `phone`: Número de telefone (fixo ou celular)
            - `email`: E-mail de contato
          example: email
        value:
          type: string
          description: Dados do contato.
          example: joe@example.com
        id:
          type: number
          description: Id do contato na CPlug.
          example: 271
      required:
        - type
        - value
    Address:
      type: object
      description: Dados do endereço
      properties:
        id:
          type: number
          description: id do endereço.
          example: 220
        nickname:
          type: string
          maxLength: 100
          description: Apelido do endereço.
          example: Casa
        type:
          type: string
          enum:
            - default
            - shipping
            - charge
            - other
          description: |
            Tipo do endereço.

            - `default` endereço principal.
            - `shipping` endereço de entrega.
            - `charge` endereço de cobrança.
            - `other` outro tipo de endereço.
          example: default
        street:
          type: string
          maxLength: 100
          description: Nome do logradouro (Rua, Avenida, praça, etc).
          example: Avenida Paulista
        number:
          type: string
          maxLength: 60
          description: Número do logradouro.
          example: 42 A
        city_id:
          type: number
          description: |
            ID da cidade.

            **Obrigatório quando o campo `ibge_code` não for passado.**
          example: 1234
        ibge_code:
          type: string
          maxLength: 7
          description: |
            Código do município segundo IBGE.

            Exemplo: O código do município segundo IBGE é 3550308

            **Obrigatório quando o campo `city_id` não for passado.**
          example: '3550308'
        state:
          readOnly: true
          type: string
          maxLength: 2
          description: Sigla do estado do endereço.
          example: SP
        city:
          readOnly: true
          type: string
          maxLength: 60
          description: Nome da cidade.
          example: São Paulo
        neighborhood:
          type: string
          maxLength: 80
          description: Nome do Bairro.
          example: Bela Vista
        complement:
          type: string
          maxLength: 255
          description: Complemento do endereço.
          example: Apto 2550
        zip_code:
          type: string
          maxLength: 8
          description: CEP do endereço.
          example: '01311000'
      required:
        - type
        - street
    Document:
      type: object
      description: Dados do documento.
      properties:
        type:
          type: string
          enum:
            - cpf
            - rg
            - cnpj
            - ie
            - im
          description: |
            Indica o tipo do documento.

            - `cpf`: CPF Pessoa física
            - `rg`: RG Pessoa física
            - `cnpj`: CNPJ Pessoa jurídica
            - `ie`: Inscrição Estadual Pessoa jurídica
            - `im`: Inscrição Municipal Pessoa jurídica
          example: cpf
        identify:
          type: string
          description: Identificação do documento.
          example: '11144477735'
      required:
        - type
        - identify
    CustomerCategory:
      type: object
      title: Categoria de cliente
      description: Representa uma categoria de Cliente.
      properties:
        id:
          type: integer
          description: Identificador único da categoria de cliente.
          readOnly: true
          example: 123
        name:
          type: string
          minLength: 1
          maxLength: 100
          description: Nome da categoria.
          example: Ouro
        is_wholesale:
          type: boolean
          description: >-
            Indica que todos os clientes vinculados à essa categoria irão pagar
            o valor de atacado dos produtos.
          example: false
        discount_in_percent:
          type: number
          description: >
            Desconto em percentual para a categoria.


            Todos os clientes vinculados à essa categoria receberão o desconto
            informado automáticamente.
          example: 2.5
        deleted:
          type: boolean
          description: Indica se está apagado ou não.
          example: false
          readOnly: true
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    Customer:
      type: object
      title: Cliente
      description: Representa um Cliente.
      properties:
        id:
          type: integer
          description: Identificador único do Cliente.
          readOnly: true
          example: 123
        name:
          type: string
          minLength: 1
          maxLength: 120
          description: Nome do cliente pessoa física ou Razão social.
          example: Nome do Cliente
        type:
          type: string
          enum:
            - individual
            - company
          description: |
            Tipo do cliente.

            - `individual` (Pessoa física)
            - `company` (Pessoa jurídica)
          example: individual
        birthday:
          type: string
          format: date
          description: Data de nascimento do cliente Pessoa física. Formato "YYYY-MM-DD"
          example: '1990-12-25'
        company_name:
          type: string
          maxLength: 120
          description: Razão social da pessoa jurídica.
          example: MyCompany
        notes:
          type: string
          description: Observações do cliente.
          example: Minhas obervações do cliente
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        contacts:
          type: array
          description: Lista de contatos do cliente.
          items:
            $ref: '#/components/schemas/Contact'
        addresses:
          type: array
          description: Lista de endereços do cliente.
          items:
            $ref: '#/components/schemas/Address'
        documents:
          type: array
          description: Lista de documentos do cliente.
          items:
            $ref: '#/components/schemas/Document'
        companies:
          type: array
          description: Lista de empresas que permite visualizar.
          items:
            $ref: '#/components/schemas/RelationCompany'
        category:
          type: object
          $ref: '#/components/schemas/CustomerCategory'
    FinancialTransactionFile:
      type: object
      title: Arquivo de transação financeira
      description: Representa um arquivo de transação financeira.
      properties:
        id:
          type: integer
          description: Identificador do arquivo de transação financeira.
          example: 1
          readOnly: true
        name:
          type: string
          description: Nome do arquivo de transação financeira.
          example: arquivo.csv
          readOnly: true
        url:
          type: string
          description: URL do arquivo de transação financeira.
          example: https://example.com/transacao-financeira-2023-05-24.csv
          readOnly: true
        mime_type:
          type: string
          description: Tipo MIME do arquivo de transação financeira.
          example: text/csv
          readOnly: true
        created_at:
          type: string
          format: date-time
          description: Data de criação do arquivo de transação financeira.
          example: '2023-05-24T15:30:00Z'
          readOnly: true
        updated_at:
          type: string
          format: date-time
          description: Data de última atualização do arquivo de transação financeira.
          example: '2023-05-24T15:35:00Z'
          readOnly: true
    FinancialTransactionIncome:
      type: object
      title: Income
      description: Dados da movimentação financeira (Conta a pagar ou Conta a receber).
      properties:
        id:
          type: string
          description: Identificador único da movimentação financeira.
          readOnly: true
          example: 657870656e73657c3133
        has_grouping:
          type: boolean
          description: >-
            Indica se esta movimentação financeira é um agrupamento de outras
            movimentações financeira.
          readOnly: true
          example: true
        parent_id:
          type: string
          description: Identificador único do grupo da movimentação financeira.
          readOnly: true
          example: 657870656e73657c3133
        type:
          type: string
          enum:
            - income
            - expense
          description: |
            Tipo da movimentação financeira.

            Exemplo:

              - `income`: Receita
              - `expense`: Despesa
          example: expense
        description:
          type: string
          maxLength: 40
          minLength: 1
          description: Descrição da movimentação financeira.
          example: Compra de materia de escritório.
        notes:
          type: string
          maxLength: 255
          description: Notas ou observações sobre a movimentação financeira.
          example: Solicitação interna.
        competence_date:
          type: string
          format: date
          description: Data de competência da movimentação financeira.
          example: '2023-05-15'
        due_date:
          type: string
          format: date
          description: Data de vencimento da movimentação financeira.
          example: '2023-05-15'
        status:
          type: string
          enum:
            - unpaid
            - partially_paid
            - paid
          description: |
            Status da movimentação financeira.

            Exemplo:

              - `unpaid`: Em aberta ou não pago
              - `partially_paid`: Pago parcialmente
              - `paid`: Pago
          example: paid
          readOnly: true
        value:
          description: Valor monetário da movimentação financeira.
          $ref: '#/components/schemas/Money'
        discount:
          description: Valor de desconto movimentação financeira.
          $ref: '#/components/schemas/Money'
        interest:
          description: Valor de acréscimo/juros/taxa da movimentação financeira.
          $ref: '#/components/schemas/Money'
        total:
          description: Valor total da movimentação financeira.
          $ref: '#/components/schemas/Money'
          readOnly: true
        account_plan_descriptions:
          type: array
          items:
            $ref: '#/components/schemas/FinancialTransactionAccountPlan'
          description: Lista de planos de contas associados à movimentação financeira.
        payments:
          type: array
          items:
            $ref: '#/components/schemas/FinancialTransactionPayment'
          description: Lista de pagamentos associados à movimentação financeira.
        bank_account_id:
          type: integer
          description: >-
            Identificador único da conta bancária associada à movimentação
            financeira.
          example: 1
          writeOnly: true
        bank_account:
          $ref: '#/components/schemas/BankAccountSlim'
          description: Dados da conta bancária associada à movimentação financeira.
          readOnly: true
        customer_id:
          type: integer
          description: Identificador único do cliente associado à movimentação financeira.
          writeOnly: true
          example: 1
        customer:
          readOnly: true
          description: Dados do cliente associado à movimentação financeira.
          $ref: '#/components/schemas/Customer'
        files:
          type: array
          items:
            $ref: '#/components/schemas/FinancialTransactionFile'
          description: Lista de arquivos associados à movimentação financeira.
          readOnly: true
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
      required:
        - type
        - value
        - description
        - due_date
        - competence_date
        - account_plan_descriptions
    Supplier:
      type: object
      description: >-
        Representa uma pessoa jurídica ou pessoa física que fornece mercadorias
        ou serviço
      properties:
        id:
          type: integer
          description: Identificador único do Fornecedor.
          readOnly: true
          example: 123
        name:
          type: string
          minLength: 1
          maxLength: 120
          description: Nome do fornecedor pessoa física ou Razão social.
          example: Nome do Fornecedor
        type:
          type: string
          enum:
            - individual
            - company
          description: |
            Tipo do fornecedor.

            - `individual` (Pessoa física)
            - `company` (Pessoa jurídica)
          example: individual
        company_name:
          type: string
          maxLength: 120
          description: Razão social da pessoa jurídica.
          example: MyCompany
        documents:
          type: array
          description: Lista de documentos do fornecedor.
          items:
            $ref: '#/components/schemas/Document'
        founding_date:
          type: string
          format: date
          description: Data da fundação da empresa. Formato "YYYY-MM-DD"
          example: '2016-01-15'
        birthday:
          type: string
          format: date
          description: >-
            Data de nascimento do fornecedor, caso ele não seja uma pessoa
            jurídica. Formato "YYYY-MM-DD"
          example: '1990-12-25'
        inscricao_suframa:
          type: string
          maxLength: 9
          description: >-
            Número de identificação e controle gerado por ocasião do
            cadastramento e vinculado a cada pessoa jurídica ou física, devendo
            ser utilizada exclusivamente para a viabilização dos serviços
            prestados pela SUFRAMA
          example: '123456789'
        notes:
          type: string
          description: Observações relacionadas ao fornecedor
          example: Uma anotação sobre o fornecedor
        address:
          description: Endereço do fornecedor
          $ref: '#/components/schemas/Address'
        contacts:
          description: Contato do fornecedor
          $ref: '#/components/schemas/Contact'
        companies:
          type: array
          description: Lista de empresas que permite visualizar
          items:
            $ref: '#/components/schemas/RelationCompany'
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        deleted:
          type: boolean
          description: Informa se o registro está excluído
          readOnly: true
          example: false
    FinancialTransactionExpense:
      type: object
      title: Expense
      description: Dados da movimentação financeira (Conta a pagar ou Conta a receber).
      properties:
        id:
          type: string
          description: Identificador único da movimentação financeira.
          readOnly: true
          example: 657870656e73657c3133
        has_grouping:
          type: boolean
          description: >-
            Indica se esta movimentação financeira é um agrupamento de outras
            movimentações financeira.
          readOnly: true
          example: true
        parent_id:
          type: string
          description: Identificador único do grupo da movimentação financeira.
          readOnly: true
          example: 657870656e73657c3133
        type:
          type: string
          enum:
            - income
            - expense
          description: |
            Tipo da movimentação financeira.

            Exemplo:

              - `income`: Receita
              - `expense`: Despesa
          example: expense
        description:
          type: string
          maxLength: 40
          minLength: 1
          description: Descrição da movimentação financeira.
          example: Compra de materia de escritório.
        notes:
          type: string
          maxLength: 255
          description: Notas ou observações sobre a movimentação financeira.
          example: Solicitação interna.
        competence_date:
          type: string
          format: date
          description: Data de competência da movimentação financeira.
          example: '2023-05-15'
        due_date:
          type: string
          format: date
          description: Data de vencimento da movimentação financeira.
          example: '2023-05-15'
        status:
          type: string
          enum:
            - unpaid
            - partially_paid
            - paid
          description: |
            Status da movimentação financeira.

            Exemplo:

              - `unpaid`: Em aberta ou não pago
              - `partially_paid`: Pago parcialmente
              - `paid`: Pago
          example: paid
          readOnly: true
        value:
          description: Valor monetário da movimentação financeira.
          $ref: '#/components/schemas/Money'
        discount:
          description: Valor de desconto movimentação financeira.
          $ref: '#/components/schemas/Money'
        interest:
          description: Valor de acréscimo/juros/taxa da movimentação financeira.
          $ref: '#/components/schemas/Money'
        total:
          description: Valor total da movimentação financeira.
          $ref: '#/components/schemas/Money'
          readOnly: true
        account_plan_descriptions:
          type: array
          items:
            $ref: '#/components/schemas/FinancialTransactionAccountPlan'
          description: Lista de planos de contas associados à movimentação financeira.
        payments:
          type: array
          items:
            $ref: '#/components/schemas/FinancialTransactionPayment'
          description: Lista de pagamentos associados à movimentação financeira.
        bank_account_id:
          type: integer
          description: >-
            Identificador único da conta bancária associada à movimentação
            financeira.
          example: 1
          writeOnly: true
        bank_account:
          $ref: '#/components/schemas/BankAccount'
          description: Dados da conta bancária associada à movimentação financeira.
          readOnly: true
        supplier_id:
          type: integer
          description: >-
            Identificador único do fornecedor associado à movimentação
            financeira.
          writeOnly: true
          example: 1
        supplier:
          readOnly: true
          description: Dados do fornecedor associado à movimentação financeira.
          $ref: '#/components/schemas/Supplier'
        files:
          type: array
          items:
            $ref: '#/components/schemas/FinancialTransactionFile'
          description: Lista de arquivos associados à movimentação financeira.
          readOnly: true
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
      required:
        - type
        - value
        - description
        - due_date
        - competence_date
        - account_plan_descriptions
    FinancialTransaction:
      type: object
      description: Dados da movimentação financeira (Conta a pagar ou Conta a receber).
      oneOf:
        - $ref: '#/components/schemas/FinancialTransactionIncome'
        - $ref: '#/components/schemas/FinancialTransactionExpense'
    BankAccountTransactionDataTransaction:
      type: object
      title: Transação na Conta Bancária
      description: Representa uma transação na conta bancária.
      properties:
        value:
          description: Valor da transação.
          $ref: '#/components/schemas/Money'
        type:
          type: string
          example: new
          description: |
            Tipo da transação.

            - `new`: Nova
            - `update_value`: Atualização valor
            - `update_date`: Atualização data
            - `cancelled`: Cancelamento
            - `disabled`: Exclusão
            - `update_bank`: Alteração conta
            - `grouped`: Agrupamento
            - `restored`: Restauração
          enum:
            - new
            - update_value
            - update_date
            - cancelled
            - disabled
            - update_bank
            - grouped
            - restored
        due_date:
          type: string
          description: Data de vencimento.
          format: date
          example: '2025-01-30'
        payment_date:
          type: string
          description: Data de pagamento.
          format: date
          example: '2025-01-30'
        description:
          description: Descrição da transação.
          type: string
          example: Pagamento de conta de luz
        user:
          $ref: '#/components/schemas/User'
        account_plan:
          type: object
          title: Plano de conta
          description: Representa um plano de conta.
          properties:
            id:
              type: integer
              description: Identificador único do plano de conta.
              example: 123
            name:
              type: string
              example: Despesas Administrativas
        is_transfer:
          type: boolean
          description: Indica se a transação é uma transferência.
          example: false
        financial_transaction:
          $ref: '#/components/schemas/FinancialTransaction'
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    BankAccountTransactionData:
      type: object
      title: Movimentações em uma Conta Bancária
      description: Representa as movimentações em uma conta bancária.
      properties:
        bank_account_transactions:
          type: array
          description: Movimentações da conta bancária.
          items:
            $ref: '#/components/schemas/BankAccountTransactionDataTransaction'
        current_balance:
          description: Saldo atual da conta bancária.
          $ref: '#/components/schemas/Money'
        bank_account:
          $ref: '#/components/schemas/BankAccount'
    CardContractReceivableAnticipationPeriod:
      type: object
      title: Configuração de antecipação
      description: Representa uma configuração de antecipação.
      properties:
        id:
          type: integer
          description: Identificador único do período de antecipação.
          readOnly: true
          example: 123
        days:
          type: integer
          description: quantidade de dias de antecipação.
          readOnly: true
          example: 14
        fee:
          type: number
          description: Taxa(%) da antecipação.
          format: decimal
          example: 4.32
    CardContractGroupingType:
      type: string
      title: Tipo de agrupamento
      example: by_transaction
      enum:
        - by_transaction
        - by_payment_method
        - by_card_brand
      description: |
        Define qual a maneira na qual os pagamentos serão agrupados:
          - **by_transaction**: os pagamentos serão agrupados por transação.
          - **by_payment_method**: os pagamentos serão agrupados por método de pagamento.
          - **by_card_brand**: os pagamentos serão agrupados por método de pagamento e pela bandeira de cartão.
    CardContractGrouping:
      type: object
      title: Configuração de agrupamento
      description: Representa uma configuração de agrupamento.
      properties:
        type:
          $ref: '#/components/schemas/CardContractGroupingType'
    CardContractPayoutSchedule:
      type: object
      title: Configurações do cronograma de repasse do contrato de cartão
      description: >
        Define o cronograma de repasse de recebíveis efetuado pela provedora
        associada a este contrato de cartão.


        Cada repasse irá incluir todos os recebíveis que foram pagos desde o
        fechamento do último repasse.

        A _frequência_ determina as datas nas quais ocorrerá o fechamento dos
        repasses, junto a configurações específicas para

        cada frequência de repasse.


        A _data de depósito do repasse_ será calculada considerando a data de
        fechamento do repasse, somado a

        quantidade de dias `days_to_deposit`. Caso a data calculada não seja um
        dia útil e a opção `deposit_only_in_working_days`

        esteja ativa, a data calculada será movida para o próximo dia útil.
      discriminator:
        propertyName: frequency
        mapping:
          daily: '#/components/schemas/CardContractDailyPayoutSchedule'
          weekly: '#/components/schemas/CardContractWeeklyPayoutSchedule'
      properties:
        frequency:
          type: string
          description: Indica a frequência na qual ocorrerá o fechamento dos repasses.
          example: daily
          enum:
            - daily
            - weekly
        days_to_deposit:
          type: integer
          example: 1
          default: 0
          description: >-
            A quantidade de dias que irá levar para que o repasse seja
            depositado na conta bancária.
        deposit_only_in_working_days:
          type: boolean
          example: false
          default: false
          description: >
            Se o depósito do repasse somente ocorrerá em dias úteis.


            Caso `true`, o cálculo da data de deposíto do repasse sempre irá
            jogar para o próximo dia útil.
      required:
        - frequency
    CardContractDailyPayoutSchedule:
      type: object
      title: Cronograma de repasse diário
      description: testeteste
      allOf:
        - properties:
            frequency:
              type: string
              description: >-
                A string `daily`, indicando que os repasses serão emitidos
                diariamente.
              example: daily
              enum:
                - daily
        - $ref: '#/components/schemas/CardContractPayoutSchedule'
    CardContractWeeklyPayoutSchedule:
      type: object
      title: Cronograma de repasse semanal
      description: testeteste
      allOf:
        - properties:
            frequency:
              type: string
              description: >-
                A string `weekly`, indicando que os repasses serão emitidos
                semanalmente.
              example: weekly
              enum:
                - weekly
            day_of_week:
              type: string
              description: O dia da semana no qual será emitido o repasse.
              example: wednesday
              enum:
                - sunday
                - monday
                - tuesday
                - wednesday
                - thursday
                - friday
                - saturday
        - $ref: '#/components/schemas/CardContractPayoutSchedule'
      required:
        - day_of_week
    CardContractSettings:
      type: object
      title: Configurações do contrato de cartão
      description: Representa uma configuração do contrato de cartão.
      properties:
        holidays_to_consider_as_working_days:
          type: array
          description: |
            Feriados que são considerados dias úteis.

            Valores:
              - `municipal` feriados municipais
              - `state` feriados estaduais
              - `national` feriados nacionais
              - `international` feriados internacionais
          example:
            - municipal
            - state
          default: []
        mark_all_entries_as_paid:
          type: boolean
          description: Definir como pago todas as entradas nesse contrato.
          example: true
        deposit_fee:
          description: Tarifa de deposito.
          $ref: '#/components/schemas/Money'
        receivable_anticipation_periods:
          type: array
          description: Lista de taxas de antecipação.
          items:
            $ref: '#/components/schemas/CardContractReceivableAnticipationPeriod'
        grouping:
          description: Configurações de agrupamento.
          $ref: '#/components/schemas/CardContractGrouping'
        payout_schedule:
          $ref: '#/components/schemas/CardContractPayoutSchedule'
      required:
        - mark_all_entries_as_paid
        - payout_schedule
    CardProviderQRCode:
      type: object
      title: Configurações do contrato de cartão
      description: Representa uma configuração do contrato de cartão.
      properties:
        access_token:
          type: string
          description: Access token do QRCode.
          example: access-token-123
        store_id:
          type: string
          description: Identificador da loja à qual o caixa pertence.
          example: access-token-123
        fixed_amount:
          type: boolean
          description: Determine se o cliente pode inserir o valor a ser pago.
          example: true
        merchant_category_code:
          type: string
          description: Código MCC que indica a categoria do ponto de venda.
          example: '5611203'
    CardContractSupplier:
      type: object
      title: Dados do fornecedor
      description: Representa uma fornecedor.
      properties:
        id:
          type: integer
          description: Identificador único do fornecedor.
          readOnly: true
          example: 123
        name:
          type: string
          description: Nome fantasia do fornecedor.
          example: Fornecedor padrão
        company_name:
          type: string
          description: Razão social do fornecedor.
          example: Fornecedor padrão LTDA
    Payment:
      type: object
      title: Método de pagamento
      description: Representa um Método de pagamento.
      properties:
        id:
          type: integer
          description: Identificador único da um método de pagamento.
          readOnly: true
          example: 123
        name:
          type: string
          maxLength: 40
          minLength: 1
          description: Nome do método de pagamento.
          example: Dinheiro
        fiscal_code:
          type: string
          description: |
            Código fiscal a ser informado na nota fiscal.

            Exemplo:

            - `01`: Dinheiro
            - `02`: Cheque
            - `03`: Cartão de Crédito
            - `04`: Cartão de Débito
            - `05`: Crédito de Loja
            - `10`: Vale Alimentação
            - `11`: Vale Refeição
            - `12`: Vale Presente
            - `13`: Vale Combustível
            - `14`: Duplicata Mercantil
            - `15`: Boleto Bancário
            - `16`: Depósito Bancário
            - `17`: Pagamento Instantâneo (PIX)
            - `18`: Transferência bancária, Carteira Digital
            - `19`: Programa de fidelidade, Cashback, Crédito Virtual
            - `90`: Sem Pagamento
            - `99`: Outros
          enum:
            - '01'
            - '02'
            - '03'
            - '04'
            - '05'
            - '10'
            - '11'
            - '12'
            - '13'
            - '14'
            - '15'
            - '16'
            - '17'
            - '18'
            - '19'
            - '90'
            - '99'
          example: '01'
        is_editable:
          type: boolean
          description: Indica se o método de pagamento pode ser editável ou não.
          readOnly: true
          example: true
        allow_installment:
          type: boolean
          description: Indica se o método de pagamento permite ou não o parcelamento.
          example: true
          default: false
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
      required:
        - id
        - name
        - fiscal_code
    CardContractDaysFirstPaymentType:
      type: string
      description: |
        Em quais dias irão cair os primeiros pagamentos.

        Exemplo:

        - `calendar_days`: dias corridos
        - `working_days`: dias úteis
      enum:
        - calendar_days
        - working_days
      example: working_days
    CardContractDaysBetweenInstallmentsType:
      type: string
      description: |
        Dias entre parcelas.

        Exemplo:

        - `calendar_days`: dias corrigos
        - `single_payment`: pagamento único
        - `working_days`: dias úteis
      enum:
        - calendar_days
        - single_payment
        - working_days
      example: working_days
    CardContractPaymentMethod:
      type: object
      title: Configurações do metodo de pagamento deste contrato
      description: Representa uma configuração do metodo de pagamento deste contrato.
      properties:
        payment_method:
          description: Método de pagamento da parcela.
          $ref: '#/components/schemas/Payment'
        type_days_first_payment:
          $ref: '#/components/schemas/CardContractDaysFirstPaymentType'
        type_days_between_installments:
          $ref: '#/components/schemas/CardContractDaysBetweenInstallmentsType'
          default: working_days
        due_date_only_in_working_days:
          type: boolean
          description: Vencimento apenas em dias úteis.
          example: true
        rules:
          type: array
          description: Regras de cálculo utilizadas por esse método de pagamento.
          items:
            $ref: '#/components/schemas/CardContractPaymentMethodRule'
    CardContractDetail:
      type: object
      title: Contrato de cartão
      description: Representa um contrato de cartão detalhado.
      properties:
        id:
          type: integer
          description: Identificador único do contrato.
          readOnly: true
          example: 123
        title:
          type: string
          maxLength: 60
          minLength: 1
          description: Título do contrato.
          example: Cielo
        code:
          type: string
          maxLength: 60
          minLength: 1
          description: Código do contrato.
          example: CIE
        bank_account:
          description: Conta bancária que este contrato está associado.
          $ref: '#/components/schemas/BankAccount'
        status:
          type: string
          description: Status do contrato.
          enum:
            - active
            - inactive
          example: active
        settings:
          description: Conta bancária que este contrato está associado.
          $ref: '#/components/schemas/CardContractSettings'
        provider:
          description: Dados do provedor de cartão.
          properties:
            id:
              type: integer
              description: Identificador único do provedor.
              readOnly: true
              example: 123
            name:
              type: string
              maxLength: 60
              description: Nome do provedor.
              example: Mercado Pago
            key:
              type: string
              description: identificar alpha numérico do provedor.
              example: MERCADOPAGO
            qr_code:
              description: Dados de configuração do QRCode
              $ref: '#/components/schemas/CardProviderQRCode'
        supplier:
          description: Dados do fornecedor.
          $ref: '#/components/schemas/CardContractSupplier'
        payment_methods:
          type: array
          description: Representa a lista de meios de pagamento do contrato de cartão
          items:
            $ref: '#/components/schemas/CardContractPaymentMethod'
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    CardContractProviderRequest:
      type: object
      title: Configurações do provedor de cartão
      description: Representa uma configuração do provedor de cartão.
      properties:
        id:
          type: integer
          description: ID do provedor do cartão.
          example: 123
        qr_code:
          description: Dados de configuração do QRCode
          $ref: '#/components/schemas/CardProviderQRCode'
    CardContractPaymentMethodRuleRequest:
      type: object
      title: Regra de calculo de um método de pagamento
      description: Representa uma regra de cálculo para um método de pagamento
      properties:
        installment:
          $ref: '#/components/schemas/CardContractinstallment'
        card_brand_id:
          type:
            - integer
            - 'null'
          description: >
            ID da bandeira do cartão.


            Caso `null`, significa que essa regra de cálculo se aplica a todos
            as outras bandeiras aceitas

            pelo método de pagamento, ou que o método de pagamento não aceita
            bandeiras.
          writeOnly: true
          example: 123
        rate:
          type: number
          description: Taxa(%) da parcela.
          format: decimal
          example: 0.85
        fare:
          description: Tarifa da parcela.
          $ref: '#/components/schemas/Money'
        days_first_payment:
          type: integer
          description: Dias para o 1º pagamento.
          example: 15
      required:
        - installment
        - rate
        - fare
        - days_first_payment
    CardContractPaymentMethodRequest:
      type: object
      title: Configurações do metodo de pagamento deste contrato
      description: Representa uma configuração do metodo de pagamento deste contrato.
      properties:
        payment_method_id:
          type: integer
          description: ID do método de pagamento.
          example: 123
        type_days_first_payment:
          $ref: '#/components/schemas/CardContractDaysFirstPaymentType'
        type_days_between_installments:
          $ref: '#/components/schemas/CardContractDaysBetweenInstallmentsType'
          default: working_days
        due_date_only_in_working_days:
          type: boolean
          description: Vencimento apenas em dias úteis.
          example: true
        rules:
          type: array
          description: Regras de cálculo utilizadas por esse método de pagamento.
          items:
            $ref: '#/components/schemas/CardContractPaymentMethodRuleRequest'
    CardProvider:
      type: object
      title: Provedor de cartão
      description: Representa um provedor de cartão.
      properties:
        id:
          type: integer
          description: Identificador único do provedor.
          readOnly: true
          example: 123
        name:
          type: string
          maxLength: 60
          description: Nome do provedor.
          example: Mercado Pago
        key:
          type: string
          description: identificar alpha numérico do provedor.
          example: MERCADOPAGO
        flg_qr_code:
          type: boolean
          description: se o provedor possui token do QRCode.
          example: true
    CashRegister:
      type: object
      description: Representa a Caixa Registradora.
      properties:
        id:
          type: integer
          description: ID único da caixa registradora
          example: 1
        name:
          type: string
          description: Nome da caixa registradora
          example: Caixa Registradora Principal - Loja Centro
        status:
          type: string
          description: Status da caixa registradora
          enum:
            - active
            - inactive
          example: active
        number:
          type: string
          description: Número identificador da caixa
          example: '001'
        contingency_enabled:
          type: boolean
          description: Indica se o modo de contingência está ativado
          example: false
        bank_account:
          type: object
          description: Conta bancária vinculada
          properties:
            id:
              type: integer
              description: ID da conta bancária
              example: 1
            name:
              type: string
              description: Nome da conta bancária
              example: Caixa Registradora Atualizada
        print_point:
          type: object
          description: Ponto de impressão
          properties:
            id:
              type: integer
              description: ID do ponto de impressão
              example: 1
            name:
              type: string
              description: Nome do ponto de impressão
              example: usb
        print_point_balance:
          type: object
          description: Ponto de impressão de balanço
          properties:
            id:
              type: integer
              description: ID do ponto de impressão de balanço
              example: 1
            name:
              type: string
              description: Nome do ponto de impressão de balanço
              example: usb
        config_sat:
          type:
            - object
            - 'null'
          description: Configuração do SAT
          properties:
            id:
              type: integer
              description: ID da configuração do SAT
              example: 1
            name:
              type: string
              description: Nome da configuração do SAT
              example: Configuração SAT Principal
        offline_server_app:
          type:
            - object
            - 'null'
          description: Aplicativo do servidor offline
          properties:
            id:
              type: integer
              description: ID do aplicativo do servidor offline
              example: 1
            name:
              type: string
              description: Nome do aplicativo do servidor offline
              example: Servidor Offline Principal
        created_at:
          type: string
          format: date-time
          description: Data de criação
          example: '2025-06-09T16:46:36.000000Z'
        updated_at:
          type: string
          format: date-time
          description: Data da última atualização
          example: '2025-06-09T16:46:36.000000Z'
    CostCenter:
      type: object
      description: Dados do centro de custo.
      properties:
        id:
          type: integer
          description: Identificador único do centro de custo.
          readOnly: true
          example: 123
        name:
          type: string
          maxLength: 40
          minLength: 1
          description: Nome do centro de custo.
          example: Financeiro
      required:
        - name
    AccessToken:
      type: object
      title: Access Token
      description: Representa um Access Token.
      properties:
        token_type:
          type: string
          description: Identifica o tipo do token.
          readOnly: true
          example: Bearer
        expires_in:
          type: integer
          description: Tempo de validade do token em segundos.
          readOnly: true
          example: 86400
        access_token:
          type: string
          description: Token de acesso.
          readOnly: true
          example: eyJ...
        refresh_token:
          type: string
          description: Refresh Token.
          readOnly: true
          example: eyJ...
      required:
        - token_type
        - expires_in
        - access_token
        - refresh_token
    OauthError:
      type: object
      properties:
        error:
          type: string
          description: Código do erro.
          example: invalid_scope
        error_description:
          type: string
          description: Descrição do erro.
          example: description error
        message:
          type: string
          description: Mensagem do erro.
          example: error message
    Scope:
      type: object
      title: Escopo
      description: Representa um escopo.
      properties:
        id:
          type: string
          description: Identificador único do escopo.
          readOnly: true
          example: categories:read
        description:
          type: string
          description: Descrição do escopo.
          example: Can read categories
      required:
        - id
        - description
    Category:
      type: object
      title: Categoria
      description: Representa a Categoria que pode estar relacionado com um Produto.
      properties:
        id:
          type: integer
          description: Identificador único da categoria.
          readOnly: true
          example: 123
        name:
          type: string
          maxLength: 120
          minLength: 1
          description: Nome da categoria.
          example: Categoria
        code:
          type: string
          maxLength: 30
          description: Código (SKU) da categoria.
          example: ABC-123
        status:
          type: string
          description: Status da categoria.
          enum:
            - available
            - unavailable
          example: available
        product_count:
          type: integer
          description: Total de produtos que pertencem a esta categoria
          example: 10
        icon:
          type: string
          description: Link para a imagem do ícone da categoria
          example: 929091.png
        order:
          type: integer
          description: Posição em que a categoria ocupa na lista
          example: 1
        subcategories:
          type: array
          description: Lista de subcategorias da categoria pai
          items:
            type: object
            properties:
              id:
                type: integer
                description: Identificador único da categoria.
                readOnly: true
                example: 123
              name:
                type: string
                maxLength: 120
                minLength: 1
                description: Nome da categoria.
                example: Subcategoria
              code:
                type: string
                maxLength: 30
                description: Código (SKU) da categoria.
                example: CBA-4321
              status:
                type: string
                description: Status da categoria.
                enum:
                  - available
                  - unavailable
                example: available
              product_count:
                type: integer
                description: Total de produtos que pertencem a esta categoria
                example: 1
              icon:
                type: string
                description: Link para a imagem do ícone da categoria
                example: 929091.png
              subcategories:
                type: array
                description: Lista de subcategorias da categoria pai
                items:
                  type: object
                example: []
              companies:
                type: array
                description: Lista de empresas que permite visualizar.
                items:
                  $ref: '#/components/schemas/RelationCompany'
              created_at:
                type: string
                description: Data da última criação.
                format: date-time
                readOnly: true
                example: '2020-01-01T09:00:00-03:00'
              updated_at:
                type: string
                description: Data da última atualização.
                format: date-time
                readOnly: true
                example: '2020-01-01T09:00:00-03:00'
        companies:
          type: array
          description: Lista de empresas que permite visualizar.
          items:
            $ref: '#/components/schemas/RelationCompany'
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
      required:
        - id
        - name
    Icon:
      type: object
      title: Ícone
      description: Representa um ícone.
      properties:
        id:
          type: integer
          description: Identificador único do ícone.
          example: 1
          readOnly: true
        name:
          type: string
          default: '-'
          minimum: 1
          maximum: 80
          description: Nome do icone.
          example: '-'
        icon:
          type: string
          description: Url do Icone
          example: https://cdn.cplug.com.br/icons/1.png
      required:
        - icon
    Integration:
      type: object
      title: Integration
      description: Representa uma integração disponível no sistema.
      properties:
        id:
          type: integer
          description: Identificador único da integração.
          readOnly: true
          example: 8
        name:
          type: string
          description: Nome da integração.
          example: Accon Delivery
        key:
          type: string
          description: Chave identificadora da integração.
          example: accon_delivery
        type:
          type: string
          description: |
            Tipo da integração.

            - `delivery` integração de delivery
            - `tapp` integração de tapp
            - `general` integração geral
            - `erp` integração de ERP
          enum:
            - delivery
            - tapp
            - general
            - erp
          example: delivery
        image:
          type: string
          oneOf:
            - type: string
              format: uri
            - type: 'null'
          description: URL da imagem da integração
          example: https://images.connectplug.com.br/ifood-logo.png
        status:
          type: string
          description: |
            Status da integração.

            - `active` integração ativa
            - `inactive` integração inativa
          enum:
            - active
            - inactive
          example: inactive
        deleted:
          type: boolean
          description: Informa se o registro está excluído.
          readOnly: true
          example: false
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2025-06-18T17:37:40.000000Z'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2025-06-18T17:37:40.000000Z'
      required:
        - id
        - name
        - key
        - type
        - image
        - status
        - deleted
        - created_at
        - updated_at
    IntegrationCredentials:
      type: object
      title: IntegrationCredentials
      description: Representa as credenciais de autenticação de uma integração.
      properties:
        merchant_name:
          type:
            - string
            - 'null'
          description: Nome do comerciante na integração.
          example: null
        username:
          type:
            - string
            - 'null'
          description: Nome de usuário para autenticação.
          example: null
        password:
          type:
            - string
            - 'null'
          description: Senha para autenticação.
          example: null
        integration_id:
          type:
            - string
            - 'null'
          description: ID da integração no sistema externo.
          example: null
        access_token:
          type:
            - string
            - 'null'
          description: Token de acesso para autenticação.
          example: null
        expires_in:
          type:
            - integer
            - 'null'
          description: Tempo de expiração do token em segundos.
          example: null
        authenticated:
          type:
            - boolean
            - 'null'
          description: Indica se a integração está autenticada.
          example: null
    IntegrationAuth:
      type: object
      title: IntegrationAuth
      description: Representa as informações de autenticação de uma integração.
      properties:
        credentials:
          type: array
          description: Lista de credenciais da integração.
          items:
            $ref: '#/components/schemas/IntegrationCredentials'
    IntegrationConfigs:
      type: object
      title: IntegrationConfigs
      description: Representa as configurações de uma integração.
      properties:
        company_ids:
          type: array
          description: Lista de IDs das empresas associadas à integração.
          items:
            type: integer
          example: []
        payment_method_id:
          type:
            - integer
            - 'null'
          description: ID do método de pagamento padrão da integração.
          example: 3
        seller_id:
          type:
            - integer
            - 'null'
          description: ID do vendedor padrão da integração.
          example: null
        disable_product_out_of_stock:
          type: boolean
          description: Se deve desabilitar produtos fora de estoque.
          example: false
        stock_id:
          type:
            - integer
            - 'null'
          description: ID do estoque padrão da integração.
          example: 1
        auto_accept_order:
          type: boolean
          description: Se deve aceitar pedidos automaticamente.
          example: false
    IntegrationDetail:
      allOf:
        - $ref: '#/components/schemas/Integration'
        - type: object
          title: IntegrationDetail
          description: >-
            Representa os detalhes completos de uma integração incluindo
            autenticação e configurações.
          properties:
            auth:
              $ref: '#/components/schemas/IntegrationAuth'
              description: Informações de autenticação da integração.
            configs:
              $ref: '#/components/schemas/IntegrationConfigs'
              description: Configurações da integração.
    IntegrationCredentialsRequest:
      type: object
      title: IntegrationCredentialsRequest
      description: >
        Representa as credenciais para atualização de uma integração. 


        **Os campos obrigatórios e opcionais variam drasticamente conforme o
        tipo de integração.** Cada integração tem seus próprios requisitos de
        autenticação únicos.


        **Exemplos de campos possíveis (não exaustivo):**

        - Epadoca: `client_id`, `client_secret`

        - Delivery Direto: `merchant_name`, `username`, `password`

        - iFood: campos específicos do iFood

        - Rappi: campos específicos do Rappi

        - E muitos outros conforme a integração


        **Consulte a documentação específica de cada integração para campos
        obrigatórios.**
      additionalProperties: true
      example:
        client_id: exemplo_client_id
        client_secret: exemplo_client_secret
    IntegrationAuthRequest:
      type: object
      title: IntegrationAuthRequest
      description: >
        Representa as informações de autenticação para atualização de uma
        integração.


        **A estrutura de autenticação varia drasticamente entre integrações:**


        1. **Array de credentials**: Maioria das integrações (Epadoca, Delivery
        Direto, etc.)

        2. **Campos diretos**: Algumas integrações como Accon V1 (email/password
        direto no auth)

        3. **Auth vazio**: Integrações que usam credenciais do sistema (Rappi,
        iFood)


        **Nota**: Nem todas as integrações utilizam o array `credentials`.
        Algumas podem ter campos específicos diretamente no objeto `auth`.
      additionalProperties: true
      properties:
        credentials:
          type: array
          description: >-
            Lista de credenciais da integração (usado pela maioria das
            integrações).
          items:
            $ref: '#/components/schemas/IntegrationCredentialsRequest'
        email:
          type: string
          description: >-
            Email para autenticação (usado por algumas integrações como Accon
            V1).
          example: admin@accon.com
        password:
          type: string
          description: >-
            Senha para autenticação (usado por algumas integrações como Accon
            V1).
          example: accon_password
        client_id:
          type: string
          description: >-
            Client ID para autenticação (usado por algumas integrações como
            Accon V2).
          example: accon_v2_client
        client_secret:
          type: string
          description: >-
            Client Secret para autenticação (usado por algumas integrações como
            Accon V2).
          example: accon_v2_secret
        username:
          type: string
          description: >-
            Username para autenticação (usado por algumas integrações como
            Aiqfome).
          example: aiqfome_user
    IntegrationConfigsRequest:
      type: object
      title: IntegrationConfigsRequest
      description: >
        Representa as configurações para atualização de uma integração. 


        **Os campos de configuração disponíveis variam conforme o tipo de
        integração.** Alguns campos são comuns (como payment_method_id),
        enquanto outros são específicos de cada integração.


        **O sistema suporta dezenas de integrações diferentes, cada uma com suas
        próprias opções de configuração.**
      additionalProperties: true
      properties:
        payment_method_id:
          type: integer
          description: ID do método de pagamento padrão da integração.
          example: 1
        seller_id:
          type:
            - string
            - integer
          description: ID do vendedor padrão da integração.
          example: 5
        auto_accept_order:
          type: boolean
          description: Se deve aceitar pedidos automaticamente.
          example: true
        merchant_ids:
          type: array
          description: Lista de IDs de merchants (usado por Rappi, iFood, etc.).
          items:
            type: string
          example:
            - rappi_store_123
            - rappi_store_456
        menu_ids:
          type: array
          description: Lista de IDs de menus (usado por Rappi, etc.).
          items:
            type: string
          example:
            - menu_789
        merchant_names:
          type: array
          description: Lista de nomes de merchants (usado por iFood, etc.).
          items:
            type: string
          example:
            - Restaurante XYZ
        merchant_delivery:
          type: array
          description: Lista de flags de delivery por merchant (usado por iFood, etc.).
          items:
            type: boolean
          example:
            - true
        network:
          type: string
          description: Rede da integração (usado por Accon V1, etc.).
          example: rede_accon_123
        integration_delivery:
          type: boolean
          description: Se a integração suporta delivery (usado por iFood, etc.).
          example: true
        disable_product_out_of_stock:
          type: boolean
          description: >-
            Se deve desabilitar produtos fora de estoque (usado por iFood,
            etc.).
          example: true
        stock_id:
          type: integer
          description: ID do estoque padrão (usado por iFood, etc.).
          example: 1
        shipping_on_sale:
          type: boolean
          description: Se deve aplicar frete na venda (usado por iFood, etc.).
          example: false
        require_shipping_code:
          type: boolean
          description: Se requer código de envio (usado por iFood, etc.).
          example: true
        menu_option:
          type: string
          description: Opção de menu (usado por Rappi, etc.).
          example: automatic
        validations_should_skipped:
          type: array
          description: Lista de validações que devem ser puladas (usado por Rappi, etc.).
          items:
            type: string
          example: []
    IntegrationUpdateRequest:
      type: object
      title: IntegrationUpdateRequest
      description: >
        Representa o corpo da requisição para atualização de uma integração.


        **A estrutura varia significativamente entre diferentes tipos de
        integração:**


        - **Auth**: Pode conter array `credentials`, campos diretos, ou estar
        vazio (para integrações que usam credenciais do sistema)

        - **Configs**: Campos obrigatórios/opcionais variam por integração


        **Exemplos de estruturas possíveis:**

        - OAuth: `auth.credentials[].client_id/client_secret`

        - Username/Password: `auth.credentials[].username/password`

        - Auth direto: `auth.email/password` (sem credentials array)

        - Auth vazio: `auth: {}` (Rappi, iFood)
      properties:
        auth:
          $ref: '#/components/schemas/IntegrationAuthRequest'
          description: |
            Informações de autenticação da integração.

            **Pode variar entre:**
            - Array de credentials (maioria)
            - Campos diretos no auth
            - Objeto vazio (integrações com auth no backend)
        configs:
          $ref: '#/components/schemas/IntegrationConfigsRequest'
          description: |
            Configurações da integração.

            **Campos comuns**: payment_method_id, seller_id, auto_accept_order
            **Campos específicos**: merchant_ids, network, stock_id, etc.
      required:
        - auth
        - configs
    IntegrationCredentialsUpdate:
      type: object
      title: IntegrationCredentialsUpdate
      description: >
        Representa as credenciais de autenticação na resposta de atualização de
        uma integração. 


        **Os campos variam significativamente conforme o tipo de integração.**
        Os campos listados abaixo são exemplos dos mais comuns, mas cada
        integração pode ter campos específicos únicos.


        **Exemplos de tipos de integração suportados:**

        - Delivery (Epadoca, Delivery Direto, iFood, Rappi, Aiqfome, etc.)

        - Tapp (EasyChopp, Beerpass, ITap, Enjoy, etc.)  

        - ERP (Tray, etc.)

        - General (Fidelidade, CRM & Bonus, etc.)
      additionalProperties: true
      properties:
        authenticated:
          type:
            - boolean
            - 'null'
          description: Indica se a integração está autenticada.
          example: true
        message:
          type:
            - string
            - 'null'
          description: Mensagem sobre o status da autenticação.
          example: Autorizado com sucesso
        status_code:
          type:
            - integer
            - 'null'
          description: Código de status da autenticação.
          example: 200
        access_token:
          type:
            - string
            - 'null'
          description: >-
            Token de acesso retornado pela integração (presente apenas quando
            autenticado).
          example: >-
            eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiIxIiwianRpIjoiYWJjZGVmZ2hpams
        expires_in:
          type:
            - string
            - 'null'
          description: Data/hora de expiração do token.
          example: '2024-01-20 18:45:30'
        client_id:
          type:
            - string
            - 'null'
          description: >-
            ID do cliente para autenticação. Usado por algumas integrações como
            Epadoca.
          example: epadoca_client_12345
        client_secret:
          type:
            - string
            - 'null'
          description: >-
            Segredo do cliente para autenticação. Usado por algumas integrações
            como Epadoca.
          example: epadoca_secret_abcdef
        merchant_name:
          type:
            - string
            - 'null'
          description: >-
            Nome do comerciante. Usado por algumas integrações como Delivery
            Direto.
          example: Restaurante ABC
        username:
          type:
            - string
            - 'null'
          description: >-
            Nome de usuário para autenticação. Usado por algumas integrações
            como Delivery Direto.
          example: restaurante_abc
        password:
          type:
            - string
            - 'null'
          description: >-
            Senha para autenticação. Usado por algumas integrações como Delivery
            Direto.
          example: senha123
        integration_id:
          type:
            - string
            - 'null'
          description: >-
            ID da integração no sistema externo. Usado por algumas integrações
            como Delivery Direto.
          example: dd_integration_456
        place_id:
          type:
            - string
            - 'null'
          description: >-
            ID do local/estabelecimento. Usado por algumas integrações como
            Quero Delivery.
          example: place_12345_abc
    IntegrationAuthUpdate:
      type: object
      title: IntegrationAuthUpdate
      description: >-
        Representa as informações de autenticação na resposta de atualização de
        uma integração.
      properties:
        credentials:
          type: array
          description: Lista de credenciais da integração.
          items:
            $ref: '#/components/schemas/IntegrationCredentialsUpdate'
        status:
          type: string
          description: |
            Status da autenticação da integração.

            - `success` integração ativada com sucesso
            - `fail` falha na autenticação
            - `danger` credenciais inválidas
          enum:
            - success
            - fail
            - danger
          example: success
        message:
          type: string
          description: Mensagem sobre o status da autenticação.
          example: Integração ativada com sucesso
    IntegrationConfigsUpdate:
      type: object
      title: IntegrationConfigsUpdate
      description: >
        Representa as configurações na resposta de atualização de uma
        integração. 


        **Os campos de configuração variam significativamente entre diferentes
        tipos de integração.** Os campos listados são exemplos comuns, mas cada
        integração pode ter configurações específicas únicas.


        **Nota:** O sistema suporta múltiplos tipos de integração (delivery,
        tapp, ERP, general) e cada uma pode ter requisitos de configuração
        distintos.
      additionalProperties: true
      properties:
        payment_method_id:
          type:
            - integer
            - 'null'
          description: ID do método de pagamento padrão da integração.
          example: 1
        seller_id:
          type:
            - integer
            - string
            - 'null'
          description: ID do vendedor padrão da integração.
          example: 8
        auto_accept_order:
          type: boolean
          description: Se deve aceitar pedidos automaticamente.
          example: true
        name:
          type:
            - string
            - 'null'
          description: Nome da integração.
          example: Epadoca
        url:
          type:
            - string
            - 'null'
          description: URL base da API da integração.
          example: https://api.epadoca.com/v1/
        logo:
          type:
            - string
            - 'null'
          description: Caminho para o logo da integração.
          example: build/images/integrations/epadoca.png
        cover:
          type:
            - string
            - 'null'
          description: Caminho para a imagem de capa da integração.
          example: build/images/integrations/epadoca_cover.png
    IntegrationUpdateResponse:
      allOf:
        - $ref: '#/components/schemas/Integration'
        - type: object
          title: IntegrationUpdateResponse
          description: Representa a resposta completa da atualização de uma integração.
          properties:
            auth:
              $ref: '#/components/schemas/IntegrationAuthUpdate'
              description: Informações de autenticação da integração.
            configs:
              $ref: '#/components/schemas/IntegrationConfigsUpdate'
              description: Configurações da integração.
            rules:
              type: array
              description: >-
                Regras aplicadas à integração (campos obrigatórios para
                ativação).
              items:
                type: string
              example:
                - auth.credentials
                - auth.credentials.*.client_id
                - auth.credentials.*.client_secret
                - configs.payment_method_id
                - configs.seller_id
                - configs.auto_accept_order
            integration_status:
              type: string
              description: Status textual da integração.
              example: Autorizado com sucesso
    TrayProduct:
      type: object
      description: Representa um produto da integração Tray
      properties:
        integration_id:
          type:
            - integer
            - 'null'
          description: ID da integração do produto
          example: 98
        product_erp:
          type: object
          properties:
            id:
              type: integer
              description: ID do produto no sistema ERP
              example: 4
            name:
              type: string
              description: Nome do produto no sistema ERP
              example: Produto de Teste
          description: Dados do produto no sistema ERP
        product_store:
          type: object
          properties:
            id:
              type: integer
              description: ID do produto na loja Tray
              example: 31
            name:
              type: string
              description: Nome do produto na loja Tray
              example: Produto de Teste
          description: Dados do produto na loja Tray
        is_conciliate:
          type: boolean
          description: Indica se o produto está conciliado entre ERP e loja
          example: true
        error:
          type:
            - string
            - 'null'
          description: Mensagem de erro, se houver
          example: null
      required:
        - integration_id
        - product_erp
        - product_store
        - is_conciliate
        - error
    TrayProducts:
      type: object
      description: Resposta da listagem de produtos da integração Tray
      properties:
        data:
          type: object
          properties:
            products:
              type: array
              description: Lista de produtos da integração Tray
              items:
                $ref: '#/components/schemas/TrayProduct'
          required:
            - products
        meta:
          $ref: '#/components/schemas/MetaPagination'
      required:
        - data
        - meta
    TrayProductsConciliationBody:
      type: object
      description: Body para conciliação de produtos da integração Tray
      properties:
        action:
          type: string
          description: Ação a ser executada na conciliação
          enum:
            - conciliate
            - unconciliate
          example: conciliate
        product_erp_id:
          type: integer
          description: ID do produto no sistema ERP
          minimum: 1
          example: 4
      required:
        - action
    TrayProductsImportExportBody:
      type: object
      description: Body para importação / exportação de produtos da integração Tray
      properties:
        ids:
          type: array
          description: Lista de IDs dos produtos a serem processados
          items:
            type: integer
            minimum: 1
          minItems: 1
          example:
            - 1
            - 2
            - 3
      required:
        - ids
    TrayProductsJobResponse:
      type: object
      description: >-
        Resposta das operações de importação / exportação de produtos da
        integração Tray
      properties:
        data:
          type: object
          properties:
            total:
              type: integer
              description: Total de produtos a serem processados
              minimum: 0
              example: 3
            processed:
              type: integer
              description: Quantidade de produtos já processados
              minimum: 0
              example: 0
            success:
              type: integer
              description: Quantidade de produtos processados com sucesso
              minimum: 0
              example: 0
            failed:
              type: integer
              description: Quantidade de produtos que falharam no processamento
              minimum: 0
              example: 0
            finished:
              type: boolean
              description: Indica se o processamento foi finalizado
              example: false
            progress:
              type: integer
              description: Percentual de progresso do processamento (0-100)
              minimum: 0
              maximum: 100
              example: 0
          required:
            - total
            - processed
            - success
            - failed
            - finished
            - progress
      required:
        - data
    City:
      type: object
      title: Cidade
      description: Representa uma cidade.
      properties:
        id:
          type: integer
          description: Identificador único da cidade na CPlug.
          example: 3898
          readOnly: true
        name:
          type: string
          description: Nome da cidade.
          example: São Paulo
          readOnly: true
        ibge_code:
          type: string
          description: Código da cidade no IBGE.
          example: '3550308'
          readOnly: true
        state:
          type: string
          description: Estado.
          example: SP
          readOnly: true
    TypeOfBusiness:
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
          description: ID único do tipo de negócio
          example: 99
        type:
          type: string
          description: Nome identificador do tipo de negócio
          example: handcraft_shop
        description:
          type: string
          description: Descrição do tipo de negócio
          example: Artesanato
        created_at:
          type: string
          format: date-time
          description: Data e hora de criação do tipo de negócio
          example: '2025-07-14T13:31:26.000000Z'
        updated_at:
          type: string
          format: date-time
          description: Data e hora da última atualização do tipo de negócio
          example: '2025-07-14T13:31:26.000000Z'
    Cnae:
      type: object
      title: CNAE
      description: Representa uma CNAE.
      properties:
        id:
          type: integer
          description: Identificador único da CNAE.
          example: 3
        code:
          type: integer
          description: Código da CNAE.
          example: 111303
        name:
          type: string
          description: Nome da CNAE.
          example: Cultivo de trigo
    Company:
      type: object
      title: Empresa
      description: Representa uma empresa.
      properties:
        id:
          type: integer
          description: Identificador único da empresa.
          readOnly: true
          example: 123
        name:
          type: string
          minLength: 1
          maxLength: 120
          description: Nome fantasia da empresa.
          example: ConnectPlug
        code:
          type: string
          minLength: 3
          maxLength: 12
          description: Código da empresa.
          example: '100'
        image_url:
          type: string
          description: URL do logo da empresa.
          example: https://cdn.site.com.br/content/logo.png
        type_of_business:
          $ref: '#/components/schemas/TypeOfBusiness'
        company_name:
          type: string
          minLength: 1
          maxLength: 120
          description: Razão social da empresa
          example: ConnectPlug Desenvolvimento de Software LTDA
        founding_date:
          type: string
          format: date
          description: Data da fundação da empresa. Formato "YYYY-MM-DD"
          example: '2016-01-15'
        cnae:
          $ref: '#/components/schemas/Cnae'
        documents:
          type: array
          description: Lista de documentos da empresa.
          items:
            $ref: '#/components/schemas/Document'
        address:
          $ref: '#/components/schemas/Address'
        contacts:
          type: array
          description: Lista de contatos da empresa.
          items:
            $ref: '#/components/schemas/Contact'
        owner_contact:
          type: object
          description: Contato do proprietário da empresa.
          properties:
            name:
              type: string
              description: Nome do contato do proprietário da empresa.
              example: João da Silva
            contacts:
              type: array
              description: Lista de contatos do proprietário da empresa.
              items:
                $ref: '#/components/schemas/Contact'
        financial_contact:
          type: object
          description: Contato financeiro da empresa.
          properties:
            name:
              type: string
              description: Nome do contato financeiro da empresa.
              example: João da Silva
            contacts:
              type: array
              description: Lista de contatos do contato financeiro da empresa.
              items:
                $ref: '#/components/schemas/Contact'
        settings:
          type: object
          title: Configurações
          description: Configurações da Empresa.
          properties:
            theme:
              type: object
              description: Configurações do Tema.
              properties:
                primary_color:
                  type: string
                  description: Cor primárias (HEXA)
                  example: '#123123'
                secondary_color:
                  type: string
                  description: Cor secundária (HEXA)
                  example: '#123123'
    ApiTokenData:
      type: object
      title: API Token Data
      description: Dados do token de API obtido.
      properties:
        token:
          type: string
          description: Token de API obtido para acesso à empresa.
          example: 68a8d257d1a8c-51299195164ef237e546820c12646191-fgUKUaTYX46rnfQeQ
          readOnly: true
    CompanyBilling:
      type: object
      title: Dados de Cobrança da Empresa
      description: Representa os dados de cobrança da empresa.
      properties:
        name:
          type: string
          maxLength: 120
          description: Nome para cobrança da empresa.
          example: Nome de Cobrança
        document_type:
          type: string
          enum:
            - cpf
            - cnpj
          description: |
            Tipo do documento de cobrança.

            - `cpf`: CPF Pessoa física
            - `cnpj`: CNPJ Pessoa jurídica
          example: cpf
        document:
          type: string
          maxLength: 40
          description: Número do documento de cobrança.
          example: '01234567890'
        address:
          type: array
          description: Endereço de cobrança da empresa.
          items:
            $ref: '#/components/schemas/Address'
    CompanyUseDefinitions:
      type: object
      title: Definições de Uso da Empresa
      description: Representa as definições de uso da empresa.
      properties:
        price_list_erp:
          type: object
          description: Lista de preços do ERP.
          properties:
            id:
              type: integer
              description: ID da lista de preços do ERP.
              example: 52
            name:
              type: string
              description: Nome da lista de preços do ERP.
              example: Lista de Preço 52
        price_list_pdv:
          type: object
          description: Lista de preços do PDV.
          properties:
            id:
              type: integer
              description: ID da lista de preços do PDV.
              example: 1
            name:
              type: string
              description: Nome da lista de preços do PDV.
              example: Lista Padrão
        price_list_attendance:
          type: object
          description: Lista de preços do atendimento.
          properties:
            id:
              type: integer
              description: ID da lista de preços do atendimento.
              example: 1
            name:
              type: string
              description: Nome da lista de preços do atendimento.
              example: Lista Padrão
        price_list_report:
          type: object
          description: Lista de preços dos relatórios.
          properties:
            id:
              type: integer
              description: ID da lista de preços dos relatórios.
              example: 1
            name:
              type: string
              description: Nome da lista de preços dos relatórios.
              example: Lista Padrão
        stock_sale:
          type: object
          description: Estoque de venda.
          properties:
            id:
              type: integer
              description: ID do estoque de venda.
              example: 95
            name:
              type: string
              description: Nome do estoque de venda.
              example: Estoque 1 (Nome fantasia 18)
        stock_purchase:
          type: object
          description: Estoque de compra.
          properties:
            id:
              type: integer
              description: ID do estoque de compra.
              example: 95
            name:
              type: string
              description: Nome do estoque de compra.
              example: Estoque 1 (Nome fantasia 18)
        admin_password:
          type: integer
          description: Senha administrativa de aplicativos
          example: 333333
    MeasurementUnit:
      type: object
      title: Unidade de Medida
      description: Representa a Unidade de Medida um Produto.
      properties:
        id:
          type: integer
          description: Identificador único da unidade de medida.
          readOnly: true
          example: 123
        name:
          type: string
          minLength: 1
          maxLength: 50
          description: Nome da unidade de medida, exemplo "quilos".
          example: Quilos
        abbreviation:
          type: string
          minLength: 1
          maxLength: 6
          description: >
            A abreviatura da unidade, veja a tabela com todas as referências em
            [Tabela de Unidades de medida](#section/Conhecimento-Geral/Tabelas)
          example: kg
        precision:
          type: integer
          minimum: 0
          maximum: 6
          description: >
            Um número inteiro entre 0 e 6 que representa o número máximo de
            posições permitidas após o decimal em quantidades medidas com esta
            unidade.

            Por exemplo:
              - se a precisão for `0`, a quantidade pode ser `1`, `2`, `3`, etc.
              - se a precisão for `1`, a quantidade pode ser `0.1`, `0.2`, `0.3`, etc.
              - se a precisão for `2`, a quantidade pode ser `0.01`, `0.02`, `0.03`, etc.
          example: 2
          default: 0
        product_count:
          type: integer
          description: Número de produtos que utilizam esta unidade de medida
          example: 4
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
      required:
        - id
        - name
        - abbreviation
        - precision
    ProductAttributeOptionComponentAssociation:
      type: object
      title: Opção
      description: Representa uma Opção de um Atributo associado com o produto.
      properties:
        component_id:
          type: integer
          description: Identificador único do componente.
          example: 123
          writeOnly: true
        amount:
          type: integer
          description: Quantidade de componentes associados à opção.
          example: 1
        is_optional:
          type: boolean
          description: Indica se a opção é opcional.
          example: false
        product:
          type: object
          description: Componente associado à opção.
          readOnly: true
          properties:
            id:
              type: integer
              description: Identificador único do componente.
              example: 123
            name:
              type: string
              description: Nome do componente.
              example: Componente 1
    ProductAttributeOptionAssociation:
      type: object
      title: Opção
      description: Representa uma Opção de um Atributo associado com o produto.
      properties:
        option_id:
          type: integer
          description: Identificador único da opção.
          example: 123
        barcode:
          type: string
          description: Código de barras da opção do atributo.
          example: '1234567890123'
        name:
          type: string
          maxLength: 200
          minLength: 1
          description: Nome da opção.
          example: Nome da opção
          readOnly: true
        code:
          type: string
          description: 'Código da opção. Esse código deve ser único. Exemplo: COD-CP-01'
          maxLength: 30
          example: COD-CP-01
          readOnly: true
        description:
          type: string
          description: Descrição da opção.
          maxLength: 500
          example: Descrição da opção
          readOnly: true
        unitary_value:
          description: |
            Valor unitário da opção na associação do atributo com o produto.

            Esse valor pode ser diferente do valor do template da opção.
          $ref: '#/components/schemas/Money'
        image_url:
          type:
            - 'null'
            - string
          description: URL da imagem da opção.
          format: url
          readOnly: true
          example: https://images.connectplug.com.br/4f01c1252eea.jpg
        position:
          type: integer
          description: Indica a posição de ordenação da opção em listagens.
          example: 1
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        components:
          type: array
          description: Lista de opções do atributo.
          items:
            $ref: '#/components/schemas/ProductAttributeOptionComponentAssociation'
    ProductAttributeAssociation:
      type: object
      title: Atributo
      description: Representa um Atributo associado com o produto.
      properties:
        attribute_id:
          type: integer
          description: Identificador único do atributo.
          example: 123
        name:
          type: string
          maxLength: 200
          minLength: 1
          description: Nome do atributo.
          example: Nome do atributo
          readOnly: true
        code:
          type: string
          description: 'Código do atributo. Esse código deve ser único. Exemplo: COD-CP-01'
          maxLength: 30
          example: COD-CP-01
          readOnly: true
        price_calculation_type:
          description: |
            Tipo de calculo de preço a ser aplicado nas opções do atributo.

            - `highest`: calcula pelo maior valor.
            - `average`: calcula pela média dos valores.
            - `proportional`: calcula proporcionalmente os valores.
            - `cumulative`: calcula a soma dos valores.
          type: string
          enum:
            - highest
            - average
            - proportional
            - cumulative
          default: highest
          example: highest
        min_choices:
          type: integer
          description: >
            Número mínimo de opções que devem ser seleciona no atributo.


            Se o número mínimo for `0` torna a seleção de atributos opcional, se
            o número for maior que `0` torna a seleção de atributos obrigatória
            até o número mínimo de opções selecionadas.
          example: 0
        max_choices:
          type: integer
          description: |
            Número máximo de opções que devem ser seleciona no atributo.

            O número máximo deve ser igual ou maior que o número mínimo.
          example: 1
        charge_from_quantity:
          type: integer
          description: >
            Indica a partir de qual quantidade de atributos deve iniciar o
            calculo de cobrança pelo atributo selecionado.


            Se `charge_from_quantity` for `2`, e o forem seleciona 3 opções para
            o atributo no valor de `10` BRL com o tipo de calculo `cumulative`,
            o valor do atributo será equivalente à `10` BRL, e não `30` BRL,
            pois ele só começa a ser calculado a partir da opção número 3.
          default: 0
          example: 0
        position:
          type: integer
          description: Indica a posição de ordenação do atributo em listagens
          example: 1
        options:
          type: array
          description: Lista de opções do atributo.
          items:
            $ref: '#/components/schemas/ProductAttributeOptionAssociation'
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    Product:
      type: object
      title: Produto
      description: Representa um Produto.
      properties:
        id:
          type: integer
          description: Identificador único do produto.
          readOnly: true
          example: 123
        name:
          type: string
          maxLength: 200
          minLength: 1
          description: Nome do produto.
          example: Nome do produto
        type:
          type: string
          description: |
            Tipo do produto.

            - `simple`: Produto simples.
            - `combo`: Produto combo.
            - `production_process`: Processo produtivo.
            - `automatic_production`: Produção automática.
            - `component`: Insumo.
          enum:
            - simple
            - combo
            - production_process
            - automatic_production
            - component
          example: simple
        option_type:
          description: Informações sobre as opções do produto.
          $ref: '#/components/schemas/ProductOptionType'
        sku:
          type: string
          description: |
            Código SKU do produto. 

            **Esse código deve ser único**.

            Exemplo: COD-CP-01
          maxLength: 30
          example: COD-CP-01
        unitary_value:
          description: >
            Preço do produto. 


            Esse campo pode ser opcional quando o produto for do tipo
            "**Combo**".
          $ref: '#/components/schemas/Money'
        category_id:
          type: integer
          description: Identificador da categoria do produto.
          writeOnly: true
          example: 1
        category:
          type: object
          description: Categoria do produto.
          readOnly: true
          properties:
            id:
              type: integer
              description: Identificador único da categoria.
              example: 1
            name:
              type: string
              minLength: 1
              maxLength: 120
              description: Nome da categoria.
              example: Nome da categoria
        unit_id:
          type: integer
          description: Identificador da unidade de medida do produto.
          writeOnly: true
          example: 1
        unit:
          type: object
          description: Unidade de medida do produto.
          readOnly: true
          properties:
            id:
              type: integer
              description: Identificador único da unidade de medida.
              example: 1
            name:
              type: string
              minLength: 1
              maxLength: 50
              description: Nome da unidade de medida, exemplo "quilos".
              example: Kilos
            abbreviation:
              type: string
              minLength: 1
              maxLength: 5
              description: A abreviatura da unidade, exemplo "kg".
              example: kg
            precision:
              type: integer
              minimum: 0
              maximum: 6
              description: >
                Um número inteiro entre 0 e 6 que representa o número máximo de
                posições permitidas após o decimal em quantidades medidas com
                esta unidade.

                Por exemplo:
                  - se a precisão for `0`, a quantidade pode ser `1`, `2`, `3`, etc.
                  - se a precisão for `1`, a quantidade pode ser `0.1`, `0.2`, `0.3`, etc.
                  - se a precisão for `2`, a quantidade pode ser `0.01`, `0.02`, `0.03`, etc.
              example: 1
        description:
          type:
            - 'null'
            - string
          maxLength: 500
          description: Descrição do produto.
          example: Descrição do produto.
        barcodes:
          type: array
          description: Lista dos códigos de barras do produto.
          items:
            type: string
            description: Código de barra do produto.
            maxLength: 30
            example: '6683713903949'
        attributes:
          type: array
          description: |
            Lista de atributos relacionado com o produto.

            Produtos do tipo "**Combo**" não podem conter atributos.
          items:
            $ref: '#/components/schemas/ProductAttributeAssociation'
        components:
          type: array
          description: Lista de componentes do produto.
          items:
            $ref: '#/components/schemas/ProductComposition'
        grids:
          type: array
          description: |
            Lista de grade de preços do produto.

            Apenas produtos do tipo "**Simples**" podem conter grade de preços.
          items:
            $ref: '#/components/schemas/ProductGrid'
        additionals:
          description: Configurações dos produtos adicionais de um produto.
          $ref: '#/components/schemas/ProductAdditionals'
        recommendations:
          type: array
          description: >
            Lista de produtos a serem sugeridos como recomendação na venda do
            produto principal.
          items:
            $ref: '#/components/schemas/ProductRecommendation'
        image_url:
          type:
            - 'null'
            - string
          description: URL da imagem principal do produto.
          format: url
          readOnly: true
          example: https://images.connectplug.com.br/4f01c1252eea.jpg
        companies:
          type: array
          description: Lista de empresas que permite visualizar.
          items:
            $ref: '#/components/schemas/RelationCompany'
        is_perishable:
          type: boolean
          description: Se este produto é perecível.
          readOnly: true
          example: true
        stock_settings:
          type: object
          description: Configurações de estoque do produto.
          readOnly: true
          properties:
            is_stock_control:
              type: boolean
              description: Se este produto possui um controle de estoque.
              example: true
            is_stock_notification:
              type: boolean
              description: Se este produto tem notificação de estoque.
              example: false
            min:
              type: integer
              description: >-
                Se `is_stock_notification` = `true`. Quantidade mínima no
                estoque.
              example: 1
            max:
              type: integer
              description: >-
                Se `is_stock_notification` = `true`. Quantidade máxima no
                estoque.
              example: 1
        kds:
          type: array
          description: Lista de KDS associados ao produto.
          readOnly: true
          items:
            $ref: '#/components/schemas/ProductKds'
        price_lists:
          type: array
          description: >
            Lista de preços do produto.


            **Nota:** Esta propriedade só será carregada caso seja passado o
            filtro `with_price_list` na URL.
          items:
            type: object
            properties:
              value:
                type: object
                properties:
                  amount:
                    type: number
                    format: float
                    description: Valor do preço.
                    example: 99.95
                  currency:
                    type: string
                    description: Moeda do preço.
                    example: BRL
              price_list:
                type: object
                properties:
                  id:
                    type: integer
                    description: Identificador único da lista de preços.
                    example: 1
                  name:
                    type: string
                    description: Nome da lista de preços.
                    example: Lista Padrão
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
      required:
        - id
        - name
        - sku
        - unitary_value
        - category_id
        - category
        - unit_id
        - unit
    ProductComposition:
      type: object
      title: Componente
      description: Representa um Componente associado com o produto.
      properties:
        id:
          type: integer
          description: >
            Identificador único da associação do componente com o produto.


            Esse compo é **readOnly na criação** e pode ser informado na edição
            para atualização.
          example: 123
        product_id:
          type: integer
          description: >-
            Identificador do produto a ser associado com o produto principal.
            (Ex: Combo)
          example: 123
          writeOnly: true
        unitary_value:
          writeOnly: true
          description: >
            Valor unitário do produto na associação do componente com o
            produto. 


            Esse valor pode ser diferente do valor do valor original do produto.
          allOf:
            - $ref: '#/components/schemas/Money'
        amount:
          type: number
          description: >-
            Quantidade de itens do componente na venda do produto principal (Ex:
            combo).
          minimum: 1
          example: 1
        waste_amount:
          type: number
          description: >-
            Quantidade de desperdício do componente para geração da venda do
            produto principal (Ex: produto de produção).
          minimum: 0
          example: 0.5
        position:
          type: integer
          description: Indica a posição de ordenação do componente em listagens
          example: 1
        product:
          type: object
          description: Dados do produto que Compõe o produto principal.
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/Product'
        created_at:
          type: string
          description: Data de criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    ProductGridItem:
      type: object
      title: Item da grade de preço
      description: Representa um item (opção) da grade de preço.
      properties:
        option_id:
          type: integer
          description: Identificador único da opção.
          example: 123
        name:
          type: string
          description: Nome da opção.
          example: Opção 1
        order:
          type: integer
          description: Ordem do item na grade de preço.
          minimum: 0
          example: 0
    ProductGrid:
      type: object
      title: Grade de preço
      description: >-
        Representa uma grade de preço de um conjunto de atributos associada a um
        produto.
      properties:
        id:
          type: integer
          description: >
            Identificador único da grade de preço.


            Esse compo é **readOnly na criação** e pode ser informado na edição
            para atualização.
          example: 123
        product_id:
          type: integer
          description: |
            Identificador único do produto relacionado a grade de preço.
          example: 123
        order:
          type: integer
          description: Ordem da grade de preço.
          minimum: 0
          example: 0
        unitary_value:
          description: >
            Valor unitário do produto na grade de preço.


            _Também pode ser interpretado como valor unitário do produto para o
            conjuntos das opções contida em `options` desse objeto_.


            Esse valor pode ser diferente do valor do valor original do produto.
          allOf:
            - $ref: '#/components/schemas/Money'
        status:
          type: string
          description: |
            Status da grade de preço.

            - `active`: grade de preço disponíveis para venda.
            - `inactive`: grade de preço não disponíveis para venda.
          enum:
            - active
            - inactive
          example: active
        barcode:
          type: string
          description: Código de barras da grade de preço.
          example: '1234567890123'
        image:
          type: string
          description: URL da imagem da grade de preço.
          format: url
          example: https://images.connectplug.com.br/4f01c1252eea.jpg
        options:
          type: array
          description: Lista de opções que compõe a grade de preço.
          items:
            $ref: '#/components/schemas/ProductGridItem'
        created_at:
          type: string
          description: Data de criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    ProductAdditionalItem:
      type: object
      properties:
        product_id:
          type: integer
          description: >-
            Identificador do produto adicional associado com o produto
            principal.
          example: 123
          writeOnly: true
        amount:
          type: number
          description: Quantidade de itens do adicional na venda do produto principal.
          minimum: 1
          example: 1
        waste_amount:
          type: number
          description: >-
            Quantidade de desperdício do adicional para geração da venda do
            produto principal.
          minimum: 0
          example: 0.5
        max_choices:
          type: integer
          description: |
            Número máximo de adicionais que devem ser selecionado.
          example: 1
        position:
          type: integer
          description: Indica a posição de ordenação do produto adicional em listagens.
          example: 1
        product:
          type: object
          description: Dados do produto adicional.
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/Product'
      required:
        - product_id
        - amount
    ProductAdditionals:
      type: object
      properties:
        min_choices:
          type: integer
          description: >
            Número mínimo de produtos adicionais que devem ser selecionado.


            Se o número mínimo for `0` torna a seleção de produtos adicionais
            opcional, se o número for maior que `0` torna a seleção obrigatória
            até o número mínimo de opções selecionadas.
          example: 0
        max_choices:
          type: integer
          description: |
            Número máximo de produtos adicionais que devem ser selecionado.

            O número máximo deve ser igual ou maior que o número mínimo.
          example: 1
        charge_from_quantity:
          type: integer
          description: >
            Indica a partir de qual quantidade de adicionais deve iniciar o
            calculo de cobrança.


            Se `charge_from_quantity` for `2`, e o forem seleciona 3 adicionais
            para o produto no valor de `10` BRL, o valor do atributo será
            equivalente à `10` BRL, e não `30` BRL, pois ele só começa a ser
            calculado a partir da opção número 3.
          default: 0
          example: 0
        items:
          type: array
          description: Lista de produtos adicionais
          items:
            $ref: '#/components/schemas/ProductAdditionalItem'
      required:
        - items
        - min_choices
        - max_choices
    ProductRecommendation:
      type: object
      title: Recomendação de produto
      description: >-
        Representa uma recomendação de produto no momento da venda do produto
        principal.
      properties:
        product_id:
          type: integer
          description: >-
            Identificador do produto a ser recomendado na venda do produto
            principal.
          example: 123
          writeOnly: true
        position:
          type: integer
          description: Indica a posição de ordenação do produto recomendado nas listagens.
          example: 1
        product:
          type: object
          description: Dados do produto recomendado.
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/Product'
    ProductKds:
      type: object
      description: Representa um KDS.
      properties:
        id:
          type: integer
          description: Identificador único do KDS na CPlug.
          example: 1
          readOnly: true
        name:
          type: string
          description: Nome do KDS.
          example: KDS Cozinha
    ProductImage:
      type: object
      title: Imagem do Produto
      description: Dados da imagem do Produto.
      properties:
        image_url:
          type: string
          format: url
          description: URL da imagem principal do produto.
          example: https://images.connectplug.com.br/4f01c1252eea.jpg
      required:
        - image_url
    ProductCompositionDetail:
      type: object
      title: Detalhe da Composição do Produto
      description: >-
        Representa os detalhes de uma composição de produto com informações
        completas do componente.
      properties:
        id:
          type: integer
          description: Identificador único da composição.
          example: 2
        id_component:
          type: integer
          description: Identificador do componente.
          example: 5
        amount:
          type: number
          description: Quantidade do componente na composição.
          example: 1.05
        value:
          description: Valor do componente na composição.
          $ref: '#/components/schemas/Money'
        disabled:
          type: boolean
          description: Indica se o componente está desabilitado.
          example: false
        is_optional:
          type: boolean
          description: Indica se o componente é opcional.
          example: true
        order:
          type: integer
          description: Ordem do componente na composição.
          example: 126
        component:
          type: object
          description: Dados completos do produto componente.
          properties:
            id:
              type: integer
              description: Identificador único do produto componente.
              example: 5
            name:
              type: string
              description: Nome do produto componente.
              example: Penas
            sku:
              type: string
              description: Código SKU do produto componente.
              example: '5'
            category:
              type: object
              description: Categoria do produto componente.
              properties:
                id:
                  type: integer
                  description: Identificador único da categoria.
                  example: 6
                name:
                  type: string
                  description: Nome da categoria.
                  example: Matéria-Prima
            image_url:
              type:
                - 'null'
                - string
              description: URL da imagem do produto componente.
              format: url
              example: null
            unitary_value:
              description: Valor unitário do produto componente.
              $ref: '#/components/schemas/Money'
    ProductCompositionsResponse:
      type: object
      title: Resposta das Composições do Produto
      description: Resposta contendo os dados do produto e suas composições.
      properties:
        data:
          type: object
          description: Dados da resposta.
          properties:
            product:
              type: object
              description: Dados do produto principal.
              properties:
                id:
                  type: integer
                  description: Identificador único do produto.
                  example: 3
                name:
                  type: string
                  description: Nome do produto.
                  example: Travesseiro
                sku:
                  type: string
                  description: Código SKU do produto.
                  example: '3'
                category:
                  type: object
                  description: Categoria do produto.
                  properties:
                    id:
                      type: integer
                      description: Identificador único da categoria.
                      example: 7
                    name:
                      type: string
                      description: Nome da categoria.
                      example: Mercadoria para Revenda
                image_url:
                  type:
                    - 'null'
                    - string
                  description: URL da imagem do produto.
                  format: url
                  example: null
                unitary_value:
                  description: Valor unitário do produto.
                  $ref: '#/components/schemas/Money'
            max_remove_components:
              type: integer
              description: Número máximo de componentes que podem ser removidos.
              example: 4
            compositions:
              type: array
              description: Lista das composições do produto.
              items:
                $ref: '#/components/schemas/ProductCompositionDetail'
    ProductComposeDetail:
      type: object
      description: Detalhes de um produto que é composto por um determinado componente.
      properties:
        component_id:
          type: integer
          description: ID do componente utilizado no produto
          example: 4
        product_id:
          type: integer
          description: ID do produto que utiliza este componente
          example: 3
        product:
          type: object
          description: Informações completas do produto que utiliza este componente
          properties:
            id:
              type: integer
              description: ID do produto
              example: 3
            name:
              type: string
              description: Nome do produto
              example: Travesseiro
            sku:
              type: string
              description: SKU do produto
              example: '3'
            category:
              type: object
              description: Categoria do produto
              properties:
                id:
                  type: integer
                  description: ID da categoria
                  example: 7
                name:
                  type: string
                  description: Nome da categoria
                  example: Mercadoria para Revenda
            image_url:
              type:
                - 'null'
                - string
              description: URL da imagem do produto
              format: url
              example: null
            unitary_value:
              type: object
              description: Valor unitário do produto
              allOf:
                - $ref: '#/components/schemas/Money'
    ProductComposesResponse:
      type: object
      description: >-
        Resposta contendo os produtos que são compostos por um determinado
        componente.
      properties:
        data:
          type: object
          description: Dados da resposta
          properties:
            product:
              type: object
              description: Informações do produto/componente consultado
              properties:
                id:
                  type: integer
                  description: ID do produto
                  example: 4
                name:
                  type: string
                  description: Nome do produto
                  example: Penas de Ganso
                sku:
                  type: string
                  description: SKU do produto
                  example: COPS7
                category:
                  type: object
                  description: Categoria do produto
                  properties:
                    id:
                      type: integer
                      description: ID da categoria
                      example: 1
                    name:
                      type: string
                      description: Nome da categoria
                      example: Outras
                image_url:
                  type:
                    - 'null'
                    - string
                  description: URL da imagem do produto
                  format: url
                  example: null
                unitary_value:
                  type: object
                  description: Valor unitário do produto
                  allOf:
                    - $ref: '#/components/schemas/Money'
            composes:
              type: array
              description: Lista dos produtos que são compostos por este componente
              items:
                $ref: '#/components/schemas/ProductComposeDetail'
    StockProductBalanceUnit:
      type: object
      description: Representa uma unidade de medida
      properties:
        abbreviation:
          type: string
          description: Símbolo da unidade de medida.
          example: Un
        precision:
          type: integer
          description: Precisão da unidade de medida.
          example: 2
    StockProductBalanceProduct:
      type: object
      description: Representa um produto no estoque;
      properties:
        id:
          type: integer
          description: Identificador único do produto na CPlug.
          example: 1
        name:
          type: string
          description: Nome do produto.
          example: Produto simples
        sku:
          type: string
          description: Código do produto.
          example: A747
        unit_of_measure:
          description: Unidade de medida do produto.
          $ref: '#/components/schemas/StockProductBalanceUnit'
    ProductStockOptionsBalance:
      type: object
      description: Representa a quantidade no estoque com estas opções no estoque;
      properties:
        balance:
          type: number
          description: Indica a quantidade do produto no estoque.
          example: 10
        options:
          type: array
          description: Lista de estoques.
          items:
            type: object
            description: Representa uma opções
            properties:
              option_id:
                type: number
                description: Identificador único da opção.
                example: 1
              name:
                type: string
                description: Nome da opção.
                example: Opção 01
    ProductStockBalance:
      type: object
      description: Representa um estoque que o produto se encontra;
      properties:
        stock_name:
          type: string
          description: Nome do estoque.
          example: Estoque padrão
        product_stock_options:
          type: array
          description: Lista de estoques.
          items:
            $ref: '#/components/schemas/ProductStockOptionsBalance'
    ProductStocksBalance:
      type: object
      description: Representa um produto nos estoques;
      properties:
        product:
          description: Informações de produto.
          $ref: '#/components/schemas/StockProductBalanceProduct'
        balance:
          type: number
          description: Indica a quantidade total do produto nos estoques.
          example: 10
        stocks:
          type: array
          description: Lista de estoques.
          items:
            $ref: '#/components/schemas/ProductStockBalance'
    ProductBalanceUpdate:
      type: object
      title: Atualização de Tipo de Balança e Códigos de Barras do Produto
      description: >-
        Dados para atualizar o tipo de balança e códigos de barras de um
        produto.
      properties:
        barcodes:
          type: array
          description: >
            Lista dos códigos de barras do produto.


            Se este campo não for enviado, os códigos de barras existentes no
            produto não serão alterados.
          items:
            type: string
            description: Código de barra do produto.
            maxLength: 30
            example: barcode17
          example:
            - barcode17
        balance_type:
          type:
            - 'null'
            - string
          description: |
            Tipo de balança do produto.

            **Valores possíveis:**
            - `weight`: Balança por peso
            - `unit`: Balança por unidade  
            - `value`: Balança por valor
            - `null`: Não definir tipo de balança (valor padrão se não enviado)

            Se este campo não for enviado, o valor padrão será `null`.
          enum:
            - weight
            - unit
            - value
            - null
          default: null
          example: weight
      additionalProperties: false
    StockMovementCostHistory:
      type: object
      description: Representa uma movimentação de entrada de produto no estoque;
      properties:
        id:
          type: integer
          description: Identificador único da movimentação de entrada.
          example: 1
        cost:
          description: Valor unitário do custo do produto.
          $ref: '#/components/schemas/Money'
        quantity:
          type: number
          description: Indica a quantidade do produto que foi movimentado no estoque.
          example: 10
        purchase_id:
          type: integer
          description: ID único da da compra.
          example: 201
        date:
          type: string
          description: data da movimentação.
          format: date
          example: '2024-09-13'
        stock_id:
          type: integer
          description: ID único do estoque.
          example: 123
        product_id:
          type: integer
          description: ID único do produto.
          example: 456
    ProductCostHistory:
      type: object
      description: Informações sobre o custo de um produto.
      properties:
        average_cost:
          description: Custo médio do produto.
          $ref: '#/components/schemas/Money'
        stock_movements:
          type: array
          description: Histórico das movimentações de entrada.
          items:
            $ref: '#/components/schemas/StockMovementCostHistory'
    NewProductGridItem:
      type: object
      title: Item da grade de preço
      description: Representa um item (opção) da grade de preço.
      properties:
        id:
          type: integer
          description: Identificador único da opção.
          example: 123
        name:
          type: string
          description: Nome da opção.
          example: Opção 1
        order:
          type: integer
          description: Ordem do item na grade de preço.
          minimum: 0
          example: 0
    NewProductGrid:
      type: object
      title: Grade de preço
      description: >-
        Representa uma grade de preço de um conjunto de atributos associada a um
        produto.
      properties:
        id:
          type: integer
          description: >
            Identificador único da grade de preço.


            Esse compo é **readOnly na criação** e pode ser informado na edição
            para atualização.
          example: 123
        product_id:
          type: integer
          description: |
            Identificador único do produto relacionado a grade de preço.
          example: 123
        order:
          type: integer
          description: Ordem da grade de preço.
          minimum: 0
          example: 0
        status:
          type: string
          description: |
            Status da grade de preço.

            - `active`: grade de preço disponíveis para venda.
            - `inactive`: grade de preço não disponíveis para venda.
          enum:
            - active
            - inactive
          example: active
        barcode:
          type: string
          description: Código de barras da grade de preço.
          example: '1234567890123'
        image:
          type: string
          description: URL da imagem da grade de preço.
          format: url
          example: https://images.connectplug.com.br/4f01c1252eea.jpg
        created_at:
          type: string
          description: Data de criação.
          format: date-time
          readOnly: true
          example: '2025-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2025-01-01T09:00:00-03:00'
        unitary_value:
          description: >
            Valor unitário do produto na grade de preço.


            _Também pode ser interpretado como valor unitário do produto para o
            conjuntos das opções contida em `options` desse objeto_.


            Esse valor pode ser diferente do valor do valor original do produto.
          allOf:
            - $ref: '#/components/schemas/Money'
        options:
          type: array
          description: Lista de opções que compõe a grade de preço.
          items:
            $ref: '#/components/schemas/NewProductGridItem'
    ProductConsumptionCoupon:
      type: object
      title: Configuração de ficha de consumo do produto
      description: Dados da configuração de ficha de consumo do produto.
      properties:
        items:
          type: array
          description: Lista de configurações de fichas de consumo por produto.
          items:
            type: object
            properties:
              product:
                $ref: '#/components/schemas/ProductSlim'
              is_enabled:
                type: boolean
                description: >-
                  Define se a geração de ficha de consumo do produto está
                  habilitada.
                example: true
    ProductAttributeOption:
      type: object
      title: Opção
      description: Representa uma Opção de um Atributo.
      properties:
        id:
          type: integer
          description: Identificador único da opção.
          readOnly: true
          example: 123
        name:
          type: string
          maxLength: 200
          minLength: 1
          description: Nome da opção.
          example: Nome da opção
        code:
          type: string
          description: 'Código da opção. Esse código deve ser único. Exemplo: COD-CP-01'
          maxLength: 30
          example: COD-CP-01
        description:
          type: string
          description: Descrição da opção.
          maxLength: 500
          example: Descrição da opção
        unitary_value:
          description: Valor unitário da opção.
          $ref: '#/components/schemas/Money'
        image_url:
          type:
            - 'null'
            - string
          description: >-
            URL da imagem da opção (mande este parâmetro vazio para excluir a
            imagem).
          format: url
          example: https://images.connectplug.com.br/4f01c1252eea.jpg
        position:
          type: integer
          description: Indica a posição de ordenação da opção em listagens.
          example: 1
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
      required:
        - id
        - name
    ProductAttribute:
      type: object
      title: Atributo
      description: Representa um Atributo.
      properties:
        id:
          type: integer
          description: Identificador único do atributo.
          readOnly: true
          example: 123
        name:
          type: string
          maxLength: 200
          minLength: 1
          description: Nome do atributo.
          example: Nome do atributo
        code:
          type: string
          description: 'Código do atributo. Esse código deve ser único. Exemplo: COD-CP-01'
          maxLength: 30
          example: COD-CP-01
        price_calculation_type:
          description: |
            Tipo de calculo de preço a ser aplicado nas opções do atributo.

            - `highest`: calcula pelo maior valor.
            - `average`: calcula pela média dos valores.
            - `proportional`: calcula proporcionalmente os valores.
            - `cumulative`: calcula a soma dos valores.
          type: string
          enum:
            - highest
            - average
            - proportional
            - cumulative
          default: highest
          example: highest
        min_choices:
          type: integer
          description: >
            Número mínimo de opções que devem ser seleciona no atributo.


            Se o número mínimo for `0` torna a seleção de atributos opcional, se
            o número for maior que `0` torna a seleção de atributos obrigatória
            até o número mínimo de opções selecionadas.
          example: 0
        max_choices:
          type: integer
          description: |
            Número máximo de opções que devem ser seleciona no atributo.

            O número máximo deve ser igual ou maior que o número mínimo.
          example: 1
        charge_from_quantity:
          type: integer
          description: >
            Indica a partir de qual quantidade de atributos deve iniciar o
            calculo de cobrança pelo atributo selecionado.


            Se `charge_from_quantity` for `2`, e o forem seleciona 3 opções para
            o atributo no valor de `10` BRL com o tipo de calculo `cumulative`,
            o valor do atributo será equivalente à `10` BRL, e não `30` BRL,
            pois ele só começa a ser calculado a partir da opção número 3.
          default: 0
          example: 0
        position:
          type: integer
          description: Indica a posição de ordenação do atributo em listagens
          example: 1
        product_count:
          type: integer
          description: Indica a quantidade de produtos que possuem esse atributo
          example: 4
        options:
          type: array
          description: Lista de opções do atributo.
          items:
            $ref: '#/components/schemas/ProductAttributeOption'
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
      required:
        - id
        - name
    DreAccountPlan:
      title: DRE Account Plan
      description: Representa um plano de conta dentro de uma conta contábil no DRE
      type: object
      required:
        - name
        - total
      properties:
        id:
          type: integer
          description: >
            ID único do plano de conta.

            Pode ser null para planos de conta especiais como "Descontos" ou
            "Juros".
          example: 10
        name:
          type: string
          description: Nome do plano de conta
          example: Vendas de Produtos
        total:
          description: Valor total das movimentações deste plano de conta no período
          $ref: '#/components/schemas/Money'
    DreFinancialAccount:
      title: DRE Financial Account
      description: >-
        Representa uma conta contábil no Demonstrativo de Resultado do Exercício
        (DRE)
      type: object
      required:
        - name
        - type
        - total
        - account_plans
      properties:
        id:
          type: integer
          description: ID único da conta contábil
          example: 123
        name:
          type: string
          description: Nome da conta contábil
          example: Receita de Vendas
        type:
          type: string
          description: |
            Tipo da conta contábil:
            - `income`: Receita
            - `expense`: Despesa
          enum:
            - income
            - expense
          example: income
        total:
          description: Valor total das movimentações da conta no período
          $ref: '#/components/schemas/Money'
        account_plans:
          type: array
          description: Lista de planos de conta relacionados a esta conta contábil
          items:
            $ref: '#/components/schemas/DreAccountPlan'
    DeliveryArea:
      type: object
      title: Área de entrega
      description: Representa uma área de entrega.
      properties:
        id:
          type: integer
          description: Identificador único da área de entrega.
          readOnly: true
          example: 1
        district:
          type: string
          description: Nome do bairro.
          example: Centro
        city:
          $ref: '#/components/schemas/City'
        price:
          description: Valor da taxa de entrega.
          $ref: '#/components/schemas/Money'
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    NfeManifestBody:
      type: object
      additionalProperties: false
      description: Dados para manifestação de documento fiscal eletrônico
      properties:
        key:
          type: string
          description: >
            Chave de acesso do documento fiscal eletrônico (44 caracteres).

            Você pode localizar as chaves dos documentos fiscais no _endpoint_
            de [listagem de documentos fiscais
            recebidos](#tag/Nfe/operation/get-nfe-received-documents).
          example: '43200714200166000187560010000000047423090038'
        type:
          type: string
          description: |
            Tipo da manifestação a ser realizada:
            - `210200`: Confirmação da Operação
            - `210210`: Ciência da Operação  
            - `210220`: Desconhecimento da Operação
            - `210240`: Operação não Realizada (requer justificativa)
          enum:
            - '210200'
            - '210210'
            - '210220'
            - '210240'
          example: '210210'
        justification:
          type: string
          description: >
            Justificativa para a manifestação. 


            **Obrigatório** apenas para o tipo `210240` (Operação não
            Realizada).

            Deve conter entre 15 e 255 caracteres quando informado.
          minLength: 15
          maxLength: 255
          example: Operação não foi realizada devido a problemas técnicos
      required:
        - key
        - type
    NfeEmittedDocumentsResponse:
      type: object
      additionalProperties: false
      properties:
        data:
          type: object
          properties:
            documents:
              type: array
              description: Lista de documentos fiscais eletrônicos emitidos
              items:
                type: object
                additionalProperties: false
                properties:
                  id:
                    type: integer
                    description: ID único do documento
                    example: 447
                  key:
                    type:
                      - string
                      - 'null'
                    description: Chave de acesso do documento fiscal
                    example: '12345678901234567890123456789012345678901234'
                  emitted_at:
                    type: string
                    format: date-time
                    description: Data e hora de emissão do documento
                    example: '2025-07-03 14:01:48'
                  number:
                    type: string
                    description: Número do documento fiscal
                    example: '12345'
                  serie:
                    type: string
                    description: Série do documento fiscal
                    example: '1'
                  model:
                    type:
                      - integer
                      - 'null'
                    description: Modelo do documento fiscal
                    example: 55
                  value:
                    description: Valor do documento fiscal
                    $ref: '#/components/schemas/Money'
                  customer:
                    type: object
                    additionalProperties: false
                    description: Dados do cliente/destinatário
                    properties:
                      name:
                        type:
                          - string
                          - 'null'
                        description: Nome/razão social do cliente
                        example: Cliente Teste Ltda
                      cnpj:
                        type:
                          - string
                          - 'null'
                        description: CNPJ do cliente
                        example: '12345678000190'
                    required:
                      - name
                      - cnpj
                  status:
                    type: string
                    description: |
                      Status do documento.

                      - `Pending`: Pendente
                      - `Canceled`: Cancelado
                      - `Inutilized`: Inutilizado
                      - `Transmitted`: Transmitido
                      - `Failed`: Falha
                    example: Pending
                  download:
                    type: string
                    format: uri
                    description: URL para download do documento
                    example: >-
                      http://erp.connectplug.com.br/file/eyJpdiI6IkR1Tk5kYXhPNWVvRGtqbElJVC9iVUE9PSIsInZhbHVlIjoiUzZoOXVUZVhHQVUxb1FQUDV4a0l4UT09IiwibWFjIjoiN2JkNmM0ZTU0MmEwOWZiZWQ2YTQxNThhZmM3YTkwNDU4NjcwYWQ1MDkzMDc1MWVkYTIwYzkzMjg3YzkzOThkYyIsInRhZyI6IiJ9/download
                  download_xml_canceled:
                    type:
                      - string
                      - 'null'
                    format: uri
                    description: URL para download do XML de cancelamento
                    example: null
                required:
                  - id
                  - key
                  - emitted_at
                  - number
                  - serie
                  - model
                  - value
                  - customer
                  - status
                  - download
                  - download_xml_canceled
        meta:
          $ref: '#/components/schemas/MetaPagination'
      required:
        - data
        - meta
    RequestedNotesSchedule:
      type: object
      title: Envio Automático de Notas
      description: Representa um envio automático de notas fiscais.
      properties:
        id:
          type: integer
          description: ID do envio automático.
          example: 3
        user:
          type: object
          description: Usuário que criou o envio automático.
          properties:
            id:
              type: integer
              description: ID do usuário.
              example: 1
            name:
              type: string
              description: Nome do usuário.
              example: Marlon Minotti
            email:
              type: string
              description: E-mail do usuário.
              example: teste@teste.com
        created_at:
          type: string
          format: date-time
          description: Data e hora de criação do envio automático.
          example: '2025-09-11T12:44:09.000000Z'
        day:
          type: integer
          description: Dia do mês para envio das notas (1-31).
          minimum: 1
          maximum: 31
          example: 10
        email:
          type: string
          format: email
          description: E-mail para onde serão enviadas as notas.
          example: marlon.minotti@cplug.com.br
      required:
        - id
        - user
        - created_at
        - day
        - email
    NfeSendingHistory:
      type: object
      title: Histórico de Envio de NFe
      description: Representa um histórico de envio de NFe emitidas por email.
      properties:
        id:
          type: integer
          description: ID do histórico de envio.
          example: 3
        user:
          type: object
          description: Usuário que solicitou o envio.
          properties:
            id:
              type: integer
              description: ID do usuário.
              example: 1
            name:
              type: string
              description: Nome do usuário.
              example: Marlon Minotti
            email:
              type: string
              description: E-mail do usuário.
              example: teste@teste.com
        date_start:
          type: string
          format: date-time
          description: Data inicial do período filtrado para envio.
          example: '2025-09-01T03:00:00.000000Z'
        date_end:
          type: string
          format: date-time
          description: Data final do período filtrado para envio.
          example: '2025-09-30T03:00:00.000000Z'
        file_url:
          type:
            - string
            - 'null'
          description: URL do arquivo gerado para envio (se disponível).
          example: https://s3.amazonaws.com.....
        status:
          type: string
          description: |
            Situação atual do envio.

            - `waiting`: Em processamento
            - `processing`: Buscando notas
            - `done`: Concluído
            - `not_found`: Nenhuma nota encontrada
          enum:
            - waiting
            - processing
            - done
            - not_found
          example: done
        expired_at:
          type:
            - string
            - 'null'
          format: date-time
          description: Data e hora de expiração do histórico.
          example: null
        requested_at:
          type: string
          format: date-time
          description: Data e hora da solicitação de envio.
          example: '2025-09-12T17:45:40.000000Z'
    NfeSendingHistoriesResponse:
      type: object
      title: Resposta de Históricos de Envio de NFe
      description: Resposta contendo lista de históricos de envio de NFe emitidas.
      properties:
        data:
          type: object
          description: Dados da resposta
          additionalProperties: false
          properties:
            sending_histories:
              type: array
              description: Lista de históricos de envio de NFe.
              items:
                $ref: '#/components/schemas/NfeSendingHistory'
      required:
        - data
    NfeReceivedDocument:
      type: object
      additionalProperties: false
      description: Documento fiscal eletrônico recebido
      properties:
        id:
          type: integer
          description: ID único do documento
          example: 933
        key:
          type: string
          description: Chave de acesso do documento fiscal
          example: '12345678901234567890123456789012345678901234'
        emitted_at:
          type: string
          format: date
          description: Data de emissão do documento
          example: '2024-08-11'
        number:
          type: string
          description: Número do documento fiscal
          example: '12345'
        serie:
          type: string
          description: Série do documento fiscal
          example: '144'
        model:
          type: integer
          description: Modelo do documento fiscal
          example: 55
        value:
          description: Preço do produto
          $ref: '#/components/schemas/Money'
        sender:
          type: object
          additionalProperties: false
          description: Dados do remetente/emitente
          properties:
            name:
              type: string
              description: Razão social do remetente
              example: Fornecedor Teste Ltda
            cnpj:
              type: string
              description: CNPJ do remetente
              example: '12345678000190'
          required:
            - name
            - cnpj
        status:
          type: string
          description: Status do documento
          example: Transmitted
          enum:
            - Pending
            - Transmitted
            - Canceled
        origem:
          type: string
          description: Origem do documento
          example: Auto
          enum:
            - Auto
            - Manual
        is_import:
          type: boolean
          description: Indica se o documento foi importado
          example: false
        is_auto:
          type: boolean
          description: Indica se é processamento automático
          example: true
        download:
          type: string
          format: uri
          description: URL para download do documento
          example: >-
            http://erp.connectplug.com.br/file/eyJpdiI6ImlWVWQ2MlI4K29WdHFabzBlNHNRYXc9PSIsInZhbHVlIjoiVk1LMWdzZGlpL1ZkT25BcTdBTEIwZz09IiwibWFjIjoiYTI4MDFmNDI3ZGY1NjNjNzM2NjA1YjNhMWQxYmJkYjRiNTVjYTkyYjZjYzliZTA1N2Q2YjU1NjRiZThiN2Y4ZiIsInRhZyI6IiJ9/download
        download_xml_canceled:
          type: string
          format: uri
          description: URL para download do XML de cancelamento
          example: >-
            http://erp.connectplug.com.br/file/eyJpdiI6IlJ2Tkh0YnM5N1JTYXBGOVhRNmRoNUE9PSIsInZhbHVlIjoiVG9oYVdwVzBZemJoY3cyQWpNU2ZPUT09IiwibWFjIjoiY2U1YzgzYTk3MmFhZDNiOWM3NmI5NDY5NWUwNTY0NThjMzFhZGVlOGJjMTY2NjQyOGZlOTRlYzg4NTg0OTczZCIsInRhZyI6IiJ9/download
        print:
          type: string
          format: uri
          description: URL para impressão do documento
          example: http://erp.connectplug.com.br/sistema/facilita-nfe/print/933
      required:
        - id
        - key
        - emitted_at
        - number
        - serie
        - model
        - value
        - sender
        - status
        - is_import
        - is_auto
        - download
        - print
    NfeReceivedDocumentEvent:
      type: object
      additionalProperties: false
      description: Evento de documento fiscal eletrônico recebido
      properties:
        id:
          type: integer
          description: ID único do evento
          example: 41
        emitted_at:
          type: string
          format: datetime
          description: Data e hora de emissão do evento
          example: '2024-05-14 10:43:31'
        type:
          type: string
          description: Tipo do evento
          example: '610600'
        description:
          type: string
          description: Descrição do evento
          example: Registro de Autorização de CT-e para a NF-e
        link:
          type: string
          description: Link de download do XML do evento
          example: >-
            http://erp.connectplug.com.br/api/v3/files/eyJpdiI6ImRkV2RScW53cVlDamM2VFZZclg5aUE9PSIsInZhbHVlIjoiQkZuY0c0dGtQWUZRVzc1VTFtWndPQT09IiwibWFjIjoiZGMzYWJkMDdkZjY0NTBhYmRkYzdkZTI3ZmY4YWE1MmFhYzgzZTA5Y2ZmODk4MjMwZDM4ZTQwNTE0YWJlMzkwYSIsInRhZyI6IiJ9/download
      required:
        - id
        - emitted_at
        - type
        - description
        - link
    Shift:
      type: object
      title: Turnos do horário de funcionamento.
      description: Representa um turno de horário de funcionamento.
      properties:
        week_day:
          type: integer
          description: |
            Dia da semana do turno de horário de funcionamento.

            - `0`: Domingo.
            - `1`: Segunda-feira.
            - `2`: Terça-feira.
            - `3`: Quarta-feira.
            - `4`: Quinta-feira.
            - `5`: Sexta-feira.
            - `6`: Sábado.
          example: 0
        time_start:
          type: string
          description: >-
            Hora de início do turno de horário de funcionamento no formato
            `H:i`.
          example: '09:00'
        time_end:
          type: string
          description: Hora de fim do turno de horário de funcionamento no formato `H:i`.
          example: '18:00'
    OpeningHours:
      type: object
      title: Horários de funcionamento
      description: Representa um conjunto de horários de funcionamento.
      properties:
        opening_hours:
          type: array
          description: Lista de horários de funcionamento.
          items:
            $ref: '#/components/schemas/Shift'
    SaleCustomer:
      type: object
      title: Cliente
      description: Representa um Cliente.
      properties:
        id:
          type: integer
          description: Identificador único do Cliente.
          readOnly: true
          example: 123
        name:
          type: string
          minLength: 1
          maxLength: 120
          description: Nome do cliente pessoa física ou Razão social.
          example: Nome do Cliente
        type:
          type: string
          enum:
            - individual
            - company
          description: |
            Tipo do cliente. 

            - `individual` (Pessoa física) 
            - `company` (Pessoa jurídica)
          example: individual
        order_count:
          type: integer
          description: Quantidade de pedidos do cliente.
          readOnly: true
          example: 10
        last_order_id:
          type: integer
          description: ID do último pedido do cliente.
          readOnly: true
          example: 123
        birthday:
          type: string
          format: date
          description: Data de nascimento do cliente Pessoa física. Formato "YYYY-MM-DD"
          example: '1990-12-25'
        companies:
          type: array
          description: Lista de empresas que permite visualizar.
          readOnly: true
          items:
            $ref: '#/components/schemas/RelationCompany'
        company_name:
          type: string
          maxLength: 120
          description: Razão social da pessoa jurídica.
          example: MyCompany
        notes:
          type: string
          description: Observações do cliente.
          example: Minhas obervações do cliente
        documents:
          type: array
          description: Lista de documentos do cliente.
          items:
            $ref: '#/components/schemas/Document'
        category:
          type: object
          readOnly: true
          $ref: '#/components/schemas/CustomerCategory'
        created_at:
          type: string
          description: Data da criação do cliente.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da atualização do cliente.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    SaleItemAttributeOption:
      type: object
      description: Representa uma opção de um atributo.
      properties:
        id:
          type: integer
          description: Id único da opção na relação
          example: 123
        option_id:
          type: integer
          description: Id único da opção
          example: 123
        code:
          type: string
          description: Código personalizado da opção
          example: code-123
        name:
          type: string
          description: Nome da opção
          example: Opção 1
        image:
          type:
            - string
            - 'null'
          description: URL da imagem da opção
          example: https://images.connectplug.com.br/4f01c1252eea.jpg
        amount:
          type: number
          description: quantidade
          example: 5
        unitary_value:
          description: Valor unitário da opção
          $ref: '#/components/schemas/Money'
        discount:
          description: Desconto na opção
          $ref: '#/components/schemas/Money'
        notes:
          type: string
          description: Observação da opção
          example: Sem cebola
    SaleItemAttribute:
      type: object
      description: Representa um atributo de um item da venda.
      properties:
        id:
          type: integer
          description: Id único do atributo do produto na relação
          example: 123
        attribute_id:
          type: integer
          description: Id único do atributo do produto
          example: 123
        min_choices:
          type: integer
          description: Quantidade mínima de opções que devem ser selecionadas
          example: 1
        max_choices:
          type: integer
          description: Quantidade máxima de opções que podem ser selecionadas
          example: 2
        name:
          type: string
          description: Nome do atributo
          example: Atributo
        charge_from_quantity:
          type: integer
          description: >
            Indica a partir de qual opção irá começar a cobrar.


            Ex: 3, indica se a partir da terceira opção que irá fazer parte do
            cálculo do total do atributo. 

            Portanto, a primeira e a segunda opção será de graça, ou seja, essas
            duas opções deverão estar 

            com o desconto igual ao valor total da opção.
          example: 2
        total_value:
          description: >
            Valor total deste atributo.


            É a soma dos valores das opções.


            Fórmula: `total_value = sum((option.amount * option.unitary_value) -
            option.discount)`
          $ref: '#/components/schemas/Money'
        price_calculation_type:
          enum:
            - Highest
            - Average
            - Cumulative
          description: >
            Tipo de cálculo no total do atributo. 


            Ex: average, quer dizer a o valor total do atributo será a média dos
            valores das opções


            - `Highest` maior valor das opções

            - `Average` média dos valores das opções

            - `Cumulative` soma dos valores das opções
        options:
          type: array
          description: Lista de opções de um atributo.
          items:
            $ref: '#/components/schemas/SaleItemAttributeOption'
    SaleItemAdditional:
      type: object
      description: Representa um adicional de um item da venda.
      properties:
        additional_id:
          type: integer
          description: ID do adicional
          example: 123
        amount:
          type: integer
          description: quantidade deste adicional
          example: 1
        unitary_value:
          description: Valor unitário deste adicional
          $ref: '#/components/schemas/Money'
        total_value:
          description: Valor total deste adicional
          $ref: '#/components/schemas/Money'
        image:
          type: string
          description: imagem do adicional
          example: >-
            mobile/totem/58723627fcebc230ab0d53ddf5f16e34/100/product_1_c1_add1.jpeg
        name:
          type: string
          description: Nome do adicional
          example: Adicional do produto
    SaleItemComponent:
      type: object
      description: Representa um produto vendido.
      properties:
        item_id:
          type: integer
          description: Id único do produto
          example: 123
        id:
          type: integer
          description: Id único do produto na relação
          example: 123
        combo_item_id:
          type: integer
          description: >-
            Id único do produto combo na relação, caso este item pertence a um
            combo
          example: 3
        grid_id:
          type: integer
          description: |
            Id único do grid que este item faz parte.

            O grid_id é o ID do Product Grid.
          example: 456
        amount:
          type: number
          description: quantidade
          example: 5
        image:
          type: string
          description: imagem do produto
          example: mobile/totem/58723627fcebc230ab0d53ddf5f16e34/100/product_1_c1.jpeg
        name:
          type: string
          description: Nome do produto
          example: Banana
        unitary_value:
          description: >
            Valor unitário do item.


            É a soma do valor base deste item com a soma dos adicionais e com a
            soma do total dos atributos.


            Fórmula: `unitary_value = valor base do item +
            sum(attributes.total_value) + sum(additionals.total_value)`
          $ref: '#/components/schemas/Money'
        total_value:
          description: |
            Valor total do item.

            É a multiplicação da quantidade pelo valor unitário deste item.

            Fórmula: `total_value = amount * unitary_value`
          $ref: '#/components/schemas/Money'
        discount:
          description: Desconto do produto
          $ref: '#/components/schemas/Money'
        stock_id:
          type: integer
          description: Id único do estoque
          example: 1234
        attributes:
          type: array
          description: Lista de atributos deste produto nesta venda.
          items:
            $ref: '#/components/schemas/SaleItemAttribute'
        additionals:
          type: array
          description: Lista de adicionais deste produto nesta venda.
          items:
            $ref: '#/components/schemas/SaleItemAdditional'
    SaleItem:
      type: object
      description: Representa um produto vendido.
      properties:
        item_id:
          type: integer
          description: Id único do produto
          example: 123
        id:
          type: integer
          description: Id único do produto na relação
          example: 123
        grid_id:
          type: integer
          description: |
            Id único do grid que este item faz parte.

            O grid_id é o ID do Product Grid.
          example: 456
        amount:
          type: number
          description: quantidade
          example: 5
        image:
          type: string
          description: imagem do produto
          example: mobile/totem/58723627fcebc230ab0d53ddf5f16e34/100/product_1_c1.jpeg
        name:
          type: string
          description: Nome do produto
          example: Banana
        unitary_value:
          description: >
            Valor unitário do item.


            É a soma do valor base deste item com a soma dos adicionais e com a
            soma do total dos atributos.


            Fórmula: `unitary_value = valor base do item +
            sum(attributes.total_value) + sum(additionals.total_value)`
          $ref: '#/components/schemas/Money'
        total_value:
          description: |
            Valor total do item.

            É a multiplicação da quantidade pelo valor unitário deste item.

            Fórmula: `total_value = amount * unitary_value`
          $ref: '#/components/schemas/Money'
        discount:
          description: Desconto do produto
          $ref: '#/components/schemas/Money'
        stock_id:
          type: integer
          description: Id único do estoque
          example: 1234
        attributes:
          type: array
          description: Lista de atributos deste produto nesta venda.
          items:
            $ref: '#/components/schemas/SaleItemAttribute'
        components:
          type: array
          description: >-
            Lista de componente que fazem parte deste combo, caso este item for
            um combo.
          items:
            $ref: '#/components/schemas/SaleItemComponent'
        additionals:
          type: array
          description: Lista de adicionais deste produto nesta venda.
          items:
            $ref: '#/components/schemas/SaleItemAdditional'
        price_list_product_id:
          type: integer
          description: >
            Id único da lista de produto do produto.


            Você pode localizar os IDs da lista de preço do produto no
            _endpoint_ de [listagem de produtos de uma lista de
            preço](#tag/PriceLists/operation/get-price-list-products).
          example: 456
        combo_id:
          type: integer
          description: >
            Id único do combo que este item faz parte.


            Você pode localizar os IDs dos combos no _endpoint_ de [listagem de
            produtos](#tag/Products/operation/get-products) com o filtro
            `types=combo`.
          example: 456
    SalePaymentMethod:
      type: object
      description: Representa um método de pagamento na venda.
      properties:
        id:
          type: integer
          description: Id único do método de pagamento
          example: 123
        name:
          type: string
          description: Nome do método de pagamento
          example: Cartão de crédito
        allow_installment:
          type: boolean
          description: Indica se o método de pagamento permite parcelamento.
          example: true
    SaleInstallment:
      type: object
      description: Representa uma parcela do método de pagamento.
      properties:
        id:
          type: integer
          description: Id da único da parcela do método de pagamento na relação
          example: 1
        value:
          description: valor desta parcela
          $ref: '#/components/schemas/Money'
        due_date:
          type: string
          description: Data de vencimento da parcela
          format: date-time
          example: '2020-01-01T09:00:00-03:00'
        observation:
          type: string
          description: observação desta parcela
          example: primeira parcela
    CardReceipt:
      type: object
      title: Dados do recibo do cartão
      description: Representa um dado do recibo do cartão.
      properties:
        authorization:
          type: string
          description: >-
            Número da autorização do cartão. Normalmente é o número que aparece
            ao lado da palavra `AUT`, `AUTORIZACAO`, ` A`
          example: '999996'
        nsu:
          type: string
          description: >-
            Número sequencial único. Normalmente é o número que aparece ao lado
            da palavra `DOC`, `CV`, `NSU`.
          example: '009999997'
        receipt:
          type: string
          description: Dados do recebio.
          example: |-
            SITEF
            00001
            BIN
            VIA - ESTABELECIMENTO
            CPLUG COMERCIO DE SOFTWARE LTDA
            Avenida da CPlug
            CuritibaTT000181
            EC:000000033999999       TERM:TFI038B9
            ************9999
            AUT=999996   CV=009999997   DOC=999998
            18/03/20       17:27:57              C
            VISA
            CREDITO A VISTA
            VALOR                           8.90
            TRANSACAO AUTORIZADA COM SENHA


            ARQC: 35E8DF8A3234C308
            VISA CREDITO
            AID:A0000000031010
            (SiTef)
    SalePayment:
      type: object
      description: Representa um pagamento de uma venda.
      properties:
        id:
          type: integer
          description: Id da único do método de pagamento na relação
          example: 1
        payment_method:
          description: Método de pagamento utilizado na venda
          $ref: '#/components/schemas/SalePaymentMethod'
        bank_account_id:
          type: integer
          description: Id da conta bancária
          example: 1
        total_value:
          description: valor total deste pagamento
          $ref: '#/components/schemas/Money'
        exchange_value:
          description: valor do troco, quando o tipo de pagamento for dinheiro
          $ref: '#/components/schemas/Money'
        installments:
          type: array
          description: Lista de parcelas deste método de pagamento
          items:
            $ref: '#/components/schemas/SaleInstallment'
        card_brand:
          description: Bandeira do cartão de crédito
          $ref: '#/components/schemas/CardBrand'
        card_contract_id:
          type: integer
          description: Id do contrato do cartão
          example: 1
        card_receipt:
          description: Dados do recibo do cartão
          $ref: '#/components/schemas/CardReceipt'
    SaleSeller:
      type: object
      title: Vendedor
      description: Representa um vendedor.
      properties:
        id:
          type: integer
          description: Identificador único do vendedor.
          example: 123
          readOnly: true
        name:
          type: string
          description: Nome do vendedor.
          example: Fulano de tal
        email:
          type: string
          description: E-mail do vendedor.
          example: vendedor@email.com
        username:
          type:
            - 'null'
            - string
          description: Nome de usuário do vendedor.
          example: Vendedor
        created_at:
          type: string
          description: Data da criação da vendedor.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da atualização da vendedor.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        deleted_at:
          type: string
          description: Data que foi apagado o vendedor.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    SaleCarrier:
      type: object
      description: Dados do transportador e frete.
      properties:
        shipping_fee:
          description: valor do frete
          $ref: '#/components/schemas/Money'
        carrier_id:
          type: integer
          description: Id do transportador
          example: 1
    SaleTotals:
      type: object
      description: Representa um resumo monetário da venda.
      properties:
        value:
          description: >-
            Valor total da venda já considerando o desconto e o frete e o valor
            de outras despesas
          $ref: '#/components/schemas/Money'
        discount:
          description: >-
            Valor de desconto na venda. Deixar em nulo quando um desconto no
            item for aplicado
          $ref: '#/components/schemas/Money'
        total_value_ipi:
          description: Valor total de IPI
          $ref: '#/components/schemas/Money'
        other_expenses_value:
          description: Valor total de outras despesas
          $ref: '#/components/schemas/Money'
    SourceType:
      type: string
      enum:
        - erp
        - pdv
        - store
        - totem
      description: |
        Canal de venda:

        - `erp`
        - `pdv`
        - `store`
        - `totem`
      example: erp
    GeoPoint:
      type: object
      properties:
        lat:
          type: number
          description: Latitude de um ponto geográfico.
          format: decimal
          example: -23.5505199
        lng:
          type: number
          description: Longitude de um ponto geográfico.
          format: decimal
          example: -46.6333093
      required:
        - lat
        - lng
    OrderDeliveryArea:
      type: object
      title: Área de entrega
      description: Representa uma área de entrega.
      properties:
        id:
          type: integer
          description: Identificador único da área de entrega.
          readOnly: true
          example: 1
        name:
          type: string
          description: Nome da área de entrega.
          example: Centro
        type:
          type: string
          description: |
            Tipo da área de entrega.

            - `circle`: Área de entrega circular (radio de entrega).
            - `polygon`: Área de entrega customizada.
          enum:
            - circle
            - polygon
          example: circle
        source_type:
          $ref: '#/components/schemas/SourceType'
        center_point:
          description: >
            Localização do centro da área de entrega.


            Esse compo é **obrigatório para áreas de entrega com tipo
            `circle`**. Esse compo não será considerado para áreas de entrega
            com tipo `polygon`.
          $ref: '#/components/schemas/GeoPoint'
        radius:
          description: >
            Raio da área de entrega em quilômetros (km).


            Esse compo é **obrigatório para áreas de entrega com tipo
            `circle`**. Esse compo não será considerado para áreas de entrega
            com tipo `polygon`.
          type: integer
          example: 10
        polygon:
          description: >
            Polígono da área de entrega.


            Esse compo é **obrigatório para áreas de entrega com tipo
            `polygon`**. Esse compo não será considerado para áreas de entrega
            com tipo `circle`.
          type: array
          items:
            $ref: '#/components/schemas/GeoPoint'
        price:
          description: Valor da taxa de entrega.
          $ref: '#/components/schemas/Money'
        min_waiting_time:
          description: Tempo em minutos estimado mínimo de espera para a entrega.
          type: integer
          example: 30
        max_waiting_time:
          description: Tempo em minutos estimado máximo de espera para a entrega.
          type: integer
          example: 60
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    SaleOrder:
      type: object
      title: Venda'
      description: Representa um pedido de venda.
      properties:
        id:
          type: integer
          description: Identificador numérico único do pedido de venda.
          readOnly: true
          example: 123
        number:
          type: integer
          description: Número do pedido de venda.
          readOnly: true
          example: 123
        unique_id:
          type: string
          description: Identificador único do pedido de venda.
          example: cf2e0a5e-aa58-4181-9c9b-47702bd2be99
        customer:
          description: Dados do cliente
          $ref: '#/components/schemas/SaleCustomer'
        address:
          description: Endereço da venda
          $ref: '#/components/schemas/Address'
        observation:
          type: string
          description: Obervação da venda
          example: Sem copo
        status:
          enum:
            - canceled
            - closed
            - in_preparation
            - in_route
            - open
            - reserved
            - takeout
            - waiting
          description: |
            Status do pedido de venda.

            - `canceled` pedido de venda cancelada.
            - `closed` pedido de venda fechada.
            - `in_preparation` pedido em preparação.
            - `in_route` pedido em entrega.
            - `open` pedido de venda aberta.
            - `reserved` pedido de venda reservada.
            - `takeout` pedido para retirar.
            - `waiting` pedido de venda em espera.
        items:
          type: array
          description: Lista de produtos deste pedido de venda.
          items:
            $ref: '#/components/schemas/SaleItem'
        payments:
          type: array
          description: Lista de pagamentos.
          items:
            $ref: '#/components/schemas/SalePayment'
        seller:
          description: Dados do vendedor
          $ref: '#/components/schemas/SaleSeller'
        carrier:
          description: Dados do frete e do transportador
          $ref: '#/components/schemas/SaleCarrier'
        total:
          description: Resumo monetário da venda
          $ref: '#/components/schemas/SaleTotals'
        source_type:
          $ref: '#/components/schemas/SourceType'
        company_name:
          type: string
          description: Razão social da pessoa jurídica.
          example: CPlug
        registration_date:
          type: string
          description: Data do registro da venda.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        delivery_type:
          enum:
            - delivery
            - withdrawal
          description: |
            Tipo de entrega do pedido:

            - `delivery` entrega
            - `withdrawal` retirada
        sale_id:
          type: integer
          description: Identificador numérico único de venda.
          readOnly: true
          example: 789
        delivery_area:
          $ref: '#/components/schemas/OrderDeliveryArea'
        created_at:
          type: string
          description: Data da criação da venda.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da atualização da venda.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    SaleOrderItemAttributeOptionRequest:
      type: object
      description: Representa uma opção de um atributo.
      properties:
        id:
          type: integer
          description: Id único da opção na relação. Obrigatório na atualização.
          example: 123
        option_id:
          type: integer
          description: Id único da opção
          example: 123
        amount:
          type: number
          description: quantidade. Obrigatório quando não tiver valor no `grid_id`
          example: 5
        unitary_value:
          description: >-
            Valor unitário da opção. Obrigatório quando não tiver valor no
            `grid_id`
          $ref: '#/components/schemas/Money'
        discount:
          description: Desconto na opção
          $ref: '#/components/schemas/Money'
      required:
        - option_id
    SaleOrderItemAttributeRequest:
      type: object
      description: Representa um atributo de um item do pedido de venda.
      properties:
        id:
          type: integer
          description: ID única do atributo na relação. Obrigatório na atualização.
          example: 456
        attribute_id:
          type: integer
          description: ID única do atributo.
          example: 789
        min_choices:
          type: integer
          description: >-
            número mínino que este atributo deve ter. Obrigatório quando não
            tiver valor no `grid_id`
          example: 1
        max_choices:
          type: integer
          description: >-
            número máximo que este atributo pode ter. Obrigatório quando não
            tiver valor no `grid_id`
          example: 2
        total_value:
          description: >
            Valor total deste atributo. Obrigatório quando não tiver valor no
            `grid_id`


            Formula: 
              - price_calculation_type = `Cumulative`: `total_value = sum((option.unitary_value * option.amount) - option.discount)`
              - price_calculation_type = `Highest`: `total_value = hightest(option.unitary_value)`
              - price_calculation_type = `Average`: `total_value = avg((option.unitary_value * option.amount) - option.discount)`
          $ref: '#/components/schemas/Money'
        price_calculation_type:
          enum:
            - Highest
            - Average
            - Cumulative
          description: >
            Tipo de cálculo no total do atributo. Obrigatório quando não tiver
            valor no `grid_id`


            Ex: average, quer dizer a o valor total do atributo será a média dos
            valores das opções


            - `Highest` maior valor das opções

            - `Average` média dos valores das opções

            - `Cumulative` soma dos valores das opções
        charge_from_quantity:
          type: integer
          description: >
            Indica a partir de qual opção irá começar a cobrar. Obrigatório
            quando não tiver valor no `grid_id`.


            Ex: 3, indica se a partir da terceira opção que irá fazer parte do
            cálculo do total do atributo. 

            Portanto, a primeira e a segunda opção será de graça, ou seja, essas
            duas opções deverão estar 

            com o desconto igual ao valor total da opção.
          example: 2
        options:
          type: array
          description: Lista de opções de um atributo.
          items:
            $ref: '#/components/schemas/SaleOrderItemAttributeOptionRequest'
      required:
        - options
        - attribute_id
    SaleItemAdditionalBody:
      type: object
      description: Representa um adicional de um item da venda.
      properties:
        additional_id:
          type: integer
          description: ID do adicional
          example: 123
        amount:
          type: integer
          description: quantidade deste adicional
          example: 1
        unitary_value:
          description: Valor unitário deste adicional
          $ref: '#/components/schemas/Money'
        discount:
          description: Valor de desconto
          $ref: '#/components/schemas/Money'
        total_value:
          description: >
            Valor total deste adicional.


            É o resultado da multiplicação do quantidade pelo o seu valor
            unitário menos o valor de desconto.


            total_value = (amount * unitary_value) - discount
          $ref: '#/components/schemas/Money'
      required:
        - additional_id
        - amount
        - unitary_value
        - total_value
    SaleOrderItemRequest:
      type: object
      description: Representa um item do pedido de venda.
      properties:
        item_id:
          type: integer
          description: Id único do item. Obrigatório na atualização.
          example: 123
        combo_item_id:
          type: integer
          description: >-
            Id único do produto combo na relação, caso este item pertence a um
            combo. Obrigatório na atualização.
          example: 123
        grid_id:
          type: integer
          description: |
            Id único do grid que este item faz parte.

            O `grid_id` é o ID do Product Grid
          example: 456
        amount:
          type: number
          description: quantidade
          example: 5
        unitary_value:
          description: Valor unitário do item
          $ref: '#/components/schemas/Money'
        total_value:
          description: Valor total do item
          $ref: '#/components/schemas/Money'
        unitary_value_ipi:
          description: Valor IPI unitário do item
          $ref: '#/components/schemas/Money'
        discount:
          description: Desconto no item
          $ref: '#/components/schemas/Money'
        notes:
          type: string
          description: Id único do estoque
          example: sem chocolate
        stock_id:
          type: integer
          description: Id único do estoque
          example: 1234
        attributes:
          type: array
          description: Lista de atributos deste produto neste pedido.
          items:
            $ref: '#/components/schemas/SaleOrderItemAttributeRequest'
        additionals:
          type: array
          description: Lista de adicionais deste produto nesta venda.
          items:
            $ref: '#/components/schemas/SaleItemAdditionalBody'
      required:
        - item_id
        - amount
        - unitary_value
    SaleOrderItemBodyRequest:
      type: object
      description: Representa um item do pedido de venda.
      properties:
        item_id:
          type: integer
          description: Id único do item. Obrigatório na atualização.
          example: 123
        grid_id:
          type: integer
          description: |
            Id único do grid que este item faz parte.

            O `grid_id` é o ID do Product Grid
          example: 456
        amount:
          type: number
          description: quantidade
          example: 5
        unitary_value:
          description: Valor unitário do item
          $ref: '#/components/schemas/Money'
        total_value:
          description: Valor total do item
          $ref: '#/components/schemas/Money'
        unitary_value_ipi:
          description: Valor IPI unitário do item
          $ref: '#/components/schemas/Money'
        discount:
          description: Desconto no item
          $ref: '#/components/schemas/Money'
        notes:
          type: string
          description: Id único do estoque
          example: sem chocolate
        stock_id:
          type: integer
          description: Id único do estoque
          example: 1234
        attributes:
          type: array
          description: Lista de atributos deste produto neste pedido.
          items:
            $ref: '#/components/schemas/SaleOrderItemAttributeRequest'
        additionals:
          type: array
          description: Lista de adicionais deste produto nesta venda.
          items:
            $ref: '#/components/schemas/SaleItemAdditionalBody'
        components:
          type: array
          description: >-
            Lista de componentes do combo. Obrigatório quando este item for um
            combo.
          items:
            $ref: '#/components/schemas/SaleOrderItemRequest'
        price_list_product_id:
          type: integer
          description: >
            Id único da lista de produto do produto.


            Você pode localizar os IDs da lista de preço do produto no
            _endpoint_ de [listagem de produtos de uma lista de
            preço](#tag/PriceLists/operation/get-price-list-products).
          example: 456
        removed_components:
          type: array
          items:
            type: integer
            format: int64
          description: IDs dos componentes removidos do combo.
          example:
            - 1
            - 2
            - 3
      required:
        - item_id
        - amount
        - unitary_value
    SaleTotalsBody:
      type: object
      description: Representa o resumo monetário da venda.
      properties:
        value:
          description: >-
            Valor total da venda já considerando o desconto e o frete e o valor
            de outras despesas
          $ref: '#/components/schemas/Money'
        total_value_ipi:
          description: Valor IPI total da venda
          $ref: '#/components/schemas/Money'
        discount:
          description: >-
            Valor de desconto na venda. Deixar em nulo quando um desconto no
            item for aplicado
          $ref: '#/components/schemas/Money'
        other_expenses_value:
          description: Outros valores
          $ref: '#/components/schemas/Money'
      required:
        - value
    SaleInstallmentBody:
      type: object
      description: Representa uma parcela do pagamento.
      properties:
        due_date:
          type: string
          description: Data do vencimento da parcela.
          format: date-time
          example: '2020-01-01T09:00:00-03:00'
        value:
          description: Valor da parcela
          $ref: '#/components/schemas/Money'
        observation:
          type: string
          description: Observação da parcela
          example: pagamento à vista
      required:
        - due_date
        - value
    SalePaymentBody:
      type: object
      description: Representa os métodos de pagamento.
      properties:
        payment_method_id:
          type: integer
          description: Id único do método do pagamento
          example: 1
        bank_account_id:
          type: number
          description: Id único da conta bancária
          example: 5
        total_value:
          description: Valor total do pagamento
          $ref: '#/components/schemas/Money'
        installments:
          type: array
          description: Lista de parcelamento.
          items:
            $ref: '#/components/schemas/SaleInstallmentBody'
        card_brand_id:
          type: integer
          description: Id único da bandeira do cartão de crédito
          example: 1
        exchange_value:
          description: Valor do troco
          $ref: '#/components/schemas/Money'
        card_contract_id:
          type: integer
          description: Id do contrato do cartão
          example: 1
        card_receipt:
          description: Dados do recibo do cartão
          $ref: '#/components/schemas/CardReceipt'
      required:
        - payment_method_id
        - bank_account_id
        - total_value
        - installments
    SaleCarrierBody:
      type: object
      description: Representa um transportador e o valor do frete.
      properties:
        shippingFee:
          description: Valor do frete
          $ref: '#/components/schemas/Money'
        carrier_id:
          type: integer
          description: Id único do transportador
          example: 1234
    AddressBody:
      type: object
      description: Representa os dados do endereço
      properties:
        id:
          type: number
          description: id do endereço.
          example: 220
        nickname:
          type: string
          maxLength: 100
          description: Apelido do endereço.
          example: Casa
        type:
          type: string
          enum:
            - default
            - shipping
            - other
          description: |
            Tipo do endereço.

            - `default` endereço principal.
            - `shipping` endereço de entrega.
            - `other` outro tipo de endereço.
          example: default
        street:
          type: string
          maxLength: 100
          description: Nome do logradouro (Rua, Avenida, praça, etc).
          example: Avenida Paulista
        number:
          type: string
          maxLength: 60
          description: Número do logradouro.
          example: 42 A
        city_id:
          type: number
          description: |
            ID da cidade.

            **Obrigatório quando o campo `ibge_code` não for passado.**
          example: 1234
        ibge_code:
          type: string
          maxLength: 7
          description: |
            Código do município segundo IBGE.

            Exemplo: O código do município segundo IBGE é 3550308

            **Obrigatório quando o campo `city_id` não for passado.**
          example: '3550308'
        neighborhood:
          type: string
          maxLength: 80
          description: Nome do Bairro.
          example: Bela Vista
        complement:
          type: string
          maxLength: 255
          description: Complemento do endereço.
          example: Apto 2550
        zip_code:
          type: string
          maxLength: 8
          description: CEP do endereço.
          example: '01311000'
      required:
        - type
        - street
        - id
    Sale:
      type: object
      title: Venda'
      description: Representa uma venda.
      properties:
        id:
          type: integer
          description: Identificador numérico único da venda.
          readOnly: true
          example: 123
        number:
          type: integer
          description: Número da venda.
          readOnly: true
          example: 123
        unique_id:
          type: string
          description: Identificador único da venda.
          example: cf2e0a5e-aa58-4181-9c9b-47702bd2be99
        sales_order_id:
          type: integer
          description: >-
            Identificador numérico único do pedido da venda, caso esta venda
            veio da conversão do pedido.
          readOnly: true
          example: 456
        customer:
          description: Dados do cliente
          $ref: '#/components/schemas/SaleCustomer'
        address:
          description: Endereço da venda
          $ref: '#/components/schemas/Address'
        observation:
          type: string
          description: Obervação da venda
          example: Sem copo
        status:
          enum:
            - canceled
            - closed
            - in_preparation
            - in_route
            - open
            - reserved
            - takeout
            - waiting
          description: |
            Status da venda.

            - `canceled` venda cancelada.
            - `closed` venda fechada.
            - `in_preparation` venda em preparação.
            - `in_route` venda em entrega.
            - `open` venda em aberta.
            - `reserved` venda reservada.
            - `takeout` venda para retirar.
            - `waiting` venda em espera.
        items:
          type: array
          description: Lista de produtos desta venda.
          items:
            $ref: '#/components/schemas/SaleItem'
        payments:
          type: array
          description: Lista de pagamentos.
          items:
            $ref: '#/components/schemas/SalePayment'
        seller:
          description: Dados do vendedor
          $ref: '#/components/schemas/SaleSeller'
        carrier:
          description: Dados do frete e do transportador
          $ref: '#/components/schemas/SaleCarrier'
        total:
          description: Resumo monetário da venda
          $ref: '#/components/schemas/SaleTotals'
        source_type:
          $ref: '#/components/schemas/SourceType'
        company_name:
          type: string
          description: Razão social da pessoa jurídica.
          example: CPlug
        registration_date:
          type: string
          description: Data do registro da venda.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        delivery_type:
          enum:
            - delivery
            - withdrawal
          description: |
            Tipo de entrega do pedido:

            - `delivery` entrega
            - `withdrawal` retirada
        created_at:
          type: string
          description: Data da criação da venda.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da atualização da venda.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    SaleOrderItemUpdateBodyRequest:
      type: object
      description: Representa um item do pedido de venda.
      properties:
        item_id:
          type: integer
          description: Id único do item
          example: 123
        id:
          type: integer
          description: Id único do item no pedido de vendas
          example: 123
        combo_item_id:
          type: integer
          description: >-
            Id único do produto combo na relação, caso este item pertence a um
            combo. Obrigatório na atualização.
          example: 123
        grid_id:
          type: integer
          description: |
            Id único do grid que este item faz parte.

            O `grid_id` é o ID do Product Grid
          example: 456
        amount:
          type: number
          description: quantidade
          example: 5
        unitary_value:
          description: >
            Valor unitário do item.


            É a soma do valor base deste item com a soma dos adicionais e com a
            soma do total dos atributos.


            Fórmula: `unitary_value = valor base do item +
            sum(attributes.total_value) + sum(additionals.total_value)`
          $ref: '#/components/schemas/Money'
        total_value:
          description: |
            Valor total do item.

            É a multiplicação da quantidade pelo valor unitário deste item.

            Fórmula: `total_value = amount * unitary_value`
          $ref: '#/components/schemas/Money'
        unitary_value_ipi:
          description: Valor IPI unitário do item
          $ref: '#/components/schemas/Money'
        discount:
          description: Desconto no item
          $ref: '#/components/schemas/Money'
        notes:
          type: string
          description: Id único do estoque
          example: sem chocolate
        stock_id:
          type: integer
          description: Id único do estoque
          example: 1234
        attributes:
          type: array
          description: Lista de atributos deste produto neste pedido.
          items:
            $ref: '#/components/schemas/SaleOrderItemAttributeRequest'
        additionals:
          type: array
          description: Lista de adicionais deste produto nesta venda.
          items:
            $ref: '#/components/schemas/SaleItemAdditionalBody'
        price_list_product_id:
          type: integer
          description: >
            Id único da lista de produto do produto.


            Você pode localizar os IDs da lista de preço do produto no
            _endpoint_ de [listagem de produtos de uma lista de
            preço](#tag/PriceLists/operation/get-price-list-products).
          example: 456
      required:
        - item_id
        - amount
        - unitary_value
    SaleOrderItemUpdateRequest:
      type: object
      description: Representa um item do pedido de venda.
      properties:
        item_id:
          type: integer
          description: Id único do item
          example: 123
        id:
          type: integer
          description: Id único do item no pedido de vendas
          example: 123
        grid_id:
          type: integer
          description: |
            Id único do grid que este item faz parte.

            O `grid_id` é o ID do Product Grid
          example: 456
        amount:
          type: number
          description: quantidade
          example: 5
        unitary_value:
          description: >
            Valor unitário do item.


            É a soma do valor base deste item com a soma dos adicionais e com a
            soma do total dos atributos.


            Fórmula: `unitary_value = valor base do item +
            sum(attributes.total_value) + sum(additionals.total_value)`
          $ref: '#/components/schemas/Money'
        total_value:
          description: |
            Valor total do item.

            É a multiplicação da quantidade pelo valor unitário deste item.

            Fórmula: `total_value = amount * unitary_value`
          $ref: '#/components/schemas/Money'
        unitary_value_ipi:
          description: Valor IPI unitário do item
          $ref: '#/components/schemas/Money'
        discount:
          description: Desconto no item
          $ref: '#/components/schemas/Money'
        notes:
          type: string
          description: Id único do estoque
          example: sem chocolate
        stock_id:
          type: integer
          description: Id único do estoque
          example: 1234
        attributes:
          type: array
          description: Lista de atributos deste produto neste pedido.
          items:
            $ref: '#/components/schemas/SaleOrderItemAttributeRequest'
        additionals:
          type: array
          description: Lista de adicionais deste produto nesta venda.
          items:
            $ref: '#/components/schemas/SaleItemAdditionalBody'
        components:
          type: array
          description: >-
            Lista de componentes do combo. Obrigatório quando este item for um
            combo.
          items:
            $ref: '#/components/schemas/SaleOrderItemUpdateBodyRequest'
        price_list_product_id:
          type: integer
          description: >
            Id único da lista de produto do produto.


            Você pode localizar os IDs da lista de preço do produto no
            _endpoint_ de [listagem de produtos de uma lista de
            preço](#tag/PriceLists/operation/get-price-list-products).
          example: 456
        removed_components:
          type: array
          items:
            type: integer
            format: int64
          description: IDs dos componentes removidos do combo.
          example:
            - 1
            - 2
            - 3
      required:
        - item_id
        - amount
        - unitary_value
    SaleInstallmentUpdateBody:
      type: object
      description: Representa uma parcela do pagamento.
      properties:
        id:
          type: integer
          description: Id único da parcela do método do pagamento na relação
          example: 1
        due_date:
          type: string
          description: Data do vencimento da parcela.
          format: date-time
          example: '2020-01-01T09:00:00-03:00'
        value:
          description: Valor da parcela
          $ref: '#/components/schemas/Money'
        observation:
          type: string
          description: Observação da parcela
          example: pagamento à vista
      required:
        - due_date
        - value
    SalePaymentUpdateBody:
      type: object
      description: Representa um item da venda.
      properties:
        id:
          type: integer
          description: Id único do método do pagamento na relação
          example: 1
        payment_method_id:
          type: integer
          description: Id único do método do pagamento
          example: 1
        bank_account_id:
          type: number
          description: Id único da conta bancária
          example: 5
        total_value:
          description: Valor total do pagamento
          $ref: '#/components/schemas/Money'
        installments:
          type: array
          description: Lista de parcelamento.
          items:
            $ref: '#/components/schemas/SaleInstallmentUpdateBody'
        card_brand_id:
          type: integer
          description: Id único da bandeira do cartão de crédito
          example: 1
        exchange_value:
          description: Valor do troco
          $ref: '#/components/schemas/Money'
      required:
        - payment_method_id
        - bank_account_id
        - total_value
        - installments
    SaleOrderStatusPaymentUpdateRequest:
      type: object
      description: Representa os métodos de pagamento.
      properties:
        card_contract_id:
          type: integer
          description: Id do contrato do cartão
          example: 1
        payment_id:
          type: integer
          description: Id do relacionamento entre pedidos de venda e o pagamento
          example: 1
        payment_method_id:
          type: integer
          description: Id do método de pagamento
          example: 1
        card_brand_id:
          type: integer
          description: Id único da bandeira do cartão de crédito
          example: 1
        card_receipt:
          description: Dados do recibo do cartão
          $ref: '#/components/schemas/CardReceipt'
      required:
        - card_contract_id
        - payment_id
        - payment_method_id
        - card_brand_id
        - card_receipt
    SaleItemAttributeOptionBody:
      type: object
      description: Representa uma opção de um atributo.
      properties:
        option_id:
          type: integer
          description: Id único da opção
          example: 123
        amount:
          type: number
          description: quantidade. Obrigatório quando não tiver valor no `grid_id`
          example: 5
        unitary_value:
          description: >-
            Valor unitário da opção. Obrigatório quando não tiver valor no
            `grid_id`
          $ref: '#/components/schemas/Money'
        discount:
          description: Desconto na opção
          $ref: '#/components/schemas/Money'
        notes:
          type: string
          description: Observação da opção
          example: Sem cebola
      required:
        - option_id
    SaleItemAttributeBody:
      type: object
      description: Representa um atributo de um item da venda.
      properties:
        min_choices:
          type: integer
          description: >-
            número mínino que este atributo deve ter. Obrigatório quando não
            tiver valor no `grid_id`
          example: 1
        max_choices:
          type: integer
          description: >-
            número máximo que este atributo pode ter. Obrigatório quando não
            tiver valor no `grid_id`
          example: 2
        total_value:
          description: >
            Valor total deste atributo. Obrigatório quando não tiver valor no
            `grid_id`


            Formula: 
              - price_calculation_type = `Cumulative`: `total_value = sum((option.unitary_value * option.amount) - option.discount)`
              - price_calculation_type = `Highest`: `total_value = hightest(option.unitary_value)`
              - price_calculation_type = `Average`: `total_value = avg((option.unitary_value * option.amount) - option.discount)`
          $ref: '#/components/schemas/Money'
        price_calculation_type:
          enum:
            - Highest
            - Average
            - Cumulative
          description: >
            Tipo de cálculo no total do atributo. Obrigatório quando não tiver
            valor no `grid_id`


            Ex: average, quer dizer a o valor total do atributo será a média dos
            valores das opções


            - `Highest` maior valor das opções

            - `Average` média dos valores das opções

            - `Cumulative` soma dos valores das opções
        charge_from_quantity:
          type: integer
          description: >
            Indica a partir de qual opção irá começar a cobrar


            Ex: 3, indica se a partir da terceira opção que irá fazer parte do
            cálculo do total do atributo. 

            Portanto, a primeira e a segunda opção será de graça, ou seja, essas
            duas opções deverão estar 

            com o desconto igual ao valor total da opção.
          example: 2
        options:
          type: array
          description: Lista de opções de um atributo.
          items:
            $ref: '#/components/schemas/SaleItemAttributeOptionBody'
      required:
        - options
    SaleItemBody:
      type: object
      description: Representa um item da venda.
      properties:
        item_id:
          type: integer
          description: Id único do item
          example: 123
        grid_id:
          type: integer
          description: |
            Id único do grid que este item faz parte.

            O `grid_id` é o ID do Product Grid
          example: 456
        amount:
          type: number
          description: quantidade
          example: 5
        unitary_value:
          description: >
            Valor unitário do item.


            É a soma do valor base deste item com a soma dos adicionais e com a
            soma do total dos atributos.


            Fórmula: `unitary_value = valor base do item +
            sum(attributes.total_value) + sum(additionals.total_value)`
          $ref: '#/components/schemas/Money'
        total_value:
          description: |
            Valor total do item.

            É a multiplicação da quantidade pelo valor unitário deste item.

            Fórmula: `total_value = amount * unitary_value`
          $ref: '#/components/schemas/Money'
        unitary_value_ipi:
          description: Valor IPI unitário do item
          $ref: '#/components/schemas/Money'
        discount:
          description: Desconto no item
          $ref: '#/components/schemas/Money'
        notes:
          type: string
          description: Id único do estoque
          example: sem chocolate
        stock_id:
          type: integer
          description: Id único do estoque
          example: 1234
        attributes:
          type: array
          description: Lista de atributos deste produto nesta venda.
          items:
            $ref: '#/components/schemas/SaleItemAttributeBody'
        additionals:
          type: array
          description: Lista de adicionais deste produto nesta venda.
          items:
            $ref: '#/components/schemas/SaleItemAdditionalBody'
      required:
        - item_id
        - amount
        - unitary_value
    SaleItemBodyRequest:
      type: object
      description: Representa um item da venda.
      properties:
        item_id:
          type: integer
          description: Id único do item
          example: 123
        grid_id:
          type: integer
          description: |
            Id único do grid que este item faz parte.

            O `grid_id` é o ID do Product Grid
          example: 456
        amount:
          type: number
          description: quantidade
          example: 5
        unitary_value:
          description: >
            Valor unitário do item.


            É a soma do valor base deste item com a soma dos adicionais e com a
            soma do total dos atributos.


            Fórmula: `unitary_value = valor base do item +
            sum(attributes.total_value) + sum(additionals.total_value)`
          $ref: '#/components/schemas/Money'
        total_value:
          description: |
            Valor total do item.

            É a multiplicação da quantidade pelo valor unitário deste item.

            Fórmula: `total_value = amount * unitary_value`
          $ref: '#/components/schemas/Money'
        unitary_value_ipi:
          description: Valor IPI unitário do item
          $ref: '#/components/schemas/Money'
        discount:
          description: Desconto no item
          $ref: '#/components/schemas/Money'
        notes:
          type: string
          description: Id único do estoque
          example: sem chocolate
        stock_id:
          type: integer
          description: Id único do estoque
          example: 1234
        attributes:
          type: array
          description: Lista de atributos deste produto nesta venda.
          items:
            $ref: '#/components/schemas/SaleItemAttributeBody'
        additionals:
          type: array
          description: Lista de adicionais deste produto nesta venda.
          items:
            $ref: '#/components/schemas/SaleItemAdditionalBody'
        components:
          type: array
          description: >-
            Lista de componentes do combo. Obrigatório quando este item for um
            combo.
          items:
            $ref: '#/components/schemas/SaleItemBody'
        price_list_product_id:
          type: integer
          description: >
            Id único da lista de produto do produto.


            Você pode localizar os IDs da lista de preço do produto no
            _endpoint_ de [listagem de produtos de uma lista de
            preço](#tag/PriceLists/operation/get-price-list-products).
          example: 456
      required:
        - item_id
        - amount
        - unitary_value
    SaleIncomePayment:
      type: object
      title: Pagamento de um recebimento
      description: Representa um pagamento de um recebimento.
      properties:
        payment_method:
          type: object
          description: Dados do método de pagamento.
          readOnly: true
          properties:
            id:
              type: integer
              description: Identificador do método de pagamento.
              example: 123
            name:
              type: string
              description: Nome do método de pagamento.
              example: Cartão de Crédito
        card_brand:
          type: object
          description: Dados da bandeira do cartão.
          readOnly: true
          properties:
            id:
              type: integer
              description: Identificador da bandeira do cartão.
              example: 123
            name:
              type: string
              description: Nome da bandeira do cartão.
              example: Visa
        value:
          description: Valor do pagamento.
          $ref: '#/components/schemas/Money'
        payment_date:
          type: string
          description: Data do pagamento.
          example: '2022-01-01'
        bank_slip_url:
          type: string
          description: URL do boleto.
          example: https://cplug.com.br/boleto/123456
        card_receipt:
          type: string
          description: Comprovante do pagamento.
          example: SITEF\\n00001\\nBIN\\nVIA - ESTABELECI...
    SaleIncome:
      type: object
      title: Recebimento de uma venda
      description: Dados do recebimento de uma venda.
      properties:
        id:
          type: string
          description: Identificador único da movimentação financeira.
          readOnly: true
          example: 657870656e73657c3133
        description:
          type: string
          maxLength: 40
          minLength: 1
          description: Descrição da movimentação financeira.
          example: Compra de materia de escritório.
        notes:
          type: string
          maxLength: 255
          description: Notas ou observações sobre a movimentação financeira.
          example: Solicitação interna.
        competence_date:
          type: string
          format: date
          description: Data de competência da movimentação financeira.
          example: '2023-05-15'
        due_date:
          type: string
          format: date
          description: Data de vencimento da movimentação financeira.
          example: '2023-05-15'
        status:
          type: string
          enum:
            - unpaid
            - partially_paid
            - paid
          description: |
            Status da movimentação financeira.

            Exemplo:

              - `unpaid`: Em aberta ou não pago
              - `partially_paid`: Pago parcialmente
              - `paid`: Pago
          example: paid
          readOnly: true
        total:
          description: Valor total da movimentação financeira.
          $ref: '#/components/schemas/Money'
          readOnly: true
        payments:
          type: array
          items:
            $ref: '#/components/schemas/SaleIncomePayment'
          description: Lista de pagamentos associados à movimentação financeira.
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    Source:
      type: object
      title: Canal de Venda
      description: Representa um canal de venda.
      properties:
        id:
          type: integer
          description: Identificador único do canal de venda.
          readOnly: true
          example: 123
        name:
          type: string
          minLength: 1
          maxLength: 80
          description: Nome do canal de venda
          example: PDV
    SlimUser:
      type: object
      description: Dados do usuário.
      properties:
        id:
          type: integer
          description: Identificador único do usuário
          example: 1234
        name:
          type: string
          description: Nome do usuário.
          example: John Doe
        email:
          type: string
          description: E-mail do usuário.
          example: john.doe@example.com
    SlimCompany:
      type: object
      description: Dados da empresa.
      properties:
        id:
          type: integer
          description: Identificador único da empresa
          example: 1234
        name:
          type: string
          description: Nome fantasia da empresa.
          example: ConnectPlug
        company_name:
          type:
            - string
            - 'null'
          description: Razão social da empresa.
          example: ConnectPlug Desenvolvimento de Software LTDA
    StandardObservation:
      type: object
      title: Observação Padrão
      description: Representa uma observação padrão.
      properties:
        id:
          type: integer
          description: Identificador único da observação padrão.
          readOnly: true
          example: 123
        title:
          type: string
          description: Título da observação padrão
          example: Observação 1
        description:
          type: string
          description: Descrição da observação padrão
          example: Descrição da observação 1
        user:
          type: object
          description: Usuário que criou/atualizou a observação padrão
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/SlimUser'
        company:
          type: object
          description: Empresa da qual a observação padrão pertence
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/SlimCompany'
        created_at:
          type: string
          description: Data de criação da observação padrão
          format: date-time
          readOnly: true
          example: '2025-09-05T00:00:00Z'
        updated_at:
          type: string
          description: Data da última atualização da observação padrão
          format: date-time
          readOnly: true
          example: '2025-09-05T00:00:00Z'
    StandardObservationRequest:
      type: object
      description: Representa uma requisição para criar uma observação padrão.
      properties:
        title:
          type: string
          description: Título da observação padrão
          example: Observação 1
          maxLength: 255
        description:
          type: string
          description: Descrição da observação padrão
          example: Descrição da observação 1
          maxLength: 1000
      required:
        - title
        - description
    State:
      type: object
      title: Estado
      description: Representa um estado.
      properties:
        name:
          type: string
          description: Nome do estado.
          example: São Paulo
          readOnly: true
        ibge_code:
          type: string
          description: Código do estado no IBGE.
          example: '3550308'
          readOnly: true
        uf:
          type: string
          description: Sigla do estado.
          example: SP
          readOnly: true
    UserSettingsBody:
      type: object
      properties:
        notifications:
          type: object
          description: Configurações de notificações.
          properties:
            receive_financial_emails:
              type: boolean
              description: Indica se o usuário pode receber e-mails financeiros.
              example: true
              default: false
            receive_contract_emails:
              type: boolean
              description: Indica se o usuário pode receber e-mails de contratos de planos.
              example: false
              default: false
        pos:
          type: object
          description: Configurações do PDV.
          properties:
            show_in_list_on_open:
              type: boolean
              description: Indica se o usuário pode aparecer na listagem ao abrir o PDV.
              example: true
              default: true
            show_in_sellers_list:
              type: boolean
              description: Indica se o usuário pode aparecer na lista de vendedores do PDV.
              example: true
              default: true
            table_service_password:
              type:
                - string
                - 'null'
              description: >
                Senha para atendimento de mesa.


                `Atenção`: Este campo é proibido quando o campo
                `show_in_sellers_list` é `false`.
              maxLength: 6
              example: '123456'
        support:
          type: object
          description: Configurações de suporte.
          properties:
            access_pin:
              type:
                - integer
                - 'null'
              minLength: 8
              maxLength: 8
              description: PIN utilizado para dar acesso ao suporte.
              example: 12345678
    UserBody:
      type: object
      properties:
        name:
          type: string
          minimum: 1
          maximum: 80
          description: Nome do usuário.
          example: Fulando usuário
        email:
          type: string
          maximum: 120
          description: E-mail do usuário.
          example: fulano@email.com
        password:
          type: string
          minimum: 6
          description: Senha do usuário.
          example: senha123
        profile_id:
          type: integer
          description: ID do profile.
          example: 123
        settings:
          $ref: '#/components/schemas/UserSettingsBody'
        companies:
          $ref: '#/components/schemas/ByCompany'
    Permission:
      type: object
      title: Permissão
      description: Informações de Permissão de Acesso.
      properties:
        name:
          type: string
          description: Nome da Permissão.
          example: create_product
        description:
          type: string
          description: Descrição da Permissão.
          example: Can create a product
    OAuthAccessTokenSlim:
      type: object
      description: Representa uma sessão de acesso.
      properties:
        id:
          type: string
          description: ID da sessão.
          example: >-
            eyRTdiI6IlRLRTg0MXVES1dPRncxN3lONUtOc0E9PSIsInZhbHVlIjoiazlQRW9mZit5N0hGWU5Ec=
        user_name:
          type: string
          description: Nome do usuário.
          example: John Doe
        expires_at:
          type: string
          description: Data de expiração da sessão.
          example: '2025-01-01T00:00:00Z'
          format: date-time
        created_at:
          type: string
          description: Data de criação da sessão.
          example: '2025-01-01T00:00:00Z'
          format: date-time
    Profile:
      type: object
      title: Perfil de Usuário
      description: Dados do perfil
      properties:
        id:
          type: integer
          description: Identificador único do perfil.
          readOnly: true
          example: 1
        name:
          type: string
          maxLength: 20
          minLength: 1
          description: Nome do perfil.
          example: Gerente
        description:
          type:
            - 'null'
            - string
          maxLength: 255
          description: Descrição do perfil.
          example: Lorem ipsum dolor sit amet, consectetur adipiscing elit
        global:
          type: boolean
          description: Perfil disponível para todas as empresas.
          default: false
          example: false
        editable:
          type: boolean
          default: false
          example: false
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
      required:
        - name
    PdvPermission:
      type: object
      title: Permissão de PDV
      description: Informações de Permissão de Acesso para PDV.
      properties:
        name:
          type: string
          description: Nome da Permissão de PDV.
          example: attendance
        description:
          type: string
          description: Descrição da Permissão de PDV.
          example: Atendimento de Mesas
    ProfileDiscountLimit:
      type: object
      title: Dados dos limites de desconto do perfil
      description: Representa uma promoção.
      properties:
        profile:
          type: object
          description: Dados do perfil vinculado aos limites de desconto
          properties:
            id:
              type: integer
              description: Identificador único do perfil
              example: 15
            name:
              type: string
              description: Nome do perfil
              example: Administrador
        limits:
          type: array
          description: Lista de limites de desconto para diferentes escopos
          items:
            type: object
            description: Limite de desconto para um escopo específico
            properties:
              percentage_limit:
                type: number
                description: Limite percentual do desconto
                example: 99.9
              discount_scope:
                type: string
                description: |
                  Escopo do desconto, define onde o desconto será aplicado.

                  - `product`: Desconto no produto
                  - `sale`: Desconto na venda
                enum:
                  - product
                  - sale
                example: product
    Status:
      type: object
      title: Status
      description: Representa um status;
      properties:
        id:
          type: integer
          description: Identificador único do status na CPlug.
          example: 1
        name:
          type: string
          description: Nome do status.
          example: Aberto
    StatusDetail:
      type: object
      title: Detalhe do Status
      description: Representa um detalhe do status;
      properties:
        id:
          type: integer
          description: Identificador único do detalhe do status na CPlug.
          example: 1
        name:
          type: string
          description: Nome do detalhe do status.
          example: Aberto
        order:
          type: integer
          description: Ordem.
          example: 0
        default_delivery_status:
          type:
            - string
            - 'null'
          description: Status padrão do Delivery.
          example: created
          enum:
            - created
            - preparation_started
            - preparation_ended
            - dispatched
            - concluded
            - cancelled
        limit_time:
          type:
            - integer
            - 'null'
          description: Tempo limite em minutos
          example: 30
    CustomerOrderItemAdditionalBody:
      type: object
      description: Representa um adicional de um item da venda.
      properties:
        additional_id:
          type: integer
          description: ID do adicional
          example: 123
        amount:
          type: integer
          description: quantidade deste adicional
          example: 1
        unitary_value:
          description: Valor unitário deste adicional
          $ref: '#/components/schemas/Money'
        total_value:
          description: >
            Valor total deste adicional.


            É o resultado da multiplicação do quantidade pelo o seu valor
            unitário.


            total_value = amount * unitary_value
          $ref: '#/components/schemas/Money'
      required:
        - additional_id
        - amount
        - unitary_value
        - total_value
    CustomerOrderComboComponentRequest:
      type: object
      description: Representa um item do pedido de venda.
      properties:
        item_id:
          type: integer
          description: Id único do item. Obrigatório na atualização.
          example: 123
        combo_item_id:
          type: integer
          description: >-
            Id único do produto combo na relação, caso este item pertence a um
            combo. Obrigatório na atualização.
          example: 123
        grid_id:
          type: integer
          description: |
            Id único do grid que este item faz parte.

            O `grid_id` é o ID do Product Grid
          example: 456
        amount:
          type: number
          description: quantidade
          example: 5
        unitary_value:
          description: Valor unitário do item
          $ref: '#/components/schemas/Money'
        total_value:
          description: Valor total do item
          $ref: '#/components/schemas/Money'
        notes:
          type: string
          description: Id único do estoque
          example: sem chocolate
        attributes:
          type: array
          description: Lista de atributos deste produto neste pedido.
          items:
            $ref: '#/components/schemas/SaleOrderItemAttributeRequest'
        additionals:
          type: array
          description: Lista de adicionais deste produto nesta venda.
          items:
            $ref: '#/components/schemas/SaleItemAdditionalBody'
      required:
        - item_id
        - amount
        - unitary_value
    CustomerOrderItemBodyRequest:
      type: object
      description: Representa um item do pedido de venda.
      properties:
        item_id:
          type: integer
          description: Id único do item. Obrigatório na atualização.
          example: 123
        grid_id:
          type: integer
          description: |
            Id único do grid que este item faz parte.

            O `grid_id` é o ID do Product Grid
          example: 456
        amount:
          type: number
          description: quantidade
          example: 5
        unitary_value:
          description: Valor unitário do item
          $ref: '#/components/schemas/Money'
        total_value:
          description: Valor total do item
          $ref: '#/components/schemas/Money'
        notes:
          type: string
          description: Id único do estoque
          example: sem chocolate
        attributes:
          type: array
          description: Lista de atributos deste produto neste pedido.
          items:
            $ref: '#/components/schemas/SaleOrderItemAttributeRequest'
        additionals:
          type: array
          description: Lista de adicionais deste produto nesta venda.
          items:
            $ref: '#/components/schemas/CustomerOrderItemAdditionalBody'
        components:
          type: array
          description: >-
            Lista de componentes do combo. Obrigatório quando este item for um
            combo.
          items:
            $ref: '#/components/schemas/CustomerOrderComboComponentRequest'
      required:
        - item_id
        - amount
        - unitary_value
    CustomerOrderTotalsBody:
      type: object
      description: Representa o resumo monetário da venda.
      properties:
        value:
          description: >-
            Valor total da venda já considerando o desconto e o frete e o valor
            de outras despesas
          $ref: '#/components/schemas/Money'
      required:
        - value
    OrderPayment:
      type: object
      description: Representa os métoso de pagamento de um pedido
      properties:
        payment_method_id:
          type: integer
          description: Id único do método do pagamento
          example: 1
        total_value:
          description: Valor total do pagamento
          $ref: '#/components/schemas/Money'
        installments:
          type: array
          description: Lista de parcelamento.
          items:
            $ref: '#/components/schemas/SaleInstallmentBody'
        card_brand_id:
          type: integer
          description: Id único da bandeira do cartão de crédito
          example: 1
        exchange_value:
          description: Valor do troco
          $ref: '#/components/schemas/Money'
      required:
        - payment_method_id
        - total_value
        - installments
    CustomerBody:
      type: object
      description: Representa um cliente da loja.
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 120
          description: Nome do cliente pessoa física ou Razão social.
          example: Nome do Cliente
        contacts:
          type: array
          description: Lista de contatos do cliente.
          items:
            $ref: '#/components/schemas/Contact'
    StoreBasicInfo:
      type: object
      title: Informações de recursos básicas da loja.
      description: >-
        Indica onde estão localizados os principais recurso que a loja pode
        precisar para poder ser exibida para o consumidor final.
      properties:
        cdn_catalog_url:
          type: string
          format: url
          description: URL dos produtos que estão disponível no aplicativo.
          example: https://cp.com/store-files/1-3/products.json
        cdn_settings_url:
          type: string
          format: url
          description: URL das configurações da loja.
          example: https://example.com
        cdn_price_list_products_url:
          type: array
          description: |
            URL das Lista de preço do produto numa determinada lista de preço.

            Para pegar o priceListId basta ver o arquivo `price-lists.json`
          items:
            type: string
            description: Representa um módulo.
            example: >-
              https://example.com/store-files/1-3/price-lists/{priceListId}/products.json
        cdn_price_lists_url:
          type: string
          format: url
          description: URL das Lista de preços.
          example: https://example.com/store-files/1-3/price-lists.json
    StorePayment:
      type: object
      title: Método de pagamento
      description: Método de pagamento aceito pela loja.
      properties:
        id:
          type: integer
          description: Identificador único do método de pagamento.
          example: 1
        name:
          type: string
          description: Nome do método de pagamento.
          example: Cartão de Crédito
        card_brands:
          type: array
          description: Lista de marcas de cartão aceitas pelo método de pagamento.
          items:
            type: object
            properties:
              id:
                type: integer
                description: Identificador único da marca de cartão.
                example: 1
              name:
                type: string
                description: Nome da marca de cartão.
                example: Visa
              icon:
                type: string
                description: Ícone da marca de cartão.
                example: visa.png
    StoreShift:
      type: object
      title: Turnos do horário de funcionamento.
      description: Representa um turno de horário de funcionamento.
      properties:
        week_day:
          type: integer
          description: |
            Dia da semana do turno de horário de funcionamento.

            - `0`: Domingo.
            - `1`: Segunda-feira.
            - `2`: Terça-feira.
            - `3`: Quarta-feira.
            - `4`: Quinta-feira.
            - `5`: Sexta-feira.
            - `6`: Sábado.
          example: 0
        time_start:
          type: string
          description: >-
            Hora de início do turno de horário de funcionamento no formato
            `H:i`.
          example: '09:00'
        time_end:
          type: string
          description: Hora de fim do turno de horário de funcionamento no formato `H:i`.
          example: '18:00'
    StoreOpeningHour:
      type: object
      title: Horário de funcionamento
      description: Representa um horários de funcionamento.
      properties:
        fulfillment_type:
          type: string
          description: |
            Tipo da área de canal de atendimento.

            - `delivery`: Entrega via Delivery.
            - `pickup`: Retirada do pedido na loja.
          enum:
            - delivery
            - pickup
          example: delivery
        shifts:
          type: array
          description: Lista de turnos da área de entrega.
          items:
            $ref: '#/components/schemas/StoreShift'
    StoreOpeningHours:
      type: object
      title: Horários de funcionamento
      description: Representa um conjunto de horários de funcionamento.
      properties:
        opening_hours:
          type: array
          description: Lista de horários de funcionamento.
          items:
            $ref: '#/components/schemas/StoreOpeningHour'
    PeripheralPrinterSettings:
      title: Printer|LabelPrinter Settings
      type: object
      description: Configurações do periférico "Impressora ou Etiquetadora".
      properties:
        address:
          type: string
          description: Porta ou IP do periférico.
          example: 127.0.0.1
        port:
          type: integer
          description: Porta da rede do periférico.
          example: 8080
        printer_model:
          type: string
          description: >
            Modelo do periférico.


            Aceita apenas os modelos vinculados ao manufacturer listados em
            printer_models pelo endpoint de [listagem de
            fabricantes](#tag/Peripherals/operation/get-peripherals-manufacturers)


            Obs: Nem todos os fabricantes vão ter modelos, neste caso deixe este
            campo vazio
          example: Modelo 404
        communication_type:
          type: string
          description: |
            Tipo de comunicação do periférico.

            - `DIRECT`: Acesso Direto.
            - `DLL`: DLL.
            - `SERIAL`: Serial.
            - `SPOOLER`: Spooler.
            - `USB`: USB.
          enum:
            - DIRECT
            - DLL
            - SERIAL
            - SPOOLER
            - USB
          example: USB
        command_type:
          type: string
          description: >
            Tipo de comando do periférico.


            Aceita apenas os command_types vinculados ao manufacturer listados
            no endpoint de [listagem de
            fabricantes](#tag/Peripherals/operation/get-peripherals-manufacturers)


            - `ESCPOS`: ESCPOS.

            - `ESCBEMA`: ESCBEMA (somente para a fabricante Bematech).
          enum:
            - ESCPOS
            - ESCBEMA
          example: ESCPOS
    PeripheralScaleSettings:
      title: Scale Settings
      type: object
      description: Configurações do periférico "Balança".
      properties:
        address:
          type: string
          description: Porta ou IP do periférico.
          example: 127.0.0.1
        port:
          type: integer
          description: Porta da rede do periférico.
          example: 8080
        printer_model:
          type: string
          description: >
            Modelo do periférico.


            Aceita apenas os modelos listados em scale_models pelo endpoint de
            [listagem de
            fabricantes](#tag/Peripherals/operation/get-peripherals-manufacturers)


            Obs: Nem todos os fabricantes vão ter modelos, neste caso deixe este
            campo vazio
          example: Modelo 404
        communication_type:
          type: string
          description: |
            Tipo de comunicação do periférico.

            - `DIRECT`: Acesso Direto.
            - `DLL`: DLL.
            - `SERIAL`: Serial.
            - `SPOOLER`: Spooler.
            - `USB`: USB.
          enum:
            - DIRECT
            - DLL
            - SERIAL
            - SPOOLER
            - USB
          example: USB
        command_type:
          type: string
          description: >
            Tipo de comando do periférico.


            Aceita apenas os command_types vinculados ao manufacturer listados
            no endpoint de [listagem de
            fabricantes](#tag/Peripherals/operation/get-peripherals-manufacturers)


            - `ESCPOS`: ESCPOS.

            - `ESCBEMA`: ESCBEMA (somente para a fabricante Bematech).
          enum:
            - ESCPOS
            - ESCBEMA
          example: ESCPOS
        scale:
          type: object
          description: |
            Configurações de balança

            Obrigatório para o type scale
          properties:
            baudrate:
              type: string
              description: |
                Baudrate da balança.

                - '2400'.
                - '4800'.
                - '9600'.
                - '12000'.
                - '19600'.
              enum:
                - '2400'
                - '4800'
                - '9600'
                - '12000'
                - '19600'
              example: '9600'
            parity:
              type: integer
              description: |
                Paridade da balança.

                - 0: Nenhuma.
                - 1: Impár.
                - 2: Par.
                - 3: Espaço.
              enum:
                - 0
                - 1
                - 2
                - 3
              example: 1
            serial_port_converter:
              type: boolean
              description: Usa conversor porta serial
              example: true
            databits:
              type: integer
              description: |
                Data Bits da balança.

                - 7.
                - 8.
              enum:
                - 7
                - 8
              example: 8
    PeripheralSatSettings:
      title: SAT Settings
      type: object
      description: Configurações do periférico "SAT".
      properties:
        address:
          type: string
          description: Porta ou IP do periférico.
          example: 127.0.0.1
        port:
          type: integer
          description: Porta da rede do periférico.
          example: 8080
        printer_model:
          type: string
          description: >
            Modelo do periférico.


            Aceita apenas os modelos listados em sat_models pelo endpoint de
            [listagem de
            fabricantes](#tag/Peripherals/operation/get-peripherals-manufacturers)


            Obs: Nem todos os fabricantes vão ter modelos, neste caso deixe este
            campo vazio
          example: Modelo 404
        communication_type:
          type: string
          description: |
            Tipo de comunicação do periférico.

            - `DIRECT`: Acesso Direto.
            - `DLL`: DLL.
            - `SERIAL`: Serial.
            - `SPOOLER`: Spooler.
            - `USB`: USB.
          enum:
            - DIRECT
            - DLL
            - SERIAL
            - SPOOLER
            - USB
          example: USB
        command_type:
          type: string
          description: >
            Tipo de comando do periférico.


            Caso preencha esse campo, o campo manufacturer passa a ser
            obrigatório


            Aceita apenas os command_types vinculados ao manufacturer listados
            no endpoint de [listagem de
            fabricantes](#tag/Peripherals/operation/get-peripherals-manufacturers)


            - `ESCPOS`: ESCPOS.

            - `ESCBEMA`: ESCBEMA (somente para a fabricante Bematech).
          enum:
            - ESCPOS
            - ESCBEMA
          example: ESCPOS
        sat:
          type: object
          description: |
            Configurações do SAT

            Obrigatório para o type sat
          properties:
            activation_code:
              type: string
              description: Código de ativação do SAT
              example: asdf123
            layout_version:
              type: string
              description: |
                Versão do layout.

                - `'0.07'`: 0.07.
                - `'0.08'`: 0.08.
              enum:
                - '0.07'
                - '0.08'
              example: '0.08'
            digital_signature:
              type: string
              description: Assinatura digital do SAT
              example: asdf123
    Peripheral:
      type: object
      title: Periférico
      description: Representa um periférico.
      properties:
        id:
          type: integer
          description: Identificador único do periférico.
          readOnly: true
          example: 1
        name:
          type: string
          description: Nome do periférico.
          example: Impressora 1
        manufacturer:
          type: string
          description: >
            Marca do periférico.


            Obrigatório caso seja passado um command_type em settings


            Aceita apenas o encoded_name dos fabricantes listados no endpoint de
            [listagem de
            fabricantes](#tag/Peripherals/operation/get-peripherals-manufacturers)
          example: ELGIN
        model:
          type: string
          description: Nome do periférico no computador.
          example: ELGIN Model 404
        type:
          type: string
          description: >
            Tipo do periférico.


            Obrigatório caso seja passado um manufacturer


            Caso passado um manufacturer, aceita apenas os types vinculados ao
            manufacturer listados no endpoint de [listagem de
            fabricantes](#tag/Peripherals/operation/get-peripherals-manufacturers)


            - `printer`: Impressora.

            - `label_printer`: Etiquetadora.

            - `scale`: Balança.

            - `sat`: SAT.
          enum:
            - printer
            - label_printer
            - scale
            - sat
          example: printer
          default: printer
        settings:
          oneOf:
            - $ref: '#/components/schemas/PeripheralPrinterSettings'
            - $ref: '#/components/schemas/PeripheralScaleSettings'
            - $ref: '#/components/schemas/PeripheralSatSettings'
        server:
          type: object
          description: Configurações do servidor do periférico
          properties:
            ip:
              type: string
              description: Ip do servidor
              example: 127.0.0.1
            port:
              type: integer
              description: Porta do servidor
              example: 8080
    PeripheralManufacturers:
      type: object
      title: Fabricante de periférico
      description: Representa um fabricante de periférico.
      properties:
        encoded_name:
          type: string
          description: Código do fabricante
          example: ELGIN
        name:
          type: string
          description: Nome do fabricante.
          example: Elgin
        types:
          type: array
          description: Tipos de periféricos fabricados.
          items:
            type: string
            description: >
              Tipo do periférico.


              Obrigatório caso seja passado um manufacturer


              Caso passado um manufacturer, aceita apenas os types vinculados ao
              manufacturer listados no endpoint de [listagem de
              fabricantes](#tag/Peripherals/operation/get-peripherals-manufacturers)


              - `printer`: Impressora.

              - `label_printer`: Etiquetadora.

              - `scale`: Balança.

              - `sat`: SAT.
            enum:
              - printer
              - label_printer
              - scale
              - sat
          example:
            - printer
            - sat
        command_types:
          type: array
          description: Tipos de comando de periférico
          items:
            type: string
            description: >
              Tipo de comando do periférico.


              Caso preencha esse campo, o campo manufacturer passa a ser
              obrigatório


              Aceita apenas os command_types vinculados ao manufacturer listados
              no endpoint de [listagem de
              fabricantes](#tag/Peripherals/operation/get-peripherals-manufacturers)


              - `ESCPOS`: ESCPOS.

              - `ESCBEMA`: ESCBEMA (somente para a fabricante Bematech).
            enum:
              - ESCPOS
              - ESCBEMA
          example:
            - ESCPOS
            - ESCBEMA
        printer_models:
          type: array
          description: Modelos de impressora da fabricante.
          items:
            type: string
            description: Modelo da impressora
          example:
            - Print 2000
            - Print 3000
        scale_models:
          type: array
          description: Modelos de balança da fabricante.
          items:
            type: string
            description: Modelo da balança
          example:
            - Balança 2000
            - Balança 3000
        sat_models:
          type: array
          description: Modelos de sat da fabricante.
          items:
            type: string
            description: Modelo do sat
          example:
            - SAT 2000
            - SAT 3000
    PeripheralProducts:
      type: object
      title: Produtos do periférico
      description: Lista os produtos relacionados ou não do periférico.
      properties:
        id:
          type: integer
          description: Código do produto
          example: 123
        name:
          type: string
          description: Nome do produto.
          example: Produto Teste
        sku:
          type: string
          description: Código do produto.
          example: COD001
          readOnly: true
        category:
          type: object
          description: Categoria do produto.
          readOnly: true
          properties:
            id:
              type: integer
              description: Identificador único da categoria.
              example: 1
            name:
              type: string
              minLength: 1
              maxLength: 120
              description: Nome da categoria.
              example: Nome da categoria
        option_type:
          description: Informações sobre as opções do produto.
          $ref: '#/components/schemas/ProductOptionType'
        image_url:
          type:
            - 'null'
            - string
          description: URL da imagem principal do produto.
          format: url
          readOnly: true
          example: https://images.connectplug.com.br/4f01c1252eea.jpg
        unitary_value:
          description: >
            Preço do produto.


            Esse campo pode ser opcional quando o produto for do tipo
            "**Combo**".
          $ref: '#/components/schemas/Money'
    Carrier:
      type: object
      description: >-
        Representa uma pessoa jurídica ou pessoa física que realiza o transporte
        de mercadorias
      properties:
        id:
          type: integer
          description: Identificador único da Transportadora.
          readOnly: true
          example: 123
        name:
          type: string
          minLength: 1
          maxLength: 120
          description: Nome da transportadora pessoa física ou Razão social.
          example: Nome da Transportadora
        type:
          type: string
          enum:
            - individual
            - company
          description: |
            Tipo da transportadora.

            - `individual` (Pessoa física)
            - `company` (Pessoa jurídica)
          example: individual
        company_name:
          type: string
          maxLength: 120
          description: Razão social da pessoa jurídica.
          example: MyCompany
        state_registry_free:
          type: boolean
          description: Indica se a transportadora é isenta de inscrição estadual.
          example: true
        icms_free:
          type: boolean
          description: Indica se a transportadora é isenta de ICMS.
          example: true
        has_delivery_carrier:
          type: boolean
          description: Indica se a transportadora realiza entrega.
          example: true
        register_in_nfe:
          type: boolean
          description: Indica se a transportadora deve ser registrada na NFe.
          example: true
        documents:
          type: array
          description: Lista de documentos da transportadora.
          items:
            $ref: '#/components/schemas/Document'
        address:
          description: Endereço da transportadora
          $ref: '#/components/schemas/Address'
        contacts:
          description: Contato da transportadora
          $ref: '#/components/schemas/Contact'
        companies:
          type: array
          description: Lista de empresas que permite visualizar
          items:
            $ref: '#/components/schemas/RelationCompany'
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        deleted:
          type: boolean
          description: Informa se o registro está excluído
          readOnly: true
          example: false
    AddressZipCode:
      type: object
      description: Dados do endereço
      properties:
        street:
          type: string
          maxLength: 100
          description: Nome do logradouro (Rua, Avenida, praça, etc).
          example: Avenida Paulista
        city_id:
          type: number
          description: ID da cidade.
          example: 1234
        ibge_code:
          type: string
          maxLength: 7
          description: |
            Código do município segundo IBGE. 

            Exemplo: O código do município segundo IBGE é 3550308
          example: '3550308'
        state:
          readOnly: true
          type: string
          maxLength: 2
          description: Sigla do estado do endereço.
          example: SP
        city:
          readOnly: true
          type: string
          maxLength: 60
          description: Nome da cidade.
          example: São Paulo
        neighborhood:
          type: string
          maxLength: 80
          description: Nome do Bairro.
          example: Bela Vista
        zip_code:
          type: string
          maxLength: 8
          description: CEP do endereço.
          example: '01311000'
        latitude:
          type: string
          description: coordenada geográfica do CEP do endereço.
          example: '-25.442713'
        longitude:
          type: string
          description: coordenada geográfica do CEP do endereço.
          example: '-49.2971654'
    FinancialGroup:
      type: object
      title: Dados do Grupo financeiro
      description: Representa um grupo financeiro.
      properties:
        id:
          type: integer
          description: Identificador único do grupo financeiro.
          example: 123
          readOnly: true
        name:
          type: string
          description: Nome do grupo financeiro.
          example: Receitas Operacionais
        type:
          type: string
          enum:
            - income
            - expense
          description: |
            Tipo da movimentação financeira.

            Exemplo:

              - `income`: Receita
              - `expense`: Despesa
          example: expense
        order:
          type: integer
          description: Ordem que este grupo será ordenado.
          example: 1
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    FinancialAccountPlans:
      type: object
      title: Dados do plano de contas
      description: Representa um plano de conta.
      properties:
        id:
          type: integer
          description: Identificador único do plano de conta.
          example: 123
          readOnly: true
        name:
          type: string
          description: Nome do plano de conta.
          example: Despesas Administrativas
        financial_group:
          readOnly: true
          description: Informações da conta financeira.
          $ref: '#/components/schemas/FinancialGroup'
        is_editable:
          type: boolean
          description: Se o plano de conta é editável
          example: true
        available_for_pdv:
          type: boolean
          description: Se o plano de conta está disponível para o PDV
          example: true
          $ref: '#/components/schemas/FinancialGroup'
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    StockMovementCategory:
      type: object
      description: Representa uma categoria de movimentação de estoque;
      properties:
        id:
          type: integer
          description: Identificador único da categoria.
          example: 1
          readOnly: true
        name:
          type: string
          description: Nome da categoria.
          example: Venda
        type:
          enum:
            - all
            - in
            - out
          description: |
            Tipo de movimentação:

            - `all` Todos
            - `in` Entrada
            - `out` Saída
        is_editable:
          type: boolean
          description: Indica se é possivel editar/apagar esta categoria.
          example: false
          readOnly: true
        company_ids:
          type: array
          description: Lista de identificadores únicos das empresas.
          example:
            - 1
            - 2
          writeOnly: true
        companies:
          readOnly: true
          type: array
          description: Lista de empresas que permite visualizar.
          items:
            type: object
            description: Representa uma empresa.
            properties:
              id:
                type: integer
                description: Id único da empresa
                example: 123
              name:
                type: string
                description: Nome fantasia da empresa
                example: CPlug
              company_name:
                type: string
                description: Razão social da empresa
                example: ConnectPlug Desenvolvimento de Software LTDA
        created_at:
          type: string
          description: Data da criação da categoria.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da atualização da categoria.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
      required:
        - name
        - type
        - company_ids
    StockMovementRegisterIn:
      type: object
      description: Representa uma movimentação de entrada de um produto no estoque
      properties:
        product_id:
          type: integer
          description: Identificador único do produto.
          example: 1
        amount:
          type: number
          description: Quantidade do produto.
          example: 10
        unitary_cost:
          description: Valor unitário do produto
          $ref: '#/components/schemas/Money'
        unitary_value:
          description: >-
            Valor unitário do produto. Este valor só está disponível para
            atualizar de acordo com a configuração do ERP.
          $ref: '#/components/schemas/Money'
        expiration_date:
          type: string
          description: data de vencimento do produto, caso esteja configurado.
          format: date
          example: '2032-09-13'
        attributes:
          type: array
          description: Lista de atributos do produto.
          items:
            type: object
            description: Representa um atributo
            properties:
              attribute_id:
                type: integer
                description: Identificador único do atributo de um produto.
                example: 4
              option_ids:
                type: array
                description: Lista de identificador único do atributo de um produto.
                example:
                  - 1
                  - 2
    StockMovementRegisterOut:
      type: object
      description: Representa uma movimentação de entrada de um produto no estoque
      properties:
        product_id:
          type: integer
          description: Identificador único do produto.
          example: 1
        amount:
          type: number
          description: Quantidade do produto.
          example: 10
        attributes:
          type: array
          description: Lista de atributos do produto.
          items:
            type: object
            description: Representa um atributo
            properties:
              attribute_id:
                type: integer
                description: Identificador único do atributo de um produto.
                example: 4
              option_ids:
                type: array
                description: Lista de identificador único do atributo de um produto.
                example:
                  - 1
                  - 2
        reason_for_loss:
          type: string
          description: Descrição da perda.
          example: Produto quebrado
        stock_movement_ids:
          type: array
          description: Lista de IDs da movimentação de estoque de entrada (lotes).
          example:
            - 1
            - 2
    StockMovementRegister:
      type: object
      description: Representa uma movimentação de produto no estoque;
      properties:
        type:
          enum:
            - in
            - out
          description: |
            Tipo de movimentação

            - `in` Entrada.
            - `out` Saída.
        stock_movement_category_id:
          type: integer
          description: Identificador único da categoria de movimento do estoque.
          example: 1
        date:
          type: string
          description: data da movimentação.
          format: date
          example: '2024-09-13'
        products:
          type: array
          description: Lista de atributos do produto.
          items:
            oneOf:
              - $ref: '#/components/schemas/StockMovementRegisterIn'
              - $ref: '#/components/schemas/StockMovementRegisterOut'
    StockProductMovement:
      type: object
      description: Representa uma movimentação de produto no estoque;
      properties:
        id:
          type: integer
          description: Número do lote.
          example: 153
        product_id:
          type: integer
          description: Identificador único do produto.
          example: 153
        type:
          enum:
            - in
            - out
          description: |
            Tipo de movimentação

            - `in` Entrada.
            - `out` Saída.
        unitary_cost:
          type: string
          description: >-
            Custo unitário. Quando este campo tiver o valor `composition`, quer
            dizer que o produto faz parte de um combo.
          example: R$ 1,50
        unitary_value:
          description: Valor unitário do produto.
          $ref: '#/components/schemas/Money'
        attributes:
          type: array
          description: Lista de atributos do produto.
          items:
            type: string
            description: Nome de um atributo.
            example: Opção 01
        customer:
          type: object
          description: Dados do cliente.
          properties:
            id:
              type: integer
              description: Identificador único do cliente na CPlug.
              example: 1
            name:
              type: string
              description: Nome do cliente.
              example: Fulado de tal
        sale_id:
          description: |
            Identificador único da venda na CPlug.

            `null` caso não seja uma movimentação criada por uma venda.
          type: integer
          example: 1
        nfe:
          type: object
          description: |
            Dados da nota fiscal de compra ou venda.

            `null` caso não haja uma nota fiscal associada a esta movimentação.
          oneOf:
            - title: Dados da nota fiscal de venda
              type: object
              properties:
                id:
                  type: integer
                  description: Identificador único da Nf-e de venda na CPlug.
                  example: 1
                number:
                  type: string
                  description: Número da nota.
                  example: '45687'
            - title: Dados da nota fiscal de compra
              type: object
              properties:
                id:
                  type: integer
                  description: Identificador único da Nf-e de compra na CPlug.
                  example: 1
                number:
                  type: string
                  description: Número da nota.
                  example: '45687'
        category:
          type: object
          oneOf:
            - title: categoria
              type: object
              properties:
                id:
                  type: integer
                  description: Identificador único da categoria.
                  example: 1
                name:
                  type: string
                  description: Nome.
                  example: Ajuste de estoque
            - title: categoria de compra com detalhes
              type: object
              properties:
                id:
                  type: integer
                  description: Identificador único da categoria.
                  example: 1
                name:
                  type: string
                  description: Nome.
                  example: Compra
                in_detail:
                  type: object
                  properties:
                    purchase_id:
                      type: integer
                      description: Identificador único da compra na CPlug.
                      example: 1
                    number:
                      type: string
                      description: 'Código da compra. Ex: C123'
                      example: C123
                    date:
                      type: string
                      description: data da compra.
                      example: 10/09/2024
                    cost:
                      type: string
                      description: 'Valor de custo. Ex: R$ 1,50'
                      example: R$ 1,50
                    is_disabled_purchase:
                      type: boolean
                      description: se a compra foi apagada.
                      example: false
            - title: categoria de perda
              type: object
              properties:
                id:
                  type: integer
                  description: Identificador único da categoria.
                  example: 1
                name:
                  type: string
                  description: Nome.
                  example: Perda
                loss_detail:
                  type: object
                  properties:
                    reason:
                      type: string
                      description: descrição da perda.
                      example: Produto quebrado no transporte
            - title: categoria de transferência de saída do produto
              type: object
              properties:
                id:
                  type: integer
                  description: Identificador único da categoria.
                  example: 1
                name:
                  type: string
                  description: Nome.
                  example: Transferência de Consignado
                transfer_detail:
                  type: object
                  properties:
                    stock_movement_out:
                      type: object
                      properties:
                        id:
                          type: integer
                          description: ID da movimentação de saída.
                          example: 123
                        stock:
                          type: object
                          properties:
                            id:
                              type: integer
                              description: ID do estoque de origem.
                              example: 123
                            name:
                              type: string
                              description: Nome do estoque de origem.
                              example: Estoque Padrão
                    stock_movement_in:
                      type: object
                      properties:
                        id:
                          type: integer
                          description: ID da movimentação de entrada.
                          example: 123
                        stock:
                          type: object
                          properties:
                            stock_id:
                              type: integer
                              description: ID do estoque de destino.
                              example: 123
                            stock_name:
                              type: string
                              description: Nome do estoque de destino.
                              example: Estoque Padrão Loja A
            - title: categoria de transferência de entrada do produto
              type: object
              properties:
                id:
                  type: integer
                  description: Identificador único da categoria.
                  example: 1
                name:
                  type: string
                  description: Nome.
                  example: Transferência
                transfer_detail:
                  type: object
                  properties:
                    stock_movement_out:
                      type: object
                      properties:
                        id:
                          type: integer
                          description: ID da movimentação de saída.
                          example: 123
                        stock:
                          type: object
                          properties:
                            id:
                              type: integer
                              description: ID do estoque de origem.
                              example: 123
                            name:
                              type: string
                              description: Nome do estoque de origem.
                              example: Estoque Padrão Lote A
                    stock_movement_in:
                      type: object
                      properties:
                        id:
                          type: integer
                          description: ID da movimentação de entrada.
                          example: 123
                        stock:
                          type: object
                          properties:
                            id:
                              type: integer
                              description: ID do estoque de destino.
                              example: 123
                            name:
                              type: string
                              description: Nome do estoque de destino.
                              example: Estoque Padrão Lote B
        user:
          type: object
          description: Quem fez a movimentação do produto no estoque.
          properties:
            id:
              type: integer
              description: Identificador único do usuário na CPlug.
              example: 1
            name:
              type: string
              description: Nome do usuário.
              example: Fulano de tal
        date:
          type: string
          description: Data da movimentação.
          format: date
          example: '2020-01-01'
        service_order_or_item_code:
          type: string
          description: OS/Cód.Item
          example: A23
        quantity:
          type: number
          description: Indica a quantidade do produto que foi movimentado no estoque.
          example: 10
        balance:
          type: number
          description: Indica a quantidade do produto no estoque.
          example: 90
        unit_of_measure:
          description: Unidade de medida do produto.
          $ref: '#/components/schemas/MeasurementUnit'
        has_movement_out:
          type: boolean
          description: Indica se esta movimentação possui uma movimentação de saída.
          example: true
    StockMovementCompositionDetail:
      type: object
      description: Representa uma composição de um movimento de estoque
      properties:
        total_amount:
          type: number
          description: Quantidade do produto movimentado.
          example: 10
        total_cost:
          description: Valor do custo total
          $ref: '#/components/schemas/Money'
        average_value:
          description: Valor médio de custo
          $ref: '#/components/schemas/Money'
        stock_movement_costs:
          type: array
          description: Lista de movimentações.
          items:
            type: object
            description: Representa uma movimentação
            properties:
              unit_of_measure:
                type: object
                properties:
                  abbreviation:
                    type: string
                    description: Símbolo da unidade de medida.
                    example: Un
                  precision:
                    type: integer
                    description: Precisão da unidade de media.
                    example: 2
              stock_movement_id_in:
                type: integer
                description: ID único da movimentação de estoque de entrada.
                example: 101
              stock_movement_id_out:
                type: integer
                description: ID único da movimentação de estoque de saída.
                example: 201
              cost:
                description: Valor unitário do custo do produto.
                $ref: '#/components/schemas/Money'
              amount:
                type: number
                description: Quantidade de produto movimentado.
                example: 3
              subtotal_cost:
                description: Subtotal do custo deste produto nesta movimentação.
                $ref: '#/components/schemas/Money'
    StockProductSummary:
      type: object
      description: Representa um produto no estoque;
      properties:
        id:
          type: integer
          description: Identificador único do produto na CPlug.
          example: 1
        sku:
          type: string
          description: Código do produto.
          example: A747
        name:
          type: string
          description: Nome do produto.
          example: Produto simples
        unit_of_measure:
          description: Unidade de medida do produto.
          $ref: '#/components/schemas/StockProductBalanceUnit'
        created_at:
          type: string
          description: Data da criação do produto.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da atualização do produto.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    StockProduct:
      type: object
      description: Representa um produto no estoque;
      properties:
        product:
          description: Informações de produto que está no estoque.
          $ref: '#/components/schemas/StockProductSummary'
        amount_in_stock:
          type: number
          description: Indica a quantidade do produto no estoque.
          example: 10
        created_at:
          type: string
          description: Data da criação do estoque.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da atualização do estoque.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    StockProductBalanceStock:
      type: object
      description: Representa um estoque
      properties:
        id:
          type: integer
          description: Identificador único do estoque na CPlug.
          example: 1
        name:
          type: string
          description: Nome do estoque.
          example: Estoque Padrão
    StockProductOptionBalance:
      type: object
      description: Representa um balanço das opções
      properties:
        balance:
          type: number
          description: Indica a quantidade de opções do produto no estoque.
          example: 10
        options:
          type: array
          description: Lista de opções do produto.
          items:
            type: object
            description: Representa uma opções
            properties:
              option_id:
                type: number
                description: Identificador único da opção.
                example: 1
              name:
                type: string
                description: Nome da opção.
                example: Opção 01
    StockProductBalance:
      type: object
      description: Representa um produto no estoque;
      properties:
        stock:
          description: Informações do estoque.
          $ref: '#/components/schemas/StockProductBalanceStock'
        product:
          description: Informações de produto.
          $ref: '#/components/schemas/StockProductBalanceProduct'
        balance:
          type: number
          description: Indica a quantidade do produto no estoque.
          example: 10
        balance_options:
          type: array
          description: Lista de balanço das opções do produto.
          items:
            $ref: '#/components/schemas/StockProductOptionBalance'
    ProductBatch:
      type: object
      description: Representa um lote de um produto;
      properties:
        id:
          type: integer
          description: Identificador único da movimentação de estoque.
          example: 1
        cost:
          type: number
          description: Valor do custo unitário no lote.
          example: 10
        balance:
          type: number
          description: Quantidade do produto no lote.
          example: 100
        expiration_date:
          type: string
          description: Data de vencimento do produto.
          format: date
          example: '2032-09-13'
    ProductBatches:
      type: object
      description: Representa os lotes de um produto;
      properties:
        product:
          description: Informações de produto.
          $ref: '#/components/schemas/StockProductBalanceProduct'
        option_names:
          type: string
          description: Nome das opções.
          example: Opção 1 Opção 2
        stock_movements:
          type: array
          description: Lista de lotes.
          items:
            $ref: '#/components/schemas/ProductBatch'
    StockMovementDelete:
      type: object
      description: >
        Representa uma requisição para apagar uma movimentação no estoque.


        **Obs**: enviar este body quando há uma movimentação de saída na
        movimentação de entreda. 

        Campo `has_movevement_out` no _endpoint_ de [listagem de
        movimentações](#tag/StockProducts/operation/get-stocks-products).
      properties:
        action:
          enum:
            - custom
            - fill
            - keep
            - reset
          description: |
            Tipo de ação:

            - `custom`: um novo valor de custo;
            - `fill`: preencher com a proxima entrada;
            - `keep`: manter o custo;
            - `reset`: zerar o custo.
        value:
          description: Valor customizado.
          $ref: '#/components/schemas/Money'
    StockProductResetMovementsBody:
      type: object
      description: Representa uma movimentação de produto no estoque;
      properties:
        user_id:
          type: integer
          description: Identificador único do usuário que realizará a operação.
          example: 1
        password:
          type: string
          description: >-
            Senha do usuário que está realizando a operação, no caso relacionado
            ao campo `user_id`.
          example: '123456'
        confirm_phrase:
          type: string
          description: >-
            String que deve ser digitada para confirmação da remoção, tem o
            propósito de garantir que o usuário tem certeza da operação. Esta
            deverá sempre receber valor `deletar`.
          example: deletar
      required:
        - user_id
        - password
        - confirm_phrase
    Stock:
      type: object
      description: Representa um estoque;
      properties:
        id:
          type: integer
          description: Identificador único do estoque na CPlug.
          example: 1
          readOnly: true
        name:
          type: string
          description: Nome do estoque.
          example: Estoque Padrão
        stock_location:
          enum:
            - own_local
            - third_party_from_customer
            - third_party_from_supplier
          description: >
            Tipo do local de armazenamento:


            - `own_local` O estoque está localizado na empresa.

            - `third_party_from_customer` Estoque está localizado na empresa do
            Cliente. Exemplo: Cliente utiliza equipamentos da empresa por
            possuir um contrato de aluguel.

            - `third_party_from_supplier` Estoque está localizado na empresa do
            fornecedor. Exemplo: Fornecedor fica em seu estoque com equipamentos
            da empresa enquanto presta manutenção.
        stock_property_type:
          enum:
            - own_products
            - third_party_from_customer
            - third_party_from_supplier
          description: >
            Tipo de propriedade do produto:


            - `own_products` Estoque armazena produtos da própria empresa

            - `third_party_from_customer` Estoque armazena produto de Clientes.
            Exemplo: Empresa realiza manutenção em equipamentos de clientes.

            - `third_party_from_supplier` Estoque armazena produtos de
            fornecedores. Exemplo: Empresa aluga de um fornecedor equipamentos,
            como impressoras.
        is_default_company_sale:
          type: boolean
          description: >-
            Indica se este estoque é o estoque padrão de vendas para alguma
            empresa.
          example: false
          readOnly: true
        is_default_company_purchase:
          type: boolean
          description: >-
            Indica se este estoque é o estoque padrão de compras para alguma
            empresa.
          example: false
          readOnly: true
        companies:
          readOnly: true
          type: array
          description: Lista de empresas que permite visualizar.
          items:
            type: object
            description: Representa uma empresa.
            properties:
              id:
                type: integer
                description: Id único da empresa
                example: 123
              name:
                type: string
                description: Nome fantasia da empresa
                example: CPlug
              company_name:
                type: string
                description: Razão social da empresa
                example: ConnectPlug Desenvolvimento de Software LTDA
        company_ids:
          writeOnly: true
          $ref: '#/components/schemas/ByCompany'
        deleted:
          type: boolean
          description: Indica se o estoque foi apagado ou não.
          example: false
          readOnly: true
        created_at:
          type: string
          description: Data da criação do estoque.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da atualização do estoque.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    StockResetMovementsBody:
      type: object
      description: >-
        Representa a estrutura do corpo da requisição para a operação de resetar
        os movimentos de estoque;
      properties:
        user_id:
          type: integer
          description: Identificador único do usuário que realizará a operação.
          example: 1
        password:
          type: string
          description: >-
            Senha do usuário que está realizando a operação, no caso relacionado
            ao campo `user_id`.
          example: '123456'
        confirm_phrase:
          type: string
          description: >-
            String que deve ser digitada para confirmação da remoção, tem o
            propósito de garantir que o usuário tem certeza da operação. Esta
            deverá sempre receber valor `deletar`.
          example: deletar
        company_ids:
          type: array
          description: Lista com Ids de Empresa (Company).
          items:
            type: number
            example: 12
      required:
        - user_id
        - password
        - confirm_phrase
    StockOrderReset:
      type: object
      description: Representa a solicitação de reset de movimentações de um estoque.
      properties:
        id:
          type: integer
          description: Identificador único do reset de movimentação.
          example: 1
          readOnly: true
        status:
          type: string
          description: Status do reset de movimentação.
          enum:
            - pending
            - concluded
          example: pending
          readOnly: true
        stock:
          type: object
          description: Representa o estoque.
          properties:
            id:
              type: integer
              description: Identificador único do estoque.
              example: 1
            name:
              type: string
              description: Nome do estoque.
              example: Estoque 1
        companies:
          type: array
          description: Lista de empresas que terão movimentações zeradas.
          items:
            type: object
            description: Representa uma empresa.
            properties:
              id:
                type: integer
                description: Id único da empresa
                example: 123
              name:
                type: string
                description: Nome fantasia da empresa
                example: CPlug
              company_name:
                type: string
                description: Razão social da empresa
                example: ConnectPlug Desenvolvimento de Software LTDA
        created_at:
          type: string
          description: Data da criação do reset de estoque.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        finished_at:
          type: string
          description: Data da finalização da rotina.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    StockInventory:
      type: object
      description: Representa um inventário de estoque;
      properties:
        id:
          type: integer
          description: Identificador único do inventário de estoque na CPlug.
          example: 1
          readOnly: true
        name:
          type: string
          description: Nome do inventário de estoque.
          example: Inventário 1
        is_finalized:
          type: boolean
          description: Indica se o inventário foi finalizado.
          example: false
          readOnly: true
        start_date:
          type: string
          description: Data de início do inventário.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        end_date:
          type: string
          description: Data de fim do inventário.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        created_at:
          type: string
          description: Data da criação do inventário.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da atualização do inventário.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    StockInventoryItemItemAttribute:
      type: object
      title: Atributo
      description: Representa um Atributo.
      properties:
        id:
          type: integer
          description: Identificador único do atributo.
          readOnly: true
          example: 123
        name:
          type: string
          maxLength: 200
          minLength: 1
          description: Nome do atributo.
          example: Nome do atributo
        options:
          type: array
          description: Lista de opções do atributo.
          items:
            type: object
            title: Opção
            description: Representa uma Opção de um Atributo.
            properties:
              id:
                type: integer
                description: Identificador único da opção.
                readOnly: true
                example: 123
              name:
                type: string
                maxLength: 200
                minLength: 1
                description: Nome da opção.
                example: Nome da opção
    StockInventoryItemStock:
      type: object
      title: Estoque do produto
      description: Representa o estoque do produto.
      properties:
        unitary_cost:
          description: Custo unitário do produto
          $ref: '#/components/schemas/Money'
        previous_amount:
          type:
            - number
            - 'null'
          description: Quantidade anterior do produto.
          example: 1
        new_amount:
          type:
            - number
            - 'null'
          description: Nova quantidade do produto.
          example: 10
        can_replace_cost:
          type: boolean
          description: Se o custo unitário pode ser substituído.
          example: true
        balance:
          type:
            - object
            - 'null'
          description: Saldo do produto
          properties:
            amount:
              type: number
              description: Saldo do produto.
              example: 10
            type:
              type:
                - string
                - 'null'
              description: Se o saldo é positivo ou negativo.
              example: positive
              enum:
                - positive
                - negative
    StockInventoryItemItemInventoryProductAttribute:
      type: object
      title: Atributo de um Produto com Informações de Estoque
      description: Representa um Atributo de um Produto com Informações de Estoque.
      properties:
        id:
          type: integer
          description: >-
            Identificador único do atributo de um produto com informações de
            estoque.
          readOnly: true
          example: 123
        attributes:
          type: array
          description: Lista de atributos do produto.
          $ref: '#/components/schemas/StockInventoryItemItemAttribute'
        stock:
          description: Informações do estoque.
          $ref: '#/components/schemas/StockInventoryItemStock'
    StockInventoryItemItem:
      type: object
      title: Produto
      description: Representa um Produto.
      properties:
        id:
          type: integer
          description: Identificador único do produto.
          readOnly: true
          example: 123
        name:
          type: string
          maxLength: 200
          minLength: 1
          description: Nome do produto.
          example: Nome do produto
        sku:
          type: string
          description: |
            Código SKU do produto. 

            **Esse código deve ser único**.

            Exemplo: COD-CP-01
          maxLength: 30
          example: COD-CP-01
        unit_of_measure:
          type: object
          description: Unidade de medida do produto.
          readOnly: true
          properties:
            id:
              type: integer
              description: Identificador único da unidade de medida.
              example: 1
            name:
              type: string
              minLength: 1
              maxLength: 50
              description: Nome da unidade de medida, exemplo "quilos".
              example: Kilos
            abbreviation:
              type: string
              minLength: 1
              maxLength: 5
              description: A abreviatura da unidade, exemplo "kg".
              example: kg
            precision:
              type: integer
              minimum: 0
              maximum: 6
              description: >
                Um número inteiro entre 0 e 6 que representa o número máximo de
                posições permitidas após o decimal em quantidades medidas com
                esta unidade.

                Por exemplo:
                  - se a precisão for `0`, a quantidade pode ser `1`, `2`, `3`, etc.
                  - se a precisão for `1`, a quantidade pode ser `0.1`, `0.2`, `0.3`, etc.
                  - se a precisão for `2`, a quantidade pode ser `0.01`, `0.02`, `0.03`, etc.
              example: 1
        inventory_item_attributes:
          type: array
          description: Lista de atributos do produto com informações de estoque.
          items:
            $ref: >-
              #/components/schemas/StockInventoryItemItemInventoryProductAttribute
        stock:
          description: Informações do estoque do produto.
          $ref: '#/components/schemas/StockInventoryItemStock'
    StockInventoryItem:
      type: object
      description: Representa um item de um inventário de estoque;
      properties:
        id:
          type: integer
          description: Identificador único do item do inventário de estoque na CPlug.
          example: 1
          readOnly: true
        item:
          $ref: '#/components/schemas/StockInventoryItemItem'
        created_at:
          type: string
          description: Data da criação do item do inventário de estoque.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da atualização do item do inventário de estoque.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    UpsertStockInventoryItemStock:
      type: object
      title: Estoque do produto
      description: Representa o estoque do produto.
      properties:
        unitary_cost:
          description: Custo unitário do produto
          $ref: '#/components/schemas/Money'
        previous_amount:
          type:
            - number
            - 'null'
          description: Quantidade anterior do produto.
          example: 1
        new_amount:
          type:
            - number
            - 'null'
          description: Nova quantidade do produto.
          example: 10
        can_replace_cost:
          type: boolean
          description: Se o custo unitário pode ser substituído.
          example: true
    UpsertStockInventoryItemAttribute:
      type: object
      title: Atributo
      description: Representa um Atributo.
      properties:
        id:
          type: integer
          description: Identificador único do atributo.
          example: 123
        option_ids:
          type: array
          description: Lista de identificadores únicos das opções.
          items:
            type: integer
            example: 456
    UpsertStockInventoryItemInventoryProductAttribute:
      type: object
      title: Atributo de um Produto com Informações de Estoque
      description: Representa um Atributo de um Produto com Informações de Estoque.
      properties:
        id:
          type: integer
          description: >-
            Identificador único do atributo de um produto com informações de
            estoque.
          example: 123
        attributes:
          type: array
          description: Lista de atributos do produto.
          items:
            $ref: '#/components/schemas/UpsertStockInventoryItemAttribute'
        stock:
          description: Informações do estoque.
          $ref: '#/components/schemas/UpsertStockInventoryItemStock'
    UpsertStockInventoryItem:
      type: object
      title: Item do inventário
      description: Representa um item do inventário.
      properties:
        id:
          type: integer
          description: Identificador único do item do inventário.
          example: 123
        item:
          type: object
          description: Item do inventário.
          properties:
            id:
              type: integer
              description: Identificador único do produto.
              example: 123
            stock:
              description: Informações do estoque do produto.
              $ref: '#/components/schemas/UpsertStockInventoryItemStock'
            inventory_item_attributes:
              type: array
              description: Lista de atributos do produto com informações de estoque.
              items:
                $ref: >-
                  #/components/schemas/UpsertStockInventoryItemInventoryProductAttribute
        removed_inventory_item_attribute_ids:
          type: array
          description: >
            Lista de identificadores únicos dos atributos do produto que serão
            removidos (inventory_item_attributes.*.id).
          items:
            type: integer
            example: 123
    UpsertStockInventoryItems:
      type: object
      title: Criação, Atualização e Remoção de itens de um inventário de estoque
      description: Representa uma lista de itens do inventário.
      properties:
        inventory_items:
          type: array
          description: Lista de itens do inventário.
          items:
            $ref: '#/components/schemas/UpsertStockInventoryItem'
    UploadStockInventoryItemError:
      type: object
      title: Erro do item do inventário
      description: Representa um erro do item do inventário.
      properties:
        code:
          type: string
          description: Código do erro.
          example: new_stock_empty
        message:
          type: string
          description: Mensagem do erro.
          example: 'Novo estoque inválido: 100'
    UploadStockInventoryItem:
      type: object
      title: Item do inventário
      description: Representa um item do inventário.
      properties:
        row_number:
          type: integer
          description: Número da linha da planilha.
          example: 1
        item:
          type: object
          description: Item do inventário.
          properties:
            id:
              type: integer
              description: Identificador único do produto.
              readOnly: true
              example: 123
            name:
              type: string
              maxLength: 200
              minLength: 1
              description: Nome do produto.
              example: Nome do produto
            sku:
              type: string
              description: |
                Código SKU do produto. 

                **Esse código deve ser único**.

                Exemplo: COD-CP-01
              maxLength: 30
              example: COD-CP-01
            stock:
              description: Informações do estoque do produto.
              $ref: '#/components/schemas/StockInventoryItemStock'
        errors:
          type: array
          description: Lista de erros encontrados no item.
          items:
            $ref: '#/components/schemas/UploadStockInventoryItemError'
    UploadStockInventoryItems:
      type: object
      title: Itens do inventário
      description: Representa uma lista de itens do inventário.
      properties:
        data:
          type: object
          properties:
            upload_items:
              type: array
              description: Lista de itens do inventário.
              items:
                $ref: '#/components/schemas/UploadStockInventoryItem'
    ImportStockInventoryItemStock:
      type: object
      title: Estoque do produto
      description: Representa o estoque de um produto.
      properties:
        unitary_cost:
          description: Custo unitário do produto
          $ref: '#/components/schemas/Money'
        new_amount:
          type:
            - number
            - 'null'
          description: Nova quantidade do produto.
          example: 10
        can_replace_cost:
          type: boolean
          description: Se o custo unitário pode ser substituído.
          example: true
        balance:
          type:
            - object
            - 'null'
          description: Saldo do produto
          properties:
            amount:
              type: number
              description: Saldo do produto.
              example: 10
    ImportStockInventoryItem:
      type: object
      title: Item do inventário
      description: Representa um item do inventário.
      properties:
        row_number:
          type: integer
          description: Número da linha da planilha.
          example: 1
        item_id:
          type: integer
          description: Identificador único do produto.
          example: 123
        stock:
          description: Informações do estoque do produto.
          $ref: '#/components/schemas/ImportStockInventoryItemStock'
    ImportStockInventoryItems:
      type: object
      title: Itens do inventário
      description: Representa uma lista de itens do inventário.
      properties:
        items:
          type: array
          description: Lista de itens do inventário.
          items:
            $ref: '#/components/schemas/ImportStockInventoryItem'
    StockTransfer:
      type: object
      description: Representa uma transferência entre estoques;
      properties:
        id:
          type: number
          description: Identificar único da transferência.
          example: 1
        stock_out:
          type: object
          properties:
            id:
              type: integer
              description: Identificador único do estoque de saída.
              example: 123
            stock_name:
              type: string
              description: Nome do estoque de saída.
              example: Estoque Padrão
        stock_in:
          type: object
          properties:
            id:
              type: integer
              description: Identificador único do estoque de destino.
              example: 123
            stock_name:
              type: string
              description: Nome do estoque de destino.
              example: Estoque da loja A
        carrier:
          type: object
          properties:
            id:
              type: integer
              description: Identificador único da transportadora.
              example: 123
            stock_name:
              type: string
              description: Nome da transpordora.
              example: CPlug Log
        responsible_name:
          type: string
          description: Nome do responsável pela transferência.
          example: Fulano de tal
        notes:
          type: string
          description: Observações.
          example: Cuidado com o cão
        created_at:
          type: string
          description: Data da criação da transferência.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da atualização da transferência.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    StockTransferBody:
      type: object
      description: Representa uma movimentação de produto no estoque;
      properties:
        stock_id_out:
          type: integer
          description: Identificador único do estoque de saída.
          example: 1
        stock_id_in:
          type: integer
          description: Identificador único do estoque de entrada.
          example: 2
        carrier_id:
          type: integer
          description: Identificador único da transportadora.
          example: 1
        responsible_name:
          type: string
          description: Nome do resposável pela transferência.
          example: Fulano de tal
        notes:
          type: string
          description: Observações.
          example: Cuidado com o cão
        date:
          type: string
          description: data da transferência.
          format: date
          example: '2024-09-18'
        products:
          type: array
          description: Lista de atributos do produto.
          items:
            type: object
            description: Representa uma movimentação de entrada de um produto no estoque
            properties:
              product_id:
                type: integer
                description: Identificador único do produto.
                example: 1
              amount:
                type: number
                description: Quantidade do produto.
                example: 10
              attributes:
                type: array
                description: Lista de atributos do produto.
                items:
                  type: object
                  description: Representa um atributo
                  properties:
                    attribute_id:
                      type: integer
                      description: Identificador único do atributo de um produto.
                      example: 4
                    option_ids:
                      type: array
                      description: Lista de identificador único do atributo de um produto.
                      example:
                        - 1
                        - 2
                  required:
                    - attribute_id
                    - option_ids
              stock_movement_ids:
                type: array
                description: >-
                  Lista de identificador único dos lotes de movimentação
                  (stock_movement_id).
                example:
                  - 1
                  - 2
            required:
              - product_id
              - amount
      required:
        - stock_id_out
        - stock_id_in
        - date
        - products
    SlimProduct:
      type: object
      description: Dados do produto.
      properties:
        id:
          type: integer
          description: Identificador único do produto
          example: 1234
        name:
          type: string
          description: Nome do produto.
          example: Banana
        sku:
          type: string
          description: Código SKU do produto.
          example: COD-CP-01
        category:
          type: object
          description: Categoria do produto.
          properties:
            id:
              type: integer
              description: Identificador único da categoria.
              example: 1
            name:
              type: string
              description: Nome da categoria.
              example: Frutas
        image_url:
          type:
            - 'null'
            - string
          description: URL da imagem principal do produto.
          example: https://images.connectplug.com.br/4f01c1252eea.jpg
        unitary_value:
          type: number
          description: Preço do produto.
          example: 10
        stock_settings:
          type: object
          description: Configurações de estoque do produto.
          properties:
            is_stock_control:
              type: boolean
              description: Se este produto possui um controle de estoque.
              example: true
    SlimStock:
      type: object
      title: Estoque
      description: Representa um estoque usado em ordens de produção.
      properties:
        id:
          type: integer
          description: Identificador único do estoque.
          readOnly: true
          example: 1
        name:
          type: string
          description: Nome do estoque.
          example: Estoque Padrão
    ProductionOrderComponent:
      type: object
      title: Componente do produto
      description: Representa um componente necessário para produzir um produto.
      properties:
        id:
          type: integer
          description: Identificador único do componente.
          readOnly: true
          example: 19
        amount:
          type: number
          description: Quantidade do componente necessária.
          example: 4
        was_consumed:
          type: boolean
          description: >
            Indica se o componente já foi consumido durante a produção.


            Quando o status da ordem de produção for igual a `order`, o campo
            `was_consumed` sempre será `false`.
          example: false
        product:
          description: Produto componente.
          $ref: '#/components/schemas/SlimProduct'
        stock_out:
          description: Estoque de onde o componente será retirado.
          $ref: '#/components/schemas/SlimStock'
    ProductionOrderItem:
      type: object
      title: Item de Ordem de Produção
      description: Representa um item de uma ordem de produção.
      properties:
        id:
          type: integer
          description: Identificador único do item da ordem de produção.
          readOnly: true
          example: 10
        amount:
          type: number
          description: Quantidade do produto a ser produzido.
          example: 1
        was_produced:
          type: boolean
          description: >
            Indica se o item já foi produzido.


            Quando o status da ordem de produção for diferente de `finished`, o
            campo `was_produced` sempre será `false`.
          example: false
        product:
          description: Produto a ser produzido com seus atributos e opções.
          allOf:
            - $ref: '#/components/schemas/SlimProduct'
            - type: object
              properties:
                attributes:
                  type: array
                  description: >
                    Lista de atributos e sua opção utilizada na produção do
                    item.


                    O campo `attributes` será um array vazio quando o produto a
                    ser produzido não tiver atributos informados na produção.
                  items:
                    $ref: '#/components/schemas/ProductAttribute'
        stock_in:
          description: Estoque onde o produto produzido dará entrada.
          $ref: '#/components/schemas/SlimStock'
        components:
          type: array
          description: >
            Lista de componentes necessários para produzir o item.


            Quando o status da ordem de produção for `finished`, o campo
            `components` será um array vazio.
          items:
            $ref: '#/components/schemas/ProductionOrderComponent'
    ProductionOrder:
      type: object
      title: Ordem de Produção
      description: Representa uma ordem de produção.
      properties:
        id:
          type: integer
          description: Identificador único da ordem de produção.
          readOnly: true
          example: 8
        amount:
          type: integer
          description: Quantidade de produtos a serem produzidos.
          example: 1
        responsible:
          description: Usuário responsável pela produção.
          $ref: '#/components/schemas/SlimUser'
        requester:
          description: Usuário que solicitou a produção.
          $ref: '#/components/schemas/SlimUser'
        deadline:
          type: string
          format: date
          description: Data limite para conclusão da produção.
          example: '2025-08-05'
        requested_at:
          type: string
          format: date
          description: Data em que a produção foi solicitada.
          example: '2025-08-05'
        status:
          type: string
          description: Status atual da ordem de produção.
          enum:
            - order
            - in_progress
            - completed
            - cancelled
          example: order
        production_order_items:
          type:
            - array
            - 'null'
          description: >
            Lista de itens da ordem de produção.


            O campo `production_order_items` será `null` apenas na listagem de
            ordens de produção.
          items:
            $ref: '#/components/schemas/ProductionOrderItem'
    ProductionOrderProduct:
      type: array
      description: Lista de produtos a serem produzidos.
      items:
        type: object
        required:
          - id
          - amount
          - stock_id
        properties:
          id:
            type: integer
            description: ID do produto a ser produzido.
            example: 147
          amount:
            type: number
            description: Quantidade do produto a ser produzido.
            example: 1
          stock_id:
            type: integer
            description: ID do estoque onde o produto produzido dará entrada.
            example: 1
          components:
            type: array
            description: Lista de componentes necessários para produzir o item.
            items:
              type: object
              required:
                - id
                - amount
                - stock_id
              properties:
                id:
                  type: integer
                  description: ID do produto componente.
                  example: 143
                amount:
                  type: number
                  description: Quantidade do componente necessária.
                  example: 3
                stock_id:
                  type: integer
                  description: ID do estoque de onde o componente será retirado.
                  example: 1
          options:
            type: array
            description: >
              Lista de opções do produto que serão produzidas.


              - Não é possível enviar opções de atributos que não estão no
              produto.

              - Não é possivel enviar duas opções pertencentes ao mesmo
              atributo.

              - Se o produto tiver 3 atributos será obrigatório enviar apenas 3
              opções.
            items:
              type: object
              required:
                - id
              properties:
                id:
                  type: integer
                  description: ID da opção do atributo.
                  example: 2
    ProductionOrderInProductionProduct:
      type: array
      description: Lista de produtos.
      items:
        type: object
        required:
          - id
        properties:
          id:
            type: integer
            description: ID do produto.
            example: 147
          components:
            type: array
            description: Lista de componentes.
            items:
              type: object
              required:
                - id
                - amount
                - stock_id
                - was_consumed
              properties:
                id:
                  type: integer
                  description: ID do produto componente.
                  example: 143
                amount:
                  type: number
                  description: Quantidade do componente necessária.
                  example: 3
                stock_id:
                  type: integer
                  description: ID do estoque de onde o componente será retirado.
                  example: 1
                was_consumed:
                  type: boolean
                  description: >
                    Indica se o componente foi consumido durante a produção.


                    Quando `true`, será debitado do estoque e não será mais
                    possível alterar este componente, nem removê-lo.
                  example: true
    ProductionOrderFinishedProduct:
      type: array
      description: Lista de produtos
      items:
        type: object
        required:
          - id
          - amount
          - stock_id
          - was_produced
        properties:
          id:
            type: integer
            description: ID do produto.
            example: 147
          amount:
            type: number
            description: Quantidade do produto a ser produzido.
            example: 1
          stock_id:
            type: integer
            description: ID do estoque onde o produto produzido dará entrada.
            example: 1
          was_produced:
            type: boolean
            description: |
              Indica se o produto foi produzido e entrará no estoque.
              Quando true, será creditado no estoque.
            example: true
    StoreCustomer:
      type: object
      title: Informações do cliente.
      description: Representa um cliente na loja.
      properties:
        customer_id:
          type: integer
          description: Identificador único do cliente no CPlug.
          example: 123
          readOnly: true
        name:
          type: string
          description: Nome do cliente.
          example: Fulano de tal
        email:
          type: string
          description: E-mail do cliente.
          example: fulano@cplug.com
        password:
          type: string
          description: Senha
          minimum: 8
          maximum: 60
          example: senha123
          writeOnly: true
        phone:
          type: string
          description: Celular de contato do cliente
          example: (41) 9918-0026
        document:
          type: string
          description: Documento do cliente. CPF ou CNPJ
          example: 111.444.777-35
        birthday:
          type: string
          description: Aniversário do cliente
          format: date
          example: '2016-05-13'
        is_sending_notifications_accepted:
          type: boolean
          description: Permite o cliente receber nofiticações
          example: true
          writeOnly: true
        company_legal_terms_ids:
          writeOnly: true
          type: array
          description: >
            Id do termo legal da loja. 


            Você pode localizar os IDs dos termos legal da loja no _endpoint_ de
            [listagem de termos legais da
            loja](#tag/StoreLegalTerms/operation/get-store-legal-terms).
          items:
            type: integer
            example: 1
          example:
            - 1
            - 2
            - 3
        is_use_of_cookies_accepted:
          type: boolean
          description: Permite usar os cookies
          example: true
          writeOnly: true
        user_agent:
          type: string
          description: Dados do navegador que foi utilizado para fazer o cadastro
          example: >-
            Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like
            Gecko) Chrome/128.0.0.0 Safari/537.36
          writeOnly: true
        ip:
          type: string
          description: Dados do endereço IP
          example: 1050:0:0:0:5:600:300c:326b
          writeOnly: true
        source:
          writeOnly: true
          enum:
            - account_registration
            - notification
            - store_alert
          description: |
            Origem do aceito dos termmos legais:

            - `account_registration` No registro da conta.
            - `notification` Na notificação.
            - `store_alert` No alerto da loja.
          example: account_registration
      required:
        - name
        - email
        - password
        - phone
        - document
        - company_legal_terms_ids
        - is_use_of_cookies_accepted
    StoreCustomerAccount:
      type: object
      title: Informações da conta do cliente logado.
      description: Representa informações da conta do cliente logado.
      properties:
        account_name:
          type: string
          description: Nome do cliente.
          example: Fulano de tal
        login:
          type: string
          description: E-mail do cliente usado para fazer o login.
          example: fulano@cplug.com
        is_sending_notifications_accepted:
          type: boolean
          description: Permite o cliente receber nofiticações
          example: true
        accepted_legal_terms:
          readOnly: true
          type: array
          description: Lista de empresas que permite visualizar.
          items:
            type: object
            description: Representa uma empresa.
            properties:
              accepted_at:
                type: string
                description: Data da atualização do estoque.
                format: date-time
                readOnly: true
                example: '2020-01-01T09:00:00-03:00'
              company_legal_term:
                type: object
                description: Dados do termo legal aceito.
                properties:
                  id:
                    type: integer
                    description: Identificador único do termo legal na CPlug.
                    example: 1
                    readOnly: true
                  type:
                    enum:
                      - custom
                      - delivery_policy
                      - privacy_policy
                      - returns_policy
                      - terms_of_use
                    description: |
                      Filtro pelo tipo do termo legal.

                      - `custom`: Customizado;
                      - `delivery_policy`: Política de Entrega;
                      - `privacy_policy`: Política de Privacidade;
                      - `returns_policy`: Política de Devolução;
                      - `terms_of_use`: Termos de Uso. 
                    example: terms_of_use
                  version:
                    type: string
                    maxLength: 35
                    description: Versão do texto legal
                    example: v2
        customer:
          description: Informações do cliente.
          $ref: '#/components/schemas/Customer'
    StoreCustomerAddress:
      type: object
      description: Dados do endereço
      properties:
        type:
          type: string
          enum:
            - default
            - shipping
            - other
          description: |
            Tipo do endereço.

            - `default` endereço principal.
            - `shipping` endereço de entrega.
            - `other` outro tipo de endereço.
          example: default
        street:
          type: string
          maxLength: 100
          description: Nome do logradouro (Rua, Avenida, praça, etc).
          example: Avenida Paulista
        number:
          type: string
          maxLength: 60
          description: Número do logradouro.
          example: 42 A
        city_id:
          type: number
          description: |
            ID da cidade.

            **Obrigatório quando o campo `ibge_code` não for passado.**
          example: 1234
        ibge_code:
          type: string
          maxLength: 7
          description: |
            Código do município segundo IBGE.

            Exemplo: O código do município segundo IBGE é 3550308

            **Obrigatório quando o campo `city_id` não for passado.**
          example: '3550308'
        state:
          readOnly: true
          type: string
          maxLength: 2
          description: Sigla do estado do endereço.
          example: SP
        city:
          readOnly: true
          type: string
          maxLength: 60
          description: Nome da cidade.
          example: São Paulo
        neighborhood:
          type: string
          maxLength: 80
          description: Nome do Bairro.
          example: Bela Vista
        complement:
          type: string
          maxLength: 255
          description: Complemento do endereço.
          example: Apto 2550
        zip_code:
          type: string
          maxLength: 8
          description: CEP do endereço.
          example: '01311000'
      required:
        - type
        - street
    StoreCustomerDelete:
      type: object
      title: Informações de confimação para apagar a conta do cliente na loja.
      description: >-
        Representa informações de confimação para apagar a conta do cliente na
        loja.
      properties:
        email:
          type: string
          description: E-mail do cliente.
          example: fulano@cplug.com
        password:
          type: string
          description: Senha
          example: senha123
          writeOnly: true
      required:
        - email
        - password
    StoreCustomerLegalTermAccepted:
      type: object
      title: Informações da situação de um termo legal.
      description: Representa uma situação de um termo legal.
      properties:
        company_legal_term:
          type: object
          title: Informações do termo legal.
          description: Representa um termo legal que foi aceito ou não.
          properties:
            id:
              type: integer
              description: Identificador único do termo legal da loja.
              example: 123
            type:
              enum:
                - custom
                - delivery_policy
                - privacy_policy
                - returns_policy
                - terms_of_use
              description: |
                Filtro pelo tipo do termo legal.

                - `custom`: Customizado;
                - `delivery_policy`: Política de Entrega;
                - `privacy_policy`: Política de Privacidade;
                - `returns_policy`: Política de Devolução;
                - `terms_of_use`: Termos de Uso. 
              example: terms_of_use
        was_accepted:
          type: boolean
          description: Identificador se foi aceito ou não.
          example: true
    StoreCustomerLegalTermAccept:
      type: object
      description: Representa um aceite dos termos legais;
      properties:
        company_legal_term_ids:
          type: array
          description: >
            Id do termo legal da loja. 


            Você pode localizar os IDs dos termos legais da loja no _endpoint_
            de [listagem de termos legais da
            loja](#tag/StoreLegalTerms/operation/get-store-legal-terms).
          items:
            type: integer
            example: 1
          example:
            - 1
            - 2
            - 3
        user_agent:
          type: string
          description: Dados do navegador que foi utilizado para fazer o cadastro
          example: >-
            Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like
            Gecko) Chrome/128.0.0.0 Safari/537.36
          writeOnly: true
        ip:
          type: string
          description: Dados do endereço IP
          example: 1050:0:0:0:5:600:300c:326b
          writeOnly: true
        source:
          writeOnly: true
          enum:
            - account_registration
            - notification
            - store_alert
          description: |
            Origem do aceito dos termmos legais:

            - `account_registration` No registro da conta.
            - `notification` Na notificação.
            - `store_alert` No alerto da loja.
          example: account_registration
      required:
        - company_legal_term_ids
    StoreCustomerPasswordRequest:
      type: object
      description: Corpo requisição da recuperação de senha.
      properties:
        email:
          type: string
          description: E-mail da conta.
          example: fulano@email.com
      required:
        - email
    StoreCustomerPasswordRequestResetReset:
      type: object
      description: Corpo requisição da alteração da senha da conta.
      properties:
        email:
          type: string
          description: E-mail da conta.
          example: fulano@email.com
        token:
          type: string
          description: Token que recuperação de senha.
          example: b65436f7...
        password:
          type: string
          description: Nova senha.
          minimum: 8
          maximum: 60
          example: senha123
      required:
        - email
        - token
        - password
    LegalTerm:
      type: object
      description: Representa um termo legal;
      properties:
        id:
          type: integer
          description: Identificador único do termo legal na CPlug.
          example: 1
          readOnly: true
        type:
          enum:
            - custom
            - delivery_policy
            - privacy_policy
            - returns_policy
            - terms_of_use
          description: |
            Filtro pelo tipo do termo legal.

            - `custom`: Customizado;
            - `delivery_policy`: Política de Entrega;
            - `privacy_policy`: Política de Privacidade;
            - `returns_policy`: Política de Devolução;
            - `terms_of_use`: Termos de Uso. 
          example: terms_of_use
        legal_term_id:
          type: integer
          description: >
            Identificador único do termo legal padrão na CPlug.


            Você pode localizar os IDs dos termos legais padrão no _endpoint_ de
            [listagem de termos legais padrão do
            sistema](##tag/LegalTerms/operation/get-legal-terms).
          example: 1
          writeOnly: true
        app_id:
          type: integer
          description: >
            Identificador único do aplicativo na CPlug.


            Você pode localizar os IDs dos aplicativos no _endpoint_ de
            [listagem de aplicativos](#tag/Applications/operation/get-apps).
          example: 1
          writeOnly: true
        title:
          type: string
          maxLength: 120
          description: Título do termo legal
          example: Política de Privacidade
        text:
          type: string
          description: Texto do termo legal
          example: <p>1. Quem somos</p><p>CPlug é um estabelecimento comercial sob...
        version:
          type: string
          maxLength: 35
          description: Versão do texto legal
          example: v2
        external_link:
          type: string
          maxLength: 255
          description: Link para o termo de uso externo.
          example: https://locaweb.company/politicas
        created_at:
          type: string
          description: Data da criação do estoque.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da atualização do estoque.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
      required:
        - type
        - app_id
    LabelSlim:
      type: object
      description: Representa uma etiqueta de impressão em formato resumido
      properties:
        id:
          type: integer
          description: Identificador único da etiqueta.
          readOnly: true
          example: 123
        name:
          type: string
          description: Nome da etiqueta.
          example: Etiqueta Produtos
        code:
          type: string
          description: Código identificador da etiqueta.
          example: ETQ001
        type:
          type: string
          enum:
            - PDF
            - PPLA
            - BPLB
          description: |
            Tipo da etiqueta.

            - `PDF`: Etiqueta em formato PDF.
            - `PPLA`: Etiqueta em formato PPLA (linguagem de impressora).
            - `BPLB`: Etiqueta em formato BPLB (linguagem de impressora).
          example: PDF
        sheet_width:
          type: number
          format: float
          description: Largura da folha da etiqueta em milímetros.
          example: 210
        sheet_height:
          type: number
          format: float
          description: Altura da folha da etiqueta em milímetros.
          example: 297
        columns_amount:
          type: integer
          description: Quantidade de colunas na etiqueta.
          example: 3
        row_amount:
          type: integer
          description: Quantidade de linhas na etiqueta.
          example: 8
    LabelInfo:
      type: object
      description: Representa uma informação de etiqueta (para tipos PPLA e BPLB)
      additionalProperties: false
      properties:
        id:
          type: integer
          description: Identificador único da informação da etiqueta.
          readOnly: true
          example: 456
        type:
          type: string
          enum:
            - COMPANY_NAME
            - PRODUCT_CODE
            - PRODUCT_NAME
            - PRODUCT_CODE_NAME
            - PRODUCT_CATEGORY
            - PRODUCT_VALUE
            - PRODUCT_EXPIRATION_DATE
            - BARCODE
            - QRCODE
            - TEXT
            - LOGO
          description: >
            Tipo da informação da etiqueta.


            Há algumas restrições para os tipos de acordo com o tipo do modelo
            de etiqueta.


            - `PRODUCT_EXPIRATION_DATE`: Apenas para PDF

            - `BARCODE`: Apenas para PPLA e BPLB

            - `QRCODE`: Apenas para PPLA

            - `LOGO`: Apenas para PDF
          example: PRODUCT_NAME
        position:
          type: integer
          description: Posição/sequência da informação na etiqueta.
          minimum: 1
          example: 1
        font_family:
          type: integer
          description: |
            Família da fonte (valores específicos por tipo).

            - PPLA: 0-8
            - BPLB: 1-5
          minimum: 0
          maximum: 8
          example: 1
        font_size:
          type: integer
          description: |
            Tamanho da fonte (valores específicos por tipo).

            - PPLA: 1-9
            - BPLB: 1-8
          minimum: 1
          maximum: 9
          example: 2
        text_wrap_max:
          type: integer
          description: Máximo de caracteres por linha para quebra de texto.
          minimum: 1
          maximum: 200
          example: 30
        text_space:
          type: integer
          description: Espaçamento entre linhas.
          minimum: 1
          maximum: 50
          example: 1
        padding_bottom:
          type: number
          format: float
          description: Padding inferior em milímetros.
          minimum: 0
          default: 1
          example: 1
        padding_left:
          type: number
          format: float
          description: Padding esquerdo em milímetros.
          minimum: 0
          default: 1
          example: 1
        text:
          type: string
          description: Texto personalizado (obrigatório quando type=TEXT).
          example: 'Produto:'
        qrcode_size:
          type: number
          format: float
          description: Tamanho do QR Code em milímetros (usado quando type=QRCODE).
          minimum: 0
          default: 10
          example: 10
        reading_img_code:
          type: string
          enum:
            - C39
            - C128
            - EAN8
            - EAN13
          description: >
            Código de leitura para código de barras (obrigatório quando
            type=BARCODE).


            *Aqui há apenas alguns exemplos, para lista completa, consulte a
            tabela de códigos de barras da imagem.*
          example: EAN13
        wide_bar_width:
          type: integer
          description: Largura da barra larga do código de barras.
          minimum: 0
          maximum: 23
          default: 5
          example: 5
        fine_bar_width:
          type: integer
          description: Largura da barra fina do código de barras.
          minimum: 0
          maximum: 23
          default: 2
          example: 2
        height:
          type: number
          format: float
          description: Altura do código de barras em milímetros.
          minimum: 0
          example: 15
        show_code:
          type: boolean
          description: Se deve exibir o código abaixo do código de barras.
          default: true
          example: true
    LabelSheetBody:
      type: object
      description: >-
        Configurações da folha, colunas e linhas para criação/atualização de
        etiqueta
      additionalProperties: false
      required:
        - sheet_width
        - sheet_height
        - margin_left
        - margin_top
        - columns_amount
        - columns_margin
        - rows_amount
        - rows_margin
      properties:
        sheet_width:
          type: number
          format: float
          minimum: 0
          description: Largura da folha em milímetros.
          example: 210
        sheet_height:
          type: number
          format: float
          minimum: 0
          description: Altura da folha em milímetros.
          example: 297
        margin_left:
          type: number
          format: float
          minimum: 0
          description: Margem esquerda da folha em milímetros.
          example: 5
        margin_top:
          type: number
          format: float
          minimum: 0
          description: Margem superior da folha em milímetros.
          example: 5
        columns_amount:
          type: integer
          minimum: 1
          description: Quantidade de colunas na etiqueta.
          example: 3
        columns_margin:
          type: number
          format: float
          minimum: 0
          description: Espaçamento entre colunas em milímetros.
          example: 2
        rows_amount:
          type: integer
          minimum: 1
          description: Quantidade de linhas na etiqueta.
          example: 8
        rows_margin:
          type: number
          format: float
          minimum: 0
          description: Espaçamento entre linhas em milímetros.
          example: 2
    LabelLayoutBody:
      type: object
      description: >-
        Configurações de layout, dimensões, padding e orientação para
        criação/atualização de etiqueta
      additionalProperties: false
      required:
        - label_width
        - label_height
        - padding_top
        - padding_bottom
        - padding_left
        - padding_right
      properties:
        label_width:
          type: number
          format: float
          minimum: 0
          description: Largura de uma etiqueta individual em milímetros.
          example: 70
        label_height:
          type: number
          format: float
          minimum: 0
          description: Altura de uma etiqueta individual em milímetros.
          example: 37
        padding_top:
          type: number
          format: float
          minimum: 0
          description: Padding superior da etiqueta em milímetros.
          example: 1
        padding_bottom:
          type: number
          format: float
          minimum: 0
          description: Padding inferior da etiqueta em milímetros.
          example: 1
        padding_left:
          type: number
          format: float
          minimum: 0
          description: Padding esquerdo da etiqueta em milímetros.
          example: 1
        padding_right:
          type: number
          format: float
          minimum: 0
          description: Padding direito da etiqueta em milímetros.
          example: 1
        orientation:
          type: string
          enum:
            - horizontal
            - vertical
          description: |
            Orientação da etiqueta. Apenas para tipo PPLA.

            - `horizontal`: Horizontal
            - `vertical`: Vertical
          example: horizontal
    LabelFontBody:
      type: object
      description: Configurações de fonte para criação/atualização de etiqueta
      additionalProperties: false
      required:
        - font_family
        - font_size
        - text_align
      properties:
        font_family:
          type: string
          enum:
            - Arial
            - Times
            - Courier
          description: Família da fonte (para PDF).
          example: Arial
        font_size:
          type: integer
          minimum: 4
          maximum: 12
          description: Tamanho da fonte (para PDF).
          example: 8
        text_align:
          type: string
          enum:
            - left
            - center
            - right
          description: Alinhamento do texto (para PDF).
          example: left
    LabelBarcodeBody:
      type: object
      description: >-
        Configurações de código de barras e imagem de leitura para
        criação/atualização de etiqueta
      additionalProperties: false
      required:
        - reading_img_type
      properties:
        reading_img_type:
          type: string
          enum:
            - none
            - barcode
            - qrcode
          description: |
            Tipo de imagem de leitura.

            - `none`: Nenhuma
            - `barcode`: Código de barras
            - `qrcode`: QR Code
          example: barcode
        reading_img_code:
          type: string
          enum:
            - C39
            - C128
            - EAN8
            - EAN13
            - QRCODE
          description: >
            Código de leitura da imagem (obrigatório se reading_img_type não for
            'none').


            *Aqui há apenas alguns exemplos, para lista completa, consulte a
            tabela de códigos de barras da imagem.*
          example: EAN13
    LabelPDFBody:
      type: object
      title: PDF Label
      description: Dados para criação de etiqueta do tipo PDF
      required:
        - type
        - name
        - sheet
        - layout
        - font
        - barcode
      properties:
        type:
          type: string
          enum:
            - PDF
          description: Tipo da etiqueta PDF.
          example: PDF
        name:
          type: string
          maxLength: 255
          description: Nome da etiqueta.
          example: Etiqueta Produtos A4
        code:
          type: string
          maxLength: 100
          description: Código identificador da etiqueta.
          example: ETQ_PDF_001
        label_infos:
          type: array
          minItems: 1
          description: Informações da etiqueta.
          items:
            $ref: '#/components/schemas/LabelInfo'
          example:
            - type: PRODUCT_NAME
              position: 1
            - type: TEXT
              position: 2
              text: Produtos de estoque
        sheet:
          $ref: '#/components/schemas/LabelSheetBody'
          description: Configurações da folha, colunas e linhas.
        layout:
          $ref: '#/components/schemas/LabelLayoutBody'
          description: Configurações de layout e dimensões.
        font:
          $ref: '#/components/schemas/LabelFontBody'
          description: Configurações de fonte (obrigatório para PDF).
        barcode:
          $ref: '#/components/schemas/LabelBarcodeBody'
          description: >-
            Configurações de código de barras e imagem de leitura (obrigatório
            para PDF).
    LabelPPLABody:
      type: object
      title: PPLA Label
      description: Dados para criação de etiqueta do tipo PPLA
      required:
        - type
        - name
        - backfeed
        - label_infos
        - sheet
        - layout
      additionalProperties: false
      properties:
        type:
          type: string
          enum:
            - PPLA
          description: Tipo da etiqueta PPLA.
          example: PPLA
        name:
          type: string
          maxLength: 255
          description: Nome da etiqueta.
          example: Etiqueta PPLA Produtos
        code:
          type: string
          maxLength: 100
          description: Código identificador da etiqueta.
          example: ETQ_PPLA_001
        backfeed:
          type: integer
          minimum: 0
          maximum: 779
          description: Valor de backfeed da impressora (obrigatório para PPLA).
          example: 203
        label_infos:
          type: array
          minItems: 1
          description: Informações da etiqueta (obrigatório para PPLA).
          items:
            $ref: '#/components/schemas/LabelInfo'
          example:
            - type: PRODUCT_NAME
              position: 1
              font_family: 1
              font_size: 2
              text_wrap_max: 30
              text_space: 1
              padding_bottom: 1
              padding_left: 1
            - type: PRODUCT_VALUE
              position: 2
              font_family: 1
              font_size: 3
              text_wrap_max: 20
              text_space: 1
              padding_bottom: 2
              padding_left: 1
        sheet:
          type: object
          description: >-
            Configurações da folha e colunas (apenas colunas são obrigatórias
            para PPLA).
          required:
            - columns_amount
            - columns_margin
          properties:
            columns_amount:
              type: integer
              minimum: 1
              description: Quantidade de colunas na etiqueta.
              example: 2
            columns_margin:
              type: number
              format: float
              minimum: 0
              description: Espaçamento entre colunas em milímetros.
              example: 5
        layout:
          $ref: '#/components/schemas/LabelLayoutBody'
          description: Configurações de layout e dimensões (obrigatório para PPLA).
    LabelBPLBBody:
      type: object
      title: BPLB Label
      description: Dados para criação de etiqueta do tipo BPLB
      required:
        - type
        - name
        - label_infos
        - sheet
        - layout
      additionalProperties: false
      properties:
        type:
          type: string
          enum:
            - BPLB
          description: Tipo da etiqueta BPLB.
          example: BPLB
        name:
          type: string
          maxLength: 255
          description: Nome da etiqueta.
          example: Etiqueta BPLB Produtos
        code:
          type: string
          maxLength: 100
          description: Código identificador da etiqueta.
          example: ETQ_BPLB_001
        label_infos:
          type: array
          minItems: 1
          description: Informações da etiqueta (obrigatório para BPLB).
          items:
            $ref: '#/components/schemas/LabelInfo'
          example:
            - type: PRODUCT_NAME
              position: 1
              font_family: 2
              font_size: 3
              text_wrap_max: 25
              text_space: 1
              padding_bottom: 1.5
              padding_left: 1.5
            - type: BARCODE
              position: 2
              font_family: 1
              font_size: 2
              reading_img_code: EAN13
              wide_bar_width: 5
              fine_bar_width: 2
              height: 15
              show_code: true
              padding_bottom: 2
              padding_left: 1
        sheet:
          type: object
          description: Configurações da folha, colunas e linhas (obrigatório para BPLB).
          required:
            - sheet_width
            - columns_amount
            - columns_margin
            - rows_margin
          properties:
            sheet_width:
              type: number
              format: float
              minimum: 0
              description: Largura da folha em milímetros (obrigatório para BPLB).
              example: 100
            columns_amount:
              type: integer
              minimum: 1
              description: Quantidade de colunas na etiqueta.
              example: 1
            columns_margin:
              type: number
              format: float
              minimum: 0
              description: Espaçamento entre colunas em milímetros.
              example: 0
            rows_margin:
              type: number
              format: float
              minimum: 0
              description: Espaçamento entre linhas em milímetros (obrigatório para BPLB).
              example: 2
        layout:
          $ref: '#/components/schemas/LabelLayoutBody'
          description: Configurações de layout e dimensões (obrigatório para BPLB).
    LabelSheet:
      type: object
      description: Configurações da folha, colunas e linhas da etiqueta
      additionalProperties: false
      properties:
        sheet_width:
          type: number
          format: float
          description: Largura da folha em milímetros.
          example: 210
        sheet_height:
          type: number
          format: float
          description: Altura da folha em milímetros.
          example: 297
        margin_left:
          type: number
          format: float
          description: Margem esquerda da folha em milímetros.
          example: 5
        margin_top:
          type: number
          format: float
          description: Margem superior da folha em milímetros.
          example: 5
        columns_amount:
          type: integer
          description: Quantidade de colunas na etiqueta.
          example: 3
        columns_margin:
          type: number
          format: float
          description: Espaçamento entre colunas em milímetros.
          example: 2
        rows_amount:
          type: integer
          description: Quantidade de linhas na etiqueta.
          example: 8
        rows_margin:
          type: number
          format: float
          description: Espaçamento entre linhas em milímetros.
          example: 2
    LabelLayout:
      type: object
      description: Configurações de layout, dimensões, padding e orientação da etiqueta
      additionalProperties: false
      properties:
        label_width:
          type: number
          format: float
          description: Largura de uma etiqueta individual em milímetros.
          example: 70
        label_height:
          type: number
          format: float
          description: Altura de uma etiqueta individual em milímetros.
          example: 37
        padding_top:
          type: number
          format: float
          description: Padding superior da etiqueta em milímetros.
          example: 1
        padding_bottom:
          type: number
          format: float
          description: Padding inferior da etiqueta em milímetros.
          example: 1
        padding_left:
          type: number
          format: float
          description: Padding esquerdo da etiqueta em milímetros.
          example: 1
        padding_right:
          type: number
          format: float
          description: Padding direito da etiqueta em milímetros.
          example: 1
        orientation:
          type: string
          enum:
            - horizontal
            - vertical
          description: |
            Orientação da etiqueta.

            - `horizontal`: Horizontal
            - `vertical`: Vertical
          example: horizontal
    LabelFont:
      type: object
      description: Configurações de fonte da etiqueta
      additionalProperties: false
      properties:
        font_family:
          type: string
          enum:
            - Arial
            - Times
            - Courier
          description: Família da fonte.
          example: Arial
        font_size:
          type: integer
          minimum: 4
          maximum: 12
          description: Tamanho da fonte.
          example: 8
        text_align:
          type: string
          enum:
            - left
            - center
            - right
          description: Alinhamento do texto.
          example: left
    LabelBarcode:
      type: object
      description: Configurações de código de barras e imagem de leitura da etiqueta
      additionalProperties: false
      properties:
        reading_img_type:
          type: string
          enum:
            - none
            - barcode
            - qrcode
          description: |
            Tipo de imagem de leitura.

            - `none`: Nenhuma
            - `barcode`: Código de barras
            - `qrcode`: QR Code
          example: none
        reading_img_code:
          type: string
          enum:
            - C39
            - C128
            - EAN8
            - EAN13
            - QRCODE
          description: >
            Código de leitura da imagem (obrigatório se reading_img_type não for
            'none').


            *Aqui há apenas alguns exemplos, para lista completa, consulte a
            tabela de códigos de barras da imagem.*
          example: EAN13
    Label:
      type: object
      description: Representa uma etiqueta de impressão completa
      properties:
        id:
          type: integer
          description: Identificador único da etiqueta.
          readOnly: true
          example: 123
        type:
          type: string
          enum:
            - PDF
            - PPLA
            - BPLB
          description: |
            Tipo da etiqueta.

            - `PDF`: Etiqueta em formato PDF
            - `PPLA`: Etiqueta em formato PPLA (Argox)
            - `BPLB`: Etiqueta em formato BPLB (Elgin)
          example: PDF
        name:
          type: string
          description: Nome da etiqueta.
          example: Etiqueta Produtos
        code:
          type: string
          description: Código identificador da etiqueta.
          example: ETQ001
        backfeed:
          type: integer
          description: Valor de backfeed (para PPLA).
          example: 203
        label_infos:
          type: array
          description: Informações da etiqueta (para tipos PPLA e BPLB).
          items:
            $ref: '#/components/schemas/LabelInfo'
        sheet:
          $ref: '#/components/schemas/LabelSheet'
        layout:
          $ref: '#/components/schemas/LabelLayout'
        font:
          $ref: '#/components/schemas/LabelFont'
        barcode:
          $ref: '#/components/schemas/LabelBarcode'
    LabelPrintPPLA:
      type: object
      description: Dados preparados para impressão de etiquetas PPLA
      properties:
        backfeed:
          type: integer
          description: Valor de backfeed para ajuste de posicionamento da etiqueta.
          example: 3
        content:
          type: string
          description: Conteúdo formatado da etiqueta em linguagem PPLA.
          example: ^XA^FO50,50^FDTexto da etiqueta^FS^XZ
        error:
          type: boolean
          description: Retorna `true` caso ocorra algum problema na geração.
          example: false
        label_height:
          type: number
          format: float
          description: Altura da etiqueta em milímetros.
          example: 25.4
    LabelPrintBPLB:
      type: object
      description: Dados preparados para impressão de etiquetas BPLB
      properties:
        content:
          type: string
          description: Conteúdo formatado da etiqueta em linguagem BPLB.
          example: |-
            SIZE 58,25
            GAP 3,0
            DIRECTION 1
            CLS
            TEXT 50,50,"3",0,1,1,"Texto da etiqueta"
            PRINT 1
        error:
          type: boolean
          description: Retorna `true` caso ocorra algum problema na geração.
          example: false
        label_height:
          type: number
          format: float
          description: Altura da etiqueta em milímetros.
          example: 25.4
        rows_margin:
          type: number
          format: float
          description: Margem entre linhas de etiquetas em milímetros.
          example: 3
        sheet_width:
          type: number
          format: float
          description: Largura da folha em milímetros.
          example: 58
    LabelPrint:
      type: object
      description: Dados preparados para impressão de etiquetas (PPLA ou BPLB)
      properties:
        type:
          type: string
          enum:
            - PPLA
            - BPLB
          description: |
            Tipo da etiqueta.

            - `PPLA`: Etiqueta em formato PPLA (linguagem de impressora).
            - `BPLB`: Etiqueta em formato BPLB (linguagem de impressora).
          example: PPLA
        settings:
          type: object
          description: Configurações específicas do tipo de etiqueta para impressão.
          oneOf:
            - $ref: '#/components/schemas/LabelPrintPPLA'
            - $ref: '#/components/schemas/LabelPrintBPLB'
    ErpSettingsNews:
      type: object
      title: Configurações da novidade
      description: Representa uma configuração da novidade.
      properties:
        is_enabled:
          type: boolean
          description: Habilita ou desabilita o recebimento das novidades da ConnectPlug.
          example: true
      required:
        - is_enabled
    ErpSettingsConsumptionSheet:
      type: object
      title: Configurações da ficha de consumo
      description: Representa as configurações da ficha de consumo.
      properties:
        is_enabled:
          type: boolean
          description: Habilita ou desabilita as fichas de consumo de produtos.
          example: true
        expiration_settings:
          type: object
          title: Configuração geral de validade das fichas
          description: >
            Representa as configurações gerais de validade das fichas. 

            Configuração geral da validades das fichas de consumo. A validade é
            dada da soma do período 

            configurado aqui com a data da venda do produto.


            Este campo dever ser enviado caso as fichas de consumo esteja
            habilitado
          properties:
            period_unit:
              type: string
              enum:
                - no_expiration
                - months
                - days
                - hours
                - minutes
              description: |
                Tipo da unidade:

                - `no_expiration` sem validade
                - `months` meses
                - `days` dias
                - `hours` horas
                - `minutes` minutos
              example: days
            amount:
              type: integer
              description: Quantidade.
              example: 15
          required:
            - period_unit
            - amount
      required:
        - is_enabled
    ErpSettingsUserSession:
      type: object
      title: Configurações da sessão do usuário
      description: Representa uma configuração da sessão do usuário.
      properties:
        allow_simultaneous_access:
          type: boolean
          description: >
            Habilita ou desabilita o acessos simultâneos do mesmo usuário.


            Se essa opção estiver habilitada cada usuário só pode acessar em um
            lugar por vez.


            Exemplo: Se um usuário já estiver acessando pelo Computador A e
            tentar acessar pelo Computador B,

            automaticamente o usuário será deslogado do Computador A.
          example: false
      required:
        - allow_simultaneous_access
    ErpSettingsProductCategory:
      type: object
      title: Configurações da categoria do produto
      description: Representa uma configuração da categoria do produto.
      properties:
        is_required_select_product_category:
          type: boolean
          description: >-
            Habilita ou desabilita a obrigação de selecionar uma categoria no
            cadastro de produtos.
          example: true
      required:
        - is_required_select_product_category
    ErpSettingsStock:
      type: object
      title: Configurações do estoque
      description: Representa uma configuração do estoque.
      properties:
        allow_product_value_changes:
          type: boolean
          description: >
            Habilita ou desabilita a Possibilidade de alteração do valor de
            venda do 

            produto no registro de movimentações de entrada e compra.
          example: true
        recount_settings:
          type: object
          title: Configurações da conferência de estoque
          description: Representa uma configuração da conferência de estoque.
          properties:
            is_restrict_entry_nfe:
              type: boolean
              description: >
                Habilita ou desabilita a conferência da NF-e de entrada
                restrita.


                Na conferência restrita, ao realizar os lançamentos
                correspondentes à nota fiscal, 

                observa-se a ausência de exibição de determinados itens. Somente
                são apresentados os 

                elementos para os quais a leitura foi efetivamente realizada.
              example: true
            is_partial_entry_nfe:
              type: boolean
              description: >
                Habilita ou desabilita a entrada parcial na NF-e de entrada.


                Permite realizar a entrada do estoque do item da nota fiscal sem
                a necessidade de finalizar a nota.
              example: true
            can_edit_recounted_item:
              type: boolean
              description: >
                Habilita ou desabilita a edição da quantidade de item conferido.


                Permite a edição da quantidade de um item já conferido da nota
                fiscal.
              example: true
              default: false
            limit_barcode_length:
              type: integer
              description: >
                Quantidade máxima de caracteres identificado no código de
                barras.


                Solicita-se a definição da quantidade desejada de caracteres
                para a leitura do código de 

                barras durante o processo de conferência. Por exemplo, ao
                inserir o código 123456789012300000 e 

                especificar uma leitura de 13 caracteres, a busca será realizada
                com base apenas nos primeiros 

                13 dígitos (1234567890123). Se o valor for definido como zero,
                essa regra será ignorada.
              minimum: 0
              maximum: 99
              example: 8
            show_nfe_product_amount:
              type: boolean
              description: >
                Habilita ou desabilita a exibição da quantidade dos produtos na
                nota.


                Disponível apenas no modo leitura rápida.
              example: true
            recount_mode:
              type: string
              enum:
                - both
                - qty_in_nfe
                - qty_separate
              description: >
                Modo de conferência de produto


                - `both` ambos

                - `qty_in_nfe` Quantidade na NF-e

                - `qty_separate` Quantidade avulsa: Quantidade da NF-e * fator
                de conversão.
              example: both
            damage_record_mode:
              type: string
              enum:
                - both
                - qty_in_nfe
                - qty_separate
              description: >
                Modo de registro de avaria


                - `both` ambos

                - `qty_in_nfe` Quantidade na NF-e

                - `qty_separate` Quantidade avulsa: Quantidade da NF-e * fator
                de conversão.
              example: both
          required:
            - is_restrict_entry_nfe
            - is_partial_entry_nfe
            - limit_barcode_length
            - show_nfe_product_amount
      required:
        - allow_product_value_changes
        - recount_settings
    ErpSettingsSupplier:
      type: object
      title: Configurações do fornecedor
      description: >
        Representa uma configuração do fornecedor.


        `Atenção`: Esta configuração só pode ser enviada caso o usuário possuir
        mais de uma empresa, nesse caso, é obrigatório.
      properties:
        enable_new_suppliers_for_all_companies:
          type: boolean
          description: >-
            Define se deve disponibilizar os novos fornecedores cadastrados na
            empresa atual para todas as empresas.
          example: true
        company_ids:
          type: array
          description: >
            Lista de IDs das empresas associadas à configuração do fornecedor.


            **Obs**: Campo obrigatório quando
            enable_new_suppliers_for_all_companies = false.
          items:
            type: integer
          example:
            - 1
            - 2
            - 3
          writeOnly: true
        companies:
          type: array
          description: Lista de empresas associadas à configuração do fornecedor.
          items:
            $ref: '#/components/schemas/RelationCompany'
          readOnly: true
      required:
        - enable_new_suppliers_for_all_companies
    ErpSettingsCarrier:
      type: object
      title: Configurações do fornecedor
      description: >
        Representa uma configuração do fornecedor.


        `Atenção`: Esta configuração só pode ser enviada caso o usuário possuir
        mais de uma empresa, nesse caso, é obrigatório.
      properties:
        enable_new_carriers_for_all_companies:
          type: boolean
          description: >-
            Define se deve disponibilizar as novas transportadoras cadastradas
            na empresa atual para todas as empresas.
          example: true
      required:
        - enable_new_carriers_for_all_companies
    ErpSettingsCustomer:
      type: object
      title: Configurações de clientes
      description: Representa uma configuração de clientes.
      properties:
        required_fields_to_register:
          type: object
          title: Configurações dos campos obrigatório no cadastro de cliente/empresas
          description: >-
            Representa uma configuração dos campos obrigatório no cadastro de
            cliente/empresas.
          properties:
            company:
              type: array
              description: |
                Tipo de campos obrigatórios da empresa

                - `address`: Endereço
                - `birthday`: Data de Nascimento
                - `customer_category_id`: Categoria
                - `email`: E-mail
                - `identifier`: Identificador
                - `ie`: Inscrição Estadual
                - `cnpj`: CNPJ
                - `company_name`: Razão Social
                - `main_phone`: Telefone Comercial
                - `mobile_phone`: Telefone Celular
              items:
                type: string
                enum:
                  - address
                  - birthday
                  - customer_category_id
                  - email
                  - identifier
                  - ie
                  - cnpj
                  - company_name
                  - main_phone
                  - mobile_phone
                example: cnpj
            customer:
              type: array
              description: |
                Tipo de campos obrigatórios do cliente

                - `address`: Endereço
                - `birthday`: Data de Nascimento
                - `cpf`: CPF
                - `customer_category_id`: Categoria
                - `email`: E-mail
                - `gender`: Gênero
                - `identifier`: Identificador
                - `main_phone`: Telefone Comercial
                - `mobile_phone`: Telefone Celular
                - `rg`: RG
              items:
                type: string
                enum:
                  - address
                  - birthday
                  - cpf
                  - customer_category_id
                  - email
                  - gender
                  - identifier
                  - main_phone
                  - mobile_phone
                  - rg
                example: cpf
        is_allowed_provide_new_customer_for_all_companies:
          type: boolean
          description: >-
            Define se deve disponibilizar os novos clientes cadastrados na
            empresa atual para todas as empresas.
          example: true
        company_ids:
          type: array
          description: Lista de IDs das empresas associadas à configuração.
          items:
            type: integer
          example:
            - 1
            - 2
            - 3
          writeOnly: true
        companies:
          type: array
          description: Lista de empresas associadas à configuração.
          items:
            $ref: '#/components/schemas/RelationCompany'
          readOnly: true
        is_enabled_notify_sync_customer:
          type: boolean
          description: >
            Notificar os servidores ao cadastrar/atualizar os clientes no PDV
            2.0


            Ao marcar sempre que houver uma atualização no Cliente será enviado
            uma atualização para o servidor das empresas selecionadas no
            compartilhamento.
          example: true
    ErpSettingsIntegration:
      type: object
      title: Configurações da novidade
      description: Representa uma configuração da novidade.
      properties:
        is_allowed_system_generate_secure_integration_key:
          type: boolean
          description: >
            Permitir que o sistema gere uma chave de integração mais segura


            Se essa opção estiver habilitada a chave de integração será alterada
            para um modelo mais seguro nas exportações.


            **Atenção: Muito cuidado ao habilitar essa configuração, pois caso
            possua produtos integrados com a chave antiga o sistema ira perder
            referência e cadastrar um novo produto na integração!**


            Entre em contato com o suporte antes de realizar a alteração
          example: true
      required:
        - is_allowed_system_generate_secure_integration_key
    ErpSettings:
      type: object
      title: Configurações do ERP
      description: Representa uma configurações do ERP.
      properties:
        news:
          $ref: '#/components/schemas/ErpSettingsNews'
        consumption_sheet:
          $ref: '#/components/schemas/ErpSettingsConsumptionSheet'
        user_session:
          $ref: '#/components/schemas/ErpSettingsUserSession'
        product_category:
          $ref: '#/components/schemas/ErpSettingsProductCategory'
        stock:
          $ref: '#/components/schemas/ErpSettingsStock'
        supplier:
          $ref: '#/components/schemas/ErpSettingsSupplier'
        carrier:
          $ref: '#/components/schemas/ErpSettingsCarrier'
        customer:
          $ref: '#/components/schemas/ErpSettingsCustomer'
        integration:
          $ref: '#/components/schemas/ErpSettingsIntegration'
      required:
        - news
        - consumption_sheet
        - user_session
        - product_category
        - stock
        - customer
        - integration
    PosSettingStock:
      type: object
      title: Configurações gerais do estoques
      description: Representa as configurações gerais do estoque.
      properties:
        is_allowed_notify_negative_stock:
          type: boolean
          description: Notificações de estoque negativo.
          example: true
        is_allowed_block_sale_zero_or_negative_stock:
          type: boolean
          description: Bloqueia a venda de itens com estoque zero ou negativo.
          example: true
    PosSettingSecurity:
      type: object
      title: Configurações gerais de segurança
      description: Representa as configurações gerais de segurança.
      properties:
        cancellation:
          type: object
          title: Configuração de cancelamento
          description: Representa as configurações de cancelamento.
          properties:
            is_password_required:
              type: boolean
              description: Requer senha para o cancelamento.
              example: true
        abandonment:
          type: object
          title: Configuração de abandono
          description: Representa as configurações de abandono.
          properties:
            is_password_required:
              type: boolean
              description: Requer senha para o cancelamento.
              example: true
            is_enabled_to_record:
              type: boolean
              description: Permite gravar abandono de venda no relatório.
              example: true
            is_reason_required:
              type: boolean
              description: Permite exigir motivo de abandono de venda.
              example: true
        password:
          type: string
          description: >
            Senha para cancelamento de venda ou abandono de venda ou abertura de
            gaveta.
          minLength: 1
          maxLength: 30
          example: '123456'
    PosSettingCustomerCredit:
      type: object
      title: Configurações do crédito de cliente
      description: Representa as configurações do crédito de cliente.
      properties:
        is_allowed_credit:
          type: boolean
          description: Permite o uso de crédito de clientes.
          example: true
        is_allowed_negative_credit:
          type: boolean
          description: Permite crédito negativo para clientes.
          example: true
        is_allowed_print_customer_credit_coupon:
          type: boolean
          description: Imprimir cupom ao adicionar/remover crédito de cliente.
          example: true
    PosSettingCashClosing:
      type: object
      title: Configurações do fechamento de caixa
      description: Representa as configurações do fechamento de caixa.
      properties:
        transfer_auto:
          type: object
          title: Configurações de transferência automática ao fechar.
          description: Representa as configurações de transferência automática ao fechar.
          properties:
            is_enabled:
              type: boolean
              description: Ativa transferência automática ao fechar.
              example: true
            bank_account_id:
              writeOnly: true
              type: integer
              description: >
                Identificador único da conta bancária


                Você pode localizar os IDs das contas bancária no _endpoint_ de
                [lista de conta
                bancária](#tag/BankAccounts/operation/get-bank-accounts).
              example: 1
            bank_account:
              readOnly: true
              description: Conta bancária.
              $ref: '#/components/schemas/BankAccount'
            min_value_in_cash:
              description: Valor que deve permanecer no caixa.
              $ref: '#/components/schemas/Money'
        is_approval_required:
          type: boolean
          description: Exige aprovação para fechamento.
          example: true
        is_allowed_auto_print_cash_closing_report:
          type: boolean
          description: Imprimir fechamento de caixa automaticamente.
          example: true
    PosSettingDiscount:
      type: object
      title: Configurações de desconto
      description: Representa as configurações de desconto.
      properties:
        is_enabled:
          type: boolean
          description: Permite descontos no PDV.
          example: true
        type:
          type: string
          enum:
            - fixed
            - open
          description: |
            Define o tipo de desconto.:

            - `fixed`: Desconto fixo
            - `open`: Desconto aberto para alteração
          example: open
        value_type:
          type: string
          enum:
            - monetary
            - percent
          description: |
            Tipo de valor de desconto:

            - `monetary`: Desconto em valor
            - `percent`: Desconto em porcentagem
          example: percent
        is_password_required:
          type: boolean
          description: Requisitar usuário/senha de gerente para desconto.
          example: true
        max_value:
          type: object
          title: Representa as configurações do valor do desconto máximo
          description: Representa as configurações do valor do desconto máximo.
          properties:
            is_enabled:
              type: boolean
              description: Habilita valor máximo.
              example: true
            sales:
              type: number
              description: >-
                Valor máximo na Venda, podendo ser em porcentagem ou valor
                absoluto, de acordo com o campo **value_type**.
              example: 10.5
            product:
              type: number
              description: >-
                Valor máximo no Produto, podendo ser em porcentagem ou valor
                absoluto, de acordo com o campo **value_type**.
              example: 11.5
    PosSettingSale:
      type: object
      title: Configurações de venda
      description: Representa as configurações de venda.
      properties:
        is_allowed_show_customers_latest_sales:
          type: boolean
          description: Mostra as últimas vendas dos clientes.
          example: true
        is_card_auth_required:
          type: boolean
          description: Exige autenticação de cartão para vendas.
          example: true
        is_seller_first_required:
          type: boolean
          description: Exige identificação do vendedor antes da venda.
          example: true
        qty_last_sales_to_show:
          type: integer
          description: Define a quantidade de vendas passadas a serem exibidas.
          example: 50
        is_allowed_to_edit_product_value:
          type: boolean
          description: Permite a edição de valores de produtos.
          example: true
        additional_information:
          type: string
          description: Informações adicionais no relatório de gerencial.
          example: mais informações
        is_allowed_edit_amount:
          type: boolean
          description: Permitir edição de quantidade de produtos na venda.
          example: true
        is_allowed_open_attendance_in_cashier:
          type: boolean
          description: Permitir abrir comanda ao iniciar venda balcão.
          example: true
        is_require_customer_name:
          type: boolean
          description: Exigir nome do cliente ao finalizar a venda.
          example: true
        is_allowed_bind_customer_to_sale_by_cpf:
          type: boolean
          description: Vincular cliente à venda atual ao adicionar CPF na nota.
          example: true
        is_allowed_service_fee_for_cashier_sales:
          type: boolean
          description: Utilizar taxa de serviço para vendas no balcão.
          example: true
        is_allowed_use_barcode_generated_by_scale:
          type: boolean
          description: Utilizar código de barras gerado pela balança.
          example: true
        is_allowed_use_default_city_uf:
          type: boolean
          description: |
            Utilizar cidade e UF padrão para venda.

            Ao cadastrar um cliente usar Cidade e UF da empresa como padrão!
          example: true
    PosSettingPickUp:
      type: object
      title: Configurações de sangria ou de reforço
      description: Representa as configurações de sangria ou de reforço.
      properties:
        is_enabled:
          type: boolean
          description: Habilita o recurso de sangria ou reforço de caixa.
          example: true
        value:
          description: Valor de alerta de sangria ou bloqueio do PDV.
          $ref: '#/components/schemas/Money'
        is_allowed_block_pdv:
          type: boolean
          description: Bloquear PDV ao atingir valor máximo de dinheiro no caixa.
          example: true
        is_allowed_print_receipt:
          type: boolean
          description: Impressão automática de sangria em cada realização.
          example: true
    PosSettingCashDrawer:
      type: object
      title: Configurações da gaveta de dinheiro
      description: Representa as configurações da gaveta de dinheiro.
      properties:
        is_password_required_to_open:
          type: boolean
          description: Exige senha para abrir a gaveta.
          example: true
        auto_open_type:
          type: string
          enum:
            - all
            - only_cash_payment
          description: >
            Tipo de abertura automática:


            - `all`: Ao finalizar uma venda (qualquer método de pagamento)

            - `only_cash_payment`: Ao finalizar uma venda com método de
            pagamento igual a dinheiro
          example: all
        is_enabled_open_drawer_button:
          type: boolean
          description: Habilita o botão de abertura da gaveta.
          example: true
        when_auto_open:
          type: array
          description: Quando abrir automaticamente
          items:
            type: string
            enum:
              - pick_up
              - customer_credit
              - customer_billing
            description: |
              Abrir quando:

              - `pick_up`: Na Sangria/Reforço de caixa
              - `customer_credit`: Ao incluir/debitar Crédito de Clientes
              - `customer_billing`: Ao receber um faturamento de cliente
            example: pick_up
          example:
            - pick_up
            - customer_credit
    FontSize:
      type: string
      enum:
        - small
        - medium
        - large
      example: medium
    PosSettingPrint:
      type: object
      title: Configurações gerais de impressão
      description: Representa as configurações gerais de impressão.
      properties:
        is_allowed_auto_print_danfe_ce:
          type: boolean
          description: Impressão automática de NFCE-e/CF-e.
          example: true
        is_allowed_print_company_info_on_header:
          type: boolean
          description: Imprimir as informações da empresa no cabeçalho.
          example: true
        is_allowed_print_sales_number_invoice:
          type: boolean
          description: Imprimir o número da venda na nota fiscal.
          example: true
        fractional_printing_type:
          type: string
          enum:
            - fractioned
            - grouped
            - dynamic
          description: >
            Tipo de impressão fracionada:


            - `fractioned`: Imprimir atributos múltiplos de forma fracionada

            - `grouped`: Imprimir atributos múltiplos de forma agrupada

            - `dynamic`: Imprimir atributos múltiplos dependendo da configuração
            do atributo
          example: grouped
        is_allowed_auto_print_at_closing_sale:
          type: boolean
          description: Impressão automática no fechamento de vendas.
          example: true
        report_font_size:
          $ref: '#/components/schemas/FontSize'
          description: Tamanho da letra na impressão do relatório gerencial.
    PosSettingReturnExchange:
      type: object
      title: Configurações relacionadas à devolução e troca de produtos
      description: >-
        Representa as configurações relacionadas à devolução e troca de
        produtos.
      properties:
        is_allowed_return:
          type: boolean
          description: Permite devolução de produtos.
          example: true
        is_allowed_exchange:
          type: boolean
          description: Permite troca de produtos.
          example: true
        coupon:
          type: object
          title: Representa as configurações do cupom de troca.
          description: >
            Representa as configurações do cupom de troca. 


            Não enviar este campo quando os campos `is_allowed_return` = `false`
            e `is_allowed_exchange` = `false`.
          properties:
            is_allowed_auto_print:
              type: boolean
              description: Permite imprimir automaticamente a cada venda.
              example: true
            is_allowed_print_per_product:
              type: boolean
              description: Permite imprimir um cupom por produto.
              example: true
            notes:
              type: string
              maximum: 355
              description: Informação adicional do rodapé do Cupom de Troca.
              example: Não aceita produto sem a embalagem original
        is_allowed_auto_print_returning_receipt:
          type: boolean
          description: >
            Permite a impressão automática de comprovante de devolução.


            Não enviar este campo quando os campos `is_allowed_return` = `false`
            e `is_allowed_exchange` = `false`.
          example: true
        is_allowed_auto_issue_returning_invoice:
          type: boolean
          description: >
            Emitir automaticamente a nota da devolução.


            Não enviar este campo quando os campos `is_allowed_return` = `false`
            e `is_allowed_exchange` = `false`.
          example: true
    PosSettingInstallmentPlan:
      type: object
      title: Configurações do crediário
      description: Representa uma configurações do crediário.
      properties:
        is_enabled:
          type: boolean
          description: Habilita ou desabilita o crediário.
          example: true
        settings:
          type: object
          title: Configurações do crediário
          description: >-
            Representa uma configurações do crediário. Este campo dever ser
            enviado quando o crediário está habilitado.
          properties:
            customer_has_limit:
              type: boolean
              description: >
                Habilita ou desabilita limite para o cliente. 

                Ao selecionar essa opção, será disponibilizada uma nova área no
                cadastro do cliente, permitindo a configuração de um 

                limite de crédito para o método de pagamento **faturamento**.
              example: true
            limit_settings:
              type: object
              title: Configurações do limite de credito
              description: >-
                Representa uma configurações do crediário. Este campo dever ser
                enviado quando o crediário está habilitado.
              properties:
                credit_limit:
                  description: Limite de crediário padrão.
                  $ref: '#/components/schemas/Money'
                standard_max_installments:
                  type: integer
                  description: Limite de número de parcelas padrão.
                  minimum: 0
                  maximum: 72
                  example: 15
          required:
            - customer_has_limit
        is_print_coupon_allowed:
          type: boolean
          description: Permite a impressão de cupons de crediário.
          example: true
        carne_settings:
          type: object
          title: Configurações do crediário
          description: >-
            Representa uma configurações do crediário. Este campo dever ser
            enviado quando o crediário está habilitado.
          properties:
            late_fee_value:
              type: number
              description: Porcentagem da multa de atraso.
              example: 1.2
            interest:
              type: number
              description: Porcentagem de juros.
              example: 3.5
            description:
              type: string
              description: Texto que vai aparecer no carne ao ser impresso.
              example: Crediário com multa de atraso e juros
            charge_from:
              type: integer
              description: Número de dias para aplicar a multa de atraso e juros.
              example: 1
      required:
        - is_enabled
    PrinterSummary:
      type: object
      description: Dados da impressora.
      properties:
        id:
          type: integer
          description: Identificador único da impressora
          example: 1234
        name:
          type: string
          description: Nome da impressora.
          example: Cozinha
        model:
          type: string
          description: Modelo da impressora.
          example: Epson TM-20
    PosSettingConsigned:
      type: object
      title: Configurações relacionadas ao módulo de consignado.
      description: Representa as configurações relacionadas ao módulo de consignado.
      properties:
        is_enabled:
          type: boolean
          description: Habilita o módulo de consignado.
          example: true
        print:
          type: object
          title: Configurações de impressão
          description: Representa as configurações de impressão.
          properties:
            is_allowed_auto_print_proof_when_closing_order:
              type: boolean
              description: >-
                Permite imprimir automaticamente comprovante ao finalizar uma
                Ordem.
              example: true
            default_message:
              type: string
              description: Mensagem padrão da impressão.
              example: Mensagem padrão
            printer_id:
              type: integer
              description: >-
                Identificador único da impressora. Permite impressão do Pedido
                de Consignado (A4).
              example: 1
              writeOnly: true
            printer:
              description: Impressora.
              $ref: '#/components/schemas/PrinterSummary'
              readOnly: true
        qty_day_to_return:
          type: integer
          description: Define a quantidade de dias para devolução de consignados.
          example: 7
    PosSettingDelivery:
      type: object
      title: Configurações relacionadas a entregas
      description: Representa as configurações relacionadas a entregas.
      properties:
        is_enabled:
          type: boolean
          description: Habilita o módulo de delivery.
          example: true
        time_limits:
          type: object
          title: Configurações do limites de tempo produção e entrega
          description: Representa as configurações do limites de tempo produção e entrega.
          properties:
            qty_minutes_before_start_delivery:
              type: integer
              description: Quantidade em minutos para início da entrega.
              example: 5
            qty_minutes_to_close_delivery:
              type: integer
              description: Quantidade em minutos para finalização da venda delivery.
              example: 10
            qty_minutes_to_takeaway:
              type: integer
              description: Quantidade em minutos para finalização da venda para retirada.
              example: 15
        is_allowed_separate_sales_numbering:
          type: boolean
          description: Numeração de venda separada entre vendas delivery e vendas balcão.
          example: true
        notes_setting:
          type: object
          title: Configurações relacionadas a notas de entrega.
          description: Representa as configurações relacionadas a notas de entrega..
          properties:
            is_enabled:
              type: boolean
              description: Permite habilitar observações para clientes.
              example: true
            is_enabled_notes_before_close_sale:
              type: boolean
              description: >-
                Permite habilitar observações do Delivery antes de finalizar a
                venda.
              example: true
        delivery_area:
          type: object
          title: Configurações da área de entrega padrão
          description: Representa as configurações da taxa de entrega padrão.
          required:
            - delivery_price_type
          properties:
            delivery_price_type:
              type: string
              enum:
                - fixed
                - neighborhood
              description: |
                Tipo de taxa de entrega.
                - `fixed`: Taxa fixa
                - `neighborhood`: Taxa por bairro
              example: fixed
            price:
              description: >
                Valor da taxa de entrega fixa.


                **Importante:** Este campo é obrigatório quando o
                `delivery_price_type` = `fixed` e proibido caso contrário.
              $ref: '#/components/schemas/Money'
            charge_type_when_not_configured:
              description: >
                Tipo de cobrança quando não existir taxa configurada para o
                bairro.


                - `custom`: Customizado

                - `greater_value`: Maior valor


                **Importante:** Este campo é obrigatório quando o
                `delivery_price_type` = `neighborhood` e proibido caso
                contrário.
              type: string
              enum:
                - custom
                - greater_value
              example: custom
            custom_rate:
              description: >
                Valor personalizado.


                **Importante:** Este campo é obrigatório quando o
                `charge_type_when_not_configured` = `custom` e proibido caso
                contrário.
              $ref: '#/components/schemas/Money'
        panel:
          type: object
          title: Configurações do painel de delivery
          description: Representa as configurações do painel de delivery.
          properties:
            qty_days:
              type: integer
              description: Limite de dias para exibição de vendas delivery.
              example: 3
            qty_hours_before_scheduled_orders:
              type: integer
              description: Aviso de Impressão de Pedidos Agendados (horas).
              example: 3
        default_ddd:
          type: integer
          description: DDD que será preenchido automaticamente no delivery.
          example: 41
        is_carrier_required:
          type: boolean
          description: >
            Exigir seleção de entregador ao mover pedido para status de "Em
            entrega"


            Ao mover o pedido para o status "Saiu para entrega", exige
            selecionar um entregador
          example: true
        is_enable_option_complete_sale_after_delivery:
          type: boolean
          description: Habilita a opção de finalizar a venda após a entrega.
          example: true
    PosSetting:
      type: object
      title: Configurações gerais do terminal
      description: Representa as configurações gerais do terminal.
      properties:
        stock:
          description: Configurações gerais do estoque.
          $ref: '#/components/schemas/PosSettingStock'
        security:
          description: Configurações gerais de segurança.
          $ref: '#/components/schemas/PosSettingSecurity'
        customer_credit:
          description: Configurações do crédito de cliente.
          $ref: '#/components/schemas/PosSettingCustomerCredit'
        cash_closing:
          description: Configurações do fechamento de caixa.
          $ref: '#/components/schemas/PosSettingCashClosing'
        discount:
          description: Configurações de desconto.
          $ref: '#/components/schemas/PosSettingDiscount'
        sale:
          description: Configurações de venda.
          $ref: '#/components/schemas/PosSettingSale'
        pick_up:
          description: Configurações de sangria ou de reforço.
          $ref: '#/components/schemas/PosSettingPickUp'
        cash_drawer:
          description: Configurações da gaveta de dinheiro.
          $ref: '#/components/schemas/PosSettingCashDrawer'
        print:
          description: Configurações gerais de impressão.
          $ref: '#/components/schemas/PosSettingPrint'
        return_exchange:
          description: Configurações relacionadas à devolução e troca de produtos.
          $ref: '#/components/schemas/PosSettingReturnExchange'
        installment_plan:
          description: Configurações do módulo de crediário.
          $ref: '#/components/schemas/PosSettingInstallmentPlan'
        consigned:
          description: Configurações relacionadas ao módulo de consignado.
          $ref: '#/components/schemas/PosSettingConsigned'
        delivery:
          description: Configurações relacionadas a entregas.
          $ref: '#/components/schemas/PosSettingDelivery'
    ConfigPeripheralSlim:
      type: object
      description: Dados da impressora ou balança.
      properties:
        id:
          type: integer
          description: Identificador único da impressora ou balança.
          example: 1234
        name:
          type: string
          description: Nome da impressora ou balança.
          example: Cozinha
        device_name:
          type: string
          description: Nome do dispositivo.
          example: Epson TM-20
    ServiceSettingsService:
      type: object
      title: Configurações gerais de atendimento e pré-venda
      description: Representa as configurações gerais de atendimento e pré-venda.
      properties:
        is_enabled:
          type: boolean
          description: Habilita o atendimento e Pré-venda.
          example: true
        is_allowed_use_barcode_in_service:
          type: boolean
          description: Permite usar código de barras no atendimento.
          example: true
        waiter_selection_mode:
          type: string
          enum:
            - keyboard
            - listing
          description: |
            Define o modo de seleção de garçom:

            - `keyboard`: Teclado para digitar senha
            - `listing`: Busca e listagem
          example: listing
        initial_home_screen:
          type: string
          enum:
            - bar_tab
            - table
          description: |
            Tela padrão de início:

            - `bar_tab`: Comanda
            - `table`: Mesa
          example: bar_tab
        is_reason_for_cancel_item_required:
          type: boolean
          description: Exige motivo para cancelamento de item.
          example: true
        is_allowed_print_summary_when_closing_check:
          type: boolean
          description: Imprimir resumo ao fechar conta.
          example: true
        print_order_type:
          type: string
          enum:
            - all
            - only_with_printer
          description: |
            Tipo de impressão dos Pedidos.

            - `all`: Imprimir todos os produtos do pedido
            - `only_with_printer`: Imprimir apenas produtos com impressora
          example: all
        is_allowed_print_product_with_reset_values:
          type: boolean
          description: Imprimir produtos com valor zerado nos pedidos.
          example: true
        is_enabled_status_table_awaiting_release:
          type: boolean
          description: Habilitar status "Mesa aguardando liberação".
          example: true
        is_customer_required_to_initiate:
          type: boolean
          description: É obrigatório selecionar cliente ao iniciar atendimento.
          example: true
        is_reason_for_cancel_bar_tab_required:
          type: boolean
          description: Exige motivo para cancelamento de comanda.
          example: true
        printer_id:
          type: integer
          description: Identificador único da impressora.
          example: 1
          writeOnly: true
        printer:
          description: Impressora.
          $ref: '#/components/schemas/ConfigPeripheralSlim'
          readOnly: true
        scale_id:
          type: integer
          description: Identificador único da balança.
          example: 1
          writeOnly: true
        scale:
          description: Balança.
          $ref: '#/components/schemas/ConfigPeripheralSlim'
          readOnly: true
        is_allowed_use_product_code_in_service:
          type: boolean
          description: Permite usar código de produto no atendimento.
          example: true
        is_allowed_ask_for_waiter_code:
          type: boolean
          description: Permite solicitar código de garçom.
          example: true
    ServiceSettingsServiceFee:
      type: object
      title: Configurações gerais da taxa de atendimento
      description: Representa as configurações gerais da taxa de atendimento.
      properties:
        is_enabled:
          type: boolean
          description: Habilita a taxa de atendimento.
          example: true
        is_password_required_to_edit:
          type: boolean
          description: Permite solicitar senha para alterar taxa de serviço.
          example: true
        fee_value_in_percent:
          type: number
          description: Define o valor da taxa em porcentagem.
          example: 10.5
    ServiceSettings:
      type: object
      title: Configurações relacionadas ao atendimento e pré-venda.
      description: Representa as configurações relacionadas ao atendimento e pré-venda..
      properties:
        service:
          description: Configurações gerais de atendimento e pré-venda.
          $ref: '#/components/schemas/ServiceSettingsService'
        service_fee:
          description: Configurações gerais da taxa de atendimento.
          $ref: '#/components/schemas/ServiceSettingsServiceFee'
    KdsSettings:
      type: object
      title: Configurações do monitor de cozinha (KDS)
      description: Representa as configurações do monitor de cozinha (KDS).
      properties:
        kds:
          type: object
          title: Configurações do monitor de cozinha (KDS)
          description: Representa as configurações do monitor de cozinha (KDS).
          properties:
            is_enabled:
              type: boolean
              description: Habilita o monitor de cozinha.
              example: true
            is_allowed_show_start_button:
              type: boolean
              description: Permite a exibição do botão de início no KDS.
              example: true
            is_allowed_show_customer_name:
              type: boolean
              description: Exibe o nome do cliente no monitor.
              example: true
            is_allowed_start_order_item_by_item:
              type: boolean
              description: Permite iniciar pedido item a item.
              example: true
            is_allowed_close_order_item_by_item:
              type: boolean
              description: Permite fechar pedidos item por item.
              example: true
    TerminalSettings:
      type: object
      title: Configurações gerais do terminal
      description: Representa uma configurações gerais do terminal.
      properties:
        pos_settings:
          description: Configurações gerais do terminal.
          $ref: '#/components/schemas/PosSetting'
        service_settings:
          description: Configurações relacionadas ao atendimento e pré-venda.
          $ref: '#/components/schemas/ServiceSettings'
        kds_settings:
          description: Configurações do monitor de cozinha (KDS).
          $ref: '#/components/schemas/KdsSettings'
    TotemSettings:
      type: object
      title: Configurações gerais do Totem
      properties:
        general_settings:
          type: object
          properties:
            auto_update_totems:
              type: boolean
              description: Ativar a atualização automática dos totens de autoatendimento
              example: true
            show_cart_footer:
              type: boolean
              description: Mostrar carrinho no rodapé do menu
              example: true
        product_prints:
          type: object
          properties:
            show_product_value:
              type: boolean
              description: Mostrar valor do produto nas impressões dos produtos
              example: true
            additional_info:
              type: string
              description: Informação adicional
              example: Minha informação
        management_report:
          type: object
          properties:
            disable_report:
              type: boolean
              description: Desativar relatório gerencial no autoatendimento
              example: true
            additional_info:
              type: string
              description: Informação adicional
              example: Minha informação
        confirmation_message:
          type: object
          properties:
            show_confirmation_message:
              type: boolean
              description: Exibir mensagem de confirmação antes de finalizar a venda
              example: true
            confirmation_message_text:
              type: string
              description: Mensagem de confirmação
              example: Deseja finalizar a venda?
            limit_display_time:
              type: boolean
              description: Limitar horário de exibição
              example: true
            start_time:
              type: string
              format: time-only
              description: Horário de início de exibição
              example: '04:54:00'
            end_time:
              type: string
              format: time-only
              description: Horário de fim de exibição
              example: '17:55:00'
        created_at:
          type: string
          format: date-time
          description: Data de criação
          example: '2025-01-01T00:00:00Z'
        updated_at:
          type: string
          format: date-time
          description: Data de atualização
          example: '2025-01-01T00:00:00Z'
    Districts:
      type: object
      additionalProperties: false
      properties:
        custom_id:
          type: integer
          description: Identificador único do bairro customizado
          example: 1
        name:
          type: string
          description: Nome do bairro
          example: Centro
        is_global:
          type: boolean
          description: Se o bairro é compartilhado com todas as empresas
          example: true
    PasswordPanel:
      type: object
      title: Configurações do painel de senha
      description: Representa as configurações do painel de senha
      properties:
        enable_password_panel:
          type: boolean
          description: Indica se o painel de senha está habilitado
          example: true
        show_current_password:
          type: boolean
          description: Indica se deve exibir a senha atual
          example: true
        show_customer_name:
          type: boolean
          description: Indica se deve exibir o nome do cliente
          example: true
        show_pending_status:
          type: boolean
          description: Indica se deve exibir a coluna de pedidos pendentes
          example: true
        pending_status_label:
          type: string
          description: Nome para o status pendente
          example: Cozinhando
        completed_status_label:
          type: string
          description: Nome para o status concluído
          example: Finalizado
        max_time_to_delivered:
          type: integer
          description: Tempo em minutos para marcar pedido como entregue automaticamente
          example: 15
        url:
          type: string
          description: URL do painel de senha
          example: https://example.com
        customization_settings:
          type: object
          description: Configurações de personalização do painel
          properties:
            background_image_url:
              type: string
              description: >-
                URL da imagem de fundo. Ela possui um timestamp como parametro
                para evitar cache pelo navegador.
              example: https://www.example.com/image.png?timestamp=1724995200
            colors:
              type: object
              description: Configurações de cores do painel
              properties:
                background_color:
                  type: string
                  description: Cor de fundo principal
                  example: '#ffffff'
                font_color:
                  type: string
                  description: Cor da fonte principal
                  example: '#ECF0F1'
                pending_status_background_color:
                  type: string
                  description: Cor de fundo do status pendente
                  example: '#F39C12'
                pending_status_font_color:
                  type: string
                  description: Cor da fonte do status pendente
                  example: '#2C3E50'
                completed_status_background_color:
                  type: string
                  description: Cor de fundo do status concluído
                  example: '#27AE60'
                completed_status_font_color:
                  type: string
                  description: Cor da fonte do status concluído
                  example: '#FFFFFF'
    IcmsTributaryGroup:
      type: object
      title: TributaryGroup
      description: Representa um grupo tributário.
      properties:
        id:
          type: integer
          description: Identificador único do grupo tributário.
          example: 900
          readOnly: true
        code:
          type: string
          description: Código do grupo tributário.
          example: '900'
          readOnly: true
        description:
          type: string
          description: Descrição do grupo tributário.
          example: 900 - Outros
          readOnly: true
    Icms:
      type: object
      title: ICMS
      description: Representa um grupo de ICMS.
      properties:
        id:
          type: integer
          description: Identificador único do Grupo de ICMS.
          example: 211
          readOnly: true
        name:
          type: string
          description: Nome do grupo de ICMS.
          example: ICMS Outras - Campos Opcionais
          readOnly: true
        tributary_group:
          $ref: '#/components/schemas/IcmsTributaryGroup'
          description: Grupo tributário associado ao ICMS.
        icms_percentage:
          type: number
          format: float
          description: Percentual do ICMS.
          example: 18
          readOnly: true
        is_default:
          type: boolean
          description: Indica se este é o grupo de ICMS padrão.
          example: false
          readOnly: true
        is_shared_with_all_companies:
          type: boolean
          description: Indica se este grupo de ICMS é compartilhado com todas as empresas.
          example: true
          readOnly: true
        created_at:
          type: string
          format: date-time
          description: Data e hora de criação do registro.
          example: '2025-07-18T23:37:49.000000Z'
          readOnly: true
        updated_at:
          type: string
          format: date-time
          description: Data e hora da última atualização do registro.
          example: '2025-07-18T23:37:49.000000Z'
          readOnly: true
    TributaryGroup101:
      type: object
      title: '101'
      description: >
        **Código:** 101 - Tributada pelo Simples Nacional com permissão de
        crédito


        **Regime:** Simples Nacional / Simples Nacional MEI


        **Campos disponíveis:** Nenhum (configuração sem campos adicionais)
      additionalProperties: true
      properties: {}
    TributaryGroup102:
      type: object
      title: '102'
      description: >
        **Código:** 102 - Tributada pelo Simples Nacional sem permissão de
        crédito


        **Regime:** Simples Nacional / Simples Nacional MEI


        **Campos disponíveis:** Nenhum (configuração sem campos adicionais)
      additionalProperties: true
      properties: {}
    TributaryGroup103:
      type: object
      title: '103'
      description: >
        **Código:** 103 - Isenção do ICMS no Simples Nacional para faixa de
        receita bruta


        **Regime:** Simples Nacional / Simples Nacional MEI


        **Campos disponíveis:** Nenhum (configuração sem campos adicionais)
      additionalProperties: true
      properties: {}
    BaseStFields:
      type: object
      additionalProperties: false
      properties:
        st_base_calculation_mode_id:
          type: integer
          description: >
            Modalidade de determinação da base de cálculo do ICMS ST.


            | Código | Descrição | Campo Adicional Disponível |

            |--------|-----------|---------------------------|

            | 0 | Preço tabelado ou máximo sugerido | - |

            | 1 | Lista Negativa (valor) | - |

            | 2 | Lista Positiva (valor) | - |

            | 3 | Lista Neutra (valor) | - |

            | 4 | Margem Valor Agregado (%) | **mva_percentage** |

            | 5 | Pauta (valor) | - |


            **⚠️ Nota:** O campo `mva_percentage` só está disponível quando este
            campo = 4
          enum:
            - 0
            - 1
            - 2
            - 3
            - 4
            - 5
          default: 4
          example: 4
        mva_percentage:
          type: number
          format: float
          description: |
            Percentual de MVA (Margem de Valor Agregado) do ICMS ST.

            **⚠️ Disponível apenas quando st_base_calculation_mode_id = 4**
          minimum: 0
          maximum: 500
          example: 50
        st_base_calculation_reduction_percentage:
          type: number
          format: float
          description: Percentual de redução da base de cálculo do ICMS ST.
          minimum: 0
          maximum: 100
          example: 0
        st_icms_percentage:
          type: number
          format: float
          description: Percentual da alíquota do ICMS ST.
          minimum: 0
          maximum: 100
          example: 18
        internal_rate_own_reduction:
          type: number
          format: float
          description: Percentual da alíquota interna para desconto de ICMS próprio.
          minimum: 0
          maximum: 100
          example: 18
    TributaryGroup201:
      type: object
      title: '201'
      description: >
        **Código:** 201 - Simples Nacional com Substituição Tributária


        **Regime:** Simples Nacional / Simples Nacional MEI


        **Campos disponíveis:**

        - Modalidade de Determinação da BC do ICMS ST
        [st_base_calculation_mode_id]

        - % MVA do ICMS ST [mva_percentage] (quando st_base_calculation_mode_id
        = 4)

        - % de Redução da Base de Cálculo do ICMS ST
        [st_base_calculation_reduction_percentage]

        - % de Alíquota do ICMS ST [st_icms_percentage]

        - % Alíquota Interna para Desconto de ICMS Próprio
        [internal_rate_own_reduction]
      additionalProperties: true
      allOf:
        - $ref: '#/components/schemas/BaseStFields'
    IcmsPercentageField:
      type: object
      additionalProperties: false
      properties:
        icms_percentage:
          type: number
          format: float
          description: Percentual da alíquota do ICMS.
          minimum: 0
          maximum: 100
          example: 18
    TributaryGroup202:
      type: object
      title: '202'
      description: >
        **Código:** 202 - Simples Nacional com alíquota e Substituição
        Tributária


        **Regime:** Simples Nacional / Simples Nacional MEI


        **Campos disponíveis:**

        - % Alíquota do ICMS [icms_percentage]

        - Modalidade de Determinação da BC do ICMS ST
        [st_base_calculation_mode_id]

        - % MVA do ICMS ST [mva_percentage] (quando st_base_calculation_mode_id
        = 4)

        - % de Redução da Base de Cálculo do ICMS ST
        [st_base_calculation_reduction_percentage]

        - % de Alíquota do ICMS ST [st_icms_percentage]

        - % Alíquota Interna para Desconto de ICMS Próprio
        [internal_rate_own_reduction]
      allOf:
        - $ref: '#/components/schemas/IcmsPercentageField'
        - $ref: '#/components/schemas/BaseStFields'
    TributaryGroup203:
      type: object
      title: '203'
      description: >
        **Código:** 203 - Simples Nacional com Substituição Tributária


        **Regime:** Simples Nacional / Simples Nacional MEI


        **Campos disponíveis:**

        - Modalidade de Determinação da BC do ICMS ST
        [st_base_calculation_mode_id]

        - % MVA do ICMS ST [mva_percentage] (quando st_base_calculation_mode_id
        = 4)

        - % de Redução da Base de Cálculo do ICMS ST
        [st_base_calculation_reduction_percentage]

        - % de Alíquota do ICMS ST [st_icms_percentage]

        - % Alíquota Interna para Desconto de ICMS Próprio
        [internal_rate_own_reduction]
      allOf:
        - $ref: '#/components/schemas/BaseStFields'
    TributaryGroup300:
      type: object
      title: '300'
      description: |
        **Código:** 300 - Imune

        **Regime:** Simples Nacional / Simples Nacional MEI

        **Campos disponíveis:** Nenhum (configuração sem campos adicionais)
      additionalProperties: true
      properties: {}
    TributaryGroup400:
      type: object
      title: '400'
      description: |
        **Código:** 400 - Não tributada pelo Simples Nacional

        **Regime:** Simples Nacional / Simples Nacional MEI

        **Campos disponíveis:** Nenhum (configuração sem campos adicionais)
      additionalProperties: true
      properties: {}
    TributaryGroup500:
      type: object
      title: '500'
      description: >
        **Código:** 500 - ICMS cobrado anteriormente por substituição tributária
        (substituído) ou por antecipação


        **Regime:** Simples Nacional / Simples Nacional MEI


        **Campos disponíveis:** Nenhum (configuração sem campos adicionais)
      additionalProperties: true
      properties: {}
    BaseIcmsFields:
      type: object
      additionalProperties: false
      properties:
        icms_percentage:
          type: number
          format: float
          description: Percentual da alíquota do ICMS.
          minimum: 0
          maximum: 100
          example: 18
        base_calculation_mode_id:
          type: integer
          description: |
            Modalidade de determinação da base de cálculo do ICMS.

            | Código | Descrição |
            |--------|-----------|
            | 0 | Margem Valor Agregado (%) |
            | 1 | Pauta (Valor) |
            | 2 | Preço Tabelado Máx. (valor) |
            | 3 | Valor da operação |
          enum:
            - 0
            - 1
            - 2
            - 3
          default: 0
          example: 3
        base_calculation_reduction_percentage:
          type: number
          format: float
          description: Percentual de redução da base de cálculo do ICMS.
          minimum: 0
          maximum: 100
          example: 10
    TributaryGroup900:
      type: object
      title: '900'
      description: >
        **Código:** 900 - Outros


        **Regime:** Simples Nacional / Simples Nacional MEI


        **Campos disponíveis:**

        - % Alíquota do ICMS [icms_percentage]

        - % Redução da Base de Cálculo [base_calculation_reduction_percentage]

        - Modalidade de Determinação da BC do ICMS [base_calculation_mode_id]

        - Modalidade de Determinação da BC do ICMS ST
        [st_base_calculation_mode_id]

        - % MVA do ICMS ST [mva_percentage] (quando st_base_calculation_mode_id
        = 4)

        - % de Redução da Base de Cálculo do ICMS ST
        [st_base_calculation_reduction_percentage]

        - % de Alíquota do ICMS ST [st_icms_percentage]

        - % Alíquota Interna para Desconto de ICMS Próprio
        [internal_rate_own_reduction]
      allOf:
        - $ref: '#/components/schemas/BaseIcmsFields'
        - $ref: '#/components/schemas/BaseStFields'
    IcmsBaseCalculationModeIdField:
      type: object
      additionalProperties: false
      properties:
        base_calculation_mode_id:
          type: integer
          description: |
            Modalidade de determinação da base de cálculo do ICMS.

            | Código | Descrição |
            |--------|-----------|
            | 0 | Margem Valor Agregado (%) |
            | 1 | Pauta (Valor) |
            | 2 | Preço Tabelado Máx. (valor) |
            | 3 | Valor da operação |
          enum:
            - 0
            - 1
            - 2
            - 3
          example: 3
    TributaryGroup0:
      type: object
      title: '0'
      description: |
        **Código:** 0 - Tributado integralmente

        **Regime:** Simples Nacional excesso sublimite / Regime Normal

        **Campos disponíveis:**
        - % Alíquota do ICMS [icms_percentage]
        - Modalidade de Determinação da BC do ICMS [base_calculation_mode_id]
      allOf:
        - $ref: '#/components/schemas/IcmsPercentageField'
        - $ref: '#/components/schemas/IcmsBaseCalculationModeIdField'
    TributaryGroup10:
      type: object
      title: '10'
      description: >
        **Código:** 10 - Tributado com ST


        **Regime:** Simples Nacional excesso sublimite / Regime Normal


        **Campos disponíveis:**

        - % Alíquota do ICMS [icms_percentage]

        - Modalidade de Determinação da BC do ICMS [base_calculation_mode_id]

        - Modalidade de Determinação da BC do ICMS ST
        [st_base_calculation_mode_id]

        - % MVA do ICMS ST [mva_percentage] (quando st_base_calculation_mode_id
        = 4)

        - % de Redução da Base de Cálculo do ICMS ST
        [st_base_calculation_reduction_percentage]

        - % de Alíquota do ICMS ST [st_icms_percentage]

        - % Alíquota Interna para Desconto de ICMS Próprio
        [internal_rate_own_reduction]
      allOf:
        - $ref: '#/components/schemas/IcmsPercentageField'
        - $ref: '#/components/schemas/IcmsBaseCalculationModeIdField'
        - $ref: '#/components/schemas/BaseStFields'
    IcmsExemptionField:
      type: object
      additionalProperties: false
      properties:
        icms_exemption_reason_id:
          type: integer
          description: >
            Código do motivo da desoneração do ICMS.


            Para obter a lista de códigos disponíveis, consulte:

            `GET
            tax-settings/icms/icms-exemptions?tributary_group_id=TRIBUTARY_GROUP_ID_SELECTED`
          example: 1
    TributaryGroup20:
      type: object
      title: '20'
      description: |
        **Código:** 20 - Com redução da base de cálculo

        **Regime:** Simples Nacional excesso sublimite / Regime Normal

        **Campos disponíveis:**
        - % Alíquota do ICMS [icms_percentage]
        - Modalidade de Determinação da BC do ICMS [base_calculation_mode_id]
        - % Redução da Base de Cálculo [base_calculation_reduction_percentage]
        - Motivo da Desoneração do ICMS [icms_exemption_reason]
      allOf:
        - $ref: '#/components/schemas/BaseIcmsFields'
        - $ref: '#/components/schemas/IcmsExemptionField'
    TributaryGroup30:
      type: object
      title: '30'
      description: >
        **Código:** 30 - Isento ou não tributado com ST


        **Regime:** Simples Nacional excesso sublimite / Regime Normal


        **Campos disponíveis:**

        - Motivo da Desoneração do ICMS [icms_exemption_reason]

        - Modalidade de Determinação da BC do ICMS ST
        [st_base_calculation_mode_id]

        - % MVA do ICMS ST [mva_percentage] (quando st_base_calculation_mode_id
        = 4)

        - % de Redução da Base de Cálculo do ICMS ST
        [st_base_calculation_reduction_percentage]

        - % de Alíquota do ICMS ST [st_icms_percentage]

        - % Alíquota Interna para Desconto de ICMS Próprio
        [internal_rate_own_reduction]
      allOf:
        - $ref: '#/components/schemas/IcmsExemptionField'
        - $ref: '#/components/schemas/BaseStFields'
    TributaryGroup40:
      type: object
      title: '40'
      description: |
        **Código:** 40 - Isento

        **Regime:** Simples Nacional excesso sublimite / Regime Normal

        **Campos disponíveis:**
        - Motivo da Desoneração do ICMS [icms_exemption_reason]
      allOf:
        - $ref: '#/components/schemas/IcmsExemptionField'
    TributaryGroup41:
      type: object
      title: '41'
      description: |
        **Código:** 41 - Não tributado

        **Regime:** Simples Nacional excesso sublimite / Regime Normal

        **Campos disponíveis:**
        - Motivo da Desoneração do ICMS [icms_exemption_reason]
      allOf:
        - $ref: '#/components/schemas/IcmsExemptionField'
    TributaryGroup50:
      type: object
      title: '50'
      description: |
        **Código:** 50 - Suspensão

        **Regime:** Simples Nacional excesso sublimite / Regime Normal

        **Campos disponíveis:**
        - Motivo da Desoneração do ICMS [icms_exemption_reason]
      allOf:
        - $ref: '#/components/schemas/IcmsExemptionField'
    TributaryGroup51:
      type: object
      title: '51'
      description: |
        **Código:** 51 - Diferimento

        **Regime:** Simples Nacional excesso sublimite / Regime Normal

        **Campos disponíveis:**
        - % Alíquota do ICMS [icms_percentage]
        - Modalidade de Determinação da BC do ICMS [base_calculation_mode_id]
      allOf:
        - $ref: '#/components/schemas/IcmsPercentageField'
        - $ref: '#/components/schemas/IcmsBaseCalculationModeIdField'
    TributaryGroup60:
      type: object
      title: '60'
      description: |
        **Código:** 60 - ICMS cobrado anteriormente por substituição tributária

        **Regime:** Simples Nacional excesso sublimite / Regime Normal

        **Campos disponíveis:** Nenhum (configuração sem campos adicionais)
      additionalProperties: true
      properties: {}
    TributaryGroup70:
      type: object
      title: '70'
      description: >
        **Código:** 70 - Outros


        **Regime:** Simples Nacional excesso sublimite / Regime Normal


        **Campos disponíveis:**

        - % Alíquota do ICMS [icms_percentage]

        - Modalidade de Determinação da BC do ICMS [base_calculation_mode_id]

        - % Redução da Base de Cálculo [base_calculation_reduction_percentage]

        - Motivo da Desoneração do ICMS [icms_exemption_reason]

        - Modalidade de Determinação da BC do ICMS ST
        [st_base_calculation_mode_id]

        - % MVA do ICMS ST [mva_percentage] (quando st_base_calculation_mode_id
        = 4)

        - % de Redução da Base de Cálculo do ICMS ST
        [st_base_calculation_reduction_percentage]

        - % de Alíquota do ICMS ST [st_icms_percentage]

        - % Alíquota Interna para Desconto de ICMS Próprio
        [internal_rate_own_reduction]
      allOf:
        - $ref: '#/components/schemas/BaseIcmsFields'
        - $ref: '#/components/schemas/IcmsExemptionField'
        - $ref: '#/components/schemas/BaseStFields'
    TributaryGroup90:
      type: object
      title: '90'
      description: >
        **Código:** 90 - Outros


        **Regime:** Simples Nacional excesso sublimite / Regime Normal


        **Campos disponíveis:**

        - % Alíquota do ICMS [icms_percentage]

        - Modalidade de Determinação da BC do ICMS [base_calculation_mode_id]

        - % Redução da Base de Cálculo [base_calculation_reduction_percentage]

        - Motivo da Desoneração do ICMS [icms_exemption_reason]

        - Modalidade de Determinação da BC do ICMS ST
        [st_base_calculation_mode_id]

        - % MVA do ICMS ST [mva_percentage] (quando st_base_calculation_mode_id
        = 4)

        - % de Redução da Base de Cálculo do ICMS ST
        [st_base_calculation_reduction_percentage]

        - % de Alíquota do ICMS ST [st_icms_percentage]

        - % Alíquota Interna para Desconto de ICMS Próprio
        [internal_rate_own_reduction]
      allOf:
        - $ref: '#/components/schemas/BaseIcmsFields'
        - $ref: '#/components/schemas/IcmsExemptionField'
        - $ref: '#/components/schemas/BaseStFields'
    IcmsInterstateStRate:
      type: object
      title: Alíquotas ST Interestaduais
      description: Configurações de alíquotas ST para operações interestaduais
      required:
        - mva_percentage
        - mva_sn_percentage
        - reduction_percentage
        - icms_percentage
      properties:
        mva_percentage:
          type: number
          format: float
          description: Percentual MVA.
          minimum: 0
          maximum: 100
          example: 50
        mva_sn_percentage:
          type: number
          format: float
          description: Percentual MVA SN.
          minimum: 0
          maximum: 100
          example: 40
        reduction_percentage:
          type: number
          format: float
          description: Percentual de redução.
          minimum: 0
          maximum: 100
          example: 0
        icms_percentage:
          type: number
          format: float
          description: Alíquota ICMS.
          minimum: 0
          maximum: 100
          example: 18
    IcmsStateRate:
      type: object
      title: Alíquotas do Estado ICMS
      description: Configurações de alíquotas para um estado específico
      required:
        - interstate_rate
        - standard_state_rate
        - fcp_rate
        - interstate_st_rate
      properties:
        interstate_rate:
          type: number
          format: float
          description: Alíquota interestadual.
          minimum: 0
          maximum: 100
          example: 18
        standard_state_rate:
          type: number
          format: float
          description: Alíquota interna padrão.
          minimum: 0
          maximum: 100
          example: 18
        fcp_rate:
          type: number
          format: float
          description: Alíquota FCP.
          minimum: 0
          maximum: 100
          example: 2
        interstate_st_rate:
          $ref: '#/components/schemas/IcmsInterstateStRate'
          description: Configurações de alíquotas ST interestaduais.
    IcmsState:
      type: object
      title: Estado ICMS
      description: Configurações de alíquotas para um estado específico
      required:
        - code
        - rate
      properties:
        code:
          type: string
          description: Código do estado (sigla).
          enum:
            - AC
            - AL
            - AP
            - AM
            - BA
            - CE
            - DF
            - ES
            - GO
            - MA
            - MT
            - MS
            - MG
            - PA
            - PB
            - PR
            - PE
            - PI
            - RN
            - RS
            - RO
            - RR
            - SC
            - SE
            - SP
            - TO
          example: SP
        rate:
          $ref: '#/components/schemas/IcmsStateRate'
          description: Configurações de alíquotas do estado.
        cbenef_code:
          type: string
          description: Código do beneficiário.
          example: UF1234567
          default: ''
    IcmsExemption:
      type: object
      title: IcmsExemption
      description: Representa um motivo de desoneração de ICMS.
      properties:
        id:
          type: integer
          description: Identificador único do motivo de desoneração de ICMS.
          example: 12
          readOnly: true
        name:
          type: string
          description: Nome do motivo de desoneração de ICMS.
          example: Órgão de fomento e desenvolvimento agropecuário
          readOnly: true
    IcmsDetail:
      type: object
      title: Detalhes do ICMS
      description: Representa os detalhes completos de um grupo de ICMS
      properties:
        id:
          type: integer
          description: Identificador único do Grupo de ICMS.
          example: 123
          readOnly: true
        name:
          type: string
          description: Nome do grupo de ICMS.
          example: ICMS Tributado Integralmente
          readOnly: true
        tributary_group:
          $ref: '#/components/schemas/IcmsTributaryGroup'
          description: Grupo tributário associado ao ICMS.
          readOnly: true
        settings:
          type:
            - object
            - 'null'
          description: Configurações específicas do ICMS.
          properties:
            icms_percentage:
              type:
                - number
                - 'null'
              format: float
              description: Alíquota do ICMS.
              example: 18
              readOnly: true
            base_calculation_mode_id:
              type:
                - integer
                - 'null'
              description: Modalidade de cálculo da base.
              example: 0
              readOnly: true
            base_calculation_reduction_percentage:
              type:
                - number
                - 'null'
              format: float
              description: Redução da base de cálculo.
              example: 0
              readOnly: true
            st_base_calculation_mode_id:
              type:
                - integer
                - 'null'
              description: Modalidade de cálculo da base ST.
              example: 0
              readOnly: true
            st_base_calculation_reduction_percentage:
              type:
                - number
                - 'null'
              format: float
              description: Redução da base de cálculo ST.
              example: 0
              readOnly: true
            st_icms_percentage:
              type:
                - number
                - 'null'
              format: float
              description: Alíquota do ICMS ST.
              example: 0
              readOnly: true
            mva_percentage:
              type:
                - number
                - 'null'
              format: float
              description: Percentual MVA.
              example: 0
              readOnly: true
            internal_rate_own_reduction:
              type:
                - number
                - 'null'
              format: float
              description: Alíquota interna com redução própria.
              example: 0
              readOnly: true
            icms_exemption_reason:
              oneOf:
                - $ref: '#/components/schemas/IcmsExemption'
                - type: 'null'
              description: Motivo de desoneração de ICMS.
              readOnly: true
          readOnly: true
        states:
          type: array
          description: Configurações de alíquotas para todos os estados.
          items:
            $ref: '#/components/schemas/IcmsState'
          readOnly: true
        final_consumer_group:
          $ref: '#/components/schemas/Icms'
          description: Grupo de consumidor final.
          readOnly: true
        is_interstate_sharing:
          type: boolean
          description: Indica se há partilha interestadual.
          example: true
          readOnly: true
        is_default:
          type: boolean
          description: Indica se este é o grupo de ICMS padrão.
          example: false
          readOnly: true
        created_at:
          type: string
          format: date-time
          description: Data e hora de criação do registro.
          example: '2024-01-20T15:30:00.000000Z'
          readOnly: true
        updated_at:
          type: string
          format: date-time
          description: Data e hora da última atualização do registro.
          example: '2024-01-20T15:30:00.000000Z'
          readOnly: true
    IcmsCannotBeDeletedException:
      title: ICMS Cannot Be Deleted Exception
      type: object
      description: >-
        O erro ocorre quando o grupo de ICMS não pode ser excluído por estar
        sendo utilizado como "Taxa de Serviço da NF-e".
      properties:
        code:
          type: string
          description: conflict
          example: conflict
        message:
          type: string
          description: >-
            O grupo de ICMS não pode ser excluído pois está sendo utilizado como
            "Taxa de Serviço da NF-e".
          example: >-
            O grupo de ICMS não pode ser excluído pois está sendo utilizado como
            "Taxa de Serviço da NF-e".
        meta:
          type: array
          description: '[]'
          example: []
      required:
        - code
        - message
        - meta
    Ipi:
      type: object
      title: IPI
      description: Representa um grupo de IPI.
      properties:
        id:
          type: integer
          description: Identificador único do Grupo de IPI.
          example: 5
          readOnly: true
        name:
          type: string
          description: Nome do grupo de IPI.
          example: IPI novo
          readOnly: true
        tributary_group:
          type: object
          description: Grupo tributário do IPI.
          properties:
            id:
              type: integer
              description: ID do grupo tributário.
              example: 0
            description:
              type: string
              description: Descrição do grupo tributário.
              example: 00 - Entrada com recuperação de crédito
          required:
            - id
            - description
          readOnly: true
        ipi_percent:
          type: number
          format: float
          description: Percentual do IPI.
          example: 10
          readOnly: true
        is_default:
          type: boolean
          description: Indica se é o grupo de IPI padrão.
          example: false
          readOnly: true
        is_shared_with_all_companies:
          type: boolean
          description: Indica se este grupo de IPI é compartilhado com todas as empresas.
          example: true
          readOnly: true
        created_at:
          type: string
          format: date-time
          description: Data de criação do grupo de IPI.
          example: '2025-07-30T13:13:51.000000Z'
          readOnly: true
        updated_at:
          type: string
          format: date-time
          description: Data da última atualização do grupo de IPI.
          example: '2025-07-30T13:34:36.000000Z'
          readOnly: true
    BaseIpiBody:
      type: object
      title: Base Body para IPI
      description: Schema base com propriedades comuns para grupos de IPI
      required:
        - name
        - tributary_group_id
        - legal_classification_id
      properties:
        name:
          type: string
          description: Nome do grupo de IPI.
          maxLength: 150
          example: IPI Entrada Recuperação Crédito
        tributary_group_id:
          type: integer
          description: >-
            ID do grupo tributário (deve ser 0 para este schema). A listagem de
            grupos tributários pode ser encontrada em [📋 lista de grupos
            tributários de IPI](#paths/get-tax-settings-ipi-tributary-groups).
          example: 0
        legal_classification_id:
          type: integer
          description: >-
            ID da classificação legal do IPI. A listagem de classificações
            legais pode ser encontrada em [📋 lista de classificações legais de
            IPI](#paths/get-tax-settings-ipi-legal-classifications).
          example: 999
        is_shared_with_all_companies:
          type: boolean
          description: Se o grupo de IPI é compartilhado com todas as empresas.
          example: true
          default: false
    CreditRecoveryEntryBody:
      title: Body para Entrada com Recuperação de Crédito
      description: >-
        Body completo para o grupo tributário 0 - Entrada com recuperação de
        crédito
      allOf:
        - $ref: '#/components/schemas/BaseIpiBody'
        - type: object
          required:
            - ipi_percent
          properties:
            ipi_percent:
              type: number
              format: float
              description: Percentual do IPI (obrigatório para este grupo).
              minimum: 0
              maximum: 100
              example: 10
    TaxedZeroEntryBody:
      title: Body para Entrada Tributada com Alíquota Zero
      description: >-
        Body completo para o grupo tributário 1 - Entrada tributada com alíquota
        zero
      allOf:
        - $ref: '#/components/schemas/BaseIpiBody'
    ExemptEntryBody:
      title: Body para Entrada Isenta
      description: Body completo para o grupo tributário 2 - Entrada isenta
      allOf:
        - $ref: '#/components/schemas/BaseIpiBody'
    NonTaxedEntryBody:
      title: Body para Entrada Não-Tributada
      description: Body completo para o grupo tributário 3 - Entrada não-tributada
      allOf:
        - $ref: '#/components/schemas/BaseIpiBody'
    ImmuneEntryBody:
      title: Body para Entrada Imune
      description: Body completo para o grupo tributário 4 - Entrada imune
      allOf:
        - $ref: '#/components/schemas/BaseIpiBody'
    SuspensionEntryBody:
      title: Body para Entrada com Suspensão
      description: Body completo para o grupo tributário 5 - Entrada com suspensão
      allOf:
        - $ref: '#/components/schemas/BaseIpiBody'
        - type: object
          required:
            - ipi_percent
          properties:
            ipi_percent:
              type: number
              format: float
              description: Percentual do IPI (obrigatório para este grupo).
              minimum: 0
              maximum: 100
              example: 5
    OtherEntriesBody:
      title: Body para Outras Entradas
      description: Body completo para o grupo tributário 49 - Outras entradas
      allOf:
        - $ref: '#/components/schemas/BaseIpiBody'
        - type: object
          required:
            - ipi_percent
          properties:
            ipi_percent:
              type: number
              format: float
              description: Percentual do IPI (obrigatório para este grupo).
              minimum: 0
              maximum: 100
              example: 6
    TaxedExitBody:
      title: Body para Saída Tributada
      description: Body completo para o grupo tributário 50 - Saída tributada
      allOf:
        - $ref: '#/components/schemas/BaseIpiBody'
        - type: object
          required:
            - ipi_percent
          properties:
            ipi_percent:
              type: number
              format: float
              description: Percentual do IPI (obrigatório para este grupo).
              minimum: 0
              maximum: 100
              example: 15
    TaxedZeroExitBody:
      title: Body para Saída Tributada com Alíquota Zero
      description: >-
        Body completo para o grupo tributário 51 - Saída tributada com alíquota
        zero
      allOf:
        - $ref: '#/components/schemas/BaseIpiBody'
    ExemptExitBody:
      title: Body para Saída Isenta
      description: Body completo para o grupo tributário 52 - Saída isenta
      allOf:
        - $ref: '#/components/schemas/BaseIpiBody'
    NonTaxedExitBody:
      title: Body para Saída Não-Tributada
      description: Body completo para o grupo tributário 53 - Saída não-tributada
      allOf:
        - $ref: '#/components/schemas/BaseIpiBody'
    ImmuneExitBody:
      title: Body para Saída Imune
      description: Body completo para o grupo tributário 54 - Saída imune
      allOf:
        - $ref: '#/components/schemas/BaseIpiBody'
    SuspensionExitBody:
      title: Body para Saída com Suspensão
      description: Body completo para o grupo tributário 55 - Saída com suspensão
      allOf:
        - $ref: '#/components/schemas/BaseIpiBody'
    OtherExitsBody:
      title: Body para Outras Saídas
      description: Body completo para o grupo tributário 99 - Outras saídas
      allOf:
        - $ref: '#/components/schemas/BaseIpiBody'
        - type: object
          required:
            - ipi_percent
          properties:
            ipi_percent:
              type: number
              format: float
              description: Percentual do IPI (obrigatório para este grupo).
              minimum: 0
              maximum: 100
              example: 8
    IpiDetail:
      type: object
      title: Informações detalhada do IPI
      description: Representa um grupo de IPI com todos os detalhes.
      properties:
        id:
          type: integer
          description: Identificador único do Grupo de IPI.
          example: 5
          readOnly: true
        name:
          type: string
          description: Nome do grupo de IPI.
          example: IPI novo
          readOnly: true
        tributary_group:
          type: object
          description: Grupo tributário do IPI.
          properties:
            id:
              type: integer
              description: ID do grupo tributário.
              example: 0
            description:
              type: string
              description: Descrição do grupo tributário.
              example: 00 - Entrada com recuperação de crédito
          required:
            - id
            - description
          readOnly: true
        ipi_percent:
          type: number
          format: float
          description: Percentual do IPI.
          example: 10
          readOnly: true
        is_default:
          type: boolean
          description: Indica se é o grupo de IPI padrão.
          example: false
          readOnly: true
        created_at:
          type: string
          format: date-time
          description: Data de criação do grupo de IPI.
          example: '2025-07-30T13:13:51.000000Z'
          readOnly: true
        updated_at:
          type: string
          format: date-time
          description: Data da última atualização do grupo de IPI.
          example: '2025-07-30T13:34:36.000000Z'
          readOnly: true
    IpiTributaryGroup:
      type: object
      title: TributaryGroup
      description: Representa um grupo tributário de IPI
      properties:
        id:
          type: integer
          description: ID do grupo tributário.
          example: 0
          readOnly: true
        description:
          type: string
          description: Descrição do grupo tributário.
          example: 00 - Entrada com recuperação de crédito
          readOnly: true
    IpiLegalClassification:
      type: object
      title: LegalClassification
      description: Representa uma classificação legal de IPI
      properties:
        id:
          type: integer
          description: ID da classificação legal.
          example: 0
          readOnly: true
        description:
          type: string
          description: Descrição da classificação legal.
          example: >-
            001 - Livros, jornais, periódicos e o papel destinado à sua
            impressão - Art. 18 Inciso I do Decreto 7.212/2010
          readOnly: true
    PisCofins:
      type: object
      title: PIS/COFINS
      description: Representa um grupo de PIS/COFINS.
      properties:
        id:
          type: integer
          description: Identificador único do Grupo de PIS/COFINS.
          example: 1
          readOnly: true
        name:
          type: string
          description: Nome do grupo de PIS/COFINS.
          example: Pis Cofins
          readOnly: true
        pis_tributary_group:
          type: object
          description: Situação do PIS.
          properties:
            id:
              type: integer
              description: ID da situação do PIS.
              example: 4
            code:
              type: string
              description: Código da situação do PIS.
              example: '04'
            description:
              type: string
              description: Descrição da situação do PIS.
              example: 04 - Operação Tributável (tributação monofásica (alíquota zero))
          required:
            - id
            - code
            - description
          readOnly: true
        cofins_tributary_group:
          type: object
          description: Situação do COFINS.
          properties:
            id:
              type: integer
              description: ID da situação do COFINS.
              example: 4
            code:
              type: string
              description: Código da situação do COFINS.
              example: '04'
            description:
              type: string
              description: Descrição da situação do COFINS.
              example: 04 - Operação Tributável (tributação monofásica, alíquota zero)
          required:
            - id
            - code
            - description
          readOnly: true
        percent_pis:
          type:
            - number
            - 'null'
          format: float
          description: Percentual do PIS.
          example: null
          readOnly: true
        percent_cofins:
          type:
            - number
            - 'null'
          format: float
          description: Percentual do COFINS.
          example: null
          readOnly: true
        is_default:
          type: boolean
          description: Indica se é o grupo de PIS/COFINS padrão.
          example: false
          readOnly: true
        is_shared_with_all_companies:
          type: boolean
          description: >-
            Indica se este grupo de PIS/COFINS é compartilhado com todas as
            empresas.
          example: true
          readOnly: true
        created_at:
          type: string
          format: date-time
          description: Data de criação do grupo de PIS/COFINS.
          example: '2025-07-31T19:05:18.000000Z'
          readOnly: true
        updated_at:
          type: string
          format: date-time
          description: Data da última atualização do grupo de PIS/COFINS.
          example: '2025-07-31T19:55:49.000000Z'
          readOnly: true
    PisCofinsTributaryGroup:
      type: object
      title: TributaryGroup
      description: Representa um grupo tributário de PIS/COFINS
      properties:
        id:
          type: integer
          description: ID da situação do PIS/COFINS.
          example: 4
        code:
          type: string
          description: Código da situação do PIS/COFINS.
          example: '04'
        description:
          type: string
          description: Descrição da situação do PIS/COFINS.
          example: 04 - Operação Tributável (tributação monofásica (alíquota zero))
    Issqn:
      type: object
      title: ISSQN
      description: Representa um grupo de ISSQN.
      properties:
        id:
          type: integer
          description: Identificador único do Grupo de ISSQN.
          example: 1
          readOnly: true
        name:
          type: string
          description: Nome do grupo de ISSQN.
          example: Grupo 1 ISSQN
          readOnly: true
        issqn_percent:
          type: number
          format: float
          description: Percentual do ISSQN.
          example: 20.2
          readOnly: true
        iss_indicator:
          type: object
          description: Indicador ISS.
          properties:
            id:
              type: integer
              description: ID do indicador ISS.
              example: 1
            name:
              type: string
              description: Nome do indicador ISS.
              example: Exigível
          required:
            - id
            - name
          readOnly: true
        incentive_indicator:
          type: string
          description: Indicador de incentivo fiscal.
          example: 'yes'
          readOnly: true
        is_default:
          type: boolean
          description: Indica se é o grupo de ISSQN padrão.
          example: false
          readOnly: true
        disabled:
          type: boolean
          description: Indica se o grupo de ISSQN está desabilitado.
          example: false
          readOnly: true
        created_at:
          type: string
          format: date-time
          description: Data de criação do grupo de ISSQN.
          example: '2025-04-08T18:43:44.000000Z'
          readOnly: true
        updated_at:
          type: string
          format: date-time
          description: Data da última atualização do grupo de ISSQN.
          example: '2025-08-24T13:30:26.000000Z'
          readOnly: true
    AdditionalInfoNfe:
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
          format: int64
          description: ID da informação adicional da NF-e
          example: 123
        title:
          type: string
          description: Título da informação adicional
          example: Título da informação adicional
        description:
          type: string
          description: Descrição da informação adicional
          example: Descrição da informação adicional
        automatic:
          type: boolean
          description: Se a informação adicional será incluída automaticamente
          example: true
        is_shared_with_all_companies:
          type: boolean
          description: Se a informação adicional será compartilhada com todas as empresas
          example: true
        type:
          type: string
          enum:
            - NFE
            - NFSE
            - NFCE
          description: Tipo da informação adicional
          example: NFE
        created_at:
          type: string
          format: date-time
          description: Data de criação
          example: '2024-01-15T10:30:00-03:00'
        updated_at:
          type: string
          format: date-time
          description: Data de atualização
          example: '2024-01-15T10:30:00-03:00'
    AppSlim:
      type: object
      description: Dados do aplicativo.
      properties:
        id:
          type: integer
          description: Identificador único do aplicativo
          example: 1234
        name:
          type: string
          description: Nome do aplicativo.
          example: John Doe
        type:
          type: string
          description: Tipo do aplicativo.
          example: totem
    InvoiceSeries:
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
          format: int64
          description: ID da série de nota fiscal
          example: 123
        type:
          type: string
          enum:
            - P
            - PC
            - S
            - DV
          description: |
            Tipo da série de nota fiscal:
            - P: NFE (Nota Fiscal Eletrônica)
            - PC: NFCE (Nota Fiscal de Consumidor Eletrônica)
            - S: SERVICE (Nota Fiscal de Serviço)
            - DV: DAV Santa Catarina (Documento Auxiliar de Venda)
          example: P
        serie:
          type: integer
          description: Número da série
          example: 1
        current_number:
          type: integer
          description: Número atual da série
          example: 1000
        app:
          $ref: '#/components/schemas/AppSlim'
        created_at:
          type: string
          format: date-time
          description: Data de criação
          example: '2024-01-15T10:30:00-03:00'
        updated_at:
          type: string
          format: date-time
          description: Data de atualização
          example: '2024-01-15T10:30:00-03:00'
    TypeInvoicePdv:
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
          format: int64
          description: ID da configuração de tipo de nota emitida pelo PDV
          example: 1
        nfe_type:
          type: string
          enum:
            - '55'
            - '65'
            - ''
          description: |
            Tipo de NFe Emitida pelo PDV:
            - "55": NFe (Nota Fiscal Eletrônica)
            - "65": NFCe (Nota Fiscal de Consumidor Eletrônica)
            - "": Não configurado
          example: '55'
        is_final_consumer_icms:
          type: boolean
          description: ICMS para consumidor final
          example: true
        created_at:
          type: string
          format: date-time
          description: Data de criação
          example: '2025-02-17T18:27:39.000000Z'
        updated_at:
          type: string
          format: date-time
          description: Data de atualização
          example: '2025-06-09T15:50:31.000000Z'
    NatureOperations:
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
          format: int64
          description: ID da natureza de operação
          example: 1
        name:
          type: string
          description: Nome da natureza da operação
          example: Devolução de Mercadoria para Fornecedor
        description:
          type: string
          description: Descrição da natureza da operação
          example: Operação de devolução de mercadoria
        created_at:
          type: string
          format: date-time
          description: Data de criação
          example: '2025-08-22T11:39:00.000000Z'
        updated_at:
          type: string
          format: date-time
          description: Data de atualização
          example: '2025-08-22T12:28:52.000000Z'
    NatureOperationsDetail:
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
          format: int64
          description: ID da natureza de operação
          example: 8
        name:
          type: string
          description: Nome da natureza da operação
          example: Devolução de Mercadoria para Fornecedor - alt
        description:
          type: string
          description: Descrição da natureza da operação
          example: Operação de devolução de mercadoria - alt
        is_keep_fiscal_benefit:
          type: boolean
          description: Manter Código de Benefício Fiscal na UF nos produtos?
          example: false
        cfops:
          type: array
          description: Mapeamentos de CFOP expandidos
          items:
            type: object
            properties:
              cfop_from:
                type: object
                properties:
                  code:
                    type: string
                    example: '1101'
                  description:
                    type: string
                    example: 1101 - Compra para industrialização
              cfop_to:
                type: object
                properties:
                  code:
                    type: string
                    example: '1102'
                  description:
                    type: string
                    example: 1102 - Compra para comercialização
              is_free_icms:
                type: string
                enum:
                  - 'yes'
                  - 'no'
                  - both
                example: both
        icms_groups:
          type: array
          description: Mapeamentos de grupos ICMS expandidos
          items:
            type: object
            properties:
              icms_group_from:
                $ref: '#/components/schemas/Icms'
              icms_group_to:
                $ref: '#/components/schemas/Icms'
        pis_cofins_groups:
          type: array
          description: Mapeamentos de grupos PIS/COFINS expandidos
          items:
            type: object
            properties:
              pis_cofins_group_from:
                type: object
                properties:
                  id:
                    type: integer
                    example: 1
                  name:
                    type: string
                    example: Grupo PIS Cofins
              pis_cofins_group_to:
                type: object
                properties:
                  id:
                    type: integer
                    example: 2
                  name:
                    type: string
                    example: Grupo 2 Pis Cofins
        created_at:
          type: string
          format: date-time
          description: Data de criação
          example: '2025-08-22T13:55:59.000000Z'
        updated_at:
          type: string
          format: date-time
          description: Data de atualização
          example: '2025-08-22T14:26:01.000000Z'
    IcmsGroup:
      type: object
      title: Grupo de ICMS
      description: Identificador do grupo de ICMS.
      properties:
        id:
          type: integer
          description: ID do grupo de ICMS.
          example: 6
        name:
          type: string
          description: Nome do grupo de ICMS.
          example: Grupo de ICMS 1
    IpiGroup:
      type: object
      title: Grupo de IPI
      description: Identificador do grupo de IPI.
      properties:
        id:
          type: integer
          description: ID do grupo de IPI.
          example: 6
        name:
          type: string
          description: Nome do grupo de IPI.
          example: Grupo de IPI 1
    PisCofinsGroup:
      type: object
      title: Grupo de PIS/COFINS
      description: Identificador do grupo de PIS/COFINS.
      properties:
        id:
          type: integer
          description: ID do grupo de PIS/COFINS.
          example: 6
        name:
          type: string
          description: Nome do grupo de PIS/COFINS.
          example: Grupo de PIS/COFINS 1
    IssqnGroup:
      type: object
      title: Grupo de ISSQN
      description: Identificador do grupo de ISSQN.
      properties:
        id:
          type: integer
          description: ID do grupo de ISSQN.
          example: 6
        name:
          type: string
          description: Nome do grupo de ISSQN.
          example: Grupo de ISSQN 1
    Cfop:
      type: object
      title: CFOP
      description: Representa um CFOP.
      properties:
        code:
          type: string
          description: Código do CFOP.
          example: '1101'
        description:
          type: string
          description: Descrição do CFOP.
          example: 1101 - Compra para industrialização
    TaxSettingsDefaults:
      type: object
      title: Configurações Fiscais Padrão
      description: Representa as configurações fiscais padrão da empresa
      properties:
        icms_group:
          allOf:
            - $ref: '#/components/schemas/IcmsGroup'
            - type: object
              properties:
                tributary_group:
                  $ref: '#/components/schemas/IcmsTributaryGroup'
                icms_percentage:
                  type: number
                  format: float
                  description: Percentual do ICMS.
                  example: 0
                is_default:
                  type: boolean
                  description: Indica se é o grupo padrão.
                  example: true
                is_shared_with_all_companies:
                  type: boolean
                  description: Indica se é compartilhado com todas as empresas.
                  example: false
                created_at:
                  type: string
                  format: date-time
                  description: Data e hora de criação do registro.
                  example: '2025-08-28T18:05:17.000000Z'
                updated_at:
                  type: string
                  format: date-time
                  description: Data e hora da última atualização do registro.
                  example: '2025-08-29T19:01:44.000000Z'
        ipi_group:
          $ref: '#/components/schemas/IpiGroup'
        pis_cofins_group:
          $ref: '#/components/schemas/PisCofinsGroup'
        issqn_group:
          $ref: '#/components/schemas/IssqnGroup'
        cfop:
          $ref: '#/components/schemas/Cfop'
    TaxSettingsDefaultsUpdate:
      type: object
      title: Atualização das Configurações Fiscais Padrão
      description: Payload para atualizar as configurações fiscais padrão da empresa
      additionalProperties: false
      properties:
        icms_group_id:
          type: integer
          description: ID do grupo de ICMS.
          example: 68
        ipi_group_id:
          type: integer
          description: ID do grupo de IPI.
          example: 5
        pis_cofins_group_id:
          type: integer
          description: ID do grupo de PIS/COFINS.
          example: 2
        issqn_group_id:
          type: integer
          description: ID do grupo de ISSQN.
          example: 2
        cfop_code:
          type: string
          description: Código do CFOP.
          enum:
            - '5101'
            - '5102'
            - '5103'
            - '5104'
            - '5115'
            - '5405'
            - '5656'
            - '5667'
            - '5933'
          example: '5103'
      required:
        - icms_group_id
        - ipi_group_id
        - pis_cofins_group_id
        - issqn_group_id
        - cfop_code
    ConfigNfeTributarySettings:
      type: object
      title: Configurações Tributárias
      description: Configurações gerais tributárias da empresa.
      additionalProperties: false
      properties:
        tax_regime_id:
          type: integer
          description: |
            Regime tributário:
            - 1: Simples Nacional
            - 2: Simples Nacional, excesso sublimite de receita bruta
            - 3: Regime Normal
            - 4: Simples Nacional - Microempreendedor Individual
          example: 1
        is_state_registration_exempt:
          type: boolean
          description: Indica se a empresa é isenta de inscrição estadual.
          example: true
        state_registration:
          type: string
          description: Inscrição estadual da empresa. Deve ser nulo ou vazio se for isenta.
          example: ''
        municipal_registration:
          type: string
          description: Inscrição municipal da empresa.
          example: ''
      required:
        - tax_regime_id
        - is_state_registration_exempt
    ConfigNfeBuyerPresenceIndicator:
      type: object
      title: Indicador de Presença do Comprador
      description: >-
        Indicador de presença do comprador no estabelecimento (modalidade da
        venda)
      additionalProperties: false
      properties:
        id:
          type: integer
          description: >
            Código do indicador de presença do comprador no estabelecimento
            (modalidade da venda):
              
            - 0: Não se aplica (por exemplo, para a Nota Fiscal complementar ou
            de ajuste)

            - 1: Operação presencial

            - 2: Operação não presencial, pela Internet

            - 3: Operação não presencial, Teleatendimento

            - 4: NFC-e em operação com entrega em domicílio

            - 5: Operação presencial, fora do estabelecimento

            - 9: Operação não presencial, outros
          example: 0
        name:
          type: string
          description: Nome descritivo do indicador.
          example: >-
            Não se aplica (por exemplo, para a Nota Fiscal complementar ou de
            ajuste)
      required:
        - id
        - name
    ConfigNfeTaxSettings:
      type: object
      title: Configurações de Impostos
      description: Configurações específicas de impostos e tributos para NF-e.
      additionalProperties: false
      properties:
        nfe_environment:
          type: string
          enum:
            - production
            - homologation
          description: Ambiente da NFe (produção ou homologação).
          example: homologation
        final_consumer_operation_default:
          type: string
          enum:
            - normal
            - end_consumer
          description: Indicação da operação com Consumidor Final por padrão
          example: end_consumer
        buyer_presence_indicator:
          $ref: '#/components/schemas/ConfigNfeBuyerPresenceIndicator'
        include_freight_in_pis_calculation:
          type: boolean
          description: Inclui frete na base de cálculo de PIS no produto
          example: false
        include_freight_in_cofins_calculation:
          type: boolean
          description: Inclui frete na base de cálculo de COFINS no produto
          example: false
        include_ipi_in_icms_calculation:
          type: boolean
          description: Incluir IPI na base de cálculo
          example: true
        is_default_customer_icms_taxpayer:
          type: boolean
          description: Cliente padrão é contribuinte de ICMS
          example: true
        credit_calculation_rate:
          type: number
          format: float
          description: Alíquota aplicável no cálculo do crédito
          example: 12.45
        pix_payment_code:
          type: string
          description: >
            Código de pagamento PIX:

            - "17": Pagamento Instantâneo (PIX)

            - "99": Outros


            **Importante:**

            - Campo permitido apenas para empresas cujo endereço seja de SP e
            CE.
          example: '17'
    ConfigNfeAuthenticationSettings:
      type: object
      title: Configurações de Autenticação
      description: Configurações de autenticação para NFCe (CSC Token).
      additionalProperties: false
      properties:
        csc_token:
          type: string
          description: Token CSC (Código de Segurança do Contribuinte).
          example: ''
        token_id:
          type: string
          description: ID do token CSC.
          example: ''
    ConfigNfeStandardJustifications:
      type: object
      title: Justificativas Padrão
      description: >-
        Textos padrão para justificativas de cancelamento, inutilização e
        contingência.
      additionalProperties: false
      properties:
        unusability:
          type: string
          description: Texto padrão para inutilização de NFe.
          example: Texto padrão para inutilização
        cancelation:
          type: string
          description: Texto padrão para cancelamento de NFe.
          example: Texto padrão para cancelamento
        contingency:
          type: string
          description: Texto padrão para contingência de NFe.
          example: Texto padrão para contingência
    ConfigNfeXmlAuthorized:
      type: object
      title: XML Autorizado
      description: Informações de pessoa autorizada a baixar XML da NFe/NFCe.
      additionalProperties: false
      properties:
        identify:
          type: string
          description: CPF ou CNPJ da pessoa autorizada.
          example: '30398117000136'
        type:
          type: string
          enum:
            - cnpj
            - cpf
          description: Tipo do documento (CPF ou CNPJ).
          example: cnpj
      required:
        - identify
        - type
    ConfigNfeShippingModality:
      type: object
      title: Modalidade de Frete
      description: Modalidade de frete para operações de PDV.
      additionalProperties: false
      properties:
        id:
          type: integer
          description: |
            Código da modalidade de frete:
            - 0: Contratação do Frete por conta do Remetente (CIF)
            - 1: Contratação do Frete por conta do Destinatário (FOB)
            - 2: Contratação do Frete por conta de Terceiros
            - 3: Transporte Próprio por conta do Remetente
            - 4: Transporte Próprio por conta do Destinatário
            - 9: Sem frete
          example: 0
        name:
          type: string
          description: Nome descritivo da modalidade.
          example: Contratação do Frete por conta do Remetente (CIF)
    ConfigNfeAccessSettings:
      type: object
      title: Configurações de Acesso
      description: Configurações de acesso e autorização para NFe.
      additionalProperties: false
      properties:
        allow_accountant_invalidate_invoices:
          type: boolean
          description: Permite ao contador invalidar faturas.
          example: true
        xml_authorizeds:
          type: array
          description: Lista de pessoas autorizadas a baixar XML da NFe/NFCe.
          items:
            $ref: '#/components/schemas/ConfigNfeXmlAuthorized'
        shipping_modality_for_pos:
          $ref: '#/components/schemas/ConfigNfeShippingModality'
    ConfigNfeServiceFees:
      type: object
      title: Taxas de Serviço NFCe
      description: Configurações de taxas de serviço para NFCe.
      additionalProperties: false
      properties:
        tax_service_or_waiter_charge:
          type: string
          enum:
            - tip
            - other_expenses
          description: Tipo de taxa de serviço ou garçom.
          example: tip
    ConfigNfeProductInformations:
      type: object
      title: Informações de Produto
      description: Configurações de informações adicionais dos produtos.
      additionalProperties: false
      properties:
        add_batch:
          type: boolean
          description: Adicionar lote.
          example: false
        add_expiration_date:
          type: boolean
          description: Adicionar data de validade.
          example: false
        add_barcode_in_invoice:
          type: boolean
          description: >
            Adicionar código de barras.


            **Importante:**

            - Se essa opção estiver habilitada, o GTIN será incluído na tag
            cEAN. O código GTIN deverá ser um valor válido no portal
            CCG-Cadastro Centralizado de GTIN, caso contrário acontecerá uma
            rejeição.
          example: false
    ConfigNfeSendingDocuments:
      type: object
      title: Envio de Documentos
      description: Configurações de envio automático de documentos fiscais.
      additionalProperties: false
      properties:
        is_send_xml_automatically:
          type: boolean
          description: Enviar XML/DANFE ao cliente automaticamente
          example: false
    ConfigNfeStateRegistrationSt:
      type: object
      title: Inscrição Estadual ST
      description: Inscrição estadual do Substituto Tributário por estado.
      additionalProperties: false
      properties:
        state:
          type: string
          description: Sigla do estado (UF).
          example: MT
        state_registration:
          type: string
          description: Número da inscrição estadual no estado específico.
          example: '123123123'
      required:
        - state
        - state_registration
    ConfigNfeTransactionIntermediary:
      type: object
      title: Intermediador de Transação
      description: Informações do intermediador da transação.
      additionalProperties: false
      properties:
        name:
          type: string
          description: Nome do intermediador.
          example: João da Silva
        document:
          type: string
          description: CNPJ do intermediador.
          example: '30398117000136'
        registered_identifier:
          type: string
          description: Identificador cadastrado do intermediador.
          example: teste123
      required:
        - name
        - document
        - registered_identifier
    ConfigNfeSpecificSettings:
      type: object
      title: Configurações Específicas
      description: Configurações específicas para setores da economia.
      additionalProperties: false
      properties:
        enable_gas_fuel_sales:
          type: boolean
          description: Habilitar vendas de combustível.
          example: true
        enable_drug_sales:
          type: boolean
          description: Habilitar vendas de medicamentos.
          example: true
    ConfigNfeCalculationBasis:
      type: object
      title: Base de Cálculo
      description: Configurações da base de cálculo.
      additionalProperties: false
      properties:
        is_conditional_discount:
          type: boolean
          description: |
            Desconto condicional ativo.

            - `true`: Desconto condicionado (não reduz base)
            - `false`: Desconto incondicionado (reduz base)
          example: true
    ConfigNfePaymentSettings:
      type: object
      title: Configurações de Pagamento
      description: Configurações de pagamento.
      additionalProperties: false
      properties:
        state:
          type: string
          description: UF do CNPJ do estabelecimento.
          example: SC
        payment_document:
          type: string
          description: CNPJ do pagamento
          example: '30398117000136'
        beneficiary_document:
          type: string
          description: CNPJ do beneficiário
          example: '30398117000136'
      required:
        - state
        - payment_document
        - beneficiary_document
    ConfigNfeGeneralSettingsData:
      type: object
      title: Dados das Configurações Gerais da NFe
      description: Dados completos das configurações gerais para emissão de NFe/NFCe.
      additionalProperties: false
      properties:
        tributary_settings:
          $ref: '#/components/schemas/ConfigNfeTributarySettings'
        tax_settings:
          $ref: '#/components/schemas/ConfigNfeTaxSettings'
        authentication_settings:
          $ref: '#/components/schemas/ConfigNfeAuthenticationSettings'
        standard_justifications:
          $ref: '#/components/schemas/ConfigNfeStandardJustifications'
        access_settings:
          $ref: '#/components/schemas/ConfigNfeAccessSettings'
        nfce_service_fees:
          $ref: '#/components/schemas/ConfigNfeServiceFees'
        product_informations:
          $ref: '#/components/schemas/ConfigNfeProductInformations'
        sending_documents:
          $ref: '#/components/schemas/ConfigNfeSendingDocuments'
        state_registration_st:
          type: array
          description: |
            Inscrição Estadual do Substituto Tributário.

            **Importante:**
            - Para remover todas, envie um array vazio.
            - Não pode conter estados repetidos.
          items:
            $ref: '#/components/schemas/ConfigNfeStateRegistrationSt'
        transaction_intermediaries:
          type: array
          description: |
            Lista de intermediadores de transação.

            **Importante:**
            - Para remover todos, envie um array vazio.
          items:
            $ref: '#/components/schemas/ConfigNfeTransactionIntermediary'
        specific_settings:
          $ref: '#/components/schemas/ConfigNfeSpecificSettings'
        calculation_basis:
          $ref: '#/components/schemas/ConfigNfeCalculationBasis'
        payment_settings:
          type: array
          description: >
            Configurações de pagamento.


            **Importante:**

            - Para remover as informações envie state como null ou vazio.

            - Se state estiver presente, payment_document e beneficiary_document
            devem ser presentes.
          items:
            $ref: '#/components/schemas/ConfigNfePaymentSettings'
    ConfigNfeGeneralSettingsResponse:
      type: object
      title: Resposta das Configurações Gerais da NFe
      description: Resposta contendo as configurações gerais para emissão de NFe/NFCe.
      additionalProperties: false
      properties:
        data:
          $ref: '#/components/schemas/ConfigNfeGeneralSettingsData'
    ConfigNfeTributarySettingsRequest:
      type: object
      title: Configurações Tributárias (Request)
      description: Configurações gerais tributárias da empresa para atualização.
      additionalProperties: false
      properties:
        tax_regime_id:
          type: integer
          description: |
            Regime tributário:
            - 1: Simples Nacional
            - 2: Simples Nacional, excesso sublimite de receita bruta
            - 3: Regime Normal
            - 4: Simples Nacional - Microempreendedor Individual
          example: 1
        is_state_registration_exempt:
          type: boolean
          description: Indica se a empresa é isenta de inscrição estadual.
          example: true
        state_registration:
          type: string
          description: Inscrição estadual da empresa. Deve ser vazio ou nulo se for isenta.
          example: ''
        municipal_registration:
          type: string
          description: Inscrição municipal da empresa.
          example: ''
    ConfigNfeTaxSettingsRequest:
      type: object
      title: Configurações de Impostos (Request)
      description: >-
        Configurações específicas de impostos e tributos para NF-e para
        atualização.
      additionalProperties: false
      properties:
        nfe_environment:
          type: string
          enum:
            - production
            - homologation
          description: Ambiente da NFe (produção ou homologação).
          example: homologation
        end_consumer_operation_default:
          type: string
          enum:
            - normal
            - end_consumer
          description: Operação padrão para consumidor final.
          example: end_consumer
        buyer_presence_indicator_id:
          type: integer
          description: |
            ID do indicador de presença do comprador:
            - 0: Não se aplica
            - 1: Operação presencial
            - 2: Operação não presencial, pela Internet
            - 3: Operação não presencial, Teleatendimento
            - 4: NFC-e em operação com entrega em domicílio
            - 5: Operação presencial, fora do estabelecimento
            - 9: Operação não presencial, outros
          example: 0
        include_freight_in_pis_calculation:
          type: boolean
          description: Incluir frete no cálculo do PIS.
          example: false
        include_freight_in_cofins_calculation:
          type: boolean
          description: Incluir frete no cálculo do COFINS.
          example: false
        include_ipi_in_icms_calculation:
          type: boolean
          description: Incluir IPI no cálculo do ICMS.
          example: true
        is_default_customer_icms_taxpayer:
          type: boolean
          description: Cliente padrão é contribuinte do ICMS.
          example: true
        credit_calculation_rate:
          type: number
          format: float
          description: Alíquota aplicável no cálculo do crédito.
          example: 12.45
        pix_payment_code:
          type: string
          description: >
            Código de pagamento PIX:

            - "17": Pagamento Instantâneo (PIX)

            - "99": Outros


            **Importante:**

            - Campo permitido apenas para empresas cujo endereço seja de SP e
            CE.
          example: '17'
    ConfigNfeAuthenticationSettingsRequest:
      type: object
      title: Configurações de Autenticação (Request)
      description: Configurações de autenticação para NFCe (CSC Token) para atualização.
      additionalProperties: false
      properties:
        csc_token:
          type: string
          description: Token CSC (Código de Segurança do Contribuinte).
          example: ''
        token_id:
          type: string
          description: ID do token CSC.
          example: ''
    ConfigNfeStandardJustificationsRequest:
      type: object
      title: Justificativas Padrão (Request)
      description: >-
        Textos padrão para justificativas de cancelamento, inutilização e
        contingência para atualização.
      additionalProperties: false
      properties:
        unusability:
          type: string
          description: Texto padrão para inutilização de NFe.
          example: Texto padrão para inutilização
        cancelation:
          type: string
          description: Texto padrão para cancelamento de NFe.
          example: Texto padrão para cancelamento
        contingency:
          type: string
          description: Texto padrão para contingência de NFe.
          example: Texto padrão para contingência
    ConfigNfeXmlAuthorizedRequest:
      type: object
      title: XML Autorizado (Request)
      description: >-
        Informações de pessoa autorizada a baixar XML da NFe/NFCe para
        atualização.
      additionalProperties: false
      properties:
        type:
          type: string
          enum:
            - cnpj
            - cpf
          description: Tipo do documento (CPF ou CNPJ).
          example: cnpj
        identify:
          type: string
          description: CPF ou CNPJ da pessoa autorizada.
          example: '30398117000136'
      required:
        - type
        - identify
    ConfigNfeAccessSettingsRequest:
      type: object
      title: Configurações de Acesso (Request)
      description: Configurações de acesso e autorização para NFe para atualização.
      additionalProperties: false
      properties:
        allow_accountant_invalidate_invoices:
          type: boolean
          description: Permite ao contador invalidar faturas.
          example: true
        xml_authorizeds:
          type: array
          description: |
            Lista de pessoas autorizadas a baixar XML da NFe/NFCe. 
            Para remover todos os autorizados, envie um array vazio. 
            Se não enviado, nada será alterado.
          items:
            $ref: '#/components/schemas/ConfigNfeXmlAuthorizedRequest'
        shipping_modality_for_pos_id:
          type: integer
          description: |
            ID da modalidade de frete:
            - 0: Contratação do Frete por conta do Remetente (CIF)
            - 1: Contratação do Frete por conta do Destinatário (FOB)
            - 2: Contratação do Frete por conta de Terceiros
            - 3: Transporte Próprio por conta do Remetente
            - 4: Transporte Próprio por conta do Destinatário
            - 9: Sem frete
          example: 0
    ConfigNfeGeneralSettingsRequest:
      type: object
      title: Configurações Gerais da NFe (Request)
      description: >
        Dados para atualização das configurações gerais para emissão de
        NFe/NFCe.

        Todos os objetos e seus campos são opcionais. Se enviado será validado e
        atualizado,

        se não for enviado não será atualizado.
      additionalProperties: false
      properties:
        tributary_settings:
          $ref: '#/components/schemas/ConfigNfeTributarySettingsRequest'
        tax_settings:
          $ref: '#/components/schemas/ConfigNfeTaxSettingsRequest'
        authentication_settings:
          $ref: '#/components/schemas/ConfigNfeAuthenticationSettingsRequest'
        standard_justifications:
          $ref: '#/components/schemas/ConfigNfeStandardJustificationsRequest'
        access_settings:
          $ref: '#/components/schemas/ConfigNfeAccessSettingsRequest'
        nfce_service_fees:
          $ref: '#/components/schemas/ConfigNfeServiceFees'
        product_informations:
          $ref: '#/components/schemas/ConfigNfeProductInformations'
        sending_documents:
          $ref: '#/components/schemas/ConfigNfeSendingDocuments'
        state_registration_st:
          type: array
          description: |
            Inscrições estaduais para Substituição Tributária.
            Para remover todas, envie um array vazio.
            Não pode conter estados repetidos.
            Se não enviado, nada será alterado.
          items:
            $ref: '#/components/schemas/ConfigNfeStateRegistrationSt'
        transaction_intermediaries:
          type: array
          description: |
            Lista de intermediadores de transação.
            Para remover todos, envie um array vazio.
            Se não enviado, nada será alterado.
          items:
            $ref: '#/components/schemas/ConfigNfeTransactionIntermediary'
        specific_settings:
          $ref: '#/components/schemas/ConfigNfeSpecificSettings'
        calculation_basis:
          $ref: '#/components/schemas/ConfigNfeCalculationBasis'
        payment_settings:
          $ref: '#/components/schemas/ConfigNfePaymentSettings'
    Kds:
      type: object
      description: Representa um KDS.
      properties:
        id:
          type: integer
          description: Identificador único do KDS na CPlug.
          example: 1
          readOnly: true
        name:
          type: string
          description: Nome do KDS.
          example: KDS Cozinha
        is_active:
          type: boolean
          description: Identificador se o KDS está ativo.
          example: true
        is_expedition:
          type: boolean
          description: Identificador se a expedição está ativo.
          example: true
        time_for_alert:
          type: integer
          description: >
            Tempo para alerta no KDS em minutos


            Se informar um valor diferente de zero, o KDS vai mostrar em
            vermelho os pedidos que estão em atraso conforme configurado aqui.
          example: 5
        created_at:
          type: string
          description: Data da criação do estoque.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da atualização do estoque.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    ProductApp:
      type: object
      title: Aplicativo em um produto
      description: Representa um aplicativo em um produto.
      properties:
        id:
          type: integer
          description: >
            Identificador único do aplicativo.


            Você pode localizar os IDs dos aplicativos no _endpoint_ de [lista
            de aplicativos](#tag/Applications/operation/get-apps).
          writeOnly: true
          example: 123
        app:
          type: object
          title: Aplicativo
          description: Representa um aplicativo.
          readOnly: true
          properties:
            id:
              type: integer
              description: Identificador único do aplicativo.
              example: 123
            name:
              type: string
              description: Nome do aplicativo.
              example: Totem
        category:
          type: object
          title: Categoria de um produto
          description: Representa uma categoria de um produto.
          readOnly: true
          properties:
            id:
              type: integer
              description: Identificador único da categoria.
              example: 123
            name:
              type: string
              description: Nome da categoria.
              example: Bebidas
        position:
          type: integer
          description: Posição deste produto que irá aparecer no aplicativo.
          example: 1
        shifts:
          type: array
          description: Lista de horário que está disponível este produto no aplicativo.
          items:
            $ref: '#/components/schemas/ProductAppShift'
        category_id:
          type: integer
          description: >
            Identificador único da categoria de um produto.


            Você pode localizar os IDs das categorias de produto no _endpoint_
            de [lista de categorias](#tag/Categories/operation/get-categories).
          example: 456
          writeOnly: true
        is_available_for_sale:
          type: boolean
          description: >-
            Indica se está disponível para a venda ou não deste produto no
            aplicativo.
          example: true
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
      required:
        - id
        - position
    ProductAppSingle:
      type: object
      title: Aplicativo em um produto
      description: Representa um aplicativo em um produto.
      properties:
        position:
          type: integer
          description: Posição deste produto que irá aparecer no aplicativo.
          example: 1
        category_id:
          type: integer
          description: >
            Identificador único da categoria de um produto.


            Você pode localizar os IDs das categorias de produto no _endpoint_
            de [lista de categorias](#tag/Categories/operation/get-categories).
          example: 456
          writeOnly: true
        is_available_for_sale:
          type: boolean
          description: >-
            Indica se está disponível para a venda ou não deste produto no
            aplicativo.
          example: true
        shifts:
          type: array
          description: Lista de horário que está disponível este produto no aplicativo.
          items:
            $ref: '#/components/schemas/ProductAppShift'
      required:
        - position
    Ncm:
      type: object
      title: NCM
      description: Representa um NCM.
      properties:
        id:
          type: integer
          description: ID do NCM.
          example: 1
        code:
          type: string
          description: Código do NCM.
          example: '01012100'
        description:
          type: string
          description: Descrição do NCM.
          example: 01012100 - Cavalos reprodutores de raça pura
    Origin:
      type: object
      title: ICMS de Origem
      description: Representa um ICMS de Origem.
      properties:
        id:
          type: integer
          description: ID do ICMS de Origem.
          example: 1
        description:
          type: string
          description: Descrição do ICMS de Origem.
          example: 0 - Nacional, exceto as indicadas nos códigos 3, 4, 5 e 8
    Cest:
      type: object
      title: CEST
      description: Representa um CEST.
      properties:
        id:
          type: integer
          description: ID do CEST.
          example: 6
        code:
          type: string
          description: Código do CEST.
          example: '0100500'
        description:
          type: string
          description: Descrição do CEST.
          example: 0100500 - Frisos, decalques, molduras e acabamentos
    ProductTaxSettings:
      type: object
      title: Configurações Fiscais do Produto
      description: Representa as configurações fiscais de um Produto.
      properties:
        ncm:
          $ref: '#/components/schemas/Ncm'
          default: null
        origin:
          $ref: '#/components/schemas/Origin'
          default: null
        cest:
          $ref: '#/components/schemas/Cest'
          default: null
        cfop:
          $ref: '#/components/schemas/Cfop'
          default: null
        net_weight:
          type: number
          format: float
          default: 0
          description: Peso líquido do produto.
          example: 12.123
        gross_weight:
          type: number
          format: float
          default: 0
          description: Peso bruto do produto.
          example: 11.333
        percent_fcp:
          type: number
          format: float
          default: 0
          description: Percentual do Fundo de Combate à Pobreza.
          example: 10.12
        percent_fcp_st:
          type: number
          format: float
          default: 0
          description: >-
            Percentual do Fundo de Combate à Pobreza para Substituição
            Tributária.
          example: 9.12
        percent_fcp_st_ret:
          type: number
          format: float
          default: 0
          description: >-
            Percentual do Fundo de Combate à Pobreza para Substituição
            Tributária Retida.
          example: 1.12
        groups:
          type: array
          description: Grupos de configurações fiscais por empresa.
          items:
            type: object
            required:
              - company
            properties:
              company:
                $ref: '#/components/schemas/RelationCompany'
              ipi_group:
                $ref: '#/components/schemas/IpiGroup'
                default: null
              icms_group:
                $ref: '#/components/schemas/IcmsGroup'
                default: null
              pis_cofins_group:
                $ref: '#/components/schemas/PisCofinsGroup'
                default: null
              issqn_group:
                $ref: '#/components/schemas/IssqnGroup'
                default: null
    ProductWithTaxSettings:
      type: object
      title: Produto com Configurações Fiscais
      description: Representa um produto com suas configurações fiscais.
      properties:
        id:
          type: integer
          description: Identificador único do produto.
          readOnly: true
          example: 8
        name:
          type: string
          description: Nome do produto.
          example: dolorem
        type:
          type: string
          description: |
            Tipo do produto.

            - `simple`: Produto simples.
            - `combo`: Produto combo.
          enum:
            - simple
            - combo
          example: simple
        description:
          type:
            - 'null'
            - string
          description: Descrição do produto.
          example: null
        sku:
          type: string
          description: Código SKU do produto.
          example: '2423'
        category:
          type: object
          description: Categoria do produto.
          properties:
            id:
              type: integer
              description: Identificador único da categoria.
              example: 2
            name:
              type: string
              description: Nome da categoria.
              example: Produção Interna
        image_url:
          type:
            - 'null'
            - string
          description: URL da imagem do produto.
          format: url
          example: null
        tax_settings:
          $ref: '#/components/schemas/ProductTaxSettings'
      required:
        - id
        - name
        - type
        - sku
        - category
        - tax_settings
    ProductTaxSettingsBody:
      type: object
      title: Configurações Fiscais do Produto
      description: Representa as configurações fiscais de um Produto.
      properties:
        ncm_id:
          type:
            - 'null'
            - integer
          default: null
          description: Identificador do código NCM.
          example: 12479
        origin_id:
          type:
            - 'null'
            - integer
          default: null
          description: Identificador da origem do produto.
          example: 2
        cest_id:
          type:
            - 'null'
            - integer
          default: null
          description: Identificador do código CEST.
          example: 1206
        cfop_code:
          type:
            - 'null'
            - string
          default: null
          description: Código CFOP do produto.
          example: '5101'
        net_weight:
          type: number
          format: float
          default: 0
          description: Peso líquido do produto.
          example: 12.123
        gross_weight:
          type: number
          format: float
          default: 0
          description: Peso bruto do produto.
          example: 11.333
        percent_fcp:
          type: number
          format: float
          default: 0
          description: Percentual do Fundo de Combate à Pobreza.
          example: 10.12
        percent_fcp_st:
          type: number
          format: float
          default: 0
          description: >-
            Percentual do Fundo de Combate à Pobreza para Substituição
            Tributária.
          example: 9.12
        percent_fcp_st_ret:
          type: number
          format: float
          default: 0
          description: >-
            Percentual do Fundo de Combate à Pobreza para Substituição
            Tributária Retida.
          example: 1.12
        groups:
          type: array
          description: Grupos de configurações fiscais por empresa.
          items:
            type: object
            required:
              - company_id
            properties:
              company_id:
                type: integer
                description: Identificador da empresa.
                example: 130
              ipi_group_id:
                type:
                  - 'null'
                  - integer
                default: null
                description: Identificador do grupo de IPI.
                example: 3
              icms_group_id:
                type:
                  - 'null'
                  - integer
                default: null
                description: Identificador do grupo de ICMS.
                example: 5
              pis_cofins_group_id:
                type:
                  - 'null'
                  - integer
                default: null
                description: Identificador do grupo de PIS/COFINS.
                example: 2
              issqn_group_id:
                type:
                  - 'null'
                  - integer
                default: null
                description: Identificador do grupo de ISSQN.
                example: null
    PriceListExpirationNoExpiration:
      type: object
      title: Sem validade
      description: Representa uma validade da lista de preços.
      properties:
        type:
          type: string
          description: 'Sem validade. valor fixo: `no_expiration_date`.'
          example: no_expiration_date
    PriceListExpirationInterval:
      type: object
      title: Intervalo
      description: Representa uma validade da lista de preços.
      properties:
        type:
          type: string
          description: 'Intervalo entre datas. valor fixo: `interval`.'
          example: interval
        initial_date:
          type: string
          description: Data inicial.
          format: date-time
          example: '2020-01-01T00:00:00-03:00'
        end_date:
          type: string
          description: Data final.
          format: date-time
          example: '2020-01-31T23:59:59-03:00'
    PriceListExpirationHour:
      type: object
      title: Por horário
      description: Representa uma validade da lista de preços.
      properties:
        type:
          type: string
          description: 'Faixa de horas. valor fixo: `hours`.'
          example: hours
        initial_hour:
          type: string
          description: Hora inicial no formato `H:i:s`.
          example: '09:30:51'
        time_end:
          type: string
          description: Hora de final no formato `H:i:s`.
          example: '18:30:55'
    PriceListExpirationSpecific:
      type: object
      title: Dia da semana e horário específicos
      description: Representa uma validade da lista de preços.
      properties:
        type:
          type: string
          description: 'Dia da semana e horário específicos. valor fixo: `specific`.'
          example: specific
        shifts:
          type: array
          description: Lista de períodos.
          items:
            type: object
            description: Representa uma período.
            properties:
              weekday:
                type: string
                description: |
                  Dia da semana.

                  Exemplo:

                  - `sunday`: Domingo
                  - `monday`: Segunda-feira
                  - `tuesday`: Terça-feita
                  - `wednesday`: Quarta-feira
                  - `thursday`: Quinta-feira
                  - `friday`: Sexta-feira
                  - `saturday`: Sábado
                enum:
                  - sunday
                  - monday
                  - tuesday
                  - wednesday
                  - thursday
                  - friday
                  - saturday
                example: wednesday
              initial_hour:
                type: string
                description: Hora inicial no formato `H:i:s`.
                example: '09:30:51'
              time_end:
                type: string
                description: Hora de final no formato `H:i:s`.
                example: '18:30:55'
    PriceList:
      type: object
      title: Lista de preços
      description: Representa uma lista de preços.
      properties:
        id:
          type: integer
          description: Identificador único da lista de preço.
          readOnly: true
          example: 123
        name:
          type: string
          minLength: 1
          maxLength: 50
          description: Nome da lista de preço.
          example: Minha lista
        position:
          type: integer
          description: Posição desta lista que irá aparecer.
          example: 1
        companies:
          readOnly: true
          type: array
          description: Lista de empresas que esta lista está associado.
          items:
            type: object
            description: Representa uma empresa.
            properties:
              id:
                type: integer
                description: Id único da empresa
                example: 123
              name:
                type: string
                description: Nome fantasia da empresa
                example: CPlug
              company_name:
                type: string
                description: Razão social da empresa
                example: ConnectPlug Desenvolvimento de Software LTDA
        customer_categories:
          readOnly: true
          type: array
          description: Lista de categorias de cliente que esta lista está associada.
          items:
            type: object
            description: Representa uma categoria de cliente.
            properties:
              id:
                type: integer
                description: Id único da categoria de cliente
                example: 123
              name:
                type: string
                description: Nome da categoria de cliente
                example: Ouro
        modules:
          readOnly: true
          type: array
          description: Lista de módulos.
          items:
            type: string
            description: Representa um módulo.
            enum:
              - delivery_withdrawal
              - delivery
              - attendance
              - point_of_sale
              - totem
              - integrations
          example:
            - delivery
            - point_of_sale
            - totem
        expiration:
          oneOf:
            - $ref: '#/components/schemas/PriceListExpirationNoExpiration'
            - $ref: '#/components/schemas/PriceListExpirationInterval'
            - $ref: '#/components/schemas/PriceListExpirationHour'
            - $ref: '#/components/schemas/PriceListExpirationSpecific'
        apps:
          readOnly: true
          type: array
          description: Lista de aplicativos.
          items:
            type: object
            description: Representa um aplicativo.
            properties:
              id:
                type: integer
                description: Identificador único do aplicativo
                example: 123
              name:
                type: string
                description: Nome do aplicativo.
                example: Totem entrada
              type:
                type: string
                enum:
                  - totem
                  - terminal
                  - server
                  - store
                description: Tipo do aplicativo.
                example: totem
        is_duplicating:
          type: boolean
          description: >
            Indica se a lista de preços está sendo duplicada. 


            Isso significa que há produtos sendo processados em uma fila de
            processamento.
          example: false
          readOnly: true
        deleted:
          type: boolean
          description: Indica se está apagado ou não.
          example: false
          readOnly: true
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    PriceListBody:
      type: object
      title: Lista de preços
      description: Representa uma lista de preços.
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 50
          description: Nome da lista de preço.
          example: Minha lista
        position:
          type: integer
          description: >
            Posição desta lista que irá aparecer.


            Se não enviar este campo, o sistema irá auto gerar ou vai manter a
            mesma posição.
          example: 1
        company_ids:
          writeOnly: true
          $ref: '#/components/schemas/ByCompany'
        customer_category_ids:
          writeOnly: true
          type: array
          description: >
            Id da categoria de cliente.


            Você pode localizar os IDs das categorias de cliente no _endpoint_
            de [listagem de categorias de
            clientes](#tag/CustomerCategory/operation/get-customer-categories).
          items:
            type: integer
            example: 1
          example:
            - 1
            - 2
            - 3
        modules:
          writeOnly: true
          type: array
          description: |
            Código do módulo.

            - `delivery_withdrawal`: Delivery - Retirada;
            - `delivery`: Delivery - Entrega;
            - `attendance`: Atendimento de Mesas;
            - `point_of_sale`: Balcão;
            - `totem`: Autoatendimento;
            - `integrations`: Integrações;
          items:
            type: string
            example: delivery
          example:
            - delivery
            - point_of_sale
        expiration:
          oneOf:
            - $ref: '#/components/schemas/PriceListExpirationNoExpiration'
            - $ref: '#/components/schemas/PriceListExpirationInterval'
            - $ref: '#/components/schemas/PriceListExpirationHour'
            - $ref: '#/components/schemas/PriceListExpirationSpecific'
        app_ids:
          writeOnly: true
          type: array
          description: >
            Id do aplicativo.


            Você pode localizar os IDs dos aplicativos no _endpoint_ de
            [listagem de aplicativos](#tag/Applications).
          items:
            type: integer
            example: 1
          example:
            - 1
            - 2
            - 3
      required:
        - name
        - expiration
    PriceListDuplicateBody:
      type: object
      title: Duplicação de lista de preços
      description: Representa a duplicação de uma lista de preços.
      properties:
        name:
          type: string
          description: |
            Nome para a nova lista de preços.
          example: Lista de preços duplicada
      required:
        - name
    PriceListProduct:
      type: object
      title: Produto
      description: Representa um produto de uma lista de preço.
      properties:
        product:
          description: Informações sobre o produto.
          $ref: '#/components/schemas/ProductSlim'
        option_type:
          description: Informações sobre as opções do produto.
          $ref: '#/components/schemas/ProductOptionType'
        unitary_value:
          description: Preço do produto nesta lista.
          $ref: '#/components/schemas/Money'
        created_at:
          type: string
          description: Data da adição do produto na lista.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização da lista.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    PriceListProductDeleteBody:
      type: object
      title: Lista de produtos na lista de preço
      description: Representa uma lista de produtos na lista de preço.
      properties:
        product_ids:
          type: array
          description: >
            Id do produto.


            Você pode localizar os IDs dos produtos no _endpoint_ de [listagem
            de produtos](#tag/Products/operation/get-products).
          items:
            type: integer
            example: 1
          example:
            - 1
            - 2
            - 3
    PriceListProductBody:
      type: object
      title: Produto
      description: Representa um produto na lista de preço.
      properties:
        id:
          type: integer
          description: Identificador único do produto.
          example: 123
        value:
          description: Preço do produto.
          $ref: '#/components/schemas/Money'
      required:
        - id
        - value
    PriceListProductPriceUpdateInBatchBody:
      type: object
      title: Atualização de preço de um produto de uma lista em massa
      description: >
        Atualização de preço de um produto de uma lista em massa.


        Somente um dos campos abaixo pode ser enviados, nunca os dois ao mesmo
        tempo.

        - value

        - percentage_value
      properties:
        product_ids:
          type: array
          description: >
            Id do produto. Se enviar este campo, somente irá atualizar os
            produtos que estão listados aqui, 

            caso contrário, irá atualizar todos os produtos da lista.


            Você pode localizar os IDs dos produtos no _endpoint_ de [listagem
            de produtos](#tag/Products/operation/get-products).
          items:
            type: integer
            example: 1
          example:
            - 1
            - 2
            - 3
        value:
          description: Preço do produto.
          $ref: '#/components/schemas/Money'
        percentage_value:
          type: number
          description: >
            Porcentagem a ser adicionado do valor do produto.


            ***Obs***: Quando o campo `action` = `same_price`, não enviar este
            campo.


            Ex: 11.50%. Irá adicionar ou diminuir em 11.50%, ou seja,
            Product.unitary_value +/- 11.50%.
          example: 11.5
        action:
          type: string
          description: |
            Tipo de ação para aplicar o preço.

            Exemplo:
            - `decrease_price`: Diminui em um valor ou uma porcentagem do valor;
            - `increase_price`: Adiciona um valor ou uma porcentagem ao valor;
            - `same_price`: Aplica um valor igual para os produtos.
          enum:
            - decrease_price
            - increase_price
            - same_price
          example: increase_price
    ProductPriceListOption:
      type: object
      title: Opção de um produto de uma lista de preço
      description: Representa uma opção de um produto de uma lista de preço.
      properties:
        id:
          type: integer
          description: Identificador único da opção.
          example: 123
        name:
          type: string
          description: Nome da opção.
          example: Branca
          readOnly: true
        image:
          readOnly: true
          type: string
          description: URL da imagem da opção.
          example: https://example.com/image.jpg
        attribute:
          type: object
          title: Atributo de um produto
          description: Representa um atributo de um produto.
          readOnly: true
          properties:
            id:
              type: integer
              description: Identificador único do atributo.
              example: 123
            name:
              type: string
              description: Nome do atributo.
              example: Cor
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
      required:
        - id
    PriceListProductAttributeOptionBody:
      type: object
      title: Opção
      description: Representa uma Opção de um Atributo.
      properties:
        id:
          type: integer
          description: Identificador único da opção.
          example: 123
        value:
          description: Valor unitário da opção.
          $ref: '#/components/schemas/Money'
      required:
        - id
        - value
    ProductPriceListGridOption:
      type: object
      title: Item da grade de preço
      description: Representa um item (opção) da grade de preço.
      properties:
        id:
          type: integer
          description: Identificador único da opção.
          example: 123
        name:
          type: string
          description: Nome da opção.
          example: Opção 1
        position:
          type: integer
          description: Posição do item na grade de preço.
          minimum: 0
          example: 0
    ProductPriceListGrid:
      type: object
      title: Grade de um produto de uma lista de preço
      description: Representa uma grade de um produto de uma lista de preço.
      properties:
        id:
          type: integer
          description: Identificador único da grade.
          example: 123
        order:
          type: integer
          description: Ordem da grade.
          example: 1
        image:
          readOnly: true
          type: string
          description: URL da imagem da grade.
          example: https://example.com/image.jpg
        options:
          readOnly: true
          type: array
          description: Lista de opções da grade.
          items:
            $ref: '#/components/schemas/ProductPriceListGridOption'
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    PriceListProductGridBody:
      type: object
      title: Grade de um produto de uma lista de preço
      description: Representa uma grade de um produto de uma lista de preço.
      properties:
        id:
          type: integer
          description: Identificador único da grade.
          example: 123
        value:
          description: Preço do produto.
          $ref: '#/components/schemas/Money'
      required:
        - id
        - value
    PriceListLog:
      type: object
      title: Histórico de modificações da lista de preço
      description: Histórico de modificações da lista de preço.
      properties:
        modified_at:
          type: string
          description: Data da modificação.
          format: date-time
          example: '2020-01-01T09:00:00-03:00'
        description:
          type: string
          description: Descrição da ação.
          example: Atualização na lista
        user:
          type: object
          title: Usuário que modificou a lista de preço
          description: Representa um usuário que modificou a lista de preço.
          properties:
            id:
              type: integer
              description: Identificador único do usuário.
              example: 123
            name:
              type: string
              description: Nome do usuário.
              example: Fulano de tal
    PriceListProductLog:
      type: object
      title: Histórico de modificações de preço
      description: Histórico de modificações de preço de um produto na lista de preço.
      properties:
        modified_at:
          type: string
          description: Data da modificação do preço.
          format: date-time
          example: '2020-01-01T09:00:00-03:00'
        description:
          type: string
          description: Descrição da ação.
          example: Atualização de preços na lista
        unitary_value:
          description: Preço do produto na lista de preço.
          $ref: '#/components/schemas/Money'
        user:
          type: object
          title: Usuário que modificou o preço do produto na lista
          description: Representa um usuário que modificou o preço do produto na lista.
          properties:
            id:
              type: integer
              description: Identificador único do usuário.
              example: 123
            name:
              type: string
              description: Nome do usuário.
              example: Fulano de tal
    PromotionList:
      type: object
      title: Dados da promoção
      description: Representa uma promoção.
      properties:
        id:
          type: integer
          description: Identificador único da promoção.
          example: 76
          readOnly: true
        name:
          type: string
          description: Nome da promoção.
          example: Promoção de Natal
        description:
          type:
            - string
            - 'null'
          description: Descrição da promoção.
          example: Leve 3 e pague 2
        type:
          type: string
          description: Tipo da promoção.
          example: TAKE_MORE_PAY_LESS
          enum:
            - TAKE_MORE_PAY_LESS
            - DISCOUNT_COUPON
            - ABOVE_VALUE_GET_DISCOUNT
            - ABOVE_AMOUNT_GET_DISCOUNT
            - ABOVE_VALUE_GET_PRODUCT
            - ABOVE_AMOUNT_GET_PRODUCT
        status:
          type: string
          description: Status da promoção.
          example: processed
          enum:
            - updating_vouchers
            - awaiting_voucher_processing
            - creating_vouchers
            - processed
        start_date:
          type: string
          format: date
          description: Data de início da promoção.
          example: '2024-10-12'
        end_date:
          type: string
          format: date
          description: Data de fim da promoção.
          example: '2025-11-12'
        created_at:
          type: string
          description: Data da criação.
          format: date-time
          readOnly: true
          example: '2025-06-25T12:31:46.000000Z'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2025-06-25T12:31:46.000000Z'
        deleted_at:
          type: string
          description: Data da exclusão.
          format: date-time
          readOnly: true
          example: '2025-06-25T12:31:46.000000Z'
        companies:
          type: array
          description: Lista de empresas participantes da promoção.
          items:
            $ref: '#/components/schemas/SlimCompany'
    PromotionSelectionsBody:
      description: >-
        Seleção de produtos e/ou categorias de produtos participantes da
        promoção.
      items:
        type: object
        properties:
          type:
            type: string
            description: Tipo da seleção.
            enum:
              - product
              - product_category
            example: product
          items:
            type: array
            description: Lista de IDs dos produtos ou categorias selecionados.
            minItems: 1
            items:
              properties:
                id:
                  type: integer
                  format: int64
                  description: ID do produto ou categoria.
                  example: 1
              required:
                - id
        required:
          - type
          - items
      example:
        - type: product
          items:
            - id: 1
            - id: 2
        - type: product_category
          items:
            - id: 1
            - id: 2
    PromotionTakeMorePayLessSettingsBody:
      title: TAKE_MORE_PAY_LESS
      description: >-
        Corpo da requisição para criar uma promoção do tipo
        `TAKE_MORE_PAY_LESS`.
      type: object
      properties:
        total_value:
          description: Valor total que será pago.
          $ref: '#/components/schemas/Money'
        product_amount:
          type: integer
          description: >-
            Quantidade que deverá haver no carrinho para que a promoção seja
            ativada
          example: 10
        is_optional:
          type: boolean
          description: Permite que a campanha seja opcional na venda.
          default: false
          example: true
        is_allowed_consider_attributes:
          type: boolean
          description: Indica se deve ser considerado os valores dos atributos do produto.
          default: false
          example: true
        is_cumulative_on_sale:
          type: boolean
          description: Indica se o desconto é cumulativo na venda.
          default: false
          example: true
        selections:
          minItems: 1
          $ref: '#/components/schemas/PromotionSelectionsBody'
      required:
        - total_value
        - product_amount
        - selections
    DiscountSettingsBody:
      description: Configurações do desconto
      type: object
      properties:
        scope:
          type: string
          description: Escopo do desconto, define onde ele será aplicado.
          default: sale
          enum:
            - product
            - sale
          example: product
        type:
          type: string
          description: Tipo de desconto.
          enum:
            - percentage
            - value
          default: percentage
          example: value
        value:
          description: >
            Valor do desconto.


            `Atenção` O campo deve ser informado apenas quando o `type` for
            `value`.
          $ref: '#/components/schemas/Money'
        percentage:
          type: number
          format: float
          description: >
            Percentual de desconto. Deve ser informado com no máximo 3 dígitos
            antes do ponto decimal e no máximo 2 casas depois.


            `Atenção` O campo deve ser informado apenas quando o `type` for
            `percentage`.
          example: 100
    PromotionDiscountCouponSettingsBody:
      title: DISCOUNT_COUPON
      description: Corpo da requisição para criar uma promoção do tipo `DISCOUNT_COUPON`.
      type: object
      properties:
        voucher_prefix:
          type: string
          description: >-
            Nome do cupom de desconto. Se não for informado, será gerado
            automaticamente.
          example: PROMO
          maxLength: 30
        vouchers_quantity:
          type: integer
          description: >-
            Informa a quantidade de cupons que serão gerados ou o limite de
            utilizações caso seja cupom único
          example: 10
          minimum: 1
          maximum: 999999
        discount:
          $ref: '#/components/schemas/DiscountSettingsBody'
        is_allowed_consider_attributes:
          type: boolean
          description: >
            Indica se deve ser considerado os valores dos atributos do produto.


            `Atenção` O campo deve ser informado apenas quando o `scope` for
            `product`.
          default: false
          example: true
        is_sequential_voucher:
          type: boolean
          description: >
            Caso `true` será adicionado um número sequencial no final do cupom,
            por exemplo: CUPOM1, CUPOM2, CUPOM3...


            `Atenção` Deve ser `true` apenas se o `voucher_prefix` for
            informado.
          default: false
          example: true
        selections:
          type: array
          description: |
            Seleção de produto ou categoria de produto participante da promoção.

            `Obrigatório` quando o `scope` for `product`.
          minItems: 1
          maxItems: 1
          items:
            type: object
            properties:
              type:
                type: string
                description: Tipo da seleção.
                enum:
                  - product
                  - product_category
                example: product
              items:
                type: array
                description: ID do produto ou categoria selecionado.
                items:
                  properties:
                    id:
                      type: integer
                      format: int64
                      description: ID do produto ou categoria.
                      example: 1
                  required:
                    - id
            required:
              - type
              - items
          example:
            - type: product
              items:
                - id: 1
      required:
        - vouchers_quantity
    PromotionAboveValueGetDiscountSettingsBody:
      title: ABOVE_VALUE_GET_DISCOUNT
      description: >-
        Corpo da requisição para criar uma promoção do tipo
        `ABOVE_VALUE_GET_DISCOUNT`.
      type: object
      properties:
        discount:
          $ref: '#/components/schemas/DiscountSettingsBody'
        min_value:
          description: Valor mínimo da venda
          $ref: '#/components/schemas/Money'
        is_optional:
          type: boolean
          description: Permite que a campanha seja opcional na venda.
          default: false
          example: true
        selections:
          $ref: '#/components/schemas/PromotionSelectionsBody'
      required:
        - min_value
    PromotionAboveAmountGetDiscountSettingsBody:
      title: ABOVE_AMOUNT_GET_DISCOUNT
      description: >-
        Corpo da requisição para criar uma promoção do tipo
        `ABOVE_AMOUNT_GET_DISCOUNT`.
      type: object
      properties:
        discount:
          $ref: '#/components/schemas/DiscountSettingsBody'
        product_amount:
          type: integer
          description: >-
            Quantidade que deverá haver no carrinho para que a promoção seja
            ativada
          example: 10
        is_optional:
          type: boolean
          description: Permite que a campanha seja opcional na venda.
          default: false
          example: true
        is_allowed_consider_attributes:
          type: boolean
          description: >
            Indica se deve ser considerado os valores dos atributos do produto.


            `Atenção` O campo deve ser informado apenas quando o `scope` for
            `product`.
          default: false
          example: true
        selections:
          $ref: '#/components/schemas/PromotionSelectionsBody'
      required:
        - product_amount
    PromotionFreebiesSettingsBody:
      title: Freebies Settings
      description: Configurações de brindes da promoção.
      type: object
      properties:
        freebies_max_quantity:
          type: integer
          description: Quantidade máxima de brindes.
          example: 10
          maximum: 255
        limit_freebies_by_personalized_amount:
          type: boolean
          description: >-
            Indica se deve limitar a quantidade de brindes de forma
            personalizada.
          default: false
          example: true
        freebies:
          type: array
          description: Brindes da promoção.
          minItems: 1
          items:
            type: object
            properties:
              product_id:
                type: integer
                format: int64
                description: ID do produto brinde.
                example: 1
              amount:
                type: integer
                description: Quantidade máxima
                example: 10
            required:
              - product_id
              - amount
          example:
            - product_id: 1
              amount: 10
            - product_id: 2
              amount: 5
      required:
        - freebies_max_quantity
        - freebies
    PromotionAboveValueGetProductSettingsBody:
      title: ABOVE_VALUE_GET_PRODUCT
      description: >-
        Corpo da requisição para criar uma promoção do tipo
        `ABOVE_VALUE_GET_PRODUCT`.
      type: object
      properties:
        min_value:
          description: Valor mínimo da venda
          $ref: '#/components/schemas/Money'
        is_optional:
          type: boolean
          description: Permite que a campanha seja opcional na venda.
          default: false
          example: true
        is_cumulative_on_sale:
          type: boolean
          description: Indica se o desconto é cumulativo na venda.
          default: false
          example: true
        freebies_settings:
          $ref: '#/components/schemas/PromotionFreebiesSettingsBody'
        selections:
          $ref: '#/components/schemas/PromotionSelectionsBody'
      required:
        - min_value
        - freebies_settings
    PromotionAboveAmountGetProductSettingsBody:
      title: ABOVE_AMOUNT_GET_PRODUCT
      description: >-
        Corpo da requisição para criar uma promoção do tipo
        `ABOVE_AMOUNT_GET_PRODUCT`.
      type: object
      properties:
        product_amount:
          type: integer
          description: >-
            Quantidade que deverá haver no carrinho para que a promoção seja
            ativada
          example: 10
        is_optional:
          type: boolean
          description: Permite que a campanha seja opcional na venda.
          default: false
          example: true
        is_cumulative_on_sale:
          type: boolean
          description: Indica se o desconto é cumulativo na venda.
          default: false
          example: true
        freebies_settings:
          $ref: '#/components/schemas/PromotionFreebiesSettingsBody'
        selections:
          $ref: '#/components/schemas/PromotionSelectionsBody'
      required:
        - product_amount
        - freebies_settings
    PromotionPriceRangesBody:
      title: Price Ranges
      description: Configurações de faixas de preço da promoção.
      items:
        type: object
        properties:
          min_quantity:
            type: integer
            description: Quantidade mínima de produtos.
            example: 1
          max_quantity:
            type: integer
            description: Quantidade máxima de produtos.
            example: 10
          value:
            description: Valor unitário que será aplicado aos produtos.
            $ref: '#/components/schemas/Money'
        required:
          - min_quantity
          - max_quantity
          - value
    PromotionProgressiveDiscountSettingsBody:
      title: PROGRESSIVE_DISCOUNT
      description: >-
        Corpo da requisição para criar uma promoção do tipo
        `PROGRESSIVE_DISCOUNT`.
      type: object
      properties:
        is_optional:
          type: boolean
          description: Permite que a campanha seja opcional na venda.
          default: false
          example: true
        is_allowed_consider_attributes:
          type: boolean
          description: Indica se deve ser considerado os valores dos atributos do produto.
          default: false
          example: true
        selections:
          minItems: 1
          $ref: '#/components/schemas/PromotionSelectionsBody'
        price_ranges:
          minItems: 1
          $ref: '#/components/schemas/PromotionPriceRangesBody'
      required:
        - selections
        - price_ranges
    SlimProductCategory:
      type: object
      description: Dados da categoria de produto.
      properties:
        id:
          type: integer
          description: Identificador único da categoria
          example: 1234
        name:
          type: string
          description: Nome da categoria.
          example: Frutas
    PromotionSelection:
      type: object
      properties:
        type:
          type: string
          description: Tipo da seleção.
          enum:
            - product
            - product_category
          example: product
        items:
          type: array
          description: Produtos ou categorias de produtos selecionados.
          items:
            anyOf:
              - $ref: '#/components/schemas/SlimProduct'
              - $ref: '#/components/schemas/SlimProductCategory'
    PromotionTakeMorePayLessSettings:
      type: object
      title: TAKE_MORE_PAY_LESS
      description: Configurações da promoção TAKE_MORE_PAY_LESS.
      properties:
        product_amount:
          type:
            - integer
          description: >-
            Quantidade que deverá haver no carrinho para que a promoção seja
            ativada.
          example: 10
        total_value:
          type:
            - object
          description: Valor total que será pago.
          $ref: '#/components/schemas/Money'
        is_allowed_consider_attributes:
          type: boolean
          description: Indica se deve ser considerado os valores dos atributos do produto.
          example: true
        is_optional:
          type: boolean
          description: Indica se a campanha é opcional na venda.
          example: false
        is_cumulative_on_sale:
          type: boolean
          description: Indica se o desconto é cumulativo na venda.
          example: false
        selections:
          type: array
          description: >-
            Lista de seleções de produtos e/ou categorias de produtos
            participantes da promoção.
          minItems: 1
          items:
            $ref: '#/components/schemas/PromotionSelection'
    DiscountSettings:
      type: object
      description: Configurações do desconto
      properties:
        type:
          type: string
          description: Tipo de desconto.
          example: percentage
          enum:
            - percentage
            - value
        value:
          type:
            - object
            - 'null'
          description: Valor do desconto.
          $ref: '#/components/schemas/Money'
        percentage:
          type:
            - number
            - 'null'
          format: float
          description: Percentual de desconto.
          example: 100
        scope:
          type: string
          description: Escopo do desconto, indica onde ele será aplicado.
          example: product
          enum:
            - product
            - sale
    PromotionDiscountCouponSettings:
      type: object
      title: DISCOUNT_COUPON
      description: Configurações da promoção DISCOUNT_COUPON.
      properties:
        discount:
          $ref: '#/components/schemas/DiscountSettings'
        vouchers_quantity:
          type:
            - integer
          description: >-
            Quantidade de cupons gerados ou o limite de utilizações caso seja
            cupom único.
          example: 10
        voucher_prefix:
          type:
            - string
            - 'null'
          description: Nome do cupom de desconto.
          example: PROMO
        is_allowed_consider_attributes:
          type: boolean
          description: Indica se deve ser considerado os valores dos atributos do produto.
          example: true
        is_sequential_voucher:
          type: boolean
          description: >
            Indica se o voucher é sequencial. Se `true` os vouchers criados
            possuem um número sequencial no final, por exemplo: CUPOM1, CUPOM2,
            CUPOM3...
          example: true
        selections:
          type: array
          description: Seleção de produto ou categoria de produto participante da promoção.
          items:
            type: object
            properties:
              type:
                type: string
                description: Tipo da seleção.
                enum:
                  - product
                  - product_category
                example: product
              items:
                type: array
                description: Produto ou categoria de produto selecionado.
                items:
                  oneOf:
                    - $ref: '#/components/schemas/SlimProduct'
                    - $ref: '#/components/schemas/SlimProductCategory'
    PromotionAboveValueGetDiscountSettings:
      type: object
      title: ABOVE_VALUE_GET_DISCOUNT
      description: Configurações da promoção ABOVE_VALUE_GET_DISCOUNT.
      properties:
        discount:
          $ref: '#/components/schemas/DiscountSettings'
        min_value:
          type:
            - object
          description: Valor mínimo da venda.
          $ref: '#/components/schemas/Money'
        is_optional:
          type: boolean
          description: Indica se a campanha é opcional na venda.
          example: false
        selections:
          type: array
          description: >-
            Lista de seleções de produtos e/ou categorias de produtos
            participantes da promoção.
          items:
            $ref: '#/components/schemas/PromotionSelection'
    PromotionAboveAmountGetDiscountSettings:
      type: object
      title: ABOVE_AMOUNT_GET_DISCOUNT
      description: Configurações da promoção ABOVE_AMOUNT_GET_DISCOUNT.
      properties:
        discount:
          $ref: '#/components/schemas/DiscountSettings'
        product_amount:
          type:
            - integer
          description: >-
            Quantidade que deverá haver no carrinho para que a promoção seja
            ativada.
          example: 10
        is_allowed_consider_attributes:
          type: boolean
          description: Indica se deve ser considerado os valores dos atributos do produto.
          example: true
        is_optional:
          type: boolean
          description: Indica se a campanha é opcional na venda.
          example: false
        selections:
          type: array
          description: >-
            Lista de seleções de produtos e/ou categorias de produtos
            participantes da promoção.
          items:
            $ref: '#/components/schemas/PromotionSelection'
    PromotionFreebie:
      type: object
      title: Brinde
      description: Representa um brinde de uma promoção.
      properties:
        id:
          type: integer
          description: Identificador único do brinde.
          readOnly: true
          example: 123
        promotion_id:
          type: integer
          description: Identificador único da promoção relacionada ao brinde.
          readOnly: true
          example: 123
        created_at:
          type: string
          description: Data da criação.
          format: date-time
          readOnly: true
          example: '2025-06-25T12:31:46.000000Z'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2025-06-25T12:31:46.000000Z'
        deleted_at:
          type: string
          description: Data da exclusão.
          format: date-time
          readOnly: true
          example: '2025-06-25T12:31:46.000000Z'
        product:
          description: Dados do produto relacionado ao brinde.
          $ref: '#/components/schemas/SlimProduct'
    PromotionFreebiesSettings:
      type: object
      title: ABOVE_VALUE_GET_PRODUCT
      description: Configurações da promoção ABOVE_VALUE_GET_PRODUCT.
      properties:
        freebies_max_quantity:
          type:
            - integer
          description: Quantidade máxima de brindes.
          example: 10
        limit_freebies_by_personalized_amount:
          type: boolean
          description: >-
            Indica se deve limitar a quantidade de brindes de forma
            personalizada.
          example: false
        freebies:
          type: array
          description: Lista de brindes da promoção.
          items:
            $ref: '#/components/schemas/PromotionFreebie'
    PromotionAboveValueGetProductSettings:
      type: object
      title: ABOVE_VALUE_GET_PRODUCT
      description: Configurações da promoção ABOVE_VALUE_GET_PRODUCT.
      properties:
        min_value:
          type:
            - object
          description: Valor mínimo da venda.
          $ref: '#/components/schemas/Money'
        is_optional:
          type: boolean
          description: Indica se a campanha é opcional na venda.
          example: false
        is_cumulative_on_sale:
          type: boolean
          description: Indica se o desconto é cumulativo na venda.
          example: false
        selections:
          type: array
          description: >-
            Lista de seleções de produtos e/ou categorias de produtos
            participantes da promoção.
          items:
            $ref: '#/components/schemas/PromotionSelection'
        freebies_settings:
          $ref: '#/components/schemas/PromotionFreebiesSettings'
    PromotionAboveAmountGetProductSettings:
      type: object
      title: ABOVE_AMOUNT_GET_PRODUCT
      description: Configurações da promoção ABOVE_AMOUNT_GET_PRODUCT.
      properties:
        product_amount:
          type:
            - integer
          description: >-
            Quantidade que deverá haver no carrinho para que a promoção seja
            ativada.
          example: 10
        is_optional:
          type: boolean
          description: Indica se a campanha é opcional na venda.
          example: false
        is_cumulative_on_sale:
          type: boolean
          description: Indica se o desconto é cumulativo na venda.
          example: false
        selections:
          type: array
          description: >-
            Lista de seleções de produtos e/ou categorias de produtos
            participantes da promoção.
          items:
            $ref: '#/components/schemas/PromotionSelection'
        freebies_settings:
          $ref: '#/components/schemas/PromotionFreebiesSettings'
    PromotionPriceRange:
      type: object
      properties:
        id:
          type: integer
          description: Identificador único da faixa de preço.
          example: 76
          readOnly: true
        promotion_id:
          type: integer
          description: Identificador único da promoção.
          example: 76
          readOnly: true
        min_quantity:
          type: integer
          description: Quantidade mínima de produtos.
          example: 1
        max_quantity:
          type: integer
          description: Quantidade máxima de produtos.
          example: 10
        value:
          type:
            - object
          description: Valor unitário que será aplicado aos produtos.
          $ref: '#/components/schemas/Money'
    PromotionProgressiveDiscountSettings:
      type: object
      title: PROGRESSIVE_DISCOUNT
      description: Configurações da promoção PROGRESSIVE_DISCOUNT.
      properties:
        is_optional:
          type: boolean
          description: Indica se a campanha é opcional na venda.
          example: false
        is_allowed_consider_attributes:
          type: boolean
          description: Indica se deve ser considerado os valores dos atributos do produto.
          example: true
        price_ranges:
          type: array
          description: Lista de faixas de preço.
          minItems: 1
          items:
            $ref: '#/components/schemas/PromotionPriceRange'
        selections:
          type: array
          description: >-
            Lista de seleções de produtos e/ou categorias de produtos
            participantes da promoção.
          minItems: 1
          items:
            $ref: '#/components/schemas/PromotionSelection'
    Promotion:
      type: object
      title: Dados da promoção
      description: Representa uma promoção.
      properties:
        id:
          type: integer
          description: Identificador único da promoção.
          example: 76
          readOnly: true
        name:
          type: string
          description: Nome da promoção.
          example: Promoção de Natal
        description:
          type:
            - string
            - 'null'
          description: Descrição da promoção.
          example: Leve 3 e pague 2
        type:
          type: string
          description: Tipo da promoção.
          example: TAKE_MORE_PAY_LESS
          enum:
            - TAKE_MORE_PAY_LESS
            - DISCOUNT_COUPON
            - ABOVE_VALUE_GET_DISCOUNT
            - ABOVE_AMOUNT_GET_DISCOUNT
            - ABOVE_VALUE_GET_PRODUCT
            - ABOVE_AMOUNT_GET_PRODUCT
        status:
          type: string
          description: Status da promoção.
          example: processed
          enum:
            - updating_vouchers
            - awaiting_voucher_processing
            - creating_vouchers
            - processed
        is_active:
          type: boolean
          description: Indica se a promoção está ativa.
          example: true
        can_edit:
          type: boolean
          description: >-
            Indica se a promoção pode ser editada. Quando `false`, nenhum dado
            da promoção pode ser alterado.
          example: true
        start_date:
          type: string
          format: date
          description: Data de início da promoção.
          example: '2024-10-12'
        end_date:
          type: string
          format: date
          description: Data de fim da promoção.
          example: '2025-11-12'
        is_cumulative:
          type: boolean
          description: Indica se o desconto é cumulativo na venda.
          example: true
        customer_activation_rule_type:
          type:
            - string
            - 'null'
          description: >
            Define quais são as regras para a ativação com cliente.


            `IDENTIFIED_CUSTOMER` A promoção será ativa somente com um cliente
            identificado na venda.


            `INTEGRATION_FIDELITY` A promoção será ativa somente com um cliente
            na venda que já tenha um cadastro no programa de fidelidade.
          example: IDENTIFIED_CUSTOMER
          enum:
            - IDENTIFIED_CUSTOMER
            - INTEGRATION_FIDELITY
        restriction_type:
          type:
            - string
            - 'null'
          description: >-
            Tipo de restrição. Indica qual é a restrição para a ativação da
            promoção.
          example: WEEK_DAYS
          enum:
            - WEEK_DAYS
            - BIRTHDAY
        allowed_week_days:
          type:
            - array
            - 'null'
          description: Dias da semana permitidos para a ativação da promoção.
          items:
            type: string
            enum:
              - monday
              - tuesday
              - wednesday
              - thursday
              - friday
              - saturday
              - sunday
          example:
            - monday
            - tuesday
        activation_birthday_monthly_limit:
          type:
            - integer
            - 'null'
          description: Limite de ativações mensais durante o mês do aniversário do cliente.
          example: 10
        activation_birthday_daily_limit:
          type:
            - integer
            - 'null'
          description: Limite de ativações diárias durante o mês do aniversário do cliente.
          example: 5
        activation_limit:
          type:
            - integer
            - 'null'
          description: Limite de ativações da promoção.
          example: 10
        activation_limit_per_user:
          type:
            - integer
            - 'null'
          description: Limite de ativações por usuário.
          example: 1
        companies:
          type: array
          description: Lista de empresas participantes da promoção.
          items:
            $ref: '#/components/schemas/SlimCompany'
        settings:
          oneOf:
            - $ref: '#/components/schemas/PromotionTakeMorePayLessSettings'
            - $ref: '#/components/schemas/PromotionDiscountCouponSettings'
            - $ref: '#/components/schemas/PromotionAboveValueGetDiscountSettings'
            - $ref: '#/components/schemas/PromotionAboveAmountGetDiscountSettings'
            - $ref: '#/components/schemas/PromotionAboveValueGetProductSettings'
            - $ref: '#/components/schemas/PromotionAboveAmountGetProductSettings'
            - $ref: '#/components/schemas/PromotionProgressiveDiscountSettings'
        exported_at:
          type:
            - string
            - 'null'
          format: date-time
          description: Data da exportação dos vouchers.
          readOnly: true
          example: '2025-06-25T12:31:46.000000Z'
        created_at:
          type: string
          description: Data da criação.
          format: date-time
          readOnly: true
          example: '2025-06-25T12:31:46.000000Z'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2025-06-25T12:31:46.000000Z'
        deleted_at:
          type: string
          description: Data da exclusão.
          format: date-time
          readOnly: true
          example: '2025-06-25T12:31:46.000000Z'
    PromotionDiscountCouponUpdateRequest:
      type: object
      description: >-
        Corpo da requisição para atualizar uma promoção do tipo
        `DISCOUNT_COUPON`.
      title: DISCOUNT_COUPON
      properties:
        vouchers_quantity:
          type: integer
          description: >
            Informa a quantidade de cupons que serão gerados ou o limite de
            utilizações caso seja cupom único


            `Atenção` Não é permitido informar uma quantidade de cupons menor do
            que já foi gerado para a promoção.
          example: 10
          minimum: 1
          maximum: 999999
        discount:
          $ref: '#/components/schemas/DiscountSettingsBody'
        is_allowed_consider_attributes:
          type: boolean
          description: >
            Indica se deve ser considerado os valores dos atributos do produto.


            `Atenção` Deve ser `true` apenas caso a promoção tenha o `scope`
            igual a `product` ou esteja sendo alterado de `sale` para `product`.
          example: true
        is_sequential_voucher:
          type: boolean
          description: >
            Caso `true` será adicionado um número sequencial no final do cupom,
            por exemplo: CUPOM1, CUPOM2, CUPOM3...


            `Atenção` Deve ser `true` apenas caso a promoção tenha um
            `voucher_prefix` ou ele seja enviado na requisição.
          example: true
        voucher_prefix:
          type: string
          description: Nome do cupom de desconto.
          example: PROMO
          maxLength: 30
        selections:
          type: array
          maxItems: 1
          minItems: 1
          description: >
            Seleção de produto ou categoria de produto participante da promoção.


            `Obrigatório` quando o `scope` for alterado de `sale` para
            `product`.
          items:
            type: object
            properties:
              type:
                type: string
                description: Tipo da seleção.
                enum:
                  - product
                  - product_category
                example: product
              items:
                type: array
                description: Lista de IDs dos produtos ou categorias selecionados.
                maxItems: 1
                minItems: 1
                items:
                  properties:
                    id:
                      type: integer
                      format: int64
                      description: ID do produto ou categoria.
                      example: 1
                  required:
                    - id
            required:
              - type
              - items
          example:
            - type: product
              items:
                - id: 1
    PromotionUpdateRequest:
      type: object
      title: Corpo da requisição para atualizar uma promoção.
      properties:
        name:
          type: string
          description: Nome da promoção.
          example: Promoção de Natal
          minLength: 2
          maxLength: 50
        description:
          type: string
          description: Descrição da promoção.
          example: Promoção de 10% de desconto
          maxLength: 255
        start_date:
          type: string
          description: >-
            Data de início da promoção, deve ser maior ou igual ao `end_date`.
            Formato "YYYY-MM-DD".
          example: '2021-01-01'
        end_date:
          type: string
          description: >-
            Data de término da promoção, deve ser maior ou igual ao
            `start_date`. Formato "YYYY-MM-DD".
          example: '2021-02-01'
        is_cumulative:
          type: boolean
          description: Permite que outras promoções sejam ativadas na mesma venda.
          example: true
        is_optional:
          type: boolean
          description: >
            Permite que a campanha seja opcional na venda.


            `Atenção` O campo não deve ser informado quando o tipo da promoção
            for `DISCOUNT_COUPON`. Caso contrário, será retornado um erro.
          example: true
        company_ids:
          type: array
          description: IDs das empresas participantes da promoção.
          items:
            type: integer
            format: int64
          example:
            - 1
            - 2
            - 3
        customer_activation_rule_type:
          type: string
          description: >
            Define quais serão as regras para a ativação com cliente.


            `IDENTIFIED_CUSTOMER` A promoção será ativa somente com um cliente
            identificado na venda.


            `INTEGRATION_FIDELITY` A promoção será ativa somente com um cliente
            na venda que já tenha um cadastro no programa de fidelidade. Deve
            ser informado apenas caso a empresa tenha integração com o sistema
            de fidelidade.
          enum:
            - IDENTIFIED_CUSTOMER
            - INTEGRATION_FIDELITY
          example: IDENTIFIED_CUSTOMER
        settings:
          type: object
          description: Configurações da promoção.
          oneOf:
            - $ref: '#/components/schemas/PromotionDiscountCouponUpdateRequest'
    Voucher:
      type: object
      description: Dados do voucher.
      properties:
        id:
          type: integer
          description: Identificador único do voucher
          readOnly: true
          example: 1234
        code:
          type: string
          description: Código do voucher.
          example: '123456'
        status:
          type: string
          description: Status do voucher.
          example: unused
          enum:
            - unused
            - waiting
            - used
        promotion_id:
          type: integer
          description: Identificador único da promoção relacionada ao voucher.
          readOnly: true
          example: 123
    Embed:
      type: object
      title: Embed
      description: Dados para embedar o relatório
      properties:
        url:
          type: string
          description: URL para embedar.
          example: https://localhost
    Report:
      type: object
      title: Relatório
      description: Dados do relatório
      properties:
        type:
          type: string
          description: |
            Tipo do produto.

            - `embed`: Retorna URL para que seja embedado.
          readOnly: true
          example: embed
          enum:
            - embed
        data:
          type: object
          description: Dados do relatório.
          oneOf:
            - $ref: '#/components/schemas/Embed'
    Purchase:
      type: object
      title: Compra
      description: Representa uma compra.
      properties:
        id:
          type: integer
          description: Identificador único da compra.
          readOnly: true
          example: 123
        registration_date:
          type: string
          description: Data da compra.
          format: date
          example: '2025-01-14'
        supplier:
          readOnly: true
          type: object
          description: Dados do fornecedor.
          properties:
            id:
              type: integer
              description: Id único do fornecedor.
              example: 123
            name:
              type: string
              description: Nome do fornecedor.
              example: CPlug Supplier
        invoice:
          readOnly: true
          type: object
          description: Dados do frete.
          properties:
            serie:
              type: string
              description: Número de série da nota fiscal
              example: '1'
            number:
              type: string
              description: Número da nota fiscal
              example: '789'
        code:
          type: integer
          description: Código do da compra.
          example: 456
          minimum: 1
        value_of_items:
          description: Valor total dos itens da compra.
          $ref: '#/components/schemas/Money'
        discount:
          description: Valor do desconto.
          $ref: '#/components/schemas/Money'
        other_expenses_value:
          description: Valor total de outras despesas.
          $ref: '#/components/schemas/Money'
        total:
          description: Valor total da compra.
          $ref: '#/components/schemas/Money'
        notes:
          type: string
          description: Observações.
          example: my notes
        shipping:
          readOnly: true
          type: object
          description: Dados do frete.
          properties:
            pay_shipping:
              type: boolean
              description: Frete é pago?
              example: true
            carrier:
              type: object
              description: Dados da transportadora.
              properties:
                id:
                  type: integer
                  description: Id único da transportadora
                  example: 123
                name:
                  type: string
                  description: Nome da transportadora
                  example: CPlug Logistics
            shipping_value:
              description: Valor do frete.
              $ref: '#/components/schemas/Money'
        status:
          type: string
          enum:
            - pending
            - received
          description: |
            Status da compra.

            Exemplo:
              - `pending` Aguardando.
              - `received` Entregue.
          example: pending
        order_number:
          type: string
          description: Código do pedido de compra.
          example: code123
        has_stock_movement_out:
          type: boolean
          description: Indica se a compra tem movimentação de estoque de saída.
          example: true
        were_stock_movements_deleted:
          type: boolean
          description: >
            Se as movimentações de estoque foram apagadas.


            **Nota:** Este campo só aparece quando o registro está excluído
            (`deleted=true`).
          example: true
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    PurchaseItemAttributeOptionBody:
      type: object
      description: Representa uma opção de um atributo.
      properties:
        option_id:
          type: integer
          description: Id único da opção
          example: 123
      required:
        - option_id
    PurchaseItemAttributeBody:
      type: object
      description: Representa um atributo de um item da compra.
      properties:
        attribute_id:
          type: integer
          description: ID único do atributo do item.
          example: 2
        options:
          type: array
          description: Lista de opções de um atributo.
          items:
            $ref: '#/components/schemas/PurchaseItemAttributeOptionBody'
      required:
        - attribute_id
        - options
    PurchaseItemBody:
      type: object
      description: Representa um item de compra.
      properties:
        item_id:
          type: integer
          description: Id único do item
          example: 123
        amount:
          type: number
          description: quantidade
          example: 5
        unitary_cost_value:
          description: Valor do custo unitário do item.
          $ref: '#/components/schemas/Money'
        total_value:
          description: |
            Valor total do item.

            É a multiplicação da quantidade pelo valor unitário deste item.

            Fórmula: `total_value = amount * unitary_value`
          $ref: '#/components/schemas/Money'
        unitary_sale_value:
          description: >
            Valor de venda do item. 


            Só deve ser enviado caso queira alterar o preço de venda e se na
            configuração do ERP está habilitado esta opção.
          $ref: '#/components/schemas/Money'
        expiration_date:
          type: string
          description: Data de validado do item.
          format: date
          example: '2025-01-14'
        stock_id:
          type: integer
          description: >
            ID único do estoque.


            Você pode localizar o ID do estoque no _endpoint_ de [listagem de
            estoques](#tag/Stocks/operation/get-stocks).
          example: 1234
        status_detail_id:
          type: integer
          description: >
            ID único do detalhe do status.


            Você pode localizar o ID do detalhe do status no _endpoint_ de 

            [listagem de detalhes do
            status](#tag/Status/operation/get-status-details) com o filtro
            `system_area_type`=`stock`.
          example: 37
        status_id:
          type: integer
          description: >
            ID único do do status.


            Você pode localizar o ID do status no _endpoint_ de [listagem de
            status](#tag/Status/operation/get-status).
          example: 1
        arrival_forecast_date:
          type: string
          description: Previsão de entrega do item.
          format: date
          example: '2025-03-14'
        attributes:
          type: array
          description: Lista de atributos deste item nesta compra.
          items:
            $ref: '#/components/schemas/PurchaseItemAttributeBody'
    PurchaseInstallmentAccountPlanDescriptionsBody:
      type: object
      description: Representa uma parcela do pagamento.
      properties:
        account_plan_id:
          type: integer
          description: ID do plano de contas.
          example: 1
        center_cost_id:
          type: integer
          description: >
            Id único do centro de custo.


            Você pode localizar os IDs dos centro de custos no _endpoint_ de
            [listagem de centro deo
            custo](#tag/CostCenters/operation/get-cost-centers).
          example: 1
        value:
          description: Valor associado ao centro de custo.
          $ref: '#/components/schemas/Money'
    PurchaseInstallmentBody:
      type: object
      description: Representa uma parcela do pagamento.
      properties:
        due_date:
          type: string
          description: Data do vencimento da parcela.
          format: date
          example: '2025-01-30'
        value:
          description: Valor da parcela
          $ref: '#/components/schemas/Money'
        is_paid:
          type: boolean
          description: Está paga esta parcela?
          example: false
        notes:
          type: string
          description: Observação da parcela
          example: pagamento à vista
          maximum: 500
        account_plan_descriptions:
          type: array
          items:
            $ref: >-
              #/components/schemas/PurchaseInstallmentAccountPlanDescriptionsBody
          description: Lista de planos de contas associados à movimentação financeira.
      required:
        - due_date
        - value
    PurchasePaymentBody:
      type: object
      description: Representa os métodos de pagamento.
      properties:
        payment_method_id:
          type: integer
          description: >
            ID único do método de pagamento.


            Você pode localizar os IDs das formas de pagamento no _endpoint_ de
            [listagem de formas de
            pagamento](#tag/Payments/operation/get-payments).
          example: 1
        total_value:
          description: Valor total do pagamento
          $ref: '#/components/schemas/Money'
        installments:
          type: array
          description: Lista de parcelamento.
          items:
            $ref: '#/components/schemas/PurchaseInstallmentBody'
        bank_account_id:
          type: number
          description: >
            ID único da conta bancária


            Você pode localizar os IDs das contas bancárias no _endpoint_ de
            [listagem de contas
            bancárias](#tag/BankAccounts/operation/get-bank-accounts).
          example: 5
        card_brand_id:
          type: integer
          description: >
            ID único da bandeira do cartão de crédito.


            Você pode localizar os IDs das bandeiras do cartão de crédito no
            _endpoint_ de [listagem de bandeiras de
            cartão](#tag/CardBrands/operation/get-cards-brands).


            *Obs*: Obrigatório quando o método de pagamento for cartão.
          example: 1
      required:
        - payment_method_id
        - total_value
        - installments
    PurchaseBody:
      type: object
      title: Corpo requisição da criação de uma compra
      description: Corpo requisição da criação de uma compra.
      properties:
        supplier_id:
          type: integer
          description: >
            ID único do fornecedor.


            Você pode localizar os IDs dos fornecedores no _endpoint_ de
            [listagem de fornecedores](#tag/Suppliers/operation/get-suppliers).
          example: 456
        registration_date:
          type: string
          description: Data da compra.
          format: date
          example: '2025-01-14'
        items:
          type: array
          description: Lista de produtos desta compra.
          items:
            $ref: '#/components/schemas/PurchaseItemBody'
        invoice:
          type: object
          description: Dados da nota fiscal.
          properties:
            serie:
              type: string
              description: Número de série da nota fiscal
              example: '1'
            number:
              type: string
              description: Número da nota fiscal
              example: '789'
        code:
          type: integer
          description: Código do da compra.
          example: 456
          minimum: 1
        value_of_items:
          description: Valor total dos itens da compra.
          $ref: '#/components/schemas/Money'
        discount:
          description: Valor do desconto.
          $ref: '#/components/schemas/Money'
        other_expenses_value:
          description: Valor total de outras despesas.
          $ref: '#/components/schemas/Money'
        total:
          description: Valor total da compra.
          $ref: '#/components/schemas/Money'
        notes:
          type: string
          description: Observações.
          example: my notes
        shipping:
          type: object
          description: Dados do frete.
          properties:
            pay_shipping:
              type: boolean
              description: Frete é pago?
              example: true
            carrier_id:
              type: integer
              description: ID único da transportadora.
              example: 1234
            shipping_value:
              description: Valor do frete.
              $ref: '#/components/schemas/Money'
        payments:
          type: array
          description: Lista de pagamentos desta compra.
          items:
            $ref: '#/components/schemas/PurchasePaymentBody'
      required:
        - supplier_id
        - registration_date
        - items
        - payments
    PurchaseDetailItemAttributeOption:
      type: object
      description: Representa uma opção de um atributo.
      properties:
        id:
          type: integer
          description: >
            Id único da relação entre a opção e a compra.


            *Obs*: Se estiver atualizando esta opção, este campo deve ser
            enviado.
          example: 789
        option_id:
          type: integer
          description: Id único da opção
          example: 147
        name:
          type: string
          description: Nome da opção.
          example: Branca
          readOnly: true
    PurchaseDetailItemAttribute:
      type: object
      description: Representa um atributo de um item da compra.
      properties:
        attribute_id:
          type: integer
          description: ID único do atributo do item.
          example: 2
        name:
          type: string
          description: Nome do atributo do item.
          example: Cor
          readOnly: true
        options:
          type: array
          description: Lista de opções de um atributo.
          items:
            $ref: '#/components/schemas/PurchaseDetailItemAttributeOption'
    PurchaseDetailItem:
      type: object
      description: Representa um item de compra.
      properties:
        id:
          type: integer
          description: >
            Id único da relação entre o item e a compra


            *Obs*: Se estiver atualizando este item, este campo deve ser
            enviado.
          example: 123
        item_id:
          type: integer
          description: Id único do item
          example: 456
        amount:
          type: number
          description: quantidade
          example: 5
        unitary_cost_value:
          description: Valor do custo unitário do item.
          $ref: '#/components/schemas/Money'
        total_value:
          description: |
            Valor total do item.

            É a multiplicação da quantidade pelo valor unitário deste item.

            Fórmula: `total_value = amount * unitary_value`
          $ref: '#/components/schemas/Money'
        unitary_sale_value:
          description: >
            Valor de venda do item. 


            Só deve ser enviado caso queira alterar o preço de venda e se na
            configuração do ERP está habilitado esta opção.
          $ref: '#/components/schemas/Money'
        expiration_date:
          type: string
          description: Data de validado do item.
          format: date
          example: '2025-01-14'
        stock_id:
          type: integer
          writeOnly: true
          description: >
            ID único do estoque.


            Você pode localizar o ID do estoque no _endpoint_ de [listagem de
            estoques](#tag/Stocks/operation/get-stocks).
          example: 1234
        stock:
          type: object
          description: Representa um estoque.
          readOnly: true
          properties:
            id:
              type: integer
              description: ID único do estoque
              example: 1
            name:
              type: string
              description: Nome do estoque
              example: Estoque padrão
        status:
          type: object
          description: Representa um status.
          readOnly: true
          properties:
            id:
              type: integer
              description: ID único do status
              example: 1
            name:
              type: string
              description: Nome do status
              example: Aberto
        status_id:
          type: integer
          description: >
            ID único do do status.


            Você pode localizar o ID do status no _endpoint_ de [listagem de
            status](#tag/Status/operation/get-status).
          example: 1
          writeOnly: true
        status_detail:
          type: object
          description: Representa o detalhe do status.
          readOnly: true
          properties:
            id:
              type: integer
              description: ID único do detalhe do status
              example: 37
            name:
              type: string
              description: Nome do detalhe do status
              example: Aguardando fornecedor
        status_detail_id:
          type: integer
          description: >
            ID único do detalhe do status.


            Você pode localizar o ID do detalhe do status no _endpoint_ de 

            [listagem de detalhes do
            status](#tag/Status/operation/get-status-details) com o filtro
            `system_area_type`=`stock`.
          example: 37
          writeOnly: true
        arrival_forecast_date:
          type: string
          description: Previsão de entrega do item.
          format: date
          example: '2025-03-14'
        attributes:
          type: array
          description: Lista de atributos deste item nesta compra.
          items:
            $ref: '#/components/schemas/PurchaseDetailItemAttribute'
    PurchasePaymentInstallment:
      type: object
      description: Representa uma parcela do pagamento.
      properties:
        id:
          type: integer
          description: >
            ID único do relacionamento da parcela com o pagamento.


            *Obs*: Se estiver atualizando esta parcela, este campo deve ser
            enviado.
          example: 258
        due_date:
          type: string
          description: Data do vencimento da parcela.
          format: date
          example: '2025-01-30'
        value:
          description: Valor da parcela
          $ref: '#/components/schemas/Money'
        is_paid:
          type: boolean
          description: Está paga esta parcela?
          example: false
        notes:
          type: string
          description: Observação da parcela
          example: pagamento à vista
          maximum: 500
        account_plan_descriptions:
          type: array
          items:
            $ref: '#/components/schemas/FinancialTransactionAccountPlan'
          description: Lista de planos de contas associados à movimentação financeira.
      required:
        - due_date
        - value
    PurchaseDetailPayment:
      type: object
      description: Representa os métodos de pagamento.
      properties:
        id:
          type: integer
          description: >
            ID único da relação do método de pagamento com a compra.


            *Obs*: Se estiver atualizando este pagamento, este campo dever ser
            enviado.
          example: 1
        payment_method:
          readOnly: true
          $ref: '#/components/schemas/Payment'
        payment_method_id:
          writeOnly: true
          type: integer
          description: >
            ID único do método de pagamento.


            Você pode localizar os IDs das formas de pagamento no _endpoint_ de
            [listagem de formas de
            pagamento](#tag/Payments/operation/get-payments).
          example: 1
        total_value:
          description: Valor total do pagamento
          $ref: '#/components/schemas/Money'
        installments:
          type: array
          description: Lista de parcelamento.
          items:
            $ref: '#/components/schemas/PurchasePaymentInstallment'
        bank_account_id:
          writeOnly: true
          type: number
          description: >
            ID único da conta bancária


            Você pode localizar os IDs das contas bancárias no _endpoint_ de
            [listagem de contas
            bancárias](#tag/BankAccounts/operation/get-bank-accounts).
          example: 5
        bank_account:
          type: object
          description: Dados da conta bancária.
          readOnly: true
          properties:
            id:
              type: integer
              description: Id único da conta bancária
              example: 123
            name:
              type: string
              description: Nome da conta bancária
              example: CPlug Bank
        card_brand_id:
          writeOnly: true
          type: integer
          description: >
            ID único da bandeira do cartão de crédito.


            Você pode localizar os IDs das bandeiras do cartão de crédito no
            _endpoint_ de [listagem de bandeiras de
            cartão](#tag/CardBrands/operation/get-cards-brands).


            *Obs*: Obrigatório quando o método de pagamento for cartão.
          example: 1
        card_brand:
          type: object
          description: Dados da bandeira do cartão.
          readOnly: true
          properties:
            id:
              type: integer
              description: Id único da bandeira do cartão
              example: 123
            name:
              type: string
              description: Nome da bandeira do cartão
              example: CPlug Card
      required:
        - payment_method_id
        - total_value
        - installments
    PurchaseFile:
      type: object
      title: Arquivo da compra
      description: Representa um arquivo da compra.
      properties:
        id:
          type: integer
          description: Identificador do arquivo de compra.
          example: 1
          readOnly: true
        name:
          type: string
          description: Nome do arquivo.
          example: arquivo.csv
          readOnly: true
        url:
          type: string
          description: URL do arquivo.
          example: https://example.com/purchase-2025-01-15.pdf
          readOnly: true
        mime_type:
          type: string
          description: Tipo MIME do arquivo.
          example: text/csv
          readOnly: true
        created_at:
          type: string
          format: date-time
          description: Data de criação do arquivo.
          example: '2025-01-15T15:30:00Z'
          readOnly: true
        updated_at:
          type: string
          format: date-time
          description: Data de última atualização do arquivo.
          example: '2025-01-15T15:35:00Z'
          readOnly: true
    PurchaseDetail:
      type: object
      title: Compra
      description: Representa uma compra com detalhes.
      properties:
        id:
          type: integer
          description: Identificador único da compra.
          example: 123
          readOnly: true
        registration_date:
          type: string
          description: Data da compra.
          format: date
          example: '2025-01-14'
        items:
          type: array
          description: Lista de produtos desta compra.
          items:
            $ref: '#/components/schemas/PurchaseDetailItem'
        supplier_id:
          type: integer
          writeOnly: true
          description: >
            ID único do fornecedor.


            Você pode localizar os IDs dos fornecedores no _endpoint_ de
            [listagem de fornecedores](#tag/Suppliers/operation/get-suppliers).
          example: 456
        supplier:
          readOnly: true
          type: object
          description: Dados do fornecedor.
          properties:
            id:
              type: integer
              description: Id único do fornecedor.
              example: 123
            name:
              type: string
              description: Nome do fornecedor.
              example: CPlug Supplier
        invoice:
          type: object
          description: Dados do frete.
          properties:
            serie:
              type: string
              description: Número de série da nota fiscal
              example: '1'
            number:
              type: string
              description: Número da nota fiscal
              example: '789'
        code:
          type: integer
          description: Código do da compra.
          example: 456
          minimum: 1
        value_of_items:
          description: Valor total dos itens da compra.
          $ref: '#/components/schemas/Money'
        discount:
          description: Valor do desconto.
          $ref: '#/components/schemas/Money'
        other_expenses_value:
          description: Valor total de outras despesas.
          $ref: '#/components/schemas/Money'
        total:
          description: Valor total da compra.
          $ref: '#/components/schemas/Money'
        notes:
          type: string
          description: Observações.
          example: my notes
        shipping:
          type: object
          description: Dados do frete.
          properties:
            pay_shipping:
              type: boolean
              description: Frete é pago?
              example: true
            carrier:
              type: object
              description: Dados da transportadora.
              readOnly: true
              properties:
                id:
                  type: integer
                  description: Id único da transportadora
                  example: 123
                name:
                  type: string
                  description: Nome da transportadora
                  example: CPlug Logistics
            carrier_id:
              type: integer
              description: ID único da transportadora.
              example: 1234
              writeOnly: true
            shipping_value:
              description: Valor do frete.
              $ref: '#/components/schemas/Money'
        status:
          type: string
          readOnly: true
          enum:
            - pending
            - received
          description: |
            Status da compra.

            Exemplo:
              - `pending` Aguardando.
              - `received` Entregue.
          example: pending
        order_number:
          type: string
          description: Código do pedido de compra.
          example: code123
        payments:
          type: array
          description: Lista de pagamentos.
          items:
            $ref: '#/components/schemas/PurchaseDetailPayment'
        has_stock_movement_out:
          type: boolean
          description: Indica se a compra tem movimentação de estoque de saída.
          example: true
        files:
          type: array
          description: Lista de arquivos.
          items:
            $ref: '#/components/schemas/PurchaseFile'
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    PosOpen:
      type: object
      title: Status de caixa aberto
      description: Representa um status de caixa aberto.
      properties:
        id:
          type: integer
          description: Identificador único do status do pdv.
          readOnly: true
          example: 1
        id_pos:
          type: integer
          description: Identificador único do pdv.
          readOnly: true
          example: 1
        open_value:
          description: Valor de abertura.
          $ref: '#/components/schemas/Money'
        open_datetime:
          type: string
          description: Data de abertura do caixa
          example: '2025-01-01 00:00:00'
    PosClose:
      type: object
      title: Status de caixa fechado
      description: Representa um status de caixa fechado.
      properties:
        id:
          type: integer
          description: Identificador único do status do pdv.
          readOnly: true
          example: 1
        id_pos:
          type: integer
          description: Identificador único do pdv.
          readOnly: true
          example: 1
        close_value:
          description: Valor de fechamento.
          $ref: '#/components/schemas/Money'
          readOnly: true
        close_datetime:
          type: string
          description: Data de fechamento do caixa
          readOnly: true
          example: '2025-01-01 00:00:00'
        close_value_declared:
          description: Valor total de fechamento declarado.
          $ref: '#/components/schemas/Money'
        close_value_declared_cred_card:
          description: Valor de fechamento declarado com cartão de crédito.
          $ref: '#/components/schemas/Money'
        close_value_declared_debit_card:
          description: Valor de fechamento declarado com cartão de débito.
          $ref: '#/components/schemas/Money'
        close_value_declared_voucher:
          description: Valor de fechamento declarado com cupons.
          $ref: '#/components/schemas/Money'
        close_value_declared_others:
          description: Valor de fechamento declarado com outras formas de pagamento.
          $ref: '#/components/schemas/Money'
    PosStatus:
      type: object
      title: Fechamento de caixa
      description: Representa um fechamento de caixa.
      properties:
        id:
          type: integer
          description: Identificador único do status do pdv.
          readOnly: true
          example: 1
        pos:
          type: object
          description: Dados do PDV.
          properties:
            id:
              type: integer
              description: Identificador único do pdv.
              readOnly: true
              example: 1
            name:
              type: string
              description: Nome do PDV.
              readOnly: true
              example: PDV 1
        seller:
          type: object
          description: Dados do vendedor.
          properties:
            id:
              type: integer
              description: Identificador único do vendedor.
              readOnly: true
              example: 1
            name:
              type: string
              description: Nome do vendedor.
              readOnly: true
              example: Vendedor 1
        user:
          type: object
          description: Dados do usuário operador.
          properties:
            id:
              type: integer
              description: Identificador único do usuário operador.
              readOnly: true
              example: 1
            name:
              type: string
              description: Nome do usuário operador.
              readOnly: true
              example: Usuário Operador 1
        open_info:
          type: object
          description: Dados da abertura de caixa.
          properties:
            open_value:
              description: Valor de abertura.
              $ref: '#/components/schemas/Money'
              readOnly: true
            open_datetime:
              type: string
              description: Data de abertura do caixa
              readOnly: true
              example: '2025-01-01 00:00:00'
        close_info:
          type: object
          description: Dados do fechamento de caixa.
          properties:
            close_value:
              description: Valor de fechamento.
              $ref: '#/components/schemas/Money'
              readOnly: true
            close_datetime:
              type: string
              description: Data de fechamento do caixa
              readOnly: true
              example: '2025-01-01 00:00:00'
            close_value_declared:
              description: Valor total de fechamento declarado.
              $ref: '#/components/schemas/Money'
            close_value_declared_cred_card:
              description: Valor de fechamento declarado com cartão de crédito.
              $ref: '#/components/schemas/Money'
            close_value_declared_debit_card:
              description: Valor de fechamento declarado com cartão de débito.
              $ref: '#/components/schemas/Money'
            close_value_declared_voucher:
              description: Valor de fechamento declarado com cupons.
              $ref: '#/components/schemas/Money'
            close_value_declared_others:
              description: Valor de fechamento declarado com outras formas de pagamento.
              $ref: '#/components/schemas/Money'
        qty_sales:
          type: integer
          description: Quantidade de vendas.
          readOnly: true
          example: 1
        created_at:
          type: string
          description: Data de criação do fechamento de caixa.
          readOnly: true
          example: '2025-01-01 00:00:00'
        updated_at:
          type: string
          description: Data de atualização do fechamento de caixa.
          readOnly: true
          example: '2025-01-01 00:00:00'
    PosStatusSaleInfo:
      type: object
      properties:
        sale_id:
          type: integer
          description: Identificador único da venda.
          example: 1
        customer:
          type: object
          description: Dados do cliente.
          properties:
            id:
              type: integer
              description: Identificador único do cliente.
              example: 1
            name:
              type: string
              description: Nome do cliente ou nome fantasia da pessoa jurídica.
              example: Cliente 1
        start_datetime:
          type: string
          description: Data de início da venda.
          example: '2025-08-06T17:04:55.000000Z'
          format: date-time
        end_datetime:
          type: string
          description: Data de fim da venda.
          example: '2025-08-06T17:04:55.000000Z'
          format: date-time
        total_value:
          $ref: '#/components/schemas/Money'
          description: Valor total da venda.
          example: 100
        payment_methods:
          type: array
          description: Lista de métodos de pagamento.
          items:
            type: object
            title: Método de pagamento
            description: Representa um método de pagamento de uma venda.
            properties:
              id:
                type: integer
                description: Identificador único do método de pagamento.
                example: 1
              name:
                type: string
                description: Nome do método de pagamento.
                example: Dinheiro
        is_canceled:
          type: boolean
          description: Indica se a venda foi cancelada.
          example: false
    PosStatusSales:
      type: object
      properties:
        total:
          type: object
          properties:
            values_canceled:
              description: Valor total das vendas canceladas.
              $ref: '#/components/schemas/Money'
            values_sales:
              $ref: '#/components/schemas/Money'
              description: Valor total das vendas. Incluindo as vendas canceladas.
        sales_info:
          type: object
          properties:
            sales_info_contents:
              type: array
              description: >-
                Representa a lista das vendas do fechamento de caixa de acordo
                com o filtro.
              items:
                $ref: '#/components/schemas/PosStatusSaleInfo'
            meta:
              $ref: '#/components/schemas/MetaPagination'
    PurchaseInvoice:
      type: object
      description: Representa um xml;
      properties:
        id:
          type: integer
          description: Identificador único do arquivo xml de entrada.
          example: 1
          readOnly: true
        serie:
          type: string
          description: Número de séria da nota fiscal de entrada.
          example: '001'
        number:
          type: string
          description: Número da nota fiscal de entrada.
          example: '2340003'
        company_name:
          type: string
          description: Razão social do fornecedor.
          example: CPlug Supplier Chain LTDA
        document:
          type: string
          description: CNPJ do fornecedor.
          example: '22423374000152'
        value:
          description: Valor total da nota fiscal.
          $ref: '#/components/schemas/Money'
        issue_date:
          type: string
          description: Data de emissão da nota.
          format: date
          readOnly: true
          example: '2025-01-10'
        imported_date:
          type: string
          description: Data da importação.
          format: date
          readOnly: true
          example: '2025-01-21'
        source:
          type: string
          description: Origem.
          example: Importação de XML
        status:
          type: string
          enum:
            - imported
            - not_imported
          description: |
            Status da importação.

            - `imported` Somente os importados;
            - `not_imported` Somente os não importados.
          example: not_imported
        url:
          type: string
          description: URL do arquivo xml.
          example: https://erp.connectplug.com.br/file/eyJ...
        is_deleted:
          type: boolean
          description: Indica se a nota foi apagado ou não.
          example: false
          readOnly: true
        created_at:
          type: string
          description: Data da criação do estoque.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da atualização do estoque.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    PrepareItems:
      type: object
      title: Corpo requisição da preparação do processamento do XML
      description: Corpo requisição da preparação do processamento do XML.
      properties:
        supplier_id:
          type: integer
          description: >
            ID único do fornecedor.


            Você pode localizar os IDs dos fornecedores no _endpoint_ de
            [listagem de fornecedores](#tag/Suppliers/operation/get-suppliers).
          example: 456
    InvoiceSummary:
      type: object
      description: Representa um conjunto de informações de um xml;
      properties:
        serie:
          type: string
          description: Número de séria da nota fiscal de entrada.
          example: '001'
        number:
          type: string
          description: Número da nota fiscal de entrada.
          example: '2340003'
        issue_date:
          type: string
          description: Data de emissão da nota.
          format: date-time
          example: '2025-01-01T09:00:00-03:00'
        version:
          type: string
          description: Número daversão da nota fiscal de entrada.
          example: '4.00'
        invoice_total_value:
          description: Valor total da nota fiscal.
          $ref: '#/components/schemas/Money'
        qty_total_items:
          type: integer
          description: Quantidade total de itens na nota fiscal.
          example: 10
        total_items_value:
          description: Valor total dos itens da nota fiscal.
          $ref: '#/components/schemas/Money'
        delivery_fee:
          description: Valor total da taxa de entrega.
          $ref: '#/components/schemas/Money'
        key:
          type: string
          description: Chave da nota fiscal.
          example: 422501...570
        model:
          type: string
          description: Modelo da nota fiscal.
          example: '55'
    ItensSavedSummary:
      type: object
      description: Representa um conjunto de informações dos itens que foram salvos;
      properties:
        qty_total_items:
          type: integer
          description: Quantidade de itens que foram salvos.
          example: 10
        total_items_value:
          description: Valor total dos itens salvos.
          $ref: '#/components/schemas/Money'
        delivery_fee:
          description: Valor total da taxa de entrega dos itens salvos.
          $ref: '#/components/schemas/Money'
        total_value:
          description: Valor total da compra.
          $ref: '#/components/schemas/Money'
    InvoicePaymentMethodInstallment:
      type: object
      description: Representa uma parcela do método de pagamento.
      properties:
        number:
          type: string
          description: Número da parcela
          example: '001'
        value:
          description: valor desta parcela
          $ref: '#/components/schemas/Money'
        due_date:
          type: string
          description: Data de vencimento da parcela
          format: date-time
          example: '2020-01-01T09:00:00-03:00'
    Info:
      type: object
      description: Representa um conjunto de informações de um xml;
      properties:
        supplier:
          description: Informações sobre o fornecedor.
          $ref: '#/components/schemas/Supplier'
        invoice_summary:
          description: Resumo do XML.
          $ref: '#/components/schemas/InvoiceSummary'
        items_saved_summary:
          description: Resumo dos itens salvos.
          $ref: '#/components/schemas/ItensSavedSummary'
        payment_method:
          description: Método de pagamento que está na nota fiscal.
          $ref: '#/components/schemas/Payment'
        installments:
          description: Lista de parcela do método de pagamento.
          $ref: '#/components/schemas/InvoicePaymentMethodInstallment'
    ItemCategory:
      type: object
      description: Dados da categoria do item.
      properties:
        id:
          type: integer
          description: Id único da categoria.
          example: 7
        name:
          type: string
          description: Nome da categoria.
          example: Mercadoria para Revenda
    ItemTaxes:
      type: object
      description: Dados fiscais do item.
      properties:
        cest_id:
          type: integer
          description: >
            Id único do CEST.


            Você pode localizar os IDs dos CEST no _endpoint_ de [listagem de
            CEST](#tag/Products/operation/get-cest).
          example: 444
          writeOnly: true
        cest:
          type: object
          description: Dados do CEST do item.
          properties:
            id:
              type: integer
              description: Id único da CEST.
              example: 444
            description:
              type: string
              description: Descrição da CEST.
              example: >-
                1701000 - Sucos de frutas ou de produtos hortícolas; mistura de
                sucos
          readOnly: true
        cest_code:
          type: string
          description: >
            Código do CFOP.


            Você pode localizar os códigos do CFOP no _endpoint_ de [listagem de
            CFOP](#tag/Products/operation/get-cfop).
          example: '5104'
          writeOnly: true
        cfop:
          type: object
          description: Dados do CFOP do item.
          properties:
            id:
              type: integer
              description: Id único da CFOP.
              example: 5104
            description:
              type: string
              description: Descrição da CFOP.
              example: >-
                5104 - Venda de mercadoria adquirida ou recebida de terceiros,
                efetuada fora do estabelecimento
          readOnly: true
        ncm_id:
          type: integer
          description: >
            Id único do NCM.


            Você pode localizar os IDs dos NCM no _endpoint_ de [listagem de
            NCM](#tag/Products/operation/get-ncm).
          example: 1510
          writeOnly: true
        ncm:
          type: object
          description: Dados do NCM do item.
          properties:
            id:
              type: integer
              description: Id único do NCM.
              example: 1510
            description:
              type: string
              description: Descrição do NCM.
              example: >-
                22021000 - Água incl.mineral\/gaseif.adicion.açúcar,
                aromatizada, etc
          readOnly: true
        icms_group_id:
          type: integer
          description: >-
            Id único do grupo do ICMS no _endpoint_ de [listagem de grupo do
            ICMS](#tag/icmsgroup/get-tax-settings-icms).
          example: 10
          writeOnly: true
        icms_source_id:
          type: integer
          description: >-
            Id único da origem do ICMS no _endpoint_ de [listagem de origem do
            ICMS](#tag/producttaxes/get-origin).
          example: 0
          writeOnly: true
        icms_source:
          $ref: '#/components/schemas/Origin'
          readOnly: true
        icms_group:
          $ref: '#/components/schemas/Icms'
          readOnly: true
        pis_cofins_group_id:
          type: integer
          description: >-
            Id único do Pis/Cofins no _endpoint_ de [listagem de grupo de
            Pis/Cofins](#tag/piscofinsgroup/get-tax-settings-pis-cofins).
          example: 1510
          writeOnly: true
        pis_cofins:
          $ref: '#/components/schemas/PisCofins'
          readOnly: true
        ipi_group_id:
          type: integer
          description: >-
            Id único do grupo de IPI no _endpoint_ de [listagem de grupo de
            IPI](#tag/ipigroup/get-tax-settings-ipi).
          example: 2
          writeOnly: true
        ipi:
          $ref: '#/components/schemas/Ipi'
          readOnly: true
        ipi_value:
          description: Valor monetário do IPI do item.
          $ref: '#/components/schemas/Money'
        fcp:
          type: object
          description: Dados do FCP do item.
          properties:
            value:
              description: Valor monetário do FCP do item.
              $ref: '#/components/schemas/Money'
          readOnly: true
        fcpst:
          type: object
          description: Dados do FCPST do item.
          properties:
            value:
              description: Valor monetário do FCPST do item.
              $ref: '#/components/schemas/Money'
          readOnly: true
        icmsst:
          type: object
          description: Dados do ICMSST do item.
          properties:
            value:
              description: Valor monetário do ICMSST do item.
              $ref: '#/components/schemas/Money'
          readOnly: true
    ItemItemInfo:
      type: object
      description: Informações item que foi associado.
      properties:
        id:
          type: integer
          description: Identificador único do item.
          example: 17
        name:
          type: string
          description: Nome do item.
          example: Refresco em lata 350ml
        unit_of_measure:
          type: object
          description: Unidade de medida do item.
          properties:
            id:
              type: integer
              description: Identificador único da unidade de medida.
              example: 8
            name:
              type: string
              description: Nome da unidade de medida.
              example: Unidade
            abbreviation:
              type: string
              description: Simbolo da unidade de medida.
              example: Un
            precision:
              type: integer
              description: Precisão da unidade de medida.
              example: 2
    ItemXmlOptions:
      type: object
      description: Unidade de medida do item no XML.
      properties:
        conversion:
          type: object
          description: Informações sobre a conversão de unidade.
          properties:
            code:
              type: string
              description: Código do item com estes atributos.
              example: '55388'
            factor:
              type: number
              format: decimal
              description: Fator de conversão.
              example: 1
            amount:
              type: number
              format: decimal
              description: Quantidade de conversão.
              example: 10
            barcode:
              type: string
              description: Código de barra do item com estes atributos.
              example: '3029575386736'
        options:
          type: array
          description: Lista de opções do item.
          items:
            type: object
            description: Representa uma opção do item.
            properties:
              id:
                type: integer
                description: >
                  Id único da opção


                  Você pode localizar os IDs da opção no _endpoint_ de [listagem
                  de opções de
                  atributos](#tag/attributeoptions/get-attributes-options).
                example: 1
              attribute_id:
                type: integer
                description: >
                  Id único do atributo desta opção


                  Você pode localizar os IDs dos atributos no _endpoint_ de
                  [listagem de atributos](#tag/attributes/get-attributes).
                example: 1
                writeOnly: true
              name:
                type: string
                description: Nome da opção.
                example: Branca
                readOnly: true
        type:
          type: string
          enum:
            - composition
            - grid
          description: |
            Tipo do atributo que será criado/atualizado no final da importação.

            Exemplo:
              - `composition` Composto.
              - `grid` Grid.
          example: grid
          default: composition
    ItemAttributes:
      type: array
      description: Lista de atributos do item.
      items:
        type: object
        description: Representa um atributo do item.
        properties:
          id:
            type: integer
            description: Id único do atributo
            example: 1
          name:
            type: string
            description: Nome do atributo.
            example: Cor
    ItemStock:
      type: object
      description: Informações sobre o estoque deste item.
      properties:
        id:
          type: integer
          description: Identificador único do estoque.
          example: 1
        is_stock_control:
          type: boolean
          description: Indica se o item é controlado pelo estoque.
          example: true
        is_stock_notification:
          type: boolean
          description: Indica se o item possui notificação de máxima e mínimo.
          example: true
        min:
          type: number
          format: decimal
          description: Quantidade de item mínimo no estoque.
          example: 1
        max:
          type: number
          format: decimal
          description: Quantidade de item máximo no estoque.
          example: 100
    ItemUnitOfMeasureEquivalent:
      type: object
      description: >-
        Unidade de medida equivalente do item. É a unidade de medida que será
        convertida para ser usada no sistema.
      properties:
        id:
          type: integer
          description: >
            Identificador único da unidade de medida.


            Você pode localizar os IDs das unidades de medida no _endpoint_ de
            [listagem de unidades de medida](#tag/Units/operation/get-units).
          example: 8
        name:
          type: string
          description: Nome da unidade de medida.
          example: Unidade
          readOnly: true
        abbreviation:
          type: string
          description: Simbolo da unidade de medida.
          example: Un
          readOnly: true
        precision:
          type: integer
          description: Identificador único da unidade de medida.
          example: 2
          readOnly: true
        factor:
          type: number
          format: decimal
          description: >-
            Fator de conversão. É o valor que será multiplicado para encontrar a
            conversão e armazenar no sistema.
          example: 100
    ItemCompanies:
      type: array
      description: Lista de empresas que permite visualizar
      items:
        type: array
        description: >
          Id da Empresa (Company). 


          Por padrão é considerado a empresa informado no header em
          CPlug-Company-Id.


          Você pode localizar os IDs das empresas no _endpoint_ de [listagem de
          empresas](#tag/Companies/operation/get-companies).
        items:
          type: integer
          example: 1
        example:
          - 1
          - 2
          - 3
    Item:
      type: object
      title: Representa uma item do XML
      description: Representa uma item do XML.
      properties:
        id:
          type: integer
          description: Identificador único do item do XML.
          example: 123
          readOnly: true
        number:
          type: string
          description: Número do item no XML.
          example: '001'
          readOnly: true
        item_code:
          type: string
          description: Código do item.
          example: '7'
        name:
          type: string
          description: Nome do item.
          example: CC Sem Acucar LT 350ml 6U FL
        amount:
          type: number
          description: Quantidade do item.
          example: 10
          readOnly: true
        status:
          type: string
          readOnly: true
          enum:
            - not_saved
            - saved
          description: |
            Status do item. Se este item foi salvo ou não.

            Exemplo:
              - `not_saved` Não salvo.
              - `saved` Salvo.
          example: not_saved
        supplier_code:
          type: string
          description: Código do item no fornecedor.
          example: '55388'
        xml_barcode:
          type: string
          description: Código de barra que consta na nota fiscal.
          example: '7894900709834'
        unitary_value:
          description: Valor unitário do item.
          $ref: '#/components/schemas/Money'
        discount:
          description: Valor do desconto no item.
          $ref: '#/components/schemas/Money'
          readOnly: true
        other_values:
          description: Outros valores.
          $ref: '#/components/schemas/Money'
          readOnly: true
        total_value:
          description: Valor total do item.
          $ref: '#/components/schemas/Money'
        unitary_sale_value:
          description: Valor unitário de venda do item.
          $ref: '#/components/schemas/Money'
        is_available_for_sale:
          type: boolean
          description: Indica se o item está disponível para a venda.
          example: true
        barcode:
          type: string
          description: Código de barra do item.
          example: '7894900709834'
        is_component:
          type: boolean
          description: Indica se o item é um componente.
          example: true
        is_perishable:
          type: boolean
          description: Indica se o item é perecível.
          example: true
        expiration_date:
          type: string
          format: date
          description: |
            Validade do item
            Se o item é perecível, então este campo é obrigatório.
          example: '2026-12-31'
        category_id:
          type: integer
          description: >
            ID único da categoria do produto.


            Você pode localizar os IDs das categorias de produto no _endpoint_
            de [listagem de categorias](#tag/categories/get-categories).
          example: 7
          writeOnly: true
        category:
          $ref: '#/components/schemas/ItemCategory'
          readOnly: true
        taxes:
          $ref: '#/components/schemas/ItemTaxes'
        xml_unit_of_measure:
          type: object
          description: Unidade de medida do item no XML.
          properties:
            abbreviation:
              type: string
              description: Simbolo da unidade de medida.
              example: Un
          readOnly: true
        item_id:
          type: integer
          description: >
            ID único do item.


            Você pode localizar os IDs do item no _endpoint_ de [listagem de
            produtos](#tag/products/get-products).
          example: 17
          writeOnly: true
        item:
          $ref: '#/components/schemas/ItemItemInfo'
          readOnly: true
        xml_options:
          type: array
          description: Lista de opções do item.
          items:
            $ref: '#/components/schemas/ItemXmlOptions'
        attributes:
          $ref: '#/components/schemas/ItemAttributes'
          readOnly: true
        stock:
          $ref: '#/components/schemas/ItemStock'
        unit_of_measure_equivalent:
          $ref: '#/components/schemas/ItemUnitOfMeasureEquivalent'
        companies:
          $ref: '#/components/schemas/ItemCompanies'
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        delete_at:
          type: string
          description: Data que foi apagado.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
    UnitarySalePrice:
      type: object
      title: Corpo requisição da atualização do preço de venda dos itens
      description: >-
        Corpo requisição da atualização do preço de venda dos itens em
        porcentagem.
      properties:
        unitary_sales_values_in_percent:
          type: number
          description: 'Valor expresso em porcentagem. Ex: 1.5 equivale ao 1,5%'
          format: decimal
          example: 1.5
    RequestPaymentPaymentInstallment:
      type: object
      description: Representa uma parcela do método de pagamento.
      properties:
        value:
          description: valor desta parcela
          $ref: '#/components/schemas/Money'
        due_date:
          type: string
          description: Data de vencimento da parcela
          format: date-time
          example: '2020-01-01T09:00:00-03:00'
        observation:
          type: string
          description: observação desta parcela
          example: primeira parcela
        account_plan_descriptions:
          type: array
          items:
            $ref: >-
              #/components/schemas/PurchaseInstallmentAccountPlanDescriptionsBody
          description: Lista de planos de contas associados à movimentação financeira.
      required:
        - value
        - due_date
        - account_plan_descriptions
    RequestPayment:
      type: object
      description: Representa um pagamento de uma nota fiscal.
      properties:
        payment_method_id:
          type: integer
          description: >
            Id do método de pagamento.


            Você pode localizar os IDs dos métodos de pagamento no _endpoint_ de
            [listagem de método de
            pagamento](#tag/Payments/operation/get-payments).
          example: 3
        bank_account_id:
          type: integer
          description: >
            Id da conta bancária.


            Você pode localizar os IDs das contas bancárias no _endpoint_ de
            [listagem de conta
            bancárias](#tag/BankAccounts/operation/get-bank-accounts).
          example: 1
        total_value:
          description: valor total deste pagamento
          $ref: '#/components/schemas/Money'
        installments:
          type: array
          description: Lista de parcelas deste método de pagamento
          items:
            $ref: '#/components/schemas/RequestPaymentPaymentInstallment'
      required:
        - payment_method_id
        - bank_account_id
        - total_value
        - installments
    ProductSupplier:
      type: object
      title: Fornecedores do Produto
      description: Representa um fornecedor do produto e seus atributos.
      properties:
        id:
          type: integer
          example: 12
          readOnly: true
          description: ID do relacionamento entre produto e fornecedor.
        code:
          type: string
          example: ABC123
          description: Código do fornecedor no produto.
        conversion_factor:
          type: string
          example: '12.2000000000'
          description: Fator de conversão do produto.
        supplier:
          type: object
          properties:
            id:
              type: integer
              example: 12
              description: ID do fornecedor.
            name:
              type: string
              example: Fornecedor ABC
              description: Nome do fornecedor.
        attributes:
          type: array
          description: Lista de atributos do produto no fornecedor.
          items:
            type: object
            properties:
              attribute_id:
                type: integer
                example: 12
                description: ID do atributo.
              name:
                type: string
                example: Cor
                description: Nome do atributo.
              options:
                type: object
                properties:
                  option_id:
                    type: integer
                    example: 12
                    description: ID da opção do atributo.
                  name:
                    type: string
                    example: Azul
                    description: Nome da opção.
                  code:
                    type: string
                    example: AZ
                    description: Código da opção.
        grid:
          type: object
          description: >
            Representa a grade do produto.

            Este campo é retornado apenas quando o fornecedor está vinculado a
            uma grade de produto.
          properties:
            id:
              type: integer
              example: 12
              description: ID da grade do produto.
            options:
              type: array
              items:
                type: object
                properties:
                  option_id:
                    type: integer
                    example: 12
                    description: ID da opção do atributo.
                  name:
                    type: string
                    example: Cor
                    description: Nome do atributo.
                  position:
                    type: integer
                    example: 1
                    description: Código da opção.
    PriceListSlim:
      type: object
      properties:
        id:
          type: integer
          format: int64
          description: ID da lista de preços
          example: 1
        name:
          type: string
          description: Nome da lista de preços
          example: Lista de Preços Padrão
      required:
        - id
        - name
    IntegrationProduct:
      type: object
      properties:
        integration_key:
          type: string
          description: Chave da integração do produto
          example: ABC-123
        status:
          type: string
          description: Status da integração
          example: ACTIVE
        is_available:
          type: boolean
          description: Indica se a integração está disponível
          example: true
        price_list:
          $ref: '#/components/schemas/PriceListSlim'
          description: Lista de preços associada à integração
        integration:
          $ref: '#/components/schemas/Integration'
          description: Dados da integração
      required:
        - integration_key
        - status
        - is_available
        - integration
    ProductBulkData:
      type: object
      description: Dados do lote para operações com produtos.
      properties:
        payload:
          type: array
          description: >-
            Array contendo exatamente os dados que foram enviados na finalização
            do lote.
          items:
            type: object
            description: Dados enviados na finalização do lote para cada item processado.
    PriceListBulkData:
      type: object
      description: Dados do lote para operações com listas de preços.
      properties:
        payload:
          type: array
          description: >-
            Array contendo exatamente os dados que foram enviados na finalização
            do lote.
          items:
            type: object
            description: Dados enviados na finalização do lote para cada item processado.
    ProductAppBulkData:
      type: object
      description: Dados do lote para operações com produtos de aplicativos.
      properties:
        payload:
          type: array
          description: >-
            Array contendo exatamente os dados que foram enviados na finalização
            do lote.
          items:
            type: object
            description: Dados enviados na finalização do lote para cada item processado.
    ProductTaxesBulkData:
      type: object
      description: Dados do lote para operações com impostos de produtos.
      properties:
        payload:
          type: array
          description: >-
            Array contendo exatamente os dados que foram enviados na finalização
            do lote.
          items:
            type: object
            description: Dados enviados na finalização do lote para cada item processado.
    ProductScalesBulkData:
      type: object
      description: Dados do lote para operações de exportação de produtos para balanças.
      properties:
        payload:
          type: array
          description: >-
            Array contendo exatamente os dados que foram enviados na finalização
            do lote.
          items:
            type: object
            description: Dados enviados na finalização do lote para cada item processado.
        post_processor:
          type: array
          description: >-
            Array contendo informações dos arquivos gerados após o
            processamento.
          items:
            type: object
            properties:
              url_product_scales:
                type: string
                format: uri
                description: >-
                  URL do arquivo TXT gerado para exportação de produtos para
                  balanças de supermercado.
                example: >-
                  https://cdn.cplug.com.br/exports/products_scales_20250102_123456.txt
    TransactionBulkData:
      type: object
      description: Dados do lote para operações de exportação de produtos para balanças.
      properties:
        payload:
          type: array
          description: >-
            Array contendo exatamente os dados que foram enviados na finalização
            do lote.
          items:
            type: object
            description: Dados enviados na finalização do lote para cada item processado.
        filters:
          type: array
          description: Array contendo os filtros utilizados para a exportação.
          items:
            type: object
            description: Filtro utilizado para a exportação.
        post_processor:
          type: array
          description: >-
            Array contendo informações dos arquivos gerados após o
            processamento.
          items:
            type: object
            properties:
              url_financial_transactions_extract:
                type: string
                format: uri
                description: >-
                  URL do arquivo XLSX gerado para exportação de movimentações
                  financeiras.
                example: >-
                  https://cdn.cplug.com.br/exports/financial_transactions_20250102_123456.xlsx
    BulkItem:
      type: object
      description: Item de um processamento em lote.
      properties:
        id:
          type: integer
          description: >
            O ID do item. Este pode ser o ID do produto, do cliente, do
            fornecedor a depender do tipo de lote.
          example: 93
        status:
          type: string
          description: O status do item
          enum:
            - pending
            - processing
            - finished
            - failed
          example: pending
        error:
          type:
            - string
            - 'null'
          description: Caso falhe o processamento, será retornado o erro.
          example: null
    Bulk:
      type: object
      description: Dados de um processamento em lote.
      properties:
        id:
          type: integer
          description: O ID do lote
          readOnly: true
          example: 16
        company:
          type: object
          $ref: '#/components/schemas/SlimCompany'
          readOnly: true
        user:
          type: object
          $ref: '#/components/schemas/SlimUser'
          readOnly: true
        kind:
          type: string
          description: O tipo de lote
          enum:
            - product
            - price-list
            - product-app
            - product-taxes
            - product-scales
            - transaction
          example: product
        status:
          type: string
          description: O status do lote
          enum:
            - pending
            - processing
            - completed
            - failed
          example: pending
        total_items:
          type: integer
          description: O total de itens do lote
          example: 1
        processed_items:
          type: integer
          description: O total de itens processados do lote
          example: 0
        failed_items:
          type: integer
          description: O total de itens falhos do lote
          example: 0
        data:
          description: Os dados do lote que variam conforme o tipo (kind) do lote.
          oneOf:
            - title: Dados para 'product'
              $ref: '#/components/schemas/ProductBulkData'
            - title: Dados para 'price-list'
              $ref: '#/components/schemas/PriceListBulkData'
            - title: Dados para 'product-app'
              $ref: '#/components/schemas/ProductAppBulkData'
            - title: Dados para 'product-taxes'
              $ref: '#/components/schemas/ProductTaxesBulkData'
            - title: Dados para 'product-scales'
              $ref: '#/components/schemas/ProductScalesBulkData'
            - title: Dados para 'transaction'
              $ref: '#/components/schemas/TransactionBulkData'
        items:
          type: array
          description: Os itens do lote
          maxItems: 100
          items:
            $ref: '#/components/schemas/BulkItem'
    ProductBulkBody:
      type: object
      description: Estrutura de dados para atualizar os produtos.
      properties:
        category_id:
          type: integer
          description: ID da categoria do produto
          example: 6
        unit_id:
          type: integer
          description: ID da unidade do produto
          example: 2
        is_perishable:
          type: boolean
          description: Indica se o produto é perecível
          example: true
        apps:
          type: array
          description: Lista de aplicativos associados ao produto
          items:
            $ref: '#/components/schemas/ProductApp'
        is_stock_control:
          type: boolean
          description: Indica se o produto tem controle de estoque
          example: false
        companies:
          type: array
          description: >
            Lista de IDs das empresas associadas ao produto.


            Regras de negócio:

            - Somente é permitido enviar uma lista de empresas que o usuário tem
            acesso.

            - Ao enviar uma lista de empresas, todas as empresas associadas ao
            produto (`que o usuário tem acesso`) serão removidas e substituídas
            pelas empresas enviadas.
          items:
            type: integer
          example:
            - 1
        suppliers:
          type: array
          description: >
            Lista de fornecedores do produto.


            Regras de negócio:

            - Nenhum fornecedor será inserido ao produto, apenas atualizado.

            - Nenhum fornecedor será removido do produto.


            Exemplo de uso:

            - Se o produto já possui um fornecedor, e você deseja atualizar o
            fator de conversão, você deve enviar o ID do fornecedor existente e
            o novo fator de conversão.

            - Se o produto possui dois fornecedores iguais, porém com códigos
            diferentes, e você enviar o ID deste fornecedor com fator de
            conversão, ambos serão atualizados com o novo fator de conversão.
          items:
            type: object
            properties:
              id:
                type: integer
                description: ID do fornecedor
                example: 1
              conversion_factor:
                type: string
                description: Fator de conversão
                example: '15.300'
    PriceListBulkBody:
      type: object
      description: Estrutura de dados para atualizar os produtos de uma lista de preços.
      properties:
        price_list_id:
          type: integer
          description: ID da lista de preços
          example: 10
        value:
          description: Preço do produto.
          $ref: '#/components/schemas/Money'
        action:
          type: string
          description: |
            Tipo de ação para aplicar o preço.

            Exemplo:
            - `decrease_price`: Diminui em um valor ou uma porcentagem do valor;
            - `increase_price`: Adiciona um valor ou uma porcentagem ao valor;
            - `same_price`: Aplica um valor igual para os produtos.
          enum:
            - decrease_price
            - increase_price
            - same_price
          example: increase_price
        percentage_value:
          type: number
          description: >
            Porcentagem a ser adicionado do valor do produto.


            ***Obs***: Quando o campo `action` = `same_price`, não enviar este
            campo.


            Ex: 11.50%. Irá adicionar ou diminuir em 11.50% +/- sobre o valor
            atual do produto na lista de preço.
          example: 11.5
      required:
        - price_list_id
        - action
    ProductAppBulkBody:
      type: object
      description: Estrutura de dados para atualizar os aplicativos de um produto.
      properties:
        app_id:
          type: integer
          description: ID do aplicativo
          example: 10
        is_available_for_sale:
          type: boolean
          description: Indica se o aplicativo está disponível para venda
          example: true
        shifts:
          type: array
          description: Lista de horário que está disponível este produto no aplicativo.
          items:
            $ref: '#/components/schemas/ProductAppShift'
      required:
        - app_id
    ProductScalesBulkBody:
      type: object
      description: Estrutura de dados para exportar produtos para balanças de supermercado.
      required:
        - model
      properties:
        model:
          type: string
          description: Modelo da balança para qual os produtos serão exportados.
          enum:
            - MGV6
            - ELGIN
            - URANO
            - FILIZOLA
          example: MGV6
        generate_barcode:
          type: boolean
          description: >
            Indica se deve gerar códigos de barras automaticamente.

            Quando true, gera códigos de barras no formato "2" +
            código_produto_6_dígitos.

            Códigos de barras existentes não são alterados.
          default: false
          example: false
        price_list_id:
          type: integer
          description: |
            ID da lista de preços a ser utilizada.
            Se fornecido, usa preços da PriceListProduct.
            Se não fornecido, usa preços do Product.
            A lista de preços tem prioridade sobre o preço do produto.
          minimum: 1
          example: 123
      example:
        model: MGV6
        generate_barcode: false
        price_list_id: 1
    BulkStatus:
      type: object
      description: Status do lote
      properties:
        id:
          type: integer
          description: ID do lote
          example: 1
        status:
          type: string
          description: Status do lote
          example: pending
          enum:
            - pending
            - processing
            - completed
            - failed
        total_items:
          type: integer
          description: Quantidade de itens no lote
          example: 2
        processed_items:
          type: integer
          description: Quantidade de itens processados
          example: 0
        failed_items:
          type: integer
          description: Quantidade de itens falhos
          example: 0
        started_at:
          type:
            - string
            - 'null'
          format: date-time
          description: Data de início do lote
          example: '2025-05-02T00:00:00Z'
        finished_at:
          type:
            - string
            - 'null'
          format: date-time
          description: Data de término do lote
          example: '2025-05-02T00:00:00Z'
    WhitelabelContactEmail:
      type: object
      additionalProperties: false
      description: Email do contato do whitelabel
      properties:
        id:
          type: integer
          description: ID único do email
          example: 10
        contact_id:
          type: integer
          description: ID do contato associado
          example: 11
        email:
          type: string
          format: email
          description: Endereço de email
          example: contato@cplug.com.br
        created_at:
          type: string
          format: date-time
          description: Data de criação do email
          example: '2025-05-27T19:33:45.000000Z'
        updated_at:
          type: string
          format: date-time
          description: Data de atualização do email
          example: '2025-05-27T19:33:45.000000Z'
        deleted_at:
          type: string
          format: date-time
          description: Data de exclusão do email
          example: '2025-05-27T19:33:45.000000Z'
      required:
        - id
        - contact_id
        - email
    WhitelabelContactPhone:
      type: object
      additionalProperties: false
      description: Telefone do contato do whitelabel
      properties:
        id:
          type: integer
          description: ID único do telefone
          example: 10
        contact_id:
          type: integer
          description: ID do contato associado
          example: 11
        phone:
          type: string
          description: Número de telefone
          example: '11999999999'
        created_at:
          type: string
          format: date-time
          description: Data de criação do telefone
          example: '2025-05-27T19:33:45.000000Z'
        updated_at:
          type: string
          format: date-time
          description: Data de atualização do telefone
          example: '2025-05-27T19:33:45.000000Z'
        deleted_at:
          type: string
          format: date-time
          description: Data de exclusão do telefone
          example: '2025-05-27T19:33:45.000000Z'
      required:
        - id
        - contact_id
        - phone
    WhitelabelContact:
      type: object
      additionalProperties: false
      description: Contato do whitelabel
      properties:
        id:
          type: integer
          description: ID único do contato
          example: 11
        reseller_id:
          type: integer
          description: ID do revendedor
          example: 2
        external_id:
          type: integer
          description: ID externo do contato
          example: 2
        name:
          type: string
          description: Nome do contato
          example: Contato
        created_at:
          type: string
          format: date-time
          description: Data de criação do contato
          example: '2025-05-27T19:33:45.000000Z'
        updated_at:
          type: string
          format: date-time
          description: Data de atualização do contato
          example: '2025-05-27T19:33:45.000000Z'
        deleted_at:
          type: string
          format: date-time
          description: Data de exclusão do contato
          example: '2025-05-27T19:33:45.000000Z'
        support:
          type: boolean
          description: Indica se é um contato de suporte
          example: false
        financial:
          type: boolean
          description: Indica se é um contato financeiro
          example: false
        emails:
          type: array
          description: Lista de emails do contato
          items:
            $ref: '#/components/schemas/WhitelabelContactEmail'
        phones:
          type: array
          description: Lista de telefones do contato
          items:
            $ref: '#/components/schemas/WhitelabelContactPhone'
      required:
        - id
        - reseller_id
        - external_id
        - name
        - support
        - financial
        - emails
        - phones
    WhitelabelColors:
      type: object
      additionalProperties: false
      description: Configurações de cores do whitelabel
      properties:
        navigation_background:
          type: string
          description: Cor de fundo da navegação
          example: '#000000'
        navigation_text:
          type: string
          description: Cor do texto da navegação
          example: '#FFFFFF'
        menu_background:
          type: string
          description: Cor de fundo do menu
          example: '#333333'
        menu_text:
          type: string
          description: Cor do texto do menu
          example: menu texto
        highlight_background:
          type: string
          description: Cor de fundo de destaque
          example: '#FF0000'
        highlight_text:
          type: string
          description: Cor do texto de destaque
          example: '#FFFFFF'
      required:
        - navigation_background
        - navigation_text
        - menu_background
        - menu_text
        - highlight_background
        - highlight_text
    WhitelabelContent:
      type: object
      additionalProperties: false
      description: Conteúdo do whitelabel
      properties:
        id:
          type: integer
          description: ID único do conteúdo
          example: 55
        reseller_id:
          type: integer
          description: ID do revendedor
          example: 2
        external_id:
          type: integer
          description: ID externo do conteúdo
          example: 2
        title:
          type: string
          description: Título do conteúdo
          example: Conteúdo
        description:
          type: string
          description: Descrição do conteúdo
          example: Descrição do conteúdo
        content_type:
          type: integer
          description: Tipo do conteúdo
          example: 3
        created_at:
          type: string
          format: date-time
          description: Data de criação do conteúdo
          example: '2025-05-27T19:33:45.000000Z'
        updated_at:
          type: string
          format: date-time
          description: Data de atualização do conteúdo
          example: '2025-05-27T19:33:45.000000Z'
        deleted_at:
          type: string
          format: date-time
          description: Data de exclusão do conteúdo
          example: '2025-05-27T19:33:45.000000Z'
      required:
        - id
        - reseller_id
        - external_id
        - title
        - description
        - content_type
    WhitelabelSettings:
      type: object
      additionalProperties: false
      description: Configurações do whitelabel
      properties:
        id:
          type: integer
          description: ID único das configurações do whitelabel
          example: 2
        legal_name:
          type: string
          description: Razão social da empresa
          example: praesentium
        trade_name:
          type: string
          description: Nome fantasia da empresa
          example: eum
        website:
          type: string
          description: Website da empresa
          example: https://cplug.com.br
        cnpj:
          type: string
          description: CNPJ da empresa
          example: '81386555596405'
        type:
          type: string
          description: Tipo da configuração
          example: whitelabel
        url:
          type: string
          description: URL do whitelabel
          example: test.cplug.com.br
        contacts:
          type: array
          description: Lista de contatos da empresa
          items:
            $ref: '#/components/schemas/WhitelabelContact'
        address:
          type: string
          description: Endereço completo da empresa
          example: Rua Itapaiuna, 2434 - CPlug<br>Jardim Morumbi - São Paulo/SP
        logo:
          type: string
          description: URL do logo da empresa
          example: https://cplug.com.br/logo.png
        favicon:
          type: string
          description: URL do favicon da empresa
          example: https://cplug.com.br/favicon.ico
        colors:
          $ref: '#/components/schemas/WhitelabelColors'
        contents:
          type: array
          description: Lista de conteúdos do whitelabel
          items:
            $ref: '#/components/schemas/WhitelabelContent'
        footer_columns:
          type: integer
          description: Número de colunas do rodapé
          example: 12
      required:
        - id
        - legal_name
        - trade_name
        - cnpj
        - type
        - url
        - contacts
        - address
        - logo
        - favicon
        - colors
        - contents
        - footer_columns
    Table:
      type: object
      description: Representa uma mesa.
      properties:
        id:
          type: integer
          description: Identificador único da mesa.
          readOnly: true
          example: 123
        name:
          type: string
          minLength: 1
          maxLength: 60
          description: Nome da mesa.
          example: Mesa 1
        unique_id:
          type: string
          format: uuid
          description: Identificador único da mesa.
          example: e11c6101-bbcf-4b0d-b3c4-3e4dde547589
          readOnly: true
        is_enabled:
          type: boolean
          description: Status da mesa.
          example: true
        notes:
          type: string
          description: Observações relacionadas à mesa.
          example: Mesa para 4 pessoas
        deleted:
          type: boolean
          description: Informa se o registro está excluído
          readOnly: true
          example: false
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
      required:
        - name
        - is_enabled
    TableBatch:
      type: object
      description: Representa um lote de mesas.
      properties:
        table_name_base:
          type: string
          minLength: 1
          maxLength: 50
          description: Nome base da mesa.
          example: Mesa
        start_number:
          type: integer
          description: Número inicial da mesa.
          minimum: 1
          example: 1
        end_number:
          type: integer
          description: Número final da mesa.
          maximum: 1000
          example: 10
      required:
        - table_name_base
        - start_number
        - end_number
    CustomizationMedia:
      type: object
      title: Mídia de Customização
      description: Representa uma mídia associada a uma customização.
      properties:
        id:
          type: integer
          description: Identificador único da mídia.
          readOnly: true
          example: 123
        filename:
          type: string
          description: Nome do arquivo da mídia.
          example: customization_video.mp4
        type:
          type: string
          description: |
            Tipo da mídia.

            - `IMAGE`: Imagem (PNG, JPG, JPEG)
            - `VIDEO`: Vídeo (MP4)
          enum:
            - IMAGE
            - VIDEO
          example: IMAGE
        filesize:
          type: integer
          description: Tamanho do arquivo em bytes.
          example: 1024000
        url:
          type:
            - 'null'
            - string
          description: URL para acesso à mídia via CDN.
          format: url
          readOnly: true
          example: https://cdn.example.com/customizations/customization_video.mp4
    Customization:
      type: object
      title: Customização
      description: Representa uma customização da tela.
      properties:
        id:
          type: integer
          description: Identificador único da customização.
          readOnly: true
          example: 123
        name:
          type: string
          maxLength: 255
          minLength: 1
          description: Nome da customização.
          example: Customização Promocional
        type:
          type: string
          description: |
            Tipo da customização.

            - `FULL_VIDEO`: Vídeo em tela cheia
            - `BACK_VIDEO`: Vídeo de fundo
            - `FULL_IMAGE`: Imagem em tela cheia
            - `BACK_IMAGE`: Imagem de fundo
            - `DYNAMIC_CATEGORY`: Categoria dinâmica
          enum:
            - FULL_VIDEO
            - BACK_VIDEO
            - FULL_IMAGE
            - BACK_IMAGE
            - DYNAMIC_CATEGORY
          example: FULL_IMAGE
        transition:
          type:
            - 'null'
            - string
          description: |
            Tipo de transição aplicada à customização.
            Obrigatório para tipos `FULL_IMAGE` e `BACK_IMAGE`.

            - `FALL`: Transição de queda
            - `SLIDE`: Transição de deslizamento
            - `FADE`: Transição de esmaecimento
          enum:
            - FALL
            - SLIDE
            - FADE
          example: FADE
        medias:
          type: array
          description: Lista de mídias associadas à customização.
          readOnly: true
          items:
            $ref: '#/components/schemas/CustomizationMedia'
    CommandSeries:
      type: object
      title: Série de Comanda
      description: Representa uma série de comanda.
      properties:
        id:
          type: integer
          description: Identificador único da série de comanda.
          readOnly: true
          example: 123
        name:
          type: string
          maxLength: 80
          description: Nome da série de comanda
          example: Comanda
        start_number:
          type: integer
          description: Número inicial da série de comanda
          example: 1
          maximum: 100
        end_number:
          type: integer
          description: Número final da série de comanda
          example: 100
          maximum: 100
        deleted:
          type: boolean
          description: Indica se está apagado ou não.
          example: false
          readOnly: true
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
      required:
        - name
        - start_number
        - end_number
    Aggregate:
      type: object
      properties:
        value:
          type: number
          format: float
          description: Valor da métrica para o período selecionado.
          example: 1000
        count:
          type: integer
          description: Quantidade de registros envolvidos no cálculo da métrica.
          example: 100
        additional_data:
          type: object
          description: >
            Dados adicionais da métrica de acordo com o `data_source` e
            `metric`.


            Valores possíveis:

            - `previous_value`: Valor da métrica para o período anterior.

            - `count_pending_transactions`: Quantidade de transações pendentes
            no filtro especificado.
          properties:
            previous_value:
              type: number
              format: float
              description: Valor da métrica para o período anterior.
              example: 900
            count_pending_transactions:
              type: integer
              description: Quantidade de transações pendentes no filtro especificado.
              example: 10
      required:
        - value
        - count
    SeriesItem:
      type: object
      properties:
        group:
          type: string
          description: >
            Valor do agrupamento.


            Exemplo: `2025-01-01` para o agrupamento por dia, `2025-01` para o
            agrupamento por mês, `2025` para o agrupamento por ano.
          example: '2025-01-01'
        value:
          type: number
          format: float
          description: Valor da métrica para o período selecionado.
          example: 1000
        count:
          type: integer
          description: Quantidade de registros envolvidos no cálculo da métrica.
          example: 100
      required:
        - group
        - value
        - count
    Series:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/SeriesItem'
        previous_period:
          type: array
          items:
            $ref: '#/components/schemas/SeriesItem'
      required:
        - items
    FilterSlim:
      type: object
      title: Filtro Simplificado
      description: Representa uma versão simplificada de um filtro salvo do sistema.
      properties:
        id:
          type: integer
          description: Identificador único do filtro.
          readOnly: true
          example: 123
        name:
          type: string
          minLength: 1
          maxLength: 60
          description: Nome do filtro.
          example: Produtos em estoque baixo
        system_area:
          type: string
          enum:
            - extract
          description: >
            Área do sistema à qual o filtro se aplica. Nem todas as áreas estão
            disponíveis no momento.


            - `extract`: Extrato
          example: extract
      required:
        - id
        - name
        - system_area
    FiltersResponse:
      type: object
      title: Resposta da Lista de Filtros
      description: Representa a resposta da listagem de filtros salvos do sistema.
      properties:
        filters:
          type: array
          description: Lista de filtros simplificados.
          items:
            $ref: '#/components/schemas/FilterSlim'
          example:
            - id: 123
              name: Extrato financeiro do ultimo mês
              system_area: extract
            - id: 124
              name: Extrato financeiro do ultimo ano
              system_area: extract
      required:
        - filters
    Filter:
      type: object
      title: Filtro
      description: Representa um filtro salvo do sistema.
      properties:
        id:
          type: integer
          description: Identificador único do filtro.
          readOnly: true
          example: 123
        name:
          type: string
          minLength: 1
          maxLength: 60
          description: Nome do filtro.
          example: Extrato financeiro do ultimo mês
        system_area:
          type: string
          enum:
            - extract
          description: >
            Área do sistema à qual o filtro se aplica. Nem todas as áreas estão
            disponíveis no momento.


            - `extract`: Extrato
          example: extract
        filters:
          type: object
          description: >
            Configuração dos filtros aplicados. O mesmo padrão de validação do
            relatório relacionado.


            - `extract`: `/api/v3/financial/transactions`
          example:
            type: income
            date_start: '2024-01-01'
            date_end: '2024-01-31'
        created_at:
          type: string
          format: date-time
          description: Data e hora de criação do filtro.
          readOnly: true
          example: '2024-01-15T10:30:00Z'
        updated_at:
          type: string
          format: date-time
          description: Data e hora da última atualização do filtro.
          readOnly: true
          example: '2024-01-15T14:45:00Z'
      required:
        - name
        - system_area
        - filters
    Reconciliation:
      type: object
      description: Representa uma conciliação bancária.
      properties:
        id:
          type: integer
          description: Identificador único da conciliação bancária.
          readOnly: true
          example: 123
        account_code:
          type: string
          minLength: 1
          maxLength: 50
          description: Código da conta.
          example: '123456'
        date_start:
          type: string
          format: date
          description: Data de início da conciliação bancária.
          example: '2020-01-01'
        date_end:
          type: string
          format: date
          description: Data de fim da conciliação bancária.
          example: '2020-01-01'
        transactions_count:
          type: integer
          description: Quantidade de transações da conciliação bancária.
          example: 100
        pending_count:
          type: integer
          description: Quantidade de transações pendentes da conciliação bancária.
          example: 100
        deleted_count:
          type: integer
          description: Quantidade de transações deletadas da conciliação bancária.
          example: 100
        status:
          enum:
            - completed
            - partial
            - pending
          description: |
            Status da conciliação bancária.

            - `completed` conciliação concluída.
            - `partial` conciliação parcialmente concluída.
            - `pending` conciliação pendente.
          readOnly: true
        bank:
          readOnly: true
          $ref: '#/components/schemas/Bank'
        deleted:
          type: boolean
          description: Informa se o registro está excluído
          readOnly: true
          example: false
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
      required:
        - account_code
        - date_start
        - date_end
    ReconciliationTransaction:
      type: object
      description: Representa uma transação de uma conciliação bancária.
      properties:
        id:
          type: integer
          description: Identificador único da transação.
          readOnly: true
          example: 123
        value:
          description: Valor da transação.
          $ref: '#/components/schemas/Money'
        transacted_at:
          type: string
          format: date
          description: Data da transação.
          example: '2020-01-01'
        type:
          enum:
            - PAYMENT
            - CREDIT
          description: |
            Tipo da transação.

            - `PAYMENT`: Transação de despesa
            - `CREDIT`: Transação de receita
          example: PAYMENT
        name:
          type: string
          description: Nome da transação.
          example: Pagamento Cliente ABC
        description:
          type: string
          description: Descrição da transação.
          example: Transferência bancária
        status:
          enum:
            - deleted
            - pending
            - reconciled
          description: |
            Status da transação.

            - `deleted` transação apagada.
            - `pending` transação pendente.
            - `reconciled` transação conciliada.
          readOnly: true
        financial_transactions:
          type: array
          description: Representa a lista de transações financeiras que foram conciliadas.
          items:
            $ref: '#/components/schemas/FinancialTransaction'
        created_at:
          type: string
          description: Data da última criação.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
        updated_at:
          type: string
          description: Data da última atualização.
          format: date-time
          readOnly: true
          example: '2020-01-01T09:00:00-03:00'
      required:
        - value
        - transacted_at
        - type
        - status
  responses:
    BadRequest:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Unauthorized
    NotFound:
      description: Not Found
    UnprocessableEntity:
      description: Unprocessable Entity
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ValidationError'
    NoContent:
      description: No Content
    Forbidden:
      description: Acesso negado. O usuário não tem permissão para acessar este recurso.
    AppCardContractBadRequest:
      description: Bad Request
      content:
        application/json:
          schema:
            oneOf:
              - $ref: '#/components/schemas/Error'
              - $ref: '#/components/schemas/CardContractAlreadyAssociatedException'
    TooManyRequests:
      description: Too Many Requests
  requestBodies:
    Application:
      description: Corpo requisição de um aplicativo.
      required: true
      content:
        application/json:
          schema:
            properties:
              id:
                type: integer
                description: Identificador único do aplicativo.
                readOnly: true
                example: 123
              name:
                type: string
                maxLength: 40
                minLength: 1
                description: Nome do aplicativo.
                example: Totem
              type:
                $ref: '#/components/schemas/AppTypeEnum'
              image_url:
                type:
                  - 'null'
                  - string
                description: >-
                  URL da imagem principal do aplicativo. Essa imagem é utilizada
                  como Logo do aplicativo.
                format: url
                readOnly: true
                example: https://images.connectplug.com.br/4f01c1252eea.jpg
              domain:
                type:
                  - 'null'
                  - string
                maxLength: 255
                minLength: 1
                description: >-
                  Domínio do aplicativo. Válido apenas para aplicativos tipo
                  `store`.
                example: minhaloja.connectplug.com.br
              settings:
                oneOf:
                  - $ref: '#/components/schemas/AppStoreSettings'
                  - $ref: '#/components/schemas/AppTotemSettingsBody'
                  - $ref: '#/components/schemas/AppTerminalSettingsBody'
                  - $ref: '#/components/schemas/AppServerSettingsBody'
                  - $ref: '#/components/schemas/AppOrdersheetCheckSettingsBody'
                  - $ref: '#/components/schemas/AppPosASettingsBody'
                  - $ref: '#/components/schemas/AppMobileAppSettingsBody'
                  - $ref: '#/components/schemas/AppDigitalMenuSettingsBody'
              categories:
                $ref: '#/components/schemas/AppCategory'
              card_contracts:
                $ref: '#/components/schemas/AppCardContract'
            required:
              - name
    AppDeleteRequest:
      description: Dados necessários para deletar o aplicativo
      content:
        application/json:
          schema:
            type: object
            properties:
              confirm_phrase:
                type: string
                description: >-
                  String que deve ser digitada para confirmação da remoção, tem
                  o propósito de garantir que o usuário tem certeza da operação.
                  Esta deverá sempre receber o nome exato do aplicativo.
                  Obrigatório apenas para aplicativos do tipo `server`.
                example: Meu App
    AppDuplicateRequest:
      description: Corpo da requisição para duplicar um aplicativo.
      content:
        application/json:
          schema:
            type: object
            properties:
              name:
                type: string
                description: Nome para o novo aplicativo duplicado.
                example: Meu App Duplicado
              same_sitef_id:
                type: boolean
                description: >-
                  Se o aplicativo duplicado deve ter o mesmo Sitef ID do
                  aplicativo original.
                default: false
                example: true
              company_id:
                description: Id da filial na qual o aplicativo será duplicado.
                type: number
                example: 12
    UploadImageFile:
      description: Corpo requisição do upload de uma imagem.
      required: true
      content:
        application/json:
          schema:
            type: object
            properties:
              image:
                description: >-
                  Arquivo a ser enviado no formato base64. Exemplo:
                  `data:image/png;base64,<imageBase64>`
                type: string
                format: base64
                example: data:image/png;base64,<imageBase64>
            required:
              - image
    AppRevokeLicenseBody:
      description: >
        Dados necessários para revogar a licença de um aplicativo ConnectPlug.


        Esta operação requer confirmação através de senha e frase específica
        para garantir a segurança.
      required: true
      content:
        application/json:
          schema:
            type: object
            required:
              - user_id
              - password
              - confirm_phrase
            properties:
              user_id:
                type: integer
                format: int64
                minimum: 1
                maximum: 2147483647
                description: >
                  ID do usuário que está solicitando a revogação da licença.


                  O usuário deve ter permissões adequadas para revogar licenças
                  de aplicativo.
                example: 123
              password:
                type: string
                maxLength: 60
                description: |
                  Senha do usuário para confirmação de segurança.

                  A senha será validada contra a conta do usuário especificado.
                example: minha_senha_segura
              confirm_phrase:
                type: string
                maxLength: 50
                enum:
                  - revogar
                description: >
                  Frase de confirmação obrigatória para confirmar a intenção de
                  revogar a licença.


                  Deve ser exatamente "revogar" para prosseguir com a operação.
                example: revogar
          example:
            user_id: 123
            password: minha_senha_segura
            confirm_phrase: revogar
    AppTefBody:
      description: Dados para operações de TEF
      content:
        application/json:
          schema:
            type: object
            properties:
              name:
                type: string
                maxLength: 100
                minLength: 1
                description: Nome da VPN para configuração do TEF.
                example: Nova VPN Legal
              ip:
                type: string
                format: ipv4
                description: Endereço IP da VPN. Obrigatório apenas para a ação install.
                example: 127.0.0.13
            required:
              - name
    AppSyncPaymentMethodRequest:
      description: Corpo da requisição para sincronizar métodos de pagamento do aplicativo.
      content:
        application/json:
          schema:
            type: object
            properties:
              payment_methods:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: integer
                      format: int64
                      description: ID do método de pagamento.
                      example: 1
                    is_installment_allowed:
                      type: boolean
                      description: >-
                        Indica se o método de pagamento permite parcelamento.
                        Este campo é considerado apenas para o método de
                        pagamento Cartão de Crédito.
                      example: true
                    installment_setting_ids:
                      type: array
                      items:
                        type: integer
                        format: int64
                      description: >-
                        IDs das configurações de parcelamento. Devem ser
                        relacionadas ao método de pagamento informado.
                  required:
                    - id
                description: Métodos de pagamento para sincronizar.
                example:
                  - id: 1
                    is_installment_allowed: true
                    installment_setting_ids:
                      - 1
                      - 2
                  - id: 2
                    is_installment_allowed: false
                    installment_setting_ids: []
    AppSyncRequest:
      description: Corpo da requisição para enviar sincronização para aplicativos.
      content:
        application/json:
          schema:
            type: object
            properties:
              app_ids:
                type: array
                items:
                  type: integer
                  format: int64
                description: IDs dos aplicativos para enviar sincronização.
                example:
                  - 1
                  - 2
                  - 3
            required:
              - app_ids
    CardContractRequest:
      description: Corpo requisição da criação de um contrato de cartão.
      required: true
      content:
        application/json:
          schema:
            type: object
            properties:
              title:
                type: string
                maxLength: 60
                minLength: 1
                description: Título do contrato.
                example: Cielo
              code:
                type: string
                maxLength: 60
                minLength: 1
                description: Código do contrato.
                example: CIE
              bank_account_id:
                type: integer
                description: ID da conta bancária.
                example: 123
              status:
                type: string
                description: Status do contrato.
                enum:
                  - active
                  - inactive
                example: active
              provider:
                description: Dados do provedor de cartão.
                $ref: '#/components/schemas/CardContractProviderRequest'
              settings:
                description: Configurações do contrato.
                $ref: '#/components/schemas/CardContractSettings'
              payment_methods:
                type: array
                description: Representa a lista de meios de pagamento do contrato de cartão
                items:
                  $ref: '#/components/schemas/CardContractPaymentMethodRequest'
            required:
              - title
              - bank_account_id
              - status
              - settings
              - payment_methods
    CardContractUpdateRequest:
      description: Corpo requisição da atualização de um contrato de cartão.
      required: true
      content:
        application/json:
          schema:
            type: object
            properties:
              title:
                type: string
                maxLength: 60
                minLength: 1
                description: Título do contrato.
                example: Cielo
              code:
                type: string
                maxLength: 60
                minLength: 1
                description: Código do contrato.
                example: CIE
              bank_account_id:
                type: integer
                description: ID da conta bancária.
                example: 123
              status:
                type: string
                description: Status do contrato.
                enum:
                  - active
                  - inactive
                example: active
              provider:
                description: Dados do provedor de cartão.
                $ref: '#/components/schemas/CardContractProviderRequest'
              settings:
                description: Configurações do contrato.
                $ref: '#/components/schemas/CardContractSettings'
              payment_methods:
                type: array
                description: Representa a lista de meios de pagamento do contrato de cartão
                items:
                  $ref: '#/components/schemas/CardContractPaymentMethodRequest'
            required:
              - title
              - bank_account_id
              - status
              - settings
              - payment_methods
    CashRegister:
      description: Corpo requisição de uma caixa registradora.
      required: true
      content:
        application/json:
          schema:
            type: object
            title: Caixa Registradora
            description: Representa a Caixa Registradora.
            properties:
              name:
                type: string
                description: Nome da caixa registradora
                example: Caixa Registradora Principal - Loja Centro
              status:
                type: string
                description: Status da caixa registradora
                enum:
                  - active
                  - inactive
                example: active
              print_point_id:
                type: integer
                description: ID do ponto de impressão
                example: 1
              print_point_balance_id:
                type: integer
                description: ID do ponto de impressão de saldo
                example: 1
              config_sat_id:
                type: integer
                description: ID da configuração do SAT
                example: 1
              number:
                type: string
                description: Número da caixa registradora
                example: '001'
              contingency_enabled:
                type: boolean
                description: Indica se o modo de contingência está habilitado
                default: false
                example: true
              server_offline_id:
                type: integer
                description: ID do servidor offline
                example: 1
            required:
              - name
              - status
    CostCenter:
      description: Corpo da requisição de um centro de custo.
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CostCenter'
    AccessToken:
      description: Corpo requisição para geração de Access Token.
      required: true
      content:
        application/json:
          schema:
            properties:
              grant_type:
                type: string
                description: >-
                  O tipo de concessão OAuth. Atualmente, os tipos suportados são
                  `password` e `refresh_token`.
                example: password
              client_id:
                type: string
                description: Identificador do Client.
                example: 3e461137-6619-4d1e-9644-78bfa652539b
              client_secret:
                type: string
                description: Secret do Client.
                example: fXiVP5k1NUDVqx6rHGzlBdJA5wG5GJpXSmWmyZX1
              username:
                type: string
                format: email
                description: |
                  E-mail do usuário a ser autenticado. 

                  **Só é necessário ao usar o fluxo *grant_type* `password`**.
                example: test@test.com
              password:
                type: string
                format: password
                description: |
                  Senha do usuário a ser autenticado. 

                  **Só é necessário ao usar o fluxo *grant_type* `password`**.
                example: '123456'
              refresh_token:
                type: string
                description: >
                  O *Refresh Token* que é retornado junto da solicitação do
                  *Access Token*. 


                  **Só é necessário ao usar o fluxo *grant_type*
                  `refresh_token`**.
                example: fXiVP5k1NUDVqx6rHGzlBdJ....
              scope:
                type: string
                description: >
                  Lista de permissões que o token terá acesso. Pode ser
                  solicitado mais de uma permissão para um Token. Cada permissão
                  deve ser separadas por espaço em branco.


                  Para retornar a lista de permissões disponíveis no sistema,
                  utilizar o *endpoint* `/oauth/scopes`.
                example: categories:read categories:write
    LegacyLogin:
      description: Corpo requisição para login legado.
      required: true
      content:
        application/json:
          schema:
            type: object
            additionalProperties: false
            properties:
              access_token:
                type: string
                description: >
                  Token de acesso JWT para autenticação.


                  Você pode gerar um token de acesso no _endpoint_ de [Solicitar
                  Access
                  Token](#tag/Authentication/operation/post-legacy-login).
                example: eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9...
              company_id:
                type: integer
                description: >
                  Id da Empresa (Company).


                  Você pode localizar os IDs das empresas no _endpoint_ de
                  [listagem de
                  empresas](#tag/Companies/operation/get-companies).
                example: 1
            required:
              - access_token
              - company_id
    Category:
      description: Corpo requisição de uma categoria.
      required: true
      content:
        application/json:
          schema:
            type: object
            title: Categoria
            description: Representa a Categoria que pode estar relacionado com um Produto.
            properties:
              id:
                type: integer
                description: Identificador único da categoria.
                readOnly: true
                example: 123
              name:
                type: string
                maxLength: 120
                minLength: 1
                description: Nome da categoria.
                example: Categoria
              code:
                type: string
                maxLength: 30
                description: Código (SKU) da categoria.
                example: ABC-123
              status:
                type: string
                description: Status da categoria.
                enum:
                  - available
                  - unavailable
                example: available
              icon_id:
                type: integer
                description: >-
                  Código do ícone retornado pelo endpoint [listagem de
                  ícones](#tag/Icons/operation/get-icons)
                example: 1
              parent_id:
                type: integer
                description: >
                  Código da categoria pai a qual esta categoria irá fazer parte


                  OBS: É possível criar no máximo 3 subcategorias para uma
                  categoria raiz
                example: 1
              companies:
                $ref: '#/components/schemas/ByCompany'
              created_at:
                type: string
                description: Data da última criação.
                format: date-time
                readOnly: true
                example: '2020-01-01T09:00:00-03:00'
              updated_at:
                type: string
                description: Data da última atualização.
                format: date-time
                readOnly: true
                example: '2020-01-01T09:00:00-03:00'
            required:
              - id
              - name
    IntegrationUpdate:
      description: >
        Dados para atualização de uma integração.


        **A estrutura do payload varia significativamente entre diferentes
        integrações.** Cada integração pode ter:

        - Diferentes campos de autenticação (credentials array, campos diretos,
        ou auth vazio)

        - Diferentes campos de configuração obrigatórios/opcionais

        - Estruturas específicas para cada fornecedor
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/IntegrationUpdateRequest'
          examples:
            epadoca_oauth:
              summary: Epadoca - OAuth Client Credentials
              value:
                auth:
                  credentials:
                    - client_id: epadoca_client_12345
                      client_secret: epadoca_secret_abcdef
                configs:
                  payment_method_id: 1
                  seller_id: 8
                  auto_accept_order: true
            delivery_direto:
              summary: Delivery Direto - Username/Password + Integration ID
              value:
                auth:
                  credentials:
                    - merchant_name: Restaurante ABC
                      username: meu_usuario
                      password: minha_senha
                      integration_id: dd_integration_456
                configs:
                  payment_method_id: 2
                  seller_id: 5
                  auto_accept_order: false
            believery_simple:
              summary: Believery - Username/Password simples
              value:
                auth:
                  credentials:
                    - username: believery_user
                      password: believery_password
                configs:
                  payment_method_id: 1
                  seller_id: 3
                  auto_accept_order: true
            onpedido_token:
              summary: Onpedido - Merchant Token + Credenciais
              value:
                auth:
                  credentials:
                    - merchantToken: onpedido_merchant_token_123
                      username: onpedido_user
                      password: onpedido_pass
                configs:
                  payment_method_id: 1
                  seller_id: 7
                  auto_accept_order: false
            quero_delivery:
              summary: Quero Delivery - Apenas Place ID
              value:
                auth:
                  credentials:
                    - place_id: place_abcd1234
                configs:
                  payment_method_id: 1
                  seller_id: 6
            accon_v1_direct:
              summary: Accon V1 - Auth direto (não usa credentials array)
              value:
                auth:
                  email: admin@accon.com
                  password: accon_password
                configs:
                  network: rede_accon_123
                  payment_method_id: 1
                  seller_id: 5
            accon_v2_direct:
              summary: Accon V2 - Client Credentials direto
              value:
                auth:
                  client_id: accon_v2_client
                  client_secret: accon_v2_secret
                configs:
                  payment_method_id: 1
                  seller_id: 3
                  auto_accept_order: false
            rappi_complex:
              summary: Rappi - Auth vazio + Configs complexas
              value:
                auth: {}
                configs:
                  merchant_ids:
                    - rappi_store_123
                    - rappi_store_456
                  menu_ids:
                    - menu_789
                  payment_method_id: 2
                  seller_id: 4
                  auto_accept_order: true
                  menu_option: automatic
                  validations_should_skipped: []
            ifood_complex:
              summary: iFood V2 - Auth vazio + Configs avançadas
              value:
                auth: {}
                configs:
                  merchant_ids:
                    - ifood_merchant_123
                  merchant_names:
                    - Restaurante XYZ
                  merchant_delivery:
                    - true
                  payment_method_id: 1
                  seller_id: 5
                  integration_delivery: true
                  disable_product_out_of_stock: true
                  stock_id: 1
                  auto_accept_order: false
                  shipping_on_sale: false
                  require_shipping_code: true
            aiqfome_direct:
              summary: Aiqfome - Username/Password direto no auth
              value:
                auth:
                  username: aiqfome_user
                  password: aiqfome_password
                configs:
                  payment_method_id: 1
                  seller_id: 6
                  auto_accept_order: true
    TrayProductsConciliationBody:
      description: Dados para conciliação de produtos da integração Tray
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/TrayProductsConciliationBody'
          example:
            action: conciliate
            product_erp_id: 4
    TrayProductsImportBody:
      description: Dados para importação de produtos da integração Tray
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/TrayProductsImportExportBody'
          example:
            ids:
              - 1
              - 2
              - 3
    TrayProductsExportBody:
      description: Dados para exportação de produtos da integração Tray
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/TrayProductsImportExportBody'
          example:
            ids:
              - 1
              - 2
              - 3
    Company:
      description: Corpo requisição de uma cliente.
      content:
        application/json:
          schema:
            required:
              - name
              - type_of_business
            properties:
              name:
                type: string
                minLength: 1
                maxLength: 120
                description: Nome fantasia da empresa.
                example: ConnectPlug
              code:
                type: string
                minLength: 3
                maxLength: 12
                description: |
                  Código da empresa.

                  Apenas a empresa matriz pode atualizar o código da empresa.

                  `Proibido ao criar uma nova empresa.`
                example: '100'
              cnae_id:
                type: number
                description: ID do CNAE da empresa.
                example: 1
              type_of_business:
                type: string
                enum:
                  - food
                description: >
                  Tipo da empresa. 


                  A listagem de tipos de empresa pode ser obtida através do
                  [listagem de tipos de
                  empresas](#tag/typebusiness/get-types-of-business).
                example: food
              clone_account_plan_from_company_id:
                type: number
                description: >
                  ID da empresa de origem para clonar o plano de contas.


                  Utilizado apenas na criação de uma nova empresa, quando
                  enviado, o plano de contas da empresa de origem será clonado
                  para a nova empresa.


                  `Proibido ao atualizar uma empresa.`
                example: 1
              company_name:
                type: string
                minLength: 1
                maxLength: 120
                description: Razão social da empresa
                example: ConnectPlug Desenvolvimento de Software LTDA
              founding_date:
                type: string
                format: date
                description: Data da fundação da empresa. Formato "YYYY-MM-DD"
                example: '2016-01-15'
              documents:
                type: array
                description: |
                  Lista de documentos da empresa.

                  Apenas os tipos `cnpj` é suportado.
                items:
                  $ref: '#/components/schemas/Document'
              address:
                $ref: '#/components/schemas/Address'
              contacts:
                type: array
                description: >
                  Lista de contatos da empresa.


                  Atualmente, apenas o tipo `phone` é suportado, que é o número
                  de telefone principal da empresa.
                items:
                  $ref: '#/components/schemas/Contact'
              owner_contact:
                type: object
                description: Contato do proprietário da empresa.
                properties:
                  name:
                    type: string
                    description: Nome do proprietário da empresa.
                    example: João da Silva
                  contacts:
                    type: array
                    description: |
                      Lista de contatos do proprietário da empresa.
                    items:
                      $ref: '#/components/schemas/Contact'
              financial_contact:
                type: object
                description: Contato financeiro da empresa.
                properties:
                  name:
                    type: string
                    description: Nome do contato financeiro da empresa.
                    example: João da Silva
                  contacts:
                    type: array
                    description: |
                      Lista de contatos do contato financeiro da empresa.

                      Apenas o tipo `phone` e `email` são suportados.
                    items:
                      $ref: '#/components/schemas/Contact'
              settings:
                type: object
                title: Configurações
                description: Configurações da Empresa.
                properties:
                  theme:
                    type: object
                    description: Configurações do Tema.
                    properties:
                      primary_color:
                        type: string
                        description: Cor primárias (HEXA)
                        example: '#123123'
                      secondary_color:
                        type: string
                        description: Cor secundária (HEXA)
                        example: '#123123'
    UploadCertificateFile:
      description: Corpo requisição do upload de um certificado.
      required: true
      content:
        multipart/form-data:
          schema:
            type: object
            properties:
              certificate:
                description: |
                  Arquivo do certificado digital.

                  **Formatos suportados:**
                  - .p12 (PKCS#12)
                  - .pfx (Personal Information Exchange)
                type: string
                format: binary
                example: certificate.pfx
              password:
                type: string
                description: Senha do certificado.
                example: '123456'
            required:
              - certificate
              - password
    CompanyBillingBody:
      description: Corpo de requisição para dados de cobrança da empresa.
      content:
        application/json:
          schema:
            type: object
            properties:
              name:
                type: string
                maxLength: 120
                description: Nome para cobrança da empresa.
                example: Nome para Cobrança - alt
              document_type:
                type: string
                enum:
                  - cpf
                  - cnpj
                description: |
                  Tipo do documento de cobrança.

                  - `cpf`: CPF Pessoa física
                  - `cnpj`: CNPJ Pessoa jurídica
                example: cpf
              document:
                type: string
                maxLength: 40
                description: Número do documento de cobrança.
                example: '03450298100'
              address:
                type: array
                description: >
                  Lista de endereços de cobrança da empresa.


                  **Se fornecido, verifique os campos do endereço que são
                  obrigatórios.**
                items:
                  type: object
                  required:
                    - type
                    - street
                    - number
                    - ibge_code
                    - city_id
                    - neighborhood
                    - zip_code
                  properties:
                    type:
                      type: string
                      enum:
                        - charge
                      description: |
                        Tipo do endereço.

                        - `charge` endereço de cobrança.
                      example: charge
                    street:
                      type: string
                      maxLength: 100
                      description: Nome do logradouro (Rua, Avenida, praça, etc).
                      example: Rua teste
                    number:
                      type: string
                      maxLength: 60
                      description: Número do logradouro.
                      example: '12'
                    ibge_code:
                      type: string
                      maxLength: 7
                      description: Código do município segundo IBGE.
                      example: '3550309'
                    city_id:
                      type: number
                      description: ID da cidade.
                      example: 3898
                    neighborhood:
                      type: string
                      maxLength: 80
                      description: Nome do Bairro.
                      example: Bairro teste
                    complement:
                      type: string
                      maxLength: 255
                      description: Complemento do endereço.
                      example: Complemento teste
                    zip_code:
                      type: string
                      maxLength: 8
                      description: CEP do endereço.
                      example: '12345678'
    CompanyUseDefinitionsBody:
      description: Corpo de requisição para definições de uso da empresa.
      content:
        application/json:
          schema:
            type: object
            required:
              - price_list_erp_id
              - price_list_pdv_id
              - price_list_attendance_id
              - price_list_report_id
              - stock_sale_id
              - stock_purchase_id
            properties:
              price_list_erp_id:
                type: integer
                description: ID da lista de preços do ERP.
                example: 52
              price_list_pdv_id:
                type: integer
                description: ID da lista de preços do PDV.
                example: 1
              price_list_attendance_id:
                type: integer
                description: ID da lista de preços do atendimento.
                example: 1
              price_list_report_id:
                type: integer
                description: ID da lista de preços dos relatórios.
                example: 1
              stock_sale_id:
                type: integer
                description: ID do estoque de venda.
                example: 95
              stock_purchase_id:
                type: integer
                description: ID do estoque de compra.
                example: 95
              admin_password:
                type: integer
                description: >
                  Senha administrativa de aplicativos.


                  **Campo opcional.** Será validado e alterado apenas se
                  enviado.
                example: 333333
    MeasurementUnit:
      description: Corpo requisição de uma unidade de medida.
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/MeasurementUnit'
    Product:
      description: Corpo requisição de um produto.
      required: true
      content:
        application/json:
          schema:
            type: object
            title: Produto
            description: Representa um Produto.
            properties:
              id:
                type: integer
                description: Identificador único do produto.
                readOnly: true
                example: 123
              name:
                type: string
                maxLength: 200
                minLength: 1
                description: Nome do produto.
                example: Nome do produto
              type:
                type: string
                description: |
                  Tipo do produto.

                  - `simple`: Produto simples.
                  - `combo`: Produto combo.
                  - `production_process`: Processo produtivo.
                  - `automatic_production`: Produção automática.
                  - `component`: Insumo.
                enum:
                  - simple
                  - combo
                  - production_process
                  - automatic_production
                  - component
                example: simple
              sku:
                type: string
                description: |
                  Código SKU do produto. 

                  **Esse código deve ser único**.

                  Exemplo: COD-CP-01
                maxLength: 30
                example: COD-CP-01
              unitary_value:
                description: >
                  Preço do produto. 


                  Esse campo pode ser opcional quando o produto for do tipo
                  "**Combo**".
                $ref: '#/components/schemas/Money'
              category_id:
                type: integer
                description: Identificador da categoria do produto.
                writeOnly: true
                example: 1
              category:
                type: object
                description: Categoria do produto.
                readOnly: true
                properties:
                  id:
                    type: integer
                    description: Identificador único da categoria.
                    example: 1
                  name:
                    type: string
                    minLength: 1
                    maxLength: 120
                    description: Nome da categoria.
                    example: Nome da categoria
              unit_id:
                type: integer
                description: Identificador da unidade de medida do produto.
                writeOnly: true
                example: 1
              unit:
                type: object
                description: Unidade de medida do produto.
                readOnly: true
                properties:
                  id:
                    type: integer
                    description: Identificador único da unidade de medida.
                    example: 1
                  name:
                    type: string
                    minLength: 1
                    maxLength: 50
                    description: Nome da unidade de medida, exemplo "quilos".
                    example: Kilos
                  abbreviation:
                    type: string
                    minLength: 1
                    maxLength: 5
                    description: A abreviatura da unidade, exemplo "kg".
                    example: kg
                  precision:
                    type: integer
                    minimum: 0
                    maximum: 6
                    description: >
                      Um número inteiro entre 0 e 6 que representa o número
                      máximo de posições permitidas após o decimal em
                      quantidades medidas com esta unidade.

                      Por exemplo:
                        - se a precisão for `0`, a quantidade pode ser `1`, `2`, `3`, etc.
                        - se a precisão for `1`, a quantidade pode ser `0.1`, `0.2`, `0.3`, etc.
                        - se a precisão for `2`, a quantidade pode ser `0.01`, `0.02`, `0.03`, etc.
                    example: 1
              description:
                type:
                  - 'null'
                  - string
                maxLength: 500
                description: Descrição do produto.
                example: Descrição do produto.
              barcodes:
                type: array
                description: Lista dos códigos de barras do produto.
                items:
                  type: string
                  description: Código de barra do produto.
                  maxLength: 30
                  example: '6683713903949'
              attributes:
                type: array
                deprecated: true
                description: >
                  ⚠️ **DEPRECIADO**: Este campo será removido nas próximas
                  versões. Utilize este
                  [endpoint](#tag/Products/operation/put-products-attributes)
                  para adicionar atributos ao produto.


                  Lista de atributos relacionado com o produto.


                  Produtos do tipo "**Combo**" não podem conter atributos.
                items:
                  $ref: '#/components/schemas/ProductAttributeAssociation'
              components:
                type: array
                deprecated: true
                description: >
                  ⚠️ **DEPRECIADO**: Este campo será removido nas próximas
                  versões. Utilize este
                  [endpoint](#tag/Products/operation/update-products-compositions)
                  para adicionar componentes ao produto.


                  Lista de componentes do produto.
                items:
                  $ref: '#/components/schemas/ProductComposition'
              grids:
                type: array
                deprecated: true
                description: >
                  ⚠️ **DEPRECIADO**: Este campo será removido nas próximas
                  versões. Utilize este
                  [endpoint](#tag/Products/operation/post-products) para
                  adicionar grade de preços ao produto.


                  Lista de grade de preços do produto.


                  Apenas produtos do tipo "**Simples**" podem conter grade de
                  preços.
                items:
                  $ref: '#/components/schemas/ProductGrid'
              additionals:
                description: Configurações dos produtos adicionais de um produto.
                $ref: '#/components/schemas/ProductAdditionals'
              recommendations:
                type: array
                description: >
                  Lista de produtos a serem sugeridos como recomendação na venda
                  do produto principal.
                items:
                  $ref: '#/components/schemas/ProductRecommendation'
              image_url:
                type:
                  - 'null'
                  - string
                description: URL da imagem principal do produto.
                format: url
                readOnly: true
                example: https://images.connectplug.com.br/4f01c1252eea.jpg
              companies:
                $ref: '#/components/schemas/ByCompany'
              is_perishable:
                type: boolean
                description: Se este produto é perecível.
                example: false
              stock_settings:
                type: object
                description: Configurações de estoque do produto.
                properties:
                  is_stock_control:
                    type: boolean
                    description: Se este produto possui um controle de estoque.
                    example: true
                  is_stock_notification:
                    type: boolean
                    description: Se este produto tem notificação de estoque.
                    example: false
                  min:
                    type: integer
                    description: >-
                      Se `is_stock_notification` = `true`. Quantidade mínima no
                      estoque.
                    example: 1
                  max:
                    type: integer
                    description: >-
                      Se `is_stock_notification` = `true`. Quantidade máxima no
                      estoque.
                    example: 1
              kds_ids:
                type: array
                description: >
                  Id do KDS. 


                  Você pode localizar os IDs dos KDS no _endpoint_ de [listagem
                  de kds](#tag/Kds/operation/get-kds).
                items:
                  type: integer
                  example: 1
                example:
                  - 1
                  - 2
                  - 3
              created_at:
                type: string
                description: Data da última criação.
                format: date-time
                readOnly: true
                example: '2020-01-01T09:00:00-03:00'
              updated_at:
                type: string
                description: Data da última atualização.
                format: date-time
                readOnly: true
                example: '2020-01-01T09:00:00-03:00'
            required:
              - id
              - name
              - sku
              - unitary_value
              - category_id
              - category
              - unit_id
              - unit
    ProductConsumptionCouponRequest:
      description: >-
        Corpo da requisição para atualizar as configurações de fichas de consumo
        de produtos
      content:
        application/json:
          schema:
            type: object
            properties:
              items:
                type: array
                description: Lista de configurações de fichas de consumo por produto.
                items:
                  type: object
                  properties:
                    product_id:
                      type: integer
                      description: ID do produto.
                      example: 1
                    is_enabled:
                      type: boolean
                      description: >-
                        Define se a geração de ficha de consumo do produto está
                        habilitada.
                      example: true
                  required:
                    - product_id
                    - is_enabled
            required:
              - items
    ProductAttribute:
      description: Corpo requisição de um atributo de produto.
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ProductAttribute'
    ProductAttributeOption:
      description: Corpo requisição de uma opção de um atributo.
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ProductAttributeOption'
    Customer:
      description: Corpo requisição de um cliente.
      required: true
      content:
        application/json:
          schema:
            allOf:
              - type: object
                title: Cliente
                description: Representa um Cliente.
                properties:
                  id:
                    type: integer
                    description: Identificador único do Cliente.
                    readOnly: true
                    example: 123
                  name:
                    type: string
                    minLength: 1
                    maxLength: 120
                    description: Nome do cliente pessoa física ou Razão social.
                    example: Nome do Cliente
                  type:
                    type: string
                    enum:
                      - individual
                      - company
                    description: |
                      Tipo do cliente.

                      - `individual` (Pessoa física)
                      - `company` (Pessoa jurídica)
                    example: individual
                  birthday:
                    type: string
                    format: date
                    description: >-
                      Data de nascimento do cliente pessoa física. Formato
                      "YYYY-MM-DD"
                    example: '1990-12-25'
                  company_name:
                    type: string
                    maxLength: 120
                    description: Razão Social
                    example: MyCompany
                  notes:
                    type: string
                    description: Observações do cliente.
                    example: Minhas obervações do cliente
                  created_at:
                    type: string
                    description: Data da última criação.
                    format: date-time
                    readOnly: true
                    example: '2020-01-01T09:00:00-03:00'
                  updated_at:
                    type: string
                    description: Data da última atualização.
                    format: date-time
                    readOnly: true
                    example: '2020-01-01T09:00:00-03:00'
                  contacts:
                    type: array
                    description: Lista de contatos do cliente.
                    items:
                      $ref: '#/components/schemas/Contact'
                  addresses:
                    type: array
                    description: Lista de endereços do cliente.
                    items:
                      $ref: '#/components/schemas/Address'
                  documents:
                    type: array
                    description: Representa a lista de documentos
                    items:
                      allOf:
                        - $ref: '#/components/schemas/Document'
                  companies:
                    type: array
                    description: Lista de empresas que permite visualizar.
                    items:
                      $ref: '#/components/schemas/ByCompany'
                  customer_category_id:
                    type: integer
                    description: >
                      Identificador único da categoria do cliente.


                      Você pode localizar os IDs das categorias de cliente no
                      _endpoint_ de [listagem de categorias de
                      clientes](#tag/CustomerCategory/operation/get-customer-categories).
                    example: 123
                required:
                  - type
                  - name
    Addresses:
      description: Corpo requisição para salvar uma lista de endereços.
      required: true
      content:
        application/json:
          schema:
            type: object
            additionalProperties: false
            properties:
              addresses:
                type: array
                description: Representa a lista de endereços
                items:
                  allOf:
                    - $ref: '#/components/schemas/Address'
    Documents:
      description: Corpo requisição para salvar uma lista de documentos.
      required: true
      content:
        application/json:
          schema:
            type: object
            additionalProperties: false
            properties:
              documents:
                type: array
                description: Representa a lista de documentos
                items:
                  allOf:
                    - $ref: '#/components/schemas/Document'
    DeliveryArea:
      description: Corpo requisição de uma área de entrega.
      required: true
      content:
        application/json:
          schema:
            type: object
            title: Área de entrega
            description: Representa uma área de entrega.
            properties:
              district:
                type: string
                description: >
                  Nome do bairro. Deve pertencer a cidade informada no campo
                  `city_id` com o nome exato.


                  `Atenção`: Não pode existir mais de uma área de entrega com o
                  mesmo bairro para a mesma cidade.
                example: Centro
              city_id:
                type: integer
                description: ID da cidade.
                example: 123
              price:
                $ref: '#/components/schemas/Money'
            required:
              - district
              - city_id
              - price
    RequestedNotesScheduleCreateRequest:
      description: Dados para criação de agendamento de solicitação de notas
      required: true
      content:
        application/json:
          schema:
            type: object
            title: Criar Agendamento de Solicitação de Notas
            description: >-
              Dados necessários para criar um agendamento de solicitação de
              notas fiscais.
            properties:
              day:
                type: integer
                description: Dia do mês para envio das notas (1-31).
                minimum: 1
                maximum: 31
                example: 10
              email:
                type: string
                format: email
                description: E-mail para onde serão enviadas as notas.
                example: usuario@email.com.br
            required:
              - day
              - email
          examples:
            default:
              summary: Exemplo padrão
              value:
                day: 10
                email: usuario@email.com.br
    NfeEmittedDocumentsSendEmailRequest:
      description: Dados para envio de NFe emitidas por e-mail
      required: true
      content:
        application/json:
          schema:
            type: object
            title: Enviar NFe Emitidas por E-mail
            description: >-
              Dados necessários para enviar documentos fiscais eletrônicos
              emitidos por e-mail.
            additionalProperties: false
            properties:
              email:
                type: string
                format: email
                description: E-mail para onde serão enviadas as NFe.
                example: email@teste.com
              date_start:
                type: string
                format: date
                description: Data inicial para filtrar os documentos (data de emissão).
                example: '2025-09-01'
              date_end:
                type: string
                format: date
                description: Data final para filtrar os documentos (data de emissão).
                example: '2025-09-30'
            required:
              - email
              - date_start
              - date_end
          examples:
            default:
              summary: Exemplo padrão
              value:
                email: email@teste.com
                date_start: '2025-09-01'
                date_end: '2025-09-30'
    OpeningHoursRequest:
      description: Corpo requisição para horários de funcionamento.
      required: true
      content:
        application/json:
          schema:
            type: object
            title: Horários de funcionamento
            description: Representa um conjunto de horários de funcionamento.
            properties:
              opening_hours:
                type: array
                description: >
                  Lista de horários de funcionamento.


                  `Atenção`: Caso este campo seja vazio, todos os horários de
                  funcionamento serão apagados.
                items:
                  $ref: '#/components/schemas/Shift'
            required:
              - opening_hours
    Payment:
      description: Corpo requisição de um método de pagamento.
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Payment'
    SaleOrderRequest:
      description: Corpo requisição da criação de um pedido de venda.
      required: true
      content:
        application/json:
          schema:
            type: object
            properties:
              unique_id:
                type: string
                description: >-
                  Identificador único do pedido de venda. O UUID deve ser gerado
                  por você.
                format: uuid
                example: cf2e0a5e-aa58-4181-9c9b-47702bd2be99
              items:
                type: array
                description: Lista de produtos deste pedido.
                items:
                  $ref: '#/components/schemas/SaleOrderItemBodyRequest'
              seller_id:
                type: integer
                description: Id único do vendedor
                example: 123
              total:
                description: Resumo monetário da venda
                $ref: '#/components/schemas/SaleTotalsBody'
              source_type:
                $ref: '#/components/schemas/SourceType'
              payments:
                type: array
                description: Lista de pagamentos.
                items:
                  $ref: '#/components/schemas/SalePaymentBody'
              delivery_type:
                enum:
                  - delivery
                  - withdrawal
                description: |
                  Tipo de entrega do pedido:

                  - `delivery` entrega
                  - `withdrawal` retirada
              nature_transaction_id:
                type: integer
                description: Id da natureza da operação
                example: 123
              carrier:
                description: Dados do transportador e do frete
                $ref: '#/components/schemas/SaleCarrierBody'
              address:
                description: Dados do endereço do pedido
                $ref: '#/components/schemas/AddressBody'
              customer_id:
                type: integer
                description: Id do cliente
                example: 123
              document_number:
                type: string
                description: CPF ou CNPJ na nota
                example: 123.456.789-00
              observation:
                type: string
                description: Obervação da venda
                example: Sem copo
              user_id:
                type: integer
                description: Id do usuário logado
                example: 123
              company_id:
                type: integer
                description: Id da empresa que fez o pedido de venda
                example: 123
              sale_number:
                type: integer
                description: >-
                  Número do pedido de venda. Este número pode ser gerado por
                  você. Caso não envie, o sistema irá gerar automaticamente para
                  você.
                example: 1234
              contingency_code:
                type: integer
                description: Número do pedido de venda em contigência
                example: 12345
              registration_date:
                type: string
                description: Data do registro do pedido de venda.
                format: date-time
                example: '2020-01-01T09:00:00-03:00'
              status:
                enum:
                  - canceled
                  - closed
                  - in_preparation
                  - in_route
                  - open
                  - reserved
                  - takeout
                  - waiting
                description: |
                  Tipo de status do pedido:

                  - `canceled` pedido cancelada.
                  - `closed` pedido fechada.
                  - `in_preparation` pedido em preparação.
                  - `in_route` pedido em entrega.
                  - `open` pedido aberto.
                  - `reserved` pedido reservado.
                  - `takeout` pedido para retirar.
                  - `waiting` pedido em espera.
            required:
              - unique_id
              - items
              - seller_id
              - source_type
              - items
              - total
              - payments
              - delivery_type
    SaleOrderConvertToSaleRequest:
      description: Corpo requisição da conversão de um pedido de venda em uma venda.
      required: true
      content:
        application/json:
          schema:
            type: object
            properties:
              sale_orders:
                type: array
                description: Lista de pedidos de venda a serem convertidos.
                items:
                  type: object
                  description: Representa um pedido de venda a ser convertido.
                  properties:
                    id:
                      type: integer
                      description: >
                        Id único do pedido de venda.


                        Você pode localizar os IDs dos pedidos de venda no
                        _endpoint_ de [listagem de pedidos de
                        venda](#tag/SaleOrders/operation/get-sale-orders).
                      example: 123
                    convert_without_link:
                      type: boolean
                      description: >
                        Indica se o pedido de venda deve ser convertido sem
                        linkar com a venda.


                        Se `true`, o pedido de venda será convertido sem linkar
                        com a venda.
                      example: false
                      default: false
                  required:
                    - id
    SaleOrderUpdateRequest:
      description: Corpo requisição de atualização de um pedido de venda.
      required: true
      content:
        application/json:
          schema:
            type: object
            properties:
              items:
                type: array
                description: Lista de produtos deste pedido.
                items:
                  $ref: '#/components/schemas/SaleOrderItemUpdateRequest'
              seller_id:
                type: integer
                description: Id único do vendedor
                example: 123
              total:
                description: Resumo monetário da venda
                $ref: '#/components/schemas/SaleTotalsBody'
              source_type:
                $ref: '#/components/schemas/SourceType'
              payments:
                type: array
                description: Lista de pagamentos.
                items:
                  $ref: '#/components/schemas/SalePaymentUpdateBody'
              delivery_type:
                enum:
                  - delivery
                  - withdrawal
                description: |
                  Tipo de entrega do pedido:

                  - `delivery` entrega
                  - `withdrawal` retirada
              nature_transaction_id:
                type: integer
                description: Id da natureza da operação
                example: 123
              carrier:
                description: Dados do transportador e do frete
                $ref: '#/components/schemas/SaleCarrierBody'
              address_id:
                type: integer
                description: Id do endereço
                example: 123
              customer_id:
                type: integer
                description: Id do cliente
                example: 123
              document_number:
                type: string
                description: CPF ou CNPJ na nota
                example: 123.456.789-00
              observation:
                type: string
                description: Obervação da venda
                example: Sem copo
              user_id:
                type: integer
                description: Id do usuário logado
                example: 123
              company_id:
                type: integer
                description: Id da empresa que fez o pedido de venda
                example: 123
              sale_number:
                type: integer
                description: >-
                  Número do pedido de venda. Este número pode ser gerado por
                  você. Caso não envie, o sistema irá gerar automaticamente para
                  você.
                example: 1234
              contingency_code:
                type: integer
                description: Número do pedido de venda em contigência
                example: 12345
              registration_date:
                type: string
                description: Data do registro do pedido de venda.
                format: date-time
                example: '2020-01-01T09:00:00-03:00'
              status:
                enum:
                  - canceled
                  - closed
                  - in_preparation
                  - in_route
                  - open
                  - reserved
                  - takeout
                  - waiting
                description: >
                  Status do pedido de venda.


                  Ao mudar o status para  **closed**, gerará uma **venda** e
                  **não** será mais permitido a alteração do pedido


                  - `canceled` pedido de venda cancelada.

                  - `closed` pedido de venda fechada.

                  - `in_preparation` pedido em preparação.

                  - `in_route` pedido em entrega.

                  - `open` pedido de venda aberta.

                  - `reserved` pedido de venda reservada.

                  - `takeout` pedido para retirar.

                  - `waiting` pedido de venda em espera.
            required:
              - items
              - seller_id
              - source_type
              - items
              - total
              - payments
              - delivery_type
    SaleOrderStatusUpdateRequest:
      description: Corpo requisição de atualização do status de um pedido de venda.
      required: true
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                enum:
                  - canceled
                  - closed
                  - in_preparation
                  - in_route
                  - open
                  - reserved
                  - takeout
                  - waiting
                description: >
                  Tipo de status do pedido:


                  - `canceled` pedido cancelada.

                  - `closed` pedido fechada.

                  - `in_preparation` pedido em preparação.

                  - `in_route` pedido em entrega.

                  - `open` pedido aberto.

                  - `reserved` pedido reservado.

                  - `takeout` pedido para retirar.

                  - `waiting` pedido em espera.


                  Ao mudar o status para `closed`, o pedido **gerará uma venda**
                  e **NÂO** será possível mais mudar o status do pedido.
              payments:
                description: Lista de pagamentos que foram feitos.
                items:
                  $ref: '#/components/schemas/SaleOrderStatusPaymentUpdateRequest'
            required:
              - status
    Sale:
      description: Corpo requisição da criação de uma venda.
      required: true
      content:
        application/json:
          schema:
            type: object
            properties:
              unique_id:
                type: string
                description: Identificador único da venda. O UUID deve ser gerado por você.
                format: uuid
                example: cf2e0a5e-aa58-4181-9c9b-47702bd2be99
              items:
                type: array
                description: Lista de produtos desta venda.
                items:
                  $ref: '#/components/schemas/SaleItemBodyRequest'
              seller_id:
                type: integer
                description: Id único do vendedor
                example: 123
              source_type:
                $ref: '#/components/schemas/SourceType'
              total:
                description: Resumo monetário da venda
                $ref: '#/components/schemas/SaleTotalsBody'
              payments:
                type: array
                description: Lista de pagamentos.
                items:
                  $ref: '#/components/schemas/SalePaymentBody'
              delivery_type:
                enum:
                  - delivery
                  - withdrawal
                description: |
                  Tipo de entrega do pedido:

                  - `delivery` entrega
                  - `withdrawal` retirada
              nature_transaction_id:
                type: integer
                description: Id da natureza da operação
                example: 123
              carrier:
                description: Dados do transportador e do frete
                $ref: '#/components/schemas/SaleCarrierBody'
              address_id:
                type: integer
                description: Id do endereço
                example: 123
              customer_id:
                type: integer
                description: Id do cliente
                example: 123
              document_number:
                type: string
                description: CPF ou CNPJ na nota
                example: 123.456.789-00
              observation:
                type: string
                description: Obervação da venda
                example: Sem copo
              user_id:
                type: integer
                description: Id do usuário logado
                example: 123
              company_id:
                type: integer
                description: Id da empresa que fez a venda
                example: 123
              sale_number:
                type: integer
                description: >-
                  Número da venda. Este número pode ser gerado por você. Caso
                  não envie, o sistema irá gerar automaticamente para você.
                example: 1234
              contingency_code:
                type: integer
                description: Número da venda em contigência
                example: 12345
              registration_date:
                type: string
                description: Data do registro da venda.
                format: date-time
                example: '2020-01-01T09:00:00-03:00'
              status:
                type: string
                enum:
                  - canceled
                  - closed
                  - open
                description: |
                  Tipo de status da venda:

                  - `canceled` venda cancelada.
                  - `closed` venda fechada.
                  - `open` venda aberta.
                example: open
                default: open
            required:
              - unique_id
              - items
              - seller_id
              - source_type
              - items
              - total
              - payments
              - delivery_type
    Profile:
      description: Corpo requisição de um perfil.
      required: true
      content:
        application/json:
          schema:
            type: object
            title: Perfil de Usuário
            description: Dados do perfil
            properties:
              id:
                type: integer
                description: Identificador único do perfil.
                readOnly: true
                example: 1
              name:
                type: string
                maxLength: 20
                minLength: 1
                description: Nome do perfil.
                example: Gerente
              description:
                type:
                  - 'null'
                  - string
                maxLength: 255
                description: Descrição do perfil.
                example: Lorem ipsum dolor sit amet, consectetur adipiscing elit
              global:
                type: boolean
                description: Perfil disponível para todas as empresas.
                default: false
                example: false
              editable:
                type: boolean
                default: false
                example: false
              permissions:
                type: array
                description: Lista de permissões que será relacionado a Permissão.
                default: []
                example:
                  - create_category
                  - create_product
                  - delete_product
              pdv_permissions:
                type: array
                description: Lista de permissões de PDV que será relacionada ao perfil.
                default: []
                example:
                  - attendance
                  - attendance_transfer
              created_at:
                type: string
                description: Data da última criação.
                format: date-time
                readOnly: true
                example: '2020-01-01T09:00:00-03:00'
              updated_at:
                type: string
                description: Data da última atualização.
                format: date-time
                readOnly: true
                example: '2020-01-01T09:00:00-03:00'
            required:
              - name
    ProfileDiscountLimitsSyncRequest:
      description: Corpo requisição para sincronização de limites de desconto por perfil.
      required: true
      content:
        application/json:
          schema:
            type: object
            title: Sincronização de Limites de Desconto
            description: Dados para sincronização de limites de desconto por perfil
            properties:
              discount_limits:
                type: array
                description: >
                  Lista de perfis com seus respectivos limites de desconto


                  **Atenção**: Caso esse array seja vazio, será removido todos
                  os limites de desconto dos perfis.
                items:
                  type: object
                  description: >-
                    Configuração de limites de desconto para um perfil
                    específico
                  properties:
                    profile_id:
                      type: integer
                      description: ID do perfil de usuário
                      format: int64
                      example: 15
                    limits:
                      type: array
                      description: >
                        Lista de limites de desconto para diferentes escopos


                        **Atenção**: Caso esse array seja vazio ou não esteja
                        presente, será removido todos os limites de desconto do
                        perfil.
                      items:
                        type: object
                        description: Limite de desconto para um escopo específico
                        properties:
                          discount_scope:
                            type: string
                            description: >
                              Escopo do desconto, define onde o desconto será
                              aplicado.


                              - `product`: Desconto no produto

                              - `sale`: Desconto na venda


                              **Atenção**: Pode ser inserido apenas um limite
                              para cada escopo.
                            enum:
                              - product
                              - sale
                            example: product
                          percentage_limit:
                            type: number
                            description: Limite percentual do desconto
                            minimum: 0.1
                            maximum: 100
                            example: 12.3
                        required:
                          - discount_scope
                          - percentage_limit
                  required:
                    - profile_id
    SyncStatusDetailRequest:
      description: Dados para sincronizar detalhes dos status
      required: true
      content:
        application/json:
          schema:
            type: object
            title: Dados para sincronizar detalhes dos status
            description: Representa dados para sincronizar detalhes dos status.
            properties:
              system_area_type:
                type: string
                description: Área do sistema a qual os detalhes dos status pertencem
                example: stock
                enum:
                  - stock
                  - delivery
              status_details:
                type: array
                description: Lista de detalhes por status
                items:
                  type: object
                  required:
                    - status_id
                  properties:
                    status_id:
                      type: integer
                      description: >
                        ID do status principal


                        Cada área do sistema tem um conjunto de status que podem
                        ser associados a detalhes.


                        Status disponíveis por área do sistema:
                          - stock: Aberto, Fechado, Cancelado
                          - delivery: Aberto, Fechado, Cancelado

                        Você pode localizar os IDs dos status no _endpoint_ de
                        [listagem de status](#tag/Status/operation/get-status).


                        Para a área de `delivery`, cada um dos status deve ter
                        **obrigatoriamente** pelo menos um detalhe vinculado com
                        um `default_delivery_status`:
                          - Aberto: created, preparation_started, preparation_ended, dispatched
                          - Fechado: concluded
                          - Cancelado: cancelled
                      example: 1
                    details:
                      type: array
                      description: Lista de detalhes associados ao status
                      items:
                        type: object
                        required:
                          - name
                          - order
                        properties:
                          id:
                            type: integer
                            description: |
                              ID único do detalhe do status a ser atualizado

                              Caso nẽo enviado, será criado um novo registro.
                            example: 37
                          name:
                            type: string
                            description: Nome do detalhe do status
                            example: Aguardando Fornecedor
                            maxLength: 250
                          order:
                            type: integer
                            description: Ordem de exibição/prioridade
                            minimum: 0
                            example: 3
                          default_delivery_status:
                            type: string
                            description: >
                              Status padrão do Delivery. Este campo poderá ser
                              enviado apenas para a área de `delivery`.
                            example: created
                            enum:
                              - created
                              - preparation_started
                              - preparation_ended
                              - dispatched
                              - concluded
                              - cancelled
                          limit_time:
                            type: integer
                            description: >-
                              Tempo limite. Este campo poderá ser enviado apenas
                              para a área de `delivery` quando o `status_id` for
                              referente ao status **Aberto**.
                            example: 30
                            minLength: 1
                            maxLength: 4
            required:
              - system_area_type
              - status_details
    StoreCustomerOrderRequest:
      description: Corpo requisição da criação de um pedido de venda.
      required: true
      content:
        application/json:
          schema:
            type: object
            properties:
              unique_id:
                type: string
                description: >-
                  Identificador único do pedido de venda. O UUID deve ser gerado
                  por você.
                format: uuid
                example: cf2e0a5e-aa58-4181-9c9b-47702bd2be99
              items:
                type: array
                description: Lista de produtos deste pedido.
                items:
                  $ref: '#/components/schemas/CustomerOrderItemBodyRequest'
              total:
                description: Resumo monetário da venda
                $ref: '#/components/schemas/CustomerOrderTotalsBody'
              payments:
                type: array
                description: Lista de pagamentos.
                items:
                  $ref: '#/components/schemas/OrderPayment'
              delivery_type:
                enum:
                  - delivery
                  - withdrawal
                description: |
                  Tipo de entrega do pedido:

                  - `delivery` entrega
                  - `withdrawal` retirada
              carrier:
                description: Dados do transportador e do frete
                $ref: '#/components/schemas/SaleCarrierBody'
              address:
                description: Dados do endereço do pedido
                $ref: '#/components/schemas/AddressBody'
              customer:
                description: Dados do cliente no pedido
                $ref: '#/components/schemas/CustomerBody'
              document_number:
                type: string
                description: CPF ou CNPJ na nota
                example: 123.456.789-00
              observation:
                type: string
                description: Obervação da venda
                example: Sem copo
            required:
              - unique_id
              - items
              - total
              - payments
              - delivery_type
    Peripherals:
      description: Corpo requisição de um método de periférico.
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Peripheral'
            required:
              - name
              - model
    StoreCustomerAccessToken:
      description: Corpo requisição para geração de Access Token.
      required: true
      content:
        application/json:
          schema:
            properties:
              grant_type:
                type: string
                description: >-
                  O tipo de concessão OAuth. Atualmente, os tipos suportados são
                  `password` e `refresh_token`.
                example: password
              client_id:
                type: string
                description: Identificador do Client.
                example: 3e461137-6619-4d1e-9644-78bfa652539b
              client_secret:
                type: string
                description: Secret do Client.
                example: fXiVP5k1NUDVqx6rHGzlBdJA5wG5GJpXSmWmyZX1
              username:
                type: string
                format: email
                description: |
                  E-mail do cliente a ser autenticado. 

                  **Só é necessário ao usar o fluxo *grant_type* `password`**.
                example: customer@test.com
              password:
                type: string
                format: password
                description: |
                  Senha do cliente a ser autenticado. 

                  **Só é necessário ao usar o fluxo *grant_type* `password`**.
                example: '123456'
              refresh_token:
                type: string
                description: >
                  O *Refresh Token* que é retornado junto da solicitação do
                  *Access Token*. 


                  **Só é necessário ao usar o fluxo *grant_type*
                  `refresh_token`**.
                example: fXiVP5k1NUDVqx6rHGzlBdJ....
              scope:
                type: string
                description: >
                  Lista de permissões que o token terá acesso. Pode ser
                  solicitado mais de uma permissão para um Token. Cada permissão
                  deve ser separadas por espaço em branco.


                  Para retornar a lista de permissões disponíveis no sistema,
                  utilizar o *endpoint* `/store/oauth/scopes`.
                example: categories:read categories:write
    Carrier:
      description: Corpo requisição de uma transportadora.
      required: true
      content:
        application/json:
          schema:
            allOf:
              - type: object
                title: Transportadora
                description: Representa uma Transportadora.
                properties:
                  name:
                    type: string
                    minLength: 1
                    maxLength: 120
                    description: >-
                      Nome da transportadora pessoa física ou nome fantasia da
                      pessoa jurídica.
                    example: Nome da Transportadora
                  type:
                    type: string
                    enum:
                      - individual
                      - company
                    description: |
                      Tipo da transportadora.

                      - `individual` (Pessoa física)
                      - `company` (Pessoa jurídica)
                    example: individual
                  company_name:
                    type: string
                    minLength: 1
                    maxLength: 120
                    description: Razão social da pessoa jurídica
                    example: Nome da Transportadora
                  state_registry_free:
                    type: boolean
                    description: Indica se a transportadora é isenta de inscrição estadual.
                    example: true
                  icms_free:
                    type: boolean
                    description: Indica se a transportadora é isenta de ICMS.
                    example: true
                  has_delivery_carrier:
                    type: boolean
                    description: Indica se a transportadora realiza entrega.
                    example: true
                  register_in_nfe:
                    type: boolean
                    description: Indica se a transportadora deve ser registrada na NFe.
                    example: true
                  documents:
                    type: array
                    description: Representa a lista de documentos
                    items:
                      allOf:
                        - $ref: '#/components/schemas/Document'
                  address:
                    type: array
                    description: Endereço da transportadora
                    items:
                      allOf:
                        - $ref: '#/components/schemas/AddressBody'
                  contacts:
                    type: array
                    description: Representa a lista de contatos
                    items:
                      allOf:
                        - $ref: '#/components/schemas/Contact'
                  companies:
                    type: array
                    description: Lista de empresas que permite visualizar.
                    items:
                      $ref: '#/components/schemas/ByCompany'
                required:
                  - name
                  - type
    Supplier:
      description: Corpo requisição de um fornecedor.
      required: true
      content:
        application/json:
          schema:
            allOf:
              - type: object
                title: Fornecedor
                description: Representa um Fornecedor.
                properties:
                  name:
                    type: string
                    minLength: 1
                    maxLength: 120
                    description: >-
                      Nome do cliente pessoa física ou nome fantasia da pessoa
                      jurídica.
                    example: Nome do Cliente
                  company_name:
                    type: string
                    minLength: 1
                    maxLength: 120
                    description: Razão social da pessoa jurídica
                    example: Nome do Cliente
                  documents:
                    type: array
                    description: Representa a lista de documentos
                    items:
                      allOf:
                        - $ref: '#/components/schemas/Document'
                  type:
                    type: string
                    enum:
                      - individual
                      - company
                    description: |
                      Tipo do cliente.

                      - `individual` (Pessoa física)
                      - `company` (Pessoa jurídica)
                    example: individual
                  state_registry_free:
                    type: boolean
                    description: >-
                      Flag que indica se o fornecedor é isento de inscrição
                      estadual
                    example: true
                  inscricao_suframa:
                    type: string
                    maxLength: 9
                    description: >-
                      Número de identificação e controle gerado por ocasião do
                      cadastramento e vinculado a cada pessoa jurídica ou
                      física, devendo ser utilizada exclusivamente para a
                      viabilização dos serviços prestados pela SUFRAMA
                    example: '123456789'
                  founding_date:
                    type: string
                    format: date
                    description: Data da fundação da empresa. Formato "YYYY-MM-DD"
                    example: '2016-01-15'
                  birthday:
                    type: string
                    format: date
                    description: >-
                      Data de nascimento do fornecedor, caso ele não seja uma
                      pessoa jurídica. Formato "YYYY-MM-DD"
                    example: '1990-12-25'
                  address:
                    description: Endereço do fornecedor
                    items:
                      allOf:
                        - $ref: '#/components/schemas/AddressBody'
                  contacts:
                    type: array
                    description: Representa a lista de contatos
                    items:
                      allOf:
                        - $ref: '#/components/schemas/Contact'
                  companies:
                    type: array
                    description: Lista de empresas que permite visualizar.
                    items:
                      $ref: '#/components/schemas/ByCompany'
                  notes:
                    type: string
                    description: Observações relacionadas ao fornecedor
                    example: Uma anotação sobre o cliente
    FinancialGroup:
      description: Corpo requisição de uma conta financeira.
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/FinancialGroup'
    FinancialAccountPlan:
      description: Corpo requisição de um plano de conta.
      required: true
      content:
        application/json:
          schema:
            type: object
            title: Dados do plano de contas
            description: Representa um plano de conta.
            properties:
              name:
                type: string
                description: Nome do plano de conta.
                example: Despesas Administrativas
              financial_group_id:
                type: integer
                description: >-
                  Identificador único da conta financeira. Você pode obter os 
                  _endpoint_ de [listagem de grupos
                  financeiros](#tag/FinancialGroup/operation/get-financial-groups).
                example: 123
              available_for_pdv:
                type: boolean
                description: >
                  Se o plano de conta está disponível para o PDV.


                  Dependendo do plano de conta, este campo pode não ser
                  modificável. Ver o campo `can_be_available_for_pdv` para mais
                  detalhes.
                example: true
    FinancialTransaction:
      description: Corpo requisição de uma movimentação financeira.
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/FinancialTransaction'
    FinancialTransactionFile:
      description: Corpo requisição de upload de arquivo anexo.
      required: true
      content:
        multipart/form-data:
          schema:
            type: object
            properties:
              files:
                type: array
                description: Lista de arquivos.
                items:
                  type: object
                  description: Representa um arquivo.
                  properties:
                    file:
                      type: string
                      format: binary
            required:
              - files
    ProductionOrderCreateBody:
      description: Corpo de requisição para criar uma ordem de produção.
      required: true
      content:
        application/json:
          schema:
            type: object
            title: Criar Ordem de Produção
            description: Dados necessários para criar uma ordem de produção.
            required:
              - responsible_id
              - requester_id
              - request_date
              - deadline
              - products
            properties:
              responsible_id:
                type: integer
                description: ID do usuário responsável pela produção.
                example: 1
              requester_id:
                type: integer
                description: ID do usuário que solicitou a produção.
                example: 1
              request_date:
                type: string
                format: date
                description: Data em que a produção foi solicitada.
                example: '2025-08-06'
              deadline:
                type: string
                format: date
                description: Data limite para conclusão da produção.
                example: '2025-08-15'
              products:
                $ref: '#/components/schemas/ProductionOrderProduct'
    ProductionOrderUpdateBody:
      description: >
        Corpo de requisição para atualizar uma ordem de produção.


        O conteúdo do payload varia dependendo do status atual da ordem de
        produção:

        - `order`: Permite alterar todos os campos

        - `in_production`: Permite alterar apenas componentes dos produtos.

        - `finished`: Permite alterar apenas alguns dados do produto.
      required: true
      content:
        application/json:
          schema:
            type: object
            title: Atualizar Ordem de Produção
            description: >-
              Dados para atualizar uma ordem de produção com diferentes
              permissões baseadas no status.
            oneOf:
              - title: status 'order'
                description: >-
                  Quando a ordem está com status 'order', é possível alterar
                  todos os campos.
                type: object
                required:
                  - responsible_id
                  - requester_id
                  - request_date
                  - deadline
                  - products
                properties:
                  responsible_id:
                    type: integer
                    description: ID do usuário responsável pela produção.
                    example: 1
                  requester_id:
                    type: integer
                    description: ID do usuário que solicitou a produção.
                    example: 1
                  request_date:
                    type: string
                    format: date
                    description: Data em que a produção foi solicitada.
                    example: '2025-08-06'
                  deadline:
                    type: string
                    format: date
                    description: Data limite para conclusão da produção.
                    example: '2025-08-15'
                  products:
                    $ref: '#/components/schemas/ProductionOrderProduct'
              - title: status 'in_production'
                description: >
                  Quando a ordem está com status 'in_production', é possível
                  alterar apenas os componentes dos produtos.


                  **Permissões:**

                  - Alterar quantidade de componentes.

                  - Alterar estoque de onde o componente será retirado.

                  - Alterar se o componente foi consumido.

                  - Remover um componente.
                type: object
                required:
                  - products
                properties:
                  products:
                    $ref: '#/components/schemas/ProductionOrderInProductionProduct'
              - title: status 'finished'
                description: >
                  Quando a ordem está com status 'finished', é possível alterar
                  apenas alguns dados do produto.


                  **Permissões:**

                  - Alterar estoque de onde o produto produzido dará entrada.

                  - Alterar quantidade do produto.

                  - Alterar se o produto foi produzido e entrará no estoque.
                type: object
                required:
                  - products
                properties:
                  products:
                    $ref: '#/components/schemas/ProductionOrderFinishedProduct'
    ProductionOrderCancelBody:
      description: >
        Corpo de requisição para cancelar uma ordem de produção.


        O cancelamento pode incluir a reversão das movimentações de estoque
        relacionadas.
      required: false
      content:
        application/json:
          schema:
            type: object
            title: Cancelar Ordem de Produção
            description: Dados opcionais para cancelamento de uma ordem de produção.
            properties:
              is_revert_stock:
                type: boolean
                description: >
                  Define se as movimentações de estoque devem ser revertidas
                  durante o cancelamento.


                  - `true`: Reverte as movimentações de estoque dos componentes
                  consumidos e produtos produzidos (se houver)

                  - `false`: Mantém as movimentações de estoque como estão
                example: true
                default: false
    StoreCustomerSocialLogin:
      description: Corpo requisição para a realização do signin na rede social.
      required: true
      content:
        application/json:
          schema:
            properties:
              id_token:
                type: string
                description: ID do token.
                example: id_token...
              client_id:
                type: string
                description: Identificador do Client.
                example: 3e461137-6619-4d1e-9644-78bfa652539b
              client_secret:
                type: string
                description: Secret do Client.
                example: fXiVP5k1NUDVqx6rHGzlBdJA5wG5GJpXSmWmyZX1
            required:
              - id_token
              - client_id
              - client_secret
    UpdateStoreCustomerAccount:
      description: Corpo requisição para atualização do conta do cliente logado.
      required: true
      content:
        application/json:
          schema:
            properties:
              account_name:
                type: string
                description: Nome do cliente.
                example: Fulano de tal
              phone:
                type: string
                description: Celular de contato do cliente
                example: (41) 9918-0026
              document:
                type: string
                description: Documento do cliente. CPF ou CNPJ
                example: 111.444.777-35
              birthday:
                type: string
                description: Aniversário do cliente
                format: date
                example: '2016-05-13'
              is_sending_notifications_accepted:
                type: boolean
                description: Permite o cliente receber nofiticações
                example: true
    StoreCustomerAddresses:
      description: Corpo requisição para salvar uma lista de endereços.
      required: true
      content:
        application/json:
          schema:
            type: object
            additionalProperties: false
            properties:
              addresses:
                type: array
                description: Representa a lista de endereços
                items:
                  allOf:
                    - $ref: '#/components/schemas/StoreCustomerAddress'
    LabelBody:
      description: Dados para criação ou atualização de uma etiqueta
      required: true
      content:
        application/json:
          schema:
            type: object
            description: Dados da etiqueta (variável por tipo)
            oneOf:
              - $ref: '#/components/schemas/LabelPDFBody'
              - $ref: '#/components/schemas/LabelPPLABody'
              - $ref: '#/components/schemas/LabelBPLBBody'
    LabelGenerate:
      description: Dados para geração de etiquetas
      required: true
      content:
        application/json:
          schema:
            type: object
            required:
              - label_id
              - products
            properties:
              label_id:
                type: integer
                description: ID da etiqueta a ser utilizada.
                minimum: 1
                maximum: 2147483647
                example: 123
              products:
                type: array
                description: Lista de produtos para gerar etiquetas.
                minItems: 1
                items:
                  type: object
                  required:
                    - product_id
                    - amount
                  properties:
                    product_id:
                      type: integer
                      description: ID do produto.
                      example: 456
                    amount:
                      type: integer
                      description: Quantidade de etiquetas para este produto.
                      minimum: 1
                      example: 5
                    attributes:
                      type: array
                      description: Atributos opcionais do produto para a etiqueta.
                      items:
                        type: object
                        properties:
                          name:
                            type: string
                            description: Nome do atributo.
                            example: Cor
                          value:
                            type: integer
                            description: ID do valor do atributo.
                            example: 789
              price_list_id:
                type: integer
                description: ID da lista de preços a ser utilizada.
                minimum: 1
                maximum: 2147483647
                example: 101
              initial_position:
                type: integer
                description: Posição inicial para começar a impressão na folha.
                minimum: 1
                default: 1
                example: 1
              print_border:
                type: boolean
                description: Se deve imprimir bordas nas etiquetas.
                default: false
                example: false
    TotemSettings:
      description: Corpo requisição para configurações de totem.
      required: true
      content:
        application/json:
          schema:
            type: object
            title: TotemSettings
            description: Configurações para totem de autoatendimento.
            properties:
              general_settings:
                type: object
                description: Configurações gerais do totem.
                properties:
                  auto_update_totems:
                    type: boolean
                    description: >-
                      Define se os totens de autoatendimento devem ser
                      atualizados automaticamente.
                    example: false
                    default: false
                  show_cart_footer:
                    type: boolean
                    description: Define se deve mostrar carrinho no rodapé do menu
                    example: true
                    default: false
              product_prints:
                type: object
                description: Configurações de impressão de produtos.
                properties:
                  show_product_value:
                    type: boolean
                    description: Define se deve exibir o valor do produto na impressão.
                    example: true
                    default: false
                  additional_info:
                    type: string
                    description: Informações adicionais para impressão.
                    maxLength: 255
                    example: Mensagem adicional para impressão de produtos
              management_report:
                type: object
                description: Configurações do relatório gerencial.
                properties:
                  disable_report:
                    type: boolean
                    description: >-
                      Define se o relatório gerencial no autoatendimento deve
                      ser desabilitado.
                    example: true
                    default: false
                  additional_info:
                    type: string
                    description: >-
                      Informações adicionais para as impressões dos relatórios
                      adicionais.
                    maxLength: 500
                    example: Mensagem adicional para relatório
              confirmation_message:
                type: object
                description: Configurações da mensagem de confirmação.
                properties:
                  show_confirmation_message:
                    type: boolean
                    description: >-
                      Define se deve exibir mensagem de confirmação ao finalizar
                      a venda.
                    example: true
                    default: false
                  confirmation_message_text:
                    type: string
                    description: >
                      Texto da mensagem de confirmação.


                      **Atenção**: Campo obrigatório se
                      `show_confirmation_message` for `true` caso contrário,
                      proibido.
                    maxLength: 500
                    example: Exemplo de mensagem
                  limit_display_time:
                    type: boolean
                    description: >
                      Define se deve limitar o horário de exibição da mensagem
                      de confirmação.


                      **Atenção**: Campo obrigatório se
                      `show_confirmation_message` for `true` caso contrário,
                      proibido.
                    example: true
                    default: false
                  start_time:
                    format: H:i
                    type: string
                    description: >
                      Horário de início para exibição.


                      **Atenção**: Campo obrigatório se `limit_display_time` for
                      `true` caso contrário, proibido.
                    example: '08:15'
                  end_time:
                    format: H:i
                    type: string
                    description: >
                      Horário de fim para exibição.


                      **Atenção**: Campo obrigatório se `limit_display_time` for
                      `true` caso contrário, proibido.
                    example: '22:16'
                required:
                  - show_confirmation_message
    CreateDistrictsRequest:
      description: Corpo da requisição para criar um bairro customizado.
      content:
        application/json:
          schema:
            type: object
            properties:
              ibge_code:
                type: string
                description: Código IBGE da cidade.
                example: '3550308'
              name:
                type: string
                description: Nome do bairro.
                example: Centro
                minLength: 3
                maxLength: 100
              is_global:
                type: boolean
                description: >-
                  Define se o bairro deve ser compartilhado com todas as
                  empresas.
                example: true
            required:
              - ibge_code
              - name
              - is_global
    UpdateDistrictsRequest:
      description: Corpo da requisição para atualizar um bairro customizado.
      content:
        application/json:
          schema:
            type: object
            properties:
              name:
                type: string
                description: Nome do bairro.
                example: Centro
                minLength: 3
                maxLength: 100
              is_global:
                type: boolean
                description: >-
                  Define se o bairro deve ser compartilhado com todas as
                  empresas.
                example: true
            required:
              - name
              - is_global
    PasswordPanelRequest:
      description: Corpo requisição de um painel de senha.
      required: true
      content:
        application/json:
          schema:
            type: object
            title: Painel de senha
            description: Representa as configurações do painel de senha.
            properties:
              enable_password_panel:
                type: boolean
                description: Indica se o painel de senha está habilitado
                example: true
              show_current_password:
                type: boolean
                description: Indica se deve exibir a senha atual
                example: true
              show_customer_name:
                type: boolean
                description: Indica se deve exibir o nome do cliente
                example: true
              show_pending_status:
                type: boolean
                description: Indica se deve exibir a coluna de pedidos pendentes
                example: true
              pending_status_label:
                type: string
                description: Nome para o status pendente
                maxLength: 15
                example: Cozinhando
              completed_status_label:
                type: string
                description: Nome para o status concluído
                maxLength: 15
                example: Finalizado
              max_time_to_delivered:
                type: integer
                minimum: 0
                maximum: 99
                description: >
                  Tempo em minutos para marcar pedido como entregue
                  automaticamente


                  Se o valor for definido como zero, essa regra será ignorada.
                example: 15
              customization_settings:
                type: object
                description: Configurações de personalização do painel
                properties:
                  background_image:
                    type:
                      - string
                      - 'null'
                    description: Imagem de fundo do painel. Limite de 2MB
                    format: base64
                    example: data:image/png;base64,<imageBase64>
                  colors:
                    type: object
                    description: Configurações de cores do painel
                    properties:
                      background_color:
                        type: string
                        format: hexcolor
                        description: Cor de fundo principal
                        example: '#ffffff'
                      font_color:
                        type: string
                        format: hexcolor
                        description: Cor da fonte principal
                        example: '#ECF0F1'
                      pending_status_background_color:
                        type: string
                        format: hexcolor
                        description: Cor de fundo do status pendente
                        example: '#F39C12'
                      pending_status_font_color:
                        type: string
                        format: hexcolor
                        description: Cor da fonte do status pendente
                        example: '#2C3E50'
                      completed_status_background_color:
                        type: string
                        format: hexcolor
                        description: Cor de fundo do status concluído
                        example: '#27AE60'
                      completed_status_font_color:
                        type: string
                        format: hexcolor
                        description: Cor da fonte do status concluído
                        example: '#FFFFFF'
                    required:
                      - background_color
                      - font_color
                      - pending_status_background_color
                      - pending_status_font_color
                      - completed_status_background_color
                      - completed_status_font_color
                required:
                  - colors
            required:
              - enable_password_panel
              - show_current_password
              - show_customer_name
              - show_pending_status
              - pending_status_label
              - completed_status_label
              - max_time_to_delivered
              - customization_settings
    IcmsCreateUpdate:
      description: Dados para criar um grupo de ICMS
      required: true
      content:
        application/json:
          schema:
            type: object
            required:
              - name
              - tributary_group_id
              - states
              - is_interstate_sharing
            properties:
              name:
                type: string
                description: Nome do grupo ICMS.
                maxLength: 150
                example: ICMS Tributado Integralmente
              tributary_group_id:
                type: integer
                description: >-
                  ID do grupo tributário (compatível com regime da empresa), a
                  listagem de grupos tributários pode ser encontrada em [📋
                  lista de grupos tributários de
                  ICMS](#paths/get-tax-settings-icms-tributary-groups).
                example: 0
              is_interstate_sharing:
                type: boolean
                description: Indica se há partilha interestadual.
                example: true
              settings:
                oneOf:
                  - $ref: '#/components/schemas/TributaryGroup101'
                  - $ref: '#/components/schemas/TributaryGroup102'
                  - $ref: '#/components/schemas/TributaryGroup103'
                  - $ref: '#/components/schemas/TributaryGroup201'
                  - $ref: '#/components/schemas/TributaryGroup202'
                  - $ref: '#/components/schemas/TributaryGroup203'
                  - $ref: '#/components/schemas/TributaryGroup300'
                  - $ref: '#/components/schemas/TributaryGroup400'
                  - $ref: '#/components/schemas/TributaryGroup500'
                  - $ref: '#/components/schemas/TributaryGroup900'
                  - $ref: '#/components/schemas/TributaryGroup0'
                  - $ref: '#/components/schemas/TributaryGroup10'
                  - $ref: '#/components/schemas/TributaryGroup20'
                  - $ref: '#/components/schemas/TributaryGroup30'
                  - $ref: '#/components/schemas/TributaryGroup40'
                  - $ref: '#/components/schemas/TributaryGroup41'
                  - $ref: '#/components/schemas/TributaryGroup50'
                  - $ref: '#/components/schemas/TributaryGroup51'
                  - $ref: '#/components/schemas/TributaryGroup60'
                  - $ref: '#/components/schemas/TributaryGroup70'
                  - $ref: '#/components/schemas/TributaryGroup90'
              states:
                type: array
                description: >-
                  Configurações de alíquotas para todos os estados (todos os 27
                  estados obrigatórios).
                minItems: 1
                maxItems: 27
                items:
                  $ref: '#/components/schemas/IcmsState'
                example:
                  - code: SP
                    rate:
                      interstate_rate: 18
                      standard_state_rate: 18
                      fcp_rate: 2
                      interstate_st_rate:
                        mva_percentage: 50
                        mva_sn_percentage: 40
                        reduction_percentage: 0
                        icms_percentage: 18
                    cbenef_code: '123456789'
                  - code: MG
                    rate:
                      interstate_rate: 20
                      standard_state_rate: 20
                      fcp_rate: 2
                      interstate_st_rate:
                        mva_percentage: 50
                        mva_sn_percentage: 40
                        reduction_percentage: 0
                        icms_percentage: 20
                    cbenef_code: '987654321'
              final_consumer_group_id:
                type: integer
                description: ID do grupo de consumidor final.
                example: 1
              is_shared_with_all_companies:
                type: boolean
                description: Se o grupo de ICMS é compartilhado com todas as empresas.
                example: true
                default: false
    IpiCreateOrUpdate:
      description: Dados para criar / atualizar um grupo de IPI
      required: true
      content:
        application/json:
          schema:
            oneOf:
              - title: Entrada com Recuperação de Crédito (0)
                $ref: '#/components/schemas/CreditRecoveryEntryBody'
              - title: Entrada Tributada com Alíquota Zero (1)
                $ref: '#/components/schemas/TaxedZeroEntryBody'
              - title: Entrada Isenta (2)
                $ref: '#/components/schemas/ExemptEntryBody'
              - title: Entrada Não-Tributada (3)
                $ref: '#/components/schemas/NonTaxedEntryBody'
              - title: Entrada Imune (4)
                $ref: '#/components/schemas/ImmuneEntryBody'
              - title: Entrada com Suspensão (5)
                $ref: '#/components/schemas/SuspensionEntryBody'
              - title: Outras Entradas (49)
                $ref: '#/components/schemas/OtherEntriesBody'
              - title: Saída Tributada (50)
                $ref: '#/components/schemas/TaxedExitBody'
              - title: Saída Tributada com Alíquota Zero (51)
                $ref: '#/components/schemas/TaxedZeroExitBody'
              - title: Saída Isenta (52)
                $ref: '#/components/schemas/ExemptExitBody'
              - title: Saída Não-Tributada (53)
                $ref: '#/components/schemas/NonTaxedExitBody'
              - title: Saída Imune (54)
                $ref: '#/components/schemas/ImmuneExitBody'
              - title: Saída com Suspensão (55)
                $ref: '#/components/schemas/SuspensionExitBody'
              - title: Outras Saídas (99)
                $ref: '#/components/schemas/OtherExitsBody'
    PisCofinsCreateOrUpdate:
      description: Dados para criar / atualizar um grupo de PIS/COFINS
      required: true
      content:
        application/json:
          schema:
            oneOf:
              - title: Situações com Percentual
                description: >
                  Para situações que requerem percentual de PIS e COFINS.


                  **Situações que requerem percentual:**

                  - Operação Tributável - Alíquota Normal (1)

                  - Operação Tributável - Alíquota Diferenciada (2)

                  - Operação Tributável - Quantidade Vendida (3)

                  - Outras Operações de Saída (49)

                  - Operação com Direito a Crédito - Receita Tributada Mercado
                  Interno (50)

                  - Operação com Direito a Crédito - Receita Não Tributada
                  Mercado Interno (51)

                  - Operação com Direito a Crédito - Receita Exportação (52)

                  - Operação com Direito a Crédito - Receitas Tributadas e Não
                  Tributadas Mercado Interno (53)

                  - Operação com Direito a Crédito - Receitas Tributadas Mercado
                  Interno e Exportação (54)

                  - Operação com Direito a Crédito - Receitas Não Tributadas
                  Mercado Interno e Exportação (55)

                  - Operação com Direito a Crédito - Receitas Tributadas e Não
                  Tributadas Mercado Interno e Exportação (56)

                  - Crédito Presumido - Operação Aquisição Receita Tributada
                  Mercado Interno (60)

                  - Crédito Presumido - Operação Aquisição Receita Não Tributada
                  Mercado Interno (61)

                  - Crédito Presumido - Operação Aquisição Receita Exportação
                  (62)

                  - Crédito Presumido - Operação Aquisição Receitas Tributadas e
                  Não Tributadas Mercado Interno (63)

                  - Crédito Presumido - Operação Aquisição Receitas Tributadas
                  Mercado Interno e Exportação (64)

                  - Crédito Presumido - Operação Aquisição Receitas Não
                  Tributadas Mercado Interno e Exportação (65)

                  - Crédito Presumido - Operação Aquisição Receitas Tributadas e
                  Não Tributadas Mercado Interno e Exportação (66)

                  - Crédito Presumido - Outras Operações (67)

                  - Operação Aquisição Sem Direito a Crédito (70)

                  - Operação Aquisição com Isenção (71)

                  - Operação Aquisição com Suspensão (72)

                  - Operação Aquisição Alíquota Zero (73)

                  - Operação Aquisição Sem Incidência (74)

                  - Operação Aquisição Substituição Tributária (75)

                  - Outras Operações de Entrada (98)

                  - Outras Operações (99)
                type: object
                properties:
                  name:
                    type: string
                    description: Nome do grupo de PIS/COFINS
                    example: PIS Cofins - Alíquota Normal
                    maxLength: 255
                  pis_tributary_group_id:
                    type: integer
                    description: >-
                      ID da situação do PIS (situações que requerem percentual).
                      A listagem de situações tributárias pode ser encontrada em
                      [📋 lista de grupos tributários de
                      PIS/COFINS](#paths/get-tax-settings-pis-cofins-tributary-groups)
                      com o parametro `type=pis`.
                    example: 1
                    enum:
                      - 1
                      - 2
                      - 3
                      - 49
                      - 50
                      - 51
                      - 52
                      - 53
                      - 54
                      - 55
                      - 56
                      - 60
                      - 61
                      - 62
                      - 63
                      - 64
                      - 65
                      - 66
                      - 67
                      - 70
                      - 71
                      - 72
                      - 73
                      - 74
                      - 75
                      - 98
                      - 99
                  cofins_tributary_group_id:
                    type: integer
                    description: >-
                      ID da situação do COFINS (situações que requerem
                      percentual). A listagem de situações tributárias pode ser
                      encontrada em [📋 lista de grupos tributários de
                      PIS/COFINS](#paths/get-tax-settings-pis-cofins-tributary-groups)
                      com o parametro `type=cofins`.
                    example: 1
                    enum:
                      - 1
                      - 2
                      - 3
                      - 49
                      - 50
                      - 51
                      - 52
                      - 53
                      - 54
                      - 55
                      - 56
                      - 60
                      - 61
                      - 62
                      - 63
                      - 64
                      - 65
                      - 66
                      - 67
                      - 70
                      - 71
                      - 72
                      - 73
                      - 74
                      - 75
                      - 98
                      - 99
                  percent_pis:
                    type: number
                    format: float
                    description: Percentual do PIS (obrigatório para estas situações)
                    example: 1.65
                    minimum: 0
                    maximum: 100
                  percent_cofins:
                    type: number
                    format: float
                    description: Percentual do COFINS (obrigatório para estas situações)
                    example: 7.6
                    minimum: 0
                    maximum: 100
                  is_shared_with_all_companies:
                    type: boolean
                    description: >-
                      Se o grupo de PIS/COFINS é compartilhado com todas as
                      empresas.
                    example: true
                    default: false
                required:
                  - name
                  - pis_tributary_group_id
                  - cofins_tributary_group_id
                  - percent_pis
                  - percent_cofins
              - title: Situações sem Percentual
                description: |
                  Para situações que NÃO requerem percentual de PIS e COFINS.

                  **Situações que NÃO requerem percentual:**
                  - Operação Tributável - Tributação Monofásica (4)
                  - Operação Tributável - Substituição Tributária (5)
                  - Operação Tributável - Alíquota Zero (6)
                  - Operação Isenta (7)
                  - Operação Sem Incidência (8)
                  - Operação Com Suspensão (9)
                type: object
                properties:
                  name:
                    type: string
                    description: Nome do grupo de PIS/COFINS
                    example: PIS Cofins - Tributação Monofásica
                    maxLength: 255
                  pis_tributary_group_id:
                    type: integer
                    description: >-
                      ID da situação do PIS (situações que NÃO requerem
                      percentual)
                    example: 4
                    enum:
                      - 4
                      - 5
                      - 6
                      - 7
                      - 8
                      - 9
                  cofins_tributary_group_id:
                    type: integer
                    description: >-
                      ID da situação do COFINS (situações que NÃO requerem
                      percentual)
                    example: 4
                    enum:
                      - 4
                      - 5
                      - 6
                      - 7
                      - 8
                      - 9
                  is_shared_with_all_companies:
                    type: boolean
                    description: >-
                      Se o grupo de PIS/COFINS é compartilhado com todas as
                      empresas.
                    example: true
                    default: false
                required:
                  - name
                  - pis_tributary_group_id
                  - cofins_tributary_group_id
    IssqnCreateOrUpdate:
      description: Dados para criar / atualizar um grupo de ISSQN
      required: true
      content:
        application/json:
          schema:
            type: object
            title: Grupo de ISSQN
            description: Dados para criar ou atualizar um grupo de ISSQN
            required:
              - name
              - issqn_percent
              - iss_indicator_id
              - incentive_indicator
            properties:
              name:
                type: string
                description: Nome do grupo de ISSQN
                example: Novo Grupo de ISSQN
                maxLength: 255
                minLength: 1
              issqn_percent:
                type: number
                format: float
                description: Percentual do ISSQN
                example: 20.2
                minimum: 0
                maximum: 999.99
              iss_indicator_id:
                type: integer
                description: |
                  ID do indicador ISS.

                  **Valores aceitos:**
                  - `1`: Exigível
                  - `2`: Não incidência
                  - `3`: Isenção
                  - `4`: Exportação
                  - `5`: Imunidade
                  - `6`: Exigibilidade Suspensa por Decisão Judicial
                  - `7`: Exigibilidade Suspensa por Processo Administrativo
                example: 4
                enum:
                  - 1
                  - 2
                  - 3
                  - 4
                  - 5
                  - 6
                  - 7
              incentive_indicator:
                type: string
                description: |
                  Indicador de incentivo fiscal.

                  **Valores aceitos:**
                  - `yes`: Sim
                  - `no`: Não
                example: 'yes'
                enum:
                  - 'yes'
                  - 'no'
          examples:
            issqn_group_example:
              summary: Exemplo de grupo de ISSQN
              value:
                name: Novo Grupo de ISSQN
                issqn_percent: 20.2
                iss_indicator_id: 4
                incentive_indicator: 'yes'
    AdditionalInfoNfeCreate:
      description: Corpo da requisição para criação de informações adicionais da NF-e.
      required: true
      content:
        application/json:
          schema:
            type: object
            additionalProperties: false
            required:
              - title
              - description
              - type
            properties:
              title:
                type: string
                description: Título da informação adicional
                example: Título da informação adicional
                maxLength: 100
              description:
                type: string
                description: Descrição da informação adicional
                example: Descrição da informação adicional
                maxLength: 1000
              type:
                type: string
                enum:
                  - NFE
                  - NFSE
                  - NFCE
                description: Tipo da informação adicional
                example: NFE
              automatic:
                type: boolean
                description: Se a informação adicional será incluída automaticamente
                example: true
                default: false
              is_shared_with_all_companies:
                type: boolean
                description: >-
                  Se a informação adicional será compartilhada com todas as
                  empresas
                example: true
                default: false
    AdditionalInfoNfeUpdate:
      description: Corpo da requisição para atualização de informações adicionais da NF-e.
      required: true
      content:
        application/json:
          schema:
            type: object
            additionalProperties: false
            required:
              - title
              - description
            properties:
              title:
                type: string
                description: Título da informação adicional
                example: Título da informação adicional
                maxLength: 100
              description:
                type: string
                description: Descrição da informação adicional
                example: Descrição da informação adicional
                maxLength: 1000
              automatic:
                type: boolean
                description: Se a informação adicional será incluída automaticamente
                example: true
                default: false
              is_shared_with_all_companies:
                type: boolean
                description: >-
                  Se a informação adicional será compartilhada com todas as
                  empresas
                example: true
                default: false
    InvoiceSeriesCreate:
      description: Corpo da requisição para criação de séries de notas fiscais.
      required: true
      content:
        application/json:
          schema:
            required:
              - type
              - serie
              - current_number
            properties:
              type:
                type: string
                enum:
                  - P
                  - PC
                  - S
                  - DV
                description: |
                  Tipo da série de nota fiscal:
                  - P: NFE (Nota Fiscal Eletrônica)
                  - PC: NFCE (Nota Fiscal de Consumidor Eletrônica)
                  - S: SERVICE (Nota Fiscal de Serviço)
                  - DV: DAV Santa Catarina (Documento Auxiliar de Venda)
                example: P
              serie:
                type: integer
                description: Número da série
                example: 1
              current_number:
                type: integer
                description: Número atual da série
                example: 1000
              app_id:
                type: integer
                description: |
                  ID do aplicativo

                  *Obrigatório para `type DV`*
                example: 1
    InvoiceSeriesUpdate:
      description: Corpo da requisição para atualização de séries de notas fiscais.
      required: true
      content:
        application/json:
          schema:
            required:
              - type
              - serie
              - current_number
            properties:
              type:
                type: string
                enum:
                  - P
                  - PC
                  - S
                  - DV
                description: |
                  Tipo da série de nota fiscal:
                  - P: NFE (Nota Fiscal Eletrônica)
                  - PC: NFCE (Nota Fiscal de Consumidor Eletrônica)
                  - S: SERVICE (Nota Fiscal de Serviço)
                  - DV: DAV Santa Catarina (Documento Auxiliar de Venda)
                example: P
              serie:
                type: integer
                description: Número da série
                example: 1
              current_number:
                type: integer
                description: Número atual da série
                example: 1000
              app_id:
                type: integer
                description: |
                  ID do aplicativo

                  *Obrigatório para `type DV`*
                example: 1
    TypeInvoicePdvUpdate:
      description: >-
        Corpo da requisição para atualização de configuração de tipo de nota
        emitida pelo PDV.
      required: true
      content:
        application/json:
          schema:
            type: object
            additionalProperties: false
            properties:
              nfe_type:
                type: string
                enum:
                  - '55'
                  - '65'
                description: |
                  Se não for enviado, o tipo de nota fiscal será removido.

                  Tipo de NFe Emitida pelo PDV:
                  - "55": NFe (Nota Fiscal Eletrônica)
                  - "65": NFCe (Nota Fiscal de Consumidor Eletrônica)
                example: '55'
              is_final_consumer_icms:
                type: boolean
                description: >
                  ICMS para consumidor final


                  Se não for enviado, o ICMS para consumidor final será alterado
                  para o valor padrão.
                default: false
                example: true
    NatureOperationsCreate:
      description: Corpo da requisição para criação de natureza de operação.
      required: true
      content:
        application/json:
          schema:
            type: object
            additionalProperties: false
            required:
              - name
            properties:
              name:
                type: string
                description: Nome da natureza da operação
                maxLength: 255
                example: Devolução de Mercadoria para Fornecedor
              description:
                type: string
                description: Descrição da natureza da operação
                maxLength: 500
                example: Operação de devolução de mercadoria
              is_keep_fiscal_benefit:
                type: boolean
                description: Manter Código de Benefício Fiscal na UF nos produtos?
                default: false
                example: true
              cfop_ids:
                type: array
                description: Mapeamentos de CFOP
                items:
                  type: object
                  required:
                    - cfop_from_id
                    - cfop_to_id
                    - is_free_icms
                  properties:
                    cfop_from_id:
                      type: integer
                      description: ID do CFOP de origem
                      example: 1101
                    cfop_to_id:
                      type: integer
                      description: ID do CFOP de destino
                      example: 1102
                    is_free_icms:
                      type: string
                      enum:
                        - 'yes'
                        - 'no'
                        - both
                      description: |
                        Isento de ICMS:
                        - "yes": Sim
                        - "no": Não
                        - "both": Ambos
                      example: 'yes'
              icms_group_ids:
                type: array
                description: Mapeamentos de grupos ICMS
                items:
                  type: object
                  required:
                    - icms_group_from_id
                    - icms_group_to_id
                  properties:
                    icms_group_from_id:
                      type: integer
                      description: ID do grupo ICMS de origem
                      example: 4
                    icms_group_to_id:
                      type: integer
                      description: ID do grupo ICMS de destino
                      example: 6
              pis_cofins_group_ids:
                type: array
                description: Mapeamentos de grupos PIS/COFINS
                items:
                  type: object
                  required:
                    - pis_cofins_group_from_id
                    - pis_cofins_group_to_id
                  properties:
                    pis_cofins_group_from_id:
                      type: integer
                      description: ID do grupo PIS/COFINS de origem
                      example: 1
                    pis_cofins_group_to_id:
                      type: integer
                      description: ID do grupo PIS/COFINS de destino
                      example: 2
    NatureOperationsUpdate:
      description: Corpo da requisição para atualização de natureza de operação.
      required: true
      content:
        application/json:
          schema:
            type: object
            additionalProperties: false
            required:
              - name
            properties:
              name:
                type: string
                description: Nome da natureza da operação
                maxLength: 255
                example: Devolução de Mercadoria para Fornecedor
              description:
                type: string
                description: Descrição da natureza da operação
                maxLength: 500
                example: Operação de devolução de mercadoria
              is_keep_fiscal_benefit:
                type: boolean
                description: Manter Código de Benefício Fiscal na UF nos produtos?
                default: false
                example: true
              cfop_ids:
                type: array
                description: Mapeamentos de CFOP
                items:
                  type: object
                  required:
                    - cfop_from_id
                    - cfop_to_id
                    - is_free_icms
                  properties:
                    cfop_from_id:
                      type: integer
                      description: ID do CFOP de origem
                      example: 1101
                    cfop_to_id:
                      type: integer
                      description: ID do CFOP de destino
                      example: 1102
                    is_free_icms:
                      type: string
                      enum:
                        - 'yes'
                        - 'no'
                        - both
                      description: |
                        Isento de ICMS:
                        - "yes": Sim
                        - "no": Não
                        - "both": Ambos
                      example: 'yes'
              icms_group_ids:
                type: array
                description: Mapeamentos de grupos ICMS
                items:
                  type: object
                  required:
                    - icms_group_from_id
                    - icms_group_to_id
                  properties:
                    icms_group_from_id:
                      type: integer
                      description: ID do grupo ICMS de origem
                      example: 4
                    icms_group_to_id:
                      type: integer
                      description: ID do grupo ICMS de destino
                      example: 6
              pis_cofins_group_ids:
                type: array
                description: Mapeamentos de grupos PIS/COFINS
                items:
                  type: object
                  required:
                    - pis_cofins_group_from_id
                    - pis_cofins_group_to_id
                  properties:
                    pis_cofins_group_from_id:
                      type: integer
                      description: ID do grupo PIS/COFINS de origem
                      example: 1
                    pis_cofins_group_to_id:
                      type: integer
                      description: ID do grupo PIS/COFINS de destino
                      example: 2
    TaxSettingsDefaultsUpdate:
      description: Dados para atualizar as configurações fiscais padrão
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/TaxSettingsDefaultsUpdate'
    ConfigNfeGeneralSettingsBody:
      description: >
        Dados para atualização das configurações gerais da NFe.


        **Regras importantes:**

        - Ao menos um objeto deve ser enviado no PATCH

        - Se `is_state_registration_exempt` for true, `state_registration` deve
        ser vazio ou null

        - Para remover os `xml_authorizeds` deve ser enviado um array vazio, se
        não enviar nada não será atualizado

        - `state_registration_st`, além de seguir o mesmo princípio de remoção
        do `xml_authorizeds`, não pode enviar estados repetidos

        - `transaction_intermediaries` também segue a mesma lógica de remoção do
        `xml_authorizeds`

        - Em `payment_settings`, se enviar `state` é obrigatório enviar os dois
        outros campos. Se `state` for null ou vazio os outros campos devem ser
        null ou vazios também, sendo proibido algum valor para eles
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ConfigNfeGeneralSettingsRequest'
      required: true
    PromotionCreationRequest:
      description: Corpo da requisição para criar uma promoção.
      content:
        application/json:
          schema:
            type: object
            properties:
              type:
                type: string
                description: Tipo da promoção.
                enum:
                  - TAKE_MORE_PAY_LESS
                  - DISCOUNT_COUPON
                  - ABOVE_VALUE_GET_DISCOUNT
                  - ABOVE_AMOUNT_GET_DISCOUNT
                  - ABOVE_VALUE_GET_PRODUCT
                  - ABOVE_AMOUNT_GET_PRODUCT
                example: DISCOUNT_COUPON
              name:
                type: string
                description: Nome da promoção.
                example: Promoção de Natal
                minLength: 2
                maxLength: 50
              description:
                type: string
                description: Descrição da promoção.
                example: Promoção de 10% de desconto
                maxLength: 255
              start_date:
                type: string
                description: >-
                  Data de início da promoção, deve ser maior ou igual ao
                  `end_date`. Formato "YYYY-MM-DD".
                example: '2021-01-01'
              end_date:
                type: string
                description: >-
                  Data de término da promoção, deve ser maior ou igual ao
                  `start_date`. Formato "YYYY-MM-DD".
                example: '2021-02-01'
              is_cumulative:
                type: boolean
                description: Permite que outras promoções sejam ativadas na mesma venda.
                default: false
                example: true
              company_ids:
                type: array
                description: >-
                  IDs das empresas participantes da promoção. Quando não
                  informado, a empresa que está realizando a requisição será
                  considerada.
                items:
                  type: integer
                  format: int64
                example:
                  - 1
                  - 2
                  - 3
              restriction_type:
                type: string
                description: >-
                  Tipo de restrição. Define qual será a restrição para a
                  ativação da promoção.
                enum:
                  - WEEK_DAYS
                  - BIRTHDAY
                example: WEEK_DAYS
              allowed_week_days:
                type: array
                description: >
                  Dias da semana permitidos para a ativação da promoção.


                  `Atenção` O campo deve ser informado apenas quando o
                  `restriction_type` for `WEEK_DAYS`.
                items:
                  type: string
                  enum:
                    - monday
                    - tuesday
                    - wednesday
                    - thursday
                    - friday
                    - saturday
                    - sunday
                example:
                  - monday
                  - tuesday
              activation_birthday_daily_limit:
                type: integer
                description: >
                  Limite de ativações diárias durante o mês do aniversário do
                  cliente.


                  `Atenção` O campo deve ser informado apenas quando o
                  `restriction_type` for `BIRTHDAY`.
                example: 1
              activation_birthday_monthly_limit:
                type: integer
                description: >
                  Limite de ativações mensais durante o mês do aniversário do
                  cliente.


                  `Atenção` O campo deve ser informado apenas quando o
                  `restriction_type` for `BIRTHDAY`.
                example: 1
              customer_activation_rule_type:
                type: string
                description: >
                  Define quais serão as regras para a ativação com cliente.


                  `IDENTIFIED_CUSTOMER` A promoção será ativa somente com um
                  cliente identificado na venda.


                  `INTEGRATION_FIDELITY` A promoção será ativa somente com um
                  cliente na venda que já tenha um cadastro no programa de
                  fidelidade. Deve ser informado apenas caso a empresa tenha
                  integração com o sistema de fidelidade.
                enum:
                  - IDENTIFIED_CUSTOMER
                  - INTEGRATION_FIDELITY
                example: IDENTIFIED_CUSTOMER
              settings:
                oneOf:
                  - $ref: '#/components/schemas/PromotionTakeMorePayLessSettingsBody'
                  - $ref: '#/components/schemas/PromotionDiscountCouponSettingsBody'
                  - $ref: >-
                      #/components/schemas/PromotionAboveValueGetDiscountSettingsBody
                  - $ref: >-
                      #/components/schemas/PromotionAboveAmountGetDiscountSettingsBody
                  - $ref: >-
                      #/components/schemas/PromotionAboveValueGetProductSettingsBody
                  - $ref: >-
                      #/components/schemas/PromotionAboveAmountGetProductSettingsBody
                  - $ref: >-
                      #/components/schemas/PromotionProgressiveDiscountSettingsBody
            required:
              - type
              - name
              - start_date
              - end_date
    PurchaseFileBody:
      description: Corpo requisição de upload de arquivo anexo.
      required: true
      content:
        multipart/form-data:
          schema:
            type: object
            properties:
              files:
                type: array
                description: Lista de arquivos.
                items:
                  type: object
                  description: Representa um arquivo.
                  properties:
                    file:
                      type: string
                      format: binary
            required:
              - files
    PosClose:
      description: Corpo requisição de um método de pagamento.
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/PosClose'
    ProductSupplier:
      description: Corpo da requisição para adicionar um fornecedor ao produto.
      required: true
      content:
        application/json:
          schema:
            type: object
            required:
              - supplier_id
              - product_code
              - conversion_factor
            properties:
              supplier_id:
                type: integer
                description: ID do fornecedor.
                example: 1
              product_code:
                type: string
                description: Código do produto no fornecedor.
                example: asdzxc1234
              conversion_factor:
                type: string
                description: Fator de conversão do produto.
                example: '10.300'
              options:
                type: array
                description: >
                  Lista de opções de atributos do produto.


                  `Atenção` Apenas envie a **options** se deseja vincular o
                  fornecedor às opções de atributos.

                  Este campo não pode ser utilizado em conjunto com o campo
                  **grid_id**.

                  Caso o campo **options** seja enviado, o campo **grid_id**
                  deve ser omitido ou nulo.
                items:
                  type: object
                  required:
                    - option_id
                  properties:
                    option_id:
                      type: integer
                      description: ID da opção do atributo.
                      example: 1
              grid_id:
                type: integer
                description: >
                  ID da grade do produto.


                  `Atenção` O campo **grid_id** não pode ser utilizado em
                  conjunto com o campo **options**.

                  Caso o campo **grid_id** seja enviado, o campo **options**
                  deve ser omitido ou nulo.
                example: 1
    BulkItems:
      description: Dados para adicionar ou remover itens de um lote
      required: true
      content:
        application/json:
          schema:
            type: object
            required:
              - kind
              - items
            properties:
              kind:
                type: string
                description: Tipo do lote
                example: product
              items:
                type: array
                description: Lista de itens para adicionar/remover
                items:
                  type: object
                  required:
                    - id
                  properties:
                    id:
                      type: integer
                      description: >-
                        ID do item. Este pode ser o ID do produto, do cliente,
                        do fornecedor a depender do tipo de lote.
                      example: 103
    BulkItemsByFilter:
      description: Dados para adicionar ou remover itens de um lote a partir de um filtro
      required: true
      content:
        application/json:
          schema:
            type: object
            required:
              - kind
              - filters
            properties:
              kind:
                type: string
                description: Tipo do lote
                example: product
                enum:
                  - product
                  - transaction
              filters:
                type: array
                description: >
                  Lista de filtros para adicionar/remover com base no tipo do
                  lote.


                  Exemplo:

                  - Se o tipo do lote é `product` você irá utilizar os mesmos
                  filtros do endpoint de [lista de
                  produtos](#tag/Products/operation/get-products).

                  - Se o tipo do lote é `transaction` você irá utilizar os
                  mesmos filtros do endpoint de [lista de
                  movimentações](#tag/Finances/operation/get-financial-transactions).
    BulkFinish:
      description: Dados para finalizar um bulk
      required: true
      content:
        application/json:
          schema:
            type: object
            required:
              - kind
              - operation
              - data
            properties:
              kind:
                type: string
                description: Tipo do bulk.
                enum:
                  - product
                  - price-list
                  - product-app
                  - product-taxes
                  - product-scales
                  - transaction
                example: product
              operation:
                type: string
                description: Operação a ser realizada.
                enum:
                  - update
                  - delete
                  - export
                example: update
              data:
                description: Dados a serem aplicados aos itens (varia conforme o kind).
                oneOf:
                  - title: Dados para 'product'
                    $ref: '#/components/schemas/ProductBulkBody'
                  - title: Dados para 'price-list'
                    $ref: '#/components/schemas/PriceListBulkBody'
                  - title: Dados para 'product-app'
                    $ref: '#/components/schemas/ProductAppBulkBody'
                  - title: Dados para 'product-taxes'
                    $ref: '#/components/schemas/ProductTaxSettingsBody'
                  - title: Dados para 'product-scales'
                    $ref: '#/components/schemas/ProductScalesBulkBody'
    Customization:
      description: Corpo requisição de uma customização.
      required: true
      content:
        application/json:
          schema:
            type: object
            title: Customização
            description: Representa uma customização da tela.
            required:
              - name
              - type
            properties:
              name:
                type: string
                maxLength: 255
                minLength: 1
                description: Nome da customização.
                example: Customização Promocional
              type:
                type: string
                description: |
                  Tipo da customização.

                  - `FULL_VIDEO`: Vídeo em tela cheia
                  - `BACK_VIDEO`: Vídeo de fundo
                  - `FULL_IMAGE`: Imagem em tela cheia
                  - `BACK_IMAGE`: Imagem de fundo
                  - `DYNAMIC_CATEGORY`: Categoria dinâmica
                enum:
                  - FULL_VIDEO
                  - BACK_VIDEO
                  - FULL_IMAGE
                  - BACK_IMAGE
                  - DYNAMIC_CATEGORY
                example: FULL_IMAGE
              transition:
                type:
                  - 'null'
                  - string
                description: |
                  Tipo de transição aplicada à customização.
                  **Obrigatório** para tipos `FULL_IMAGE` e `BACK_IMAGE`.

                  - `FALL`: Transição de queda
                  - `SLIDE`: Transição de deslizamento
                  - `FADE`: Transição de esmaecimento
                enum:
                  - FALL
                  - SLIDE
                  - FADE
                example: FADE
    CustomizationMedia:
      description: Corpo requisição para upload de mídia de customização.
      required: true
      content:
        multipart/form-data:
          schema:
            type: object
            required:
              - file
            properties:
              file:
                type: string
                format: binary
                description: |
                  Arquivo de mídia a ser enviado.

                  **Tipos suportados:**
                  - Imagens: PNG, JPG, JPEG (máximo 10MB)
                  - Vídeos: MP4 (máximo 50MB)
              type:
                type: string
                description: >
                  Tipo da mídia (opcional, será detectado automaticamente pelo
                  arquivo).


                  - `IMAGE`: Imagem (PNG, JPG, JPEG)

                  - `VIDEO`: Vídeo (MP4)
                enum:
                  - IMAGE
                  - VIDEO
                example: IMAGE
    FilterBody:
      description: Dados para criação ou atualização de um filtro.
      required: true
      content:
        application/json:
          schema:
            type: object
            properties:
              name:
                type: string
                minLength: 1
                maxLength: 60
                description: Nome do filtro.
                example: Extrato financeiro do ultimo mês
              system_area:
                type: string
                enum:
                  - extract
                description: >
                  Área do sistema à qual o filtro se aplica. Nem todas as áreas
                  estão disponíveis no momento.


                  **Observação:** Este campo é obrigatório apenas na criação. Na
                  atualização ele é ignorado.


                  - `extract`: Extrato
                example: extract
              filters:
                type: object
                description: >
                  Configuração dos filtros aplicados. O mesmo padrão de
                  validação do relatório relacionado.


                  - `extract`: `/api/v3/financial/transactions`
                example:
                  type: income
                  date_start: '2024-01-01'
                  date_end: '2024-01-31'
            required:
              - name
              - filters
              - system_area
    FilterUpdateBody:
      description: Dados para atualização de um filtro.
      required: true
      content:
        application/json:
          schema:
            type: object
            properties:
              name:
                type: string
                minLength: 1
                maxLength: 60
                description: Nome do filtro.
                example: Extrato financeiro do ultimo mês
              filters:
                type: object
                description: >
                  Configuração dos filtros aplicados. O mesmo padrão de
                  validação do relatório relacionado.


                  - `extract`: `/api/v3/financial/transactions`
                example:
                  type: income
                  date_start: '2024-01-01'
                  date_end: '2024-01-31'
            required:
              - name
              - filters
    ReconciliationTransactions:
      description: Corpo requisição de uma conciliação de transações.
      required: true
      content:
        application/json:
          schema:
            properties:
              reconciliation_transactions:
                type: array
                description: Lista de transações a serem conciliadas.
                items:
                  type: object
                  properties:
                    id:
                      type: integer
                      description: >
                        ID da transação a ser conciliada.


                        Você pode localizar os IDs das empresas no _endpoint_ de
                        [listagem de transações de uma conciliação
                        bancária](#tag/Reconciliations/operation/get-reconciliations-transactions).
                      example: 123
                    financial_transactions:
                      type: array
                      description: Lista de transações financeiras a serem conciliadas.
                      items:
                        type: object
                        properties:
                          id:
                            type: string
                            description: >
                              ID da transação financeira a ser conciliada.


                              Você pode localizar os IDs das transações
                              financeiras no _endpoint_ de [listagem de
                              transações
                              financeiras](#tag/Finances/operation/get-financial-transactions).
                            example: 657870656e73657c31
                        required:
                          - id
                  required:
                    - id
                    - financial_transactions
            required:
              - reconciliation_transactions
    RestoreReconciliationTransactions:
      description: Corpo requisição de uma restauração de transações.
      required: true
      content:
        application/json:
          schema:
            properties:
              reconciliation_transactions:
                type: array
                description: Lista de transações a serem restauradas.
                items:
                  type: object
                  properties:
                    id:
                      type: integer
                      description: >
                        ID da transação a ser restaurada.


                        Você pode localizar os IDs das empresas no _endpoint_ de
                        [listagem de transações de uma conciliação
                        bancária](#tag/Reconciliations/operation/get-reconciliations-transactions).
                      example: 123
                  required:
                    - id
            required:
              - reconciliation_transactions
    UnreconcileReconciliationTransactions:
      description: Corpo requisição de uma desconciliação de transações.
      required: true
      content:
        application/json:
          schema:
            properties:
              reconciliation_transactions:
                type: array
                description: Lista de transações a serem desconciladas.
                items:
                  type: object
                  properties:
                    id:
                      type: integer
                      description: >
                        ID da transação a ser desconcilada.


                        Você pode localizar os IDs das empresas no _endpoint_ de
                        [listagem de transações de uma conciliação
                        bancária](#tag/Reconciliations/operation/get-reconciliations-transactions).
                      example: 123
                  required:
                    - id
            required:
              - reconciliation_transactions
  examples:
    '0':
      summary: 0 - Tributado integralmente
      value:
        data:
          id: 123
          name: ICMS 0
          tributary_group:
            id: 0
            code: '00'
            description: 00 - Tributado integralmente
          settings:
            icms_percentage: 18
            base_calculation_mode:
              id: 3
              name: Valor da operação
          states:
            - code: SP
              rate:
                interstate_rate: 18
                standard_state_rate: 18
                fcp_rate: 2
                interstate_st_rate:
                  mva_percentage: 50
                  mva_sn_percentage: 40
                  reduction_percentage: 0
                  icms_percentage: 18
              cbenef_code: '123456789'
          final_consumer_group:
            id: 1
            name: ICMS Final Consumidor
            tributary_group:
              id: 1
              code: '001'
              description: 001 - Final Consumidor
            icms_percentage: 18
            is_default: false
            created_at: '2024-01-20T15:30:00.000000Z'
            updated_at: '2024-01-20T15:30:00.000000Z'
          is_interstate_sharing: true
          is_shared_with_all_companies: false,
          is_default: false
          created_at: '2024-01-20T15:30:00.000000Z'
          updated_at: '2024-01-20T15:30:00.000000Z'
    '10':
      summary: 10 - Tributado com ST
      value:
        data:
          id: 123
          name: ICMS 10
          tributary_group:
            id: 0
            code: '10'
            description: 10 - Tributado com ST
          settings:
            icms_percentage: 10
            base_calculation_mode:
              id: 0
              name: Margem Valor Agregado (%)
            st_base_calculation_mode:
              id: 4
              name: Margem Valor Agregado (%)
            st_icms_percentage: 10
            st_base_calculation_reduction_percentage: 10
            internal_rate_own_reduction: 10
            mva_percentage: 10
          states:
            - code: SP
              rate:
                interstate_rate: 18
                standard_state_rate: 18
                fcp_rate: 2
                interstate_st_rate:
                  mva_percentage: 50
                  mva_sn_percentage: 40
                  reduction_percentage: 0
                  icms_percentage: 18
              cbenef_code: '123456789'
          final_consumer_group:
            id: 1
            name: ICMS Final Consumidor
            tributary_group:
              id: 1
              code: '001'
              description: 001 - Final Consumidor
            icms_percentage: 18
            is_default: false
            created_at: '2024-01-20T15:30:00.000000Z'
            updated_at: '2024-01-20T15:30:00.000000Z'
          is_interstate_sharing: true
          is_shared_with_all_companies: false,
          is_default: false
          created_at: '2024-01-20T15:30:00.000000Z'
          updated_at: '2024-01-20T15:30:00.000000Z'
    '20':
      summary: 20 - Com redução de base de cálculo
      value:
        data:
          id: 63
          name: ICMS 20
          tributary_group:
            id: 20
            code: '20'
            description: 20 - Com redução de base de cálculo
          settings:
            icms_percentage: 10
            base_calculation_mode:
              id: 0
              name: Margem Valor Agregado (%)
            base_calculation_reduction_percentage: 12
            icms_exemption_reason:
              id: 12
              name: Órgão de fomento e desenvolvimento agropecuário
          states:
            - code: SP
              rate:
                interstate_rate: 18
                standard_state_rate: 18
                fcp_rate: 2
                interstate_st_rate:
                  mva_percentage: 50
                  mva_sn_percentage: 40
                  reduction_percentage: 0
                  icms_percentage: 18
              cbenef_code: '123456789'
          final_consumer_group:
            id: 1
            name: ICMS Final Consumidor
            tributary_group:
              id: 1
              code: '001'
              description: 001 - Final Consumidor
            icms_percentage: 18
            is_default: false
            created_at: '2024-01-20T15:30:00.000000Z'
            updated_at: '2024-01-20T15:30:00.000000Z'
          is_interstate_sharing: true
          is_shared_with_all_companies: false,
          is_default: false
          created_at: '2024-01-20T15:30:00.000000Z'
          updated_at: '2024-01-20T15:30:00.000000Z'
    '30':
      summary: >-
        30 - Isenta ou não tributada e com cobrança do ICMS por substituição
        tributária
      value:
        data:
          id: 64
          name: ICMS 30
          tributary_group:
            id: 30
            code: '30'
            description: >-
              30 - Isenta ou não tributada e com cobrança do ICMS por
              substituição tributária
          settings:
            icms_exemption_reason:
              id: 9
              name: Outros. (NT 2011/004)
            st_base_calculation_mode:
              id: 0
              name: Preço tabelado ou máximo sugerido
            st_icms_percentage: 11
            st_base_calculation_reduction_percentage: 11
            internal_rate_own_reduction: 11
          states:
            - code: SP
              rate:
                interstate_rate: 18
                standard_state_rate: 18
                fcp_rate: 2
                interstate_st_rate:
                  mva_percentage: 50
                  mva_sn_percentage: 40
                  reduction_percentage: 0
                  icms_percentage: 18
              cbenef_code: '123456789'
          final_consumer_group:
            id: 1
            name: ICMS Final Consumidor
            tributary_group:
              id: 1
              code: '001'
              description: 001 - Final Consumidor
            icms_percentage: 18
            is_default: false
            created_at: '2024-01-20T15:30:00.000000Z'
            updated_at: '2024-01-20T15:30:00.000000Z'
          is_interstate_sharing: true
          is_shared_with_all_companies: false,
          is_default: false
          created_at: '2024-01-20T15:30:00.000000Z'
          updated_at: '2024-01-20T15:30:00.000000Z'
    '40':
      summary: 40 - Isenta
      value:
        data:
          id: 65
          name: ICMS 40
          tributary_group:
            id: 40
            code: '40'
            description: 40 - Isenta
          settings:
            icms_exemption_reason: null
          states:
            - code: SP
              rate:
                interstate_rate: 18
                standard_state_rate: 18
                fcp_rate: 2
                interstate_st_rate:
                  mva_percentage: 50
                  mva_sn_percentage: 40
                  reduction_percentage: 0
                  icms_percentage: 18
              cbenef_code: '123456789'
          final_consumer_group:
            id: 1
            name: ICMS Final Consumidor
            tributary_group:
              id: 1
              code: '001'
              description: 001 - Final Consumidor
            icms_percentage: 18
            is_default: false
            created_at: '2024-01-20T15:30:00.000000Z'
            updated_at: '2024-01-20T15:30:00.000000Z'
          is_interstate_sharing: true
          is_shared_with_all_companies: false,
          is_default: false
          created_at: '2024-01-20T15:30:00.000000Z'
          updated_at: '2024-01-20T15:30:00.000000Z'
    '41':
      summary: 41 - Não tributada
      value:
        data:
          id: 86
          name: ICMS 41
          tributary_group:
            id: 41
            code: '41'
            description: 41 - Não tributada
          settings:
            icms_exemption_reason:
              id: 11
              name: Deficiente Não Condutor (Convênio ICMS 38/12)
          states:
            - code: SP
              rate:
                interstate_rate: 18
                standard_state_rate: 18
                fcp_rate: 2
                interstate_st_rate:
                  mva_percentage: 50
                  mva_sn_percentage: 40
                  reduction_percentage: 0
                  icms_percentage: 18
              cbenef_code: '123456789'
          final_consumer_group:
            id: 1
            name: ICMS Final Consumidor
            tributary_group:
              id: 1
              code: '001'
              description: 001 - Final Consumidor
            icms_percentage: 18
            is_default: false
            created_at: '2024-01-20T15:30:00.000000Z'
            updated_at: '2024-01-20T15:30:00.000000Z'
          is_interstate_sharing: true
          is_shared_with_all_companies: false,
          is_default: false
          created_at: '2024-01-20T15:30:00.000000Z'
          updated_at: '2024-01-20T15:30:00.000000Z'
    '50':
      summary: 50 - Suspensão
      value:
        data:
          id: 66
          name: ICMS 50
          tributary_group:
            id: 50
            code: '50'
            description: 50 - Suspensão
          settings:
            icms_exemption_reason:
              id: 11
              name: Deficiente Não Condutor (Convênio ICMS 38/12)
          states:
            - code: SP
              rate:
                interstate_rate: 18
                standard_state_rate: 18
                fcp_rate: 2
                interstate_st_rate:
                  mva_percentage: 50
                  mva_sn_percentage: 40
                  reduction_percentage: 0
                  icms_percentage: 18
              cbenef_code: '123456789'
          final_consumer_group:
            id: 1
            name: ICMS Final Consumidor
            tributary_group:
              id: 1
              code: '001'
              description: 001 - Final Consumidor
            icms_percentage: 18
            is_default: false
            created_at: '2024-01-20T15:30:00.000000Z'
            updated_at: '2024-01-20T15:30:00.000000Z'
          is_interstate_sharing: true
          is_shared_with_all_companies: false,
          is_default: false
          created_at: '2024-01-20T15:30:00.000000Z'
          updated_at: '2024-01-20T15:30:00.000000Z'
    '51':
      summary: 51 - Diferimento
      value:
        data:
          id: 67
          name: ICMS
          tributary_group:
            id: 51
            code: '51'
            description: 51 - Diferimento
          settings:
            icms_percentage: 12
            base_calculation_mode:
              id: 1
              name: Pauta (Valor)
          states:
            - code: SP
              rate:
                interstate_rate: 18
                standard_state_rate: 18
                fcp_rate: 2
                interstate_st_rate:
                  mva_percentage: 50
                  mva_sn_percentage: 40
                  reduction_percentage: 0
                  icms_percentage: 18
              cbenef_code: '123456789'
          final_consumer_group:
            id: 1
            name: ICMS Final Consumidor
            tributary_group:
              id: 1
              code: '001'
              description: 001 - Final Consumidor
            icms_percentage: 18
            is_default: false
            created_at: '2024-01-20T15:30:00.000000Z'
            updated_at: '2024-01-20T15:30:00.000000Z'
          is_interstate_sharing: true
          is_shared_with_all_companies: false,
          is_default: false
          created_at: '2024-01-20T15:30:00.000000Z'
          updated_at: '2024-01-20T15:30:00.000000Z'
    '60':
      summary: 60 - ICMS cobrado anteriormente por substituição tributária
      value:
        data:
          id: 68
          name: ICMS 60
          tributary_group:
            id: 60
            code: '60'
            description: 60 - ICMS cobrado anteriormente por substituição tributária
          settings: null
          states:
            - code: SP
              rate:
                interstate_rate: 18
                standard_state_rate: 18
                fcp_rate: 2
                interstate_st_rate:
                  mva_percentage: 50
                  mva_sn_percentage: 40
                  reduction_percentage: 0
                  icms_percentage: 18
              cbenef_code: '123456789'
          final_consumer_group:
            id: 1
            name: ICMS Final Consumidor
            tributary_group:
              id: 1
              code: '001'
              description: 001 - Final Consumidor
            icms_percentage: 18
            is_default: false
            created_at: '2024-01-20T15:30:00.000000Z'
            updated_at: '2024-01-20T15:30:00.000000Z'
          is_interstate_sharing: true
          is_shared_with_all_companies: false,
          is_default: false
          created_at: '2024-01-20T15:30:00.000000Z'
          updated_at: '2024-01-20T15:30:00.000000Z'
    '70':
      summary: >-
        70 - Com redução de base de cálculo e cobrança do ICMS por substituição
        tributária
      value:
        data:
          id: 69
          name: ICMS 70
          tributary_group:
            id: 70
            code: '70'
            description: >-
              70 - Com redução de base de cálculo e cobrança do ICMS por
              substituição tributária
          settings:
            icms_percentage: 70
            base_calculation_mode:
              id: 0
              name: Margem Valor Agregado (%)
            base_calculation_reduction_percentage: 70
            icms_exemption_reason:
              id: 9
              name: Outros. (NT 2011/004)
            st_base_calculation_mode:
              id: 4
              name: Margem Valor Agregado (%)
            st_icms_percentage: 70
            st_base_calculation_reduction_percentage: 70
            internal_rate_own_reduction: 70
            mva_percentage: 70
          states:
            - code: SP
              rate:
                interstate_rate: 18
                standard_state_rate: 18
                fcp_rate: 2
                interstate_st_rate:
                  mva_percentage: 50
                  mva_sn_percentage: 40
                  reduction_percentage: 0
                  icms_percentage: 18
              cbenef_code: '123456789'
          final_consumer_group:
            id: 1
            name: ICMS Final Consumidor
            tributary_group:
              id: 1
              code: '001'
              description: 001 - Final Consumidor
            icms_percentage: 18
            is_default: false
            created_at: '2024-01-20T15:30:00.000000Z'
            updated_at: '2024-01-20T15:30:00.000000Z'
          is_interstate_sharing: true
          is_shared_with_all_companies: false,
          is_default: false
          created_at: '2024-01-20T15:30:00.000000Z'
          updated_at: '2024-01-20T15:30:00.000000Z'
    '90':
      summary: 90 - Outras
      value:
        data:
          id: 70
          name: ICMS 90
          tributary_group:
            id: 90
            code: '90'
            description: 90 - Outras
          settings:
            icms_percentage: 90
            base_calculation_mode:
              id: 0
              name: Margem Valor Agregado (%)
            base_calculation_reduction_percentage: 90
            icms_exemption_reason:
              id: 12
              name: Órgão de fomento e desenvolvimento agropecuário
            st_base_calculation_mode:
              id: 4
              name: Margem Valor Agregado (%)
            st_icms_percentage: 90
            st_base_calculation_reduction_percentage: 90
            internal_rate_own_reduction: 90
            mva_percentage: 90
          states:
            - code: SP
              rate:
                interstate_rate: 18
                standard_state_rate: 18
                fcp_rate: 2
                interstate_st_rate:
                  mva_percentage: 50
                  mva_sn_percentage: 40
                  reduction_percentage: 0
                  icms_percentage: 18
              cbenef_code: '123456789'
          final_consumer_group:
            id: 1
            name: ICMS Final Consumidor
            tributary_group:
              id: 1
              code: '001'
              description: 001 - Final Consumidor
            icms_percentage: 18
            is_default: false
            created_at: '2024-01-20T15:30:00.000000Z'
            updated_at: '2024-01-20T15:30:00.000000Z'
          is_interstate_sharing: true
          is_shared_with_all_companies: false,
          is_default: false
          created_at: '2024-01-20T15:30:00.000000Z'
          updated_at: '2024-01-20T15:30:00.000000Z'
    '101':
      summary: 101 - Tributada pelo Simples Nacional com permissão de crédito
      value:
        data:
          id: 71
          name: ICMS 101
          tributary_group:
            id: 101
            code: '101'
            description: 101 - Tributada pelo Simples Nacional com permissão de crédito
          settings: null
          states:
            - code: SP
              rate:
                interstate_rate: 18
                standard_state_rate: 18
                fcp_rate: 2
                interstate_st_rate:
                  mva_percentage: 50
                  mva_sn_percentage: 40
                  reduction_percentage: 0
                  icms_percentage: 18
              cbenef_code: '123456789'
          final_consumer_group:
            id: 1
            name: ICMS Final Consumidor
            tributary_group:
              id: 1
              code: '001'
              description: 001 - Final Consumidor
            icms_percentage: 18
            is_default: false
            created_at: '2024-01-20T15:30:00.000000Z'
            updated_at: '2024-01-20T15:30:00.000000Z'
          is_interstate_sharing: true
          is_shared_with_all_companies: false,
          is_default: false
          created_at: '2024-01-20T15:30:00.000000Z'
          updated_at: '2024-01-20T15:30:00.000000Z'
    '102':
      summary: 102 - Tributada pelo Simples Nacional sem permissão de crédito
      value:
        data:
          id: 72
          name: ICMS 102
          tributary_group:
            id: 102
            code: '102'
            description: 102 - Tributada pelo Simples Nacional sem permissão de crédito
          settings: null
          states:
            - code: SP
              rate:
                interstate_rate: 18
                standard_state_rate: 18
                fcp_rate: 2
                interstate_st_rate:
                  mva_percentage: 50
                  mva_sn_percentage: 40
                  reduction_percentage: 0
                  icms_percentage: 18
              cbenef_code: '123456789'
          final_consumer_group:
            id: 1
            name: ICMS Final Consumidor
            tributary_group:
              id: 1
              code: '001'
              description: 001 - Final Consumidor
            icms_percentage: 18
            is_default: false
            created_at: '2024-01-20T15:30:00.000000Z'
            updated_at: '2024-01-20T15:30:00.000000Z'
          is_interstate_sharing: true
          is_shared_with_all_companies: false,
          is_default: false
          created_at: '2024-01-20T15:30:00.000000Z'
          updated_at: '2024-01-20T15:30:00.000000Z'
    '103':
      summary: 103 - Isenção do ICMS no Simples Nacional para faixa de receita bruta
      value:
        data:
          id: 73
          name: ICMS 103
          tributary_group:
            id: 103
            code: '103'
            description: >-
              103 - Isenção do ICMS no Simples Nacional para faixa de receita
              bruta
          settings: null
          states:
            - code: SP
              rate:
                interstate_rate: 18
                standard_state_rate: 18
                fcp_rate: 2
                interstate_st_rate:
                  mva_percentage: 50
                  mva_sn_percentage: 40
                  reduction_percentage: 0
                  icms_percentage: 18
              cbenef_code: '123456789'
          final_consumer_group:
            id: 1
            name: ICMS Final Consumidor
            tributary_group:
              id: 1
              code: '001'
              description: 001 - Final Consumidor
            icms_percentage: 18
            is_default: false
            created_at: '2024-01-20T15:30:00.000000Z'
            updated_at: '2024-01-20T15:30:00.000000Z'
          is_interstate_sharing: true
          is_shared_with_all_companies: false,
          is_default: false
          created_at: '2024-01-20T15:30:00.000000Z'
          updated_at: '2024-01-20T15:30:00.000000Z'
    '201':
      summary: >-
        201 - Tributada pelo Simples Nacional com permissão de crédito e com
        cobrança do ICMS por substituição tributária
      value:
        data:
          id: 74
          name: ICMS 201
          tributary_group:
            id: 201
            code: '201'
            description: >-
              201 - Tributada pelo Simples Nacional com permissão de crédito e
              com cobrança do ICMS por substituição tributária
          settings:
            st_base_calculation_mode:
              id: 4
              name: Margem Valor Agregado (%)
            st_icms_percentage: 21
            st_base_calculation_reduction_percentage: 21
            internal_rate_own_reduction: 21
            mva_percentage: 21
          states:
            - code: SP
              rate:
                interstate_rate: 18
                standard_state_rate: 18
                fcp_rate: 2
                interstate_st_rate:
                  mva_percentage: 50
                  mva_sn_percentage: 40
                  reduction_percentage: 0
                  icms_percentage: 18
              cbenef_code: '123456789'
          final_consumer_group:
            id: 1
            name: ICMS Final Consumidor
            tributary_group:
              id: 1
              code: '001'
              description: 001 - Final Consumidor
            icms_percentage: 18
            is_default: false
            created_at: '2024-01-20T15:30:00.000000Z'
            updated_at: '2024-01-20T15:30:00.000000Z'
          is_interstate_sharing: true
          is_shared_with_all_companies: false,
          is_default: false
          created_at: '2024-01-20T15:30:00.000000Z'
          updated_at: '2024-01-20T15:30:00.000000Z'
    '202':
      summary: >-
        202 - Tributada pelo Simples Nacional sem permissão de crédito e com
        cobrança do ICMS por substituição tributária
      value:
        data:
          id: 75
          name: ICMS 202
          tributary_group:
            id: 202
            code: '202'
            description: >-
              202 - Tributada pelo Simples Nacional sem permissão de crédito e
              com cobrança do ICMS por substituição tributária
          settings:
            icms_percentage: 22
            st_base_calculation_mode:
              id: 0
              name: Preço tabelado ou máximo sugerido
            st_icms_percentage: 22
            st_base_calculation_reduction_percentage: 22
            internal_rate_own_reduction: 22
          states:
            - code: SP
              rate:
                interstate_rate: 18
                standard_state_rate: 18
                fcp_rate: 2
                interstate_st_rate:
                  mva_percentage: 50
                  mva_sn_percentage: 40
                  reduction_percentage: 0
                  icms_percentage: 18
              cbenef_code: '123456789'
          final_consumer_group:
            id: 1
            name: ICMS Final Consumidor
            tributary_group:
              id: 1
              code: '001'
              description: 001 - Final Consumidor
            icms_percentage: 18
            is_default: false
            created_at: '2024-01-20T15:30:00.000000Z'
            updated_at: '2024-01-20T15:30:00.000000Z'
          is_interstate_sharing: true
          is_shared_with_all_companies: false,
          is_default: false
          created_at: '2024-01-20T15:30:00.000000Z'
          updated_at: '2024-01-20T15:30:00.000000Z'
    '203':
      summary: >-
        203 - Isenção do ICMS no Simples Nacional para faixa de receita bruta e
        com cobrança do ICMS por substituição tributária
      value:
        data:
          id: 76
          name: ICMS 203
          tributary_group:
            id: 203
            code: '203'
            description: >-
              203 - Isenção do ICMS no Simples Nacional para faixa de receita
              bruta e com cobrança do ICMS por substituição tributária
          settings:
            st_base_calculation_mode:
              id: 0
              name: Preço tabelado ou máximo sugerido
            st_icms_percentage: 23
            st_base_calculation_reduction_percentage: 23
            internal_rate_own_reduction: 23
          states:
            - code: SP
              rate:
                interstate_rate: 18
                standard_state_rate: 18
                fcp_rate: 2
                interstate_st_rate:
                  mva_percentage: 50
                  mva_sn_percentage: 40
                  reduction_percentage: 0
                  icms_percentage: 18
              cbenef_code: '123456789'
          final_consumer_group:
            id: 1
            name: ICMS Final Consumidor
            tributary_group:
              id: 1
              code: '001'
              description: 001 - Final Consumidor
            icms_percentage: 18
            is_default: false
            created_at: '2024-01-20T15:30:00.000000Z'
            updated_at: '2024-01-20T15:30:00.000000Z'
          is_interstate_sharing: true
          is_shared_with_all_companies: false,
          is_default: false
          created_at: '2024-01-20T15:30:00.000000Z'
          updated_at: '2024-01-20T15:30:00.000000Z'
    '300':
      summary: 300 - Imune
      value:
        data:
          id: 77
          name: ICMS 300
          tributary_group:
            id: 300
            code: '300'
            description: 300 - Imune
          settings: null
          states:
            - code: SP
              rate:
                interstate_rate: 18
                standard_state_rate: 18
                fcp_rate: 2
                interstate_st_rate:
                  mva_percentage: 50
                  mva_sn_percentage: 40
                  reduction_percentage: 0
                  icms_percentage: 18
              cbenef_code: '123456789'
          final_consumer_group:
            id: 1
            name: ICMS Final Consumidor
            tributary_group:
              id: 1
              code: '001'
              description: 001 - Final Consumidor
            icms_percentage: 18
            is_default: false
            created_at: '2024-01-20T15:30:00.000000Z'
            updated_at: '2024-01-20T15:30:00.000000Z'
          is_interstate_sharing: true
          is_shared_with_all_companies: false,
          is_default: false
          created_at: '2024-01-20T15:30:00.000000Z'
          updated_at: '2024-01-20T15:30:00.000000Z'
    '400':
      summary: 400 - Não tributada pelo Simples Nacional
      value:
        data:
          id: 78
          name: ICMS 400
          tributary_group:
            id: 400
            code: '400'
            description: 400 - Não tributada pelo Simples Nacional
          settings: null
          states:
            - code: SP
              rate:
                interstate_rate: 18
                standard_state_rate: 18
                fcp_rate: 2
                interstate_st_rate:
                  mva_percentage: 50
                  mva_sn_percentage: 40
                  reduction_percentage: 0
                  icms_percentage: 18
              cbenef_code: '123456789'
          final_consumer_group:
            id: 1
            name: ICMS Final Consumidor
            tributary_group:
              id: 1
              code: '001'
              description: 001 - Final Consumidor
            icms_percentage: 18
            is_default: false
            created_at: '2024-01-20T15:30:00.000000Z'
            updated_at: '2024-01-20T15:30:00.000000Z'
          is_interstate_sharing: true
          is_shared_with_all_companies: false,
          is_default: false
          created_at: '2024-01-20T15:30:00.000000Z'
          updated_at: '2024-01-20T15:30:00.000000Z'
    '500':
      summary: >-
        500 - ICMS cobrado anteriormente por substituição tributária
        (substituído) ou por antecipação
      value:
        data:
          id: 80
          name: ICMS 500
          tributary_group:
            id: 500
            code: '500'
            description: >-
              500 - ICMS cobrado anteriormente por substituição tributária
              (substituído) ou por antecipação
          settings: null
          states:
            - code: SP
              rate:
                interstate_rate: 18
                standard_state_rate: 18
                fcp_rate: 2
                interstate_st_rate:
                  mva_percentage: 50
                  mva_sn_percentage: 40
                  reduction_percentage: 0
                  icms_percentage: 18
              cbenef_code: '123456789'
          final_consumer_group:
            id: 1
            name: ICMS Final Consumidor
            tributary_group:
              id: 1
              code: '001'
              description: 001 - Final Consumidor
            icms_percentage: 18
            is_default: false
            created_at: '2024-01-20T15:30:00.000000Z'
            updated_at: '2024-01-20T15:30:00.000000Z'
          is_interstate_sharing: true
          is_shared_with_all_companies: false,
          is_default: false
          created_at: '2024-01-20T15:30:00.000000Z'
          updated_at: '2024-01-20T15:30:00.000000Z'
    '900':
      summary: 900 - Outros
      value:
        data:
          id: 81
          name: ICMS 900
          tributary_group:
            id: 900
            code: '900'
            description: 900 - Outros
          settings:
            icms_percentage: 90
            base_calculation_mode:
              id: 0
              name: Margem Valor Agregado (%)
            base_calculation_reduction_percentage: 90
            st_base_calculation_mode:
              id: 4
              name: Margem Valor Agregado (%)
            st_icms_percentage: 90
            st_base_calculation_reduction_percentage: 90
            internal_rate_own_reduction: 90
            mva_percentage: 10
          states:
            - code: SP
              rate:
                interstate_rate: 18
                standard_state_rate: 18
                fcp_rate: 2
                interstate_st_rate:
                  mva_percentage: 50
                  mva_sn_percentage: 40
                  reduction_percentage: 0
                  icms_percentage: 18
              cbenef_code: '123456789'
          final_consumer_group:
            id: 1
            name: ICMS Final Consumidor
            tributary_group:
              id: 1
              code: '001'
              description: 001 - Final Consumidor
            icms_percentage: 18
            is_default: false
            created_at: '2024-01-20T15:30:00.000000Z'
            updated_at: '2024-01-20T15:30:00.000000Z'
          is_interstate_sharing: true
          is_shared_with_all_companies: false,
          is_default: false
          created_at: '2024-01-20T15:30:00.000000Z'
          updated_at: '2024-01-20T15:30:00.000000Z'
    transactions:
      summary: Exemplo de lista com transações de despesa e receita
      description: ''
      value:
        data:
          financial_transactions:
            - id: 657870656e73657c3139
              has_grouping: false
              parent_id: 657870656e73657c3133
              type: expense
              description: Teste.
              notes: Solicitação interna.
              competence_date: '2025-08-04'
              due_date: '2025-08-04'
              status: paid
              value:
                amount: 99.95
                currency: BRL
              discount:
                amount: 0
                currency: BRL
              interest:
                amount: 0
                currency: BRL
              total:
                amount: 99.95
                currency: BRL
              account_plan_descriptions:
                - account_plan_id: 123
                  cost_center_id: 123
                  value:
                    amount: 99.95
                    currency: BRL
                  account_plan:
                    id: 7
                    name: Custo dos Produtos
                    financial_group:
                      id: 3
                      name: Custos Operacionais
                      type: expense
                      order: 3
                    available_for_pdv: true
                    is_editable: false
                  cost_center:
                    id: 1
                    name: Comercial
              payments:
                - value:
                    amount: 99.95
                    currency: BRL
                  payment_date: '2025-08-04'
                  payment_method:
                    id: 3
                    name: Cartão de Crédito
                  card_brand:
                    id: 2
                    name: MasterCard
              supplier:
                id: 2
                name: ConnectPlug
                company_name: null
                type: company
                state_registry_free: true
                documents:
                  - type: cnpj
                    identify: '97465769000117'
                founding_date: '2024-01-01'
                birthday: '2000-01-01'
                inscricao_suframa: '123456789'
                address:
                  id: 2
                  ibge_code: '3550308'
                  zip_code: '01311000'
                  street: Rua dos demonios
                  number: hell 666 B
                  neighborhood: HellVillage
                  complement: dehind enemy lines
                  city_id: 3898
                  city: São Paulo
                  state: SP
                  type: default
                  nickname: null
                contacts: []
                notes: my notes
                companies:
                  - id: 1
                    name: Marlon Minotti
                    company_name: Marlon Minotti
                created_at: '2025-08-04T15:36:11.000000Z'
                updated_at: '2025-08-04T15:36:11.000000Z'
                deleted: false
              bank_account:
                id: 1
                name: Conta Padrão
                bank:
                  id: 27
                  name: 'Não é um Banco (Ex: Conta Dinheiro, Caixinha)'
                  code: -10
                  image: https://connectplug.com.br/images/banks/10.png
                companies:
                  - id: 1
                    name: Marlon Minotti
                    company_name: Marlon Minotti
              files: []
              created_at: '2025-08-05T12:02:32.000000Z'
              updated_at: '2025-08-05T12:02:32.000000Z'
            - id: 696e636f6d657c32
              has_grouping: false
              parent_id: 657870656e73657c3133
              type: income
              description: Teste.
              notes: Solicitação interna.
              competence_date: '2025-08-04'
              due_date: '2025-08-04'
              status: paid
              value:
                amount: 99.95
                currency: BRL
              discount:
                amount: 0
                currency: BRL
              interest:
                amount: 0
                currency: BRL
              total:
                amount: 99.95
                currency: BRL
              account_plan_descriptions:
                - account_plan_id: 124
                  cost_center_id: 124
                  value:
                    amount: 99.95
                    currency: BRL
                  account_plan:
                    id: 14
                    name: Ajuste de Caixa
                    financial_group:
                      id: 6
                      name: Outras Receitas
                      type: income
                      order: 6
                    available_for_pdv: true
                    is_editable: false
                  cost_center:
                    id: 1
                    name: Comercial
              payments:
                - value:
                    amount: 99.95
                    currency: BRL
                  payment_date: '2025-08-04'
                  payment_method:
                    id: 3
                    name: Cartão de Crédito
                  card_brand:
                    id: 2
                    name: MasterCard
              customer:
                id: 2
                name: Cliente 2
                type: individual
                order_count: 0
                last_order_id: null
                company_name: null
                notes: null
                birthday: null
                documents: []
                contacts: []
                addresses:
                  - id: 3
                    ibge_code: '4106902'
                    zip_code: '82120030'
                    street: Rua Orestes Beltrami
                    number: '88'
                    neighborhood: Pilarzinho
                    complement: null
                    city_id: 4289
                    city: Curitiba
                    state: PR
                    type: shipping
                    nickname: Trabalho
                companies:
                  - id: 1
                    name: Marlon Minotti
                    company_name: Marlon Minotti
                category: null
                created_at: '2025-08-04T15:37:14.000000Z'
                updated_at: '2025-08-04T15:37:14.000000Z'
              bank_account:
                id: 1
                name: Conta Padrão
                bank:
                  id: 27
                  name: 'Não é um Banco (Ex: Conta Dinheiro, Caixinha)'
                  code: -10
                  image: https://connectplug.com.br/images/banks/10.png
                companies:
                  - id: 1
                    name: Marlon Minotti
                    company_name: Marlon Minotti
              files: []
              created_at: '2025-08-04T18:48:55.000000Z'
              updated_at: '2025-08-04T18:48:55.000000Z'
        meta:
          current_page: 1
          last_page: 1
          per_page: 30
          total: 3
    entrada_recuperacao_credito_example:
      summary: Entrada com recuperação de crédito (00)
      description: Exemplo para entrada com recuperação de crédito
      value:
        data:
          id: 12
          name: IPI Entrada Recuperação Crédito
          tributary_group:
            id: 0
            code: '00'
            description: 00 - Entrada com recuperação de crédito
          legal_classification:
            id: 129
            description: 999 - Tributação normal IPI; Outros;
          ipi_percent: 12
          is_default: false
          created_at: '2025-07-30T13:13:51.000000Z'
          updated_at: '2025-07-30T13:34:36.000000Z'
    entrada_tributada_zero_example:
      summary: Entrada tributada com alíquota zero (01)
      description: Exemplo para entrada tributada com alíquota zero
      value:
        data:
          id: 13
          name: IPI Entrada Tributada Zero
          tributary_group:
            id: 1
            code: '01'
            description: 01 - Entrada tributada com alíquota zero
          legal_classification:
            id: 129
            description: 999 - Tributação normal IPI; Outros;
          is_default: false
          created_at: '2025-07-30T13:13:51.000000Z'
          updated_at: '2025-07-30T13:34:36.000000Z'
    base_isento_example:
      summary: Grupo isento (02)
      description: Exemplo para grupos isentos de IPI (02)
      value:
        data:
          id: 6
          name: IPI Isento
          tributary_group:
            id: 2
            code: '02'
            description: 02 - Entrada isenta
          legal_classification:
            id: 129
            description: 999 - Tributação normal IPI; Outros;
          is_default: false
          created_at: '2025-07-30T13:13:51.000000Z'
          updated_at: '2025-07-30T13:34:36.000000Z'
    entrada_nao_tributada_example:
      summary: Entrada não-tributada (03)
      description: Exemplo para entrada não-tributada (03)
      value:
        data:
          id: 14
          name: IPI Entrada Não Tributada
          tributary_group:
            id: 3
            code: '03'
            description: 03 - Entrada não-tributada
          legal_classification:
            id: 129
            description: 999 - Tributação normal IPI; Outros;
          is_default: false
          created_at: '2025-07-30T13:13:51.000000Z'
          updated_at: '2025-07-30T13:34:36.000000Z'
    base_imune_example:
      summary: Grupo imune (04)
      description: Exemplo para grupos imunes de IPI (04)
      value:
        data:
          id: 7
          name: IPI Imune
          tributary_group:
            id: 4
            code: '04'
            description: 04 - Entrada imune
          legal_classification:
            id: 129
            description: 999 - Tributação normal IPI; Outros;
          is_default: false
          created_at: '2025-07-30T13:13:51.000000Z'
          updated_at: '2025-07-30T13:34:36.000000Z'
    base_suspensao_example:
      summary: Grupo com suspensão (05)
      description: Exemplo para grupos com suspensão de IPI (05)
      value:
        data:
          id: 8
          name: IPI Suspensão
          tributary_group:
            id: 5
            code: '05'
            description: 05 - Entrada com suspensão
          legal_classification:
            id: 129
            description: 999 - Tributação normal IPI; Outros;
          is_default: false
          created_at: '2025-07-30T13:13:51.000000Z'
          updated_at: '2025-07-30T13:34:36.000000Z'
    outras_entradas_example:
      summary: Outras entradas (49)
      description: Exemplo para outras entradas (49)
      value:
        data:
          id: 15
          name: IPI Outras Entradas
          tributary_group:
            id: 49
            code: '49'
            description: 49 - Outras entradas
          legal_classification:
            id: 129
            description: 999 - Tributação normal IPI; Outros;
          ipi_percent: 6
          is_default: false
          created_at: '2025-07-30T13:13:51.000000Z'
          updated_at: '2025-07-30T13:34:36.000000Z'
    base_saida_tributada_example:
      summary: Saída tributada (50)
      description: Exemplo para saída tributada (50)
      value:
        data:
          id: 9
          name: IPI Saída Tributada
          tributary_group:
            id: 50
            code: '50'
            description: 50 - Saída tributada
          legal_classification:
            id: 129
            description: 999 - Tributação normal IPI; Outros;
          ipi_percent: 15
          is_default: false
          created_at: '2025-07-30T13:13:51.000000Z'
          updated_at: '2025-07-30T13:34:36.000000Z'
    saida_tributada_zero_example:
      summary: Saída tributada com alíquota zero (51)
      description: Exemplo para saída tributada com alíquota zero (51)
      value:
        data:
          id: 16
          name: IPI Saída Tributada Zero
          tributary_group:
            id: 51
            code: '51'
            description: 51 - Saída tributada com alíquota zero
          legal_classification:
            id: 129
            description: 999 - Tributação normal IPI; Outros;
          is_default: false
          created_at: '2025-07-30T13:13:51.000000Z'
          updated_at: '2025-07-30T13:34:36.000000Z'
    base_saida_isenta_example:
      summary: Saída isenta (52)
      description: Exemplo para saída isenta (52)
      value:
        data:
          id: 10
          name: IPI Saída Isenta
          tributary_group:
            id: 52
            code: '52'
            description: 52 - Saída isenta
          legal_classification:
            id: 129
            description: 999 - Tributação normal IPI; Outros;
          is_default: false
          created_at: '2025-07-30T13:13:51.000000Z'
          updated_at: '2025-07-30T13:34:36.000000Z'
    saida_nao_tributada_example:
      summary: Saída não-tributada (53)
      description: Exemplo para saída não-tributada (53)
      value:
        data:
          id: 17
          name: IPI Saída Não Tributada
          tributary_group:
            id: 53
            code: '53'
            description: 53 - Saída não-tributada
          legal_classification:
            id: 129
            description: 999 - Tributação normal IPI; Outros;
          is_default: false
          created_at: '2025-07-30T13:13:51.000000Z'
          updated_at: '2025-07-30T13:34:36.000000Z'
    saida_imune_example:
      summary: Saída imune (54)
      description: Exemplo para saída imune (54)
      value:
        data:
          id: 18
          name: IPI Saída Imune
          tributary_group:
            id: 54
            code: '54'
            description: 54 - Saída imune
          legal_classification:
            id: 129
            description: 999 - Tributação normal IPI; Outros;
          is_default: false
          created_at: '2025-07-30T13:13:51.000000Z'
          updated_at: '2025-07-30T13:34:36.000000Z'
    saida_suspensao_example:
      summary: Saída com suspensão (55)
      description: Exemplo para saída com suspensão (55)
      value:
        data:
          id: 19
          name: IPI Saída Suspensão
          tributary_group:
            id: 55
            code: '55'
            description: 55 - Saída com suspensão
          legal_classification:
            id: 129
            description: 999 - Tributação normal IPI; Outros;
          is_default: false
          created_at: '2025-07-30T13:13:51.000000Z'
          updated_at: '2025-07-30T13:34:36.000000Z'
    base_outras_saidas_example:
      summary: Outras saídas (99)
      description: Exemplo para outras saídas (99)
      value:
        data:
          id: 11
          name: IPI Outras Saídas
          tributary_group:
            id: 99
            code: '99'
            description: 99 - Outras saídas
          legal_classification:
            id: 129
            description: 999 - Tributação normal IPI; Outros;
          ipi_percent: 8
          is_default: false
          created_at: '2025-07-30T13:13:51.000000Z'
          updated_at: '2025-07-30T13:34:36.000000Z'
    situacao_com_percentual_example:
      summary: Situação com Percentual
      description: Exemplo de grupo PIS/COFINS com situação que requer percentual
      value:
        data:
          id: 8
          name: Pis Cofins
          pis_tributary_group:
            id: 1
            code: '01'
            description: 01 - Operação Tributável - Alíquota Normal
          situation_id_cofins:
            id: 1
            code: '01'
            description: 01 - Operação Tributável (tributação monofásica)
          percent_pis: 10
          percent_cofins: 10
          default: null
          created_at: '2025-08-01T14:08:29.000000Z'
          updated_at: '2025-08-01T14:08:29.000000Z'
    situacao_sem_percentual_example:
      summary: Situação sem Percentual
      description: Exemplo de grupo PIS/COFINS com situação que não requer percentual
      value:
        data:
          id: 9
          name: Pis Cofins - Tributação Monofásica
          pis_tributary_group:
            id: 4
            code: '04'
            description: 04 - Operação Tributável (tributação monofásica, alíquota zero)
          cofins_tributary_group:
            id: 4
            code: '04'
            description: 04 - Operação Tributável (tributação monofásica, alíquota zero)
          percent_pis: null
          percent_cofins: null
          default: null
          created_at: '2025-08-01T14:08:29.000000Z'
          updated_at: '2025-08-01T14:08:29.000000Z'
    issqn_group_list_example:
      summary: Lista de grupos de ISSQN
      description: Exemplo de resposta da listagem de grupos de ISSQN
      value:
        data:
          issqns:
            - id: 1
              name: Grupo 1 ISSQN
              issqn_percent: 123
              iss_indicator:
                id: 1
                name: Exigível
              incentive_indicator: 'no'
              is_default: false
              disabled: false
              created_at: '2025-04-08T18:43:44.000000Z'
              updated_at: '2025-08-24T13:30:26.000000Z'
            - id: 2
              name: Grupo 2 ISSQN
              issqn_percent: 50
              iss_indicator:
                id: 3
                name: Isenção
              incentive_indicator: 'yes'
              is_default: true
              disabled: false
              created_at: '2025-04-08T18:43:44.000000Z'
              updated_at: '2025-08-24T13:30:26.000000Z'
    issqn_group_example:
      summary: Exemplo de grupo de ISSQN
      description: Exemplo de um grupo de ISSQN com todos os campos preenchidos
      value:
        data:
          id: 1
          name: Grupo 1 ISSQN
          issqn_percent: 123
          iss_indicator:
            id: 1
            name: Exigível
          incentive_indicator: 'no'
          is_default: false
          disabled: false
          created_at: '2025-04-08T18:43:44.000000Z'
          updated_at: '2025-08-24T13:30:26.000000Z'
security:
  - OAuth2: []
