docs: documentacion completa — README, guia de uso, instalacion, API POS
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
304
README.md
304
README.md
@@ -1,205 +1,183 @@
|
|||||||
# Nexus Autoparts
|
# Nexus Autoparts
|
||||||
|
|
||||||
**Sistema de catalogo de autopartes con navegacion jerarquica, similar a 7zap.com/RockAuto.**
|
**POS + Catalogo de autopartes para refaccionarias mexicanas.**
|
||||||
|
|
||||||
Plataforma SaaS que conecta talleres con bodegas/distribuidores. Permite buscar partes OEM y aftermarket por vehiculo (marca, modelo, ano, motor), gestionar inventario de bodegas, y consultar disponibilidad y precios en tiempo real.
|
Sistema integral que combina un catalogo publico de autopartes con un Punto de Venta multi-tenant, disenado para refaccionarias independientes. Incluye inventario, facturacion CFDI 4.0, contabilidad, y caja registradora.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Dos Sistemas
|
||||||
|
|
||||||
|
| Sistema | Puerto | Descripcion |
|
||||||
|
|---------|--------|-------------|
|
||||||
|
| **Web publica** | 5000 | Landing page + catalogo publico con navegacion por vehiculo |
|
||||||
|
| **POS multi-tenant** | 5001 | Sistema de punto de venta completo, instalable como PWA |
|
||||||
|
|
||||||
|
### Web publica (puerto 5000)
|
||||||
|
|
||||||
|
- Landing page para talleres y refaccionarias
|
||||||
|
- Catalogo publico: Marca > Modelo > Ano > Motor > Categoria > Partes
|
||||||
|
- Selector de regiones: Mexico/USA/Canada, Europa, Asia, Todos
|
||||||
|
- Busqueda combinada vehiculo + parte
|
||||||
|
- VIN decoder via NHTSA API
|
||||||
|
- Diagramas explosionados con hotspots
|
||||||
|
|
||||||
|
### POS multi-tenant (puerto 5001)
|
||||||
|
|
||||||
|
- **Multi-tenant**: base de datos aislada por cliente
|
||||||
|
- **PWA**: instalable en tablets/celulares, modo offline
|
||||||
|
- **10 pantallas**: Login, Catalogo, Inventario, POS, Clientes, Facturacion, Contabilidad, Dashboard, Reportes, Configuracion
|
||||||
|
- **81+ endpoints API** organizados en 9 blueprints
|
||||||
|
- **2 temas**: Industrial oscuro + Moderno claro (toggle en sidebar)
|
||||||
|
- **Auth por PIN** con JWT + rate limiting + bloqueo por dispositivo
|
||||||
|
- **5 roles**: Dueno, Admin, Cajero, Almacenista, Contador
|
||||||
|
|
||||||
|
#### Modulos del POS
|
||||||
|
|
||||||
|
| Modulo | Funcionalidad |
|
||||||
|
|--------|--------------|
|
||||||
|
| Catalogo | Navegacion TecDoc por vehiculo, busqueda inteligente, stock local, alternativas, carrito |
|
||||||
|
| Inventario | CRUD productos, compras, ajustes, transferencias, toma fisica, alertas, reportes (ABC, valoracion, sin movimiento) |
|
||||||
|
| Punto de Venta | Ventas, cotizaciones, apartados, credito, atajos F1-F6, metodos de pago mixtos |
|
||||||
|
| Clientes | Datos fiscales, 3 tiers de precio, credito con limites, vehiculos, historial |
|
||||||
|
| Facturacion | CFDI 4.0 (Ingreso, Egreso, Pago), cola de timbrado, cancelacion SAT |
|
||||||
|
| Contabilidad | Polizas automaticas, catalogo SAT, balanza, estado de resultados, balance general, antiguedad |
|
||||||
|
| Caja Registradora | Apertura, movimientos, corte X, corte Z, multi-caja |
|
||||||
|
| Dashboard | Ventas del dia vs meta, cajas activas, alertas |
|
||||||
|
| Reportes | Financieros y operativos |
|
||||||
|
| Configuracion | Negocio, sucursales, empleados, roles, temas |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Tech Stack
|
## Tech Stack
|
||||||
|
|
||||||
| Componente | Tecnologia |
|
| Componente | Tecnologia |
|
||||||
|------------|-----------|
|
|------------|-----------|
|
||||||
| Backend | Python 3, Flask |
|
| Backend | Python 3, Flask |
|
||||||
| Base de datos | PostgreSQL |
|
| Base de datos | PostgreSQL (master + tenant DBs) |
|
||||||
| ORM / SQL | SQLAlchemy (`text()` raw SQL) |
|
| SQL | psycopg2 raw SQL (sin ORM) |
|
||||||
| Autenticacion | JWT (PyJWT) + bcrypt |
|
| Auth | JWT (PyJWT) + bcrypt PIN hashing |
|
||||||
| Data import | TecDoc via Apify, NHTSA VIN API |
|
| CFDI | lxml (XML builder CFDI 4.0) |
|
||||||
| Frontend | HTML/CSS/JS vanilla (sin framework) |
|
| Frontend | HTML/CSS/JS vanilla (sin framework) |
|
||||||
| Dependencias extra | openpyxl (Excel), csv (CSV import) |
|
| Estilos | CSS custom properties (design tokens) |
|
||||||
|
| PWA | Service Worker + manifest |
|
||||||
|
| Data import | TecDoc via Apify, NHTSA VIN API |
|
||||||
|
|
||||||
## Estadisticas de la Base de Datos
|
---
|
||||||
|
|
||||||
- **1.4M+** partes OEM
|
## Base de Datos
|
||||||
- **300K+** partes aftermarket
|
|
||||||
- **13M+** cross-references (numeros alternos, supersesiones, intercambios)
|
|
||||||
- **12B+** vehicle-part links (fitment)
|
|
||||||
- **100+** marcas, miles de modelos, anos 1956-2026
|
|
||||||
|
|
||||||
## Features
|
| Metrica | Cantidad |
|
||||||
|
|---------|----------|
|
||||||
|
| Partes OEM | 1.5M+ |
|
||||||
|
| Partes aftermarket | 304K+ |
|
||||||
|
| Cross-references | 15.8M+ |
|
||||||
|
| Marcas TecDoc importadas | 6 (Toyota, Nissan, Renault, Ford, VW, Honda) |
|
||||||
|
| Rango de anos | 1956-2026 |
|
||||||
|
|
||||||
- **Catalogo de autopartes** con navegacion jerarquica: Marca > Modelo > Ano > Motor > Categoria > Grupo > Parte
|
---
|
||||||
- **TecDoc integration** (via Apify) para importar datos OEM y aftermarket de Europa/Mexico
|
|
||||||
- **SaaS multi-tenant** con roles: `ADMIN`, `OWNER`, `TALLER`, `BODEGA`
|
|
||||||
- **JWT authentication** con access tokens (15 min) y refresh tokens (30 dias)
|
|
||||||
- **Gestion de inventario** para bodegas con mapeo flexible de columnas CSV/Excel
|
|
||||||
- **Disponibilidad de partes** en multiples bodegas con precios comparativos
|
|
||||||
- **Alternativas aftermarket** con cross-references por cada parte OEM
|
|
||||||
- **Panel de administracion** con gestion de usuarios, import/export CSV, CRUD de categorias/grupos/partes/fabricantes/fitment
|
|
||||||
- **Busqueda full-text** en el catalogo de partes (PostgreSQL `tsvector`)
|
|
||||||
- **Busqueda combinada** vehiculo + parte (e.g., "Toyota Corolla 2020 frenos")
|
|
||||||
- **VIN decoder** via NHTSA API con cache en base de datos
|
|
||||||
- **Diagramas explosionados** con hotspots clickeables
|
|
||||||
- **Vehicle-to-part linking** (12B+ vehicle_parts links)
|
|
||||||
|
|
||||||
## Quick Start
|
## Quick Start
|
||||||
|
|
||||||
### Requisitos previos
|
### Requisitos
|
||||||
|
|
||||||
- Python 3.8+
|
- Python 3.11+
|
||||||
- PostgreSQL con la base `nexus_autoparts`
|
- PostgreSQL 15+
|
||||||
|
- Linux (Debian/Ubuntu/Raspberry Pi OS)
|
||||||
|
|
||||||
### Instalacion
|
### Web publica (catalogo)
|
||||||
|
|
||||||
```bash
|
|
||||||
cd /home/Autopartes
|
|
||||||
pip install -r requirements.txt
|
|
||||||
```
|
|
||||||
|
|
||||||
### Ejecutar el servidor
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /home/Autopartes/dashboard
|
cd /home/Autopartes/dashboard
|
||||||
|
pip install -r ../requirements.txt
|
||||||
python3 server.py
|
python3 server.py
|
||||||
|
# Acceder: http://localhost:5000
|
||||||
```
|
```
|
||||||
|
|
||||||
El servidor arranca en `http://localhost:5000`.
|
### POS
|
||||||
|
|
||||||
### Importar datos de TecDoc
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Fase 1: descargar datos de TecDoc a JSON
|
cd /home/Autopartes/pos
|
||||||
|
pip install -r requirements.txt
|
||||||
|
|
||||||
|
# Crear primer tenant
|
||||||
|
python3 -c "
|
||||||
|
from services.tenant_manager import provision_tenant
|
||||||
|
result = provision_tenant('Mi Refaccionaria', rfc='RFC000000AAA', owner_name='Admin', owner_pin='1234')
|
||||||
|
print(result)
|
||||||
|
"
|
||||||
|
|
||||||
|
# Iniciar
|
||||||
|
python3 app.py
|
||||||
|
# Acceder: http://localhost:5001/pos/login
|
||||||
|
# PIN: 1234
|
||||||
|
```
|
||||||
|
|
||||||
|
### Importar datos TecDoc
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Descargar datos de TecDoc a JSON
|
||||||
python3 scripts/import_tecdoc.py download
|
python3 scripts/import_tecdoc.py download
|
||||||
|
|
||||||
# Fase 2: importar JSON a PostgreSQL
|
# Importar JSON a PostgreSQL
|
||||||
python3 scripts/import_tecdoc.py import
|
python3 scripts/import_tecdoc.py import
|
||||||
|
|
||||||
# Ver progreso
|
# Ver progreso
|
||||||
python3 scripts/import_tecdoc.py status
|
python3 scripts/import_tecdoc.py status
|
||||||
```
|
```
|
||||||
|
|
||||||
### Importar partes y linkar vehiculos
|
---
|
||||||
|
|
||||||
```bash
|
## Estructura del Proyecto
|
||||||
# Importar partes TecDoc (OEM + aftermarket)
|
|
||||||
python3 scripts/import_tecdoc_parts.py
|
|
||||||
|
|
||||||
# Importar datos en vivo desde TecDoc API
|
|
||||||
python3 scripts/import_live.py
|
|
||||||
|
|
||||||
# Crear links vehiculo-parte (fitment masivo)
|
|
||||||
python3 scripts/link_vehicle_parts.py
|
|
||||||
|
|
||||||
# Migrar datos aftermarket
|
|
||||||
python3 scripts/migrate_aftermarket.py
|
|
||||||
|
|
||||||
# Aplicar schema SaaS (roles, users, inventory tables)
|
|
||||||
python3 scripts/migrate_saas_schema.py
|
|
||||||
```
|
|
||||||
|
|
||||||
## Paginas del Dashboard
|
|
||||||
|
|
||||||
| Ruta | Archivo | Descripcion |
|
|
||||||
|------|---------|-------------|
|
|
||||||
| `/login.html` | `login.html` | Login con JWT |
|
|
||||||
| `/demo.html` | `demo.html` | Catalogo publico / demo |
|
|
||||||
| `/admin` | `admin.html` | Panel de administracion (ADMIN/OWNER) |
|
|
||||||
| `/bodega.html` | `bodega.html` | Gestion de inventario para bodegas |
|
|
||||||
| `/tienda.html` | `tienda.html` | Vista de tienda/catalogo para talleres |
|
|
||||||
| `/pos.html` | `pos.html` | Punto de venta |
|
|
||||||
| `/captura.html` | `captura.html` | Captura de partes |
|
|
||||||
| `/cuentas.html` | `cuentas.html` | Gestion de cuentas |
|
|
||||||
|
|
||||||
## API Overview
|
|
||||||
|
|
||||||
Documentacion completa en [`docs/API.md`](docs/API.md).
|
|
||||||
|
|
||||||
### Auth (`/api/auth/`)
|
|
||||||
- `POST /api/auth/register` - Registrar usuario (TALLER/BODEGA)
|
|
||||||
- `POST /api/auth/login` - Login, retorna access + refresh tokens
|
|
||||||
- `POST /api/auth/refresh` - Renovar access token
|
|
||||||
- `GET /api/auth/me` - Info del usuario autenticado
|
|
||||||
|
|
||||||
### Catalogo (`/api/`)
|
|
||||||
- `GET /api/brands` - Listar marcas
|
|
||||||
- `GET /api/models?brand=X` - Modelos por marca
|
|
||||||
- `GET /api/years?brand=X&model=Y` - Anos disponibles
|
|
||||||
- `GET /api/engines?brand=X&model=Y&year=Z` - Motores disponibles
|
|
||||||
- `GET /api/categories` - Categorias de partes (arbol jerarquico)
|
|
||||||
- `GET /api/parts?group_id=X` - Partes por grupo
|
|
||||||
- `GET /api/parts/{id}/alternatives` - Alternativas aftermarket
|
|
||||||
- `GET /api/parts/{id}/cross-references` - Cross-references
|
|
||||||
- `GET /api/search?q=...` - Busqueda combinada (vehiculos + partes + aftermarket)
|
|
||||||
|
|
||||||
### Inventario (`/api/inventory/`)
|
|
||||||
- `GET/PUT /api/inventory/mapping` - Mapeo de columnas CSV
|
|
||||||
- `POST /api/inventory/upload` - Subir CSV/Excel de inventario
|
|
||||||
- `GET /api/inventory/items` - Listar inventario propio
|
|
||||||
- `DELETE /api/inventory/items` - Limpiar inventario
|
|
||||||
|
|
||||||
### Disponibilidad y Aftermarket
|
|
||||||
- `GET /api/parts/{id}/availability` - Bodegas con stock (auth: TALLER/ADMIN/OWNER)
|
|
||||||
- `GET /api/parts/{id}/aftermarket` - Alternativas aftermarket + cross-refs (publico)
|
|
||||||
|
|
||||||
### Admin (`/api/admin/`)
|
|
||||||
- `GET /api/admin/users` - Listar usuarios (auth: ADMIN/OWNER)
|
|
||||||
- `PUT /api/admin/users/{id}/activate` - Activar/desactivar usuario
|
|
||||||
- `GET /api/admin/stats` - Estadisticas del catalogo
|
|
||||||
- CRUD completo: categories, groups, parts, manufacturers, aftermarket, crossref, fitment
|
|
||||||
- Import/Export CSV: `POST /api/admin/import/{type}`, `GET /api/admin/export/{type}`
|
|
||||||
|
|
||||||
### VIN Decoder
|
|
||||||
- `GET /api/vin/decode/{vin}` - Decodificar VIN via NHTSA API
|
|
||||||
- `GET /api/vin/{vin}/parts` - Partes para un VIN decodificado
|
|
||||||
- `GET /api/vin/{vin}/match?mye_id=X` - Vincular VIN manualmente a vehiculo
|
|
||||||
|
|
||||||
## Scripts
|
|
||||||
|
|
||||||
| Script | Funcion |
|
|
||||||
|--------|---------|
|
|
||||||
| `import_tecdoc.py` | Descarga datos de TecDoc API (vehiculos, modelos, marcas) a JSON |
|
|
||||||
| `import_tecdoc_parts.py` | Importa partes OEM y aftermarket desde TecDoc |
|
|
||||||
| `import_live.py` | Importacion en vivo desde TecDoc API |
|
|
||||||
| `link_vehicle_parts.py` | Genera links vehiculo-parte (fitment masivo) |
|
|
||||||
| `migrate_aftermarket.py` | Migra datos aftermarket a la estructura normalizada |
|
|
||||||
| `migrate_saas_schema.py` | Crea tablas SaaS: sessions, warehouse_inventory, roles, etc. |
|
|
||||||
| `import_phase1.py` | Importacion inicial fase 1 |
|
|
||||||
| `run_all_brands.sh` | Script auxiliar para importar todas las marcas |
|
|
||||||
|
|
||||||
## Configuracion
|
|
||||||
|
|
||||||
Archivo principal: [`config.py`](config.py)
|
|
||||||
|
|
||||||
| Variable | Default | Descripcion |
|
|
||||||
|----------|---------|-------------|
|
|
||||||
| `DATABASE_URL` | `postgresql://nexus:...@localhost/nexus_autoparts` | PostgreSQL connection string |
|
|
||||||
| `JWT_SECRET` | `nexus-saas-secret-change-in-prod-2026` | Secreto para firmar tokens JWT |
|
|
||||||
| `JWT_ACCESS_EXPIRES` | `900` (15 min) | Duracion del access token en segundos |
|
|
||||||
| `JWT_REFRESH_EXPIRES` | `2592000` (30 dias) | Duracion del refresh token en segundos |
|
|
||||||
|
|
||||||
## Arquitectura
|
|
||||||
|
|
||||||
Documentacion detallada en [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md).
|
|
||||||
|
|
||||||
```
|
```
|
||||||
+------------------+
|
/home/Autopartes/
|
||||||
| TecDoc (Apify) |
|
dashboard/ # Web publica (puerto 5000)
|
||||||
+--------+---------+
|
server.py # Flask server principal
|
||||||
|
|
shared.css # CSS compartido
|
||||||
download/import
|
nav.js # Navegacion compartida
|
||||||
|
|
*.html # Paginas del dashboard
|
||||||
v
|
pos/ # POS multi-tenant (puerto 5001)
|
||||||
+----------+ +--------+---------+ +----------------+
|
app.py # Flask app factory
|
||||||
| Frontend |<--->| Flask Server |<--->| PostgreSQL |
|
config.py # Configuracion
|
||||||
| (HTML/JS)| | (server.py) | | nexus_autoparts|
|
tenant_db.py # Conexiones por tenant
|
||||||
+----------+ +--------+---------+ +----------------+
|
middleware.py # Auth + permisos
|
||||||
|
|
blueprints/ # 9 blueprints (auth, config, inventory, catalog, pos, customers, cashregister, invoicing, accounting)
|
||||||
JWT auth (PyJWT)
|
services/ # Logica de negocio (pos_engine, inventory_engine, cfdi_builder, accounting_engine, etc.)
|
||||||
|
|
templates/ # 10 HTML templates
|
||||||
+------------+------------+
|
static/ # CSS, JS, assets
|
||||||
| | |
|
migrations/ # SQL migrations
|
||||||
TALLER BODEGA ADMIN
|
seed/ # Datos semilla
|
||||||
(consulta) (inventario) (gestion)
|
scripts/ # Import TecDoc, migraciones, utilidades
|
||||||
|
vehicle_database/ # Schema SQL maestro
|
||||||
|
docs/ # Documentacion
|
||||||
|
data/ # Datos TecDoc descargados (JSON)
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Nexus Autoparts** - Tu conexion directa con las partes que necesitas
|
## Deployment
|
||||||
|
|
||||||
|
El sistema puede correr en:
|
||||||
|
|
||||||
|
- **Servidor dedicado** o **VPS** (recomendado para produccion)
|
||||||
|
- **Raspberry Pi 5** (8GB RAM + SSD NVMe, ideal para refaccionaria individual)
|
||||||
|
|
||||||
|
Ver [docs/INSTALACION.md](docs/INSTALACION.md) para instrucciones detalladas.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Documentacion
|
||||||
|
|
||||||
|
| Documento | Descripcion |
|
||||||
|
|-----------|-------------|
|
||||||
|
| [docs/GUIA-DE-USO.md](docs/GUIA-DE-USO.md) | Guia de uso del POS (espanol) |
|
||||||
|
| [docs/INSTALACION.md](docs/INSTALACION.md) | Guia de instalacion (espanol) |
|
||||||
|
| [docs/API-POS.md](docs/API-POS.md) | Referencia completa de la API del POS |
|
||||||
|
| [docs/API.md](docs/API.md) | API del catalogo publico |
|
||||||
|
| [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) | Arquitectura del sistema |
|
||||||
|
| [docs/DATABASE.md](docs/DATABASE.md) | Esquema de base de datos |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Nexus Autoparts** -- Tu conexion directa con las partes que necesitas
|
||||||
|
|||||||
1432
docs/API-POS.md
Normal file
1432
docs/API-POS.md
Normal file
File diff suppressed because it is too large
Load Diff
377
docs/GUIA-DE-USO.md
Normal file
377
docs/GUIA-DE-USO.md
Normal file
@@ -0,0 +1,377 @@
|
|||||||
|
# Guia de Uso -- Nexus Autoparts POS
|
||||||
|
|
||||||
|
Manual de usuario para el sistema de Punto de Venta Nexus Autoparts.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Acceso al sistema
|
||||||
|
|
||||||
|
1. Abrir el navegador e ir a `http://[IP]:5001/pos/login`
|
||||||
|
2. Se muestra la lista de empleados del tenant
|
||||||
|
3. Seleccionar tu usuario
|
||||||
|
4. Escribir tu PIN de 4 digitos
|
||||||
|
5. El sistema te lleva al dashboard o al POS segun tu rol
|
||||||
|
|
||||||
|
**Primer acceso:** El PIN del dueno se configura al crear el tenant. El dueno puede crear empleados desde Configuracion.
|
||||||
|
|
||||||
|
**Seguridad:**
|
||||||
|
- 5 intentos fallidos por minuto maximo
|
||||||
|
- 10 intentos fallidos bloquean el dispositivo por 15 minutos
|
||||||
|
- Cada sesion genera un token JWT con duracion de 8 horas
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Navegacion
|
||||||
|
|
||||||
|
- **Sidebar izquierdo**: contiene todas las secciones del sistema
|
||||||
|
- **Toggle de tema**: icono de luna/sol en la parte superior del sidebar para cambiar entre tema Industrial (oscuro) y Moderno (claro)
|
||||||
|
- **Logout**: boton en la parte inferior del sidebar
|
||||||
|
- **Breadcrumbs**: en el catalogo, muestran la ruta de navegacion actual
|
||||||
|
|
||||||
|
Las secciones visibles dependen del rol:
|
||||||
|
| Seccion | Dueno | Admin | Cajero | Almacenista | Contador |
|
||||||
|
|---------|-------|-------|--------|-------------|----------|
|
||||||
|
| Dashboard | Si | Si | No | No | No |
|
||||||
|
| Catalogo | Si | Si | Si | Si | Si |
|
||||||
|
| POS | Si | Si | Si | No | No |
|
||||||
|
| Inventario | Si | Si | No | Si | No |
|
||||||
|
| Clientes | Si | Si | Si | No | Si |
|
||||||
|
| Facturacion | Si | Si | No | No | Si |
|
||||||
|
| Contabilidad | Si | No | No | No | Si |
|
||||||
|
| Reportes | Si | Si | No | No | Si |
|
||||||
|
| Configuracion | Si | Si | No | No | No |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Catalogo
|
||||||
|
|
||||||
|
El catalogo conecta con la base de datos maestra TecDoc (1.5M+ partes OEM) y muestra stock local.
|
||||||
|
|
||||||
|
### Navegacion por vehiculo
|
||||||
|
|
||||||
|
1. **Marca** -- seleccionar marca del vehiculo (Toyota, Nissan, Ford, etc.)
|
||||||
|
2. **Modelo** -- seleccionar modelo (Corolla, Sentra, F-150, etc.)
|
||||||
|
3. **Ano** -- seleccionar ano del vehiculo
|
||||||
|
4. **Motor** -- seleccionar motorizacion
|
||||||
|
5. **Categoria** -- categoria de partes (Frenos, Motor, Suspension, etc.)
|
||||||
|
6. **Subcategoria** -- grupo especifico (Pastillas, Discos, Balatas, etc.)
|
||||||
|
7. **Partes** -- lista de partes con numero OEM, precio y stock
|
||||||
|
|
||||||
|
### Busqueda inteligente
|
||||||
|
|
||||||
|
- Escribir en la barra de busqueda un **numero de parte** (ej. "04465-02220") o **texto** (ej. "pastillas corolla")
|
||||||
|
- El sistema busca en partes OEM, aftermarket y cross-references
|
||||||
|
- Resultados muestran stock local y alternativas disponibles
|
||||||
|
|
||||||
|
### Panel de detalle
|
||||||
|
|
||||||
|
Al seleccionar una parte se abre un panel lateral con:
|
||||||
|
- Numero de parte OEM y descripcion
|
||||||
|
- **Stock local**: cantidad en la sucursal actual
|
||||||
|
- **Stock en bodegas**: disponibilidad en otras sucursales
|
||||||
|
- **Alternativas**: partes aftermarket equivalentes con precios
|
||||||
|
- **Cross-references**: numeros alternos de otras marcas
|
||||||
|
|
||||||
|
### Carrito
|
||||||
|
|
||||||
|
- Hacer clic en "Agregar" para anadir partes al carrito
|
||||||
|
- El carrito muestra cantidad, precio unitario y subtotal
|
||||||
|
- Boton **"Ir a cobrar"** salta directamente al POS con las partes cargadas
|
||||||
|
|
||||||
|
### Modo offline
|
||||||
|
|
||||||
|
Cuando no hay conexion a internet:
|
||||||
|
- Solo se muestra el inventario local (partes en la sucursal)
|
||||||
|
- La navegacion TecDoc no esta disponible
|
||||||
|
- Al restaurar la conexion, se sincronizan las operaciones pendientes
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Punto de Venta (POS)
|
||||||
|
|
||||||
|
Pantalla principal de cobro con atajos de teclado para operacion rapida.
|
||||||
|
|
||||||
|
### Operacion basica
|
||||||
|
|
||||||
|
1. **Buscar parte** (F1): escribir numero de parte o descripcion
|
||||||
|
2. **Seleccionar cliente** (F2): buscar por nombre, RFC o telefono. Si no se selecciona, se vende a "Publico General"
|
||||||
|
3. Las partes se agregan a la lista con cantidad, precio y descuento
|
||||||
|
4. **Cobrar** (F3): abrir dialogo de pago
|
||||||
|
|
||||||
|
### Metodos de pago
|
||||||
|
|
||||||
|
| Metodo | Descripcion |
|
||||||
|
|--------|-------------|
|
||||||
|
| Efectivo | Calcula cambio automaticamente |
|
||||||
|
| Transferencia | Registra referencia bancaria |
|
||||||
|
| Tarjeta | Registra numero de autorizacion |
|
||||||
|
| Mixto | Combina dos o mas metodos |
|
||||||
|
|
||||||
|
### Tipos de operacion
|
||||||
|
|
||||||
|
- **Venta directa** (F3): cobro inmediato, descuenta inventario
|
||||||
|
- **Cotizacion** (F4): guarda sin cobrar, se puede convertir a venta despues
|
||||||
|
- **Apartado**: reserva partes con pago parcial (enganche minimo configurable). El cliente hace pagos subsecuentes hasta completar
|
||||||
|
- **Credito**: venta a cuenta del cliente (requiere cliente con credito autorizado y limite suficiente)
|
||||||
|
|
||||||
|
### Atajos de teclado
|
||||||
|
|
||||||
|
| Tecla | Accion |
|
||||||
|
|-------|--------|
|
||||||
|
| F1 | Buscar parte |
|
||||||
|
| F2 | Seleccionar cliente |
|
||||||
|
| F3 | Cobrar |
|
||||||
|
| F4 | Cotizacion |
|
||||||
|
| F5 | Apartado |
|
||||||
|
| F6 | Ultimo ticket |
|
||||||
|
| + / - | Aumentar/disminuir cantidad |
|
||||||
|
| * | Editar cantidad directa |
|
||||||
|
| Enter | Confirmar |
|
||||||
|
| Delete | Eliminar linea |
|
||||||
|
| Escape | Cancelar / cerrar dialogo |
|
||||||
|
|
||||||
|
### Margen y costos
|
||||||
|
|
||||||
|
- La columna de **costo** y **margen** solo es visible para roles Dueno y Admin
|
||||||
|
- El cajero solo ve precio de venta
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Inventario
|
||||||
|
|
||||||
|
Gestion completa de productos y stock.
|
||||||
|
|
||||||
|
### Tab Productos
|
||||||
|
|
||||||
|
- **Ver**: lista paginada con busqueda por nombre, SKU o codigo de barras
|
||||||
|
- **Crear**: nuevo producto con nombre, SKU, codigo de barras, costo, precios (mostrador/taller/mayoreo), stock minimo, stock maximo, ubicacion en almacen
|
||||||
|
- **Editar**: modificar datos del producto
|
||||||
|
|
||||||
|
### Tab Entradas (Compras)
|
||||||
|
|
||||||
|
- Registrar compra a proveedor
|
||||||
|
- Campos: proveedor, factura del proveedor, lista de productos con cantidad y costo
|
||||||
|
- El stock se incrementa automaticamente
|
||||||
|
- Se genera movimiento en el historial
|
||||||
|
|
||||||
|
### Tab Ajustes
|
||||||
|
|
||||||
|
- Ajuste manual de inventario (merma, error de conteo, dano, etc.)
|
||||||
|
- **Requiere motivo**: el sistema no permite ajustes sin explicacion
|
||||||
|
- Genera registro en auditoria con usuario, fecha y motivo
|
||||||
|
|
||||||
|
### Tab Transferencias
|
||||||
|
|
||||||
|
- Mover productos entre sucursales
|
||||||
|
- Origen y destino, lista de productos con cantidad
|
||||||
|
- Descuenta del origen y suma al destino
|
||||||
|
- Rastrea estado: pendiente, en transito, recibida
|
||||||
|
|
||||||
|
### Tab Toma Fisica
|
||||||
|
|
||||||
|
1. **Iniciar conteo**: genera documento de toma fisica
|
||||||
|
2. **Capturar conteos**: registrar cantidades fisicas por producto
|
||||||
|
3. **Comparar**: el sistema muestra diferencias vs stock teorico
|
||||||
|
4. **Aprobar**: aplica los ajustes automaticamente
|
||||||
|
|
||||||
|
### Tab Alertas
|
||||||
|
|
||||||
|
- **Stock en cero**: productos sin existencia
|
||||||
|
- **Bajo minimo**: productos por debajo del punto de reorden
|
||||||
|
- **Sobre maximo**: productos con sobreinventario
|
||||||
|
|
||||||
|
### Tab Reportes de Inventario
|
||||||
|
|
||||||
|
| Reporte | Descripcion |
|
||||||
|
|---------|-------------|
|
||||||
|
| Valorizacion | Valor total del inventario a costo y a precio de venta |
|
||||||
|
| ABC | Clasificacion de productos por volumen de venta (A=80%, B=15%, C=5%) |
|
||||||
|
| Sin movimiento | Productos sin venta en X dias |
|
||||||
|
| Stock bajo | Productos por debajo del minimo |
|
||||||
|
| Comparativo sucursales | Stock del mismo producto en todas las sucursales |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Clientes
|
||||||
|
|
||||||
|
### Crear cliente
|
||||||
|
|
||||||
|
Campos principales:
|
||||||
|
- Nombre / Razon social
|
||||||
|
- RFC (para facturacion)
|
||||||
|
- Regimen fiscal SAT
|
||||||
|
- Codigo postal fiscal
|
||||||
|
- Uso de CFDI (ej. G03 Gastos en general)
|
||||||
|
- Telefono, email
|
||||||
|
- Direccion
|
||||||
|
|
||||||
|
### Tiers de precio
|
||||||
|
|
||||||
|
Cada cliente pertenece a un tier que determina el precio automatico:
|
||||||
|
|
||||||
|
| Tier | Descripcion |
|
||||||
|
|------|-------------|
|
||||||
|
| Mostrador | Precio publico (default) |
|
||||||
|
| Taller | Descuento para talleres mecanicos |
|
||||||
|
| Mayoreo | Mejor precio para compradores de volumen |
|
||||||
|
|
||||||
|
### Credito
|
||||||
|
|
||||||
|
- Asignar limite de credito al cliente
|
||||||
|
- El sistema valida que el saldo no exceda el limite al crear ventas a credito
|
||||||
|
- **Estado de cuenta**: muestra compras, pagos y saldo pendiente
|
||||||
|
- **Registrar pago**: abono parcial o total a la cuenta
|
||||||
|
|
||||||
|
### Vehiculos
|
||||||
|
|
||||||
|
- Asociar vehiculos al cliente (marca, modelo, ano, motor, placas, VIN)
|
||||||
|
- Facilita la busqueda de partes en futuras visitas
|
||||||
|
|
||||||
|
### Historial
|
||||||
|
|
||||||
|
- Ver todas las compras del cliente con fecha, total y estatus
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Facturacion CFDI
|
||||||
|
|
||||||
|
### Generar factura
|
||||||
|
|
||||||
|
1. Ir a Facturacion
|
||||||
|
2. Seleccionar una venta completada
|
||||||
|
3. Verificar datos fiscales del cliente (RFC, razon social, regimen, CP, uso CFDI)
|
||||||
|
4. Generar factura -- se crea el XML CFDI 4.0
|
||||||
|
|
||||||
|
### Tipos de comprobante
|
||||||
|
|
||||||
|
| Tipo | Uso |
|
||||||
|
|------|-----|
|
||||||
|
| Ingreso | Factura de venta normal |
|
||||||
|
| Egreso | Nota de credito (devolucion/cancelacion) |
|
||||||
|
| Pago | Complemento de pago para ventas a credito (PPD) |
|
||||||
|
|
||||||
|
### Cola de timbrado
|
||||||
|
|
||||||
|
- Las facturas se encolan para envio al PAC (Horux)
|
||||||
|
- El PAC firma el XML con el CSD del contribuyente
|
||||||
|
- Estado: pendiente, timbrada, error, cancelada
|
||||||
|
- Reintentar facturas con error
|
||||||
|
|
||||||
|
### Cancelacion
|
||||||
|
|
||||||
|
- Seleccionar factura a cancelar
|
||||||
|
- Indicar motivo SAT:
|
||||||
|
- 01: Comprobante emitido con errores con relacion
|
||||||
|
- 02: Comprobante emitido con errores sin relacion
|
||||||
|
- 03: No se llevo a cabo la operacion
|
||||||
|
- 04: Operacion nominativa relacionada en una factura global
|
||||||
|
- Si el motivo es 01, indicar el UUID de la factura sustituta
|
||||||
|
|
||||||
|
### PDF
|
||||||
|
|
||||||
|
- Descargar representacion impresa (PDF) de cualquier factura timbrada
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Contabilidad
|
||||||
|
|
||||||
|
### Polizas automaticas
|
||||||
|
|
||||||
|
Cada venta genera automaticamente una poliza contable:
|
||||||
|
- Cargo a Caja/Bancos (por el monto cobrado)
|
||||||
|
- Abono a Ventas (por el subtotal)
|
||||||
|
- Abono a IVA Trasladado (por el impuesto)
|
||||||
|
- Cargo a Costo de Ventas / Abono a Inventario (por el costo)
|
||||||
|
|
||||||
|
### Catalogo de cuentas
|
||||||
|
|
||||||
|
- Basado en el catalogo SAT
|
||||||
|
- Estructura jerarquica: Activo, Pasivo, Capital, Ingresos, Costos, Gastos
|
||||||
|
- Cada cuenta tiene codigo SAT, nombre, tipo (deudora/acreedora), nivel
|
||||||
|
|
||||||
|
### Reportes financieros
|
||||||
|
|
||||||
|
| Reporte | Descripcion |
|
||||||
|
|---------|-------------|
|
||||||
|
| Balanza de comprobacion | Saldos iniciales + movimientos del periodo + saldos finales |
|
||||||
|
| Estado de resultados | Ingresos - Costos - Gastos = Utilidad del periodo |
|
||||||
|
| Balance general | Activo = Pasivo + Capital a una fecha |
|
||||||
|
| Antiguedad de saldos | Cuentas por cobrar agrupadas por dias de atraso (0-30, 31-60, 61-90, 90+) |
|
||||||
|
|
||||||
|
### Periodos fiscales
|
||||||
|
|
||||||
|
- Ver periodos mensuales con estado (abierto/cerrado)
|
||||||
|
- Cerrar periodo: bloquea movimientos en ese mes. Esta accion es irreversible.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Caja Registradora
|
||||||
|
|
||||||
|
### Flujo diario
|
||||||
|
|
||||||
|
1. **Abrir caja**: indicar numero de caja y fondo inicial en efectivo
|
||||||
|
2. **Operar**: las ventas se registran automaticamente en la caja abierta
|
||||||
|
3. **Movimientos**: registrar entradas (cobros externos, cambio) o salidas (gastos menores, compras) de efectivo con motivo
|
||||||
|
4. **Corte X**: consulta de ventas y movimientos sin cerrar la caja
|
||||||
|
5. **Corte Z**: cierre de caja con conteo final. El sistema calcula la diferencia entre lo esperado y lo contado
|
||||||
|
|
||||||
|
### Multi-caja
|
||||||
|
|
||||||
|
- Cada cajero abre su propia sesion de caja
|
||||||
|
- Un empleado solo puede tener una caja abierta a la vez
|
||||||
|
- El numero de caja identifica la caja fisica (1, 2, 3...)
|
||||||
|
|
||||||
|
### Historial
|
||||||
|
|
||||||
|
- Consultar cortes anteriores con detalle de ventas, movimientos y diferencias
|
||||||
|
|
||||||
|
### Resumen diario
|
||||||
|
|
||||||
|
- Vista consolidada de todas las cajas del dia
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. Dashboard (Dueno)
|
||||||
|
|
||||||
|
Pantalla de resumen ejecutivo disponible solo para Dueno y Admin:
|
||||||
|
|
||||||
|
- **Ventas del dia** vs meta configurada
|
||||||
|
- **Cajas activas**: cuantas cajas estan abiertas y quien las opera
|
||||||
|
- **Alertas**: productos sin stock, facturas con error, cajas sin cerrar
|
||||||
|
- **Resumen semanal**: grafico de ventas de los ultimos 7 dias
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 11. Configuracion
|
||||||
|
|
||||||
|
### Datos del negocio
|
||||||
|
|
||||||
|
- Nombre, RFC, regimen fiscal, direccion, logo
|
||||||
|
- Configuracion de CFDI (serie, folio, certificados)
|
||||||
|
|
||||||
|
### Sucursales
|
||||||
|
|
||||||
|
- Crear y editar sucursales
|
||||||
|
- Nombre, direccion, telefono
|
||||||
|
- Activar/desactivar sucursal
|
||||||
|
|
||||||
|
### Empleados y roles
|
||||||
|
|
||||||
|
- Crear empleados con nombre, telefono, email, PIN y rol
|
||||||
|
- Roles disponibles:
|
||||||
|
|
||||||
|
| Rol | Permisos principales |
|
||||||
|
|-----|---------------------|
|
||||||
|
| Dueno | Todo (no se puede eliminar) |
|
||||||
|
| Admin | Todo excepto configuracion de tenant |
|
||||||
|
| Cajero | POS, catalogo, clientes basico |
|
||||||
|
| Almacenista | Inventario completo, catalogo |
|
||||||
|
| Contador | Contabilidad, facturacion, reportes |
|
||||||
|
|
||||||
|
- Cada rol tiene permisos granulares que se asignan automaticamente
|
||||||
|
|
||||||
|
### Temas
|
||||||
|
|
||||||
|
- **Industrial**: tema oscuro con tonos grafito y acentos naranja
|
||||||
|
- **Moderno**: tema claro con tonos blancos y azul primario
|
||||||
|
- El toggle esta en el sidebar y se aplica inmediatamente
|
||||||
272
docs/INSTALACION.md
Normal file
272
docs/INSTALACION.md
Normal file
@@ -0,0 +1,272 @@
|
|||||||
|
# Guia de Instalacion -- Nexus Autoparts
|
||||||
|
|
||||||
|
Instrucciones para instalar y poner en marcha el sistema Nexus Autoparts POS.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Requisitos del sistema
|
||||||
|
|
||||||
|
| Componente | Minimo | Recomendado |
|
||||||
|
|------------|--------|-------------|
|
||||||
|
| OS | Linux (Debian 12 / Ubuntu 22.04 / Raspberry Pi OS) | Debian 13 o Ubuntu 24.04 |
|
||||||
|
| Python | 3.11+ | 3.12+ |
|
||||||
|
| PostgreSQL | 15+ | 16+ |
|
||||||
|
| RAM | 2 GB | 4 GB |
|
||||||
|
| Disco | 20 GB (SSD recomendado) | 50 GB SSD |
|
||||||
|
| Red | LAN | LAN + acceso a internet para TecDoc y timbrado CFDI |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Instalacion paso a paso
|
||||||
|
|
||||||
|
### 1. Instalar dependencias del sistema
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt update && sudo apt install -y \
|
||||||
|
python3 python3-pip python3-venv \
|
||||||
|
postgresql postgresql-client \
|
||||||
|
git
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Configurar PostgreSQL
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Crear usuario y base de datos maestra (catalogo TecDoc)
|
||||||
|
sudo -u postgres createuser nexus -P
|
||||||
|
# Cuando pida password: nexus_autoparts_2026
|
||||||
|
|
||||||
|
sudo -u postgres createdb nexus_autoparts -O nexus
|
||||||
|
sudo -u postgres psql -c "ALTER ROLE nexus CREATEDB;"
|
||||||
|
```
|
||||||
|
|
||||||
|
El permiso `CREATEDB` es necesario porque el sistema crea una base de datos separada por cada tenant (cliente).
|
||||||
|
|
||||||
|
### 3. Clonar el repositorio
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://git.consultoria-as.com/consultoria-as/Autoparts-DB.git /home/Autopartes
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Instalar dependencias Python
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install -r /home/Autopartes/pos/requirements.txt --break-system-packages
|
||||||
|
```
|
||||||
|
|
||||||
|
O con un entorno virtual:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3 -m venv /home/Autopartes/venv
|
||||||
|
source /home/Autopartes/venv/bin/activate
|
||||||
|
pip install -r /home/Autopartes/pos/requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Cargar schema de la base maestra (catalogo)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo -u postgres psql nexus_autoparts < /home/Autopartes/vehicle_database/sql/schema.sql
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6. Crear el primer tenant
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /home/Autopartes/pos
|
||||||
|
python3 -c "
|
||||||
|
from services.tenant_manager import provision_tenant
|
||||||
|
result = provision_tenant(
|
||||||
|
'Mi Refaccionaria',
|
||||||
|
rfc='RFC000000AAA',
|
||||||
|
owner_name='Admin',
|
||||||
|
owner_pin='1234'
|
||||||
|
)
|
||||||
|
print(result)
|
||||||
|
"
|
||||||
|
```
|
||||||
|
|
||||||
|
Esto crea:
|
||||||
|
- Una entrada en la tabla maestra de tenants
|
||||||
|
- Una base de datos `tenant_mi_refaccionaria` con todas las tablas del POS
|
||||||
|
- Un empleado "Admin" con rol "owner" y PIN 1234
|
||||||
|
|
||||||
|
### 7. Aplicar migraciones
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /home/Autopartes/pos
|
||||||
|
python3 -c "
|
||||||
|
from tenant_db import get_tenant_conn_by_dbname
|
||||||
|
conn = get_tenant_conn_by_dbname('tenant_mi_refaccionaria')
|
||||||
|
cur = conn.cursor()
|
||||||
|
with open('migrations/v1.1_pos_tables.sql') as f:
|
||||||
|
cur.execute(f.read())
|
||||||
|
conn.commit()
|
||||||
|
print('Migraciones aplicadas correctamente')
|
||||||
|
"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 8. Iniciar el POS
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /home/Autopartes/pos
|
||||||
|
python3 app.py
|
||||||
|
```
|
||||||
|
|
||||||
|
Acceder desde el navegador:
|
||||||
|
|
||||||
|
```
|
||||||
|
http://[IP-del-servidor]:5001/pos/login
|
||||||
|
PIN: 1234
|
||||||
|
```
|
||||||
|
|
||||||
|
### 9. (Opcional) Iniciar la web publica
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /home/Autopartes/dashboard
|
||||||
|
python3 server.py
|
||||||
|
```
|
||||||
|
|
||||||
|
Acceder: `http://[IP-del-servidor]:5000`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Importar datos TecDoc
|
||||||
|
|
||||||
|
Para tener el catalogo de partes OEM y aftermarket:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /home/Autopartes
|
||||||
|
|
||||||
|
# Fase 1: descargar datos de TecDoc API a archivos JSON
|
||||||
|
python3 scripts/import_tecdoc.py download
|
||||||
|
|
||||||
|
# Fase 2: importar JSON a PostgreSQL
|
||||||
|
python3 scripts/import_tecdoc.py import
|
||||||
|
|
||||||
|
# Ver progreso
|
||||||
|
python3 scripts/import_tecdoc.py status
|
||||||
|
```
|
||||||
|
|
||||||
|
El script es **resumible**: si se interrumpe, al volver a ejecutar salta los archivos ya descargados.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Instalacion como servicio (systemd)
|
||||||
|
|
||||||
|
### POS (puerto 5001)
|
||||||
|
|
||||||
|
Crear el archivo `/etc/systemd/system/nexus-pos.service`:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[Unit]
|
||||||
|
Description=Nexus Autoparts POS
|
||||||
|
After=postgresql.service
|
||||||
|
Wants=postgresql.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=/home/Autopartes/pos
|
||||||
|
ExecStart=/usr/bin/python3 app.py
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
User=root
|
||||||
|
Environment=PYTHONUNBUFFERED=1
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
|
||||||
|
### Web publica (puerto 5000)
|
||||||
|
|
||||||
|
Crear el archivo `/etc/systemd/system/nexus-web.service`:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[Unit]
|
||||||
|
Description=Nexus Autoparts Web Publica
|
||||||
|
After=postgresql.service
|
||||||
|
Wants=postgresql.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=/home/Autopartes/dashboard
|
||||||
|
ExecStart=/usr/bin/python3 server.py
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
User=root
|
||||||
|
Environment=PYTHONUNBUFFERED=1
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
|
||||||
|
### Activar los servicios
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo systemctl daemon-reload
|
||||||
|
sudo systemctl enable nexus-pos nexus-web
|
||||||
|
sudo systemctl start nexus-pos nexus-web
|
||||||
|
|
||||||
|
# Verificar estado
|
||||||
|
sudo systemctl status nexus-pos
|
||||||
|
sudo systemctl status nexus-web
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Instalacion en Raspberry Pi 5
|
||||||
|
|
||||||
|
El POS esta optimizado para correr en Raspberry Pi 5.
|
||||||
|
|
||||||
|
### Hardware recomendado
|
||||||
|
|
||||||
|
| Componente | Especificacion | Precio aprox. |
|
||||||
|
|------------|---------------|---------------|
|
||||||
|
| Raspberry Pi 5 | 8 GB RAM | $80 USD |
|
||||||
|
| SSD NVMe | 256 GB (via HAT M.2) | $30 USD |
|
||||||
|
| Case con ventilador | Oficial o Argon | $15 USD |
|
||||||
|
| Fuente USB-C | 5V 5A oficial | $12 USD |
|
||||||
|
| MicroSD | 32 GB (solo para boot) | $5 USD |
|
||||||
|
| **Total** | | **~$142 USD** |
|
||||||
|
|
||||||
|
### Pasos adicionales para RPi 5
|
||||||
|
|
||||||
|
1. Instalar Raspberry Pi OS (64-bit, Debian Bookworm)
|
||||||
|
2. Configurar boot desde SSD NVMe (no usar MicroSD como disco principal)
|
||||||
|
3. Seguir los mismos pasos de instalacion de arriba
|
||||||
|
4. Para acceso desde tablets/celulares en la misma red LAN, usar la IP local del RPi
|
||||||
|
|
||||||
|
### Rendimiento esperado
|
||||||
|
|
||||||
|
- Consultas de catalogo: < 200ms
|
||||||
|
- Busqueda de partes: < 500ms
|
||||||
|
- Transacciones POS: < 100ms
|
||||||
|
- Soporte simultaneo: 3-5 terminales sin degradacion
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Verificacion post-instalacion
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Verificar que PostgreSQL esta corriendo
|
||||||
|
sudo systemctl status postgresql
|
||||||
|
|
||||||
|
# Verificar que el POS responde
|
||||||
|
curl http://localhost:5001/pos/health
|
||||||
|
# Debe responder: {"status":"ok"}
|
||||||
|
|
||||||
|
# Verificar la base maestra
|
||||||
|
sudo -u postgres psql nexus_autoparts -c "SELECT count(*) FROM parts;"
|
||||||
|
|
||||||
|
# Verificar tenant
|
||||||
|
sudo -u postgres psql tenant_mi_refaccionaria -c "SELECT name, role FROM employees;"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
| Problema | Solucion |
|
||||||
|
|----------|----------|
|
||||||
|
| `psycopg2` no instala | `sudo apt install libpq-dev python3-dev` y reinstalar |
|
||||||
|
| Puerto 5001 ocupado | `sudo lsof -i :5001` para ver que proceso lo usa |
|
||||||
|
| "Tenant not found" | Verificar que `provision_tenant` se ejecuto correctamente |
|
||||||
|
| PIN bloqueado | Esperar 15 minutos o reiniciar el servicio POS |
|
||||||
|
| Base de datos no conecta | Verificar credenciales en `pos/config.py` |
|
||||||
Reference in New Issue
Block a user