[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-1476":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":15,"stars30d":16,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":18,"hasPages":18,"topics":20,"createdAt":10,"pushedAt":10,"updatedAt":21,"readmeContent":22,"aiSummary":23,"trendingCount":15,"starSnapshotCount":15,"syncStatus":24,"lastSyncTime":25,"discoverSource":26},1476,"openpos","avalontm\u002Fopenpos","avalontm","Sistema de punto de venta (POS) basado en terminal (TUI) de código abierto. Construido con Bun, Ink (React para terminal), Zustand y Drizzle ORM.","",null,"TypeScript",216,43,1,0,4,4.93,false,"main",[],"2026-06-12 02:00:28","# OPENPOS\n\nSistema de punto de venta para terminal (TUI) construido con Bun, Ink, Zustand y Drizzle ORM.\n\n## Screenshots\n\n### Pantalla de Login\n![Login](images\u002Fscreen1.png)\n\n### Pantalla Principal\n![POS](images\u002Fscreen2.png)\n\n### Pantalla de Ticket\n![Reports](images\u002Fscreen3.png)\n\n### Pantalla de Correo (factura)\n![Settings](images\u002Fscreen4.png)\n\n### Pantalla (factura)\n![Printer](images\u002Fscreen5.png)\n\n### Pantalla de Configuración\n![Products](images\u002Fscreen6.png)\n\n## Características\n\n- **Gestión de ventas y tickets** - Venta rápida con código de barras\n- **Inventario** - Productos con códigos de barras, categorías, unidades\n- **Facturación CFDI** - Integración con FacturAPI para generar facturas\n- **Sistema de clientes** - Registro de clientes con RFC para facturación\n- **Puntos de fidelidad** - Sistema de puntos escalable para clientes\n- **Impresión térmica** - Tickets con banner desde imagen\n- **Reportes de ventas** - Reportes diarios y por período\n- **Autenticación** - Login con PIN y roles (admin\u002Fcashier)\n- **Configuración TUI** - Menú interactivo para todas las configuraciones\n\n## Requisitos\n\n- Bun (última versión)\n- Node.js 22+\n- Docker y Docker Compose (opcional)\n- Impresora térmica (opcional)\n\n## Instalación\n\n```bash\n# Instalar dependencias\nnpm install\n\n# Inicializar base de datos\nbun run seed\n```\n\n## Docker\n\nSi prefieres usar Docker, el proyecto ya está configurado para ejecutarse en contenedores:\n\n```bash\n# Construir la imagen\ndocker-compose build\n\n# Iniciar modo interactivo (Punto de Venta)\ndocker-compose up app\n```\n\n> [!IMPORTANT]\n> Para interactuar con la interfaz TUI (terminal) dentro de Docker, es necesario que el servicio tenga `tty: true` y `stdin_open: true` (ya configurado en `docker-compose.yml`).\n\n## Base de Datos\n\nEl sistema usa **SQLite** como motor de base de datos (archivo `pos.db`), gestionado con **Drizzle ORM**.\n\n### Tablas\n\n| Tabla | Descripción |\n|-------|-------------|\n| `products` | Catálogo de productos (sku, name, price, stock, etc.) |\n| `sales` | Registro de ventas\u002Ftickets con datos de CFDI |\n| `users` | Usuarios del sistema (username, pin, role) |\n| `clients` | Clientes para facturación (RFC, razón social, puntos) |\n| `config` | Configuración del negocio |\n\n### Crear usuario\n\n```bash\n# Agregar usuario con rol cashier (por defecto)\npos.exe add user juan 1234\n\n# Agregar usuario admin\npos.exe add user juan 1234 --role admin\n```\n\n### Roles disponibles\n\n| Rol | Descripción |\n|-----|-------------|\n| `admin` | Acceso completo al sistema (configuración, usuarios, reportes) |\n| `cashier` | Usuario de caja (solo ventas y reportes) |\n\n## Uso\n\n### Modo interactivo (Interfaz visual)\n\n```bash\nbun run dev\n```\n\n### Configuración (TUI)\n\n```bash\npos --settings\n```\n\nAbre un menú interactivo para configurar:\n- **Tienda** - Nombre, RFC, razón social, dirección, email, teléfono, régimen fiscal\n- **Facturación** - API Key de FacturAPI, proveedor, modo sandbox\n- **Productos** - Agregar, editar, eliminar, buscar, filtrar por categoría\n- **Usuarios** - Agregar, editar, eliminar, cambiar rol\n- **Impuestos** - Tasa de IVA (%), reiniciar número de ticket\n- **Impresora** - Habilitar\u002Fdeshabilitar impresión\n- **Ventas** - Ver notas, filtrar por método de pago y status CFDI\n- **Clientes** - Agregar, editar, eliminar, buscar, filtro por RFC\u002Fnombre\u002Femail\u002Fcódigo\n\n### Línea de comandos (CLI)\n\n\u003C\u003C\u003C\u003C\u003C\u003C\u003C HEAD\n```bash\npos --help              # Mostrar ayuda\npos --version           # Mostrar versión\npos --settings          # Abrir configuración TUI\npos import products     # Importar productos desde CSV\npos export products     # Exportar productos a CSV\npos seed                # Insertar productos de ejemplo\npos add user \u003Cusername> \u003Cpin> [--role]  # Agregar usuario\npos config get          # Ver configuración\npos config config set \u003Ckey> \u003Cvalue>  # Actualizar configuración\n```\n=======\nPuedes ejecutar los comandos directamente o a través de Docker:\n\n| Comando | Ejecución Local | Ejecución Docker |\n|---------|-----------------|------------------|\n| Ayuda | `pos.exe --help` | `docker-compose run --rm app --help` |\n| Versión | `pos.exe --version` | `docker-compose run --rm app --version` |\n| Importar | `pos.exe import products` | `docker-compose run --rm app import products` |\n| Exportar | `pos.exe export products` | `docker-compose run --rm app export products` |\n| Seed | `pos.exe seed` | `docker-compose run --rm app seed` |\n| Usuario | `pos.exe add user \u003Cuser> \u003Cpin>` | `docker-compose run --rm app add user \u003Cuser> \u003Cpin>` |\n| Config Get | `pos.exe config get` | `docker-compose run --rm app config get` |\n| Config Set | `pos.exe config set \u003Ck> \u003Cv>` | `docker-compose run --rm app config set \u003Ck> \u003Cv>` |\n>>>>>>> 2ae9ae81a7c2b3405f737f12daecead51c952e57\n\n### Importar Productos\n\n#### Formato CSV\n\n```csv\nsku,name,price,cost,category,stock,barcode,unittype,unitqty,minstock\n001,Producto 1,10.50,5.00,BEB,100,123456789,pza,1,10\n002,Producto 2,25.00,12.00,ALI,50,987654321,kg,1,5\n```\n\n#### Campos CSV\n\n| Campo | Requerido | Descripción |\n|-------|-----------|-------------|\n| sku | ✅ | Código único |\n| name | ✅ | Nombre del producto |\n| price | ✅ | Precio de venta |\n| cost | ❌ | Costo |\n| category | ❌ | Categoría (default: GEN) |\n| stock | ❌ | Stock inicial (default: 0) |\n| minStock | ❌ | Stock mínimo (default: 5) |\n| unitType | ❌ | pza, kg, g, lt, ml, m, cm (default: pza) |\n| unitQty | ❌ | Cantidad por unidad |\n| barcode | ❌ | Código de barras |\n\n#### Ejemplos de importación\n\n```bash\n# Importar productos\npos import products productos.csv\n\n# Simular importación (sin guardar)\npos import products productos.csv --dry-run\n```\n\n## Facturación CFDI\n\nEl sistema soporta generación de facturas electrónicas mediante **FacturAPI**.\n\n### Configuración\n\n1. Obtener API Key de [FacturAPI](https:\u002F\u002Ffacturapi.io)\n2. Ejecutar `pos --settings` e ir a **Facturación**\n3. Ingresar API Key y configurar sandbox (pruebas) o producción\n4. Guardar configuración\n\n### Uso en ventas\n\n1. Al pagar una venta, seleccionar opción de **facturar** (tecla F)\n2. Ingresar RFC del cliente\n3. Ingresar razón social\n4. Ingresar email para enviar factura\n5. El sistema crea\u002Fbusca automáticamente el cliente y genera la factura\n\n### Clientes para facturación\n\nLos clientes se almacenan en la tabla `clients` con:\n- **code** - Código interno único (CL-00001, CL-00002, etc.)\n- **rfc** - RFC único del cliente\n- **razonSocial** - Nombre o razón social\n- **email** - Correo electrónico\n- **telefono** - Teléfono de contacto\n- **direccion** - Dirección fiscal\n- **regimenFiscal** - Régimen fiscal (601, 603, etc.)\n- **puntos** - Puntos de fidelidad (escalable para futuro)\n\n### Sistema de puntos de fidelidad\n\nLos clientes acumulan puntos que pueden usarse a futuro para:\n- Descuentos en compras\n- Canje por productos\n- Niveles de cliente (bronze, silver, gold)\n\nEl sistema está diseñado para escalar con más campos en el futuro.\n\n## Atajos de teclado\n\n### Pantalla principal\n\n| Tecla | Acción |\n|-------|--------|\n| Tab | Cambiar panel |\n| ↑↓←→ | Navegar |\n| Enter | Seleccionar\u002FPagar |\n| 1-4 | Alternativas de navegación |\n| \u002F | Buscar productos |\n| F | Facturar venta |\n| R | Ver reportes |\n| L | Cerrar sesión |\n| Ctrl+Q | Salir |\n\n### En panel Ticket (carrito)\n\n| Tecla | Acción |\n|-------|--------|\n| + | Aumentar cantidad |\n| - | Disminuir cantidad |\n| d | Eliminar item |\n\n### En configuración\n\n| Tecla | Acción |\n|-----|--------|\n| 1-8 | Navegar secciones |\n| ↑↓ | Mover en listas |\n| Enter | Guardar\u002FConfirmar |\n| T | Impresión de prueba (en impresora) |\n| E | Editar (en listas) |\n| X | Eliminar (en listas) |\n| A | Agregar (solo admin) |\n| \u002F | Buscar (en productos\u002Fclientes) |\n| Esc | Volver atrás |\n\n## Configuración de Impresora\n\nEl sistema de impresión utiliza los datos del negocio desde la base de datos y puede imprimir un banner desde `assets\u002Fbanner.png`.\n\n### Tipos de conexión\n\n| Tipo | Interfaz | Descripción |\n|------|----------|-------------|\n| Windows Printer | `printer:NOMBRE` | Impresora local Windows |\n| TCP | `tcp:\u002F\u002F192.168.1.100:9100` | Impresora de red |\n| USB | `USB` | Impresora USB |\n| Archivo | `\u002Fdev\u002Fusb\u002Flp0` | Archivo\u002FDispositivo |\n\n### Ancho de papel\n\n| Ancho | Caracteres | Tipo |\n|-------|------------|------|\n| 48 | 48 caracteres | 80mm (default) |\n| 58 | 58 caracteres | 58mm |\n| 80 | 80 caracteres | 80mm |\n\n### Charset\n\n| Charset | Descripción |\n|---------|-------------|\n| PC437 | USA |\n| PC850 | Multilingual |\n| PC860 | Portuguese |\n| PC863 | Canadian French |\n| PC865 | Nordic |\n| PC858 | Euro |\n| WIN1252 | Windows Latin-1 |\n| ISO8859_1 | ISO Latin-1 |\n\n### Uso en Settings\n\n1. Seleccionar **Tipo** de impresora con flechas →\u002F←\n2. Para **Windows Printer**, el campo **Interfaz** permite navegar ↑↓ para listar las impresoras del sistema\n3. Presionar **T** para imprimir ticket de prueba\n4. **Enter** para guardar configuración\n\n## Construcción\n\n```bash\n# Compilar executable\nbun build src\u002Fapp.tsx --compile --outfile pos.exe\n```\n\nEl ejecutable `pos.exe` queda en el directorio del proyecto. Los comandos CLI funcionan directamente con el ejecutable.\n\n## GitHub\n\nRepositorio: https:\u002F\u002Fgithub.com\u002Favalontm\u002Fopenpos.git\n\n## Licencia\n\nLicencia MIT - Copyright (c) 2026 avalontm\n\nProyecto desarrollado por AvalonTM","OPENPOS 是一个基于终端的开源销售点系统。它使用Bun、Ink（用于终端的React）、Zustand和Drizzle ORM构建，提供了一个功能丰富的TUI界面。核心功能包括快速销售、库存管理、CFDI发票生成、客户管理和忠诚度积分系统等。此外，还支持热敏打印和多种报告生成。该系统适合需要高效管理销售和库存的小型到中型企业使用，特别是那些偏好命令行或终端界面操作的用户。通过简单的配置，即可适应不同业务场景的需求。",2,"2026-06-11 02:44:01","CREATED_QUERY"]