177 lines
5.7 KiB
Markdown
177 lines
5.7 KiB
Markdown
# Don Marco — Administración Financiera (LAN)
|
||
|
||
Aplicación web multiusuario para gestión de **ingresos** (ventas, servicios, alquileres), **egresos** (gastos diarios/fijos), **personal** y **reportes** consolidados. Pensada para operar en la red local de una pequeña empresa con un servidor central.
|
||
|
||
## 1. Stack tecnológico recomendado
|
||
|
||
| Capa | Tecnología | Motivo |
|
||
|------|------------|--------|
|
||
| **Frontend** | React 18 + Vite | UI rápida, componentes reutilizables para planillas dinámicas |
|
||
| **Backend** | Node.js + Express | API REST ligera, fácil de mantener en LAN |
|
||
| **Base de datos** | SQLite (`better-sqlite3`) | Almacenamiento local en el servidor, sin instalar MySQL/PostgreSQL |
|
||
| **Auth** | JWT + bcrypt | Sesiones stateless, contraseñas hasheadas |
|
||
| **Despliegue** | Docker Compose + Nginx | Un solo comando en el servidor de la red |
|
||
|
||
> **Nota:** Aunque mencionaste “almacenamiento local”, para **multiusuario en red** conviene SQLite en el servidor (no `localStorage` del navegador), para que todos vean los mismos datos. El token JWT sí se guarda en `localStorage` del cliente.
|
||
|
||
## 2. Estructura del proyecto
|
||
|
||
```
|
||
DonMarcoBackend/
|
||
├── docker-compose.yml
|
||
├── README.md
|
||
├── .env.example
|
||
├── backend/
|
||
│ ├── Dockerfile
|
||
│ ├── package.json
|
||
│ └── src/
|
||
│ ├── index.js
|
||
│ ├── db.js
|
||
│ ├── seed.js
|
||
│ ├── middleware/auth.js
|
||
│ ├── routes/
|
||
│ │ ├── auth.js
|
||
│ │ ├── users.js
|
||
│ │ ├── sheets.js
|
||
│ │ └── reports.js
|
||
│ └── utils/calculations.js
|
||
└── frontend/
|
||
├── Dockerfile
|
||
├── nginx.conf
|
||
├── package.json
|
||
├── vite.config.js
|
||
└── src/
|
||
├── App.jsx
|
||
├── api/client.js
|
||
├── context/AuthContext.jsx
|
||
├── components/
|
||
│ ├── Layout.jsx
|
||
│ ├── IngresoSheet.jsx
|
||
│ ├── GastoSheet.jsx
|
||
│ └── PersonalSheet.jsx
|
||
├── pages/
|
||
│ ├── LoginPage.jsx
|
||
│ ├── HomePage.jsx
|
||
│ ├── ReportesPage.jsx
|
||
│ └── AdminPage.jsx
|
||
├── utils/calc.js
|
||
└── styles/global.css
|
||
```
|
||
|
||
## 3. Credenciales por defecto
|
||
|
||
| Usuario | Contraseña | Rol |
|
||
|---------|------------|-----|
|
||
| `JEFE` | `MACAN` | Superusuario / administrador |
|
||
|
||
**Cambie la contraseña del JEFE en producción** desde el panel de administración o actualizando la base de datos.
|
||
|
||
## 4. Funcionalidades implementadas
|
||
|
||
- Login seguro y menú con pestañas (Ventas, Servicios, Alquileres, Gastos, Personal, Reportes, Salir).
|
||
- Panel de administración: crear usuarios, contraseñas y permisos **ver/editar** por planilla.
|
||
- Planillas con filas en blanco al inicio y botón **+** para agregar líneas ilimitadas.
|
||
- Cálculos automáticos: Precio Total, Utilidad, totales de cierre.
|
||
- Gastos con clasificación diario / fijo / variable.
|
||
- Personal: hasta 10 mensualizados y 5 eventuales por registro.
|
||
- Reportes diario, semanal y mensual con filtro de fechas y selección de planillas.
|
||
- Cierre semanal de gastos diarios y consolidado mensual en reportes.
|
||
|
||
## 5. Ejecución con Docker (recomendado en el servidor LAN)
|
||
|
||
### Primera vez o actualización (importante: usar `--no-cache`)
|
||
|
||
Si no ve la pestaña **"Cierre de Gestión"**, las imágenes Docker están **viejas**. Debe **reconstruir sin caché**:
|
||
|
||
**Windows (PowerShell):**
|
||
```powershell
|
||
cd DonMarcoBackend
|
||
.\docker-update.ps1
|
||
```
|
||
|
||
**Linux / Git Bash:**
|
||
```bash
|
||
cd DonMarcoBackend
|
||
chmod +x docker-update.sh
|
||
./docker-update.sh
|
||
```
|
||
|
||
**Manual:**
|
||
```bash
|
||
docker compose down
|
||
docker compose build --no-cache
|
||
docker compose up -d
|
||
```
|
||
|
||
### Verificar que Docker tiene la versión correcta
|
||
|
||
```bash
|
||
curl http://localhost:4000/api/health
|
||
```
|
||
|
||
Debe responder `"version": "1.2.0"` y `"features": ["historial-gestiones", "cierre-gestion", ...]`.
|
||
|
||
En el navegador (`http://IP-DEL-SERVIDOR`):
|
||
- Pestaña **Administración** (solo usuario JEFE) → sección **Cierre de gestión**
|
||
- Cada planilla tiene **barra lateral** con gestiones anteriores (solo lectura)
|
||
- Al pie: **Don Marco v1.2.0 — Historial de gestiones (Docker)**
|
||
|
||
### Acceso en la red
|
||
|
||
- **Web:** `http://IP-DEL-SERVIDOR` (puerto 80)
|
||
- **API:** `http://IP-DEL-SERVIDOR:4000/api/health`
|
||
|
||
### Cierre de gestión (solo JEFE)
|
||
|
||
1. Ingresar como `JEFE` / `MACAN`
|
||
2. Clic en **Administración** (menú superior)
|
||
3. En **Cierre de gestión**, elegir el **último día del mes** → **Cerrar gestión**
|
||
4. La planilla principal muestra solo la **gestión actual**; el **historial** está en la barra lateral (solo lectura)
|
||
5. Tras el cierre, los usuarios cargan filas nuevas con el botón **+**
|
||
|
||
Los datos en SQLite se conservan en el volumen `donmarco_data` al actualizar Docker.
|
||
|
||
## 6. Desarrollo local (sin Docker)
|
||
|
||
**Terminal 1 — API:**
|
||
|
||
```bash
|
||
cd backend
|
||
npm install
|
||
npm run dev
|
||
```
|
||
|
||
**Terminal 2 — Web:**
|
||
|
||
```bash
|
||
cd frontend
|
||
npm install
|
||
npm run dev
|
||
```
|
||
|
||
Abrir `http://localhost:3000` (el proxy de Vite redirige `/api` al puerto 4000).
|
||
|
||
## 7. Variables de entorno
|
||
|
||
Copie `.env.example` a `.env` y defina al menos:
|
||
|
||
```env
|
||
JWT_SECRET=un-secreto-largo-unico
|
||
```
|
||
|
||
En Docker, `JWT_SECRET` se lee desde el entorno del host o del archivo `.env` junto a `docker-compose.yml`.
|
||
|
||
## 8. Fórmula de reportes
|
||
|
||
Para diario, semanal y mensual (en el rango de fechas seleccionado):
|
||
|
||
```
|
||
Resultado = (Ventas + Alquileres + Servicios) − Total Gastos − Total Personal
|
||
```
|
||
|
||
El sistema indica **UTILIDAD** o **PÉRDIDA** según el signo del resultado neto.
|
||
|
||
---
|
||
|
||
Desarrollado como base funcional lista para ampliar (exportación PDF, respaldos automáticos, HTTPS con certificado interno, etc.).
|