# Auditoría y plan de fusión

## 1. Sistema 1: `microerp`

Estructura PHP modular con `app`, `modules`, `partials`, `database`, `deploy`, `scripts`, `storage`, `tests` y `uploads`. Usaba PDO SQLite, autenticación propia, CSRF, auditoría y una interfaz azul/gris con modo claro y oscuro.

Funciones exclusivas:

- proveedores, clientes e inventario por lotes;
- ingresos, ventas FIFO y devoluciones;
- deuda, pagos y liquidaciones;
- reportes, auditoría, backup y restauración;
- migraciones idempotentes de SQLite.

## 2. Sistema 2: `catalogo-whatsapp`

Estructura pública y administrativa separada con `index.php`, `producto.php`, `carrito.php`, `api`, `admin`, `includes`, `assets`, `database` y `uploads`. Usaba PDO MySQL/MariaDB.

Funciones exclusivas:

- catálogo público renderizado en servidor;
- búsqueda, filtro, destacados y detalle por slug;
- carrito persistente en `localStorage`;
- validación final y cierre por WhatsApp;
- evento de pedido sin datos personales;
- SEO, sitemap, robots y medición opcional.

## 3. Funciones duplicadas

Ambos tenían productos, categorías, configuración, login, sesiones, CSRF, PDO, upload de imágenes y estilos propios.

## 4. Conflictos detectados

- SQLite y nombres españoles frente a MySQL y nombres ingleses.
- Precios en centavos enteros frente a `DECIMAL`.
- Stock calculado por lotes frente a una columna editable.
- `usuarios` frente a `admins`.
- `configuracion` frente a `settings`.
- raíz administrativa frente a raíz pública.
- dos nombres de sesión y dos bootstraps.
- tema azul/gris frente a tema oscuro con acento verde.
- sintaxis SQL incompatible: `ON DUPLICATE KEY`, `NOW()`, intervalos y bloqueos MySQL.

## 5. Código conservado

Se conservó `microerp` como base: conexión SQLite, seguridad, autenticación, auditoría, servicios contables, módulos, tests, despliegue y variables visuales.

Del segundo sistema se adaptaron las ideas y flujos de catálogo, carrito, WhatsApp, SEO, APIs y eventos, reescritos sobre las tablas y convenciones del primero.

## 6. Código reemplazado o sustituido

- `config/app.php` y `config/app.example.php` por `config/config.php` y `config/config.example.php`.
- El antiguo `index.php` administrativo se movió a `admin/index.php`.
- `index.php` pasó a ser la portada pública.
- El stock duplicado del segundo sistema fue sustituido por la consulta de lotes.
- Sus tablas `admins`, `categories`, `products`, `settings` y `order_events` no se copiaron.
- Sus hojas CSS y su sesión no se incorporaron como implementaciones paralelas.

La carpeta fuente `catalogo-whatsapp` no forma parte del artefacto desplegable final; se preservó fuera de `microerp` para no destruir material existente del usuario.

## 7. Riesgos y mitigaciones

- Divergencia de stock: eliminada al usar lotes como fuente única.
- Pérdida de historial: evitada con `ALTER TABLE` aditivo y migraciones registradas.
- Slugs duplicados: normalización y sufijos únicos.
- Concurrencia en SQLite: WAL, `busy_timeout` y transacción durante el cierre.
- Pedidos no confirmados: los eventos no descuentan stock ni se tratan como ventas.
- Upload ejecutable: MIME/contenido real, nombre aleatorio y bloqueo web.
- Rutas en subcarpetas: `base_path`, helpers únicos y ejemplos Apache/Nginx.

## 8. Plan ejecutado

1. Elegir `microerp` como proyecto final.
2. Ampliar su esquema y migración SQLite sin borrar datos.
3. Hacer pública la raíz y mover el panel a `/admin/`.
4. Integrar catálogo, detalle, carrito, API y WhatsApp.
5. Ampliar CRUD de productos/categorías y configuración.
6. Unificar estilos en `assets/css/app.css`.
7. Agregar rutas, SEO, sitemap, robots y despliegue.
8. Ejecutar lint, pruebas SQLite, HTTP y navegador.
9. Eliminar la base, sesión, log e imágenes temporales de prueba.
