Layer-api-excel-service

De Plataforma COA Crowd
Saltar a: navegación, buscar

Este servicio es de apoyo para el proceso de ingesta de tareas por archivos excel, por el momento solo se realiza en base a archivos xls y xlsx.

La lectura de archivos funciona solamente en base a extracción de archivos base64 obtenidos de alguna url.

Este servicio hace uso de la librería Apache POI para realizar la lectura, escritura de los archivos xls o xlsx, de igual manera al momento todos los archivos son obtenidos a través del servicio layer-api-multimedia-service esto debido a que algunos de ellos provienen del storage de malla y este servicio cuenta con los accesos necesarios para extracción de archivos de dicho ambiente. Otros archivos son registrados a través del front podlet-web-sheet-uploader el cual los registra dentro de la base de datos del servicio layer-api-multimedia-service.

Dependencias

Base de Datos

Dentro de las funcionalidades de este servicio existe la extracción de datos de archivo a json y su posible almacenamiento en base de datos, esta función de almacenamiento regularmente es utilizada por el proceso de ingesta de tareas en base a archivo excel, el cual es llevado a cabo por el servicio layer-api-sheet -publisher-service.

Schema Tablas
serv_layer_api_excel_service

TABLE public.excelcontent (
 id bigserial NOT NULL,
 url_file varchar NOT NULL,
 sheet varchar NOT NULL,
 rownumber int4 NOT NULL,
 cells_json jsonb NULL,

 updated_cells_json jsonb NULL,
 status varchar NOT NULL,
 created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 updated_at timestamp NULL,
 CONSTRAINT excelcontent_pkey PRIMARY KEY (id),
 CONSTRAINT excelcontent_url_file_sheet_rownumber_key UNIQUE (url_file, sheet, rownumber)
);

Secrets

  • secret-layer-api-excel-service:

{
  "nameSpace": "app-autonomation",
  "secretName": "secret-layer-api-excel-service",
  "secretParams": [
    {
      "paramName": "dbname",
      "paramValue": "Microservicios"
    },
    {
      "paramName": "defschema",
      "paramValue": "serv_layer_api_excel_service"
    },
    {
      "paramName": "instance",
      "paramValue": "{instancia_db_depende_ambiente}"
    },
    {
      "paramName": "password",
      "paramValue": "{user_db_password}"
    },
    {
      "paramName": "projectid",
      "paramValue": "{projectid_depende_ambiente}"
    },
    {
      "paramName": "username",
      "paramValue": "{user_db_name}"
    }
  ]
}


  • secret-layer-api-excel-service-env:

{
  "nameSpace": "app-autonomation",
  "secretName": "secret-layer-api-excel-service",
  "secretParams": [
    {
      "paramName": "boveda_application_id",
      "paramValue": "{depende_ambiente}"
    },
    {
      "paramName": "boveda_id_service_account",
      "paramValue": "{depende_ambiente}"
    },
    {
      "paramName": "boveda_secret",
      "paramValue": "{depende_ambiente}"
    },
    {
      "paramName": "layer_api_error_handler",
      "paramValue": "{url layer-api-error-handler-service segun ambiente}"
    },
    {
      "paramName": "project_timezone",
      "paramValue": "America/Mexico_City"
    },
    {
      "paramName": "url_api_multimedia",
      "paramValue": "{url layer-api-multimedia-service segun ambiente}"
    }
  ]
}

Endpoints

POST:  ~/api/readsheet : Mediante este endpoint se pueden realizar extracciones de información los cuales deben ser rigurozamente numericos de no ser asi resultados falsos, esto debido a que su desarrollo original se realizo para el proceso FSIM el cual se requiere extraccion de valores numericos y su salida es en formato respuesta de cuestionario.

Request:

{
  "filepath": "urlDelArchivo",
  "data": [
    {
      "cell_name": "Nombre de salida que se dara a la celda",
      "data_destination": "nombrePropiedadEnJsonDeSalida",
      "cell_location_value": "[{Hoja del archivo}]!{ColumnaYFilaAExtraerElValor}"
    }
  ]
}


ejemplo: 
{
    "data": [{
            "cell_name": "Ingresos brutos declarados",
            "data_destination": "incomeGrossDeclared",
            "cell_location_value": "[Estados Financieros]!B119"
        }, {
            "cell_name": "Rentas",
            "data_destination": "revenues",
            "cell_location_value": "[Estados Financieros]!B120"
        }
    ],
}

Las respuestas exitosas serán arrojadas similar al siguiente ejemplo:

{
    "success": true,
    "result": {
        "resumenRespuestas": [
            {
                "obtainedValue": 826900,
                "destinationValue": "incomeGrossDeclared",
                "question": "¿El valor se pudo extraer?",
                "description": "Ingresos brutos declarados",
                "answerYesNo": "Yes"
            },
            {
                "obtainedValue": 8000,
                "destinationValue": "revenues",
                "question": "¿El valor se pudo extraer?",
                "description": "Rentas",
                "answerYesNo": "Yes"
            }
        ],
        "outData": {
            "leverage": 0.010169491525423728,
            "coverageHistorical": 545.9735913006638
        },
        "codeResult": "OK"
    }
}

Las respuestas con errores serán arrojadas similares a las siguientes:

Celda No Encontrada:
{
    "success": false,
    "result": {
        "resumenRespuestas": [
            {
                "obtainedValue": 826900,
                "destinationValue": "incomeGrossDeclared",
                "question": "¿El valor se pudo extraer?",
                "description": "Ingresos brutos declarados",
                "answerYesNo": "Yes"
            },
            {
                "destinationValue": "revenues",
                "question": "¿El valor se pudo extraer?",
                "description": "Rentas",
                "answerYesNo": "No",
                "reasonNo": "Error celda no encontrada: [Estados Financieros]!Z500"
            }
        ],
        "outData": {
            "incomeGrossDeclared": 826900
        },
        "codeResult": "ERRD",
        "errors": "Error celda no encontrada: [Estados Financieros]!Z500; "
    }
}
Valor No Numerico:
{
    "success": false,
    "result": {
        "resumenRespuestas": [
            {
                "obtainedValue": 826900,
                "destinationValue": "incomeGrossDeclared",
                "question": "¿El valor se pudo extraer?",
                "description": "Ingresos brutos declarados",
                "answerYesNo": "Yes"
            },
            {
                "obtainedValue": "Incremento Proveedores",
                "destinationValue": "revenues",
                "question": "¿El valor se pudo extraer?",
                "description": "Rentas",
                "answerYesNo": "No",
                "reasonNo": "El valor obtenido no es numerico, celda: [Estados Financieros]!A50"
            }
        ],
        "outData": {
            "revenues": null,
            "incomeGrossDeclared": 826900
        },
        "codeResult": "ERRD",
        "errors": "El valor obtenido no es numerico, celda: [Estados Financieros]!A50; "
    }
}
Archivo No Encontrado O No Valido:
{
    "success": false,
    "result": {
        "resumenRespuestas": [
            {
                "question": "¿Se cargo el archivo?",
                "description": "Lectura de archivo",
                "answerYesNo": "No",
                "reasonNo": "Error al cargar archivo: https://storage.googleapis.com/findep-valija-uat/MULTIMEDIA/AEF/11E3C9260A244A043DB11303C98E8B7.XLSX"
            }
        ],
        "outData": null,
        "codeResult": "ERRF",
    }
}