Skip to content

Creacion de proveedores

Documentar el flujo tecnico de alta de proveedores en NoviSuite para asegurar que la captura en frontend, la validacion en backend y la integracion con MBA3 se ejecuten de forma consistente, trazable y segura.

El objetivo funcional es permitir que un usuario cree un proveedor desde NoviSuite y que dicho registro quede persistido en MBA3 usando el contrato JSON esperado por el ERP.

ComponenteTecnologiaResponsabilidad
Formulario de proveedoresReactCaptura la informacion del proveedor en 5 secciones: Informacion del Proveedor, Ubicacion, Contactos, Datos Bancarios y Condiciones de Pago.
Capa de validacion clienteReactEjecuta validaciones previas al envio y evita solicitudes con datos incompletos o mal formados.
API intermediariaNestJSRecibe el DTO del frontend, valida, transforma y adapta la data al esquema plano requerido por MBA3.
Adaptador ERPNestJS + HTTP clientInvoca el endpoint de MBA3 para crear el proveedor y normaliza la respuesta.
ERPMBA3 APIRegistra el proveedor y devuelve el resultado de la operacion.
Diagrama del flujo de creacion de proveedores entre NoviSuite y MBA3.
  1. El usuario ingresa al modulo Maestro de Proveedores en NoviSuite.
  2. Completa el formulario distribuido en las secciones Informacion del Proveedor, Ubicacion, Contactos, Datos Bancarios y Condiciones de Pago.
  3. React valida reglas de negocio antes del submit, por ejemplo formato de correo, estructura de RUC o Tax ID, campos obligatorios y consistencia minima de telefonos o cuentas.
  4. El usuario hace clic en Crear Proveedor.
  5. El frontend construye un payload interno y lo envia al backend de NestJS.
  6. NestJS vuelve a validar el DTO recibido, transforma la estructura del frontend al esquema plano de MBA3 y asigna valores por defecto requeridos por el contrato.
  7. NestJS envia una peticion POST al endpoint de MBA3 para registrar el proveedor.
  8. MBA3 responde con exito o con error funcional o tecnico.
  9. NestJS normaliza la respuesta hacia NoviSuite.
  10. React muestra confirmacion de creacion o una alerta con el motivo del fallo.
  • Metodo: POST
  • Endpoint de referencia: /mba3api/proveedores
  • Tipo de integracion: request-response sincrona
  • Formato de salida desde NestJS: JSON plano con llaves exactas definidas por MBA3
{
"operacion": "0",
"codigo_empresa": "EMP01",
"codigo_proveedor": "PROV62",
"nombre_proveedor": "Proveeodor 1",
"rfc_ruc_ci_proveedor": "6222222222",
"contacto": "099999999",
"direccion_1": "Ecuador",
"direccion_2": "",
"codigo_pais": "",
"codigo_estado": "",
"codigo_ciudad": "",
"codigo_sector": "",
"codigo_postal_zip": "",
"telefono_1": "",
"telefono_2": "",
"correo_electronico": "[email protected]",
"fax": "",
"terminos_de_pago": "",
"limite_credito_1": "",
"limite_credito_2": "",
"codigo_tipo_proveedor": "",
"codigo_moneda": "",
"codigo_zona": "",
"notas_memo": "",
"localizacion": "L",
"nombre_extenso_razon_social": "",
"codigo_sucursal": "",
"cuenta_contable_x_pagar": "",
"nombre_del_banco": "",
"cuenta_bancaria_1": "",
"cuenta_bancaria_2": "",
"aba_swift": "BOFAUS3N",
"nombre_beneficiario": "",
"codigo_transferencias": "",
"codigo_transaccion": "",
"definible_transferencia_1": "",
"definible_transferencia_2": "",
"definible_transferencia_3": "",
"codigo_retenciones": "",
"impuestos": "",
"relacionada": "",
"usar_nombre_alterno_en_impresion": "",
"numero_exterior": "",
"numero_interior": "",
"nombre_colonia": "",
"nombre_localizacion": "",
"moneda_unica": "1",
"proveedor_global": "Amazon",
"grupo_impuestos": "",
"codigo_regimen_fiscal": "",
"fecha_de_creacion_del_registro": "2023-01-01",
"cuenta_contable_reserva": ""
}

Antes de invocar el backend, React debe impedir el envio si falla cualquiera de las siguientes reglas:

CategoriaRegla recomendadaResultado esperado
Campos obligatoriosValidar presencia de nombre del proveedor, identificacion fiscal, direccion principal, correo principal y cualquier campo marcado como obligatorio por negocio.El usuario corrige el formulario antes del submit.
RUC o Tax IDValidar longitud, patron numerico o alfanumerico y checksum cuando aplique segun el pais.Evitar rechazos funcionales del ERP.
Correo electronicoValidar formato RFC basico y eliminar espacios al inicio o final.Enviar un valor consistente a correo_electronico.
TelefonosLimpiar caracteres no permitidos y restringir longitud maxima segun el contrato ERP.Poblar telefono_1, telefono_2 y contacto sin caracteres inesperados.
Cuentas bancariasValidar formato solo si el usuario captura datos bancarios o selecciona un metodo de pago que los requiera.Evitar payloads parciales incoherentes.
Campos catalogoVerificar que pais, estado, ciudad, moneda, zona, regimen fiscal y tipo de proveedor provengan de catalogos validos.Enviar codigos compatibles con MBA3.
Numericos y montosNormalizar valores numericos vacios a 0 cuando el contrato de MBA3 lo exija.Evitar errores por conversion o rechazo de datos.
FechasEnviar formato YYYY-MM-DD.Cumplir con fecha_de_creacion_del_registro.
Texto libreAplicar trim, limitar longitudes y remover valores null o undefined.Enviar cadenas vacias cuando el campo sea opcional.
Contactos dinamicosSeleccionar un contacto principal para el ERP cuando existan multiples contactos en UI.Mapear correctamente los campos planos de MBA3.
Doble envioDeshabilitar el boton mientras la solicitud este en curso.Evitar registros duplicados.
  • No enviar propiedades null ni undefined al adaptador de MBA3.
  • Convertir el formulario a un DTO tipado antes de construir el payload del ERP.
  • Si el frontend permite multiples contactos, definir un criterio explicito para el contacto principal, ya que MBA3 expone un conjunto plano de campos de contacto.
  • Si MBA3 requiere que todos los campos numericos viajen con valor, NestJS debe homologar a 0 cualquier valor vacio antes de invocar el ERP.

La siguiente tabla relaciona los campos visuales del formulario de NoviSuite con las llaves del JSON que espera MBA3. Se incluyen tambien valores por defecto, campos derivados y observaciones de transformacion.

Seccion UICampo visual o fuenteLlave MBA3Regla de transformacion
SistemaOperacionoperacionValor fijo 0 para creacion de proveedor.
SistemaEmpresa activa o tenantcodigo_empresaSe toma de configuracion o contexto de compania.
Informacion del ProveedorCodigo de proveedorcodigo_proveedorPuede ser ingresado por usuario o generado por regla interna.
Informacion del ProveedorNombre del proveedornombre_proveedorCampo principal visible en UI.
Informacion del ProveedorRUC o Tax IDrfc_ruc_ci_proveedorNormalizar sin espacios ni caracteres no permitidos.
Informacion del ProveedorRazon socialnombre_extenso_razon_socialUsar cuando difiere del nombre corto del proveedor.
Informacion del ProveedorTipo de proveedorcodigo_tipo_proveedorDebe salir de catalogo homologado.
Informacion del ProveedorProveedor globalproveedor_globalTexto o identificador corporativo segun negocio.
Informacion del ProveedorGrupo de impuestosgrupo_impuestosCodigo de catalogo fiscal.
Informacion del ProveedorRegimen fiscalcodigo_regimen_fiscalCodigo homologado con ERP.
Informacion del ProveedorCodigo de retencionescodigo_retencionesCodigo de catalogo.
Informacion del ProveedorImpuestosimpuestosValor textual o lista codificada segun contrato ERP.
Informacion del ProveedorNotas u observacionesnotas_memoTexto libre con limite definido por MBA3.
UbicacionDireccion principaldireccion_1Calle o direccion base.
UbicacionDireccion complementariadireccion_2Referencia adicional o secundaria.
UbicacionPaiscodigo_paisCodigo de catalogo.
UbicacionEstado o provinciacodigo_estadoCodigo de catalogo dependiente del pais.
UbicacionCiudadcodigo_ciudadCodigo de catalogo dependiente del estado.
UbicacionSectorcodigo_sectorCodigo de sector o zona local.
UbicacionCodigo postalcodigo_postal_zipTexto o alfanumerico segun pais.
UbicacionLocalizacionlocalizacionValor recomendado L para local o E para exterior.
UbicacionNombre de localizacionnombre_localizacionDescripcion de la zona o localizacion.
UbicacionNumero exteriornumero_exteriorValor textual.
UbicacionNumero interiornumero_interiorValor textual.
UbicacionColonia o barrionombre_coloniaNombre descriptivo del sector.
UbicacionCodigo sucursalcodigo_sucursalSucursal contable o administrativa.
ContactosContacto principalcontactoSi hay multiples contactos, usar el principal definido en UI.
ContactosTelefono principaltelefono_1Limpiar caracteres especiales no permitidos.
ContactosTelefono secundariotelefono_2Opcional.
ContactosCorreo electronico principalcorreo_electronicoValidar formato antes del envio.
ContactosFaxfaxOpcional.
ContactosNombre alterno para impresionusar_nombre_alterno_en_impresionValor textual segun configuracion del proceso.
Datos BancariosCuenta contable por pagarcuenta_contable_x_pagarCodigo contable homologado.
Datos BancariosNombre del banconombre_del_bancoTexto libre controlado.
Datos BancariosCuenta bancaria 1cuenta_bancaria_1Cuenta principal.
Datos BancariosCuenta bancaria 2cuenta_bancaria_2Cuenta secundaria opcional.
Datos BancariosABA o SWIFTaba_swiftCodigo bancario internacional.
Datos BancariosBeneficiarionombre_beneficiarioNombre asociado a la cuenta.
Datos BancariosCodigo de transferenciascodigo_transferenciasCodigo de catalogo o convenio bancario.
Datos BancariosCodigo de transaccioncodigo_transaccionIdentificador de tipo de transaccion.
Datos BancariosDefinible transferencia 1definible_transferencia_1Campo parametrico opcional.
Datos BancariosDefinible transferencia 2definible_transferencia_2Campo parametrico opcional.
Datos BancariosDefinible transferencia 3definible_transferencia_3Campo parametrico opcional.
Datos BancariosCuenta contable reservacuenta_contable_reservaCuenta contable alternativa o de reserva.
Condiciones de PagoTerminos de pagoterminos_de_pagoNumero o codigo segun contrato.
Condiciones de PagoLimite de credito 1limite_credito_1Si no aplica y el ERP lo exige, enviar 0.
Condiciones de PagoLimite de credito 2limite_credito_2Si no aplica y el ERP lo exige, enviar 0.
Condiciones de PagoMonedacodigo_monedaCodigo homologado.
Condiciones de PagoMoneda unicamoneda_unicaValor por defecto 1 segun el contrato provisto.
Condiciones de PagoZonacodigo_zonaCodigo de catalogo comercial o geografico.
Condiciones de PagoRelacionadarelacionadaIndicador de relacion comercial o contable.
SistemaFecha de creacionfecha_de_creacion_del_registroGenerada por sistema en formato YYYY-MM-DD.

Recomendaciones de transformacion en NestJS

Section titled “Recomendaciones de transformacion en NestJS”
  • Implementar un mapper dedicado, por ejemplo SupplierMba3Mapper, separado del controller.
  • Centralizar valores por defecto como operacion, localizacion y moneda_unica en configuracion o constantes.
  • Mantener un DTO interno para el formulario y un DTO externo exclusivo para MBA3.
  • Registrar logs con identificador de correlacion, pero sin exponer datos sensibles completos en consola.

NestJS debe actuar como capa de contencion entre NoviSuite y MBA3. El frontend no debe recibir errores crudos del ERP, sino una respuesta controlada, trazable y orientada a usuario.

  1. Validar el request en frontend y nuevamente en NestJS.
  2. Envolver la llamada a MBA3 en un servicio de integracion con try/catch y timeout explicito.
  3. Interpretar el codigo HTTP y el cuerpo de error devuelto por MBA3.
  4. Traducir el fallo a un contrato de error estandar para NoviSuite.
  5. Registrar el detalle tecnico en logs y devolver al frontend un mensaje entendible con codigo de seguimiento.
EscenarioOrigenAccion en NestJSRespuesta sugerida al frontend
Campos requeridos faltantesReact o NestJSRechazar antes de invocar MBA3.400 Bad Request con detalle por campo.
RUC, email o formato invalidoReact o NestJSRechazar validacion.422 Unprocessable Entity con mensaje funcional.
Codigo de proveedor duplicadoMBA3Traducir error funcional del ERP.409 Conflict indicando que el proveedor ya existe.
Catalogo invalidoMBA3Propagar error de negocio normalizado.422 Unprocessable Entity con detalle del campo homologado.
Timeout o indisponibilidad de MBA3Red o ERPCapturar excepcion HTTP y marcar integracion no disponible.504 Gateway Timeout o 502 Bad Gateway.
Error interno no controladoNestJSLoggear excepcion y ocultar detalle sensible.500 Internal Server Error con mensaje generico.
{
"success": false,
"code": "MBA3_VALIDATION_ERROR",
"message": "No fue posible crear el proveedor en MBA3.",
"details": [
{
"field": "rfc_ruc_ci_proveedor",
"message": "El RUC enviado no cumple con el formato esperado."
}
],
"upstreamStatus": 422,
"correlationId": "8f3a2f82-5e0f-4a1d-9f72-4d89d7f43b6d",
"timestamp": "2026-04-01T10:30:00Z"
}
  • Si MBA3 responde con exito, NoviSuite debe mostrar una notificacion de confirmacion al usuario.
  • Si MBA3 responde con error funcional, React debe resaltar el problema y mostrar un mensaje accionable.
  • Si el error es tecnico o de conectividad, React debe mostrar una alerta generica con el identificador de correlacion para soporte.
  • El formulario no debe perder la informacion capturada cuando ocurra un error recuperable.

Cuando el flujo esta correctamente implementado, NoviSuite valida los datos del proveedor, los transforma al contrato de MBA3 y devuelve al usuario una confirmacion de alta o un error controlado, manteniendo trazabilidad completa entre frontend, backend y ERP.