# Arquitectura del Proyecto — Plataforma OE

La **Plataforma OE** está diseñada como un sistema modular para la gestión de datos, sincronización con Google APIs y automatización de procesos institucionales.

Este documento describe la arquitectura general, los componentes clave y el flujo interno de datos.

---

## 🧩 Componentes principales

| Componente | Descripción |
|------------|-------------|
| Frontend   | PHP (HTML + JavaScript nativo) |
| Backend    | PHP 8.1+ sobre arquitectura modular |
| Base de datos | MySQL 8.0+ |
| Integraciones externas | Google Sheets, Google Drive, Google Calendar |
| Seguridad | Sesiones + roles + `section_guard` |
| Automatización | Cron jobs, rclone, scripts CLI |

---

## 📁 Estructura de directorios

/plataformaOE
│
├── modulos/ # Módulos CRUD generados automáticamente
│ └── <nombre_modulo>/
│ ├── Crud_<tabla>.php
│ ├── Grid_<tabla>.php
│ ├── config.json
│ └── sheets_sync.php
│
├── config/ # Configuración central
│ ├── db.php # Conexión MySQL
│ └── google.php # Autenticación cuenta de servicio
│
├── plantilla_base/ # Plantillas de generación automática
│ ├── 4_formulario_template.php
│ ├── 5_grilla_template.php
│ └── sheets_sync_template.php
│
├── cred/ # Credenciales de Google
│ └── credencialesGoogle.json
│
├── cron/ # Automatizaciones de servidor
│ ├── respaldo_total.sh
│ └── sincronizaciones.php
│
├── dashboard/ # Dashboard e indicadores
│
├── auth/ # Login, sesiones y permisos
│ ├── login.php
│ ├── logout.php
│ ├── check_access.php
│ └── section_guard.php
│
└── index.php


---

## 🔄 Flujo general del sistema

### 1. Autenticación y acceso
- Login con correo y con Google OAuth.
- La sesión almacena `role_name`.
- `check_access.php` valida permisos antes de cargar módulos.

### 2. CRUD y Grillas
- Cada módulo CRUD se genera automáticamente desde plantillas.
- `Crud_<tabla>.php` inserta/actualiza MySQL y Google Sheets.
- `Grid_<tabla>.php` muestra una tabla editable con JavaScript nativo.

### 3. Sincronización MySQL ↔ Google Sheets
- `sheets_sync.php` usa la cuenta de servicio.
- Sin `sleep`, optimizado para no bloquear la ejecución.
- Cambios quedan reflejados en ambos sistemas.

### 4. Dashboard
- Lectura de endpoints JSON internos.
- Métricas visuales (actividades, instituciones, participación, etc.).
- Permite vista ejecutiva de KPIs institucionales.

---

## 🔑 Seguridad

- Control de acceso basado en roles (`público`, `aliado`, `admin`).
- `section_guard.php` bloquea acceso directo por URL.
- Sesiones seguras en cada request.
- Carpetas sensibles fuera del `public_html` cuando es posible.
- Reportes de vulnerabilidades: **asotor@gmail.com**

---

## 🗃 Base de datos

- Motor: MySQL 8.0+
- Tablas sincronizadas con Sheets mediante claves primarias.
- Triggers opcionales para historial/versionado.

---

## ☁️ Integra con Google APIs

- **Sheets API:** sincronización bidireccional
- **Drive API:** gestión documental y respaldos
- **Calendar API:** sincronización de actividades como eventos
- Autenticación: `credencialesGoogle.json` (cuenta de servicio)

---

## ♻️ Automatización

- Cron diario para respaldos automáticos
- `rclone` sube respaldos a Google Drive
- Limpieza automática de respaldos antiguos

---

## 🧪 Buenas prácticas de desarrollo

- PHP 8.1+ con estilo PSR-12
- No subir credenciales al repositorio
- Metodología de commits descriptivos
- Versionado con tags SemVer
- Documentación obligatoria de nuevos módulos

---

## 👤 Autoría

Este proyecto es propiedad de:

**Alfonso Soto**  
📧 Correo del propietario: **asotor@gmail.com**

Para más detalles ver `ROADMAP.md`, `CHANGELOG.md`, `CONTRIBUTING.md` y `SECURITY.md`.
