(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 ```sql 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 ```sql 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 ```sql 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 ```sql 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 ```sql 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) ```php 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 ```php require '../core/Auth.php'; Auth::check(); $data = Dashboard::getData($_GET['year'] ?? date('Y')); require '../views/dashboard/index.php'; ``` ### payments.php ```php if ($_SERVER['REQUEST_METHOD'] === 'POST') { Payment::update($_POST); echo json_encode(['success' => true]); } ``` --- ## 🎨 VISTAS (HTML + PHP) ### layout/base.php ```php IBIZA CEA ``` --- ## 📦 DESPLIEGUE ### Requisitos * PHP 8.x * MySQL 8.0 * Apache o Nginx ### index.php ```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