Sistema de contabilidad, facturación AFIP y gestión para imprentas gráficas de Argentina.
Aplicación web full-stack autoalojada (self-hosted) que centraliza la gestión contable de una imprenta: comprobantes AFIP, presupuestos, clientes/proveedores, Libro IVA y un asesor contable con IA local. Incluye lectura automática de facturas por OCR + QR de AFIP, sin enviar datos a servicios externos.
Toda la interfaz, el código y la documentación están en español.
- 📄 Gestión de comprobantes — facturas de ingreso (ventas) y gasto (compras), notas de crédito/débito, adjuntos.
- 🤖 Lectura automática por OCR + QR AFIP — subís el PDF de una factura y el sistema extrae CUIT, punto de venta, número, CAE, importe y fecha mediante un pipeline determinístico (QR de AFIP → regex), sin depender del LLM para los datos.
- 📥 Buzón automático (inbox) — dejás los PDFs en una carpeta y un job los procesa y carga solo cada pocos minutos.
- 🧾 Presupuestos — creación, ítems, conversión a factura y exportación a PDF.
- 📊 Dashboard — KPIs, resumen anual, top de clientes/proveedores y gráficos.
- 📚 Libro IVA — mensual/trimestral con exportación a Excel en formato AFIP.
- 💬 Asesor contable con IA — chat que responde con contexto fiscal real de tu empresa, usando un LLM local (Ollama).
- 👥 Usuarios y roles —
admin,operadorycontador, con autenticación JWT. - 💾 Backups automáticos de la base de datos.
KPIs del año, pendientes de cobro/pago, IVA y gráficos, con accesos rápidos.
Consultá al asistente sobre una factura concreta (deducibilidad, cuenta, IVA), con contexto fiscal real de tu empresa y el LLM corriendo en local.
Gestión de los contenedores (iniciar/detener, backups, modelo de IA, datos demo).
| Capa | Tecnología |
|---|---|
| Backend | Python 3.12 · FastAPI · SQLAlchemy 2.0 |
| Base de datos | SQLite |
| Frontend | HTML5 · CSS3 · JavaScript (sin framework) |
| Servidor web | Nginx (reverse proxy + estáticos) |
| IA / LLM | Ollama (modelo por defecto: qwen2.5:3b) — 100% local |
| OCR | Tesseract · pdfplumber · pdf2image · pyzbar (QR AFIP) |
| Tareas programadas | APScheduler |
| Contenedores | Docker Compose |
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Nginx :8081 │──────│ FastAPI :8000 │──────│ Ollama :11434 │
│ (frontend + │ /api │ (backend) │ │ (LLM local) │
│ proxy /api) │ │ SQLite + │ │ │
└─────────────────┘ │ scheduler │ └─────────────────┘
└─────────────────┘
- Docker y Docker Compose (en Windows: Docker Desktop con WSL2).
- Software: Windows 10/11, Linux o macOS con virtualización habilitada.
La app web, la base de datos y el OCR corren en cualquier PC moderna. La parte exigente es el asistente de IA (LLM local vía Ollama):
| Escenario | Hardware | Experiencia de IA |
|---|---|---|
| Mínimo | 8 GB RAM, sin GPU, 5 GB disco | Funciona, pero el chat/clasificación IA es lento (respuestas en CPU) |
| Recomendado | 16 GB RAM + GPU NVIDIA ≥ 6 GB VRAM | IA fluida con el modelo por defecto |
| GPU modesta | GPU NVIDIA 3–4 GB VRAM | Usar un modelo más chico (ver abajo) |
El modelo se cambia desde Configuración → IA, sin reinstalar nada. Para que sea rápido, tiene que entrar entero en la GPU:
| Modelo | Tamaño | VRAM para 100% GPU | Calidad |
|---|---|---|---|
qwen2.5:3b (por defecto) |
~2,6 GB | ≥ 4 GB | Mejor |
qwen2.5:1.5b |
~1,4 GB | ~3 GB | Media |
qwen2.5:0.5b |
~0,5 GB | ~2 GB / CPU | Básica |
Si tu GPU tiene menos VRAM que el modelo, Ollama reparte la carga con la CPU y se vuelve lento. Ej.: una GTX 1050 (3 GB) corre
3bal ~67% en GPU / 33% en CPU; conviene bajar a1.5bpara que use el 100% de la GPU.El panel de control detecta la GPU NVIDIA y la usa automáticamente. Sin GPU, todo funciona igual pero la IA responde más despacio.
# 1. Cloná el repositorio
git clone https://github.com/emicaim/ImpreContaAR.git
cd ImpreContaAR
# 2. (Opcional) Configurá variables de entorno
cp .env.example .env # y editá SECRET_KEY, etc.
# 3. Levantá los servicios
docker compose up -d
# 4. Descargá el modelo de IA (una sola vez, ~2 GB)
docker compose exec ollama ollama pull qwen2.5:3bCon GPU NVIDIA (opcional, acelera la IA):
docker compose -f docker-compose.yml -f docker-compose.gpu.yml up -dNo hay contraseña por defecto. La primera vez, abrí:
http://localhost:8081/setup.html
y completá los datos de tu imprenta (razón social, CUIT) y la contraseña del administrador. Luego iniciá sesión en http://localhost:8081.
En Windows también podés usar el Panel de Control de escritorio (
panel-control/), que arranca/detiene los contenedores y guía el setup inicial. Verpanel-control/MANUAL_USUARIO.md.
| Servicio | URL |
|---|---|
| Frontend | http://localhost:8081 |
| API (backend) | http://localhost:8001 |
| Ollama | http://localhost:11435 |
docker compose exec backend python3 /app/generar_facturas_test.pyGenera 200 facturas, 10 clientes y 8 proveedores de ejemplo (ficticios).
La suite usa pytest con una base SQLite temporal (no toca datos reales).
# Dentro del contenedor backend
docker compose exec backend sh -c "pip install pytest && python -m pytest -q"
# O en local, con las dependencias de desarrollo instaladas
cd backend && pip install -r requirements-dev.txt && pytest -qCubre las funciones del parser OCR/regex (limpieza de importes, CUIT, número de comprobante, fechas) y los endpoints principales (setup, login, autenticación).
| Rol | Permisos |
|---|---|
admin |
Acceso total: usuarios, configuración, eliminación de registros |
operador |
Crear y editar facturas, clientes y presupuestos (no eliminar) |
contador |
Solo lectura: dashboard, Libro IVA, auditoría, exportaciones |
backend/ API FastAPI (routers por dominio, servicios, migraciones)
frontend/ Páginas HTML servidas por Nginx
panel-control/ App de escritorio (Tkinter) para gestionar los contenedores en Windows
inbox/ Buzón de PDFs para carga automática
docker-compose.yml
El detalle del plan de cuentas y su configuración por región está en
docs/plan_de_cuentas.md.
- Autoalojado, una instalación por imprenta. Cada imprenta corre su propia copia con sus datos aislados (no es un SaaS multi-inquilino compartido).
- Foco en Argentina (AFIP). La lectura de comprobantes está adaptada a AFIP (QR, CUIT, tipos A/B/C). Existe una base de configuración fiscal por país (
backend/config/regiones/) pensada para extender a otras jurisdicciones. - Privacidad: el LLM corre localmente vía Ollama; los datos de tus facturas no salen de tu servidor.
MIT + Commons Clause © FOKO SOFT
Podés usar, modificar y distribuir el software libremente, pero no venderlo (ni ofrecerlo como servicio pago cuyo valor derive sustancialmente de este software). El resto de los permisos MIT se mantienen.



