first commit

This commit is contained in:
unknown
2026-06-03 16:59:27 -04:00
commit b35cc2f54b
36 changed files with 5634 additions and 0 deletions

134
README.md Normal file
View File

@@ -0,0 +1,134 @@
# 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)
```bash
cd DonMarcoBackend
docker compose up -d --build
```
Acceso desde cualquier PC de la red:
- **Web:** `http://IP-DEL-SERVIDOR` (puerto 80)
- **API directa (opcional):** `http://IP-DEL-SERVIDOR:4000/api/health`
## 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.).