Actualizar automáticamente la UF en Netsuite con SuiteScript (Chile)
Notas Previas:
Esta solución está basada en un artículo publicado por "Prolecto Resources" Link
Si bien el mismo principio se podría aplicar en cualquier país, esta solución en particular fue desarrollada para cuentas de Netsuite donde el Peso Chileno es la moneda base de la Subsidiaria.
Esta solución utiliza la API desarrollada por la SBIF para obtención de valores actualizados. Esta API requiere que cada consumidor se registre para obtener un token válido que autorice el acceso.
Esta solución fue generada como parte del pack de localización de Netsuite para Chile desarrollado en Entropy Technologies
Al usar Netsuite en Chile, se dan algunas particularidades con respecto a las monedas de operación, como por ejemplo:
La UF no es propiamente una moneda, pero se trata como tal al momento de cotizar algunos productos y/o servicios.
Los valores de mercado para USD / EUR en portales internacionales, rara vez coinciden con los valores oficiales publicados por las entidades oficiales. (SII, SBIF, CMF, entre otras).
En Netsuite, esto significa que incluso después de configurar la UF como moneda, su tasa de cambio no será actualizada automáticamente cada día, pudiendo llevar esto a distintos errores operacionales o requerir actualización de forma manual. Por el lado del dólar/euro, si bien estas monedas si se actualizan automáticamente, lo hacen tomando valores de referencia incorrectos.
En Entropy Technologies nuestro equipo de desarrollo ha elaborado una solución que, a través de una integración con la api de la SBIF, obtiene los valores actualizados cada día para estas monedas y dispara un trabajo de actualización en la cuenta de Netsuite que resulta en el correcto registro de las tasas de cambio de estas monedas en relación con el CLP. El presente artículo es un resumen sobre el funcionamiento de dicha solución.
Paso 1: SuiteScript
Para iniciar, el primer paso fue decidir que tipo de SuiteScript era el más apropiado para esta solución. Se consideraron 3 opciones (Todas usando la API 2.1):
Scheduled Script
Map/Reduce Script
Workflow + Workflow Action Script
Map/Reduce es una opción muy popular para realizar trabajos recurrentes, sin embargo, es un tipo de script diseñado principalmente para procesar un alto volumen de registro en cada ejecución. Para esta solución, cada ejecución del script dispara como máximo 3 trabajos. Por tanto, no amerita la complejidad y tiempo de procesamiento adicional que conlleva usar un Map/Reduce script.
Un workflow recurrente con un Workflow Action script es otra opción sólida que consideramos, sin embargo, requiere un registro adicional por mantener (El workflow, así como sus estados y acción para disparar el script). De nuevo, una suerte de Overkill para esta solución particular.
El Scheduled Script nos da para esta situación el enfoque más simple y funcional que cumple con todos los requerimientos, sin riesgo de toparnos con límites de consumo debido a la poca cantidad de registros que se deben procesar.
Paso 2: Deployment y Parámetros
Después de iniciar nuestro archivo de SuiteScript vacío, procedemos a configurar los parámetros a usar. Para efectos de demostración incluiremos una captura con las opciones necesarias para que el deployment ejecute el proceso de forma recurrente todos los días.
Un parámetro guarda el ID de la moneda base en la cuenta
Otro guarda el ID de la moneda configurada para la UF
Otros dos guardan los IDs de las monedas configuradas para USD y EUR respectivamente.
Otro tendrá el ID de la carpeta en el file cabinet donde se guardará el archivo .csv con la información de las tasas de cambio a actualizar.
El último parámetro almacena el API token obtenido en el portal de la SBIF: https://api.sbif.cl/index.html
Paso 3: Obstáculos
El principal obstáculo a resolver es el hecho de que Netsuite no expone el tipo de registro "Currency Exchange Rate" para ser actualizado directamente mediante SuiteScript, por tanto, parte de la solución comprende realizar esta actualización disparando programáticamente un trabajo de importación mediante archivo .csv; es acá donde la solución previa publicada por Prolecto Resources (referenciada al inicio del artículo) fue de vital importancia, pues nos orientó acerca de como se podría armar este trabajo de importación de manera programática. Solo necesitábamos actualizarlo para la api de SuiteScript 2.1.
Paso 4: Ejecución
Cada ejecución del script funciona de la siguiente manera:
Empieza por obtener, de los parámetros del deployment los IDs de las monedas a procesar y el ID de la moneda base. Solo aquellas monedas con IDs configurados se utilizan. Por tanto, si en alguna cuenta se agrega la UF solamente, pues el Dólar y el Euro son ignorados completamente.
De manera secuencial, llama una función separada para procesar cada moneda.
Se obtiene el API token, y se ensambla la solicitud de API mediante el módulo N/https. Documentación de SBIF acá: https://api.sbif.cl/documentacion/index.html
Se ejecuta la solicitud y se parsea el JSON de respuesta hacia un objeto nativo de JavaScript.
Una vez tenemos la data, procedemos a elaborar el archivo .csv, para esto usamos el módulo N/file
- Por último procedemos a disparar la tarea de importación mediante el módulo N/task y pasando como parámetros el ID de la carpeta en el file cabinet más el archivo .csv creado en el paso anterior
- Este flujo de ejecución se lleva a cabo dentro de un bloque try/catch para detener la ejecución y documentar errores en los que se pueda incurrir.
Implementación completa disponible acá (Sustituir IDs de parámetros según corresponda): LINK