Script de Registro de Deudas y Pagos — Debt Tracker con Bootstrap 5

Código incluido: index.html style.css script.js

Aprende a implementar un pequeño sistema que registra deudas, permite registrar abonos y muestra el progreso general y por deuda. El código usa Bootstrap 5, Chart.js para gráficos y jsPDF para exportar en PDF.


Introducción

Este script es ideal para llevar un control personal o un prototipo de gestión de deudas. Guarda los datos en localStorage, permite:

  • Registrar nuevas deudas (acreedor, monto, fecha límite, descripción).
  • Editar la deuda (con validación para no reducir el total por debajo de lo ya pagado).
  • Registrar abonos y ver historial de pagos por deuda.
  • Ver progreso visual (barra y círculo) y gráfica de distribución.
  • Exportar a CSV y PDF.

Tecnologías y requisitos

  • Editor de texto (VSCode, Sublime, Notepad++)
  • Navegador moderno (Chrome, Firefox, Edge)
  • Bootstrap 5 (CDN incluido en el ejemplo)
  • Chart.js para gráficos (CDN incluido)
  • jsPDF para exportar a PDF (CDN incluido)

Guía paso a paso

Estructura de archivos

Crea una carpeta del proyecto y dentro agrega 3 archivos:

  1. index.html — Interfaz y carga de librerías.
  2. style.css — Estilos personalizados (estéticos, responsivos).
  3. script.js — Lógica completa (manejo de localStorage, modales, gráficos, export).

Paso 1 — Preparar index.html

– Incluye Bootstrap 5 (CSS + bundle JS) al final de la página.
– Añade Chart.js y jsPDF (se usan para gráficos y PDF).
– Crea la estructura: cabecera, estadísticas, secciones para gráficos y la lista de deudas.
– Agrega los modales (Agregar, Editar, Pagar, Historial).

Consejo: carga script.js al final del <body> para que el DOM esté listo.

Paso 2 — Estilos ( style.css )

– Aquí se define colores de marca, bordes redondeados y estilos para tarjetas, progreso y botones personalizados.
– Se mantiene la compatibilidad móvil con media queries; Bootstrap 5 ya cubre la mayoría de la responsividad.

Paso 3 — Lógica principal ( script.js )

El flujo general es:

  1. Al iniciar la página, carga las deudas desde localStorage (si existe).
  2. Renderiza estadísticas, lista de deudas y gráficos.
  3. Al agregar una deuda, se valida el formulario, se guarda al array y a localStorage, se actualiza la UI.
  4. Al registrar un pago, se actualiza la deuda y se añade el pago al historial (array de pagos dentro del objeto deuda).
  5. Funciones auxiliares importantes: validaciones, cálculo de progreso, exportar CSV/PDF, y notificaciones (alerts).

Paso 4 — Validaciones y casos especiales

  • Impedir abonos mayores al saldo pendiente (el script ya tiene esa comprobación).
  • Al editar una deuda, validar que el nuevo total no quede por debajo de lo ya pagado.
  • Gestionar fechas vencidas y mostrar alertas para deudas próximas a vencer o vencidas.
  • Evitar IDs duplicados: el script usa Date.now() como ID.

Paso 5 — Pruebas y depuración

– Abre la consola del navegador (F12) durante las pruebas para ver mensajes console.log.
– Prueba los siguientes flujos:

  • Agregar 3 deudas, realizar pagos parciales y ver cambios en barra y gráfico.
  • Eliminar una deuda.
  • Editar la deuda a un monto menor al ya pagado, debe mostrar un mensaje de  error: (El monto total no puede ser menor al monto ya pagado).
  • Exportar CSV y PDF con varias deudas largas para confirmar el funcionamiento  del PDF y la exportación CSV.

Paso 6 — Mejoras (para próximas versiones lo que hare):

  • Guardar datos en servidor con PHP/MySQL para multiusuario y persistencia real.
  • Autenticación de usuarios y cuentas separadas.
  • Filtros y búsquedas en la lista de deudas.
  • Adicionar export a Excel (XLSX) y mejoras en el diseño de PDF (tablas).

Código (copiar/pegar)

Abajo tienes los tres archivos completos tal como funcionan en el proyecto. Pégalos en tus archivos correspondientes.

index.html

style.css

script.js

 

Explicación rápida de las funciones clave

  • addDebt(): valida el formulario, crea objeto deuda (con id = Date.now()), lo guarda en debts y en localStorage, cierra modal y actualiza el dashboard.
  • openEditModal(id) / updateDebt(): carga la deuda en el formulario, valida que el nuevo total no sea menor al ya pagado y actualiza en localStorage.
  • openPaymentModal(id) / addPayment(): calcula saldo pendiente, limita el campo max al saldo, agrega el pago al array payments y actualiza paidAmount.
  • updateStats(): calcula totales (deudas, pagado, pendiente) y actualiza la barra circular y la barra lineal de progreso.
  • renderDebtChart(): construye un gráfico tipo doughnut con las deudas pendientes (Chart.js).
  • exportToCSV() / exportToPDF(): exportan la información actual. jsPDF puede paginar si hay mucho contenido.

Consejos de depuración / problemas comunes

  • Si los modales no abren: asegúrate de incluir bootstrap.bundle.min.js y de usar la API correcta de Bootstrap 5 (new bootstrap.Modal(…) en lugar de $(‘#modal’).modal(‘show’)).
  • Si no ves cambios al guardar: revisa localStorage en la consola (Application → Local Storage).
  • Para errores raros usa console.log() en puntos clave (ej. antes y después de guardar, al abrir modales).
  • Validaciones HTML5: el script usa form.checkValidity() y form.reportValidity() para usar la validación nativa del navegador.
Ya tienes un esquema completo y funcional para llevar el control de deudas y abonos. Es un excelente MVP: simple, fácil de entender y con múltiples puntos de mejora para convertirlo en una solución multiusuario o integrarla a un backend real.

VER DEMOSTRACIÓN

👍 Apóyanos en Facebook

Tu apoyo nos ayuda a seguir creando contenido gratuito. Síguenos en nuestras redes 😃