Initial commit — Donna portal v1

Setup completo del portal interno donna.aal-law.com:

* Landing público con OAuth login + grid de apps autenticado
* Flujo OAuth2 contra Mailcow (mail.aal-law.com)
* Sesiones SSO compartidas en el dominio (cookie donna_session, 8h)
* Whitelist de dominios aal-law.com / aalnlaw.com
* App "Control de Escrituras" migrada desde ZH-Consultores/control-escrituras
  (mismo schema, mismo frontend, ahora con shared Auth/Db/Config libs)
* Migraciones SQL para users, escrituras_tramites, escrituras_historial
* Caddy on :80 con rewrite extless → .php
* Backup diario MariaDB (systemd timer + script) con retención 14d
* Documentación de arquitectura en README + infra files en docs/infra
This commit is contained in:
Soporte ZH Consultores
2026-05-11 19:10:36 +00:00
commit 4ee32aec6d
21 changed files with 2327 additions and 0 deletions
+12
View File
@@ -0,0 +1,12 @@
-- ============================================================
-- Donna Portal — Schema 001: Core
-- ============================================================
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
name VARCHAR(255) NOT NULL DEFAULT '',
first_seen_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
last_login_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX idx_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+51
View File
@@ -0,0 +1,51 @@
-- ============================================================
-- Donna Portal — Schema 002: Control de Escrituras
-- (migrado del repo ZH-Consultores/control-escrituras)
-- ============================================================
CREATE TABLE IF NOT EXISTS escrituras_tramites (
id INT AUTO_INCREMENT PRIMARY KEY,
tramite VARCHAR(255) NOT NULL DEFAULT '',
cliente VARCHAR(255) NOT NULL DEFAULT '',
abogado VARCHAR(100) NOT NULL DEFAULT '',
notaria VARCHAR(100) NOT NULL DEFAULT '',
inscribe ENUM('Sí','No') NOT NULL DEFAULT 'Sí',
altera_turno ENUM('Sí','No') NOT NULL DEFAULT 'No',
instrucciones TEXT NOT NULL,
fecha_solicitud DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
estatus ENUM(
'Solicitado',
'Recibido',
'En Proceso',
'Protocolizado',
'En Registro',
'Inscrito'
) NOT NULL DEFAULT 'Solicitado',
ultima_actualizacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
observaciones TEXT NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
creado_por VARCHAR(255) NOT NULL DEFAULT '',
actualizado_por VARCHAR(255) NOT NULL DEFAULT '',
INDEX idx_estatus (estatus),
INDEX idx_abogado (abogado),
INDEX idx_inscribe (inscribe),
INDEX idx_altera (altera_turno),
INDEX idx_fecha (fecha_solicitud DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS escrituras_historial (
id INT AUTO_INCREMENT PRIMARY KEY,
tramite_id INT NOT NULL,
modificado_por VARCHAR(255) NOT NULL DEFAULT '',
modificado_en DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
campo VARCHAR(100) NOT NULL DEFAULT '',
valor_anterior TEXT NOT NULL,
valor_nuevo TEXT NOT NULL,
INDEX idx_tramite (tramite_id),
INDEX idx_fecha (modificado_en DESC),
CONSTRAINT fk_escrituras_historial_tramite
FOREIGN KEY (tramite_id) REFERENCES escrituras_tramites(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;