openapi: 3.0.3

info:
  title: 'FIS V2 - Simulacion'
  description: "<p>FIS Financial Inclusion Score, desarrollado por Círculo de Crédito, permite evaluar a personas sin historial crediticio. Su propósito es promover la inclusión financiera al calificar al 100% de esta población.<br/><br/><img src='https://developer.circulodecredito.com.mx/sites/default/files/2020-10/circulo_de_credito-apihub.png' width='240'/></p><br/>"
  version: 0.0.1
  termsOfService: https://developer.circulodecredito.com.mx/legal-mx
  contact:
    email: 'api@circulodecredito.com.mx'
    
# Servers where this API is hosted
servers: 
  - url: https://services.circulodecredito.com.mx/sandbox/v1/fis2022
  - url: https://circulodecredito-dev.apigee.net/sandbox/v1/fis2022
externalDocs:
        description: 'Portal de desarrolladores'
        url: 'https://developer.circulodecredito.com.mx/apis'
tags:
  - name: 'FIS V2'
  
# Describe your paths here
paths:
  # This is a endpoint path.
  '/obtenerScore':
    # This is an HTTP operation
    post:
      tags:
      - 'FIS V2'
      summary: 'Devuelve el Score FIS'
      #operationId: obtenerScore
      parameters:

      - name: x-api-key
        in: header
        description: ConsumerKey obtenido desde el portal de desarrolladores
        required: true
        style: simple
        schema:
          type: string
  
      requestBody:
        description: 'oneOf:'
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/RequestFolios'
                - $ref: '#/components/schemas/RequestDatosGenerales'
        
              example: 
                requestDatosGenerales: 
                    primerNombre: 'JUAN'
                    apellidoPaterno: 'PRUEBA'
                    apellidoMaterno: 'SIETE'
                    fechaNacimiento: '07-01-1980'
                    direccion: 'INSURGENTES SUR 1007'
                    coloniaPoblacion: 'INSURGENTES'
                    ciudad: 'MEXICO'
                    estado: 'DF'
                    pais: 'MEX'
                    delegacionMunicipio: 'BENITO JUAREZ'
                    cp: '11230' 
                    rfc: 'XAXX010101000'
                    curp: 'XAXX010101000'
                    folioOtorgante: "12345678"
             
                requestFolios:
                    folioOtorgante: "12345678"
                    folioConsulta: "24689013"
        required: false        
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/ResponseScore'
                example:
                  {
                    "httpStatus": 200,
                    "success": true,
                    "message": "Operacion exitosa",
                    "errors": null,
                    "data": {
                      "scoreNoHit": {
                        "code": "E0",
                        "valor": 750
                      },
                      "folioOtorgante": "20210301",
                      "folioConsulta": "293547861"
                    }
                  }
                     
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                errores:
                - codigo: '400'
                  mensaje: 'El campo [nombre_campo] es requerido'
                - codigo: '400.1'
                  mensaje: 'Petición incorrecta el x-signature es requerido'
                - codigo: '400'
                  menasje: 'La persona no fue encontrada'
                
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                errores:
                - codigo: '401.1'
                  mensaje: 'Acceso no autorizado, x-api-key no válida.'
                - codigo: '401.2'
                  mensaje: 'Acceso no autorizado.'
                - codigo: '401.3'
                  mensaje: 'Acceso no autorizado, no tiene el producto asociado.'
                - codigo: "401.4"
                  mensaje: 'Acceso no autorizado, no tiene acceso al recurso.'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                errores:
                  - codigo: "403"
                    mensaje: Acceso denegado
                  - codigo: "403.1"
                    mensaje: No se pudo autenticar, x-signature no es válida.
                  - codigo: "403.2"
                    mensaje: No se pudo autenticar.
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                errores:
                - codigo: "404.1"
                  mensaje: 'No se encontró a la persona.'
                - codigo: '404'
                  mensaje: 'no se logro obtener la cadena de valores'
        '405':
          description: METHOD NOT ALLOWED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                  errores:
                  - codigo: "405.1"
                    mensaje: Método no permitido.
        '415':
          description: UNSUPPORTED MEDIA TYPE.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                errores:
                - codigo: "415.1"
                  mensaje: Medios no admitidos
        '429':
          description: TOO MANY REQUESTS
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                errores:
                - codigo: "429.1"
                  mensaje: Se han enviado demasiadas solicitudes. Se debe esperar antes de realizar una nueva solicitud.          
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errores'
              example:
                errores:
                - codigo: "500"
                  mensaje: Ocurrio un error al procesar tu solicitud.
                - codigo: "500.1"
                  mensaje: Ocurrio un problema, inténtelo nuevamente más tarde.
      deprecated: false
   #   x-codegen-request-body-name: fis
      x-codegen-request-body-name: obtenerScore
 #     x-codegen-request-body-name: score
components:
  schemas:
    Error:
      type: object
      description: error
      properties:
        codigo:
          type: string
          example: 400.1
          description: Código de error.
        mensaje:
          type: string
          example: El campo "{Campo}" es requerido.
          description: Mensaje de error.
    Errores:
      type: object
      description: Si existen errores, se listarán.
      properties:
        errores:
          type: array
          items:
            $ref: '#/components/schemas/Error'
            

    ResponseScore:
      type: object
      properties:
        httpStatus:
           type: number
           description: 'estado'
        success:
           type: boolean
           description: 'success'
           example: true
        message: 
           type: 'string'
           description: 'message'
           example: "Operacion exitosa"
        errors:
          type: array
          description: 'errores'
          items:
            example: null
        data:
            type: 'object'
            properties:
              scoreNoHit:
                    type: object
                    properties:
                        codigo:
                          type: string
                          description: codigo
                          example: 'E0'
                        valor:
                          type: number
                          description: score
                          example: 757
              folioOtorgante:
                type: string
                description: Folio del otorgante
                example: "000268"
              folioConsulta:
                type: string
                description: Folio del otorgante
                example: "390049227"

      
    RequestFolios:
      type: object
      required:
        - folioOtorgante
        - folioConsulta
      properties:
        folioOtorgante:
          type: string
          description: folioO
          minLength: 8
          maxLength: 55
          pattern: (^[0-9]+)$
          example: "12345678"
        folioConsulta:
          type: string
          description: folioC
          minLength: 9
          maxLength: 55
          pattern: (^[0-9]+)$
          example: "24689013"
          
    RequestDatosGenerales:
      type: object
      required:
        - primerNombre
        - apellidoPaterno
        - apellidoMaterno
        - fechaNacimiento
        - direccion
        - coloniaPoblacion
        - ciudad
        - estado
        - pais
        - delegacionMunicipio
        - cp
        - rfc
        - folioOtorgante
      properties:
        primerNombre:
          type: 'string'
          description: 'Primer nombre de la persona'
          maxLength: 50
          pattern: (^[A-Za-z]+)$
          example: 'JUAN'
        apellidoPaterno:
          type: 'string'
          description: 'Apellido paterno de la persona. Sin abreviaturas o iniciales'
          maxLength: 30
          pattern: (^[A-Za-z]+)$
          example: 'PRUEBA'
        apellidoMaterno:
          type: 'string'
          description: 'Apellido materno de la persona'
          maxLength: 30
          pattern: (^[A-Za-z]+)$
          example: 'SIETE'
        fechaNacimiento:
          type: 'string'
          description: 'Fecha de nacimiento de la persona, en el formato especificado (por defecto yyyy-MM-dd)'
          format: 'dd-MM-yyyy'
#         pattern: (^[0-9\\/\\-]+)$          
          example: '07-01-1980'
        direccion:
          type: 'string'
          description: 'calle y numero'
          maxLength: 55
          pattern: (^[A-Za-z0-9\\ ]+)$
          example: 'INSURGENTES SUR 1007'
        coloniaPoblacion:
          type: 'string'
          description: 'colonia'
          maxLength: 40
          pattern: (^[A-Za-z0-9\\ ]+)$
          example: 'INSURGENTES'
        ciudad:
          type: 'string'
          description: 'ciudad'
          maxLength: 20
          pattern: (^[A-Za-z]+)$
          example: 'MEXICO'
        estado:
          type: 'string'
          description: 'DISTRITO FEDERALF'
          minLength: 2
          maxLength: 4
          pattern: (^[A-Za-z]+)$
          example: 'DF'
        pais:
          type: 'string'
          description: 'pais'
          minLength: 3
          maxLength: 10
          pattern: (^[A-Za-z]+)$
          example: 'MEX'
        delegacionMunicipio:
          type: 'string'
          description: 'delegacion o Municipio'
          maxLength: 20
          pattern: (^[A-Za-z ]+)$
          example: 'BENITO JUAREZ'
        cp:
          type: string
          description: 'codigo postal'
          maxLength: 5
          pattern: (^[0-9]+)$
          example: "11230"
        rfc:
          type: 'string'
          description: 'RFC'
          minLength: 13
          maxLength: 15
          pattern: (^[A-Za-z0-9]+)$
          example: 'XAXX010101000'
        curp:
          type: 'string'
          description: 'curp'
          minLength: 17
          maxLength: 19
          pattern: (^[A-Za-z0-9]+)$
          example: 'XAXX010101000'
        folioOtorgante:
          type: string
          description: folioO
          minLength: 8
          maxLength: 55
          pattern: (^[0-9]+)$
          example: "12345678"
    