Erpnext Restaurant Pos
Aplicacion personalizada para Frappe v15 + ERPNext v15 que gestiona la operacion completa de un restaurante: mesas, carta/menu, comandas (pedidos), pantalla de cocina en tiempo real, cobro y facturacion integrada con ERPNext. Desarrollada con etiquetas en espanol e IGV al 18%…
- Author: HOLGUINUPC
- Repository: https://github.com/HOLGUINUPC/erpnext-restaurant-pos
- GitHub stars: 0
- Forks: 0
- License: MIT
- Category: Retail
- Maintenance: Actively Maintained
Install Erpnext Restaurant Pos
bench get-app https://github.com/HOLGUINUPC/erpnext-restaurant-pos
Add the Frappe Gems badge to your README
Maintain Erpnext Restaurant Pos? Paste this into your README:
[](https://frappegems.com/gems/apps/HOLGUINUPC/erpnext-restaurant-pos)
About Erpnext Restaurant Pos
Restaurant POS — Gestion de Restaurante y Punto de Venta
Aplicacion personalizada para Frappe v15 + ERPNext v15 que gestiona la operacion completa de un restaurante: mesas, carta/menu, comandas (pedidos), pantalla de cocina en tiempo real, cobro y facturacion integrada con ERPNext. Desarrollada con etiquetas en espanol e IGV al 18% (Peru).
Aplicacion de portafolio para demostrar dominio de ERPNext/Frappe: DocTypes personalizados, controladores, reportes, formatos de impresion, integraciones por API (webhook de pedidos online), eventos en tiempo real (
frappe.publish_realtime) e integracion con Item / Sales Invoice / Stock.
Requisitos
- Frappe Framework v15
- ERPNext v15 (para
Item,Customer,Employee,Sales Invoice) - Python >= 3.10, MariaDB, Redis (provistos por el bench)
Features mapeadas a requisitos del puesto
| Requisito del puesto | Como lo demuestra esta app |
|---|---|
| DocTypes personalizados | Restaurant Table, Menu Category, Menu Item, Restaurant Order (submittable), Order Item (child) |
| Controladores (server-side) | restaurant_order.py: calculo de totales + IGV, transiciones de estado, generacion de factura |
| Integracion con ERPNext | Menu Item -> Item; al pagar se crea una Sales Invoice (POS); concepto de Stock y POS Profile |
| Reportes personalizados | Ventas por Producto, Ventas por Mesero (Script Reports con filtros de fecha) |
| Formatos de impresion | Comanda de Cocina (ticket termico) y Cuenta / Pre-Cuenta (cuenta en espanol con IGV) |
| Integraciones por API / Webhooks | api.py: create_online_order (webhook delivery), get_kitchen_orders (KDS), update_item_status, get_menu (QR) |
| Tiempo real | frappe.publish_realtime para la Pantalla de Cocina (KDS) |
| Roles y permisos | Restaurant Manager, Waiter, Cashier, Kitchen (fixtures) con permisos por DocType |
| Tareas programadas | tasks.close_stale_orders (scheduler cada 15 min) |
| Pagina web / portal | www/menu.html — carta digital publica por QR |
Arquitectura
DocTypes y relaciones
Menu Category 1───* Menu Item ──── (Link) ────> ERPNext Item
│
* (referenciado en)
│
Restaurant Table 1──* Restaurant Order 1──* Order Item
(estado mesa) │ (submittable)
│
Employee (waiter) ───┤
Customer ────────────┤
│ al pagar (status = Pagada)
▼
ERPNext Sales Invoice (is_pos) ──> Contabilidad / Stock
- Restaurant Table (Mesa):
table_number(unico),area(Salon/Terraza/Barra/VIP),seats,status(Libre/Ocupada/Reservada/Cuenta Solicitada). - Menu Category:
category_name,display_order. - Menu Item:
item_name,category,item(Link a ERPNext Item),price(Currency),is_available,preparation_area(Cocina/Barra/Parrilla),description. - Restaurant Order (Comanda): submittable.
table,order_type(Salon/Para Llevar/Delivery),waiter(Employee),customer,status, hijoorder_items, totalessubtotal/igv/total,sales_invoice. - Order Item (child):
menu_item,qty,rate(fetch),amount,notes,kitchen_status(Pendiente/Preparando/Listo).
Calculo de IGV
Los precios del menu se consideran con IGV incluido (practica de retail en Peru). El controlador desagrega:
total = suma(qty * rate)
subtotal = total / 1.18
igv = total - subtotal
Instalacion
# En la carpeta del bench
bench get-app restaurant_pos /ruta/a/restaurant_pos
bench --site mi-sitio install-app restaurant_pos
bench --site mi-sitio migrate
bench build
La instalacion/migracion crea automaticamente:
- Los 4 roles (Restaurant Manager, Waiter, Cashier, Kitchen) via fixtures.
- El campo personalizado restaurant_order en Sales Invoice (via install.after_install).
Flujo de funcionamiento
- Abrir mesa: el mesero crea una
Restaurant Ordercon laMesay sus items. Al enviar (submit) la mesa pasa a Ocupada. - Comanda -> Cocina (tiempo real): el submit / cambio a
En Preparaciondisparafrappe.publish_realtime("new_kitchen_order", ...). La Pantalla de Cocina (KDS) recibe el ticket al instante. - Preparar y servir: cada cocinero marca los items
(Pendiente -> Preparando -> Listo) desde el KDS
(
api.update_item_status), que publicakitchen_item_update; el dispositivo del mesero se actualiza solo. Estado del pedido -> Servida. - Cobrar: el pedido pasa a Pagada. El controlador genera una
Sales Invoice de ERPNext (
is_pos) referenciando los items y libera la mesa (Libre). - Factura: la venta queda en contabilidad; si el
Menu Itemesta ligado a unItemde ERPNext, tambien puede mover Stock.
API / Integraciones
Todos los endpoints estan en
restaurant_pos/restaurant_pos/api.py y son @frappe.whitelist().
1. Webhook de pedidos online / delivery
curl -X POST "https://mi-sitio/api/method/restaurant_pos.restaurant_pos.api.create_online_order" \
-H "Authorization: token API_KEY:API_SECRET" \
-H "Content-Type: application/json" \
-d '{
"order_type": "Delivery",
"customer_info": {"customer": "CUST-0001"},
"items": [
{"menu_item": "Lomo Saltado", "qty": 2, "notes": "Sin cebolla"},
{"menu_item": "Chicha Morada", "qty": 2}
]
}'
Respuesta: {"order": "REST-ORD-2026-00012", "status": "created", "total": 96.0}.
El pedido entra al mismo flujo de cocina/cobro que uno presencial.
2. Pantalla de Cocina (KDS)
# Obtener pedidos con items pendientes
curl "https://mi-sitio/api/method/restaurant_pos.restaurant_pos.api.get_kitchen_orders" \
-H "Authorization: token API_KEY:API_SECRET"
# Marcar un item como listo
curl -X POST "https://mi-sitio/api/method/restaurant_pos.restaurant_pos.api.update_item_status" \
-H "Authorization: token API_KEY:API_SECRET" \
-H "Content-Type: application/json" \
-d '{"order": "REST-ORD-2026-00012", "row": "abc123", "status": "Listo"}'
3. Carta digital por QR (publica)
curl "https://mi-sitio/api/method/restaurant_pos.restaurant_pos.api.get_menu"
Tambien disponible como pagina web en /menu (www/menu.html).
Tiempo real y Pantalla de Cocina (KDS)
La app usa el bus de eventos de Frappe (frappe.publish_realtime, sobre
Socket.IO / Redis). Eventos publicados:
| Evento | Emisor | Consumidor |
|---|---|---|
new_kitchen_order |
RestaurantOrder.notify_kitchen() |
Pantalla de Cocina (KDS) |
kitchen_item_update |
api.update_item_status() |
Dispositivo del mesero / KDS |
order_paid |
al pagar | Caja / dashboard |
stale_order_alert |
tarea close_stale_orders |
Dashboard del gerente |
Un KDS (pagina/app) se suscribe con:
frappe.realtime.on("new_kitchen_order", (data) => renderTicket(data));
Asi la cocina ve la comanda sin recargar ni hacer polling.
Roles
| Rol | Uso tipico | Permisos clave |
|---|---|---|
| Restaurant Manager | Gerente | Total sobre todos los DocTypes y reportes |
| Waiter | Mesero | Crear/editar/enviar comandas; lectura de carta y mesas |
| Cashier | Cajero | Cobrar (submit/cancel de pedidos), lectura de carta; reportes |
| Kitchen | Cocina | Lectura de pedidos y carta; actualizar estado de items |
Estructura del proyecto
restaurant_pos/
restaurant_pos/
__init__.py, hooks.py, modules.txt, patches.txt, install.py
config/
www/menu.html
restaurant_pos/
api.py, tasks.py
doctype/{restaurant_table,menu_category,menu_item,restaurant_order,order_item}/
report/{ventas_por_producto,ventas_por_mesero}/
print_format/{comanda_de_cocina,cuenta_pre_cuenta}/
workspace/restaurant_pos/
README.md, license.txt, pyproject.toml, MANIFEST.in, requirements.txt, .gitignore
Capturas
(Placeholder — agregar capturas de pantalla de la Comanda, la Pantalla de Cocina, la Cuenta/Pre-Cuenta y los reportes.)
Licencia
MIT — ver license.txt.
Related Retail apps for Frappe & ERPNext
- Ury — URY - FOSS restaurant management system super powered by ERPNext.
- Webshop — Open Source eCommerce Platform
- Ecommerce Integrations — Ecommerce integrations for ERPNext
- Posnext — A modern, high-performance Point of Sale system for ERPNext with offline capabilities, real-time updates, and intuitive UI.
- Woocommerceconnector — Integration App for ERPNext to connect to WooCommerce
- Woocommerce Fusion — WooCommerce connector for ERPNext v15
- Go1 Webshop — Go1 Webshop is an Open Source eCommerce portal built on frappe builder.
- Retail Suite — is a modern POS system built with Tailwind CSS on the frontend and Frappe as the backend. It is designed for small retail businesses