# Módulo de Contabilidad — Fase 1

Núcleo contable argentino integrado con ventas, IVA débito, cuenta corriente de clientes, cobros y caja.

## 1. Objetivos cubiertos

- Plan de cuentas jerárquico con cuentas imputables / no imputables.
- Asientos contables manuales y automáticos con validación de partida doble.
- Estados de asiento: borrador, confirmado, anulado. Reverso de asientos.
- Integración con ventas: al confirmar una factura se generan asiento, IVA débito, movimiento de cuenta corriente y de caja si es contado.
- Libro IVA Ventas mensual (Neto, IVA 21 / 10,5 / 27, Exento, No gravado, Total).
- Cuentas corrientes con saldos pendientes, recibos y aplicación de cobros a facturas.
- Cobros multimedio (efectivo, transferencia, tarjeta, cheque, MercadoPago, billetera, retención, compensación).
- Caja básica con apertura, cierre, ingresos, egresos, arqueo y movimientos.
- Reportes: Libro Diario, Libro Mayor, Balance de sumas y saldos, IVA Ventas, Cuenta Corriente, Caja diaria, Ventas por cliente y artículo.

## 2. Tablas creadas

| Tabla | Descripción |
| --- | --- |
| `tax_conditions` | Condiciones IVA (RI, MONO, EX, CF, NR, EXT) |
| `tax_rates` | Alícuotas (IVA 0/2,5/5/10,5/21/27, percepciones, retenciones) |
| `document_types` | Tipos de comprobante (FA, FB, FC, FE, NCA/B/C, NDA/B/C, RX) |
| `sales_points` | Puntos de venta |
| `accounting_periods` | Períodos contables (anuales) |
| `accounts` | Plan de cuentas jerárquico |
| `journal_entries` | Asientos contables |
| `journal_entry_lines` | Renglones de asiento (debe/haber) |
| `cashboxes` | Cajas, bancos, billeteras, tarjetas |
| `cash_movements` | Movimientos de caja (apertura, ingreso, egreso, cierre) |
| `customer_account_movements` | Cuenta corriente del cliente |
| `collections` | Recibos / cobros |
| `collection_items` | Medios de cobro de cada recibo |
| `collection_invoice_applications` | Aplicación de un cobro a facturas concretas |

Tablas modificadas:

- `invoices`: agregados `document_type_id`, `sales_point_id`, `issue_date`, `payment_condition`, discriminación IVA, `paid_amount`, `journal_entry_id`, `cashbox_id`. Estados nuevos: `parcial`, `anulada`.
- `clients`: agregados `account_id` (cuenta contable), `tax_condition_id`, `current_balance`.
- `articles`: agregados `sales_account_id`, `stock_account_id`.
- `company_settings`: agregadas cuentas por defecto (ventas, IVA débito, clientes, caja, banco, stock, costo) y `default_sales_point_id`, `default_cashbox_id`, `auto_post_sales_journal`.

## 3. Servicios

Ubicados en `app/Services/Accounting/`.

- **`AccountingService`** — Crea, confirma, anula y reversa asientos. Valida partida doble. Asigna período contable.
- **`SalesAccountingService`** — Confirma una factura: recalcula totales, genera asiento (Caja|Clientes a IVA débito + Ventas), registra movimiento de cuenta corriente, registra ingreso de caja si es contado.
- **`CollectionAccountingService`** — Confirma un recibo: arma asiento (Cajas/Bancos al haber de Clientes), aplica importe a facturas pendientes, mueve caja, actualiza saldo del cliente.
- **`CashboxService`** — Apertura, cierre y arqueo. Ingresos / egresos manuales con asiento contable.
- **`TaxService`** — Lookup de alícuotas y condiciones IVA. Discrimina neto e IVA desde un total bruto.
- **`AuditService`** — Wrapper liviano sobre `AuditLog` para registrar cada operación contable.

## 4. Plan de cuentas seed

Se carga un plan de cuentas argentino básico:

```
1   ACTIVO
1.1 Activo Corriente
    1.1.1.01 Caja Pesos                    [caja_efectivo]
    1.1.1.02 Banco Cta. Cte.               [banco_cuenta_corriente]
    1.1.1.03 Mercado Pago                  [billetera_mercadopago]
    1.1.2.01 Deudores por Ventas           [clientes]
    1.1.3.01 Mercaderías                   [stock_mercaderias]
    1.1.4.01 IVA Crédito Fiscal            [iva_credito]
2   PASIVO
    2.1.1.01 Proveedores                   [proveedores]
    2.1.2.01 IVA Débito Fiscal 21%         [iva_debito_21]
    2.1.2.02 IVA Débito Fiscal 10,5%       [iva_debito_10_5]
    2.1.2.03 IVA Débito Fiscal 27%         [iva_debito_27]
    2.1.3.01 Anticipos de Clientes         [anticipos_clientes]
3   PATRIMONIO NETO
    3.1.01 Capital Social                  [capital]
    3.2.01 Resultado del Ejercicio         [resultado_ejercicio]
4   INGRESOS
    4.1.01 Ventas                          [ventas]
    4.1.02 Ventas Servicios                [ventas_servicios]
    4.1.03 Ventas Exentas                  [ventas_exentas]
5   EGRESOS
    5.1.01 Costo de Mercaderías Vendidas   [cmv]
    5.2.* Gastos
    5.3.* Resultados financieros
```

Las cuentas marcadas con `[role]` están conectadas a la lógica del sistema vía `Account::findByRole()`.

## 5. Cómo funciona el flujo

### Confirmación de venta
1. Usuario crea factura en `borrador` con ítems (artículos, cantidades, precios, % IVA).
2. Acción **Confirmar venta** en la tabla de facturas o cambio de estado dispara `SalesAccountingService::confirm()`.
3. El servicio:
   - Recalcula subtotales, neto gravado, IVA discriminado por alícuota y total.
   - Genera asiento balanceado con débito en Caja (si contado) o Clientes (si crédito), y haber en IVA débito + Ventas.
   - Crea movimiento en cuenta corriente del cliente.
   - Si es contado, abre movimiento de caja y aplica el cobro a la factura.
   - Actualiza saldo del cliente y estado de la factura.

### Cobro de cuenta corriente
1. Usuario crea recibo, selecciona cliente, agrega medios de cobro y aplica importes a facturas pendientes.
2. Acción **Confirmar recibo** dispara `CollectionAccountingService::confirm()`.
3. Genera asiento (caja/banco al debe, deudores al haber), registra el movimiento en cuenta corriente del cliente, descuenta de las facturas (que pasan a parcial o pagada) y mueve caja.

### Anulaciones
- Anular factura o cobro genera un **asiento de reverso** (con la misma estructura invertida) y revierte movimientos de caja, cuenta corriente y aplicaciones a facturas.

## 6. Acceso desde Filament

Grupo de navegación **Contabilidad**:
- Plan de cuentas (`/admin/accounting/accounts`)
- Asientos (`/admin/accounting/journal-entries`)
- Cobros (`/admin/accounting/collections`)
- Cajas (`/admin/accounting/cashboxes`)
- Períodos contables (`/admin/accounting/accounting-periods`)
- Alícuotas, Condiciones IVA, Tipos de comprobante, Puntos de venta

Grupo **Reportes contables**:
- Libro IVA Ventas (`/admin/iva-sales-book`)
- Libro Diario (`/admin/journal-book`)
- Libro Mayor (`/admin/ledger-book`)
- Balance de sumas y saldos (`/admin/trial-balance`)
- Cuenta corriente clientes (`/admin/customer-statement`)
- Caja diaria (`/admin/daily-cashbox`)
- Ventas por cliente (`/admin/sales-by-customer`)
- Ventas por artículo (`/admin/sales-by-article`)

## 7. Instalación

```bash
php artisan migrate
php artisan db:seed --class=AccountingSeeder
```

El seeder es **idempotente** (usa `updateOrCreate`).

## 8. Configuración inicial

1. Ir a Configuración de empresa y verificar que las cuentas por defecto estén seteadas (el seeder las completa automáticamente con las cuentas seed).
2. Si se va a vender de contado, abrir la **Caja Principal** desde `/admin/accounting/cashboxes` con la acción "Abrir caja".
3. Asignar la condición IVA a cada cliente (`tax_condition_id`).

## 9. Reglas y validaciones

- Toda línea de asiento exige una cuenta **imputable y activa**.
- Una línea no puede tener Debe y Haber simultáneamente.
- El asiento debe estar balanceado (suma Debe = suma Haber).
- No se puede confirmar un asiento de un período cerrado.
- Solo se reversan asientos confirmados, una sola vez.
- La caja debe estar abierta para registrar movimientos.

## 10. Auditoría

Cada operación significativa registra una entrada en `audit_logs`:
- `create_journal_entry`, `confirm_journal_entry`, `void_journal_entry`
- `sale_confirmed`, `sale_voided`
- `collection_confirmed`, `collection_voided`
- `cashbox_open`, `cashbox_close`, `cashbox_ingreso`, `cashbox_egreso`

## 11. Próximos pasos sugeridos (Fase 2)

- Notas de crédito / débito vinculadas a facturas (refunds).
- Compras y proveedores (mismo patrón que ventas pero al revés).
- Libro IVA Compras.
- Retenciones y percepciones automáticas.
- Conciliación bancaria.
- Cierre de ejercicio (asiento de cierre y apertura).
- Exportación AFIP (Mis Comprobantes / facturación electrónica).
