Tabla de Contenidos

SMART → DataLake: integración de datos

Extracción de conjuntos de datos del ERP SMART hacia DataLake, el producto de análisis de datos mediante IA, para la empresa Alvemaco Rentacar (clave de instalación ALR).

Cada conjunto de datos se obtiene llamando a un procedimiento almacenado a través del servicio web de Smart (iSmartWebDoc). El agente de DataLake ejecuta una consulta SELECT * FROM <procedimiento>(…) y recibe el resultado en JSON.


Información general

Métodos de acceso

Los datos se pueden alcanzar de dos formas:

Los datos de conexión y los ejemplos siguientes se refieren al servicio SmartWebDoc.

Método

POST

Formato

http://#ip:#puerto/services/ismartwebdoc/?format=json

Para esta instalación: http://192.168.1.125:8001/services/ismartwebdoc/?format=json

Puertos posibles

  1. 8001

Direcciones IP posibles

  1. 192.168.1.125

Credenciales de usuario

No es necesario introducir credenciales en el lado del cliente: el servicio SmartWebDoc se configura con un usuario dedicado, creado ad-hoc para DataLake, a través del cual el administrador de Smart establece las restricciones de acceso y los privilegios sobre tablas y procedimientos.

Otros

Para los ejemplos se ha utilizado “Postman v8.0.4”.

Documentación de SmartWebDoc: Introducción a SmartWebDoc.

Envoltorio de la respuesta

Todos los procedimientos devuelven el mismo envoltorio JSON. Con la opción “metaData”:true, la respuesta incluye, además de los datos, la descripción de cada campo (tipo y etiqueta). A continuación se muestra un ejemplo completo con el procedimiento ALR_VEHICULOS_FLOTA; el resto de procedimientos siguen la misma estructura, solo cambian los campos.

Cuerpo del POST
{
  "version"  : "1.2",
  "metodo"   : "Raw",
  "opciones" : { "metaData":true },
  "comandos" :
  [
    {
      "sql":"SELECT * FROM ALR_VEHICULOS_FLOTA(:fecha)",
      "params": { "fecha" : "2026-12-31"}
    }
  ]
}
Respuesta (valores ilustrativos, campos abreviados)
{
    "version": "1.2",
    "resultados": [
        {
            "estado": "OK",
            "metaData": {
                "S_ARTICULO":         { "tipo": "ftString",  "etiqueta": "S_ARTICULO" },
                "S_NRO_SERIE":        { "tipo": "ftString",  "etiqueta": "S_NRO_SERIE" },
                "S_DESCRIPCION":      { "tipo": "ftString",  "etiqueta": "S_DESCRIPCION" },
                "S_STOCK":            { "tipo": "ftFloat",   "etiqueta": "S_STOCK" },
                "S_NUMERO":           { "tipo": "ftInteger", "etiqueta": "S_NUMERO" },
                "S_DIESEL":           { "tipo": "ftInteger", "etiqueta": "S_DIESEL" },
                "S_TIPO_COMBUSTIBLE": { "tipo": "ftString",  "etiqueta": "S_TIPO_COMBUSTIBLE" },
                "S_COD_ACTIVO":       { "tipo": "ftString",  "etiqueta": "S_COD_ACTIVO" },
                "S_PEGATINA_MEDIO":   { "tipo": "ftString",  "etiqueta": "S_PEGATINA_MEDIO" },
                "S_FECHA_COMPRA":     { "tipo": "ftDateTime","etiqueta": "S_FECHA_COMPRA" },
                "S_NRO_POLIZA":       { "tipo": "ftString",  "etiqueta": "S_NRO_POLIZA" },
                "S_SITUACION":        { "tipo": "ftString",  "etiqueta": "S_SITUACION" }
            },
            "datos": [
                {
                    "S_ARTICULO": "VE00125",
                    "S_NRO_SERIE": "1234ABC",
                    "S_DESCRIPCION": "TURISMOS COMPACTOS",
                    "S_STOCK": 1,
                    "S_NUMERO": 1,
                    "S_DIESEL": 1,
                    "S_TIPO_COMBUSTIBLE": "DIESEL",
                    "S_COD_ACTIVO": "AF001234",
                    "S_PEGATINA_MEDIO": "C",
                    "S_FECHA_COMPRA": "2024-03-15T00:00:00.000",
                    "S_NRO_POLIZA": "P-0099887",
                    "S_SITUACION": "ALMACEN CENTRAL"
                }
            ]
        }
    ]
}

Notas sobre la respuesta:

  1. estado vale “OK” cuando el comando se ejecuta correctamente.
  2. En metaData, tipo es el tipo de dato de cada campo (ftString para texto, un tipo numérico para importes y cantidades, un tipo fecha para las fechas). etiqueta es, por defecto, el propio nombre del campo.
  3. datos es la lista de filas. Los campos vacíos se devuelven como null.

Notas generales de integración

Aspectos comunes a todos los conjuntos de datos:


Conjunto de datos: Flota de vehículos

Procedimiento

ALR_VEHICULOS_FLOTA

Parámetros

  1. P_FECHA_HASTA TIMESTAMP (fecha de corte del informe)

Resultados

  1. S_ARTICULO VARCHAR(10),
  2. S_NRO_SERIE VARCHAR(20),
  3. S_DESCRIPCION VARCHAR(60),
  4. S_STOCK NUMERIC(17,5),
  5. S_NUMERO INTEGER,
  6. S_DIESEL INTEGER,
  7. S_GASOLINA INTEGER,
  8. S_GLP INTEGER,
  9. S_GNC INTEGER,
  10. S_ELECTRICO INTEGER,
  11. S_MHEV_DIESEL INTEGER,
  12. S_MHEV_GASOLINA INTEGER,
  13. S_PHEV_DIESEL INTEGER,
  14. S_PHEV_GASOLINA INTEGER,
  15. S_HEV_GASOLINA INTEGER,
  16. S_HEV_DIESEL INTEGER,
  17. S_TIPO_COMBUSTIBLE VARCHAR(60),
  18. S_COD_ACTIVO VARCHAR(10),
  19. S_CON_COMBUSTIBLE INTEGER,
  20. S_ERROR_NUMERO INTEGER,
  21. S_PEGATINA_MEDIO VARCHAR(60),
  22. S_FECHA_COMPRA TIMESTAMP,
  23. S_NRO_POLIZA VARCHAR(20),
  24. S_SITUACION VARCHAR(60)

Comportamiento

Devuelve la flota de vehículos con existencias a la fecha P_FECHA_HASTA, con una fila por vehículo (combinación de artículo y número de serie), su clasificación por tipo de combustible y etiqueta medioambiental, y dónde se encuentra.

Es el mismo informe que en SmartOffice se encuentra en Gestión de flota → Informes → Flota de vehículos.

Selección de las filas El punto de partida es el estado de almacén a la fecha de corte, limitado a los artículos del grupo estadístico de vehículos definido para la instalación. Solo se emiten los vehículos con movimiento de existencias hasta esa fecha; cada fila agrupa por artículo, número de serie y descripción del grupo estadístico.

La fecha de corte afecta únicamente a las existencias. El resto de los datos (situación, póliza, ficha técnica, fecha de compra) se toman del estado actual de la ficha del vehículo, no de su estado en la fecha solicitada. Es decir, P_FECHA_HASTA delimita qué vehículos aparecen y con cuánto stock, pero no reconstruye la situación histórica de cada uno.

Identificación del vehículo

Existencias y recuento

Clasificación por combustible

Datos administrativos

Nota: los campos sin dato en la ficha del vehículo se devuelven como null (o 0 en los campos indicadores).

Ejemplos

Flota completa a una fecha
{
  "version"  : "1.2",
  "metodo"   : "Raw",
  "opciones" : { "metaData":true },
  "comandos" :
  [
    {
      "sql":"SELECT * FROM ALR_VEHICULOS_FLOTA(:fecha) ORDER BY S_NRO_SERIE",
      "params": { "fecha" : "2026-12-31"}
    }
  ]
}
Vehículos por situación (almacén o cliente en el que están)
{
  "version"  : "1.2",
  "metodo"   : "Raw",
  "opciones" : { "metaData":true },
  "comandos" :
  [
    {
      "sql":"SELECT S_SITUACION, SUM(S_STOCK) AS UNIDADES FROM ALR_VEHICULOS_FLOTA(:fecha) GROUP BY S_SITUACION ORDER BY 2 DESC",
      "params": { "fecha" : "2026-12-31"}
    }
  ]
}
Vehículos de una categoría de flota concreta
{
  "version"  : "1.2",
  "metodo"   : "Raw",
  "opciones" : { "metaData":true },
  "comandos" :
  [
    {
      "sql":"SELECT * FROM ALR_VEHICULOS_FLOTA(:fecha) WHERE S_DESCRIPCION=:categoria ORDER BY S_NRO_SERIE",
      "params": { "fecha" : "2026-12-31", "categoria" : "TURISMOS COMPACTOS"}
    }
  ]
}
Reparto de la flota por motorización
{
  "version"  : "1.2",
  "metodo"   : "Raw",
  "opciones" : { "metaData":true },
  "comandos" :
  [
    {
      "sql":"SELECT SUM(S_NUMERO) AS TOTAL, SUM(S_DIESEL) AS DIESEL, SUM(S_GASOLINA) AS GASOLINA, SUM(S_GLP) AS GLP, SUM(S_GNC) AS GNC, SUM(S_ELECTRICO) AS ELECTRICO, SUM(S_MHEV_DIESEL) AS MHEV_DIESEL, SUM(S_MHEV_GASOLINA) AS MHEV_GASOLINA, SUM(S_PHEV_DIESEL) AS PHEV_DIESEL, SUM(S_PHEV_GASOLINA) AS PHEV_GASOLINA, SUM(S_HEV_DIESEL) AS HEV_DIESEL, SUM(S_HEV_GASOLINA) AS HEV_GASOLINA FROM ALR_VEHICULOS_FLOTA(:fecha)",
      "params": { "fecha" : "2026-12-31"}
    }
  ]
}
Reparto por etiqueta medioambiental
{
  "version"  : "1.2",
  "metodo"   : "Raw",
  "opciones" : { "metaData":true },
  "comandos" :
  [
    {
      "sql":"SELECT S_PEGATINA_MEDIO, SUM(S_NUMERO) AS UNIDADES FROM ALR_VEHICULOS_FLOTA(:fecha) GROUP BY S_PEGATINA_MEDIO ORDER BY 2 DESC",
      "params": { "fecha" : "2026-12-31"}
    }
  ]
}
Control de calidad: vehículos sin combustible reconocido o con recuento incoherente
{
  "version"  : "1.2",
  "metodo"   : "Raw",
  "opciones" : { "metaData":true },
  "comandos" :
  [
    {
      "sql":"SELECT * FROM ALR_VEHICULOS_FLOTA(:fecha) WHERE S_CON_COMBUSTIBLE=0 OR S_ERROR_NUMERO<>0",
      "params": { "fecha" : "2026-12-31"}
    }
  ]
}

Registro de cambios del documento

— //Juanma 2026/09/08 // Puerto del servicio: 8001. Formato de fecha de los parámetros: aaaa-mm-dd.

— //Juanma 2026/08/10 // Flota de vehículos: precisiones sobre el alcance de la fecha de corte, la descripción (grupo estadístico) y los valores reconocidos de tipo de combustible.

Juanma 2026/08/10 // Documento inicial. Integración SMART → DataLake para Alvemaco Rentacar (ALR): información general de acceso y conjunto de datos //Flota de vehículos (ALR_VEHICULOS_FLOTA).