Saltar al contenido principal

Contabilidad PyMe (Chile)

Qué hace hoy, y qué no

La pantalla del módulo muestra el mes: lo vendido, lo comprado, el IVA débito y el crédito, y la diferencia entre los dos. Debajo, tres pestañas:

  • Libro de ventas y Libro de compras del mes, con sus totales y el botón para descargar el CSV con formato SII (el que carga tu contadora en Nubox, Defontana o Softland).
  • Libro diario, libro mayor y balance de comprobación: los libros contables propiamente tales. El balance te dice si cuadra, con todas las letras.
  • Importar del SII: baja el Registro de Compras y Ventas desde el sitio del SII y súbelo acá, en vez de teclear factura por factura.
  • Cierre del mes: antes de cerrar te dice qué quedó sin asiento; al cerrar, el período queda bloqueado de verdad —no se puede agregar, cambiar ni borrar nada con fecha de ese mes, desde ninguna pantalla—. Se puede reabrir, y la reapertura queda registrada con quién lo había cerrado.

El Formulario 29 no lo calcula este módulo, y no está en el plan. Un número tributario equivocado tiene consecuencias legales, así que no se adivina: los libros que bajas de aquí son los que tu contadora usa para declararlo.

Las secciones de datos —Clientes, Proveedores, Comprobantes, Asientos, Plan de cuentas— funcionan como cualquier sección de tabla del panel.

Si un documento no tiene código del SII, el libro te avisa

Los tipos que el SII reconoce son factura_afecta, factura_exenta, boleta, boleta_honorarios, nota_credito y nota_debito. Si un comprobante quedó guardado con otra palabra, saldría como tipo 0 y el SII rechazaría el archivo: la pantalla lo marca en su fila y lo dice arriba del libro, antes de que lo descargues.

¿Para qué sirve?​

Es un motor contable chileno con doble partida validada (Σ Debe = Σ Haber) que cierra el ciclo completo:

  • Ventas (afectas, exentas, boletas) con asiento automático.
  • Compras con IVA crédito y retención 10% en boletas de honorarios.
  • Pagos a proveedores (caja/banco).
  • Cobros de clientes (caja/banco/Payku).
  • Libros de ventas y compras en pantalla + descarga CSV formato SII (compatible con Nubox, Defontana, Softland).
  • Cierre de mes: bloquea períodos ya declarados al SII. Reapertura auditada.

¿Cuándo lo necesitas?​

  • Empresa chilena (persona jurídica o EIRL) que necesita llevar contabilidad interna sin depender solo de la contadora externa.
  • Quieres tener los libros de ventas y compras listos para exportar y subir al portal del SII.
  • Necesitas llegar al F29 con los libros del mes cuadrados y descargados (el formulario lo declara tu contadora; este módulo no lo calcula).
  • Quieres integrar Payku para cobros online que generen su asiento automáticamente.

Fuera de Chile: el plugin es específico para el SII. La arquitectura permite adaptadores para otros países (AR/AFIP, MX/SAT, CO/DIAN), pero no vienen implementados.

Cómo activarlo​

  1. Registra el plugin contabilidad (viene registrado por defecto en plugins/plugins-registry.php).

  2. Corre el instalador:

    docker exec wf_web php /var/www/html/plugins/contabilidad/install.php install

    O programáticamente:

    require_once __DIR__ . '/plugins/contabilidad/contabilidad.php';
    $res = ContabilidadController::install();

    Es idempotente: correrlo varias veces no rompe nada (usa CREATE TABLE IF NOT EXISTS + upserts).

  3. Aparecen en el menú lateral las secciones de datos (Clientes, Proveedores, Comprobantes, Asientos…), que funcionan como cualquier tabla del CMS.

    Y la pantalla del módulo, con los libros y el cierre

    Además de las secciones de datos, el módulo trae su propia pantalla: el panel del mes con el IVA débito y crédito, y las pestañas de Libro de ventas, Libro de compras y Cierre de mes. Lo que no existe son pantallas de carga rápida (Cargar venta / compra / pago / cobro) ni un dashboard contable aparte: las ventas y compras se cargan desde sus secciones de datos. El Formulario 29 tampoco, y eso es una decisión — ver el aviso al inicio de esta página.

Configuración inicial​

Copia plugins/contabilidad/config.example.php a config.php (o a config.local.php para overrides por instancia) y ajusta:

País y tasas fiscales​

'country' => [
'code' => 'CL',
'currency' => 'CLP',
'tax_adapter' => 'sii-cl', // único implementado por ahora
],
'accounting' => [
'iva_rate' => 0.19, // 19% Chile
'retencion_honorarios_rate' => 0.10, // 10% BHE 2026
'redondeo_decimales' => 0, // pesos chilenos = enteros
'balance_tolerance' => 0.01, // Σ Debe = Σ Haber ±$0.01
],

Plan de cuentas​

El plugin trae un plan mínimo chileno (seed_plan_de_cuentas_cl.sql) con las cuentas típicas. Puedes ajustar los códigos en config.php:

'cuentas' => [
'caja' => '1.1.01',
'banco' => '1.1.02',
'clientes' => '1.1.03',
'iva_credito' => '1.1.04',
'proveedores' => '2.1.01',
'iva_debito' => '2.1.02',
'retencion_honorarios' => '2.1.04',
'ventas_afectas' => '4.1.01',
'ventas_exentas' => '4.1.02',
],

Las páginas del contador buscan por código, no por ID, así que puedes usar tu propio plan de cuentas siempre que respetes los mismos códigos.

Roles​

'access' => [
// Roles que pueden CARGAR (mutaciones)
'roles_contador' => ['contador'],
// Roles que solo pueden LEER (dashboards, libros, F29)
'roles_lectura' => ['lectura'],
// superadmin/admin siempre pueden todo
],

Crea los roles contador y lectura en Configuración → Usuarios (o en RBAC Manager) y asígnalos a los admins correspondientes.

Payku (opcional)​

Si tienes el plugin Payku instalado y quieres que las ventas ofrezcan botón "Generar link de pago":

'payku' => [
'integration_enabled' => true,
],

Cómo se usa día a día​

Cargar una venta​

  1. Ve a Cargar venta.
  2. Selecciona el cliente, tipo (afecta / exenta / boleta), monto neto, IVA (autocalculado), total.
  3. Confirma. El sistema arma el asiento automático:
    • Debe: Clientes (por total)
    • Haber: Ventas afectas (neto) + IVA débito (19%)
  4. La venta queda registrada y aparece en el Libro de ventas.

Cargar una compra​

Los tipos de documento salen de la tabla del SII

El desplegable ofrece los dieciocho tipos que reconoce el SII —factura, factura de compra, liquidación, notas de crédito y débito, declaración de ingreso por importación, boleta de honorarios— con su nombre, no con la clave interna. La lista sale del mismo catálogo que usan los libros, así que no pueden desincronizarse.

Si el documento trae IVA que no puedes recuperar (un gasto rechazado, una compra destinada a operaciones exentas), el formulario tiene el campo y su motivo, que es la lista cerrada del SII. Ese IVA no es crédito fiscal: entra al gasto, porque es parte de lo que la cosa costó.

Igual que la venta pero al revés:

  • Debe: Gasto/Activo + IVA crédito
  • Haber: Proveedores

Si es una boleta de honorarios, el sistema agrega automáticamente:

  • Debe: Honorarios
  • Haber: Proveedores (por 90%) + Retención 10% (por 10%)

Cargar un pago o cobro​

  • Pago: Debe Proveedores / Haber Caja o Banco.
  • Cobro: Debe Caja/Banco/Payku / Haber Clientes.

Libro de ventas / compras (formato SII)​

En Libro de ventas o Libro de compras ves las operaciones del período en pantalla, con:

  • Filtros por fecha.
  • Totales de neto, IVA y total.
  • Botón Descargar CSV — genera el archivo con BOM UTF-8, separador ; y los códigos SII estándar. Compatible con Nubox, Defontana y Softland.

Importar los documentos desde el SII​

Es la forma rápida de cargar un mes, y la que menos errores comete: el SII ya tiene todas tus facturas, las que emitiste y las que te emitieron.

  1. En el sitio del SII entra a Servicios online → Factura electrónica → Registro de Compras y Ventas, elige el mes y usa Descargar detalles.
  2. En Contabilidad → Importar del SII elige si el archivo es de compras o de ventas, selecciónalo y pulsa Revisar el archivo.
  3. El sistema te muestra qué va a pasar antes de hacerlo: cuántos documentos se van a agregar, cuántos ya estaban, cuáles tienen algún problema (y cuál), y cuáles caen en un mes que ya cerraste.
  4. Si te parece bien, pulsas Importar.
Revisar no escribe nada

El paso 3 no toca tus libros. Podés revisar el archivo las veces que quieras antes de decidir.

Tres cosas que hace por su cuenta:

  • Reconoce las columnas por su nombre, no por su posición, así que sirve igual si el archivo viene del SII, de tu contadora o de otro sistema.
  • No carga dos veces el mismo documento, ni aunque venga repetido dentro del propio archivo.
  • Crea los proveedores o clientes que falten, identificándolos por su RUT.

Lo que queda por hacer después de importar: asignarle su categoría de gasto a cada compra, que es lo que decide en qué cuenta entra. Hasta que se la des, el documento está en el libro pero no tiene asiento.

Generar los asientos del mes​

Un documento cargado —a mano o importado del SII— todavía no es un asiento contable. Mientras no lo sea, el libro diario, el mayor y el balance de ese mes salen vacíos y el mes no se puede cerrar.

Cuando quedan documentos sin su asiento, arriba de todo aparece una franja que lo dice y trae el botón para hacerlos todos de una vez. Después de importar del SII vas a verla siempre, y es el paso que sigue.

Lo que conviene saber:

  • Generarlos dos veces no duplica nada. El botón sólo toma los documentos que todavía no tienen su asiento, así que se puede volver a pulsar cuantas veces haga falta.
  • Si un documento falla, los demás entran igual, y la pantalla te dice cuáles quedaron fuera y qué le falta a cada uno. Lo más habitual después de importar: una compra sin categoría de gasto, que es justamente lo que la importación no puede adivinar — la categoría decide en qué cuenta entra.
  • En un mes cerrado no se generan: ese mes ya fue declarado.

Los libros contables​

Además de los libros del SII —que son los tributarios— el módulo lleva los tres libros de contabilidad:

LibroPara qué
DiarioTodos los asientos del mes en orden de fecha, con sus líneas. Es el registro cronológico.
MayorLos movimientos de una cuenta, con el saldo que traía de antes y cómo va quedando. Es donde se averigua por qué una cuenta dice lo que dice.
Balance de comprobaciónCada cuenta con su debe, su haber y su saldo.
Si el balance no cuadra, avisa

El balance existe justamente para eso: el debe y el haber tienen que sumar lo mismo. Si no suman, la pantalla lo dice en rojo, porque significa que hay un asiento mal grabado y no hay que declarar nada hasta encontrarlo.

El saldo del mayor se muestra del lado que corresponde (deudor o acreedor), no como un número negativo: una cuenta de proveedores con saldo a favor de ellos dice $1.154.100 H, que es como se lee en un libro.

Llevar varias empresas​

Si esta instalación lleva una sola empresa, no tenés que hacer nada: el módulo funciona como siempre y no vas a ver ninguna pregunta al respecto.

Si llevás varias —el caso de una contadora—, cada una tiene sus propios libros, su propio plan de cuentas, sus propios clientes y proveedores, y sus propios meses cerrados. Arriba a la derecha aparece el selector de empresa, y todo lo que ves en pantalla es de la empresa elegida. El selector aparece solo cuando hay más de una.

El Formulario 29 no lo calcula este módulo​

No hay una pantalla de F29, y no es que falte: se decidió no construirla. Llenar un código tributario con un número adivinado tiene consecuencias legales, y es lo único que este sistema no adivina.

Lo que sí te deja listo es la materia prima con la que se declara: el panel del mes te da el IVA débito, el IVA crédito y la diferencia entre los dos, y los libros de ventas y compras se descargan en el CSV con formato SII. Con eso tu contadora declara el F29 en el portal, sin tipear una factura.

Cierre de mes​

Cuando ya declaraste el F29 al SII, ve a Cierre de mes → Cerrar período. Antes de cerrar, la pantalla te dice qué quedó suelto: ventas o compras sin su asiento, y documentos cuyas cifras no suman.

Desde que cierras, ese mes queda bloqueado:

  • No se pueden agregar ventas, compras, pagos ni cobros con fecha de ese mes.
  • Tampoco cambiar ni borrar los que ya están, ni mover un documento de otro mes hacia éste.
  • El bloqueo vale desde cualquier pantalla, incluidas las secciones de datos (Comprobantes de Venta, Comprobantes de Compra, Pagos, Cobros).
  • Si necesitas corregir algo, Reabrir período: queda registrado quién lo había cerrado y cuándo.
Por qué importa

Un mes cerrado es un mes que ya declaraste. Si después cambia un documento de ese mes, tus libros dejan de calzar con lo que le informaste al SII — y nada te lo avisaría, porque los totales simplemente se recalculan.

El panel del mes​

Es lo primero que ves al abrir el módulo, arriba de las pestañas:

  • Ventas del mes y cuántos documentos son.
  • Compras del mes y cuántos documentos son.
  • IVA débito (el que cobraste) e IVA crédito (el que pagaste).
  • La diferencia entre los dos, que es la resta de este módulo — no una declaración.
  • Si el mes está cerrado, lo dice ahí mismo.

No hay un dashboard aparte con comparaciones contra el mes anterior ni antigüedad de la deuda: esta página decía que sí y no existía.

Se conecta con​

  • Payku — si está activo con payku.integration_enabled=true, el libro de ventas muestra botón "Generar link de pago" y el webhook (roadmap) creará cobros automáticamente.

  • Otros plugins pueden registrar tipos de asiento (hooks). Por ejemplo, un plugin de RRHH puede registrar remuneracion como origen:

    ContabilidadController::registerAsientoOrigen('remuneracion', [
    'label' => 'Remuneración de personal',
    'compile' => [RRHHController::class, 'compileAsientoRemuneracion'],
    ]);

    Los orígenes autorizados se whitelistean en config.php (hooks.allowed_origenes_externos).

Estructura del plugin​

plugins/contabilidad/
├── contabilidad.php ← entry point
├── config.example.php ← IVA, retención, cuentas, roles, Payku
├── install.php ← CLI installer (install/uninstall/status)
├── controllers/
│ └── contabilidad.controller.php ← lifecycle + hooks + upserts CMS
├── lib/ ← lógica compartida
│ ├── asientos.php ← compileAsientoVenta/Compra/Pago/Cobro
│ ├── auth.php ← wpb_require_role / csrf
│ ├── cierres.php ← mes_esta_cerrado / cerrar_mes
│ ├── rut.php ← validación módulo 11
│ └── sii.php ← códigos SII + CSV libros
├── migrations/
│ ├── create_contabilidad_tables.sql ← 11 tablas contables
│ ├── seed_plan_de_cuentas_cl.sql ← plan mínimo CL
│ └── drop_contabilidad_tables.sql ← DROP TABLE (solo con --drop)
└── views/main.php

Estado del sistema​

Para ver la versión instalada, orígenes de asiento registrados y config resumida:

docker exec wf_web php /var/www/html/plugins/contabilidad/install.php status

Desinstalación​

Soft (quita el menú del CMS, conserva los datos):

docker exec wf_web php /var/www/html/plugins/contabilidad/install.php uninstall

Hard (borra también todas las tablas contables — ⚠ destructivo):

docker exec wf_web php /var/www/html/plugins/contabilidad/install.php uninstall --drop

Preguntas frecuentes​

¿Reemplaza a mi contadora? No. Es una herramienta operativa para que la empresa lleve sus registros diarios. El contador sigue revisando, presentando declaraciones y firmando. Le entregas los CSV de los libros ya cuadrados, ahorrándole horas de tipeo.

¿Sirve para otros países (Argentina, México, Colombia)? Hoy solo sii-cl está implementado. La arquitectura permite adaptadores nuevos en lib/sii*.php, pero hay que desarrollarlos.

¿Se pueden importar comprobantes del SII? No de fábrica. Roadmap: importar CSV descargado del portal del SII para conciliar.

¿Emite boletas / facturas electrónicas oficiales? No — es solo contabilidad interna. La emisión al SII requiere integración con un DTE certificado (SII directo, Bsale, Facturación.cl u otros).

¿Puedo customizar el plan de cuentas? Sí, cambia los códigos en config.php. Las páginas buscan por código, no por ID.

¿Funciona con múltiples empresas / holdings? No de fábrica — una empresa por instalación. Multi-empresa requiere desarrollo custom.

¿Los períodos cerrados se pueden reabrir? Sí, con reapertura auditada (queda registrado quién y cuándo). Pero es una operación crítica que idealmente no debería usarse: si ya declaraste al SII, cualquier cambio implica rectificar la declaración.

Lo que todavía no hace​

Dicho como lista de lo que falta, no de lo que viene: nada de esto está comprometido con fecha.

  • Formulario 29: no se va a construir, y arriba está la razón.
  • Pantallas de carga rápida (una para cargar una venta, otra una compra): hoy se cargan desde sus secciones de datos o se importan del SII.
  • Antigüedad de la deuda (0-30, 31-60, 61-90, +90 días) por cliente o proveedor.
  • Cobro automático con Payku: el módulo registra un cobro con medio Payku, pero no hay un enlace que lo cree solo cuando Payku confirma.
  • Conciliación bancaria contra la cartola del banco.
  • Otros países: el módulo es específico para el SII chileno.

¿Qué sigue?​

  • Payku — para cobros online con asiento automático.
  • Report Manager — para armar reportes contables custom.
  • Data Protection — los datos de clientes están sujetos a Ley 21.719.