﻿openapi: 3.0.0
info:
  title: API Seguros - Open Finance Brasil
  description: |
    As APIs descritas neste documento são referentes a API de Seguros da fase OpenInsurance do Open Finance Brasil.
  version: 2.0.0-beta.2
  license:
    name: Apache 2.0
    url: 'https://www.apache.org/licenses/LICENSE-2.0'
  contact:
    name: Governança do Open Finance Brasil – Especificações
    email: gt-interfaces@openbankingbr.org
    url: 'https://openbanking-brasil.github.io/areadesenvolvedor/'
servers:
  - url: 'https://api.banco.com.br/open-banking/opendata-insurance/v2'
    description: Servidor de Produção
  - url: 'https://apih.banco.com.br/open-banking/opendata-insurance/v2'
    description: Servidor de Homologação
tags:
  - name: Seguros
    description: 'Operações para consulta de informações de seguros automotivos, residenciais e pessoais'
paths:
  /personals:
    get:
      tags:
        - Seguros
      summary: Conjunto de informações referentes a seguros pessoais de uma instituição
      operationId: getPersonalInsurance
      description: Método para obter a lista de todos os seguros pessoais de uma instituição
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/pageSize'
      responses:
        '200':
          $ref: '#/components/responses/OKResponsePersonalInsuranceList'
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '529':
          $ref: '#/components/responses/SiteIsOverloaded'
components:
  schemas:
    Participant:
      type: object
      description: Conjunto de informações relativas ao participante do produto de Open Finance
      required:
        - brand
        - name
        - cnpjNumber
      x-regulatory-required:
        - brand
        - name
        - cnpjNumber
      properties:
        brand:
          type: string
          description: 'Nome da marca reportada pelo participante do Open Finance. O conceito a que se refere a ''marca'' é em essência uma promessa da empresa em fornecer uma série específica de atributos, benefícios e serviços uniformes aos clientes.'
          minLength: 1
          maxLength: 80
          pattern: '^(?!\s)[\w\W\s]*[^\s]$'
          example: Organização
        name:
          type: string
          description: Nome do participante do Open Finance.
          minLength: 1
          maxLength: 80
          pattern: '^(?!\s)[\w\W\s]*[^\s]$'
          example: Organização A1
        cnpjNumber:
          $ref: '#/components/schemas/CnpjNumber'
        urlComplementaryList:
          type: string
          description: |
            Espera-se que valor de retorno, após acesso ao link 'urlComplementaryList', deve ser array de objeto com a estrutura abaixo:
            - 'name' com o valor contido no campo 'LegalEntityName' conforme cadastro no diretório;
            - 'cnpjNumber' com o valor contido no campo CNPJ ('RegistrationNumber') correspondente a esta instituição;
            - Ambos do tipo string;
            - Ambos obrigatórios. 
          minLength: 0
          maxLength: 1024
          pattern: '^((https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&\/\/=]*))$'
          example: 'https://empresaa1.com/companies'
      additionalProperties: false
    CnpjNumber:
      type: string
      description: 'O CNPJ corresponde ao número de inscrição no Cadastro de Pessoa Jurídica. Deve-se ter apenas os números do CNPJ, sem máscara.'
      minLength: 14
      maxLength: 14
      pattern: '^(\d{14})$'
      example: '13456789000112'
    CurrencyCode:
      type: string
      pattern: '^([A-Z]{3})$'
      minLength: 3
      maxLength: 3
      description: 'Moeda referente ao valor monetário, seguindo o modelo ISO-4217.'
      example: BRL
    InsurancePensionMinValue:
      type: object
      x-regulatory-required:
        - amount
        - currency
      description: 'Listagem do valor mínimo de cobertura (Capital Segurado), diária ou parcela aceito pela sociedade para cada combinação de modalidade/cobertura do produto.<br>Conforme moeda.'
      properties:
        amount:
          description: Campo sem descrição na API em OPIN.
          type: string
          minLength: 1
          maxLength: 21
          pattern: '^(\d{1,16}\.\d{2,4})$'
          example: '0.01'
        currency:
          $ref: '#/components/schemas/CurrencyCode'
      additionalProperties: false
    InsurancePensionMaxValue:
      type: object
      x-regulatory-required:
        - amount
        - currency
      description: 'Listagem do valor máximo de cobertura (Capital Segurado), diária ou parcela aceito pela sociedade para cada combinação de modalidade/cobertura do produto.<br>Conforme moeda.'
      properties:
        amount:
          description: Campo sem descrição na API em OPIN.
          type: string
          minLength: 1
          maxLength: 21
          pattern: '^(\d{1,16}\.\d{2,4})$'
          example: '0.01'
        currency:
          $ref: '#/components/schemas/CurrencyCode'
      additionalProperties: false
    TermsAndConditionsItem:
      type: object
      required:
        - susepProcessNumber
        - detail
      x-regulatory-required:
        - susepProcessNumber
        - detail
      properties:
        susepProcessNumber:
          type: string
          description: 'Sequência numérica utilizada para consulta dos processos eletrônicos na SUSEP, com caracteres especiais, conforme campo de consulta no site da SUSEP (XXXXX.XXXXXX/XXXX-XX)<br>Observação&#58; Mascaras da SUSEP – Serão permitidos todas as máscaras de Produtos. Limitar pelos códigos das Máscaras.'
          minLength: 2
          maxLength: 20
          pattern: '^(\d{5}\.\d{6}\/\d{4}-\d{2}$|^\d{2}\.\d{6}\/\d{2}-\d{2}$|^\d{3}-\d{5}\/\d{2}$|^\d{5}\.\d{6}\/\d{2}-\d{2})$'
          example: 15414.622222/2222-22
        detail:
          type: string
          description: 'Representam as Condições Gerais, Condições Especiais e Condições ou Cláusulas Particulares de um mesmo produto. (Circular SUSEP 321/06). Campo aberto (possibilidade de incluir URL)'
          minLength: 1
          maxLength: 1024
          pattern: '^(?!\s)[\w\W\s]*[^\s]$'
          example: 'https://openinsurance.com.br/aaa'
      additionalProperties: false
    EnumProductModality:
      type: string
      description: |
        - Funeral
        - Prestamista (exceto Habitacional e Rural)
        - Viagem
        - Educacional
        - Dotal (Misto e Puro)
        - Acidentes Pessoais
        - Vida
        - Perda do Certificado de Habilitação de Voo – PCHV
        - Doenças Graves ou Doença Terminal
        - Desemprego/ Perda de Renda
        - Eventos Aleatórios
        - Pecúlio
        - Pensão prazo certo
        - Pensão menores 21 anos
        - Pensão menores 24 anos
        - Pensão cônjuge vitalícia
        - Pensão cônjuge temporária
      enum:
        - FUNERAL
        - PRESTAMISTA
        - VIAGEM
        - EDUCACIONAL
        - DOTAL
        - ACIDENTES_PESSOAIS
        - VIDA
        - PERDA_CERTIFICADO_HABILITACAO_VOO
        - DOENCAS_GRAVES_DOENCA_TERMINAL
        - DESEMPREGO_PERDA_RENDA
        - EVENTOS_ALEATORIOS
        - PECULIO
        - PENSAO_PRAZO_CERTO
        - PENSAO_MENORES_21
        - PENSAO_MENORES_24
        - PENSAO_CONJUGE_VITALICIA
        - PENSAO_CONJUGE_TEMPORARIA
      example: FUNERAL
    EnumGracePeriodUnit:
      type: string
      description: |
        Informar o critério de carência para a cobertura
          - Dias 
          - Meses
      enum:
        - DIAS
        - MESES
      example: MESES
    InsurancePensionEnumPmbacRemuneration:
      type: object
      description: Somente informado se Regime Financeiro for igual a Capitalização.
      x-regulatory-required:
        - interestRate
        - updateIndexes
      properties:
        interestRate:
          type: string
          pattern: '^(\d{1}\.\d{6})$'
          description: Taxa de juros para capitalização da PMBaC
          minLength: 8
          maxLength: 9
          example: '0.019800'
        updateIndexes:
          type: array
          items:
            $ref: '#/components/schemas/EnumPersonalUpdateIndex'
      additionalProperties: false
    AgeAdjustment:
      description: Campo sem descrição na API em OPIN.
      type: object
      required:
        - frequency
      x-regulatory-required:
        - criterias
        - frequency
      properties:
        criterias:
          type: array
          minItems: 0
          maxItems: 2147483647
          items:
            type: string
            description: |
              Critério escolhido para reenquadramento etário
                1. Após período em anos
                2. A cada período em anos
                3. Por mudança de faixa etária
            example: APOS_PERIODO_ANOS
            enum:
              - APOS_PERIODO_ANOS
              - CADA_PERIODO_ANOS
              - MUDANCA_FAIXA_ETARIA
        frequency:
          type: integer
          description: 'Período em anos, caso critério de reenquadramento após ou a cada período em anos.'
          minimum: 0
          maximum: 2147483647
          example: 10
      additionalProperties: false
    InsurancePensionEnumFinancialRegime:
      type: string
      description: |
        Listagem de regime financeiro para cada combinação de modalidade/cobertura do produto indicando:
          1. Repartição simples
          2. Repartição Capitais Cobertura
          3. Capitalização
      example: REPARTICAO_SIMPLES
      enum:
        - REPARTICAO_SIMPLES
        - REPARTICAO_CAPITAIS
        - CAPITALIZACAO
    EnumInsurancePersonalBenefitRecalculationUpdateIndex:
      type: string
      description: |
        Índice utilizado na atualização do prêmio/contribuição e do capital segurado/ benefício, caso critério de atualização por meio de índice
      enum:
        - IPCA
        - IGP_M
        - INPC
      example: IPCA
    EnumPersonalUpdateIndex:
      type: string
      description: |
        Índice utilizado na atualização da PMBaC:
          1. IPC-FGV
          2. IGP-DI-FGV
          3. IPCA-IBGE
          4. IGPM-FGV
          5. INPC-IBGE
          6. TR
          7. OUTROS
      enum:
        - IPC-FGV
        - IGP-DI-FGV
        - IPCA-IBGE
        - IGPM-FGV
        - INPC-IBGE
        - TR
        - OUTROS
      example: IPC-FGV
    OpenDataMeta:
      type: object
      description: Meta informações referente à API requisitada.
      required:
        - totalRecords
        - totalPages
      properties:
        totalRecords:
          type: integer
          format: int32
          description: Número total de registros no resultado
          example: 1
        totalPages:
          type: integer
          format: int32
          description: Número total de páginas no resultado
          example: 1
      additionalProperties: false
    OKResponsePersonalInsuranceList:
      type: object
      required:
        - data
        - links
        - meta
      properties:
        data:
          description: Conjunto de informações referente ao produto Seguros Pessoais.
          type: array
          minItems: 1
          maxItems: 2147483647
          items:
            $ref: '#/components/schemas/PersonalInsuranceData'
        links:
          $ref: '#/components/schemas/Links'
        meta:
          $ref: '#/components/schemas/OpenDataMeta'
      additionalProperties: false
    PersonalInsuranceData:
      type: object
      required:
        - participant
        - society
      properties:
        participant:
          $ref: '#/components/schemas/Participant'
        society:
          $ref: '#/components/schemas/PersonalInsuranceSociety'
      additionalProperties: false
    PersonalCoverageItem:
      type: object
      x-regulatory-required:
        - type
        - typeAdditionalInfos
      properties:
        type:
          $ref: '#/components/schemas/EnumInsurancePersonalCoverageTypePersonal'
        typeAdditionalInfos:
          type: array
          minItems: 0
          maxItems: 2147483647
          description: |
            Lista de textos para complementar informação relativa ao campo type, quando for selecionada a opção 'OUTROS'.
            Restrição: Campo de preenchimento obrigatório se 'type' estiver preenchida a opção 'OUTROS'
          items:
            type: string
            maxLength: 100
          example: [Informações Adicionais]
        attributes:
          $ref: '#/components/schemas/PersonalCoverageItemAttributes'
      additionalProperties: false
    PersonalCoverageItemAttributes:
      description: Informações referente as características da cobertura do seguro.
      type: object
      required:
        - minValue
        - maxValue
        - indemnifiablePeriods
        - maximumQtyIndemnifiableInstallments
        - gracePeriod
        - deductibleDays
        - deductible
      x-regulatory-required:
        - indemnityPaymentMethods
        - indemnityPaymentFrequencies
        - indemnifiablePeriods
        - maximumQtyIndemnifiableInstallments
        - differentiatedGracePeriod
        - deductibleDays
        - differentiatedDeductibleDays
        - deductible
        - differentiatedDeductible
        - excludedRisks
        - excludedRisksURL
        - allowApartPurchase
      properties:
        indemnityPaymentMethods:
          description: Listagem da forma de pagamento da indenização para cada combinação de modalidade/cobertura do produto.
          type: array
          minItems: 0
          maxItems: 2147483647
          items:
            type: string
            enum:
              - PAGAMENTO_CAPITAL_SEGURADO_VALOR_MONETARIO
              - REEMBOLSO_DESPESAS
              - PRESTACAO_SERVICOS
            example: PAGAMENTO_CAPITAL_SEGURADO_VALOR_MONETARIO
        indemnityPaymentFrequencies:
          description: Listagem de tipos de frequência de pagamento de indenização para cada combinação de modalidade/cobertura do produto.
          type: array
          items:
            $ref: '#/components/schemas/EnumPersonalIndemnityPaymentFrequencyType'
        minValue:
          $ref: '#/components/schemas/InsurancePensionMinValue'
        maxValue:
          $ref: '#/components/schemas/InsurancePensionMaxValue'
        indemnifiablePeriods:
          description: Listagem de período indenizável para cada combinação de modalidade/cobertura do produto.
          type: array
          minItems: 0
          maxItems: 2147483647
          items:
            type: string
            enum:
              - QUANTIDADE_DETERMINADA_DE_PARCELAS
              - ATE_FIM_CICLO_DETERMINADO
            example: ATE_FIM_CICLO_DETERMINADO
        maximumQtyIndemnifiableInstallments:
          type: integer
          description: 'Caso o período indenizável seja relacionado a parcelas, listagem de número máximo de parcelas indenizáveis para cada combinação de modalidade/ cobertura do produto.'
          minimum: 0
          maximum: 2147483647
          example: 10
        gracePeriod:
          $ref: '#/components/schemas/PersonalInsuranceGracePeriod'
        differentiatedGracePeriod:
          type: string
          description: Campo aberto para detalhamento de período de carência diferenciado, se houver.
          minLength: 1
          maxLength: 500
          pattern: '^(?!\s)[\w\W\s]*[^\s]$'
          example: 90 DIAS
        deductibleDays:
          type: integer
          description: Listagem de franquia em dias para cada combinação de modalidade/cobertura do produto.
          minimum: 0
          maximum: 2147483647
          example: 10
        differentiatedDeductibleDays:
          type: integer
          description: 'Detalhamento da franquia em dias diferentes para cada cobertura que exista alguma especificidade. Caso a seguradora não tenha essa diferenciação, não retornará nada no campo.'
          minimum: 0
          maximum: 2147483647
          example: 15
        deductible:
          type: object
          x-regulatory-required:
            - amount
            - currency
          description: Listagem de franquia em reais para cada combinação de modalidade/cobertura do produto.
          properties:
            amount:
              description: Valor de dedução.
              type: string
              minLength: 1
              maxLength: 21
              pattern: '^(\d{1,16}\.\d{2,4})$'
              example: '0.01'
            currency:
              $ref: '#/components/schemas/CurrencyCode'
          additionalProperties: false
        differentiatedDeductible:
          type: object
          x-regulatory-required:
            - amount
            - currency
          description: 'Detalhamento da franquia em reais diferentes para cada cobertura que exista alguma especificidade.<br>Caso a seguradora não tenha essa diferenciação, não retornará nada no campo.'
          properties:
            amount:
              description: Campo sem descrição na API em OPIN.
              type: string
              minLength: 1
              maxLength: 21
              pattern: '^(\d{1,16}\.\d{2,4})$'
              example: '0.01'
            currency:
              $ref: '#/components/schemas/CurrencyCode'
          additionalProperties: false
        excludedRisks:
          type: array
          items:
            $ref: '#/components/schemas/EnumExcludedRisks'
        excludedRisksURL:
          type: string
          description: Campo aberto (possibilidade de incluir URL)
          minLength: 1
          maxLength: 1024
          pattern: '^(?!\s)[\w\W\s]*[^\s]$'
          example: 'https://openinsurance.com.br/aaa'
        allowApartPurchase:
          type: boolean
          description: |
            Indicar se a cobertura pode ser contratada isoladamente ou não:
              1. true
              2. false
          example: true
      additionalProperties: false
    EnumPersonalIndemnityPaymentFrequencyType:
      type: string
      description: ''
      enum:
        - INDENIZACAO_UNICA
        - DIARIA_OU_PARCELA
      example: INDENIZACAO_UNICA
    EnumExcludedRisks:
      type: string
      description: Listagem para indicar quais serão o(s) risco(s) excluído(s) aplicável(is) à(s) cobertura(s).
      enum:
        - ATO_RECONHECIMENTO_PERIGOSO
        - ATO_ILICITO_DOLOSO_PRATICADO_SEGURADO
        - OPERACOES_GUERRA
        - FURACOES_CICLONES_TERREMOTOS
        - MATERIAL_NUCLEAR
        - DOENCAS_LESOES_PREEXISTENTES
        - EPIDEMIAS_PANDEMIAS
        - SUICIDIO
        - ATO_ILICITO_DOLOSO_PRATICADO_CONTROLADOR
        - OUTROS
      example: ATO_RECONHECIMENTO_PERIGOSO
    EnumPersonalInsuranceOtherGuaranteedValues:
      type: string
      description: |
        1. Saldamento
        2. Benefício Prolongado
      enum:
        - SALDAMENTO
        - BENEFICIO_PROLONGADO
      example: SALDAMENTO
    EnumPersonalInsuranceIndemnityPaymentMethod:
      type: string
      description: |
        Modalidade de pagamento da indenização, a considerar os domínios abaixo:
          1. Único
          2. Sob a forma de renda
      enum:
        - UNICO
        - SOB_FORMA_RENDA
      example: UNICO
    EnumPersonalInsuranceIndemnityPaymentIncome:
      type: string
      description: |
        Tipo de renda ou pensão, caso modalidade de pagamento de indenização seja sob a forma de renda:
          1. Certa
          2. Temporária
          3. Temporária reversível
          4. Temporário com mínimo garantido
          5. Temporária reversível com mínimo garantido
          6. Vitalícia
          7. Vitalícia reversível
          8. Vitalícia com o mínimo garantido
          9. Vitalícia reversível como mínimo garantido
      enum:
        - CERTA
        - TEMPORARIA
        - TEMPORARIA_REVERSIVEL
        - TEMPORARIO_MINIMO_GARANTIDO
        - TEMPORARIA_REVERSIVEL_MINIMO_GARANTIDO
        - VITALICIA
        - VITALICIA_REVERSIVEL
        - VITALICIA_MINIMO_GARANTIDO
        - VITALICIA_REVERSIVEL_MINIMO_GARANTIDO
      example: CERTA
    PersonalInsurancePremiumPayment:
      description: Campo sem descrição na API em OPIN.
      type: object
      x-regulatory-required:
        - paymentMethods
        - frequencies
        - contributionTax
      properties:
        paymentMethods:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/EnumPremiumPaymentMethodTypePersonal'
        paymentMethodAdittionalInfo:
          type: string
          description: |
            Campo livre para preenchimento das informações adicionais referente ao "paymentMethod". 

            [Restrição] Obrigatório quando "paymentMethod" for igual 'OUTROS'.
          maxLength: 144
          pattern: '^(?!\s)[\w\W\s]*[^\s]$'
          example: Informações Adicionais.
        frequencies:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/EnumPersonalInsurancePremiumPaymentFrequency'
        contributionTax:
          type: string
          description: 'Distribuição de frequência relativa aos valores referentes às taxas cobradas, nos termos do Anexo III.'
          minLength: 1
          maxLength: 500
          pattern: '^(?!\s)[\w\W\s]*[^\s]$'
      additionalProperties: false
    EnumPersonalInsurancePremiumPaymentFrequency:
      type: string
      description: |
        Periodicidade de pagamento do prêmio:
          1. Diária
          2. Mensal
          3. Única
          4. Anual
          5. Trimestral
          6. Semestral
          7. Fracionado
          8. Outra
      enum:
        - DIARIA
        - MENSAL
        - UNICA
        - ANUAL
        - TRIMESTRAL
        - SEMESTRAL
        - FRACIONADO
        - OUTRA
      example: DIARIA
    PersonalInsuranceMinimumRequirement:
      description: Campo sem descrição na API em OPIN.
      type: object
      required:
        - contractingMinRequirement
      x-regulatory-required:
        - contractType
        - contractingMinRequirement
      properties:
        contractType:
          $ref: '#/components/schemas/EnumContractTypePersonal'
        contractingMinRequirement:
          type: string
          description: Campo aberto (possibilidade de incluir URL)
          minLength: 1
          maxLength: 1024
          pattern: '^(?!\s)[\w\W\s]*[^\s]$'
          example: 'https://openinsurance.com.br/aaa'
      additionalProperties: false
    PersonalInsuranceGracePeriod:
      description: Período de Carência.
      type: object
      x-regulatory-required:
        - amount
        - unit
        - details
      properties:
        amount:
          type: integer
          format: int64
          description: Informar o prazo de carência
          minLength: 1
          maxLength: 500
          example: 90
          minimum: 0
          maximum: 2147483647
        unit:
          $ref: '#/components/schemas/EnumGracePeriodUnit'
        details:
          description: Descrições adicionais do período de carência.
          type: string
          minLength: 1
          maxLength: 500
          pattern: '^(?!\s)[\w\W\s]*[^\s]$'
          example: Descrições adicionais do período de carência
      additionalProperties: false
    PersonalInsuranceReclaim:
      description: Somente informado se Regime Financeiro for igual a Capitalização.
      type: object
      required:
        - gracePeriod
      x-regulatory-required:
        - differenciatedPercentage
      properties:
        table:
          description: Listagem de percentuais de resgate da PMBaC para cada conjunto de prazo aplicável e para cada combinação de modalidade/cobertura estruturados em regime de capitalização.
          type: array
          minItems: 1
          maxItems: 2147483647
          items:
            $ref: '#/components/schemas/PersonalInsuranceReclaimTableItem'
        gracePeriod:
          description: Período de carência.
          type: object
          x-regulatory-required:
            - amount
            - unit
            - details
          properties:
            amount:
              type: integer
              format: int64
              description: Informar o prazo de carência
              example: 90
              minimum: 0
              maximum: 2147483647
            unit:
              type: string
              description: |
                Informar o critério de carência para a cobertura
                  - Dias 
                  - Meses
              enum:
                - DIAS
                - MESES
        details:
          description: Descrições adicionais do período de carência.
          type: string
          minLength: 1
          maxLength: 500
          pattern: '^(?!\s)[\w\W\s]*[^\s]$'
          example: Descrições adicionais do período de carência
        differenciatedPercentage:
          description: Campo aberto (possibilidade de incluir URL)
          type: string
          pattern: '^(?!\s)[\w\W\s]*[^\s]$'
          minLength: 1
          maxLength: 1024
          example: 'https://openinsurance.com.br/aaa
            Obs.: Exceção de cobertura ou critério definido acima será descrito aqui na URL
            Exemplo: Cobertura X: a partir de 25 meses = 100%'
      additionalProperties: false
    PersonalInsuranceReclaimTableItem:
      type: object
      required:
        - initialMonthRange
        - finalMonthRange
        - percentage
      x-regulatory-required:
        - initialMonthRange
        - finalMonthRange
        - percentage
      properties:
        initialMonthRange:
          description: Mês inicial do range.
          type: integer
          minimum: 0
          maximum: 12
          example: 1
        finalMonthRange:
          description: Mês final do range.
          type: integer
          minimum: 0
          maximum: 12
          example: 12
        percentage:
          type: string
          pattern: '^(\d{1}\.\d{6})$'
          minLength: 8
          maxLength: 9
          description: Percentual de faixa de resgate.
          example: '0.019800'
      additionalProperties: false
    EnumInsurancePersonalCoverageTypePersonal:
      type: string
      description: 'É o conjunto dos riscos cobertos elencados na apólice. (RESOLUÇÃO CNSP Nº 341/2016). Listagem de coberturas incluídas no produto que deve observar a relação discriminada de coberturas, conforme Tabela Tipo de Cobertura '
      enum:
        - ADIANTAMENTO_DOENCA_ESTAGIO_TERMINAL
        - AUXILIO_CESTA_BASICA
        - AUXILIO_FINANCEIRO_IMEDIATO
        - CANCELAMENTO_VIAGEM
        - CIRURGIA
        - COBERTURA_HERNIA
        - COBERTURA_LER_DORT
        - CUIDADOS_PROLONGADOS_ACIDENTE
        - DESEMPREGO_PERDA_RENDA
        - DESPESAS_EXTRA_INVALIDEZ_PERMANENTE_TOTAL_PARCIAL_ACIDENTE_DEI
        - DESPESAS_EXTRA_MORTE_DEM
        - DESPESAS_MEDICAS_HOSPITALARES_ODONTOLOGICAS
        - DESPESAS_MEDICAS_HOSPITALARES_ODONTOLOGICAS_BRASIL
        - DESPESAS_MEDICAS_HOSPITALARES_ODONTOLOGICAS_EXTERIOR
        - DIARIA_INCAPACIDADE_TOTAL_TEMPORARIA
        - DIARIA_INTERNACAO_HOSPITALAR
        - INTERNACAO_HOSPITALAR
        - DIARIAS_INCAPACIDADE_PECUNIARIA_DIP
        - DOENCA_CONGENITA_FILHOS_DCF
        - FRATURA_OSSEA
        - DOENCAS_TROPICAIS
        - INCAPACIDADE_TOTAL_OU_TEMPORARIA
        - INVALIDEZ_PERMANENTE_TOTAL_PARCIAL
        - INVALIDEZ_TOTAL_ACIDENTE
        - INVALIDEZ_PARCIAL_ACIDENTE
        - INVALIDEZ_FUNCIONAL_PERMANENTE_DOENCA
        - INVALIDEZ_LABORATIVA_DOENCA
        - MORTE
        - MORTE_ACIDENTAL
        - MORTE_CONJUGE
        - MORTE_FILHOS
        - MORTE_ADIATAMENTO_DOENCA_ESTAGIO_TERMINAL
        - PAGAMENTO_ANTECIPADO_ESPECIAL_DOENCA_PROFISSIONAL_PAED
        - PERDA_AUTONOMIA_PESSOAL
        - PERDA_INVOLUNTARIA_EMPREGO
        - QUEIMADURA_GRAVE
        - REGRESSO_ANTECIPADO_SANITARIO
        - RENDA_INCAPACIDADE_TEMPORARIA
        - RESCISAO_CONTRATUAL_CASO_MORTE_RCM
        - RESCISAO_TRABALHISTA
        - SERVICO_AUXILIO_FUNERAL
        - SOBREVIVENCIA
        - TRANSPLANTE_ORGAOS
        - TRASLADO
        - TRANSLADO_CORPO
        - VERBA_RESCISORIA
        - DOENCA_GRAVE
        - TRANSLADO_MEDICO
        - OUTROS
      example: INVALIDEZ_PERMANENTE_TOTAL_PARCIAL
    EnumPremiumPaymentMethodTypePersonal:
      type: string
      description: |
        Meio de pagamento escolhido pelo segurado. A considerar os domínios abaixo:
          1. Cartão de Crédito
          2. Cartão de Débito
          3. Débito em conta corrente
          4. Débito em conta poupança
          5. Boleto bancário
          6. PIX
          7. Consignação em Folha de Pagamento
          8. Pontos de Programa de Benefício
          9. Regra de Parceiro
          10. TED e DOC
          11. Outros
      enum:
        - CARTAO_CREDITO
        - CARTAO_DEBITO
        - DEBITO_CONTA_CORRENTE
        - DEBITO_CONTA_POUPANCA
        - BOLETO_BANCARIO
        - PIX
        - CONSIGNACAO_FOLHA_PAGAMENTO
        - PONTOS_PROGRAMA_BENEFICIO
        - REGRA_PARCEIRO
        - TED_DOC
        - OUTROS
      example: CARTAO_CREDITO
    EnumContractTypePersonal:
      type: string
      description: |
        A considerar os domínios abaixo:
          1. Coletivo;
          2. Individual
      enum:
        - COLETIVO
        - INDIVIDUAL
      example: COLETIVO
    PersonalInsuranceSociety:
      type: object
      description: Objeto que representa a empresa regulada pela SUSEP que oferta produtos definidos em OPIN.
      required:
        - name
        - cnpjNumber
        - brand
        - products 
      x-regulatory-required:
        - name
        - cnpjNumber
        - brand
      properties:
        name:
          type: string
          description: Nome da Sociedade Seguradora.
          minLength: 1
          maxLength: 80
          pattern: '^(?!\s)[\w\W\s]*[^\s]$'
          example: Society A1
        cnpjNumber:
          $ref: '#/components/schemas/CnpjNumber'
        brand:
          type: string
          description: 'Nome da marca reportada pela sociedade seguradora participante do Open Finance. O conceito a que se refere a marca é em essência uma promessa das sociedades sob ela em fornecer uma série específica de atributos, benefícios e serviços uniformes aos clientes.'
          minLength: 1
          maxLength: 80
          pattern: '^(?!\s)[\w\W\s]*[^\s]$'
          example: Marca
        products:
          type: array
          description: Lista de produtos de uma empresa.
          minItems: 1
          items:
            $ref: '#/components/schemas/Product'
      additionalProperties: false
    Product:
      type: object
      required:
        - name
        - code
        - coverages
        - termsAndConditions
      x-regulatory-required:
        - name
        - code
        - category
        - modality
        - assistanceTypes
        - assistanceTypesAdditionalInfos
        - additionalServices
        - globalCapital
        - terms
        - financialRegimes
        - otherGuaranteedValues
        - allowPortability
        - indemnityPaymentMethods
        - indemnityPaymentIncomes
        - targetAudience
      properties:
        name:
          type: string
          description: 'Nome comercial do produto, pelo qual é identificado nos canais de distribuição e atendimento da sociedade.'
          minLength: 1
          maxLength: 80
          pattern: '^(?!\s)[\w\W\s]*[^\s]$'
          example: Produto A
        code:
          type: string
          description: Código único a ser definido pela sociedade.
          minLength: 1
          maxLength: 80
          pattern: '^(?!\s)[\w\W\s]*[^\s]$'
          example: '0001'
        category:
          type: string
          description: |
            Indicar a categoria do Produto
              - Tradicional
              - Microsseguro
          enum:
            - TRADICIONAL
            - MICROSSEGURO
          example: TRADICIONAL
        modality:
          $ref: '#/components/schemas/EnumProductModality'
        coverages:
          description: Informações referente a cobertura do seguro.
          type: array
          minItems: 1
          maxItems: 2147483647
          items:
            $ref: '#/components/schemas/PersonalCoverageItem'
        assistanceTypes:
          type: array
          minItems: 0
          maxItems: 2147483647
          items:
            type: string
            description: 'Lista padronizada de tipo de assistências ofertadas vinculadas ao produto. Por exemplo, Funeral, Bicicleta, Assistência PET – Tabela padrão a ser consolidada com retorno das empresas com a relação de assistências, permitindo um campo ‘Outros’ para assistências não contempladas na tabela padronizada.'
            enum:
              - ACOMPANHANTE_CASO_HOSPITALIZACAO_PROLONGADA
              - ARQUITETO_VIRTUAL
              - ASSESSORIA_FINANCEIRA
              - AUTOMOVEL
              - AUXILIO_NATALIDADE
              - AVALIACAO_CLINICA_PREVENTIVA
              - BOLSA_PROTEGIDA
              - CESTA_BASICA
              - CHECKUP_ODONTOLOGICO
              - CLUBE_VANTAGENS_BENEFICIOS
              - CONVALESCENCIA
              - DECESSO
              - DESCONTO_FARMACIAS_MEDICAMENTOS
              - DESPESAS_FARMACEUTICAS_VIAGEM
              - DIGITAL
              - EDUCACIONAL
              - EMPRESARIAL
              - ENCANADOR
              - ENTRETENIMENTO
              - EQUIPAMENTOS_MEDICOS
              - FIANCAS_DESPESAS_LEGAIS
              - FISIOTERAPIA
              - FUNERAL
              - HELP_LINE
              - HOSPEDAGEM_ACOMPANHANTE
              - INTERRUPCAO_VIAGEM
              - INVENTARIO
              - MAIS_VIDA
              - MAMAE_BEBE
              - MEDICA_ACIDENTE_DOENCA
              - MOTOCICLETA
              - MULHER
              - NUTRICIONISTA
              - ODONTOLOGICA
              - ORIENTACAO_FITNESS
              - ORIENTACAO_JURIDICA
              - ORIENTACAO_NUTRICIONAL
              - PERSONAL_FITNESS
              - ORIENTACAO_PSICOSSOCIAL_FAMILIAR
              - PERDA_ROUBO_CARTAO
              - PET
              - PRORROGACAO_ESTADIA
              - PROTECAO_DADOS
              - RECOLOCACAO_PROFISSIONAL
              - REDE_DESCONTO_NUTRICIONAL
              - RESIDENCIAL
              - RETORNO_MENORES_SEGURADO
              - SAQUE_COACAO
              - SAUDE_BEM_ESTAR
              - SEGUNDA_OPINIAO_MEDICA
              - SENIOR
              - SUSTENTAVEL_DESCARTE_ECOLOGICO
              - TELEMEDICINA
              - VIAGEM
              - VITIMA
              - OUTROS
            example: ACOMPANHANTE_CASO_HOSPITALIZACAO_PROLONGADA
        assistanceTypesAdditionalInfos:
          description: Lista a ser preenchido pelas participantes quando houver 'Outros' no campo 'Tipo de Assistência'
          type: array
          minItems: 0
          maxItems: 2147483647
          items:
            type: string
          example: [Informações Adicionais]
        additionalServices:
          type: array
          description: Lista dos serviços adicionais associado ao produto.
          minItems: 0
          maxItems: 2147483647
          items:
            type: string
            enum:
              - SORTEIO
              - SERVICOS_ASSISTENCIAS_COMPLEMENTARES_PAGO
              - SERVICOS_ASSISTENCIA_COMPLEMENTARES_GRATUITO
              - OUTROS
            example: SORTEIO
        termsAndConditions:
          type: array
          description: Termos e condições do produto Seguros.
          minItems: 1
          maxItems: 2147483647
          items:
            $ref: '#/components/schemas/TermsAndConditionsItem'
        globalCapital:
          type: boolean
          description: |
            A considerar os seguintes domínios:
              1. true
              2. false
          example: true
        terms:
          type: array
          minItems: 0
          maxItems: 2147483647
          items:
            type: string
            description: |
              Define o prazo do plano contratado
              1. Vitalícia
              2. Temporária - prazo fixo
              3. Temporária – intermitente
            enum:
              - VITALICIA
              - TEMPORARIA_PRAZO_FIXO
              - TEMPORARIA_INTERMITENTE
            example: VITALICIA
        pmbacRemuneration:
          $ref: '#/components/schemas/InsurancePensionEnumPmbacRemuneration'
        benefitRecalculation:
          $ref: '#/components/schemas/BenefitRecalculation'
        ageAdjustment:
          $ref: '#/components/schemas/AgeAdjustment'
        financialRegimes:
          type: array
          items:
            $ref: '#/components/schemas/InsurancePensionEnumFinancialRegime'
        reclaim:
          $ref: '#/components/schemas/PersonalInsuranceReclaim'
        otherGuaranteedValues:
          type: array
          items:
            $ref: '#/components/schemas/EnumPersonalInsuranceOtherGuaranteedValues'
        allowPortability:
          type: boolean
          description: |
            1. true
            2. false
          example: true
        portabilityGraceTime:
          $ref: '#/components/schemas/PersonalInsurancePortabilityGraceTime'
        indemnityPaymentMethods:
          type: array
          items:
            $ref: '#/components/schemas/EnumPersonalInsuranceIndemnityPaymentMethod'
        indemnityPaymentIncomes:
          type: array
          items:
            $ref: '#/components/schemas/EnumPersonalInsuranceIndemnityPaymentIncome'
        premiumPayment:
          $ref: '#/components/schemas/PersonalInsurancePremiumPayment'
        minimumRequirement:
          $ref: '#/components/schemas/PersonalInsuranceMinimumRequirement'
        targetAudience:
          type: string
          description: |
            A considerar os domínios abaixo:

              1. Pessoa Natural
              2. Pessoa Jurídica
              3. Ambas (Pessoa Natural e Jurídica)
          enum:
            - PESSOA_NATURAL
            - PESSOA_JURIDICA
            - PESSOA_NATURAL_JURIDICA
          example: PESSOA_NATURAL
    PersonalInsurancePortabilityGraceTime:
      description: Período de carência (Somente informado se Regime Financeiro for igual a Capitalização).
      type: object
      x-regulatory-required:
        - amount
        - unit
      properties:
        amount:
          type: integer
          format: int64
          description: Informar o prazo de carência
          example: 90
          minimum: 0
          maximum: 2147483647
        unit:
          type: string
          description: |
            Informar o critério de carência para a cobertura
              - Dias 
              - Meses
          enum:
            - DIAS
            - MESES
      additionalProperties: false
    BenefitRecalculation:
      type: object
      description: Campo sem descrição na API em OPIN.
      required:
        - criterias
      x-regulatory-required:
        - criterias
        - updateIndexes
      properties:
        criterias:
          type: array
          description: Campo sem descrição na API em OPIN.
          minItems: 0
          maxItems: 2147483647
          items:
            type: string
            enum:
              - INDICE
              - VINCULADO_SALDO_DEVEDOR
              - VARIAVEL_ACORDO_CRITERIO_ESPECIFICO
              - NA
        updateIndexes:
          type: array
          items:
            $ref: '#/components/schemas/EnumInsurancePersonalBenefitRecalculationUpdateIndex'
      additionalProperties: false
    Links:
      type: object
      description: Referências para outros recusos da API requisitada.
      required:
        - self
      properties:
        self:
          type: string
          format: uri
          maxLength: 2000
          description: URI completo que gerou a resposta atual.
          example: 'https://api.banco.com.br/open-banking/api/v2/resource'
          pattern: '^(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)$'
        first:
          type: string
          format: uri
          maxLength: 2000
          description: URI da primeira página que originou essa lista de resultados. Restrição - Obrigatório quando não for a primeira página da resposta
          example: 'https://api.banco.com.br/open-banking/api/v2/resource'
          pattern: '^(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)$'
        prev:
          type: string
          format: uri
          maxLength: 2000
          description: "URI da página anterior dessa lista de resultados. Restrição - \tObrigatório quando não for a primeira página da resposta"
          example: 'https://api.banco.com.br/open-banking/api/v2/resource'
          pattern: '^(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)$'
        next:
          type: string
          format: uri
          maxLength: 2000
          description: URI da próxima página dessa lista de resultados. Restrição - Obrigatório quando não for a última página da resposta
          example: 'https://api.banco.com.br/open-banking/api/v2/resource'
          pattern: '^(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)$'
        last:
          type: string
          format: uri
          maxLength: 2000
          description: URI da última página dessa lista de resultados. Restrição - Obrigatório quando não for a última página da resposta
          example: 'https://api.banco.com.br/open-banking/api/v2/resource'
          pattern: '^(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)$'
      additionalProperties: false
    Meta:
      type: object
      description: Meta informações referente a API requisitada.
      required:
        - totalRecords
        - totalPages
        - requestDateTime
      properties:
        totalRecords:
          type: integer
          format: int32
          description: Número total de registros no resultado
          example: 1
        totalPages:
          type: integer
          format: int32
          description: Número total de páginas no resultado
          example: 1
        requestDateTime:
          description: 'Data e hora da consulta, conforme especificação RFC-3339, formato UTC.'
          type: string
          maxLength: 20
          format: date-time
          example: '2021-05-21T08:30:00Z'
      additionalProperties: false
    ResponseError:
      type: object
      required:
        - errors
      properties:
        errors:
          type: array
          minItems: 1
          maxItems: 13
          items:
            type: object
            required:
              - code
              - title
              - detail
            properties:
              code:
                description: Código de erro específico do endpoint
                type: string
                pattern: '[\w\W\s]*'
                maxLength: 255
              title:
                description: Título legível por humanos deste erro específico
                type: string
                pattern: '[\w\W\s]*'
                maxLength: 255
              detail:
                description: Descrição legível por humanos deste erro específico
                type: string
                pattern: '[\w\W\s]*'
                maxLength: 2048
            additionalProperties: false
        meta:
          $ref: '#/components/schemas/Meta'
      additionalProperties: false
  parameters:
    page:
      name: page
      in: query
      description: Número da página que está sendo requisitada (o valor da primeira página é 1).
      schema:
        type: integer
        default: 1
        minimum: 1
        maximum: 2147483647
        format: int32
    pageSize:
      name: page-size
      in: query
      description: Quantidade total de registros por páginas.
      schema:
        type: integer
        default: 25
        minimum: 1
        format: int32
        maximum: 1000
  responses:
    OKResponsePersonalInsuranceList:
      description: Dados de seguro(s) pessoais obtidos com sucesso.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/OKResponsePersonalInsuranceList'
    BadRequest:
      description: 'A requisição foi malformada, omitindo atributos obrigatórios, seja no payload ou através de atributos na URL.'
      content:
        application/json; charset=utf-8:
          schema:
            $ref: '#/components/schemas/ResponseError'
    InternalServerError:
      description: Ocorreu um erro no gateway da API ou no microsserviço
      content:
        application/json; charset=utf-8:
          schema:
            $ref: '#/components/schemas/ResponseError'
    MethodNotAllowed:
      description: O consumidor tentou acessar o recurso com um método não suportado
      content:
        application/json; charset=utf-8:
          schema:
            $ref: '#/components/schemas/ResponseError'
    NotFound:
      description: O recurso solicitado não existe ou não foi implementado
      content:
        application/json; charset=utf-8:
          schema:
            $ref: '#/components/schemas/ResponseError'
    TooManyRequests:
      description: 'A operação foi recusada, pois muitas solicitações foram feitas dentro de um determinado período ou o limite de requisições concorrentes foi atingido.'
      content:
        application/json; charset=utf-8:
          schema:
            $ref: '#/components/schemas/ResponseError'
    SiteIsOverloaded:
      description: 'O site está sobrecarregado e a operação foi recusada, pois foi atingido o limite máximo de TPS global, neste momento.'
      content:
        application/json; charset=utf-8:
          schema:
            type: object
            required:
              - errors
            properties:
              errors:
                type: array
                minItems: 1
                maxItems: 13
                items:
                  type: object
                  required:
                    - code
                    - title
                    - detail
                  properties:
                    code:
                      description: Código de erro específico do endpoint
                      type: string
                      pattern: '[\w\W\s]*'
                      maxLength: 255
                    title:
                      description: Título legível por humanos deste erro específico
                      type: string
                      pattern: '[\w\W\s]*'
                      maxLength: 255
                    detail:
                      description: Descrição legível por humanos deste erro específico
                      type: string
                      pattern: '[\w\W\s]*'
                      maxLength: 2048
              meta:
                type: object
                description: Meta informações referente à API requisitada.
                required:
                  - requestDateTime
                properties:
                  requestDateTime:
                    description: 'Data e hora da consulta, conforme especificação RFC-3339, formato UTC.'
                    type: string
                    maxLength: 20
                    format: date-time
                    example: '2021-05-21T08:30:00Z'