Un sistema de Punto de Venta (POS) ligero y 100% offline para pequeños negocios.
POSLite es una aplicación nativa de Android diseñada para simplificar las ventas y la gestión de inventario en pequeños comercios como tiendas de abarrotes, papelerías, neverías y puestos locales. Construida con arquitectura moderna de Android, ofrece una experiencia rápida, intuitiva y que no requiere conexión a internet.
-
Gestión de Inventario
- Crear y administrar categorías de productos.
- Agregar productos con SKU, nombre, precio y categoría.
- Validación de SKU para evitar duplicados.
- Eliminar productos y categorías con diálogos de confirmación.
-
Flujo de Venta Inteligente
- Selección manual de productos desde un catálogo visual.
- Escaneo rápido de códigos de barras usando la cámara del dispositivo (Google ML Kit).
- Carrito de compras en tiempo real con ajuste de cantidades.
- Cálculo automático del total.
- Retroalimentación visual y táctil al escanear artículos.
-
Proceso de Cobro
- Entrada del monto de pago con cálculo de cambio.
- Confirmación de la transacción antes de guardar en la base de datos.
- Generación de recibo con detalles de la transacción.
-
Diseño Responsivo
- Modo Teléfono: Navegación inferior con botón de acción flotante (FAB) dinámico.
- Modo Tablet: Pantalla dividida con navegación lateral y vista de carrito persistente.
- Diseños adaptables para diferentes tamaños de pantalla.
-
Historial de Ventas
- Ver todas las transacciones completadas.
- Vista detallada del recibo con productos desglosados.
- Preservación histórica de precios (el ticket guarda el precio al momento de la venta).
-
100% Offline
- Todos los datos se almacenan localmente usando base de datos Room (SQLite).
- No requiere conexión a internet.
- Rendimiento rápido con persistencia de datos local.
Nota: Toma capturas de las siguientes pantallas y agrégalas aquí:
Categorías de productos en diseño de cuadrícula
Lista de productos filtrada por categoría
Carrito de compras con diseño estilo ticket
Escaneo de códigos de barras en tiempo real
Diseño de pantalla dividida con barra lateral y carrito persistente
- Android Studio: Flamingo (2022.2.1) o superior
- SDK Mínimo: Android 7.0 (API nivel 24)
- SDK Objetivo: Android 14 (API nivel 36)
- Kotlin: 1.9+
-
Clonar el repositorio
git clone https://github.com/tuusuario/POSLite.git cd POSLite -
Abrir en Android Studio
- Abre Android Studio.
- Selecciona "Open" y navega al proyecto clonado.
- Espera a que termine la sincronización de Gradle.
-
Compilar y Ejecutar
- Conecta un dispositivo Android o inicia un emulador.
- Haz clic en "Run" (
▶️ ) o presionaShift + F10. - La aplicación se instalará y ejecutará automáticamente.
- Lenguaje: Kotlin
- Min SDK: API 24 (Android 7.0)
- Arquitectura: MVVM (Model-View-ViewModel)
- Patrón UI: Single-Activity con Navigation Component
- Room Database: Persistencia de datos local con abstracción SQLite.
- ViewModel & LiveData: Gestión reactiva del estado de la UI.
- Navigation Component: Navegación entre fragmentos y deep linking.
- ViewBinding: Acceso seguro a vistas.
- Google ML Kit Barcode Scanning (v17.3.0): Detección de códigos de barras basada en cámara.
- CameraX (v1.5.1): Implementación moderna de cámara.
- iText7 PDF (v7.2.5): Generación de recibos PDF.
- Kotlin Coroutines (v1.7.3): Programación asíncrona.
- Material Design 3: Componentes modernos de UI de Android.
- Bottom App Bar: Navegación con integración FAB.
- RecyclerView: Renderizado eficiente de listas.
- Drawables Personalizados: Diseño de recibo estilo ticket.
app/src/main/java/com/example/testlite/
├── database/
│ ├── entities/ # Entidades Room (Product, Category, Ticket, TicketItem)
│ ├── dao/ # Objetos de Acceso a Datos (DAOs)
│ ├── relations/ # Relaciones de base de datos y joins
│ ├── AppDatabase.kt # Configuración de la base de datos
│ └── Mappers.kt # Mappers de Entidad a data class
├── repository/
│ ├── InventoryRepository.kt
│ └── TicketRepository.kt
├── MainActivity.kt # Activity contenedor único
├── CartViewModel.kt # Estado compartido del carrito
├── InventoryViewModel.kt # Operaciones de productos/categorías
├── TicketViewModel.kt # Historial de ventas
├── fragments/ # Pantallas de UI
│ ├── CartFragment.kt
│ ├── BarcodeScannerFragment.kt
│ ├── CategoriesFragment.kt
│ ├── ProductsFragment.kt
│ └── ReceiptFragment.kt
└── adapters/ # Adaptadores para RecyclerView
Para documentación detallada de la arquitectura, ver ARCHITECTURE.md.
POSLite utiliza una base de datos relacional normalizada con cuatro tablas principales:
- Producto: SKU, nombre, precio, FK categoría.
- Categoria: ID, nombre.
- Ticket: ID transacción, fecha/hora, monto total.
- TicketItem: Artículos de línea con producto, cantidad, precio histórico.
Ver DATABASE.md para el esquema detallado y relaciones.
- Modo Admin/Cajero: Control de acceso basado en roles.
- Admin: Acceso total a inventario, configuración y reportes.
- Cajero: Modo solo ventas con configuración restringida.
- Dashboard y Analíticas:
- Niveles de stock con alertas de inventario bajo.
- Productos más vendidos.
- Gráficas de ventas (tendencias diarias/semanales/mensuales).
- Operaciones de Caja:
- "Corte X": Ver total de ventas del día sin cerrar turno.
- "Corte Z": Cierre de día/turno con totales y reinicio de contadores.
- Respaldo y Restauración: Exportar/importar base de datos a la nube o almacenamiento local.
- Soporte Multi-Tienda: Gestionar inventario para múltiples sucursales.
- Control de Stock: Rastreo de inventario con deducciones automáticas.
- Soporte Impresora Térmica: Impresión de tickets vía Bluetooth.
- Descuentos y Promociones: Descuentos por porcentaje, ofertas 2x1.
- Teclado Numérico Personalizado: Entrada más rápida de cantidades.
Ver ROADMAP.md para la planificación detallada de características.
¡Las contribuciones son bienvenidas! Ya sea corrigiendo errores, agregando características o mejorando la documentación, apreciamos tu ayuda.
Por favor lee CONTRIBUTING.md para detalles sobre nuestro código de conducta y el proceso para enviar pull requests.
- Haz un Fork del repositorio.
- Crea una rama para tu característica (
git checkout -b feature/caracteristica-increible). - Haz commit de tus cambios (
git commit -m 'Agregar caracteristica increible'). - Haz Push a la rama (
git push origin feature/caracteristica-increible). - Abre un Pull Request.
Este proyecto está licenciado bajo la Licencia MIT - ver el archivo LICENSE para más detalles.
- Google ML Kit por las capacidades de escaneo de códigos de barras.
- Equipo de Android Jetpack por los componentes de arquitectura moderna.
- La comunidad open-source por la inspiración y mejores prácticas.
- Issues: GitHub Issues
- Discusiones: GitHub Discussions
- Autor: Andre Gonzalez
Hecho para dueños de pequeños negocios
