S360 by Synersys — Sistema Multi-Empresa / Multi-Proyecto ========================================================== ESTRUCTURA DE CARPETAS ─────────────────────── PORTAL360-SISTEMA/ │ ├── api/ ← Endpoints PHP (compartidos por todas las empresas) │ ├── _core.php ← Núcleo: auth, rutas, helpers (no acceso web) │ ├── login.php │ ├── session.php │ ├── logout.php │ ├── lotes.php │ ├── guardar_estado.php │ ├── usuarios.php │ ├── historial.php │ ├── catalogo_precios.php │ ├── config_global.php │ ├── setup_empresa.php ← Ejecutar 1 vez por empresa, luego eliminar │ └── .htaccess ← Bloquea _core.php y setup_*.php │ ├── admin/ ← Panel de administración (HTML/JS compartido) │ └── index.html │ ├── login.html ← Login compartido (detecta empresa por email) │ ├── _sistema/ ← Datos globales — NUNCA exponer al web │ ├── .htaccess ← Deny from all │ ├── empresas.json ← Directorio de empresas activas │ └── sesiones.json ← Sesiones activas (todas las empresas) │ └── empresas/ │ └── [empresa-slug]/ ← Una carpeta por empresa (ej: synersys, inmobiliaria-x) │ ├── config.json ← Nombre, logo, color de la empresa │ ├── data/ ← Datos privados de la empresa │ ├── .htaccess ← Deny from all │ └── usuarios.json ← Usuarios de esta empresa │ └── proyectos/ │ └── [proyecto-slug]/ ← Un proyecto = un tour 3DVista (ej: vista-verde, las-palmas) │ ├── proyecto.json ← Datos físicos de lotes (del tour — no cambia) │ ├── data/ ← Datos operativos del proyecto │ ├── .htaccess │ ├── estado_lotes.json ← Estados CRM (disponible/separado/vendido...) │ ├── catalogo_precios.json ← Precios por lote │ ├── historial.json ← Auditoría de cambios │ └── config.json ← Config del proyecto (montos, plazos, etc.) │ └── tour/ ← Archivos 3DVista publicados aquí ├── index.htm ├── script.js ├── script_general.js ← JS del tour con window.LOTES ├── proyecto.json ← copia o symlink de ../../proyecto.json └── estado_lotes.json ← Copia pública (sin datos sensibles) Generada automáticamente por el CRM CÓMO AGREGAR UNA NUEVA EMPRESA ──────────────────────────────── 1. Crear carpeta: empresas/nueva-empresa/ 2. Crear subcarpetas: data/ y proyectos/primer-proyecto/ 3. Editar api/setup_empresa.php con los datos de la empresa 4. Ejecutar en navegador: /api/setup_empresa.php?clave=SETUP2026 5. Eliminar setup_empresa.php del servidor CÓMO AGREGAR UN NUEVO PROYECTO (a empresa existente) ─────────────────────────────────────────────────────── La función setup_proyecto() en _core.php crea la estructura automáticamente. Solo necesitas subir los archivos del tour 3DVista a: empresas/[empresa]/proyectos/[proyecto]/tour/ Y añadir los datos de lotes en proyecto.json. CÓMO FUNCIONA EL MULTI-EMPRESA EN EL LOGIN ───────────────────────────────────────────── El endpoint login.php recibe { email, password } y: 1. Busca el email en todas las empresas activas (empresas.json) 2. Identifica la empresa_id del usuario 3. Selecciona el primer proyecto activo de esa empresa como proyecto_id 4. Genera un token de sesión con empresa_id + proyecto_id embebidos Para forzar empresa/proyecto específico desde el tour: Enviar también { empresa_id: "synersys", proyecto_id: "vista-verde" } SEGURIDAD ────────── - _sistema/ y data/ tienen .htaccess con Deny from all - _core.php bloqueado por .htaccess en api/ - setup_empresa.php debe eliminarse tras ejecutar - Tokens: 256 bits de entropía (bin2hex random_bytes 32) - Sesiones: TTL 8h con sliding window - Passwords: bcrypt cost 12 - Rate limiting: 5 intentos / 15 min por IP