Files
ibiza_sistema/docs/ESPECIFICACION_COMPLETA.md
nickpons666 535f7c5963 feat: Agregar filtros avanzados a reporte de Deudores de Conceptos
- Filtros por casas: selección múltiple con opción 'Todas las casas'
- Filtros por conceptos: selección múltiple con opción 'Todos los conceptos'
- Estado inicial: todos los filtros marcados por defecto (muestra toda la info)
- Exportación PDF: incluye solo datos filtrados según selección
- JavaScript interactivo: lógica de checkboxes con estados intermedios
- Modelo actualizado: método getConceptDebtorsFiltered para filtrado avanzado
- Interfaz intuitiva: scrollable containers para listas largas
- Preserva permisos: respeta restricciones de acceso por casas
2026-01-05 16:12:24 -06:00

4.3 KiB
Executable File

(Documento convertido a PHP puro con MySQL)

ESPECIFICACIÓN COMPLETA PARA SISTEMA IBIZA CEA

Desarrollo desde Cero con PHP Puro + MySQL


📋 RESUMEN EJECUTIVO

Proyecto: Sistema de Gestión Integral para Condominio IBIZA CEA Tecnología: PHP 8.x (procedimental / OOP simple) + MySQL 8.0 Arquitectura: Aplicación web monolítica clásica (MVC ligero propio) Objetivo: Unificar dos sistemas separados en una plataforma estable, sin frameworks


🏗️ ARQUITECTURA TÉCNICA

Stack Tecnológico

Backend: PHP 8.x (sin framework)
Frontend: HTML5 + CSS3 + Bootstrap 5 + JavaScript
Base de Datos: MySQL 8.0 (PDO)
Autenticación: Sesiones PHP + password_hash()
API Interna: Endpoints PHP (JSON)

Estructura de Directorios

ibizacea/
├── config/
│   └── database.php
├── core/
│   ├── Database.php
│   ├── Auth.php
│   └── Router.php
├── models/
│   ├── User.php
│   ├── House.php
│   ├── Payment.php
│   ├── Expense.php
│   └── ActivityLog.php
├── controllers/
│   ├── auth.php
│   ├── dashboard.php
│   ├── payments.php
│   ├── finance.php
│   └── reports.php
├── views/
│   ├── layout/
│   ├── dashboard/
│   ├── payments/
│   └── finance/
├── public/
│   ├── index.php
│   └── assets/
└── sql/
    └── schema.sql

🗄️ DISEÑO DE BASE DE DATOS (MySQL)

Tabla users

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(180) UNIQUE NOT NULL,
  email VARCHAR(180) UNIQUE NOT NULL,
  password VARCHAR(255) NOT NULL,
  first_name VARCHAR(100),
  last_name VARCHAR(100),
  role ENUM('ADMIN','CAPTURIST','VIEWER') DEFAULT 'VIEWER',
  is_active TINYINT(1) DEFAULT 1,
  last_login DATETIME NULL,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

Tabla houses

CREATE TABLE houses (
  id INT AUTO_INCREMENT PRIMARY KEY,
  number VARCHAR(10) UNIQUE NOT NULL,
  status VARCHAR(20),
  consumption_only TINYINT(1) DEFAULT 0,
  owner_name VARCHAR(200),
  owner_email VARCHAR(180),
  owner_phone VARCHAR(20)
);

Tabla payments

CREATE TABLE payments (
  id INT AUTO_INCREMENT PRIMARY KEY,
  house_id INT NOT NULL,
  year INT NOT NULL,
  month VARCHAR(20) NOT NULL,
  amount DECIMAL(10,2) DEFAULT 0,
  payment_date DATETIME NULL,
  created_by INT,
  FOREIGN KEY (house_id) REFERENCES houses(id)
);

Tabla expenses

CREATE TABLE expenses (
  id INT AUTO_INCREMENT PRIMARY KEY,
  description VARCHAR(300),
  amount DECIMAL(10,2),
  expense_date DATE,
  category VARCHAR(100),
  notes TEXT
);

Tabla activity_logs

CREATE TABLE activity_logs (
  id INT AUTO_INCREMENT PRIMARY KEY,
  user_id INT,
  action VARCHAR(100),
  details TEXT,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

🔐 AUTENTICACIÓN Y ROLES

Login PHP (ejemplo)

session_start();
$user = User::findByUsername($_POST['username']);

if ($user && password_verify($_POST['password'], $user['password'])) {
    $_SESSION['user_id'] = $user['id'];
    $_SESSION['role'] = $user['role'];
}

Roles

  • ADMIN: Acceso total
  • CAPTURIST: Registrar pagos y gastos
  • VIEWER: Solo lectura

🎛️ CONTROLADORES (PHP)

dashboard.php

require '../core/Auth.php';
Auth::check();

$data = Dashboard::getData($_GET['year'] ?? date('Y'));
require '../views/dashboard/index.php';

payments.php

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    Payment::update($_POST);
    echo json_encode(['success' => true]);
}

🎨 VISTAS (HTML + PHP)

layout/base.php

<!DOCTYPE html>
<html>
<head>
  <title>IBIZA CEA</title>
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<?php include $view; ?>
</body>
</html>

📦 DESPLIEGUE

Requisitos

  • PHP 8.x
  • MySQL 8.0
  • Apache o Nginx

index.php

require '../config/database.php';
require '../core/Router.php';
Router::dispatch();

AGREGAR MODULO PARA IMPORTAR

--De acuerdo a la relación de la base de datos crear un modulo para poder importar datos de forma masiva y coherente con el sistema. --Cada importación tendrá un archivo descargable de ejemplo para poder hacer la importación