openapi: 3.0.0
info:
  title: Segregação de taxas
  description: >-
    A funcionalidade de Segregação de taxas por API foi concebida para
    complementar o módulo de Segregação de taxas, que atualmente trata
    segregações por tela e por arquivo (carga em lote), para atender a nova
    demanda dos gestores para facilitar e agilizar o processo de gestão da
    segregação de taxas. Para isto, a funcionalidade permitirá realizar o
    cadastro, a consulta e a alteração de uma segregação de taxas utilizando uma
    API.
  version: '1.0'
  contact: {}
tags: []
servers:
  - url: https://api-hubanbima.rtm.net.br/anbima-eda-proxy-router/api
    description: Produção - Ambiente com os dados oficiais.
  - url: https://api-cert-mercado-hubanbima.rtm.net.br/anbima-eda-proxy-router/api
    description: Homologação - Espelho de produção para testes.
security:
  - BearerAuth: []
paths:
  /v1/segregacao-taxas/solicitacoes:
    post:
      operationId: SegregationApiExternaController_create
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SegregationRequestDto'
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request - Erro de validação nos campos enviados
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: number
                    example: 400
                  message:
                    type: array
                    items:
                      type: string
                    example:
                      - 'cnpjGestor: Campo obrigatório'
                      - >-
                        taxaGlobal.valorTaxaGlobal: Valor deve conter no máximo
                        10 inteiros e 4 decimais
                      - >-
                        acordosComerciais: A segregação contida no payload deve
                        ter ao menos 1 acordo comercial associado
                  error:
                    type: string
                    example: BAD_REQUEST
        '401':
          description: Unauthorized - Token de acesso ausente ou inválido
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: number
                    example: 401
                  message:
                    type: string
                    example: Token de acesso ausente ou inválido
                  error:
                    type: string
                    example: UNAUTHORIZED
        '403':
          description: Forbidden - Usuário sem permissão
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: number
                    example: 403
                  message:
                    type: string
                    example: Usuário sem permissão de acesso
                  error:
                    type: string
                    example: FORBIDDEN
        '429':
          description: Too Many Requests - Limite excedido
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: number
                    example: 429
                  message:
                    type: string
                    example: Limite de 10 payloads por segundo excedido
                  error:
                    type: string
                    example: TOO_MANY_REQUESTS
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: number
                    example: 500
                  message:
                    type: string
                    example: Instabilidade de conexão ou indisponibilidade da API
                  error:
                    type: string
                    example: INTERNAL_SERVER_ERROR
      tags:
        - v1/segregacao-taxas
    get:
      operationId: SegregationApiExternaController_buscarSolicitacoes
      parameters:
        - name: page
          required: false
          in: query
          description: Número da página
          schema:
            minimum: 1
            default: 1
            example: 1
            type: number
        - name: limit
          required: false
          in: query
          description: Quantidade de registros por página
          schema:
            minimum: 1
            maximum: 100
            default: 20
            example: 20
            type: number
        - name: dataInicioAtualizacao
          required: false
          in: query
          description: >-
            Data inicial de atualização (Obrigatória se dataFimAtualizacao for
            preenchida)
          schema:
            format: date
            pattern: /^\d{4}-\d{2}-\d{2}$/
            example: '2026-01-01'
            type: string
        - name: dataFimAtualizacao
          required: false
          in: query
          description: >-
            Data final de atualização (Obrigatória se dataInicioAtualizacao for
            preenchida)
          schema:
            format: date
            pattern: /^\d{4}-\d{2}-\d{2}$/
            example: '2026-01-15'
            type: string
        - name: numeroSolicitacao
          required: false
          in: query
          description: Número da solicitação
          schema:
            maxLength: 10
            type: string
        - name: numeroLote
          required: false
          in: query
          description: Número do lote (para segregações por arquivo)
          schema:
            maxLength: 10
            type: string
        - name: cnpjClasse
          required: false
          in: query
          description: CNPJ da classe (14 dígitos)
          schema:
            minLength: 14
            maxLength: 14
            example: '00000000000000'
            type: string
        - name: codigoCvmSubClasse
          required: false
          in: query
          description: Código CVM da subclasse
          schema:
            minLength: 3
            maxLength: 15
            type: string
        - name: cnpjGestor
          required: false
          in: query
          description: CNPJ do gestor (14 dígitos)
          schema:
            minLength: 14
            maxLength: 14
            example: '00000000000000'
            type: string
        - name: cnpjAdministrador
          required: false
          in: query
          description: CNPJ do administrador (14 dígitos)
          schema:
            minLength: 14
            maxLength: 14
            example: '00000000000000'
            type: string
        - name: statusSolicitacao
          required: false
          in: query
          description: Status da solicitação
          schema:
            enum:
              - ATIVO
              - INATIVO
              - CANCELADO
              - RASCUNHO
              - REJEITADO
              - PENDENTE
            type: string
      responses:
        '200':
          description: Status OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RequestSegregationsResponseDto'
        '400':
          description: Bad Request - Erro nos parâmetros de consulta
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: number
                    example: 400
                  message:
                    type: array
                    items:
                      type: string
                    example:
                      - 'page: deve ser um número inteiro'
                      - 'limit: deve ser um número inteiro'
                  error:
                    type: string
                    example: BAD_REQUEST
        '401':
          description: Unauthorized - Token de autenticação inválido ou expirado
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: number
                    example: 401
                  message:
                    type: string
                    example: Token de autenticação inválido ou expirado
                  error:
                    type: string
                    example: UNAUTHORIZED
        '403':
          description: Forbidden - Usuário sem permissão de acesso
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: number
                    example: 403
                  message:
                    type: string
                    example: Usuário sem permissão de acesso
                  error:
                    type: string
                    example: FORBIDDEN
        '500':
          description: Internal Server Error - Instabilidade ou indisponibilidade da API
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: number
                    example: 500
                  message:
                    type: string
                    example: Instabilidade ou indisponibilidade da API
                  error:
                    type: string
                    example: INTERNAL_SERVER_ERROR
      tags:
        - v1/segregacao-taxas
  /v1/segregacao-taxas/solicitacoes/{numeroSolicitacao}:
    get:
      operationId: SegregationApiExternaController_buscarSolicitacao
      parameters:
        - name: numeroSolicitacao
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Status OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestSegregationDto'
        '204':
          description: No Content - Solicitação informada não existe
        '400':
          description: Bad Request - Status inválido ou erro de parâmetro
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: number
                    example: 400
                  message:
                    type: string
                    example: Status deve ser Ativo, Inativo ou Cancelado.
                  error:
                    type: string
                    example: BAD_REQUEST
        '401':
          description: Unauthorized - Token de autenticação inválido ou expirado
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: number
                    example: 401
                  message:
                    type: string
                    example: Token de autenticação inválido ou expirado
                  error:
                    type: string
                    example: UNAUTHORIZED
        '403':
          description: Forbidden - Usuário sem permissão de acesso
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: number
                    example: 403
                  message:
                    type: string
                    example: Usuário sem permissão de acesso
                  error:
                    type: string
                    example: FORBIDDEN
        '500':
          description: Internal Server Error - Instabilidade ou indisponibilidade da API
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: number
                    example: 500
                  message:
                    type: string
                    example: Instabilidade ou indisponibilidade da API
                  error:
                    type: string
                    example: INTERNAL_SERVER_ERROR
      tags:
        - v1/segregacao-taxas
  /v1/segregacao-taxas/solicitacoes/{numeroSolicitacao}/status:
    get:
      operationId: SegregationApiExternaController_verificarStatusSolicitação
      parameters:
        - name: numeroSolicitacao
          required: true
          in: path
          schema:
            type: string
      responses:
        '200':
          description: Status OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestStatusDto'
        '204':
          description: No Content - Solicitação informada não existe
        '400':
          description: Bad Request - Erro de validação no parâmetro da rota
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: number
                    example: 400
                  message:
                    type: string
                    example: 'numeroSolicitacao: Formato inválido'
                  error:
                    type: string
                    example: BAD_REQUEST
        '401':
          description: Unauthorized - Token de autenticação inválido ou expirado
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: number
                    example: 401
                  message:
                    type: string
                    example: Token de autenticação inválido ou expirado
                  error:
                    type: string
                    example: UNAUTHORIZED
        '403':
          description: Forbidden - Usuário sem permissão de acesso
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: number
                    example: 403
                  message:
                    type: string
                    example: Usuário sem permissão de acesso
                  error:
                    type: string
                    example: FORBIDDEN
        '500':
          description: Internal Server Error - Instabilidade ou indisponibilidade da API
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: number
                    example: 500
                  message:
                    type: string
                    example: Instabilidade ou indisponibilidade da API
                  error:
                    type: string
                    example: INTERNAL_SERVER_ERROR
      tags:
        - v1/segregacao-taxas
components:
  securitySchemes:
    BearerAuth:
      scheme: bearer
      bearerFormat: JWT
      type: http
      description: Insira apenas o token JWT (sem a palavra 'Bearer')
  schemas:
    ScalatedFeeDto:
      type: object
      properties:
        inicial:
          type: number
          example: 10.05
          maximum: 9999999999999.99
        final:
          type: number
          example: 10.05
          maximum: 9999999999999.99
        unidadeTaxa:
          type: string
          enum:
            - VALOR
            - PERCENTUAL
            - PORCENTAGEM_ACRESCIDO
            - MAIOR_VALOR_ENTRE_PORCENTAGEM_E_VALOR
            - OUTROS
          example: VALOR
        taxa:
          type: number
          example: 10.05
          maximum: 9999999999.999999
        faixaEfetiva:
          type: boolean
          example: false
    SegregationGlobalFeeDto:
      type: object
      properties:
        cobraTaxaGlobal:
          type: string
          enum:
            - SIM
            - NAO
          example: SIM
        taxaComposicaoGlobal:
          type: array
          example:
            - ADMINISTRACAO
            - GESTAO
          items:
            type: string
            enum:
              - ADMINISTRACAO
              - GESTAO
              - DISTRIBUICAO
              - ESTRUTURACAO_PREVIDENCIA
        estruturacaoPrevidenciaCompoeTaxaGlobal:
          type: string
          enum:
            - SIM
            - NAO
          example: SIM
        perfilTaxaGlobal:
          type: string
          example: ESCALONADA_PL_FUNDO
          enum:
            - FIXA
            - ESCALONADA_PL_FUNDO
        unidadeTaxaGlobal:
          type: string
          enum:
            - VALOR
            - PERCENTUAL
            - PORCENTAGEM_ACRESCIDO
            - MAIOR_VALOR_ENTRE_PORCENTAGEM_E_VALOR
            - OUTROS
          example: VALOR
        valorTaxaGlobal:
          type: number
          example: 10.05
          maximum: 9999999999.999999
        valorPisoTaxaGlobal:
          type: number
          example: 10.05
          maximum: 9999999999.99
        valorFixoTaxaGlobal:
          type: number
          example: 10.05
          maximum: 9999999999.99
        informacoesAdicionaisTaxaGlobal:
          type: string
          example: Informações adicionais da taxa global
          maxLength: 150
        taxasEscalonadas:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/ScalatedFeeDto'
    ReferenceIndexDto:
      type: object
      properties:
        inicial:
          type: object
          example: 10.05
          maximum: 9999999999999.99
        final:
          type: number
          example: 10.05
          maximum: 9999999999999.99
        percentual:
          type: number
          example: 10.05
          maximum: 100
        percentualIndiceReferencia:
          type: number
          example: 10.05
          maximum: 99999.999999
        indice:
          type: string
          enum:
            - CDI
            - DOLAR_PTAX
            - EURO
            - FTSE_100
            - BDRX
            - IBOVESPA
            - IBOVESPA_FECHAMENTO
            - IBOVESPA_MEDIO
            - IBRA
            - IBRX
            - IBRX_100
            - IBRX_50
            - ICO2
            - ICON
            - IDA_DI
            - IDA_IPCA
            - IDIV_DIVIDENDOS
            - IDKA_PRE_1A
            - IDKA_PRE_2A
            - IDKA_PRE_3A
            - IDKA_PRE_3M
            - IDKA_PRE_5A
            - IDKA_IPCA_15A
            - IDKA_IPCA_20A
            - IDKA_IPCA_10A
            - IDKA_IPCA_2A
            - IDKA_IPCA_30A
            - IDKA_IPCA_3A
            - IDKA_IPCA_5A
            - IEE_ENERGIA
            - IFIX
            - IFMM
            - IFNC
            - IGC
            - IGC_NM
            - IGCT
            - IGP_DI
            - IGP_M
            - IHFA
            - IMA_GERAL
            - IMA_GERAL_EX_C
            - IMA_S
            - IMA_B
            - IMA_B5
            - IMA_B5_MAIS
            - IMAT
            - IMOB_IMOBILIARIO
            - INCC
            - INDX
            - INPC
            - IPCA
            - IRF_M
            - IRF_M1
            - IRF_M1_MAIS
            - ISE
            - ITAG
            - IVBX_2
            - MLCX
            - SMLL_SMALL_CAP
            - NAO_SE_APLICA
            - OUTROS
            - S_P_500
            - TAXA_SELIC
          example: CDI
        taxaFixa:
          type: number
          example: 10.05
          maximum: 999.99
    SegregationPerformaceFeeDto:
      type: object
      properties:
        cobraTaxaPerformance:
          type: string
          enum:
            - SIM
            - NAO
          example: SIM
        perfilTaxaPerformance:
          type: string
          enum:
            - FIXA
            - ESCALONADA_PL_FUNDO
          example: ESCALONADA_PL_FUNDO
        periodicidadeTaxaPerformance:
          type: string
          enum:
            - MENSAL
            - BIMESTRAL
            - TRIMESTRAL
            - SEMESTRAL
            - ANUAL
          example: MENSAL
        informacoesAdicionaisTaxaPerformance:
          type: string
          example: Informações adicionais da taxa performance
          maxLength: 150
        indicesTaxaPerformance:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/ReferenceIndexDto'
      required:
        - cobraTaxaPerformance
    SegregationManagementFeeDto:
      type: object
      properties:
        cobraTaxaAdministracao:
          type: string
          example: SIM
          enum:
            - SIM
            - NAO
        perfilTaxaAdministracao:
          type: string
          example: ESCALONADA_PL_FUNDO
          enum:
            - FIXA
            - ESCALONADA_PL_FUNDO
            - ESCALONADA_VOLUME_ADMINISTRACAO
            - ESCALONADA_OUTROS
        unidadeTaxaAdministracao:
          type: string
          example: VALOR
          enum:
            - VALOR
            - PERCENTUAL
            - PORCENTAGEM_ACRESCIDO
            - MAIOR_VALOR_ENTRE_PORCENTAGEM_E_VALOR
            - OUTROS
        valorTaxaAdministracao:
          type: number
          example: 10.05
          maximum: 9999999999.999999
        valorFixoTaxaAdministracao:
          type: number
          example: 10.05
          maximum: 9999999999.99
        valorPisoTaxaAdministracao:
          type: number
          example: 10.05
          maximum: 9999999999.99
        informacoesAdicionaisTaxaAdministracao:
          type: string
          example: Informações adicionais da taxa adiministração
          maxLength: 150
        descricaoFaixaRemuneracaoAdministracao:
          type: string
          example: Descrição faixa remuneração da taxa adiministração
          maxLength: 350
        taxasEscalonadas:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/ScalatedFeeDto'
      required:
        - cobraTaxaAdministracao
    FundEstruturadoresDto:
      type: object
      properties:
        cnpjEstruturador:
          type: string
          example: '00000000000000'
          minLength: 14
          maxLength: 14
        nomeEstruturador:
          type: string
          example: Nome do estruturador
          maxLength: 150
    SegregationPensionStructuringDto:
      type: object
      properties:
        cobraTaxaEstruturacaoPrevidencia:
          type: string
          enum:
            - SIM
            - NAO
          example: SIM
        perfilTaxaEstruturacaoPrevidencia:
          type: string
          example: ESCALONADA_PL_FUNDO
          enum:
            - FIXA
            - ESCALONADA_PL_FUNDO
            - ESCALONADA_VOLUME_ESTRUTURACAO
            - ESCALONADA_OUTROS
        unidadeTaxaEstruturacaoPrevidencia:
          type: string
          enum:
            - VALOR
            - PERCENTUAL
            - PORCENTAGEM_ACRESCIDO
            - MAIOR_VALOR_ENTRE_PORCENTAGEM_E_VALOR
            - OUTROS
          example: VALOR
        valorTaxaEstruturacaoPrevidencia:
          type: number
          example: 10.05
          maximum: 9999999999.999999
        valorPisoTaxaEstruturacaoPrevidencia:
          type: number
          example: 10.05
          maximum: 9999999999.99
        valorFixoTaxaEstruturacaoPrevidencia:
          type: number
          example: 10.05
          maximum: 9999999999.99
        informacoesAdicionaisTaxaEstruturacaoPrevidencia:
          type: string
          example: Informações adicionais da taxa estruturacao de previdencia
          maxLength: 150
        descricaoFaixaRemuneracaoEstruturacaoPrevidencia:
          type: string
          example: Descrição faixa remuneração da taxa estruturação de previdencia
          maxLength: 350
        estruturadorRecebeParcelaTaxaPerformance:
          type: string
          enum:
            - SIM
            - NAO
          example: SIM
        parcelaTaxaPerformanceEstruturador:
          type: number
          example: 50
          maximum: 100
        parcelaTaxaPerformanceGestor:
          type: number
          example: 50
          maximum: 100
        taxasEscalonadas:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/ScalatedFeeDto'
        listaEstruturadores:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/FundEstruturadoresDto'
      required:
        - cobraTaxaEstruturacaoPrevidencia
    FundCoGestorDto:
      type: object
      properties:
        cnpjCoGestor:
          type: string
          example: '00000000000000'
          minLength: 14
          maxLength: 14
        nomeCoGestor:
          type: string
          example: Nome do co-gestor
          maxLength: 150
    FundDistributorDto:
      type: object
      properties:
        cnpjDistribuidor:
          type: string
          example: '00000000000000'
          minLength: 14
          maxLength: 14
        nomeDistribuidor:
          type: string
          example: Nome do distribuidor
          maxLength: 150
    SegregationCommercialAgreementDto:
      type: object
      properties:
        nomeAcordoComercial:
          type: string
          example: Acordo Comercial
          maxLength: 200
        cobraTaxaGestao:
          type: string
          enum:
            - SIM
            - NAO
          example: SIM
        perfilTaxaGestao:
          type: string
          enum:
            - FIXA
            - ESCALONADA_PL_FUNDO
            - ESCALONADA_VOLUME_DISTRIBUICAO
            - ESCALONADA_OUTROS
          example: ESCALONADA_PL_FUNDO
        unidadeTaxaGestao:
          type: string
          enum:
            - VALOR
            - PERCENTUAL
            - PORCENTAGEM_ACRESCIDO
            - MAIOR_VALOR_ENTRE_PORCENTAGEM_E_VALOR
            - OUTROS
          example: PERCENTUAL
        valorTaxaGestao:
          type: number
          example: 10.05
          maximum: 9999999999.999999
        valorPisoTaxaGestao:
          type: number
          example: 10.05
          maximum: 9999999999.99
        valorFixoTaxaGestao:
          type: number
          example: 10.05
          maximum: 9999999999.99
        informacoesAdicionaisTaxaGestao:
          type: string
          example: Informações adicionais da taxa gestão
          maxLength: 150
        descricaoFaixaRemuneracaoGestao:
          type: string
          example: Descrição faixa remuneração da taxa gestão
          maxLength: 350
        taxaEscalonadaGestao:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/ScalatedFeeDto'
        cobraTaxaCoGestao:
          type: string
          enum:
            - SIM
            - NAO
          example: NAO
        perfilTaxaCoGestao:
          type: string
          enum:
            - FIXA
            - ESCALONADA_PL_FUNDO
            - ESCALONADA_VOLUME_DISTRIBUICAO
            - ESCALONADA_OUTROS
          example: ESCALONADA_PL_FUNDO
        unidadeTaxaCoGestao:
          type: string
          enum:
            - VALOR
            - PERCENTUAL
            - PORCENTAGEM_ACRESCIDO
            - MAIOR_VALOR_ENTRE_PORCENTAGEM_E_VALOR
            - OUTROS
          example: VALOR
        valorTaxaCoGestao:
          type: number
          example: 10.05
          maximum: 9999999999.999999
        valorPisoTaxaCoGestao:
          type: number
          example: 10.05
          maximum: 9999999999.99
        valorFixoTaxaCoGestao:
          type: number
          example: 10.05
          maximum: 9999999999.99
        informacoesAdicionaisTaxaCoGestao:
          type: string
          example: Informações adicionais da taxa co-gestão
          maxLength: 150
        descricaoFaixaRemuneracaoCoGestao:
          type: string
          example: Descrição faixa remuneração da taxa co-gestão
          maxLength: 350
        taxaEscalonadaCoGestao:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/ScalatedFeeDto'
        listaCoGestor:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/FundCoGestorDto'
        cobraTaxaDistribuicao:
          type: string
          enum:
            - SIM
            - NAO
          example: NAO
        perfilTaxaDistribuicao:
          type: string
          enum:
            - FIXA
            - ESCALONADA_PL_FUNDO
            - ESCALONADA_VOLUME_DISTRIBUICAO
            - ESCALONADA_OUTROS
          example: ESCALONADA_PL_FUNDO
        unidadeTaxaDistribuicao:
          type: string
          enum:
            - VALOR
            - PERCENTUAL
            - PORCENTAGEM_ACRESCIDO
            - MAIOR_VALOR_ENTRE_PORCENTAGEM_E_VALOR
            - OUTROS
          example: VALOR
        valorTaxaDistribuicao:
          type: number
          example: 10.05
          maximum: 9999999999.999999
        valorPisoTaxaDistribuicao:
          type: number
          example: 10.05
          maximum: 9999999999.99
        valorFixoTaxaDistribuicao:
          type: number
          example: 10.05
          maximum: 9999999999.99
        outrasReceitasEssenciaisTaxaDistribuicao:
          type: string
          example: Outras receitas
          maxLength: 350
        informacoesAdicionaisRemuneracaoTaxaDistribuicao:
          type: string
          example: Informações adicionais da taxa distribuição
          maxLength: 350
        descricaoFaixaRemuneracaoDistribuicao:
          type: string
          example: Descrição faixa remuneração da taxa distribuição
          maxLength: 350
        taxaEscalonadaDistribuicao:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/ScalatedFeeDto'
        listaDistribuidoresDistribuicao:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/FundDistributorDto'
        distribuidorRecebeParcelaTaxaPerformance:
          type: string
          enum:
            - SIM
            - NAO
          example: SIM
        valorParcelaTaxaPerformanceDistribuidor:
          type: number
          example: 50
          maximum: 100
        valorParcelaTaxaPerformanceGestor:
          type: number
          example: 50
          maximum: 100
        valorRemuneracaoTaxaPerformanceDistribuidor:
          type: number
          example: 10.05
          maximum: 100
        valorRemuneracaoTaxaPerformanceGestor:
          type: number
          example: 10.05
          maximum: 100
      required:
        - cobraTaxaGestao
        - cobraTaxaCoGestao
        - cobraTaxaDistribuicao
        - distribuidorRecebeParcelaTaxaPerformance
    SegregationRequestDto:
      type: object
      properties:
        cnpjFundo:
          type: string
          example: '00000000000000'
          minLength: 14
          maxLength: 14
        nomeComercialFundo:
          type: string
          example: Nome Comercial do Fundo
          maxLength: 200
        cnpjAdministrador:
          type: string
          example: '00000000000000'
          minLength: 14
          maxLength: 14
        cnpjGestor:
          type: string
          example: '00000000000000'
          minLength: 14
          maxLength: 14
        cnpjClasse:
          type: string
          example: '00000000000000'
          minLength: 14
          maxLength: 14
        nomeComercialClasse:
          type: string
          example: Nome Comercial da Classe
          maxLength: 200
        taxaNaSubClasse:
          type: string
          enum:
            - SIM
            - NAO
          example: SIM
        codigoCvmSubClasse:
          type: string
          example: '800'
          maxLength: 15
        nomeComercialSubClasse:
          type: string
          example: Nome Comercial da SubClasse
          maxLength: 200
        taxaGlobal:
          allOf:
            - $ref: '#/components/schemas/SegregationGlobalFeeDto'
        taxaPerformance:
          allOf:
            - $ref: '#/components/schemas/SegregationPerformaceFeeDto'
        taxaAdministracao:
          allOf:
            - $ref: '#/components/schemas/SegregationManagementFeeDto'
        taxaEstruturacaoPrevidencia:
          allOf:
            - $ref: '#/components/schemas/SegregationPensionStructuringDto'
        acordosComerciais:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/SegregationCommercialAgreementDto'
      required:
        - cnpjFundo
        - nomeComercialFundo
        - cnpjAdministrador
        - cnpjGestor
        - cnpjClasse
        - nomeComercialClasse
        - taxaNaSubClasse
        - taxaGlobal
        - taxaPerformance
        - taxaAdministracao
        - taxaEstruturacaoPrevidencia
        - acordosComerciais
    RequestSegregationDto:
      type: object
      properties:
        numeroSolicitacao:
          type: string
          example: '12345'
        dataAtualizacao:
          type: string
          example: '2026-01-09T10:30:00Z'
        status:
          type: string
          example: PENDENTE
        data:
          allOf:
            - $ref: '#/components/schemas/SegregationRequestDto'
    InconsistencyDetailDto:
      type: object
      properties:
        contexto:
          type: string
          example: informacoes
        campo:
          type: string
          example: cnpjGestor
        mensagem:
          type: array
          items:
            example:
              - >-
                CNPJ do gestor informado deve ser igual ao CNPJ do usuário
                logado
            type: array
            items:
              type: string
      required:
        - contexto
        - campo
        - mensagem
    RequestStatusDto:
      type: object
      properties:
        numeroSolicitacao:
          type: string
          example: '0000000001'
        numeroLote:
          type: string
          example: '0000000001'
        status:
          type: string
          example: REJEITADO
        dataAtualizacao:
          type: string
          example: '2026-01-09T10:30:00Z'
        inconsistencias:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/InconsistencyDetailDto'
      required:
        - numeroSolicitacao
        - numeroLote
        - status
        - dataAtualizacao
        - inconsistencias
    RequestSegregationItemDto:
      type: object
      properties:
        nomeAdministrador:
          type: string
          example: Nome do adiministrador
        cnpjAdministrador:
          type: string
          example: '00000000000000'
        cnpjClasse:
          type: string
          example: '00000000000000'
        cnpjFundo:
          type: string
          example: '00000000000000'
        cnpjGestor:
          type: string
          example: '00000000000000'
        codigoCvmSubClasse:
          type: string
          example: null
          nullable: true
        dataAtualizacao:
          type: string
          example: '2025-11-05T21:08:39.761Z'
        nomeComercialFundo:
          type: string
          example: Nome comercial do fundo
        nomeComercialClasse:
          type: string
          example: Nome comercial da classe
        nomeComercialSubClasse:
          type: string
          example: null
          nullable: true
        nomeGestor:
          type: string
          example: Nome do gestor
        numeroSolicitacao:
          type: string
          example: '0000000560'
        numeroLote:
          type: string
          example: '0000000011'
        status:
          type: string
          example: REJEITADO
        taxaNaSubClasse:
          type: string
          example: NAO
        origemCadastro:
          type: string
          example: API
      required:
        - nomeAdministrador
        - cnpjAdministrador
        - cnpjClasse
        - cnpjFundo
        - cnpjGestor
        - codigoCvmSubClasse
        - dataAtualizacao
        - nomeComercialFundo
        - nomeComercialClasse
        - nomeComercialSubClasse
        - nomeGestor
        - numeroSolicitacao
        - numeroLote
        - status
        - taxaNaSubClasse
        - origemCadastro
    PaginationDto:
      type: object
      properties:
        page:
          type: number
          example: 1
        limit:
          type: number
          example: 20
        totalRecords:
          type: number
          example: 150
        totalPages:
          type: number
          example: 8
        hasNext:
          type: boolean
          example: true
        hasPrevious:
          type: boolean
          example: false
      required:
        - page
        - limit
        - totalRecords
        - totalPages
        - hasNext
        - hasPrevious
    RequestSegregationsResponseDto:
      type: object
      properties:
        data:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/RequestSegregationItemDto'
        pagination:
          allOf:
            - $ref: '#/components/schemas/PaginationDto'
      required:
        - data
        - pagination