openapi: 3.0.0
info:
  title: API InsurancePerson - Open Insurance Brasil
  description: |
    API de Pessoas do Open Insurance Brasil - Fase 2.\
    Traz informações de apólice, prêmio e sinistro mantidas nas instituições transmissoras por seus clientes.\
    Não possui segregação entre pessoa natural e pessoa jurídica.\
    Requer consentimento do cliente para todos os 'endpoints'.

    # Orientações
    A `Role`  do diretório de participantes relacionada à presente API é a `DADOS`.\
    Para todos os `endpoints` desta API é previsto o envio de um `token` através do header `Authorization`.\
    Este `token` deverá estar relacionado ao consentimento (identificado pelo `consentId`) mantido na instituição transmissora dos dados, o qual permitirá a pesquisa e retorno, na API em questão, dos 
    dados relacionados ao `consentId` específico.\
    Os dados serão devolvidos na consulta desde que o `consentId` relacionado corresponda a um consentimento válido e com o status `AUTHORISED`.\
    É também necessário que o recurso em questão (conta, contrato, etc.) esteja disponível na instituição transmissora (ou seja, sem boqueios de qualquer natureza e com todas as autorizações/consentimentos já autorizados).\
    Além disso, as `permissions` necessárias deverão ter sido solicitadas quando da criação do consentimento relacionado.\
    Relacionamos a seguir as `permissions` necessárias para a consulta de dados em cada `endpoint` da presente API.

    ## Permissions necessárias para a API InsurancePerson

    Para cada um dos `paths` desta API, além dos escopos (`scopes`) indicados existem `permissions` que deverão ser observadas:

    ### `/`
      - permissions:
        - GET: **DAMAGES_AND_PEOPLE_PERSON_READ**
    ### `/{policyId}/policy-info`
      - permissions:
        - GET: **DAMAGES_AND_PEOPLE_PERSON_POLICYINFO_READ**
    ### `/{policyId}/premium`
      - permissions:
        - GET: **DAMAGES_AND_PEOPLE_PERSON_PREMIUM_READ**
    ### `/{policyId}/claim`
      - permissions:
        - GET: **DAMAGES_AND_PEOPLE_PERSON_CLAIM_READ**
  version: 1.6.1
  contact:
    name: Governança do Open Insurance Brasil
    url: "https://www.gov.br/susep/"
servers:
  - url: "https://api.organizacao.com.br/open-insurance/insurance-person/v1"
    description: Servidor de Produção
  - url: "https://api.organizacao.com.br/open-insurance/insurance-person/v1"
    description: Servidor de Homologação
tags:
  - name: "InsurancePerson"
paths:
  /insurance-person:
    get:
      tags:
        - InsurancePerson
      summary: Obtem a lista de identificação de InsurancePerson
      description: "Método para obter a lista de identificação de InsurancePerson"
      operationId: "getInsurancePerson"
      parameters:
        - $ref: "#/components/parameters/Authorization"
        - $ref: "#/components/parameters/xFapiAuthDate"
        - $ref: "#/components/parameters/xFapiCustomerIpAddress"
        - $ref: "#/components/parameters/xFapiInteractionId"
        - $ref: "#/components/parameters/xCustomerUserAgent"
        - $ref: "#/components/parameters/x-v"
        - $ref: "#/components/parameters/x-min-v"
        - $ref: "#/components/parameters/page"
        - $ref: "#/components/parameters/pageSize"
      responses:
        "200":
          $ref: "#/components/responses/OKResponseInsurancePerson"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
        "405":
          $ref: "#/components/responses/MethodNotAllowed"
        "406":
          $ref: "#/components/responses/NotAcceptable"
        "422":
          $ref: "#/components/responses/UnprocessableEntity"
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
      security:
        - OpenId:
            - openid
          OAuth2Security:
            - "consent:consentId"
            - insurance-person
  /insurance-person/{policyId}/policy-info:
    get:
      tags:
        - InsurancePerson
      summary: Obtém as informações gerais da apólice identificada por {policyId}
      description: "Método para obter as informações gerais da apólice"
      operationId: "getInsurancePersonpolicyIdPolicyInfo"
      parameters:
        - $ref: "#/components/parameters/Authorization"
        - $ref: "#/components/parameters/xFapiAuthDate"
        - $ref: "#/components/parameters/xFapiCustomerIpAddress"
        - $ref: "#/components/parameters/xFapiInteractionId"
        - $ref: "#/components/parameters/xCustomerUserAgent"
        - $ref: "#/components/parameters/policyId"
        - $ref: "#/components/parameters/x-v"
        - $ref: "#/components/parameters/x-min-v"
      responses:
        "200":
          $ref: "#/components/responses/OKResponseInsurancePersonPolicyInfo"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
        "405":
          $ref: "#/components/responses/MethodNotAllowed"
        "406":
          $ref: "#/components/responses/NotAcceptable"
        "422":
          $ref: "#/components/responses/UnprocessableEntity"
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
      security:
        - OpenId:
            - openid
          OAuth2Security:
            - "consent:consentId"
            - insurance-person
  /insurance-person/{policyId}/premium:
    get:
      tags:
        - InsurancePerson
      summary: Obtém os dados de prêmio da apólice identificada por {policyId}
      description: "Método para obter os dados de prêmio da apólice."
      operationId: "getInsurancePersonpolicyIdPremium"
      parameters:
        - $ref: "#/components/parameters/Authorization"
        - $ref: "#/components/parameters/xFapiAuthDate"
        - $ref: "#/components/parameters/xFapiCustomerIpAddress"
        - $ref: "#/components/parameters/xFapiInteractionId"
        - $ref: "#/components/parameters/xCustomerUserAgent"
        - $ref: "#/components/parameters/policyId"
        - $ref: "#/components/parameters/x-v"
        - $ref: "#/components/parameters/x-min-v"
      responses:
        "200":
          $ref: "#/components/responses/OKResponseInsurancePersonPremium"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
        "405":
          $ref: "#/components/responses/MethodNotAllowed"
        "406":
          $ref: "#/components/responses/NotAcceptable"
        "422":
          $ref: "#/components/responses/UnprocessableEntity"
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
      security:
        - OpenId:
            - openid
          OAuth2Security:
            - "consent:consentId"
            - insurance-person
  /insurance-person/{policyId}/claim:
    get:
      tags:
        - InsurancePerson
      summary: Obtém os dados de sinistro da apólice identificada por {policyId}
      description: "Método para obter os dados de sinistro associados à apólice"
      operationId: "getInsurancePersonpolicyIdClaims"
      parameters:
        - $ref: "#/components/parameters/Authorization"
        - $ref: "#/components/parameters/xFapiAuthDate"
        - $ref: "#/components/parameters/xFapiCustomerIpAddress"
        - $ref: "#/components/parameters/xFapiInteractionId"
        - $ref: "#/components/parameters/xCustomerUserAgent"
        - $ref: "#/components/parameters/policyId"
        - $ref: "#/components/parameters/x-v"
        - $ref: "#/components/parameters/x-min-v"
        - $ref: "#/components/parameters/page"
        - $ref: "#/components/parameters/pageSize"
      responses:
        "200":
          $ref: "#/components/responses/OKResponseInsurancePersonClaims"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
        "405":
          $ref: "#/components/responses/MethodNotAllowed"
        "406":
          $ref: "#/components/responses/NotAcceptable"
        "422":
          $ref: "#/components/responses/UnprocessableEntity"
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
      security:
        - OpenId:
            - openid
          OAuth2Security:
            - "consent:consentId"
            - insurance-person
components:
  schemas:
    ResponseInsurancePerson:
      type: object
      required:
        - data
        - links
        - meta
      properties:
        data:
          type: array
          items:
            type: object
            required:
              - brand
            properties:
              brand:
                type: object
                description: Marca reportada pelo participante do Open Insurance. O conceito a que se refere a marca é em essência uma promessa das sociedades sob ela em fornecer uma série específica de atributos, benefícios e serviços uniformes aos clientes.
                required:
                  - name
                  - companies
                properties:
                  name:
                    type: string
                    description: Nome da Marca
                    maxLength: 500
                    example: EMPRESA A SEGUROS
                  companies:
                    type: array
                    items:
                      type: object
                      required:
                        - companyName
                        - cnpjNumber
                        - policies
                      properties:
                        companyName:
                          description: Nome da sociedade pertencente à marca
                          type: string
                          maxLength: 200
                        cnpjNumber:
                          description: CNPJ da sociedade pertencente à marca
                          type: string
                          pattern: '^\d{14}$'
                          example: "12345678901234"
                        policies:
                          type: array
                          items:
                            type: object
                            required:
                              - productName
                              - policyId
                            properties:
                              productName:
                                description: Nome comercial do produto, pelo qual é identificado nos canais de distribuição e atendimento da sociedade
                                type: string
                                maxLength: 100
                                example: Produto A Pessoas
                              policyId:
                                description: Identificador da apólice ou bilhete
                                type: string
                                maxLength: 60
                                example: "111111"
        links:
          $ref: "#/components/schemas/Links"
        meta:
          $ref: "#/components/schemas/Meta"

    ResponseInsurancePersonPolicyInfo:
      type: object
      required:
        - data
        - links
        - meta
      properties:
        data:
          $ref: "#/components/schemas/InsurancePersonPolicyInfo"
        links:
          $ref: "#/components/schemas/Links"
        meta:
          $ref: "#/components/schemas/Meta"

    InsurancePersonPolicyInfo:
      type: object
      required:
        - documentType
        - policyId
        - issuanceType
        - issuanceDate
        - termStartDate
        - termEndDate
        - withdrawals
        - portabilities
        - proposalId
        - insureds
        - insuredObjects
        - PMBaC
      properties:
        documentType:
          description: Tipo de Documento Emitido
          type: string
          enum: [APOLICE_INDIVIDUAL,
                BILHETE,
                CERTIFICADO,
                APOLICE_INDIVIDUAL_AUTOMOVEL,
                APOLICE_FROTA_AUTOMOVEL,
                CERTIFICADO_AUTOMOVEL]
          example: APOLICE_INDIVIDUAL
        policyId:
          description: Identificador da apólice ou bilhete
          type: string
          maxLength: 60
          example: "111111"
        susepProcessNumber:
          description: Numero SUSEP da apolice conforme regulamentacao vigente (Obrigatorio caso apolice com coberturas do ramo Garantia)
          type: string
          maxLength: 60
        groupCertificateId:
          description: Identificador do Certificado (Caso Tipo de Documento Emitido for certificado)
          type: string
          maxLength: 60
        issuanceType:
          description: Tipo de Emissao
          type: string
          enum: [EMISSAO_PROPRIA, COSSEGURO_ACEITO]
          example: EMISSAO_PROPRIA
        issuanceDate:
          description: Data de emissao do documento
          type: string
          format: date
          maxLength: 10
          pattern: ^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$
          example: "2022-12-31"
        termStartDate:
          description: Data de início de vigência do documento
          type: string
          format: date
          maxLength: 10
          pattern: ^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$
          example: "2022-12-31"
        termEndDate:
          description: Data de fim de vigência do documento
          type: string
          format: date
          pattern: ^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$
          maxLength: 10
          example: "2022-12-31"
        leadInsurerCode:
          description: Codigo da seguradora lider para contratos com arranjo de cosseguro
          type: string
          maxLength: 1024
          example: "ABC123"
        leadInsurerPolicyId:
          description: Identificador da apolice seguradora lider para apolice de cosseguro aceito
          type: string
          maxLength: 1024
          example: "ABC123"
        withdrawals:
          $ref: "#/components/schemas/WithdrawalInfo"
        portabilities:
          $ref: "#/components/schemas/PortabilityInfo"
        proposalId:
          description: Identificador da proposta ou certificado
          type: string
          maxLength: 60
          example: "ABC123"
        insureds:
          type: array
          items:
            $ref: "#/components/schemas/PersonalInfo"
        beneficiaries:
          type: array
          items:
            $ref: "#/components/schemas/BeneficiaryInfo"
        principals:
          type: array
          items:
            $ref: "#/components/schemas/PrincipalInfo"
        intermediaries:
          type: array
          items:
            $ref: "#/components/schemas/Intermediary"
        insuredObjects:
          type: array
          items:
            $ref: "#/components/schemas/InsurancePersonInsuredObject"
        coverages:
          type: array
          items:
            $ref: "#/components/schemas/InsurancePersonCoverage"
        coinsuranceRetainedPercentage:
          description: Percentual Retido em Cosseguro (Quando ha cosseguro)
          type: string
          pattern: '^100\.0{1,9}$|^\d{1,2}\.\d{1,9}$'
          example: "10.00"
        coinsurers:
          type: array
          items:
            $ref: "#/components/schemas/Coinsurer"
        PMBaC:
          type: object
          description: PMBaC
          required:
            - pmbacAmount
          properties:
            pmbacAmount:
              description: |
                Valor PMBaC (fim do mês) 
                Valor da Provisão Matemática de Benefícios a Conceder (PMBaC), no fim de cada mês. Caso não haja saldo informar nulo
              allOf:
                - $ref: "#/components/schemas/AmountDetails"

    GraceInfo:
      type: array
      description: Informações de Carência em caso de regime financeiro de Repartição de Capitais de Cobertura e de Capitalização (Caso seguro individual)
      items:
        required:
        - type
        - gracePeriod
        - gracePeriodicity
        - gracePeriodCountingMethod
        - gracePeriodStartDate
        - gracePeriodEndDate
        - period
        type: object
        properties:
          type:
            description: Tipo de Carência (Quando houver)
            type: string
            enum: [PORTABILIDADE, RESGATE]
            example: RESGATE
          gracePeriod:
            type: integer
            maxLength: 5
            description: "Período de carência. OBS: Obrigatório, se houver"
          gracePeriodicity:
            type: string
            description: "Periodicidade da carência. OBS: Obrigatório, se houver"
            example: DIA
            enum: [DIA, MES, ANO]
          gracePeriodCountingMethod:
            type: string
            description: "Indicador de dias úteis ou corridos da carência. OBS: Obrigatório, se houver"
            example: DIAS_UTEIS
            enum: [DIAS_UTEIS, DIAS_CORRIDOS]
          gracePeriodStartDate:
            type: string
            format: date
            maxLength: 10
            example: "2022-12-31"
            pattern: ^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$
            description: "Data de início da carência. OBS: Obrigatório, se houver"
          gracePeriodEndDate:
            type: string
            format: date
            maxLength: 10
            pattern: ^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$
            example: "2022-12-31"
            description: "Data de fim da carência. OBS: Obrigatório, se houver"
          period:
            type: integer
            maxLength: 5
            description: Prazo de Carência entre Resgates (Caso Tipo de Carência 1. Portabilidade ou 2. Resgate for selecionada)

    WithdrawalInfo:
      type: array
      description: Informações de resgate, Obrigatório se houver em caso de regime financeiro de Capitalização
      items:
        type: object
        required:
          - occurrenceWithdrawal
        properties:
          occurrenceWithdrawal:
            type: boolean
            description: Indica se houve resgate
            example: true
          type:
            description: Tipo de resgate
            type: string
            enum: [TOTAL, PARCIAL]
            example: PARCIAL
          requestDate:
            description: Data solicitação
            type: string
            format: date
            maxLength: 10
            pattern: ^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$
            example: "2020-12-31"
          amount:
            allOf:
              - $ref: "#/components/schemas/AmountDetails"
          movementDate:
            description: Data Movimentação (liquidação)
            type: string
            format: date
            maxLength: 10
            pattern: ^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$
            example: "2020-12-31"
          withdrawalCause:
            description: Natureza do Resgate (Caso Ocorrência do resgate for Sim)
            type: string
            example: RESGATE_REGULAR
            enum: [
              RESGATE_REGULAR,
              MORTE,
              INVALIDEZ,
              PAGAMENTO_FINANCEIRO_PROGRAMADO,
              CUSTEIO_DE_COBERTURA_DE_RISCOS_EM_PLANOS_CONJUGADOS,
              ASSISTENCIA_FINANCEIRA
              ]

    PortabilityInfo:
      type: array
      description: Informações de portabilidade, Obrigatório se houver em caso de regime financeiro de Capitalização
      items:
        type: object
        required:
          - occurrencePortability
        properties:
          occurrencePortability:
            type: boolean
            description: Indica se houve portabilidade
            example: true
          direction:
            description: Direção do fluxo de portabilidade
            type: string
            enum: [ENTRADA, SAIDA]
            example: ENTRADA
          type:
            type: string
            description: Tipo de portabilidade
            enum: [TOTAL, PARCIAL]
            example: PARCIAL
          amount:
            $ref: "#/components/schemas/AmountDetails"
          requestDate:
            description: Data solicitação
            type: string
            format: date
            maxLength: 10
            pattern: ^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$
            example: "2020-12-31"
          movementDate:
            description: Data Movimentação (liquidação)
            type: string
            format: date
            maxLength: 10
            pattern: ^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$
            example: "2020-12-31"
          sourceEntityCode:
            description: Código FIP da entidade de origem (cedente) da portabilidade
            type: string
            example: "ABC123"
          targetEntityCode:
            description: Código FIP da entidade de origem destino (cessionária) da portabilidade
            type: string
            example: "ABC123"
          sourceEntitySusepProcessNumber:
            description: Processo Susep do Plano Origem
            type: string
            maxLength: 60
            example: "ABC123"

    PersonalInfo:
      type: object
      required:
        - identification
        - identificationType
        - name
        - postCode
        - birthDate
        - city
        - state
        - country
        - address
      properties:
        identification:
          description: Documento de Identificação do Segurado
          type: string
          maxLength: 60
          example: "12345678900"
        identificationType:
          description: Tipo de Documento do Segurado
          type: string
          enum: [
            CPF,
            CNPJ,
            OUTROS
          ]
          example: CPF
        identificationTypeOthers:
          description: Campo de detalhamento para quando a opcao do tipo de documento do segurado for OUTROS
          type: string
          maxLength: 100
          example: RNE
        name:
          description: Nome ou Razão Social do segurado
          type: string
          maxLength: 60
          example: Nome Sobrenome
        birthDate:
          description: Data de nascimento do segurado
          type: string
          format: date
          maxLength: 10
          pattern: '^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$'
          example: '1999-06-12'
        postCode:
          description: Código Postal do segurado
          type: string
          maxLength: 60
          example: "10000000"
        email:
          description: E-mail do segurado (caso possua)
          type: string
          pattern: ^\S+@\S+\.\S+$
          maxLength: 256
        city:
          description: Cidade do segurado (por extenso)
          type: string
          maxLength: 60
        state:
          description: Estado do segurado (por extenso)
          type: string
          example: AC
          enum: ['AC', 'AL', 'AP', 'AM', 'BA', 'CE', 'DF', 'ES', 'GO', 'MA', 'MT', 'MS', 'MG', 'PA', 'PB', 'PR', 'PE', 'PI', 'RJ', 'RN', 'RS', 'RO', 'RR', 'SC', 'SP', 'SE', 'TO', 'BR', 'XX']
        country:
          description: País do segurado (de acordo com o código "alpha3" do ISO-3166)
          type: string
          enum: [AFG,ALA,ALB,DZA,ASM,AND,AGO,AIA,ATA,ATG,ARG,ARM,ABW,AUS,AUT,AZE,BHS,BHR,BGD,BRB,BLR,BEL,BLZ,BEN,BMU,BTN,BOL,BES,BIH,BWA,BVT,BRA,IOT,BRN,BGR,BFA,BDI,CPV,KHM,CMR,CAN,CYM,CAF,TCD,CHL,CHN,CXR,CCK,COL,COM,COG,COD,COK,CRI,CIV,HRV,CUB,CUW,CYP,CZE,DNK,DJI,DMA,DOM,ECU,EGY,SLV,GNQ,ERI,EST,SWZ,ETH,FLK,FRO,FJI,FIN,FRA,GUF,PYF,ATF,GAB,GMB,GEO,DEU,GHA,GIB,GRC,GRL,GRD,GLP,GUM,GTM,GGY,GIN,GNB,GUY,HTI,HMD,VAT,HND,HKG,HUN,ISL,IND,IDN,IRN,IRQ,IRL,IMN,ISR,ITA,JAM,JPN,JEY,JOR,KAZ,KEN,KIR,PRK,KOR,KWT,KGZ,LAO,LVA,LBN,LSO,LBR,LBY,LIE,LTU,LUX,MAC,MDG,MWI,MYS,MDV,MLI,MLT,MHL,MTQ,MRT,MUS,MYT,MEX,FSM,MDA,MCO,MNG,MNE,MSR,MAR,MOZ,MMR,NAM,NRU,NPL,NLD,NCL,NZL,NIC,NER,NGA,NIU,NFK,MKD,MNP,NOR,OMN,PAK,PLW,PSE,PAN,PNG,PRY,PER,PHL,PCN,POL,PRT,PRI,QAT,REU,ROU,RUS,RWA,BLM,SHN,KNA,LCA,MAF,SPM,VCT,WSM,SMR,STP,SAU,SEN,SRB,SYC,SLE,SGP,SXM,SVK,SVN,SLB,SOM,ZAF,SGS,SSD,ESP,LKA,SDN,SUR,SJM,SWE,CHE,SYR,TWN,TJK,TZA,THA,TLS,TGO,TKL,TON,TTO,TUN,TUR,TKM,TCA,TUV,UGA,UKR,ARE,GBR,USA,UMI,URY,UZB,VUT,VEN,VNM,VGB,VIR,WLF,ESH,YEM,ZMB,ZWE]
          example: BRA 
        address:
          description: Endereço do segurado (restante do endereço, excluindo cidade, estado e país)
          type: string
          maxLength: 60
    BeneficiaryInfo:
      type: object
      required:
        - identification
        - identificationType
        - name
      properties:
        identification:
          description: Documento de Identificação da Pessoa
          type: string
          maxLength: 60
          example: "12345678900"
        identificationType:
          description: Tipo de Documento da Pessoa
          type: string
          enum: [
            CPF,
            CNPJ,
            OUTROS
          ]
          example: CPF
        identificationTypeOthers:
          description: Campo de detalhamento para quando a opcao do tipo de documento da pessoa for OUTROS
          type: string
          maxLength: 100
          example: RNE
        name:
          description: Nome ou Razão Social da Pessoa
          type: string
          maxLength: 60
          example: Nome Sobrenome
    PrincipalInfo:
      type: object
      required:
        - identification
        - identificationType
        - name
        - postCode
        - city
        - state
        - country
        - address
      properties:
        identification:
          description: Documento de Identificação do Tomador/Garantidor
          type: string
          maxLength: 60
          example: "12345678900"
        identificationType:
          description: Tipo de Documento do Tomador/Garantidor
          type: string
          enum: [
            CPF,
            CNPJ,
            OUTROS
          ]
          example: CPF
        identificationTypeOthers:
          description: Campo de detalhamento para quando a opcao do tipo de documento do Tomador/Garantidor for OUTROS
          type: string
          maxLength: 100
          example: RNE
        name:
          description: Nome ou Razão Social do Tomador/Garantidor
          type: string
          maxLength: 60
          example: Nome Sobrenome
        postCode:
          description: Código Postal do Tomador/Garantidor
          type: string
          maxLength: 60
          example: "10000000"
        email:
          description: E-mail do Tomador/Garantidor (caso possua)
          type: string
          pattern: ^\S+@\S+\.\S+$
          maxLength: 256
        city:
          description: Cidade do Tomador/Garantidor (por extenso)
          type: string
          maxLength: 60
        state:
          description: Estado do Tomador/Garantidor (por extenso)
          type: string
          example: AC
          enum: ['AC', 'AL', 'AP', 'AM', 'BA', 'CE', 'DF', 'ES', 'GO', 'MA', 'MT', 'MS', 'MG', 'PA', 'PB', 'PR', 'PE', 'PI', 'RJ', 'RN', 'RS', 'RO', 'RR', 'SC', 'SP', 'SE', 'TO', 'BR', 'XX']
        country:
          description: País do Tomador/Garantidor (de acordo com o código "alpha3" do ISO-3166)
          type: string
          enum: [AFG,ALA,ALB,DZA,ASM,AND,AGO,AIA,ATA,ATG,ARG,ARM,ABW,AUS,AUT,AZE,BHS,BHR,BGD,BRB,BLR,BEL,BLZ,BEN,BMU,BTN,BOL,BES,BIH,BWA,BVT,BRA,IOT,BRN,BGR,BFA,BDI,CPV,KHM,CMR,CAN,CYM,CAF,TCD,CHL,CHN,CXR,CCK,COL,COM,COG,COD,COK,CRI,CIV,HRV,CUB,CUW,CYP,CZE,DNK,DJI,DMA,DOM,ECU,EGY,SLV,GNQ,ERI,EST,SWZ,ETH,FLK,FRO,FJI,FIN,FRA,GUF,PYF,ATF,GAB,GMB,GEO,DEU,GHA,GIB,GRC,GRL,GRD,GLP,GUM,GTM,GGY,GIN,GNB,GUY,HTI,HMD,VAT,HND,HKG,HUN,ISL,IND,IDN,IRN,IRQ,IRL,IMN,ISR,ITA,JAM,JPN,JEY,JOR,KAZ,KEN,KIR,PRK,KOR,KWT,KGZ,LAO,LVA,LBN,LSO,LBR,LBY,LIE,LTU,LUX,MAC,MDG,MWI,MYS,MDV,MLI,MLT,MHL,MTQ,MRT,MUS,MYT,MEX,FSM,MDA,MCO,MNG,MNE,MSR,MAR,MOZ,MMR,NAM,NRU,NPL,NLD,NCL,NZL,NIC,NER,NGA,NIU,NFK,MKD,MNP,NOR,OMN,PAK,PLW,PSE,PAN,PNG,PRY,PER,PHL,PCN,POL,PRT,PRI,QAT,REU,ROU,RUS,RWA,BLM,SHN,KNA,LCA,MAF,SPM,VCT,WSM,SMR,STP,SAU,SEN,SRB,SYC,SLE,SGP,SXM,SVK,SVN,SLB,SOM,ZAF,SGS,SSD,ESP,LKA,SDN,SUR,SJM,SWE,CHE,SYR,TWN,TJK,TZA,THA,TLS,TGO,TKL,TON,TTO,TUN,TUR,TKM,TCA,TUV,UGA,UKR,ARE,GBR,USA,UMI,URY,UZB,VUT,VEN,VNM,VGB,VIR,WLF,ESH,YEM,ZMB,ZWE]
          example: BRA 
        address:
          description: Endereço do Tomador/Garantidor (restante do endereço, excluindo cidade, estado e país)
          type: string
          maxLength: 60
        addressAdditionalInfo:
          description: Complemento do endereço do Tomador/Garantidor.
          type: string
          maxLength: 30
          example: Fundos
    Intermediary:
      type: object
      required:
        - name
        - type
      properties:
        type:
          description: Tipo do Intermediador
          type: string
          enum:
            [
              CORRETOR,
              REPRESENTANTE,
              ESTIPULANTE_AVERBADOR_INSTITUIDOR,
              CORRESPONDENTE,
              AGENTE_DE_MICROSSEGUROS,
              OUTROS
            ]
          example: REPRESENTANTE
        typeOthers:
          description: Descrição do Tipo do Intermediador quando for informada a opção OUTROS
          type: string
          example: OUTROS
        identification:
          description: Documento de Identificação da Intermediador (Caso Tipo de Intermediador não seja Corretor ou quando for Corretor, porém o identificador do intermediador não seja informado)
          type: string
          maxLength: 60
          pattern: '^\d{1,60}$'
          example: "12345678900"
        brokerId:
          description: Identificador do Intermediador (Caso Tipo de Intermediador for CORRETOR) código SUSEP do corretor(a)
          type: string
          maxLength: 100
        identificationType:
          description: Tipo de Documento da Intermediador
          type: string
          enum: [CPF, CNPJ, OUTROS]
          example: CPF
        identificationTypeOthers:
          description: Descrição do Tipo de Documento quando for informada a opção OUTROS
          type: string
          example: OUTROS
        name:
          description: Nome ou Razão Social da Intermediador
          type: string
          maxLength: 60
          example: Nome Sobrenome
        postCode:
          description: Código Postal da Intermediador (Caso Tipo de Intermediador for ESTIPULANTE)
          type: string
          maxLength: 60
          example: "10000000"
        city:
          description: Cidade da Intermediador (por extenso; Caso Tipo de Intermediador for ESTIPULANTE)
          type: string
          maxLength: 60
        state:
          description: Estado da Intermediador (por extenso; Caso Tipo de Intermediador for ESTIPULANTE)
          type: string
          maxLength: 60
        country:
          description: País da Intermediador (de acordo com o código "alpha3" do ISO-3166; Caso Tipo de Intermediador for ESTIPULANTE)
          type: string
          maxLength: 3
          enum: [AFG,ALA,ALB,DZA,ASM,AND,AGO,AIA,ATA,ATG,ARG,ARM,ABW,AUS,AUT,AZE,BHS,BHR,BGD,BRB,BLR,BEL,BLZ,BEN,BMU,BTN,BOL,BES,BIH,BWA,BVT,
                BRA,IOT,BRN,BGR,BFA,BDI,CPV,KHM,CMR,CAN,CYM,CAF,TCD,CHL,CHN,CXR,CCK,COL,COM,COG,COD,COK,CRI,CIV,HRV,CUB,CUW,CYP,CZE,DNK,DJI,DMA,
                DOM,ECU,EGY,SLV,GNQ,ERI,EST,SWZ,ETH,FLK,FRO,FJI,FIN,FRA,GUF,PYF,ATF,GAB,GMB,GEO,DEU,GHA,GIB,GRC,GRL,GRD,GLP,GUM,GTM,GGY,GIN,GNB,
                GUY,HTI,HMD,VAT,HND,HKG,HUN,ISL,IND,IDN,IRN,IRQ,IRL,IMN,ISR,ITA,JAM,JPN,JEY,JOR,KAZ,KEN,KIR,PRK,KOR,KWT,KGZ,LAO,LVA,LBN,LSO,LBR,
                LBY,LIE,LTU,LUX,MAC,MDG,MWI,MYS,MDV,MLI,MLT,MHL,MTQ,MRT,MUS,MYT,MEX,FSM,MDA,MCO,MNG,MNE,MSR,MAR,MOZ,MMR,NAM,NRU,NPL,NLD,NCL,NZL,
                NIC,NER,NGA,NIU,NFK,MKD,MNP,NOR,OMN,PAK,PLW,PSE,PAN,PNG,PRY,PER,PHL,PCN,POL,PRT,PRI,QAT,REU,ROU,RUS,RWA,BLM,SHN,KNA,LCA,MAF,SPM,
                VCT,WSM,SMR,STP,SAU,SEN,SRB,SYC,SLE,SGP,SXM,SVK,SVN,SLB,SOM,ZAF,SGS,SSD,ESP,LKA,SDN,SUR,SJM,SWE,CHE,SYR,TWN,TJK,TZA,THA,TLS,TGO,
                TKL,TON,TTO,TUN,TUR,TKM,TCA,TUV,UGA,UKR,ARE,GBR,USA,UMI,URY,UZB,VUT,VEN,VNM,VGB,VIR,WLF,ESH,YEM,ZMB,ZWE]
          example: BRA
        address:
          description: Endereço da Intermediador (restante do do endereço, excluindo cidade, estado e país; Caso Tipo de Intermediador for ESTIPULANTE)
          type: string
          maxLength: 60

    InsurancePersonInsuredObject:
      type: object
      required:
        - type
        - description
        - coverages
      properties:
        type:
          description: Tipo do objeto segurado
          type: string
          example: CONTRATO
          enum:
            [
              CONTRATO,
              PROCESSO_ADMINISTRATIVO,
              PROCESSO_JUDICIAL,
              AUTOMOVEL,
              CONDUTOR,
              FROTA,
              PESSOA,
              OUTROS
            ]
        typeAdditionalInfo:
          description: Descricao do tipo do objeto segurado(caso tipo de objeto segurado for outros)
          type: string
          maxLength: 100
        description:
          description: Descricao do objeto segurado
          type: string
          maxLength: 1024
        amount:
          $ref: "#/components/schemas/AmountDetails"
        coverages:
          type: array
          items:
            $ref: "#/components/schemas/InsurancePersonInsuredObjectCoverage"

    InsurancePersonInsuredObjectCoverage:
      type: object
      required:
        - branch
        - code
        - susepProcessNumber
        - LMI
        - termStartDate
        - termEndDate
        - feature
        - type
        - triggerEvent
        - financialType
        - benefitPaymentModality
      properties:
        branch:
          type: string
          maxLength: 4
          example: "0111"
          description: Grupo e Ramo da Cobertura (Conforme regulamentação Susep vigente)
        code:
          description: Codigo da cobertura
          type: string
          example: MORTE
          enum:
            [
              MORTE,
              MORTE_ACIDENTAL,
              INVALIDEZ_TOTAL_POR_ACIDENTE,
              INVALIDEZ_PARCIAL_POR_ACIDENTE,
              INVALIDEZ_TOTAL_E_PARCIAL_POR_ACIDENTE,
              INVALIDEZ_FUNCIONAL_PERMANENTE_TOTAL_POR_DOENCA,
              INVALIDEZ_LABORATIVA_PERMANENTE_TOTAL_POR_DOENCA,
              DESEMPREGO_PERDA_DE_RENDA,
              INCAPACIDADE_TEMPORARIA,
              DOENCA_GRAVE,
              INTERNACAO_HOSPITALAR,
              DESPESAS_MEDICAS_HOSPITALARES_E_ODONTOLOGICAS_BRASIL,
              DESPESAS_MEDICAS_HOSPITALARES_E_ODONTOLOGICAS_EXTERIOR,
              TRANSPLANTE_DE_ORGAOS,
              CIRURGIA,
              TRASLADO_DE_CORPO,
              REGRESSO_SANITARIO,
              TRASLADO_MEDICO,
              CANCELAMENTO_DE_VIAGEM,
              REGRESSO_ANTECIPADO,
              SOBREVIVENCIA,
              OUTRAS
            ]
        description:
          description: Campo de detalhamento do Codigo da cobertura. Obrigatorio quando a opcao escolhida para o mesmo for OUTRAS
          type: string
          maxLength: 500
        internalCode:
          type: string
          maxLength: 500
          description: "Código interno da cobertura da seguradora(obrigatório se houver)"
        susepProcessNumber:
          type: string
          description: Número do processo administrativo da Susep relacionado à cobertura contratada
        LMI:
          description: Limite Maximo de Indenizacao (LMI) ou Capital Segurado (Para seguros de pessoas, deve ser preenchido com o valor do Capital Segurado)
          allOf:
            - $ref: "#/components/schemas/AmountDetails"
        isLMISublimit:
          description: Limite Maximo de Indenização (LMI) seria sublimite (caso aplicavel)?
          type: boolean
          example: false
        termStartDate:
          description: Data de inicio de vigencia da cobertura
          type: string
          format: date
          maxLength: 10
          pattern: '^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$'
          example: "2022-12-31"
        termEndDate:
          description: Data de fim de vigencia da cobertura
          type: string
          format: date
          maxLength: 10
          pattern: '^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$'
          example: "2022-12-31"
        isMainCoverage:
          description: Cobertura Principal
          type: boolean
          example: true
        feature:
          description: Caracteristica da cobertura
          type: string
          enum: [MASSIFICADOS, MASSIFICADOS_MICROSEGUROS, GRANDES_RISCOS]
          example: MASSIFICADOS
        type:
          description: Tipo de cobertura
          type: string
          example: PARAMETRICO          
          enum:
            [
              PARAMETRICO,
              INTERMITENTE,
              REGULAR_COMUM,
              CAPITAL_GLOBAL,
              PARAMETRICO_E_INTERMITENTE
            ]
        grace:
          $ref: "#/components/schemas/GraceInfo"
        insuredDependentsInclusionClause:
          description: Cláusula de Inclusão de Dependentes Segurados (Caso contrato de Funeral, Acidentes Pessoais, Doenças Graves ou Doença Terminal, Eventos Aleatórios, Vida, Desemprego/Perda de Renda e Viagem e Educacional)
          type: string
          example: NAO_HA
          enum: [NAO_HA, FACULTATIVA, AUTOMATICA]
        tripScope:
          description: Abrangência da viagem. (Caso contrato Viagem)
          type: string
          example: NACIONAL
          enum: [NACIONAL, INTERNACIONAL, NACIONAL_E_INTERNACIONAL]
        insuredCapitalType:
          description: Modalidade de capital segurado. (Caso contrato Prestamista - exceto Habitacional e Rural)
          type: string
          example: FIXO
          enum: [FIXO, VINCULADO, VARIAVEL]
        moneylenderType:
          description: Tipo de prestamista. (Caso contrato Prestamista - exceto Habitacional e Rural)
          type: string
          example: BASICO
          enum: [BASICO, EMPRESARIAL, EMPRESARIAL_INTEGRAL]
        creditor:
          type: object
          required:
            - identification
            - identificationType
            - name
          properties:
            identification:
              description: Identificação do credor. (Caso contrato Prestamista - exceto Habitacional e Rural)
              type: string
              maxLength: 60
              pattern: '^\d{1,60}$'
              example: "12345678901"
            identificationType:
              description: Tipo de documento do credor. (Caso contrato Prestamista - exceto Habitacional e Rural)
              type: string
              example: CPF
              enum: [CPF, CNPJ, OUTROS]
            identificationTypeOthers:
              description: Descricao do campo de Tipo de documento do credor quando a opcao escolhida for OUTROS
              type: string
              maxLength: 100
            name:
              description: Nome ou razão social do credor. (Caso contrato Prestamista - exceto Habitacional e Rural)
              type: string
              maxLength: 60
        obligations:
          type: array
          items:
            type: object
            properties:
              type:
                description: Tipo de obrigação. (Caso contrato Prestamista - exceto Habitacional e Rural)
                type: string
                example: EMPRESTIMO
                enum: [EMPRESTIMO, CONSORCIO, CONDOMINIO, OUTROS]
              typeOthers:
                description: Descrição Tipo da Obrigação. (Caso tipo de obrigação OUTROS e caso contrato Prestamista - exceto Habitacional e Rural)
                type: string
                maxLength: 500
        personIdentification:
          description: (Caso contrato Prestamista)
          type: object
          required:
            - identification
            - identificationType
            - name
          properties:
            identification:
              description: Documento de Identificação da Pessoa
              type: string
              maxLength: 60
              example: "12345678900"
            identificationType:
              description: Tipo de Documento da Pessoa
              type: string
              enum: [CPF, CNPJ, OUTROS]
              example: CPF
            identificationTypeOthers:
              description: Descricao do campo de Tipo de Documento da Pessoa quando a opcao escolhida for OUTROS
              type: string
              maxLength: 100
            name:
              description: Nome ou Razão Social da Pessoa
              type: string
              maxLength: 60
              example: Nome Sobrenome
        insuredCapitalPercentage:
          description: Percentual do Capital Segurado. (Caso contrato Prestamista - exceto Habitacional e Rural)
          type: string
          pattern: '^\d{1,3}\.\d{1,9}$'
          example: "20.00"
        dependents:
          description: Segurados dependentes
          type: array
          items:
            type: object
            required:
              - identification
              - identificationType
              - name
            properties:
              identification:
                description: Documento de Identificação (caso a opção "2. Facultativa" seja selecionada no campo "Cláusula de Inclusão de Dependentes Segurados")
                type: string
                maxLength: 60
                pattern: '^\d{1,60}$'
                example: "12345678901234"
              identificationType:
                description: Tipo de Documento da Pessoa
                type: string
                enum: [CPF, CNPJ, OUTROS]
                example: CPF
              identificationTypeOthers:
                description: Descricao do campo de Tipo de Documento da Pessoa quando a opcao escolhida for OUTROS
                type: string
                maxLength: 100
              name:
                description: Nome ou Razão Social da Pessoa
                type: string
                maxLength: 60
                example: Nome Sobrenome
              kinshipDegree:
                description: Grau de Parentesco  (caso preenchido o campo "Cláusula de Inclusão de Dependentes" for igual a 3-Automático) 
                type: string
                example: CONJUGE
                enum:
                  [
                    CONJUGE,
                    PAIS,
                    SOGROS,
                    AVOS,
                    BISAVOS,
                    FILHOS,
                    NETOS,
                    BISNETOS,
                    IRMAOS,
                    TIOS,
                    SOBRINHOS
                  ]
        educationalInstitution:
          description: Referente a seguro educacional
          type: object
          required:
            - identification
            - identificationType
            - name
          properties:
            identification:
              description: Documento de Identificação da Pessoa
              type: string
              maxLength: 60
              example: "12345678901"
            identificationType:
              description: Tipo de Documento da Pessoa
              type: string
              enum: [CNPJ, OUTROS]
              example: CNPJ
            identificationTypeOthers:
              description: Descricao do campo de Tipo de Documento da Pessoa quando a opcao escolhida for OUTROS
              type: string
              maxLength: 100
            name:
              description: Nome ou Razão Social da Pessoa
              type: string
              maxLength: 60
              example: Nome Sobrenome
        biometricTable:
          description: Tabua biometrica, se houver
          type: string
          example: AT49_M
          enum:
            [AT49_M,AT49_F,AT50_M,AT50_F,AT55_M,AT55_F,AT71_M,AT71_F,AT83_M,AT83_F,AT2000_M,AT2000_F,CS041,CSO58,CSO80_M,CSO80_F,CSG_60,GAM71_M,GAM71_F,SGB51,SGB55,SGB71,SGB75,GKF70,GKF80,GKF95,GKM70,GKM80,GKM95,UP_84,IAPB_57,IAPB57_NIVELADA,ZIMMERMANN,WINKLEVOSS,BENTZIEN,EXP_IAPC,IAPB_57_FRACA,IAPB_57_FORTE,ALVARO_VINDAS,TASA_27,MULLER,HUNTER,EB7,UP94_M,AT49,AT2000_FEMALE_SUAVIZADA_10,TGA,AT2000_MALE_SUAVIZADA_10,BR_EMSSB_V2010M,BR_EMSSB_V2010F,SUSEP_IBGE,PERCENTUAL_FIXO,PERPETUA,BR_EMSMT_V2010M,BR_EMSMT_V2010F,BR_EMSSB_V2015M,BR_EMSSB_V2015F,BR_EMSMT_V2015M,BR_EMSMT_V2015F,BR_EMSMT_M,BR_EMSMT_F,BR_EMSSB_M,BR_EMSSB_F,BR_EMSSB_V2021M,BR_EMSSB_V2021F,BR_EMSMT_V2021M,BR_EMSMT_V2021F,OUTRAS]
        pmbacInterestRate:
          description: Taxa de Juros PMBaC (quando houver)
          type: string
          pattern: '^100\.0{1,9}$|^\d{1,2}\.\d{1,9}$'
          example: "10.00"
        incomeInterestRate:
          description: Taxa de Juros Rendas (quando houver)
          type: string
          pattern: '^100\.0{1,9}$|^\d{1,2}\.\d{1,9}$'
          example: "10.00"
        pricingForm:
          type: string
          description: Forma de tarifacao (quando houver)
          enum:
            [POR_IDADE, TAXA_MEDIA, FAIXA_ETARIA, OUTROS]
          example: POR_IDADE
        pricingFormOthers:
          description: Descricao da forma de tarifacao quando for informada a opcao OUTROS
          type: string
        triggerEvent:
          description: Indica o tipo de evento gerador aplicavel a cobertura
          type: string
          enum:
            [INVALIDEZ, MORTE, OUTROS]
          example: INVALIDEZ
        triggerEventOthers:
          description: Descricao do evento gerador quando for informada a opcao OUTROS
          type: string
        financialType:
          type: string
          description: Regime financeiro
          enum:
            [
              REPARTICAO_SIMPLES,
              REPARTICAO_POR_CAPITAIS_DE_COBERTURA,
              CAPITALIZACAO
            ]
          example: REPARTICAO_SIMPLES
        benefitPaymentModality:
          description: Forma de Pagamento do Benefício
          type: string
          enum: [RENDA, UNICO]
          example: RENDA
        coverageUpdateIndex:
          description: Indice de precos referente a atualizacao monetaria anual do valor da cobertura
          type: string
          enum:
            [IPC-FGV, IGP-DI-FGV, IPCA-IBGE, IGPM-FGV, INPC-IBGE, TR, OUTROS]
          example: IGPM-FGV
        coverageUpdateIndexOthers:
          description: Descricao do Indice de precos referente a atualizacao monetaria anual do valor da cobertura quando for informada a opcao OUTROS
          type: string
        periodicityValue:
          description: Periodicidade de Atualizacao da cobertura (quando houver)
          type: integer
          example: 5
        periodicity:
          description: Unidade da Periodicidade de Atualizacao da Cobertura
          type: string
          enum: [DIA, MES, ANO]
          example: DIA
        indexLag:
          description: Defasagem do indice de precos aplicado na atualizacao da renda (em meses)
          type: integer
          example: 5
        pmbacMonetaryUpdateIndex:
          description: |
            Indice de Precos Garantido PMBaC
            Obrigatorio em caso de regime financeiro de Capitalizacao
          type: string
          enum: [IPC-FGV, IGP-DI-FGV, IPCA-IBGE, IGPM-FGV, INPC-IBGE, TR, OUTROS]
          example: IGPM-FGV
        pmbacMonetaryUpdateIndexOthers:
          description: Descricao do Indice de Precos Garantido PMBaC quando for informada a opcao OUTROS
          type: string
        pmbacIndexLag:
          description: |
            Defasagem do Indice PMBaC (em meses)
            Obrigatorio em caso de regime financeiro de Capitalizacao
          type: integer
          example: 5

    InsurancePersonCoverage:
      type: object
      required:
        - branch
        - code
      minProperties: 3
      properties:
        branch:
          description: Grupo e ramo da cobertura
          type: string
          maxLength: 4
          example: "0111"
        code:
          type: string
          description: Codigo da cobertura
          example: MORTE
          enum:
            [
              MORTE,
              MORTE_ACIDENTAL,
              INVALIDEZ_TOTAL_POR_ACIDENTE,
              INVALIDEZ_PARCIAL_POR_ACIDENTE,
              INVALIDEZ_TOTAL_E_PARCIAL_POR_ACIDENTE,
              INVALIDEZ_FUNCIONAL_PERMANENTE_TOTAL_POR_DOENCA,
              INVALIDEZ_LABORATIVA_PERMANENTE_TOTAL_POR_DOENCA,
              DESEMPREGO_PERDA_DE_RENDA,
              INCAPACIDADE_TEMPORARIA,
              DOENCA_GRAVE,
              INTERNACAO_HOSPITALAR,
              DESPESAS_MEDICAS_HOSPITALARES_E_ODONTOLOGICAS_BRASIL,
              DESPESAS_MEDICAS_HOSPITALARES_E_ODONTOLOGICAS_EXTERIOR,
              TRANSPLANTE_DE_ORGAOS,
              CIRURGIA,
              TRASLADO_DE_CORPO,
              REGRESSO_SANITARIO,
              TRASLADO_MEDICO,
              CANCELAMENTO_DE_VIAGEM,
              REGRESSO_ANTECIPADO,
              SOBREVIVENCIA,
              OUTRAS
            ]
        description:
          description: Campo de detalhamento do Codigo da Cobertura quando a opcao escolhida for OUTRAS
          type: string
          maxLength: 500
        deductible:
          $ref: "#/components/schemas/Deductible"
        POS:
          $ref: "#/components/schemas/POS"

    Deductible:
      type: object
      description: Informações de franquia
      required:
        - type
        - amount
        - period
        - periodicity
        - periodStartDate
        - periodEndDate
        - description
      properties:
        type:
          description: Tipo de Franquia
          type: string
          enum: [REDUZIDA, NORMAL, MAJORADA, DEDUTIVEL, OUTROS]
          example: DEDUTIVEL
        typeAdditionalInfo:
          description: Campo de detalhamento do Tipo de Franquia quando a opcao escolhida for OUTROS
          type: string
          maxLength: 500
        amount:
          description: Valor da franquia
          allOf:
            - $ref: "#/components/schemas/AmountDetails"
        period:
          description: Prazo da Franquia
          type: integer
          maxLength: 5
          example: 10
        periodicity:
          description: Periodicidade da Franquia
          type: string
          enum: [DIA, MES, ANO]
          example: DIA
        periodCountingMethod:
          description: Indicador de Dias Uteis ou Corridos (Caso aplicavel)
          type: string
          enum: [DIAS_UTEIS, DIAS_CORRIDOS]
          example: DIAS_UTEIS
        periodStartDate:
          description: Data de Inicio da Franquia
          type: string
          format: date
          maxLength: 10
          pattern: '^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$'
          example: "2022-05-16"
        periodEndDate:
          description: Data de Fim da Franquia
          type: string
          format: date
          maxLength: 10
          pattern: '^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$'
          example: "2022-05-17"
        description:
          description: Descricao da Franquia
          type: string
          maxLength: 60
          example: Franquia de exemplo

    POS:
      type: object
      description: Informações de franquia
      required:
        - applicationType
      properties:
        applicationType:
          description: Forma de Aplicacao do POS
          type: string
          enum: [VALOR, PERCENTUAL, OUTROS]
          example: VALOR
        description:
          description: Descricao do POS (caso Forma de aplicacao do POS for Outros)
          type: string
          maxLength: 60
          example: "Descricao de exemplo"
        minValue:
          description: Valor minimo do POS (caso aplicavel)
          allOf:
            - $ref: "#/components/schemas/AmountDetails"
        maxValue:
          description: Valor maximo do POS (caso aplicavel)
          allOf:
            - $ref: "#/components/schemas/AmountDetails"
        percentage:
          description: Valor Percentual do POS
          allOf:
            - $ref: '#/components/schemas/AmountDetails'
        valueOthers: 
          description: Valor do POS
          allOf:
            - $ref: '#/components/schemas/AmountDetails'

    Coinsurer:
      type: object
      required:
        - identification
        - cededPercentage
      properties:
        identification:
          description: Identificacao da congenere, cessionario do cosseguro. Obrigatorio quando ha cosseguro.
          type: string
          maxLength: 60
        cededPercentage:
          description: Percentual cedido para a congenere para contratos de cosseguro cedido. Obrigatorio quando ha cosseguro
          type: string
          pattern: '^100\.0{1,9}$|^\d{1,2}\.\d{1,9}$'
          example: "10.00"

    ResponseInsurancePersonPremium:
      type: object
      required:
        - data
        - links
        - meta
      properties:
        data:
          $ref: "#/components/schemas/InsurancePersonPremium"
        links:
          $ref: "#/components/schemas/Links"
        meta:
          $ref: "#/components/schemas/Meta"

    InsurancePersonPremium:
      type: object
      required:
        - amount
        - paymentsQuantity
        - coverages
        - payments
      properties:
        amount:
          description: Valor Total do Premio (Exceto para seguros de pessoas cuja periodicidade do Premio seja periodica)
          allOf:
            - $ref: "#/components/schemas/AmountDetails"
        paymentsQuantity:
          description: Quantidade de parcelas do premio do contrato (Exceto para seguros de pessoas cuja periodicidade do Premio seja periodica)
          type: integer
          maxLength: 3
          example: 4
        coverages:
          type: array
          items:
            $ref: "#/components/schemas/InsurancePersonPremiumCoverage"
        payments:
          type: array
          items:
            $ref: "#/components/schemas/Payment"

    InsurancePersonPremiumCoverage:
      type: object
      required:
        - branch
        - code
        - premiumAmount
      properties:
        branch:
          description: Grupo e ramo da cobertura
          type: string
          maxLength: 4
          example: "0111"
        code:
          type: string
          description: Codigo da cobertura
          example: MORTE
          enum:
            [
              MORTE,
              MORTE_ACIDENTAL,
              INVALIDEZ_TOTAL_POR_ACIDENTE,
              INVALIDEZ_PARCIAL_POR_ACIDENTE,
              INVALIDEZ_TOTAL_E_PARCIAL_POR_ACIDENTE,
              INVALIDEZ_FUNCIONAL_PERMANENTE_TOTAL_POR_DOENCA,
              INVALIDEZ_LABORATIVA_PERMANENTE_TOTAL_POR_DOENCA,
              DESEMPREGO_PERDA_DE_RENDA,
              INCAPACIDADE_TEMPORARIA,
              DOENCA_GRAVE,
              INTERNACAO_HOSPITALAR,
              DESPESAS_MEDICAS_HOSPITALARES_E_ODONTOLOGICAS_BRASIL,
              DESPESAS_MEDICAS_HOSPITALARES_E_ODONTOLOGICAS_EXTERIOR,
              TRANSPLANTE_DE_ORGAOS,
              CIRURGIA,
              TRASLADO_DE_CORPO,
              REGRESSO_SANITARIO,
              TRASLADO_MEDICO,
              CANCELAMENTO_DE_VIAGEM,
              REGRESSO_ANTECIPADO,
              SOBREVIVENCIA,
              OUTRAS
            ]
        description:
          description: Campo de detalhamento do Codigo da cobertura. Obrigatorio quando a opcao escolhida para o mesmo for OUTRAS
          type: string
          maxLength: 500
        premiumAmount:
          $ref: "#/components/schemas/AmountDetails"

    Payment:
      type: object
      description: Historico de Movimentos de Premios (Para seguros de pessoas com vigencia acima de 12 meses, limitar o historico aos ultimos 12 meses)
      required:
        - movementDate
        - movementType
        - movementPaymentsNumber
        - amount
        - maturityDate
      properties:
        movementDate:
          description: Data do movimento de premio
          type: string
          format: date
          maxLength: 10
          pattern: '^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$'
          example: "2022-12-31"
        movementType:
          description: Tipo do Movimento
          type: string
          enum: [LIQUIDACAO_DE_PREMIO,
                LIQUIDACAO_DE_RESTITUICAO_DE_PREMIO,
                LIQUIDACAO_DE_CUSTO_DE_AQUISICAO,
                LIQUIDACAO_DE_RESTITUICAO_DE_CUSTO_DE_AQUISICAO,
                ESTORNO_DE_PREMIO,
                ESTORNO_DE_RESTITUICAO_DE_PREMIO,
                ESTORNO_DE_CUSTO_DE_AQUISICAO,
                EMISSAO_DE_PREMIO_SEM_ENDOSSO,
                CANCELAMENTO_DE_PARCELA,
                EMISSAO_DE_RESTITUICAO_DE_PREMIO_SEM_ENDOSSO,
                REABERTURA_DE_PARCELA,
                BAIXA_POR_PERDA,
                CANCELAMENTO_DE_PREMIO_E_PARCELA_SEM_ENDOSSO,
                COMPENSACAO_FINANCEIRA]
          example: LIQUIDACAO_DE_PREMIO
        movementOrigin:
          description: Origem do Movimento. Obrigatorio caso Tipo de Movimento for LIQUIDACAO_DE_PREMIO ou ESTORNO_DE_PREMIO
          type: string
          enum:
            [EMISSAO_DIRETA,
            EMISSAO_ACEITA_DE_COSSEGURO,
            EMISSAO_CEDIDA_DE_COSSEGURO]
          example: EMISSAO_DIRETA
        movementPaymentsNumber:
          description: Identificador da parcela do movimento
          type: integer
          maxLength: 3
        amount:
          description: Valor e moeda da parcela
          allOf:
            - $ref: "#/components/schemas/AmountDetails"
        maturityDate:
          description: Data de Vencimento da Parcela
          type: string
          format: date
          maxLength: 10
          pattern: '^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$'
          example: "2022-12-31"
        tellerId:
          description: Documento do Pagador/Recebedor. Obrigatorio caso Tipo de Movimento for LIQUIDACAO_DE_PREMIO ou LIQUIDACAO_DE_CUSTO_DE_AQUISICAO
          type: string
          maxLength: 1024
        tellerIdType:
          description: Tipo do Documento do Pagador/Recebedor. Obrigatorio caso Tipo de Movimento for LIQUIDACAO_DE_PREMIO ou LIQUIDACAO_DE_CUSTO_DE_AQUISICAO
          type: string
          enum: [CPF, CNPJ, OUTROS]
          example: CPF
        tellerIdTypeOthers:
          description: Descricao do Tipo de Documento quando for informada a opcao OUTROS
          type: string
          maxLength: 100
        tellerName:
          description: Nome ou Razao Social do Pagador/Recebedor. Obrigatorio caso Tipo de Movimento for LIQUIDACAO_DE_PREMIO ou LIQUIDACAO_DE_CUSTO_DE_AQUISICAO
          type: string
          maxLength: 100
        financialInstitutionCode:
          description: Codigo da Instituicao Financeiro do Pagamento. Obrigatorio caso Tipo de Movimento for LIQUIDACAO_DE_PREMIO ou LIQUIDACAO_DE_CUSTO_DE_AQUISICAO
          type: string
          maxLength: 100
        paymentType:
          description: Meio de Pagamento. Obrigatorio caso Tipo de Movimento for LIQUIDACAO_DE_PREMIO ou LIQUIDACAO_DE_CUSTO_DE_AQUISICAO
          type: string
          enum:
            [BOLETO,
            TED,
            TEF,
            CARTAO,
            DOC,
            CHEQUE,
            DESCONTO_EM_FOLHA,
            COMUNICABILIDADE,
            PIX,
            DINHEIRO_EM_ESPECIE,
            OUTROS]
          example: BOLETO
        paymentTypeOthers:
          description: Descricao do Meio de Pagamento quando for informada a opcao OUTROS
          type: string

    ResponseInsurancePersonClaims:
      type: object
      required:
        - data
        - links
        - meta
      properties:
        data:
          type: array
          items:
            oneOf: 
              - $ref: "#/components/schemas/InsurancePersonClaim"
              - $ref: "#/components/schemas/InsurancePersonClaimRecipient"
          minItems: 0
        links:
          $ref: "#/components/schemas/Links"
        meta:
          $ref: "#/components/schemas/Meta"
    InsurancePersonClaim:
      type: object
      required:
        - identification
        - status
        - statusAlterationDate
        - occurrenceDate
        - warningDate
        - warningRegisterDate
        - amount
      properties:
        identification:
          description: Identificador do processo de sinistro
          type: string
          maxLength: 50
        documentationDeliveryDate:
          description: Data de entrega da documentacao completa
          type: string
          format: date
          maxLength: 10
          example: "2022-12-31"
        status:
          description: Status do sinistro / evento gerador
          type: string
          enum:
            [
              ABERTO,
              ENCERRADO_COM_INDENIZACAO,
              ENCERRADO_SEM_INDENIZACAO,
              REABERTO,
              CANCELADO_POR_ERRO_OPERACIONAL,
              AVALIACAO_INICIAL,
              ENCERRADO_COM_PAGAMENTO_UNICO_BENEFICIO,
              ENCERRADO_COM_CONCESSAO_DE_RENDA_BENEFICIO,
              ENCERRADO_INDEFERIDO_BENEFICIO
            ]
          example: ABERTO
        statusAlterationDate:
          description: Data de alteracao do status do sinistro
          type: string
          format: date
          maxLength: 10
          pattern: '^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$'
          example: "2022-12-31"
        occurrenceDate:
          description: Data de ocorrencia do sinistro
          type: string
          format: date
          maxLength: 10
          pattern: '^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$'
          example: "2022-12-31"
        warningDate:
          description: Data de aviso do sinistro
          type: string
          format: date
          maxLength: 10
          pattern: '^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$'
          example: "2022-12-31"
        warningRegisterDate:
          description: Data do Registro de Aviso a Seguradora
          type: string
          format: date
          maxLength: 10
          pattern: '^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$'
          example: "2022-12-31"
        thirdPartyClaimDate:
          description: Data de reclamacao do terceiro
          type: string
          format: date
          maxLength: 10
          pattern: '^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$'
          example: "2022-12-31"
        amount:
          description: |
            Valor total bruto do sinistro considerando todos os movimentos e suas reavaliações.
            Não devem ser considerados valores de deduções (por exemplo, redutores e
            ressarcimento salvado)
          allOf:
            - $ref: "#/components/schemas/AmountDetails"
        denialJustification:
          description: Justificativa da Negativa (Caso Status do Sinistro for ENCERRADO_SEM_INDENIZACAO
          type: string
          example: RISCO_EXCLUIDO
          enum:
            [
              RISCO_EXCLUIDO,
              RISCO_AGRAVADO,
              SEM_DOCUMENTACAO,
              DOCUMENTACAO_INCOMPLETA,
              PRESCRICAO,
              FORA_COBERTURA,
              OUTROS
            ]
        denialJustificationDescription:
          description: Descricao da Justificativa da Negativa (Caso Justificativa da Negativa for OUTROS
          type: string
          maxLength: 100
        coverages:
          type: array
          items:
            $ref: "#/components/schemas/InsurancePersonClaimCoverage"
        recipient:
          type: array
          items:
            $ref: '#/components/schemas/InsurancePersonClaimRecipient'

    InsurancePersonClaimRecipient:
      type: object
      required:
        - recipientIdentification
        - recipientIdentificationType
        - recipientName
        - recipientClassification
        - recipientBirthDate
        - incomeModality
        - incomeValueUniquePayment
        - recipientNumber
        - concessionStartDate
        - monetaryUpdateIndex
        - lastUpdateDate
      properties:
        recipientIdentification:
          description: Documento de identificação do beneficiário da renda concedida
          type: string
          maxLength: 60
          example: "12345678901"
        recipientIdentificationType:
          description: Tipo de Documento da Pessoa
          type: string
          enum: [CPF, RG, PASSAPORTE, OUTROS]
          example: CPF
        recipientIdTypeOthers:
          description: Descricao do campo de Tipo de Documento da Pessoa quando a opcao escolhida for OUTROS
          type: string
          maxLength: 100
        recipientName:
          description: Nome do beneficiário da renda concedida
          type: string
          maxLength: 60
          example: Nome Sobrenome
        recipientClassification:
          description: Classificacao do Beneficiario
          type: string
          enum: [SEGURADO, CONJUGE, FILHO_MENOR_DE_IDADE, BENEFICIARIO_INDICADO]
          example: SEGURADO
        recipientBirthDate:
          description: Data de nascimento do beneficiário da renda concedida
          type: string
          format: date
          maxLength: 10
          pattern: '^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$'
          example: "1990-12-31"
        incomeModality:
          type: string
          description: Tipo de renda concedida
          example: RENDA_VITALICIA
          enum:
            [
              PAGAMENTO_UNICO,
              RENDA_PRAZO_CERTO,
              RENDA_TEMPORARIA,
              RENDA_TEMPORARIA_REVERSIVEL,
              RENDA_TEMPORARIA_PRAZO_MINIMO_GARANTIDO,
              RENDA_TEMPORARIA_REVERSIVEL_PRAZO_MINIMO_GARANTIDO,
              RENDA_VITALICIA,
              RENDA_VITALICIA_REVERSIVEL_BENEFICIARIO_INDICADO,
              RENDA_VITALICIA_REVERSIVEL_CONJUGE_CONTINUIDADE_MENORES,
              RENDA_VITALICIA_PRAZO_MINIMO_GARANTIDO,
              RENDA_VITALICIA_REVERSIVEL_PRAZO_MINIMO_GARANTIDO,
              RENDA_VITALICIA_REVERSIVEL_CONJUGE,
              OUTROS
            ]
        incomeModalityOthers:
          type: string
          description: Descrição do tipo de renda quando outros
          example: "Outros"
        incomeReversed:
          type: boolean
          description: |
            Declara se já houve a reversão da renda do benefício concedido do segurado para o cônjuge, beneficiário indicado ou filho menor
            (para alguns Tipos de Renda verificar manual de escopo de dados)
          example: true
        incomeValueUniquePayment:
          $ref: "#/components/schemas/AmountDetails"
        incomeTerm:
          type: string
          description: |
            Prazo pagamento da parcela ou da renda atuarial ou financeira do benefício concedido
            (para alguns Tipos de Renda verificar manual de escopo de dados)
        recipientNumber:
          type: integer
          description: Número de benefícios a serem recebidos por ano
          example: 3
        concessionStartDate:
          description: Data de início de concessão do benefício
          type: string
          format: date
          maxLength: 10
          pattern: '^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$'
          example: "2020-12-31"
        monetaryUpdateIndex:
          type: string
          description: Índice de preços referente à atualização monetária anual do valor da renda
          enum:
            [IPC-FGV, IGP-DI-FGV, IPCA-IBGE, IGPM-FGV, INPC-IBGE, TR, OUTROS]
          example: IGPM-FGV
        monetaryUpdateIndexOthers:
          description: Descrição do Índice de preços referente à atualização monetária anual do valor da renda quando for informada a opção OUTROS
          type: string
          example: OUTROS
        lastUpdateDate:
          description: Data da última atualização do benefício
          type: string
          format: date
          maxLength: 10
          pattern: '^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$'
          example: "2020-12-31"
    InsurancePersonClaimCoverage:
      type: object
      required:
        - branch
        - code
      properties:
        insuredObjectId:
          description: Identificador do Objeto Segurado (Caso aplicavel)
          type: string
          maxLength: 100
        branch:
          description: Grupo e ramo da cobertura
          type: string
          maxLength: 4
          example: "0111"
        code:
          type: string
          description: Codigo da cobertura
          example: MORTE
          enum:
            [
              MORTE,
              MORTE_ACIDENTAL,
              INVALIDEZ_TOTAL_POR_ACIDENTE,
              INVALIDEZ_PARCIAL_POR_ACIDENTE,
              INVALIDEZ_TOTAL_E_PARCIAL_POR_ACIDENTE,
              INVALIDEZ_FUNCIONAL_PERMANENTE_TOTAL_POR_DOENCA,
              INVALIDEZ_LABORATIVA_PERMANENTE_TOTAL_POR_DOENCA,
              DESEMPREGO_PERDA_DE_RENDA,
              INCAPACIDADE_TEMPORARIA,
              DOENCA_GRAVE,
              INTERNACAO_HOSPITALAR,
              DESPESAS_MEDICAS_HOSPITALARES_E_ODONTOLOGICAS_BRASIL,
              DESPESAS_MEDICAS_HOSPITALARES_E_ODONTOLOGICAS_EXTERIOR,
              TRANSPLANTE_DE_ORGAOS,
              CIRURGIA,
              TRASLADO_DE_CORPO,
              REGRESSO_SANITARIO,
              TRASLADO_MEDICO,
              CANCELAMENTO_DE_VIAGEM,
              REGRESSO_ANTECIPADO,
              SOBREVIVENCIA,
              OUTRAS
            ]
        description:
          description: Campo de detalhamento do Codigo da cobertura. Obrigatorio quando a opcao escolhida para o mesmo for OUTRAS
          type: string
          maxLength: 500
        warningDate:
          description: Data de Aviso do Sinistro por Cobertura (Caso aplicavel)
          type: string
          format: date
          maxLength: 10
          pattern: '^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$'
          example: "2022-12-31"
        thirdPartyClaimDate:
          description: Data de Reclamacao do Terceiro por Cobertura (Caso aplicavel)
          type: string
          format: date
          maxLength: 10
          pattern: '^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])$'
          example: "2022-12-31"
    AmountDetails:
        type: object
        description: Detalhes de valores/limites
        required:
          - amount
          - unitType
        properties:
          amount:
            type: string
            pattern: '^(^(100\.\00|\d{1,2}\.\d{2})$|^(\d{1,6})$|^(\d{1,15}\.\d{2})$)$'
            description: |
              Valor.
              Exemplos de preenchimento do campo:

              PORCENTAGEM: 90.85
                              
              MONETARIO: 62500.67

              OUTROS: 1000 (Exemplo de outro tipo: horas)
          unitType:
            description: "Tipo da unidade referente ao valor inserido no campo Amount"
            type: string
            enum: [PORCENTAGEM, MONETARIO, OUTROS]
          unitTypeOthers:
            description: Caso o tipo do valor informado for "Outros", esse campo deve ser preenchido com o tipo do valor, obrigatoriamente.
            type: string
            example: Horas
          unit:
            description: Preenchimento obrigatório em caso de valor "MONETARIO" ser informado no campo "unitType"
            type: object
            required:
              - code
              - description
            properties:
              code:
                type: string
                enum: [ د.إ , Af, L,  Դ,  Kz, $,  ƒ,  ман,  КМ, ৳,  лв, ب.د,  ₣,  Bs.,  R$, P,  Br, ¥,  ₡,  Kč, kr, د.ج,  £,  
                        Nfk,  N/A,  €,  ლ,  ₵,  D,  Q,  Kn, G,  Ft, Rp, ₪,  ₹,  ع.د,  ﷼,  Sh, ៛,  ₩,  د.ك,  〒,  ₭,  ل.ل,  Rs,
                        ل.د,  د.م., ден,  K,  ₮,  UM, ₨,  ރ., MK, RM, MTn,  ₦,  C$, ر.ع., B/.,  S/.,  ₱,  zł, ₲,  ر.ق,  din,  
                        р., ر.س,  Le, Db, ل.س,  ฿,  ЅМ, m,  د.ت,  T$, ₤,  ₴,  Bs F, ₫,  Vt, T,  R,  ZK ]
                example: R$
              description:
                type: string
                description: Moeda da Parcela, de acordo com ISO-4217.
                example: BRL
                enum: [ AFN,AFA,ALL,ALK,DZD,USD,EUR,ADP,ESP,FRF,AOA,AOK,AON,AOR,XCD,ARS,ARA,ARP,ARY,AMD,RUR,AWG,AUD,ATS,AZN,AYM,AZM,BSD,BHD,BDT,BBD,BYN,BYB,BYR,BEC,BEF,BEL,BZD,XOF,BMD,INR,BTN,BOP,BOB,BOV,BAM,BAD,BWP,NOK,BRL,BRB,BRC,BRE,BRN,BRR,BND,BGN,BGJ,BGK,BGL,BUK,BIF,CVE,KHR,XAF,CAD,KYD,CLP,CLF,CNY,COP,COU,KMF,CDF,NZD,CRC,HRK,HRD,CUP,CUC,ANG,CYP,CZK,CSJ,CSK,DKK,DJF,DOP,ECS,ECV,EGP,SVC,GQE,ERN,EEK,SZL,ETB,XEU,FKP,FJD,FIM,XPF,GMD,GEL,GEK,DDM,DEM,GHS,GHC,GHP,GIP,GRD,GTQ,GBP,GNF,GNE,GNS,GWE,GWP,GYD,HTG,ITL,HNL,HKD,HUF,ISK,ISJ,IDR,XDR,IRR,IQD,IEP,ILS,ILP,ILR,JMD,JPY,JOD,KZT,KES,KPW,KRW,KWD,KGS,LAJ,LAK,LVL,LVR,LBP,LSL,ZAR,LSM,ZAL,LRD,LYD,CHF,LTL,LTT,LUC,LUF,LUL,MOP,MGA,MGF,MWK,MYR,MVR,MVQ,MLF,MTL,MTP,MRU,MRO,MUR,XUA,MXN,MXV,MXP,MDL,MNT,MAD,MZN,MZE,MZM,MMK,NAD,NPR,NLG,NIO,NIC,NGN,MKD,OMR,PKR,PAB,PGK,PYG,PEN,PEH,PEI,PES,PHP,PLN,PLZ,PTE,QAR,RON,ROK,ROL,RUB,RWF,SHP,WST,STN,STD,SAR,RSD,CSD,SCR,SLL,SGD,XSU,SKK,SIT,SBD,SOS,SSP,SDG,RHD,ESA,ESB,LKR,SDD,SDP,SRD,SRG,SEK,CHE,CHW,CHC,SYP,TWD,TJS,TJR,TZS,THB,TPE,TOP,TTD,TND,TRY,TRL,TMT,TMM,UGX,UGS,UGW,UAH,UAK,SUR,AED,USS,USN,UYU,UYI,UYW,UYN,UYP,UZS,VUV,VEB,VEF,VES,VND,VNC,YER,YDD,YUD,YUM,YUN,ZRN,ZRZ,ZMW,ZMK,ZWL,ZWC,ZWD,ZWN,ZWR,XBA,XFO,XBB,XRE,XBC,XBD,XFU,XTS,XXX,XAU,XPD,XPT,XAG ]
    
    Links:
      type: object
      properties:
        self:
          type: string
          description: URL da página atualmente requisitada
          pattern: ^(https:\/\/)(.*?)(\/open-insurance\/insurance-person\/v\d+)(\/insurance-person.*)?$
          example: "https://api.organizacao.com.br/open-insurance/insurance-person/v1/insurance-person"
        first:
          type: string
          description: URL da primeira página de registros
          pattern: ^(https:\/\/)(.*?)(\/open-insurance\/insurance-person\/v\d+)(\/insurance-person.*)?$
          example: "https://api.organizacao.com.br/open-insurance/insurance-person/v1/insurance-person"
        prev:
          type: string
          description: URL da página anterior de registros
          pattern: ^(https:\/\/)(.*?)(\/open-insurance\/insurance-person\/v\d+)(\/insurance-person.*)?$
          example: "https://api.organizacao.com.br/open-insurance/insurance-person/v1/insurance-person"
        next:
          type: string
          description: URL da próxima página de registros
          pattern: ^(https:\/\/)(.*?)(\/open-insurance\/insurance-person\/v\d+)(\/insurance-person.*)?$
          example: "https://api.organizacao.com.br/open-insurance/insurance-person/v1/insurance-person"
        last:
          type: string
          description: URL da última página de registros
          pattern: ^(https:\/\/)(.*?)(\/open-insurance\/insurance-person\/v\d+)(\/insurance-person.*)?$
          example: "https://api.organizacao.com.br/open-insurance/insurance-person/v1/insurance-person"

    Meta:
      type: object
      properties:
        totalRecords:
          type: integer
          description: Total de registros encontrados
          example: 10
        totalPages:
          type: integer
          description: Total de páginas para os registros encontrados
          example: 1
      required:
        - totalRecords
        - totalPages

    ResponseError:
      type: object
      required:
        - errors
      properties:
        errors:
          type: array
          minItems: 1
          maxItems: 13
          items:
            type: object
            required:
              - code
              - title
              - detail
              - requestDateTime
            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
                maxLength: 255
              detail:
                description: Descrição legível por humanos deste erro específico
                type: string
                maxLength: 2048
              requestDateTime:
                description: "Data e hora da consulta, conforme especificação RFC-3339, formato UTC."
                type: string
                maxLength: 20
                pattern: ^(\d{4})-(1[0-2]|0[1-9])-(3[01]|[12][0-9]|0[1-9])T(?:[01]\d|2[0123]):(?:[012345]\d):(?:[012345]\d)Z$
                format: date-time
                example: "2021-08-20T08:30:00Z"
            additionalProperties: false
        meta:
          $ref: "#/components/schemas/Meta"
      additionalProperties: false
    XFapiInteractionId:
      type: string
      pattern: '^[a-zA-Z0-9][a-zA-Z0-9\-]{0,99}$'
      maxLength: 100
      description: 'Um UID [RFC4122](https://tools.ietf.org/html/rfc4122) usado como um ID de correlação. Se fornecido, o transmissor deve "reproduzir" esse valor no cabeçalho de resposta.'
    XV:
      type: string
      description: |
        Versão do endpoint da API requisitado pelo cliente. O titular dos dados deve 
        responder com a versão mais alta suportada entre x-min-v e x-v. Se o valor de 
        x-min-v for igual ou maior que o valor de x-v, o cabeçalho x-min-v deve ser 
        tratado como ausente. Se todas as versões solicitadas não forem suportadas, 
        o titular dos dados deve responder com o código de status 406 Not Acceptable.
  parameters:
    policyId:
      name: policyId
      in: path
      required: true
      schema:
        type: string
        maxLength: 60
    Authorization:
      name: Authorization
      in: header
      description: Cabeçalho HTTP padrão. Permite que as credenciais sejam fornecidas dependendo do tipo de recurso solicitado.
      required: true
      schema:
        type: string
        pattern: '[\w\W\s]*'
        maxLength: 2048
    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
        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
    xCustomerUserAgent:
      name: x-customer-user-agent
      in: header
      description: Indica o user-agent que o usuário utiliza.
      required: false
      schema:
        type: string
        pattern: '[\w\W\s]*'
        minLength: 1
        maxLength: 100
    xFapiAuthDate:
      name: x-fapi-auth-date
      in: header
      description: "Data em que o usuário logou pela última vez com o receptor. Representada de acordo com a [RFC7231](https://tools.ietf.org/html/rfc7231). Exemplo: Sun, 10 Sep 2017 19:43:31 UTC"
      required: false
      schema:
        type: string
        pattern: '^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), \d{2} (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{4} \d{2}:\d{2}:\d{2} (GMT|UTC)$'
        minLength: 29
        maxLength: 29
    xFapiCustomerIpAddress:
      name: x-fapi-customer-ip-address
      in: header
      description: O endereço IP do usuário se estiver atualmente logado com o receptor.
      required: false
      schema:
        type: string
        pattern: '[\w\W\s]*'
        minLength: 1
        maxLength: 100
    xFapiInteractionId:
      name: x-fapi-interaction-id
      in: header
      description: 'Um UID [RFC4122](https://tools.ietf.org/html/rfc4122) usado como um ID de correlação. Se fornecido, o transmissor deve "reproduzir" esse valor no cabeçalho de resposta.'
      required: true
      schema:
        type: string
        pattern: '^[a-zA-Z0-9][a-zA-Z0-9\-]{0,99}$'
        minLength: 1
        maxLength: 100
    x-v:
      name: x-v
      in: header
      description: |
        Versão do endpoint da API requisitado pelo cliente. O titular dos dados deve 
        responder com a versão mais alta suportada entre x-min-v e x-v. Se o valor de 
        x-min-v for igual ou maior que o valor de x-v, o cabeçalho x-min-v deve ser 
        tratado como ausente. Se todas as versões solicitadas não forem suportadas, 
        o titular dos dados deve responder com o código de status 406 Not Acceptable.
      required: false
      schema:
        type: string
      example: '2.1.3'
    x-min-v:
      name: x-min-v
      in: header
      description: |
        Versão mínima do endpoint da API requisitado pelo cliente. O detentor dos dados 
        deve responder com a versão mais alta suportada entre x-min-v e x-v. Se todas as 
        versões solicitadas não forem suportadas, o titular dos dados deve responder com 
        um código de status 406 Not Acceptable.
      required: false
      schema:
        type: string
      example: '2.0.0'
  securitySchemes:
    OpenId:
      type: openIdConnect
      openIdConnectUrl: "https://auth.mockbank.poc.raidiam.io/.well-known/openid-configuration"
    OAuth2Security:
      type: oauth2
      description: Fluxo OAuth necessário para que a receptora tenha acesso aos dados na instituição transmissora. Inclui o processo de redirecionamento e autenticação do usuário a que se referem os dados.
      flows:
        authorizationCode:
          authorizationUrl: "https://authserver.example/authorization"
          tokenUrl: "https://authserver.example/token"
          scopes:
            insurance-person: Escopo necessário para acesso à API. O controle dos endpoints específicos é feito via permissions.

  responses:
    OKResponseInsurancePerson:
      description: Dados de ResponseInsurancePerson obtidos com sucesso
      headers:
        x-fapi-interaction-id:
          schema:
            $ref: "#/components/schemas/XFapiInteractionId"
        x-v: 
          schema:
            $ref: '#/components/schemas/XV'
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ResponseInsurancePerson"
    OKResponseInsurancePersonPolicyInfo:
      description: Dados de ResponseInsurancePersonPolicyInfo obtidos com sucesso
      headers:
        x-fapi-interaction-id:
          schema:
            $ref: "#/components/schemas/XFapiInteractionId"
        x-v: 
          schema:
            $ref: '#/components/schemas/XV'
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ResponseInsurancePersonPolicyInfo"
    OKResponseInsurancePersonClaims:
      description: Dados de ResponseInsurancePersonClaims obtidos com sucesso
      headers:
        x-fapi-interaction-id:
          schema:
            $ref: "#/components/schemas/XFapiInteractionId"
        x-v: 
          schema:
            $ref: '#/components/schemas/XV'
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ResponseInsurancePersonClaims"
    OKResponseInsurancePersonPremium:
      description: Dados de ResponseInsurancePersonPremium obtidos com sucesso
      headers:
        x-fapi-interaction-id:
          schema:
            $ref: "#/components/schemas/XFapiInteractionId"
        x-v: 
          schema:
            $ref: '#/components/schemas/XV'
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ResponseInsurancePersonPremium"
    UnprocessableEntity:
      description: "O servidor entende o tipo de conteúdo da entidade da requisição, e a sintaxe da requisição esta correta, mas não foi possível processar as instruções presente."
      content:
        application/json; charset=utf-8:
          schema:
            $ref: "#/components/schemas/ResponseError"
    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"
    Forbidden:
      description: O token tem escopo incorreto ou uma política de segurança foi violada
      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"
    NotAcceptable:
      description: A solicitação continha um cabeçalho Accept diferente dos tipos de mídia permitidos ou um conjunto de caracteres diferente de UTF-8
      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 global de requisições concorrentes foi atingido"
      content:
        application/json; charset=utf-8:
          schema:
            $ref: "#/components/schemas/ResponseError"
    Unauthorized:
      description: Cabeçalho de autenticação ausente/inválido ou token inválido
      content:
        application/json; charset=utf-8:
          schema:
            $ref: "#/components/schemas/ResponseError"