# CLAUDE.md

Este archivo proporciona orientación a Claude Code (claude.ai/code) cuando trabaja con código en este repositorio.

## Resumen del Proyecto

Este es un sistema de gestión tributaria y contable basado en Laravel 10 llamado "Taxes Software" que proporciona características integrales de gestión empresarial incluyendo:
- Facturación electrónica (integración AFIP para Argentina)
- Contabilidad y tenedurías de libros
- Gestión de nóminas (Sueldos)
- Gestión de cuentas de clientes (Ctas Ctes)
- Liquidación de impuestos (IVA, IIBB, Ganancias)
- Gestión de tesorería
- Inventario y órdenes de trabajo
- Sistema de calendario y citas

## ⛔ REGLAS CRÍTICAS DE SEGURIDAD - PRODUCCIÓN

### PROHIBICIONES ABSOLUTAS
- **NUNCA** ejecutar comandos destructivos (DELETE, DROP, TRUNCATE, ALTER DROP) en bases de datos de producción
- **NUNCA** conectarse a servidores de producción (IPs 10.136.x.x, hosts con "prod", "forge", etc.) sin confirmación EXPLÍCITA del usuario
- **NUNCA** ejecutar migraciones en producción sin confirmación EXPLÍCITA
- **NUNCA** modificar datos de producción sin confirmación EXPLÍCITA

### VERIFICACIÓN OBLIGATORIA ANTES DE OPERACIONES DE BASE DE DATOS
1. **SIEMPRE** verificar `APP_ENV` en `.env` antes de cualquier operación de base de datos
2. **SIEMPRE** confirmar el host/IP de conexión antes de operaciones destructivas
3. **SIEMPRE** preguntar al usuario si la operación debe ejecutarse en LOCAL o PRODUCCIÓN
4. **SIEMPRE** mostrar el comando completo antes de ejecutar operaciones destructivas

### CREDENCIALES
- Las credenciales de producción NO se almacenan en este archivo por seguridad
- Para operaciones en producción, solicitar credenciales al usuario cuando sea necesario
- Credenciales locales: usuario `hernan`, clave `123456`

## Comandos de Desarrollo

- Ver `.env` para configuración de base de datos local

## Resumen de Arquitectura

### Arquitectura Multi-Inquilino (Multi-Tenant)
El sistema soporta múltiples empresas/inquilinos con aislamiento de base de datos por inquilino. Cada empresa tiene su propia base de datos con prefijo del número de documento de la empresa. La base de datos principal `dbtaxes` almacena datos compartidos y cuentas de usuario.

### Sistema de Módulos
La aplicación está organizada en módulos funcionales accesibles a través de subdominios:
- **Sitio Principal** (`SITIO=taxes`): Interfaz principal de gestión tributaria
- **Panel** (`SITIO=panel`): Panel administrativo
- **Contable**: Módulo de contabilidad (contable.dominio.com)
- **TuRecibo**: Módulo de recibos de sueldo (turecibo.dominio.com)
- **PracticaLaboral**: Módulo de práctica laboral
- **Mobile**: Interfaz móvil
- **Turnos**: Programación de citas

### Estructura de Base de Datos
- **Base de Datos Principal**: `dbtaxes` - Almacena usuarios, empresas y configuraciones compartidas
- **Bases de Datos de Empresas**: `db_{numero_documento}` - Datos individuales de empresas
- **Gestión de Conexiones**: Conexiones dinámicas de base de datos basadas en la empresa del usuario autenticado

### Organización de Modelos Clave
- **Contabilidad**: `ContaAsiento`, `ContaPlanCuenta`, `ContaTipoAsiento`
- **Factura Electrónica**: `AfipFactElec`, `FacturaElectronicaReceipts`
- **Nómina**: Modelos `SyJ*` (SyJEmpleado, SyJLiquidaciones, SyJConcepto)
- **Inventario**: Modelos `Inv*` (InvOrdenTrabajo, InvControlStock)
- **Cuentas de Clientes**: `CtaCteCliente`, `CtaCteTesoreria`
- **Gestión Tributaria**: `PeriodLiquidation`, `IVARetRegimen`, `IIBBRetention`

### Arquitectura Frontend
- **Vue.js 2.7**: Framework frontend principal
- **Bootstrap 4**: Framework CSS
- **Laravel Mix**: Compilación de assets
- **Múltiples Puntos de Entrada**:
  - `app.js`: Aplicación administrativa principal
  - `app_public.js`: Páginas públicas
  - `app_landing_empresas.js`: Páginas de aterrizaje de empresas

### Integraciones API
- **WebServices AFIP**: Facturación electrónica, validaciones tributarias
- **API MercadoLibre**: Integración de comercio electrónico
- **SendGrid**: Entrega de emails
- **Google Drive**: Almacenamiento de respaldos
- **WhatsApp Business**: Notificaciones

### Organización de Rutas
Las rutas están organizadas por funcionalidad en archivos separados:
- `routes/web.php`: Rutas principales
- `routes/subdomain/*.php`: Rutas específicas de subdominios
- `routes/webs/*.php`: Grupos de rutas específicas de características
- `routes/internal/internal.php`: Rutas API internas

### Comandos de Consola Personalizados
El sistema incluye numerosos comandos Artisan personalizados para:
- Respaldo y restauración de base de datos
- Importaciones masivas de datos (IIBB, personas, productos)
- Cálculos y liquidaciones de impuestos
- Trabajos programados y tareas de mantenimiento

### Consideraciones de Seguridad
- Soporte de autenticación multifactor
- Sistema de permisos basado en roles (`UserPermiso`, `UserModule`)
- Autenticación por token API para integraciones externas
- Manejo de cookies encriptadas
- Aislamiento de conexión de base de datos por inquilino

## Notas Importantes

- El sistema opera en Windows (ruta: `C:\Users\usuario\proyectos\taxes2020`)
- Utiliza MySQL como base de datos principal
- Soporta múltiples pasarelas de pago e impresoras fiscales
- Incluye capacidades integrales de reportes y exportación
- Implementa sistema de colas para operaciones pesadas
- Tiene funcionalidad incorporada de respaldo y restauración

## Infraestructura de Servidores

### Servidor Principal (Taxes2023)
- **IP pública**: 137.184.158.50
- **IP interna**: 10.136.92.193
- **Specs**: 8 cores, 15 GB RAM, 310 GB disco
- **Función**: Servidor web principal (dominio taxes.com.ar), MySQL principal (dbtaxes)
- **Supervisor**: Workers configurados con `autostart=false` (normalmente apagados)
  - `worker-finance`: 2 procs (queue finance)
  - `worker-491276`: 2 procs (queue default)
  - `work-hugo`: 1 proc (queue Hugo)
- **Sudo**: requiere password
- **Crons**: ninguno

### Servidor Worker (Alternativo)
- **IP pública**: 134.209.208.210
- **IP interna**: 10.136.21.165
- **Specs**: 8 cores, 15 GB RAM, 78 GB disco
- **Función**: Procesar queue jobs exclusivamente
- **Supervisor** (`/etc/supervisor/conf.d/supervisor-taxes-worker.conf`):
  - `taxes-worker-finance`: 40 procs (queue finance, 1024M)
  - `taxes-worker-sueldos-masivos`: 20 procs (queue sueldos_masivos, 1024M)
  - `taxes-worker-hugo-sueldos`: 10 procs (queue HugoSueldos, 512M)
  - `taxes-worker-hugo`: 2 procs (queue Hugo, 512M)
  - `taxes-worker-default`: 10 procs (queue default, 512M)
- **SSHFS**: `storage/app/public` montado desde el servidor principal via SSHFS (configurado en `/etc/fstab`)
- **Cron (forge)**: Verificación cada minuto del mount SSHFS, remonta automáticamente si se cae
- **IMPORTANTE**: Si el servidor se reinicia o hace resize, verificar que el SSHFS esté montado (`mount | grep sshfs`)

### Servidores MySQL
- **MySQL principal**: 10.136.92.193:3306 (mismo servidor principal)
- **MySQL-1**: 10.136.92.187
- **MySQL-2**: 10.136.92.186
- **MySQL-4**: 10.136.92.188:33060 (BD de tenants como db30-68967475-1)
- **MySQL-5**: 10.136.92.189
- **MySQL-7**: 10.136.92.191

### Queue System
- **Driver**: database (tabla `jobs` en dbtaxes del servidor principal)
- **Conexión queue**: `seguridad` → dbtaxes en 10.136.92.193
- **DatabaseJob.php**: Configura conexión `finance` del tenant antes de ejecutar cada job (usa campo `base_de_dato` de la tabla jobs + lookup en `tdbabuelas`/`tdbabuelas_host`)
- **DatabaseQueue.php**: Graba `base_de_dato` del tenant al crear el job usando `session()->get('_doc_')`

### Lee el documento `.claude/CLAUDE.md` donde estan las instrucciones de diseño para todo lo que hagas.

### No compilar si no lo pide explicitamente el usuario.
- Agrega a la memoria "usuario de mysql hernan clave 123456"