El sistema BDI es una solución integral full stack para la administración moderna de espacios de un cementerio, en donde se combina un servidor robusto (bdi-backend) que actúa como el núcleo de la aplicación, con una interfaz de usuario intuitiva (bdi-frontend) que facilita la gestión eficiente de los espacios disponibles. La principal función de este sistema es de digitalizar el inventario físico del cementerio, eliminando la gestión manual de mapas y libros de registros, solucionando la desconexión entre la disponibilidad real del terreno y el proceso de venta, permitiendo consultar y reservar espacios en tiempo real sin errores de duplicidad.

Este sistema fue parte de una prueba técnica y no se encuentra en desarrollo activo, su propósito siempre fue el de demostrar una solución para la ocupación espacial en el contexto administrativo de un cementerio.

Vista del mapa de espacios en BDI Frontend
Vista del mapa de espacios en BDI Frontend

bdi-backend

bdi-backend es el servidor central del sistema BDI, diseñado para la administración logística y comercial de espacios en cementerios. Funciona como el núcleo digital que permite mapear, categorizar y controlar el inventario de unidades físicas, gestionando desde la definición de grandes sectores o parques hasta el detalle específico de cada nicho individual.

Stack tecnológico

  • Backend
    • stack/typescript icon TypeScript: Lenguaje principal del proyecto
    • stack/nodejs icon Node.js: Entorno de ejecución del servidor
    • stack/nest icon NestJS: Framework para estructurar el servidor
  • Base de datos
    • stack/postgres icon PostgreSQL: Base de datos relacional para almacenamiento de datos
    • stack/typeorm icon TypeORM: ORM para interactuar con la base de datos
    • stack/typeorm icon typeorm-transactional: Manejo de transacciones en TypeORM
  • Autenticación y seguridad
    • stack/jwt icon JWT: JSON Web Tokens para autenticación segura
    • 🔑 bcrypt: Librería para el hash de contraseñas
    • stack/passport icon Passport.js: Middleware de autenticación
  • Validación
    • stack/typestack icon class-validator: Validación de datos entrantes
    • stack/typestack icon class-transformer: Transformación de objetos
    • 🥳 Joi: Validación de esquemas
  • Utilidades
    • 🕰️ Luxon: Manejo de fechas y horas
    • 🌿 Dotenv: Gestión de variables de entorno
  • Herramientas de desarrollo
    • stack/eslint icon ESLint: Herramienta de linting para mantener la calidad del código
    • stack/prettier icon Prettier: Formateador de código para mantener un estilo consistente
    • stack/docker icon Docker Compose: Contenerización y orquestación de servicios
    • 🐶 Husky: Ganchos de Git para automatizar tareas de desarrollo
    • stack/commitlint icon Commitlint: Linting de mensajes de commit para mantener un historial limpio

Funcionalidades

  • Gestión de Estructura: Permite definir las macro-áreas del cementerio, categorizándolas por “Parque” y “Sector”. Esto sirve como cabecera para agrupar los espacios individuales.
  • Gestión de Espacios: Administración granular de cada unidad. Permite definir coordenadas, valor monetario y características físicas.
  • Control de Estados y Tipos: Clasificación de espacios mediante estados (Disponible, Vendido, Reservado, No disponible) y tipos de terreno (Borde, Centro, Camino).
  • Sistema de Reservas: Funcionalidad para vincular un usuario específico con un espacio (Detail) disponible, registrando la fecha y el estado activo de la reserva.
  • Gestión de Usuarios: Administración de las personas que adquieren o reservan los espacios.

Módulos

  • HeadModule: Maneja la lógica de las áreas generales (Parques/Sectores).
  • ReservationModule: Controla el proceso de reservas de espacios.
  • DetailModule: Gestiona los espacios individuales, sus características y estados.
  • UserModule: Administra la información de los usuarios.
  • AuthModule: Implementa la autenticación y autorización segura.

Modelo de datos

El diseño de la base de datos es relacional y se estructura principalmente en:

Modelo de datos de BDI
Modelo de datos de BDI

Puedes ver el modelo de datos en diagrams.net: Modelo de datos de BDI

Prerrequisitos

  • NodeJS >= 16.x
  • npm >= 9.x
  • Docker (opcional, para la base de datos PostgreSQL)

Instalación y ejecución (backend)

  1. Clona el repositorio:

    git clone https://github.com/igidio/bdi-backend.git
    cd bdi-backend
  2. Instala las dependencias:

    npm install
  3. Configuración del entorno: Renombra el archivo de entorno de ejemplo y configura tus variables:

    cp .template.env .env
  4. Configuración de la base de datos: Si tienes Docker instalado, configura el archivo 📄docker-compose.yaml con los datos de tu instancia de PostgreSQL. Luego, ejecuta el siguiente comando para iniciar la base de datos PostgreSQL:

    docker-compose up -d
  5. Ejecuta migraciones y seeds: Asegúrate de que la base de datos esté corriendo y ejecuta las migraciones y seeds para preparar el esquema:

    # Ejecutar migraciones de TypeORM
    npm run typeorm:generate
    # Ejecutar seeders para poblar datos iniciales
    npm run seed:fresh
  6. Inicia la aplicación:

    npm run start:dev

Si todo está configurado correctamente, la aplicación debería estar corriendo en 🔗http://localhost:3000.

Extra: si quieres usar husky para hooks de git y commit lints, ejecuta:

npx husky init

bdi-frontend

bdi-frontend es la interfaz de usuario del sistema BDI, diseñada para interactuar con el sistema de gestión de espacios en cementerios. Su objetivo es proporcionar una experiencia visual e intuitiva para que los usuarios puedan consultar la disponibilidad de espacios, gestionar las reservas y administrar su perfil, abstrayendo la lógica de negocio del servidor mediante una aplicación moderna y reactiva.

Información de espacio en BDI Frontend
Información de espacio en BDI Frontend

Stack tecnológico

  • Frontend
    • stack/typescript icon TypeScript: Lenguaje principal del proyecto
    • stack/nuxt icon Nuxt 3: Framework de interfaz de usuario
    • stack/vue icon Vue 3: Framework de interfaz de usuario
    • stack/vite icon Vite: Herramienta de construcción rápida
    • stack/pinia icon Pinia: Gestión de estado para el manejo global de datos
  • UI
    • stack/tailwind icon Tailwind 4: Framework de estilos
    • stack/sass icon SASS: Preprocesador CSS para estilos avanzados
    • stack/iconify icon Iconify: Iconos
  • Validación
    • stack/zod icon Zod: Validación de esquemas en tiempo de ejecución
  • Herramientas de desarrollo
    • 🐶 Husky: Ganchos de Git para automatizar tareas de desarrollo
    • stack/commitlint icon Commitlint: Linting de mensajes de commit para mantener un historial limpio

Funcionalidades

  • Autenticación de Usuarios: Flujos completos de registro, inicio de sesión y recuperación de contraseña.
  • Exploración de Espacios: Visualización de los detalles de los espacios disponibles, permitiendo a los usuarios ver características específicas de las tumbas o nichos.
  • Gestión de Reservas: Interfaz dedicada para que los usuarios consulten el estado de sus adquisiciones o reservas activas.
  • Perfil de Usuario: Sección personal para la gestión de datos de la cuenta.
  • Integración con API: Comunicación fluida con el backend para obtener datos en tiempo real sobre la disponibilidad de espacios y gestionar las reservas.
  • Diseño responsive: Adaptación automática a diferentes dispositivos para una experiencia óptima en móviles, tabletas y escritorios.
  • Modo oscuro y claro: Soporte para temas visuales según las preferencias del usuario.
Vista de reserva de espacios en BDI Frontend
Vista de reserva de espacios en BDI Frontend
Vista del mapa de espacios en BDI Frontend
Vista del mapa de espacios en BDI Frontend
Diseño responsivo, dimensiones de iPhone 12 Pro
Diseño responsivo, dimensiones de iPhone 12 Pro

Prerrequisitos

  • Node.js >= v18
  • NPM >= v9
  • Una instancia en ejecución de bdi-backend (para conectividad con la API)

Instalación y ejecución (frontend)

  1. Clona el repositorio

    git clone https://github.com/igidio/bdi-frontend.git
    cd bdi-frontend
  2. Instala las dependencias

    npm install
  3. Configura las variables de entorno

    Crea un archivo 📄.env a partir de la plantilla:

    cp .env.template .env
  4. Actualiza la variable SERVER en 📄.env para que apunte a la URL del backend (por ejemplo, http://localhost:3000).

  5. Ejecuta la aplicación

    Inicia el servidor de desarrollo:

    npm run dev

La aplicación estará disponible en 🔗http://localhost:5173 (o el puerto que se muestre en tu terminal).

Datos de prueba

Para probar la aplicación, puedes usar los siguientes datos de usuario predefinidos que se crean al ejecutar los seeders en el backend:

RolUsernameEmailContraseña
ADMINusername1email1@mail.compassword1
CLIENTusername2email2@mail.compassword1
CLIENTusername3email3@mail.compassword1

Licencia

Este proyecto está bajo la Licencia MIT. Consulta el archivo 📄LICENSE.md de los proyectos para más detalles.

© 2026 igidio