# 📋 ESPECIFICACIONES DEL PROYECTO

**Proyecto:** WEBMoney - Gerenciador Financeiro Pessoal WEB  
**Proveedor:** ConneXiFly  
**Versión Especificación:** 1.0.0  
**Fecha Creación:** 7 de Dezembro de 2025  
**Estado:** En Desarrollo

---

## 📑 TABLA DE CONTENIDOS

1. [Información General del Proyecto](#información-general-del-proyecto)
2. [Dominios y Configuración](#dominios-y-configuración)
3. [Infraestructura del Servidor](#infraestructura-del-servidor)
4. [Stack Tecnológico](#stack-tecnológico)
5. [Funcionalidades Previstas](#funcionalidades-previstas)
6. [Requisitos de UI/UX](#requisitos-de-uiux)
7. [Notas Importantes de Desarrollo](#notas-importantes-de-desarrollo)
8. [Matriz de Tareas](#matriz-de-tareas)
9. [Cronograma de Implementación](#cronograma-de-implementación)

---

## 📊 INFORMACIÓN GENERAL DEL PROYECTO

### Descripción
**WEBMoney** es un gerenciador financiero personal basado en web que permite a los usuarios:
- Gestionar sus finanzas personales
- Registrar ingresos y gastos
- Generar reportes y análisis gráficos
- Exportar datos en múltiples formatos
- Acceder desde cualquier dispositivo (web y mobile)

### Objetivos Principales
- ✓ Proporcionar herramienta intuitiva de gestión financiera
- ✓ Soporte multiidioma (3 idiomas)
- ✓ Interfaz moderna, responsiva y accesible
- ✓ Seguridad de datos y privacidad
- ✓ Integración con documentos (recibos, comprobantes)
- ✓ Análisis visual mediante gráficos

### Público Objetivo
- Usuarios individuales
- Pequeñas empresas
- Freelancers
- Emprendedores

---

## 🌐 DOMINIOS Y CONFIGURACIÓN

### Dominios Principales

| Item | Valor | Propósito |
|------|-------|----------|
| **Dominio Institucional** | cnxifly.com | Portal principal ConneXiFly |
| **Subdominio WEBMoney** | webmoney.cnxifly.com | Aplicación WEBMoney |
| **Email** | @cnxifly.com | Comunicación y notificaciones |
| **DNS Primario** | ns1028.ui-dns.biz | UI-DNS |
| **DNS Secundario** | ns1114.ui-dns.com | UI-DNS |
| **DNS Terciario** | ns1016.ui-dns.org | UI-DNS |
| **DNS Cuaternario** | ns1119.ui-dns.de | UI-DNS |

### Certificados SSL
- **Requerido:** Certificados SSL válidos para cnxifly.com
- **Tipo:** Certificado wildcard (*.cnxifly.com) recomendado
- **Proveedor:** Preferentemente Let's Encrypt
- **Renovación:** Automática (certificados Let's Encrypt)

### Subdominios Configurados
```
cnxifly.com              → 213.165.93.60
www.cnxifly.com          → 213.165.93.60
webmoney.cnxifly.com     → 213.165.93.60 (WEBMoney App)
mail.cnxifly.com         → 213.165.93.60 (Panel Admin Email - Roundcube/PostfixAdmin)
webmail.cnxifly.com      → 213.165.93.60 (Webmail Usuarios - Roundcube)
ftp.cnxifly.com          → 213.165.93.60 (FTP/SFTP)
api.cnxifly.com          → 213.165.93.60 (API - Futuro)
```

**Nota sobre subdominios de email:**
- **mail.cnxifly.com**: Panel administrativo para gestionar cuentas de email, dominios, alias (PostfixAdmin + Roundcube admin)
- **webmail.cnxifly.com**: Webmail para usuarios finales leer/enviar emails (Roundcube)

---

## 🖥️ INFRAESTRUCTURA DEL SERVIDOR

### Detalles del Servidor

| Característica | Especificación |
|---|---|
| **IP Público (IPv4)** | 213.165.93.60 |
| **IP Público (IPv6)** | 2001:ba0:268:ab00::1 |
| **Sistema Operativo** | Linux Ubuntu 24.04.3 LTS |
| **Kernel** | 6.8.0-88-generic |
| **Arquitectura** | x86_64 (64-bit) |
| **Usuario Root** | root |
| **Contraseña Root** | Master9354 |
| **Conexión SSH** | sshpass (automática con contraseña) |
| **Firewall** | UFW (Uncomplicated Firewall) |
| **DNS Local** | systemd-resolved |
| **Timezone** | Europe/Madrid (WET/WEST) |
| **Encoding** | UTF-8 (todo el sistema) |

### Puertos a Configurar

| Puerto | Protocolo | Servicio | Estado |
|--------|-----------|---------|--------|
| 22 | SSH | Acceso remoto | ✓ Activo |
| 80 | HTTP | Web (redireccionar a 443) | Pendiente |
| 443 | HTTPS | Web seguro | Pendiente |
| 25/465/587 | SMTP | Correo electrónico | Pendiente |
| 143/993 | IMAP | Acceso correo | Pendiente |
| 21 | FTP | Transferencia de archivos | Pendiente |
| 22 | SFTP | SFTP (SSH) | Activo |
| 53 | DNS | Resolver DNS | Local only |

### Requisitos de Instalación

**Sin scripts automáticos - Instalación manual comando a comando**

#### Sistema Base
- [ ] Actualizar sistema: `apt-get update && apt-get upgrade`
- [ ] Instalar build-essential: `apt-get install build-essential`
- [ ] Instalar curl, wget: `apt-get install curl wget`
- [ ] Instalar git: `apt-get install git`

#### Configuración de Timezone y Encoding (OBLIGATORIO)

**Timezone: Europe/Madrid**

```bash
# Verificar timezone actual
timedatectl

# Configurar timezone a Madrid
timedatectl set-timezone Europe/Madrid

# Verificar la configuración
timedatectl
# Salida esperada: Time zone: Europe/Madrid (WET/WEST, UTC±0/±1)
```

**Encoding UTF-8 (OBLIGATORIO EN TODO EL SISTEMA)**

```bash
# Verificar locale actual
locale

# Instalar paquetes de locales
apt-get install locales

# Configurar UTF-8 para Madrid (es_ES)
locale-gen es_ES.UTF-8
update-locale LANG=es_ES.UTF-8

# Verificar la configuración
locale
# Salida esperada: LANG=es_ES.UTF-8, LC_ALL=es_ES.UTF-8

# Actualizar variables de entorno
export LC_ALL=es_ES.UTF-8
export LANG=es_ES.UTF-8
```

**Archivos a Modificar:**

```bash
# /etc/environment
# Agregar al final:
LANG=es_ES.UTF-8
LC_ALL=es_ES.UTF-8
LC_CTYPE=es_ES.UTF-8
LC_COLLATE=es_ES.UTF-8
LC_NUMERIC=es_ES.UTF-8
LC_TIME=es_ES.UTF-8
LC_MONETARY=es_ES.UTF-8
LC_MESSAGES=es_ES.UTF-8
LC_PAPER=es_ES.UTF-8
LC_NAME=es_ES.UTF-8
LC_ADDRESS=es_ES.UTF-8
LC_TELEPHONE=es_ES.UTF-8
LC_MEASUREMENT=es_ES.UTF-8
LC_IDENTIFICATION=es_ES.UTF-8

# /etc/locale.gen
# Descomentar:
# es_ES.UTF-8 UTF-8
es_ES.UTF-8 UTF-8

# /etc/default/locale
# Configurar:
LANG="es_ES.UTF-8"
LANGUAGE="es_ES:es:en"
LC_ALL="es_ES.UTF-8"
```

**Verificación Final:**

```bash
# Ver zona horaria actual
timedatectl
# Debe mostrar: Time zone: Europe/Madrid (WET/WEST, UTC±0)

# Ver encoding de terminal
echo $LANG
# Debe mostrar: es_ES.UTF-8

# Ver todas las variables de locale
locale
# Todas deben estar en UTF-8
```

⚠️ **IMPORTANTE:** Estas configuraciones deben aplicarse PRIMERO, antes de instalar cualquier servicio (BD, web, email, etc.). Algunos servicios como PostgreSQL y MySQL heredarán estas configuraciones.

---

#### Sistema Base Continuación
- [ ] Configurar Timezone: Europe/Madrid
- [ ] Configurar Encoding: UTF-8 (todo el sistema)
- [ ] Actualizar sistema: `apt-get update && apt-get upgrade`
- [ ] Instalar build-essential: `apt-get install build-essential`
- [ ] Instalar curl, wget: `apt-get install curl wget`
- [ ] Instalar git: `apt-get install git`

---

## 💻 STACK TECNOLÓGICO

### Frontend

**Tecnología:** React (última versión estable)

```
React: ^18.3.0 (o versión más reciente)
ReactDOM: ^18.3.0
React Router: ^6.x (para navegación)
Axios: ^1.6.x (para peticiones HTTP)
Bootstrap: ^5.3.0 (CSS Framework)
Bootstrap Icons: ^1.11.x
Sass/SCSS: Para estilos personalizados
Chart.js: ^4.4.x (gráficos)
React-ChartJS-2: ^5.2.x (componente React)
Date-fns: Para manipulación de fechas
```

**Build Tools:**
- Vite (recomendado) o Create React App
- Node.js: ^18.0.0 o superior
- npm o yarn para gestión de dependencias

### Backend

**Tecnología:** Laravel (última versión estable)

```
Laravel: ^11.0 (o versión más reciente)
PHP: ^8.2.0
Composer: Última versión (gestor de dependencias)
```

**Dependencias Laravel Principales:**
- laravel/framework
- laravel/tinker
- laravel/passport (autenticación OAuth)
- laravel/sanctum (tokens API)
- maatwebsite/excel (importar/exportar)
- intervention/image (procesamiento de imágenes)
- guzzlehttp/guzzle (peticiones HTTP)
- doctrine/dbal (migraciones avanzadas)

### Base de Datos

**Motor:** Seleccionar entre:
- **PostgreSQL 15+** (recomendado para datos financieros)
- **MySQL 8.0+** (alternativa compatible)
- **MariaDB 10.6+** (alternativa a MySQL)

**Características Requeridas:**
- Soporte de transacciones ACID
- Integridad referencial
- Triggers para auditoría
- Backups automáticos

**CONFIGURACIÓN OBLIGATORIA: UTF-8 en todas las conexiones**

```sql
-- PostgreSQL
-- En postgresql.conf:
client_encoding = 'UTF8'

-- Crear base de datos con UTF-8:
CREATE DATABASE webmoney ENCODING 'UTF8' LOCALE 'es_ES.UTF-8';

-- MySQL/MariaDB
-- En my.cnf o my.ini, agregar en [mysqld]:
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

-- Crear base de datos:
CREATE DATABASE webmoney CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- Verificar encoding:
SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation%';
```

**Verificación de Encoding en BD:**

```sql
-- PostgreSQL
SHOW client_encoding;
SHOW server_encoding;

-- MySQL/MariaDB
SHOW VARIABLES LIKE 'character_set_client';
SHOW VARIABLES LIKE 'character_set_database';
```

### Servidor Web

**Opciones:**

#### Opción 1: Nginx (Recomendado)
```
nginx: 1.24.x o superior
- Alto rendimiento
- Bajo consumo de memoria
- Ideal para aplicaciones modernas
```

#### Opción 2: Apache
```
apache2: 2.4.58 o superior
- Mayor compatibilidad
- Módulos adicionales disponibles
- Mod rewrite para URLs limpias
```

**Configuración Requerida:**
- Gzip compression activado
- Cache headers adecuados
- CORS configurado
- Rate limiting para API

### Servidor de Email

**Configuración:**
```
Servidor SMTP: Postfix o Exim
Servidor IMAP: Dovecot

Cuentas de email:
├─ admin@cnxifly.com (administrador)
├─ no-reply@cnxifly.com (notificaciones automáticas)
├─ support@cnxifly.com (soporte técnico)
└─ Cuentas centralizadas compartidas

Contraseña Base: M@ster93542026
(Cambiar para cada cuenta con incremento numérico)

Almacenamiento: Mínimo 10GB
Quota por usuario: 5GB
```

### SSL/TLS

**Certificados:**
- Let's Encrypt (gratuito, renovable automáticamente)
- Wildcard para *.cnxifly.com
- Renovación automática mediante Certbot

**Ciphers Recomendados:**
```
TLS 1.2 mínimo
TLS 1.3 preferido
Ciphers modernos (excluir RC4, DES, SSLv3)
```

### FTP/SFTP

**Servidor FTP:**
```
vsftpd (Very Secure FTP Daemon)
- Soporte SSL/TLS
- Usuarios chroot
- Rate limiting
- Logging completo
```

**Acceso SFTP:**
- SSH en puerto 22
- Usuarios con shell restringido
- Directorios home aislados

---

## 🚀 FUNCIONALIDADES PREVISTAS

### Funcionalidades Core (MVP - Minimum Viable Product)

#### 1. Autenticación y Gestión de Usuarios
- [x] Login/Logout
- [x] Recuperación de contraseña
- [x] Perfil de usuario
- [x] Cambio de contraseña
- [x] Autenticación de dos factores (opcional)
- [ ] Panel administrativo para crear usuarios (SOLO ADMINS)

**⚠️ IMPORTANTE:** Los usuarios NO pueden auto-registrarse. Solo administradores pueden crear nuevas cuentas mediante panel administrativo.

#### 2. Gestión de Cuentas Bancarias
- [ ] Crear múltiples cuentas
- [ ] Editar cuentas
- [ ] Eliminar cuentas
- [ ] Saldo inicial y actual
- [ ] Tipos de cuenta (Ahorro, Corriente, Crédito)

#### 3. Registro de Transacciones
- [ ] Crear ingreso
- [ ] Crear gasto
- [ ] Crear transferencia entre cuentas
- [ ] Editar transacción
- [ ] Eliminar transacción (con registro de auditoría)
- [ ] Búsqueda y filtrado de transacciones
- [ ] Categorización de gastos

#### 4. Categorías de Gastos
- [ ] Categorías predefinidas
- [ ] Crear categorías personalizadas
- [ ] Editar categorías
- [ ] Subcategorías
- [ ] Colores e iconos personalizados

#### 5. Fotos de Recibos
- [ ] Cargar foto de recibo
- [ ] Asociar con transacción
- [ ] Compresión automática
- [ ] Galería de recibos
- [ ] Búsqueda por fecha y categoría

#### 6. Reportes y Análisis
- [ ] Resumen de ingresos/gastos (mes, año)
- [ ] Gráficos de gastos por categoría
- [ ] Evolución de saldo en el tiempo
- [ ] Comparativa mes a mes
- [ ] Alertas de gasto por categoría
- [ ] Proyecciones de ahorro

#### 7. Importación/Exportación
- [ ] Importar transacciones desde XLS/XLSX
- [ ] Importar transacciones desde CSV
- [ ] Exportar a XLS/XLSX
- [ ] Exportar a CSV
- [ ] Exportar a PDF (reportes)
- [ ] Generación de PDF con gráficos

#### 8. Notificaciones y Alertas
- [ ] Alertas de gasto por categoría
- [ ] Alertas de saldo bajo
- [ ] Recordatorios de transacciones recurrentes
- [ ] Notificaciones por email
- [ ] Notificaciones en la aplicación

### Funcionalidades Futuras (v2.0+)
- Transacciones recurrentes/automáticas
- Presupuestos personalizados
- Metas de ahorro
- Integración con bancos (API)
- Sincronización multi-dispositivo
- Análisis predictivo (IA)
- Compartir cuentas (multi-usuario)
- Análisis de inversiones

---

## 🎨 REQUISITOS DE UI/UX

### Idiomas Soportados

**3 Idiomas Principales:**
1. **Español** (es) - Idioma principal
2. **Inglés** (en) - Alcance internacional
3. **Portugués Brasileño** (pt-BR) - Mercado brasileño

**Implementación:**
- i18n (Internacionalization) con librería i18next o react-intl
- Cambio de idioma en tiempo real
- Almacenamiento de preferencia de idioma
- Traducción de todos los textos UI, errores y mensajes

### Sistema de Alertas y Notificaciones

**Prohibición Explícita:**
```
❌ NO se pueden usar alertas del navegador:
   - alert()
   - confirm()
   - prompt()
   
✅ USAR SIEMPRE:
   - Modales Bootstrap (Bootstrap Modal)
   - Toast/Notificaciones (Toast desde Bootstrap 5)
   - Notificaciones de aplicación personalizadas
```

**Modales Bootstrap:**
```javascript
// Ejemplo de modal para confirmación
const modal = new bootstrap.Modal(document.getElementById('confirmModal'));
modal.show();

// Ejemplo de toast para notificaciones
const toast = new bootstrap.Toast(document.getElementById('notificationToast'));
toast.show();
```

**Tipos de Notificaciones:**
- Success (Verde): Operaciones completadas
- Error (Rojo): Operaciones fallidas
- Warning (Amarillo): Advertencias
- Info (Azul): Información general
- Confirmación: Modal con botones

### Tema Visual

**Estilo:** Oscuro, profesional, moderno, basado en azul

**Características:**
- Modo oscuro por defecto (dark mode)
- Base azul profesional para aplicación financiera
- Alto contraste para accesibilidad
- Diseño moderno y minimalista
- Paleta de colores:
  ```
  Primario: #1E40AF (Azul profesional - base principal)
  Primario Oscuro: #1E3A8A (Azul más oscuro para hover/active)
  Primario Claro: #3B82F6 (Azul claro para highlights)
  
  Secundario: #10B981 (Verde esmeralda para ingresos/positivo)
  Peligro: #EF4444 (Rojo para gastos/alertas/negativo)
  Advertencia: #F59E0B (Amarillo ámbar para advertencias)
  Información: #06B6D4 (Cyan para información)
  
  Fondo Principal: #0F172A (Slate 900 - casi negro)
  Fondo Secundario: #1E293B (Slate 800 - paneles/cards)
  Fondo Terciario: #334155 (Slate 700 - elementos elevados)
  
  Texto Principal: #F1F5F9 (Slate 100 - alto contraste)
  Texto Secundario: #CBD5E1 (Slate 300 - texto menos importante)
  Texto Terciario: #94A3B8 (Slate 400 - placeholders/disabled)
  
  Bordes: #334155 (Slate 700 - sutiles)
  Sombras: rgba(0, 0, 0, 0.3) (suaves)
  ```

**Implementación CSS/SCSS:**
```scss
// Variables de tema oscuro azul
$primary: #1E40AF;
$primary-dark: #1E3A8A;
$primary-light: #3B82F6;

$secondary: #10B981;
$danger: #EF4444;
$warning: #F59E0B;
$info: #06B6D4;

$bg-primary: #0F172A;
$bg-secondary: #1E293B;
$bg-tertiary: #334155;

$text-primary: #F1F5F9;
$text-secondary: #CBD5E1;
$text-tertiary: #94A3B8;

$border-color: #334155;
$shadow: rgba(0, 0, 0, 0.3);

// Bootstrap override (en frontend/src/styles/_variables.scss)
$body-bg: $bg-primary;
$body-color: $text-primary;
$theme-colors: (
  "primary": $primary,
  "secondary": $secondary,
  "success": $secondary,
  "danger": $danger,
  "warning": $warning,
  "info": $info,
  "dark": $bg-secondary,
  "light": $text-tertiary
);
```

**Tipografía:**
- Fuente: Inter, Segoe UI, Roboto, o equivalente sans-serif moderna
- Peso: 400 (regular), 500 (medium), 600 (semibold), 700 (bold)
- Tamaño base: 16px
- Línea: 1.5
- Suavizado: -webkit-font-smoothing: antialiased

**Efectos Visuales:**
- Transiciones suaves: 150-300ms ease
- Border radius: 0.5rem (8px) para cards/botones
- Sombras sutiles: box-shadow con blur 10-20px
- Gradientes opcionales en headers: linear-gradient(135deg, #1E40AF, #1E3A8A)

### Responsividad

**Breakpoints:**
```scss
$xs: 0px      // Móvil pequeño
$sm: 576px    // Móvil
$md: 768px    // Tablet
$lg: 992px    // Desktop
$xl: 1200px   // Desktop grande
$xxl: 1400px  // Ultra ancho
```

**Requisitos Específicos:**
- [ ] Funcional en móviles (iPhone, Android)
- [ ] Funcional en tablets (iPad, Galaxy Tab)
- [ ] Funcional en desktops
- [ ] Funcional en navegadores modernos (Chrome, Firefox, Safari, Edge)
- [ ] Orientación vertical y horizontal
- [ ] Touch events para móviles
- [ ] Gestos (swipe, pinch) opcionales

### Accesibilidad (WCAG 2.1)

**Requisitos Mínimos:**
- [ ] Contraste de color: Ratio 4.5:1 para texto
- [ ] Navegación por teclado: TAB, ENTER, ESC
- [ ] Screen readers: Alt text en imágenes
- [ ] Etiquetas HTML semánticas
- [ ] Atributos ARIA donde sea necesario
- [ ] Validación de formularios accesible

### Componentes Visuales

**Componentes Bootstrap Requeridos:**
- Navbar/Header
- Sidebar/Menu
- Cards
- Modales
- Formularios
- Tabla de datos
- Gráficos (Chart.js)
- Toast/Alertas
- Badges/Labels
- Buttons
- Dropdowns
- Accordion
- Pagination
- Progress bars

---

## 📝 NOTAS IMPORTANTES DE DESARROLLO

### Principios Generales

1. **Instalación Manual**
   - Cada componente se instala comando a comando
   - No se utilizan scripts automáticos bash
   - Cada paso debe ser documentado
   - Permitir validación entre pasos

2. **Documentación Completa**
   - Documentar toda la configuración realizada
   - Incluir comandos exactos utilizados
   - Explicar el propósito de cada paso
   - Mantener guía de instalación actualizada

3. **Documentación de Código**
   - Comentarios en código importante
   - JSDoc para funciones JavaScript
   - PHPDoc para funciones Laravel
   - README en cada módulo/carpeta
   - Guía de arquitectura

4. **Desarrollo Incremental**
   - Desarrollar SOLO lo solicitado
   - CUANDO se solicite específicamente
   - No anticipar características no solicitadas
   - Validar con usuario antes de desarrollar

5. **Testing**
   - Tests unitarios para lógica crítica
   - Tests de integración para APIs
   - Tests de UI para componentes
   - Coverage mínimo: 80%

### Estructura de Directorios Recomendada

```
/webmoney
├── /backend (Laravel)
│   ├── app/
│   │   ├── Http/
│   │   │   ├── Controllers/
│   │   │   ├── Middleware/
│   │   │   └── Requests/
│   │   ├── Models/
│   │   ├── Services/
│   │   └── Repositories/
│   ├── database/
│   │   ├── migrations/
│   │   ├── seeders/
│   │   └── factories/
│   ├── routes/
│   ├── config/
│   ├── tests/
│   ├── .env (no versionar)
│   ├── composer.json
│   └── artisan
│
├── /frontend (React)
│   ├── src/
│   │   ├── components/
│   │   ├── pages/
│   │   ├── services/
│   │   ├── hooks/
│   │   ├── contexts/
│   │   ├── styles/
│   │   ├── utils/
│   │   ├── App.jsx
│   │   └── main.jsx
│   ├── public/
│   ├── tests/
│   ├── package.json
│   ├── vite.config.js
│   └── .env (no versionar)
│
├── /docs (Documentación)
│   ├── INSTALACION.md
│   ├── API.md
│   ├── ARQUITECTURA.md
│   ├── USUARIOS_PRUEBA.md
│   └── GUIA_USUARIO.md
│
├── /scripts (Scripts de utilidad)
│   ├── backup.sh
│   ├── deploy.sh
│   └── test.sh
│
├── ESPECIFICACIONES_WEBMONEY.md (este archivo)
├── README.md
├── CHANGELOG.md
└── VERSION
```

### Convenciones de Código

**JavaScript/React:**
```javascript
// CamelCase para variables y funciones
const userName = "John";
function calculateTotal() { }

// PascalCase para componentes
function UserProfile() { }

// UPPER_SNAKE_CASE para constantes
const MAX_LOGIN_ATTEMPTS = 5;

// Usar arrow functions
const handler = () => { };

// Destructuring
const { name, email } = user;
```

**Laravel/PHP:**
```php
// CamelCase para métodos
public function getUserTransactions() { }

// CamelCase para propiedades
private $transactionService;

// PascalCase para clases
class TransactionController extends Controller { }

// UPPER_SNAKE_CASE para constantes
const DEFAULT_PAGE_SIZE = 20;

// Usar type hints
public function store(TransactionRequest $request): JsonResponse { }
```

### Variables de Entorno

**Backend (.env):**
```
APP_NAME=WEBMoney
APP_ENV=production
APP_DEBUG=false
APP_URL=https://webmoney.cnxifly.com

DB_CONNECTION=pgsql
DB_HOST=localhost
DB_PORT=5432
DB_DATABASE=webmoney
DB_USERNAME=webmoney_user
DB_PASSWORD=XXXXX

MAIL_MAILER=smtp
MAIL_HOST=localhost
MAIL_PORT=587
MAIL_USERNAME=no-reply@cnxifly.com
MAIL_PASSWORD=XXXXX
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=no-reply@cnxifly.com

JWT_SECRET=XXXXX
SESSION_DRIVER=cookie

# Timezone y Encoding
APP_TIMEZONE=Europe/Madrid
APP_LOCALE=es
FALLBACK_LOCALE=es
APP_ENCODING=UTF-8
```

**Laravel config/app.php:**
```php
'timezone' => 'Europe/Madrid',
'locale' => 'es',
'fallback_locale' => 'es',
'faker_locale' => 'es_ES',
```

**Laravel config/database.php (PostgreSQL):**
```php
'pgsql' => [
    'driver' => 'pgsql',
    'host' => env('DB_HOST', 'localhost'),
    'port' => env('DB_PORT', '5432'),
    'database' => env('DB_DATABASE', 'webmoney'),
    'username' => env('DB_USERNAME', 'postgres'),
    'password' => env('DB_PASSWORD', ''),
    'charset' => 'utf8',
    'prefix' => '',
    'schema' => 'public',
    'sslmode' => 'prefer',
    // Conexión UTF-8
    'options' => [
        'client_encoding' => 'UTF8',
    ],
],
```

**Laravel config/database.php (MySQL):**
```php
'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', 'localhost'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'webmoney'),
    'username' => env('DB_USERNAME', 'root'),
    'password' => env('DB_PASSWORD', ''),
    'unix_socket' => env('DB_SOCKET', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'prefix_indexes' => true,
    'strict' => true,
    'engine' => null,
    'modes' => [
        'STRICT_TRANS_TABLES',
        'ERROR_FOR_DIVISION_BY_ZERO',
        'NO_ENGINE_SUBSTITUTION',
    ],
]
```

**Frontend (.env):**
```
VITE_API_URL=https://webmoney.cnxifly.com/api
VITE_APP_NAME=WEBMoney
VITE_DEFAULT_LANGUAGE=es
VITE_TIMEZONE=Europe/Madrid
VITE_ENCODING=UTF-8
```

**Frontend - vite.config.js:**
```javascript
export default {
  // ... otras config
  define: {
    __TIMEZONE__: JSON.stringify('Europe/Madrid'),
    __LOCALE__: JSON.stringify('es-ES'),
    __ENCODING__: JSON.stringify('UTF-8'),
  }
}
```

**React - Configuración de i18n:**
```javascript
// src/i18n/config.js
import i18n from 'i18next';

i18n.init({
  lng: 'es',
  fallbackLng: 'es',
  defaultNS: 'translation',
  // Configuración de timezone
  interpolation: {
    escapeValue: false,
    formatSeparators: ['{', '}'],
  },
  resources: {
    es: { translation: { /* ... */ } },
    en: { translation: { /* ... */ } },
    'pt-BR': { translation: { /* ... */ } },
  }
});

// Configurar date-fns con timezone de Madrid
import { setDefaultOptions } from 'date-fns';
import { es } from 'date-fns/locale';

setDefaultOptions({ locale: es });
```

**Nginx - Headers UTF-8:**
```nginx
# En nginx.conf o bloque server:
charset utf-8;
charset_types text/html text/xml text/plain text/css text/javascript application/json application/javascript;

# Headers adicionales para UTF-8
add_header Content-Type "text/html; charset=utf-8";
```

**Apache - Headers UTF-8:**
```apache
# En .htaccess o apache config:
AddDefaultCharset utf-8

# Headers específicos
Header set Content-Type "text/html; charset=utf-8"

# Para archivos específicos
<FilesMatch "\.php$">
  Header set Content-Type "text/html; charset=utf-8"
</FilesMatch>
```

### Seguridad

**Requisitos Obligatorios:**
- [ ] HTTPS en todas las conexiones
- [ ] CSRF protection activada
- [ ] SQL injection prevention (prepared statements)
- [ ] XSS protection (sanitización de inputs)
- [ ] Rate limiting en APIs
- [ ] CORS configurado correctamente
- [ ] Validación de inputs en frontend y backend
- [ ] Hashing de contraseñas (bcrypt, argon2)
- [ ] Logs de auditoría para transacciones
- [ ] Encriptación de datos sensibles
- [ ] Headers de seguridad (CSP, X-Frame-Options, etc.)

### Configuración del Servidor - Timezone y Encoding

**⚠️ CRÍTICO: DEBE configurarse ANTES de instalar cualquier servicio**

**Timezone: Europe/Madrid (WET/WEST)**
- Zona horaria: GMT+0 (invierno), GMT+1 (verano)
- Todos los timestamps deben estar en este timezone
- Las fechas en la BD deben guardar en UTC pero mostrar en Madrid
- Los logs del servidor deben usar Madrid

**Encoding: UTF-8 en TODO el sistema**
- Archivos del servidor: UTF-8 sin BOM
- Base de datos: UTF-8/utf8mb4
- Frontend: UTF-8
- Comunicación HTTP: UTF-8
- Emails: UTF-8
- Archivos CSV/Excel exportados: UTF-8

**Verificación de Configuración (post-instalación):**
```bash
# Timezone
timedatectl status
# Esperado: Time zone: Europe/Madrid (WET/WEST, UTC±0/±1)

# Sistema locale
locale
# Esperado: LANG=es_ES.UTF-8, LC_ALL=es_ES.UTF-8

# Base de datos
# PostgreSQL: SHOW server_encoding; -> UTF8
# MySQL: SHOW VARIABLES LIKE 'character_set%'; -> utf8mb4

# Archivos PHP
file /path/to/file.php
# Esperado: ASCII text (o UTF-8 text)

# Headers HTTP
curl -I https://webmoney.cnxifly.com
# Esperado: Content-Type: text/html; charset=utf-8
```

### Performance

**Targets:**
- [ ] Time to First Byte (TTFB): < 200ms
- [ ] First Contentful Paint (FCP): < 1.5s
- [ ] Largest Contentful Paint (LCP): < 2.5s
- [ ] Cumulative Layout Shift (CLS): < 0.1
- [ ] Bundle size: < 500KB (gzipped)
- [ ] API response time: < 500ms

---

## 📊 MATRIZ DE TAREAS

### Fase 1: Infraestructura (v1.0.0)
| Tarea | Estado | Responsable | Fecha Estimada |
|-------|--------|-------------|---|
| Auditoria inicial servidor | ✅ Completado | Copilot | 2025-12-07 |
| Instalación SO base | ⏳ Pendiente | - | - |
| Instalación MySQL/PostgreSQL | ⏳ Pendiente | - | - |
| Instalación Nginx/Apache | ⏳ Pendiente | - | - |
| Instalación Node.js | ⏳ Pendiente | - | - |
| Instalación PHP y Composer | ⏳ Pendiente | - | - |
| Configuración SSL/TLS | ⏳ Pendiente | - | - |
| Configuración servidor email | ⏳ Pendiente | - | - |
| Configuración FTP/SFTP | ⏳ Pendiente | - | - |
| Configuración firewall | ⏳ Pendiente | - | - |

### Fase 2: Backend (v1.1.0)
| Tarea | Estado | Responsable | Fecha Estimada |
|-------|--------|-------------|---|
| Setup proyecto Laravel | ⏳ Pendiente | - | - |
| Modelos y Migraciones | ⏳ Pendiente | - | - |
| Autenticación y Usuarios | ⏳ Pendiente | - | - |
| CRUD Cuentas Bancarias | ⏳ Pendiente | - | - |
| CRUD Transacciones | ⏳ Pendiente | - | - |
| API REST | ⏳ Pendiente | - | - |
| Tests unitarios | ⏳ Pendiente | - | - |

### Fase 3: Frontend (v1.2.0)
| Tarea | Estado | Responsable | Fecha Estimada |
|-------|--------|-------------|---|
| Setup proyecto React | ⏳ Pendiente | - | - |
| Autenticación (Login) | ⏳ Pendiente | - | - |
| Dashboard principal | ⏳ Pendiente | - | - |
| Gestión de cuentas | ⏳ Pendiente | - | - |
| Registro de transacciones | ⏳ Pendiente | - | - |
| Reportes y gráficos | ⏳ Pendiente | - | - |
| Importación/Exportación | ⏳ Pendiente | - | - |
| Internacionalización (i18n) | ⏳ Pendiente | - | - |

### Fase 4: Integración (v1.3.0)
| Tarea | Estado | Responsable | Fecha Estimada |
|-------|--------|-------------|---|
| Integración Frontend-Backend | ⏳ Pendiente | - | - |
| Testing integral | ⏳ Pendiente | - | - |
| Optimización performance | ⏳ Pendiente | - | - |
| Deploy a producción | ⏳ Pendiente | - | - |
| Documentación final | ⏳ Pendiente | - | - |

---

## 📅 CRONOGRAMA DE IMPLEMENTACIÓN

### Timeline Propuesto

```
Semana 1-2: Infraestructura y Setup
  ├─ Instalación sistemas base
  ├─ Configuración BD y web server
  └─ Configuración SSL y email

Semana 3-4: Backend
  ├─ Proyecto Laravel base
  ├─ Modelos y migraciones
  └─ APIs iniciales

Semana 5-6: Frontend
  ├─ Proyecto React base
  ├─ Componentes y páginas
  └─ Integración con APIs

Semana 7: Testing e integración
  ├─ Tests completos
  ├─ Bugs y ajustes
  └─ Optimización

Semana 8: Deploy y documentación
  ├─ Deploy a producción
  ├─ Documentación final
  └─ Capacitación usuarios
```

### Hitos (Milestones)

- **v1.0.0** (2025-12-07): Auditoria y especificaciones
- **v1.1.0** (TBD): Infraestructura completa
- **v1.2.0** (TBD): Backend funcional
- **v1.3.0** (TBD): Frontend integrado
- **v2.0.0** (TBD): MVP lanzado en producción

---

## 📞 CONTACTO Y REFERENCIAS

**Servidor Principal:**
- URL: https://webmoney.cnxifly.com
- IP: 213.165.93.60
- SSH: root@213.165.93.60

**Dominio:**
- cnxifly.com
- Registrador: UI-DNS
- Nameservers: ns1028.ui-dns.biz, ns1114.ui-dns.com, ns1016.ui-dns.org, ns1119.ui-dns.de

**Documentación Relacionada:**
- AUDITORIA_INICIAL_CNXIFLY.md - Auditoria del servidor
- PAINEL_CONTROLE.txt - Dashboard del proyecto
- .DIRETRIZES_DESENVOLVIMENTO - Normas de desarrollo

---

**Documento creado:** 7 de Dezembro de 2025  
**Versión:** 1.0.0  
**Estado:** En Desarrollo  
**Última actualización:** 7 de Dezembro de 2025

---

> 📌 Este documento es la especificación viva del proyecto. Se actualizará con cada versión.
> Consultar CHANGELOG.md para historia de cambios.
