Arqueo POS Offline
Arqueo POS Offline es una aplicación de Punto de Venta (POS) integral y “offline-first” construida con Flutter. Está diseñada para empoderar a comerciantes y pequeñas empresas para gestionar eficientemente sus ventas, inventario, clientes y empleados de forma completamente local, sin necesidad de conexión a internet o dependencia de servicios en la nube.
🚀 Idea General
La filosofía principal detrás de Arqueo POS Offline es confiabilidad y privacidad. Al almacenar todos los datos localmente en el dispositivo, la aplicación garantiza que las empresas puedan continuar operando incluso en entornos con mala o nula conectividad a internet. Proporciona un sistema de gestión de extremo a extremo, desde la definición de artículos de catálogo e impuestos hasta la generación de facturas personalizadas con códigos QR e informes detallados.
🛠 Tecnologías Utilizadas
- Framework: Flutter (SDK ^3.8.1)
- Gestión de Estado:
flutter_riverpod - Navegación:
go_router - Base de Datos Local:
sqflitepara el almacenamiento de datos offline - Internacionalización (i18n):
easy_localization(Soporta Inglés, Español, Francés, Portugués, Criollo Haitiano, Alemán e Italiano) - PDF e Impresión:
pdfyprintingpara generar e imprimir recibos físicos - Generación de QR:
qr_flutterpara incrustar códigos QR únicos en los recibos de ventas - Suscripciones:
purchases_flutter(RevenueCat) para la gestión de características premium - Telemetría y Estabilidad:
firebase_analyticsyfirebase_crashlytics(Activos solo en modo de producción)
📦 Modelos de Datos
La aplicación se basa en una robusta base de datos local relacional estructurada en SQLite. Los modelos clave incluyen:
- Clientes (Customers):
id,name,phone,address,email,isActive - Empleados (Employees):
id,name,phone,email,isActive - Impuestos (Taxes):
id,name,rate(ej., ITBIS 18%, Exento) - Productos (Products):
id,name,price,cost,stock,taxId,isActive - Servicios (Services):
id,name,price,cost,taxId,isActive - Tipos de Factura (Invoice Types):
id,name,sequenceStart,sequenceEnd,code,prefix,currentSequence,active - Ventas (Sales):
id,date,qrcode,customerId,employeeId,invoiceTypeId - Detalles de Venta (Sale Details):
id,saleId,productId,serviceId,quantity,priceAtSale,costAtSale,taxRateAtSale,itemName
🏗 Arquitectura y Estructura
El proyecto sigue rigurosamente la Arquitectura Limpia (Clean Architecture) combinada con una estructura de directorios orientada a características (Feature-Driven).
lib/core/: Contiene aspectos transversales, utilidades, tematización, configuraciones de enrutamiento, widgets comunes y servicios globales.lib/features/: Contiene módulos específicos del dominio comosales(ventas),products(productos),services(servicios),customers(clientes),empleados,home(inicio),reports(informes),subscription(suscripción).
🔒 Seguridad y Mejores Prácticas
- Offline-First y Privacidad de Datos: Todos los datos sensibles del negocio y los clientes se almacenan localmente en la base de datos SQLite.
- Borrado Lógico (Soft Deletion): En lugar de eliminar permanentemente elementos del catálogo, el sistema utiliza una bandera
isActive. - Transacciones de Base de Datos y Atomicidad: Las operaciones críticas utilizan transacciones de SQLite para prevenir datos corruptos.
- Precisión Histórica: El precio y el costo se copian explícitamente en la tabla
sale_detailsen el momento de la venta para mantener reportes exactos sin importar futuros cambios en el catálogo.