← Proyectos

01 · Enterprise · 2026

Sistema de Cartera Empresarial

DPJD / Mensulí S.A.S.

Único desarrollador full stack — diseño, backend, frontend y despliegue

Sistema multiempresa de cuentas por cobrar y cobranza construido desde cero: SAP Business One como fuente de lectura, MySQL operativo, Vue 3 en el cliente y Laravel en producción.

Vue 3Arctic Finance UI
Laravel 11API + Sanctum
MySQLOperación
SAP B1SQL Server RO

Problema

Operar cobranza en 5 agencias con 5 analistas, dos empresas (PASTOR / MENSULI) y datos vivos de SAP, sin mezclar facturas ni detener la operación durante la migración de arquitectura.

Enfoque

Arquitectura multi-compañía con guards de pago cruzados, asignación ponderada WRR, OCR de comprobantes, pasarela Wompi/PSE y autenticación con roles. Migración Node.js/Express → Laravel en producción sin frenar el desarrollo.

Resultado

  • Multiempresa PASTOR / MENSULI con aislamiento de pagos
  • Asignación WRR para 5 analistas en 5 agencias
  • Dashboards estabilizados sobre +19.000 registros
  • Remediación de vulnerabilidades reales en producción

Capacidades

  • Migración Node.js/Express → Laravel 11 en producción
  • Integración SAP Business One (SQL Server, solo lectura) + MySQL operativo
  • OCR de comprobantes bancarios (Tesseract, español)
  • Weighted Round-Robin con capacidad reducida a fin de mes — ROW_NUMBER() OVER()
  • Arqueo de caja y descuento por pronto pago (sync pesos/%)
  • Wompi/PSE: firma, webhooks e idempotencia
  • RBAC con Spatie Permissions + Laravel Sanctum
  • Roles: admin, supervisor, cobrador, cobrador-vendedor

Arquitectura

Vue 3 + Vite — paneles admin / supervisión / cobranzaLaravel 11 (PHP 8.3) — API y reglas de negocioMySQL 8 — base operativaSQL Server — SAP Business One (read-only)Sanctum + Spatie PermissionsVue 3Laravel 11PHP 8.3MySQLSQL ServerSAP B1WompiTesseract

Detalle técnico

SELECT analyst_id, invoice_id
FROM (
  SELECT *,
    ROW_NUMBER() OVER (
      PARTITION BY agency_id
      ORDER BY weight DESC, critical_days DESC
    ) AS rn
  FROM portfolio_queue
) q
WHERE rn <= capacity_for_week;