# Dimersad ERP — Cartera, Ventas y Recaudos

Panel administrativo (PHP 8.2 + MySQLi + MariaDB) con 3 módulos obligatorios:
**Consultas** (DataTables server-side), **Importación** (CSV) e **Informes** (Chart.js).

## Requisitos del servidor
- PHP 8.2 (ea-php82) con extensión `mysqli` habilitada.
- MariaDB (o MySQL 5.7+).
- Acceso a phpMyAdmin o consola MySQL en cPanel.

## Despliegue en cPanel

1. **Base de datos**: en cPanel → *MySQL® Databases*, crea la base `dimersad_cartera_ventas` y un usuario con todos los privilegios sobre ella (cPanel antepone el prefijo de cuenta, ej. `usuario_dimersad`).
2. **Esquema**: en phpMyAdmin, selecciona la base y ejecuta [`sql/schema.sql`](sql/schema.sql) (pestaña *Importar* o *SQL*). Ajusta el nombre de la BD en el script si cPanel forzó un prefijo distinto a `dimersad_cartera_ventas`.
3. **Subir archivos**: sube todo el contenido de esta carpeta (`webapp/`) a `public_html/` o a un subdominio, vía *File Manager* o FTP.
4. **Credenciales**: edita [`config/config.php`](config/config.php) con el host, usuario, clave y nombre real de la base (o defínelas como variables de entorno PHP en cPanel → *Setup Node.js/PHP App* → *Environment Variables*, o en `.htaccess` con `SetEnv DB_USER ...`).
5. **Permisos**: la carpeta `uploads/` debe ser escribible por PHP (755 u 775). Ya incluye un `.htaccess` que bloquea el acceso público directo a los CSV cargados.
6. Verifica en el navegador: `https://tu-dominio.com/` debe redirigir al Dashboard.

## Carga inicial de datos

Usa el módulo **Importación → Cargar CSV** en este orden (por las dependencias entre tablas):

1. Vendedores
2. Clientes
3. Productos
4. Ventas
5. Cartera (saldos vigentes)
6. Recaudos

Exporta cada hoja de los Excel originales (`vendedores.xlsx`, `cliente.xlsx`, `productos.xlsx`, `ventas.xlsx`, `cartera.xlsx`, `recaudos.xlsx`) a CSV y súbelos por ese módulo. Hay plantillas de referencia en [`plantillas/`](plantillas/) con los encabezados esperados (el importador acepta variantes razonables de nombre de columna, y detecta automáticamente `,` o `;` como delimitador).

El importador es **reejecutable sin duplicar datos**: clientes/productos/vendedores/cartera se actualizan por su código (upsert), y ventas/recaudos usan un hash de línea para ignorar filas ya importadas.

## Estructura

```
webapp/
  config/       credenciales y configuración (config.php)
  includes/     conexión mysqli, helpers, layout compartido, importadores
  assets/       CSS/JS propios
  consultas/    6 vistas con DataTables (clientes, productos, vendedores, ventas, cartera, recaudos)
  importar/     UI de carga CSV + procesador (procesar.php)
  informes/     dashboard KPIs + informe de cartera + informe de ventas
  api/          endpoints JSON (DataTables server-side y datos para Chart.js)
  plantillas/   CSV de ejemplo por entidad
  sql/          schema.sql (DDL completo)
  uploads/      CSV recibidos (trazabilidad; acceso web bloqueado)
```

## Pendiente antes de producción

- **Autenticación**: esta primera versión no incluye login. Antes de exponerla públicamente, agrega control de acceso (sesión + usuarios, o autenticación HTTP básica a nivel de servidor) a todo lo que no sea `login.php`.
- **HTTPS** obligatorio si vas a enviar credenciales o datos de cartera por la red.
- Ajusta `MAX_UPLOAD_MB` en `config/config.php` y los límites `upload_max_filesize` / `post_max_size` de PHP si tus CSV de ventas superan los 20MB.

## Nota de esta entrega

El código se construyó y revisó estáticamente (sin PHP/MariaDB disponibles en este entorno de generación). Antes de dar por cerrado el módulo, ejecuta el `schema.sql`, carga los 6 CSV de ejemplo y recorre cada pantalla en el navegador para confirmar que las consultas, la importación y los gráficos funcionan con datos reales de tu servidor.
