> ## Documentation Index
> Fetch the complete documentation index at: https://docs.engineapi.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Emitir NFC-e (Modelo 65)

> Emite uma NFC-e de forma síncrona: a chamada só retorna depois da resposta da SEFAZ, com o desfecho real no `status` do envelope (`AUTHORIZED` ou `REJECTED`). Rejeição volta como `400` com `error.erros[]` (código e descrição, ver [Erros e Rejeições](/guides/errors)); campo inválido no payload também é `400`, mas sem `erros[]` (a nota nunca chega na SEFAZ). Use `Idempotency-Key` para reenviar com segurança em caso de timeout/retry.



## OpenAPI

````yaml /openapi.json post /v1/nfce
openapi: 3.1.0
info:
  title: EngineAPI - Motor Fiscal SaaS
  description: >-

    ## API de Emissão Fiscal B2B2B


    EngineAPI é uma plataforma SaaS para emissão de documentos fiscais
    eletrônicos brasileiros.


    ### Documentos Suportados

    - **NF-e** (Modelo 55) - Nota Fiscal Eletrônica

    - **NFC-e** (Modelo 65) - Nota Fiscal de Consumidor Eletrônica

    - **NFS-e** - Nota Fiscal de Serviços Eletrônica


    > CTe (57) e MDFe (58): roadmap sem data, fora da superfície pública.


    ### Autenticação

    Todas as rotas protegidas requerem:

    ```

    Authorization: Bearer <seu_token>    # JWT (painel web)

    x-api-key: ek_live_<sua_key>         # API Key (server-to-server)

    ```


    ### Rate Limits

    - **Por plano** (janela de 1 segundo): Dev 5 · Starter 20 · Growth 60 ·
    Scale 200 req/s

    - Headers `X-RateLimit-Limit`/`Remaining`/`Reset` em toda resposta;
    `Retry-After` no 429


    ### Idempotency

    POSTs aceitam header `Idempotency-Key` para prevenir duplicatas:

    ```

    Idempotency-Key: <uuid-único-por-operação>

    ```


    ### Ambientes

    - **Homologação**: Para testes (SEFAZ sandbox)

    - **Produção**: Emissões reais


    ### Suporte

    - Email: suporte@engineapi.com.br

    - Docs: https://docs.engineapi.com.br
        
  version: 2.1.0
  contact:
    name: engineAPI
    url: https://engineapi.com.br
    email: suporte@engineapi.com.br
  license:
    name: Proprietário
    url: https://engineapi.com.br/legal/termos
servers:
  - url: https://api.engineapi.com.br
    description: Produção
security: []
tags:
  - name: Cérebro Fiscal
    description: >-
      Classificação fiscal assistida + tributação IBS/CBS (tier 80%, apoio à
      decisão)
  - name: Autenticação
    description: Login, registro de conta e API Keys
  - name: Empresas
    description: Gestão de empresas emitentes (Issuers)
  - name: NFe
    description: Nota Fiscal Eletrônica (Modelo 55)
  - name: NFCe
    description: Nota Fiscal de Consumidor (Modelo 65)
  - name: NFSe
    description: Nota Fiscal de Serviços Eletrônica
  - name: Consultas
    description: Consulta de CNPJ e CPF
  - name: Webhooks
    description: Configuração, entregas e reenvio de eventos assíncronos
  - name: Status
    description: Status público por serviço e canário de deploy
  - name: Saúde
    description: Liveness/readiness do processo e sanidade de autenticação
paths:
  /v1/nfce:
    post:
      tags:
        - NFCe
      summary: Emitir NFC-e (Modelo 65)
      description: >-
        Emite uma NFC-e de forma síncrona: a chamada só retorna depois da
        resposta da SEFAZ, com o desfecho real no `status` do envelope
        (`AUTHORIZED` ou `REJECTED`). Rejeição volta como `400` com
        `error.erros[]` (código e descrição, ver [Erros e
        Rejeições](/guides/errors)); campo inválido no payload também é `400`,
        mas sem `erros[]` (a nota nunca chega na SEFAZ). Use `Idempotency-Key`
        para reenviar com segurança em caso de timeout/retry.
      operationId: create
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateNfceDto'
      responses:
        '201':
          description: NFC-e emitida com sucesso
        '400':
          description: Dados inválidos
        '403':
          description: Sem emissor configurado
      security:
        - bearer: []
components:
  schemas:
    CreateNfceDto:
      type: object
      properties:
        issuerId:
          description: >-
            UUID do emissor (retornado por POST /v1/companies). Opcional com 1
            emissor cadastrado; obrigatório com 2+
          type: string
          format: uuid
          pattern: >-
            ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
        serie:
          description: Série da NFC-e. Ausente = série padrão do emissor
          type: number
        numero:
          description: >-
            Número da NFC-e (passthrough). Ausente = alocado automaticamente
            pela engineAPI
          type: number
        destCPF:
          description: >-
            CPF do consumidor final, só dígitos. Ausente = venda sem
            identificação
          type: string
        destNome:
          description: Nome do consumidor final. Ausente = "CONSUMIDOR FINAL"
          type: string
        items:
          minItems: 1
          type: array
          items:
            type: object
            properties:
              codigo:
                type: string
                minLength: 1
                description: Código interno do produto (seu SKU)
              descricao:
                type: string
                minLength: 1
                description: Descrição do produto
              ean:
                description: Código de barras EAN/GTIN do produto. Ausente = "SEM GTIN"
                type: string
              ncm:
                type: string
                minLength: 8
                maxLength: 8
                description: Nomenclatura Comum do Mercosul, 8 dígitos exatos
              cest:
                description: >-
                  Código Especificador da Substituição Tributária, 7 dígitos sem
                  pontuação (ex.: "0100100"). Transmitido no produto do
                  documento; formato inválido devolve 422 CEST_INVALIDO
                type: string
              cBenef:
                type: string
                description: >-
                  Código do benefício fiscal (cBenef) concedido pela UF, exigido
                  por algumas UFs quando o CST/CSOSN indica benefício (ex.: GO
                  exige cBenef no CST 61 monofásico). Passthrough: o código vem
                  da tabela de benefícios da própria UF, o motor não calcula nem
                  confere
              cfop:
                type: string
                minLength: 1
                description: >-
                  Código Fiscal de Operações e Prestações (predominantemente
                  estadual, ex.: "5102")
              unidade:
                type: string
                minLength: 1
                description: 'Unidade comercial: "UN", "KG", "MT", "CX", etc.'
              quantidade:
                type: number
                minimum: 0.0001
                description: Quantidade vendida (mínimo 0.0001)
              valorUnitario:
                type: number
                minimum: 0.01
                description: Valor unitário do produto em R$ (mínimo 0.01)
              valorTotal:
                description: >-
                  Redundante: sempre recalculado como quantidade ×
                  valorUnitario. Se enviado e divergente, 400
                type: number
              desconto:
                description: >-
                  Desconto INCONDICIONAL do item em R$ (vDesc do leiaute). Reduz
                  a base do ICMS e do IBS/CBS. NÃO informe desconto condicional
                  (sob condição/evento posterior): por lei ele integra a base e
                  não tem campo no item
                type: number
                minimum: 0
              valorFrete:
                description: >-
                  Frete do item em R$ (vFrete do leiaute). NÃO SUPORTADO na
                  NFC-e: qualquer valor > 0 devolve 422
                  FRETE_SEGURO_OUTRO_INVALIDO. A NFC-e sempre emite como venda
                  presencial, sem transporte (modFrete=9/indPres=1 fixos), e
                  frete pressupõe entrega a domicílio, cenário que a NFC-e ainda
                  não representa. Emita uma NF-e (modelo 55) para documentos com
                  frete
                type: number
                minimum: 0
              valorSeguro:
                description: >-
                  Seguro do item em R$ (vSeg do leiaute). Soma no vNF e integra
                  a base do ICMS e do IBS/CBS
                type: number
                minimum: 0
              outrasDespesas:
                description: >-
                  Outras despesas acessórias do item em R$ (vOutro do leiaute).
                  Soma no vNF e integra a base do ICMS e do IBS/CBS
                type: number
                minimum: 0
              indTot:
                description: >-
                  Indica se o vProd do item compõe o vProd/vNF do total da nota
                  (indTot do leiaute). Na NFC-e só aceita 1 (ausente = 1,
                  default do leiaute): o leiaute rejeita indTot=0 no modelo 65
                  (item que não participa do total)
                type: number
                const: 1
              icms:
                description: >-
                  Tributação de ICMS do item (obrigatório de fato só sem
                  resolverTributacao)
                type: object
                properties:
                  origem:
                    description: >-
                      Origem da mercadoria: 0=nacional, 1=estrangeira
                      (importação direta), 2=estrangeira (mercado interno).
                      Ausente = 0
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                  csosn:
                    description: >-
                      Código de Situação da Operação do Simples Nacional, ex.:
                      "102" tributada pelo Simples sem crédito, "400" não
                      tributada
                    type: string
                  cst:
                    description: >-
                      Código de Situação Tributária do ICMS (Lucro
                      Real/Presumido), ex.: "00" tributada integralmente. "61" é
                      a tributação monofásica de combustíveis cobrada
                      anteriormente (revenda de posto/GLP) e vale nos dois
                      regimes, inclusive Simples: exige o grupo combustivel e os
                      campos qBCMonoRet/adRemICMSRet/vICMSMonoRet
                    type: string
                  aliquota:
                    description: Alíquota do ICMS em % (só com cst, regime CST)
                    type: number
                  baseCalculo:
                    description: Base de cálculo do ICMS em R$ (só com cst, regime CST)
                    type: number
                  valor:
                    description: Valor do ICMS em R$ (só com cst, regime CST)
                    type: number
                  baseCalculoST:
                    description: >-
                      Base de cálculo do ICMS-ST em R$. NÃO SUPORTADO: informar
                      ST devolve 422 ICMS_ST_NAO_SUPORTADO
                    type: number
                  aliquotaST:
                    description: >-
                      Alíquota do ICMS-ST em %. NÃO SUPORTADO: ver baseCalculoST
                      (422 ICMS_ST_NAO_SUPORTADO)
                    type: number
                  valorST:
                    description: >-
                      Valor do ICMS-ST em R$. NÃO SUPORTADO: ver baseCalculoST
                      (422 ICMS_ST_NAO_SUPORTADO)
                    type: number
                  qBCMono:
                    description: >-
                      CST 02: NÃO SUPORTADO na NFC-e, porque o leiaute do modelo
                      65 não aceita CST 02 (rejeição 766). Emita CST 61
                      (revenda) ou use NF-e
                    type: number
                  adRemICMS:
                    description: 'CST 02: NÃO SUPORTADO na NFC-e (ver qBCMono)'
                    type: number
                  vICMSMono:
                    description: 'CST 02: NÃO SUPORTADO na NFC-e (ver qBCMono)'
                    type: number
                  qBCMonoRet:
                    description: >-
                      CST 61: quantidade tributada do ICMS monofásico retido
                      anteriormente, na unidade do produto (não em R$).
                      Obrigatória com cst "61" (a SEFAZ rejeita com 769)
                    type: number
                  adRemICMSRet:
                    description: >-
                      CST 61: alíquota AD REM do ICMS retido anteriormente, em
                      R$ por unidade (não é percentual)
                    type: number
                  vICMSMonoRet:
                    description: >-
                      CST 61: valor do ICMS monofásico retido anteriormente em
                      R$. Precisa bater com qBCMonoRet × adRemICMSRet
                      (tolerância de R$ 0,01); divergente devolve 422
                      ICMS_MONOFASICO_INVALIDO antes de emitir
                    type: number
                additionalProperties: false
              pis:
                description: Tributação de PIS do item
                type: object
                properties:
                  cst:
                    description: >-
                      Código de Situação Tributária do PIS. "01"/"02" por
                      alíquota (exige baseCalculo, aliquota e valor), "04"-"09"
                      não tributado, outras operações: "49"-"56", "60"-"67",
                      "70"-"75", "98" e "99". Ausente = "99" zerado
                    type: string
                  baseCalculo:
                    description: Base de cálculo do PIS em R$ (transmitida como vBC)
                    type: number
                  aliquota:
                    description: Alíquota do PIS em % (transmitida como pPIS)
                    type: number
                  valor:
                    description: >-
                      Valor do PIS em R$ (transmitido como vPIS e somado no
                      total)
                    type: number
                additionalProperties: false
              cofins:
                description: Tributação de COFINS do item
                type: object
                properties:
                  cst:
                    description: >-
                      Código de Situação Tributária da COFINS. Mesmas faixas do
                      PIS. Ausente = "99" zerado
                    type: string
                  baseCalculo:
                    description: Base de cálculo da COFINS em R$ (transmitida como vBC)
                    type: number
                  aliquota:
                    description: Alíquota da COFINS em % (transmitida como pCOFINS)
                    type: number
                  valor:
                    description: >-
                      Valor da COFINS em R$ (transmitido como vCOFINS e somado
                      no total)
                    type: number
                additionalProperties: false
              ipi:
                description: >-
                  IPI: NÃO SUPORTADO na NFC-e (o modelo 65 não tem o grupo no
                  leiaute). Aceito no contrato só para recusar com 422
                  IPI_NAO_SUPORTADO em vez de descartar em silêncio
                type: object
                properties:
                  cst:
                    description: CST do IPI. NÃO SUPORTADO na NFC-e (422 IPI_NAO_SUPORTADO)
                    type: string
                  baseCalculo:
                    description: NÃO SUPORTADO na NFC-e
                    type: number
                  aliquota:
                    description: NÃO SUPORTADO na NFC-e
                    type: number
                  valor:
                    description: NÃO SUPORTADO na NFC-e
                    type: number
                  cEnq:
                    description: NÃO SUPORTADO na NFC-e
                    type: string
                additionalProperties: false
              ibsCbs:
                description: >-
                  Grupo IBS/CBS da Reforma Tributária (opcional, NT 2025.002).
                  Aceita o grupo completo (passthrough) ou só { cClassTrib };
                  nesse caso o Cérebro Fiscal resolve os percentuais oficiais da
                  classe (requer resolverTributacao: true)
                anyOf:
                  - type: object
                    properties:
                      cst:
                        description: >-
                          Código de Situação Tributária do IBS/CBS (Reforma
                          Tributária). Ausente = "000"
                        type: string
                        pattern: ^\d{1,3}$
                      cClassTrib:
                        description: >-
                          Código de Classificação Tributária do IBS/CBS. Ausente
                          = "000001" (tributação integral)
                        type: string
                        pattern: ^\d{1,6}$
                      vBC:
                        description: >-
                          Base de cálculo do IBS/CBS em R$. Ausente = vProd −
                          desconto + valorFrete + valorSeguro + outrasDespesas
                          do item (LC 214/2025 art. 12 § 1º III soma
                          frete/seguro/outras despesas; art. 12 § 2º III:
                          descontos incondicionais não integram a base)
                        type: number
                        minimum: 0
                      ibsUf:
                        type: object
                        properties:
                          p:
                            type: number
                            minimum: 0
                            description: >-
                              Alíquota EFETIVA do componente, em % (ex.: 0.04).
                              É ela que gera o valor do tributo (v = p × vBC).
                              Em item COM redução, vai no documento dentro de
                              gRed/pAliqEfet
                          pNominal:
                            description: >-
                              Alíquota NOMINAL do componente, em % (ex.: 0.1). É
                              a alíquota cheia, antes da redução do cClassTrib,
                              e a que o documento grava em pIBSUF/pIBSMun/pCBS.
                              Obrigatória junto com pRedAliq; ausente = item sem
                              redução (nominal = efetiva)
                            type: number
                            minimum: 0
                          pRedAliq:
                            description: >-
                              Percentual de redução de alíquota do cClassTrib,
                              em % (ex.: 60 para o Anexo VII). Presente e maior
                              que 0 faz o documento emitir o grupo
                              gRed{pRedAliq, pAliqEfet}. Obrigatória junto com
                              pNominal
                            type: number
                            minimum: 0
                            maximum: 100
                          v:
                            description: >-
                              Valor do componente em R$. Ausente = calculado
                              como p × vBC
                            type: number
                            minimum: 0
                        required:
                          - p
                        additionalProperties: false
                        description: >-
                          Componente estadual do IBS (Imposto sobre Bens e
                          Serviços)
                      ibsMun:
                        type: object
                        properties:
                          p:
                            type: number
                            minimum: 0
                            description: >-
                              Alíquota EFETIVA do componente, em % (ex.: 0.04).
                              É ela que gera o valor do tributo (v = p × vBC).
                              Em item COM redução, vai no documento dentro de
                              gRed/pAliqEfet
                          pNominal:
                            description: >-
                              Alíquota NOMINAL do componente, em % (ex.: 0.1). É
                              a alíquota cheia, antes da redução do cClassTrib,
                              e a que o documento grava em pIBSUF/pIBSMun/pCBS.
                              Obrigatória junto com pRedAliq; ausente = item sem
                              redução (nominal = efetiva)
                            type: number
                            minimum: 0
                          pRedAliq:
                            description: >-
                              Percentual de redução de alíquota do cClassTrib,
                              em % (ex.: 60 para o Anexo VII). Presente e maior
                              que 0 faz o documento emitir o grupo
                              gRed{pRedAliq, pAliqEfet}. Obrigatória junto com
                              pNominal
                            type: number
                            minimum: 0
                            maximum: 100
                          v:
                            description: >-
                              Valor do componente em R$. Ausente = calculado
                              como p × vBC
                            type: number
                            minimum: 0
                        required:
                          - p
                        additionalProperties: false
                        description: Componente municipal do IBS
                      vIbs:
                        description: >-
                          Valor total do IBS em R$ (UF + Município). Ausente =
                          vIbsUf + vIbsMun
                        type: number
                        minimum: 0
                      cbs:
                        type: object
                        properties:
                          p:
                            type: number
                            minimum: 0
                            description: >-
                              Alíquota EFETIVA do componente, em % (ex.: 0.04).
                              É ela que gera o valor do tributo (v = p × vBC).
                              Em item COM redução, vai no documento dentro de
                              gRed/pAliqEfet
                          pNominal:
                            description: >-
                              Alíquota NOMINAL do componente, em % (ex.: 0.1). É
                              a alíquota cheia, antes da redução do cClassTrib,
                              e a que o documento grava em pIBSUF/pIBSMun/pCBS.
                              Obrigatória junto com pRedAliq; ausente = item sem
                              redução (nominal = efetiva)
                            type: number
                            minimum: 0
                          pRedAliq:
                            description: >-
                              Percentual de redução de alíquota do cClassTrib,
                              em % (ex.: 60 para o Anexo VII). Presente e maior
                              que 0 faz o documento emitir o grupo
                              gRed{pRedAliq, pAliqEfet}. Obrigatória junto com
                              pNominal
                            type: number
                            minimum: 0
                            maximum: 100
                          v:
                            description: >-
                              Valor do componente em R$. Ausente = calculado
                              como p × vBC
                            type: number
                            minimum: 0
                        required:
                          - p
                        additionalProperties: false
                        description: >-
                          CBS (Contribuição sobre Bens e Serviços, componente
                          federal)
                    required:
                      - ibsUf
                      - ibsMun
                      - cbs
                    additionalProperties: false
                  - type: object
                    properties:
                      cClassTrib:
                        type: string
                        pattern: ^\d{1,6}$
                        description: >-
                          Classe de tributação IBS/CBS a estampar no item. O
                          motor busca os percentuais oficiais dela para o NCM e
                          recusa (422) se a classe não valer para este NCM ou
                          para o modelo do documento. Requer resolverTributacao:
                          true. Neste formato NENHUM outro campo do grupo é
                          aceito; inclusive vBC, que hoje é sempre o vProd do
                          item
                    required:
                      - cClassTrib
                    additionalProperties: false
              combustivel:
                description: >-
                  Grupo de combustíveis do leiaute (comb/LA). Obrigatório junto
                  com a tributação monofásica (icms.cst "61"): sem o código ANP
                  a SEFAZ rejeita o CST monofásico. Passthrough: o motor não
                  calcula nada aqui
                type: object
                properties:
                  cProdANP:
                    type: string
                    pattern: ^\d{9}$
                    description: >-
                      Código do produto na tabela SIMP da ANP, 9 dígitos (ex.:
                      "210203001" para GLP). Código inexistente na tabela da ANP
                      é rejeitado pela SEFAZ (cStat 761)
                  descANP:
                    type: string
                    minLength: 2
                    maxLength: 95
                    description: >-
                      Descrição do produto conforme a ANP (tabela SIMP), 2 a 95
                      caracteres (ex.: "GLP")
                  ufConsumo:
                    type: string
                    minLength: 2
                    maxLength: 2
                    description: >-
                      Sigla da UF de consumo do combustível (campo UFCons do
                      leiaute, obrigatório). Use "EX" para exterior
                  pGLP:
                    description: >-
                      Percentual do GLP derivado de petróleo no produto, 0 a
                      100. SÓ para cProdANP "210203001" (GLP); em outro produto
                      a emissão é recusada com 422 COMBUSTIVEL_INVALIDO (a SEFAZ
                      rejeitaria com cStat 461)
                    type: number
                    minimum: 0
                    maximum: 100
                  pGNn:
                    description: >-
                      Percentual de gás natural NACIONAL (GLGNn) no produto GLP,
                      0 a 100. Mesma restrição de pGLP
                    type: number
                    minimum: 0
                    maximum: 100
                  pGNi:
                    description: >-
                      Percentual de gás natural IMPORTADO (GLGNi) no produto
                      GLP, 0 a 100. Mesma restrição de pGLP. Regra da SEFAZ:
                      pGLP + pGNn + pGNi = 100 (cStat 855)
                    type: number
                    minimum: 0
                    maximum: 100
                  vPart:
                    description: >-
                      Valor de partida em R$ por quilograma, SEM ICMS.
                      Obrigatório para GLP (cStat 856) e aceito apenas nele
                    type: number
                    minimum: 0
                required:
                  - cProdANP
                  - descANP
                  - ufConsumo
                additionalProperties: false
            required:
              - codigo
              - descricao
              - ncm
              - cfop
              - unidade
              - quantidade
              - valorUnitario
            additionalProperties: false
          description: Itens da nota (mínimo 1)
        pagamentos:
          minItems: 1
          maxItems: 100
          type: array
          items:
            type: object
            properties:
              forma:
                type: string
                enum:
                  - '10'
                  - '11'
                  - '12'
                  - '13'
                  - '14'
                  - '15'
                  - '16'
                  - '17'
                  - '18'
                  - '19'
                  - '20'
                  - '21'
                  - '22'
                  - '90'
                  - '98'
                  - '99'
                  - '01'
                  - '02'
                  - '03'
                  - '04'
                  - '05'
                description: >-
                  Código da forma de pagamento SEFAZ (ex.: "01" dinheiro, "03"
                  cartão de crédito, "15" boleto)
              valor:
                type: number
                minimum: 0
                description: Valor pago nesta forma, em R$ (máximo 2 casas decimais)
            required:
              - forma
              - valor
            additionalProperties: false
          description: >-
            Formas de pagamento (mínimo 1, máximo 100). Atenção: o campo é
            "pagamentos" (array), não "pagamento"
        troco:
          description: >-
            Valor do troco em R$, para venda com pagamento em dinheiro (máximo 2
            casas decimais)
          type: number
          minimum: 0
        cobranca:
          description: >-
            NÃO SUPORTADO na NFC-e: devolve 422 COBRANCA_NAO_SUPORTADA_NFCE.
            NFC-e documenta venda com pagamento imediato ao consumidor final;
            use NF-e (modelo 55) para venda a prazo
          type: object
          properties:
            fatura:
              description: >-
                Dados da fatura (grupo fat). Se enviado, os 4 campos são
                obrigatórios
              type: object
              properties:
                numero:
                  type: string
                  minLength: 1
                  maxLength: 60
                  description: Número da fatura (nFat do leiaute), 1 a 60 caracteres
                valorOriginal:
                  type: number
                  minimum: 0
                  description: Valor original da fatura em R$ (vOrig)
                valorDesconto:
                  type: number
                  minimum: 0
                  description: >-
                    Valor do desconto da fatura em R$ (vDesc). Não pode ser
                    maior que valorOriginal
                valorLiquido:
                  type: number
                  minimum: 0
                  description: >-
                    Valor líquido da fatura em R$ (vLiq). Precisa ser igual a
                    valorOriginal − valorDesconto, e igual à soma de
                    duplicatas[].valor quando houver duplicatas (regras do grupo
                    Y do leiaute, MOC Anexo I)
              required:
                - numero
                - valorOriginal
                - valorDesconto
                - valorLiquido
              additionalProperties: false
            duplicatas:
              description: >-
                Duplicatas do parcelamento (grupo dup, até 120). Pode vir sem
                `fatura`. numero é tudo-ou-nada: se UMA duplicata tem numero,
                todas precisam ter
              maxItems: 120
              type: array
              items:
                type: object
                properties:
                  numero:
                    description: >-
                      Número da duplicata (nDup do leiaute), 1 a 60 caracteres.
                      Ausente = a engineAPI preenche sequencial (001, 002...): o
                      documento sempre leva um nDup, nunca vazio
                    type: string
                    minLength: 1
                    maxLength: 60
                  vencimento:
                    type: string
                    pattern: ^\d{4}-\d{2}-\d{2}$
                    description: >-
                      Data de vencimento da duplicata, formato AAAA-MM-DD (dVenc
                      do leiaute). Precisa ser >= à data de emissão e
                      não-decrescente entre as parcelas (regras do grupo Y do
                      leiaute, MOC Anexo I)
                  valor:
                    type: number
                    minimum: 0.01
                    description: Valor da duplicata em R$ (vDup do leiaute)
                required:
                  - vencimento
                  - valor
                additionalProperties: false
          additionalProperties: false
        informacoesComplementares:
          description: >-
            Informações complementares de interesse do contribuinte, impressas
            no cupom
          type: string
        resolverTributacao:
          description: >-
            Ativa a emissão assistida (Cérebro Fiscal): resolve CSOSN e o grupo
            IBS/CBS de itens sem tributação manual. Requer plano com fiscalBrain
            + Issuer.fiscalBrainEnabled
          type: boolean
      required:
        - items
        - pagamentos

````