Skip to main content

An open-source Point of Sale library for restaurants.

Project description

pos-mm

pos-mm is an open-source Point of Sale (POS) library built to replace outdated and expensive systems many restaurants still rely on. It started as a project for my family-owned restaurant and is designed to provide a modern, flexible, and affordable foundation for handling orders, payments, receipts, tables, inventory, and reports.

The library focuses on being reusable and framework-agnostic. It can be integrated into web applications, desktop software, or custom automation workflows. Developers can build complete POS systems on top of pos-mm without having to implement the core business logic themselves.

Features

  • Menu Management – create and categorize menu items
  • Orders – link orders to menu items, tables, and staff
  • Payments – support multiple payment methods per order
  • Users and Roles – waiter, cashier, admin with role-based permissions
  • Table Management – open, close, and merge tables
  • Inventory Tracking – optional stock deduction tied to menu items
  • Receipts – generate itemized receipts for orders
  • Reports – daily totals, top-selling items, payment breakdowns
  • Database Utilities – simple setup and initialization helpers

Installation

Install the package from PyPI:

pip install pos-mm

Requirements

  • Python 3.9+
  • Dependencies listed in requirements.txt

To install all dependencies for development:

pip install -r requirements.txt

Quick Start

1. Initialize a database

from mm_pos.db import init_db, MenuItemDB

# In-memory SQLite database for testing
Session = init_db("sqlite:///:memory:")
session = Session()

2. Create a menu item

burger = MenuItemDB(name="Burger", price=9.99, category="Food")
session.add(burger)
session.commit()

3. Create a user

from mm_pos.db import UserDB

alice = UserDB(name="Alice", role="waiter")
alice.set_pin("1234")  # securely hash the PIN
session.add(alice)
session.commit()

4. Create an order with items

from mm_pos.db import OrderDB, OrderItemDB

order = OrderDB(table_number=1, user=alice)
session.add(order)
session.commit()

session.add(OrderItemDB(order_id=order.id, menu_item_id=burger.id, qty=2))
session.commit()

5. Record a payment

from mm_pos.db import PaymentDB

payment = PaymentDB(order=order, method="cash", amount_given=25.0, user=alice)
session.add(payment)
session.commit()

6. Generate a receipt

from mm_pos.receipt import Receipt

receipt = Receipt(order)
print(receipt.generate_text())

Next Steps

  • Explore InventoryManager for stock management
  • Use TableManager for managing tables in a restaurant
  • Generate reports with the Reports class
  • Integrate with FastAPI to expose your POS system as a web service

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pos_mm-0.1.2.tar.gz (14.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pos_mm-0.1.2-py3-none-any.whl (12.0 kB view details)

Uploaded Python 3

File details

Details for the file pos_mm-0.1.2.tar.gz.

File metadata

  • Download URL: pos_mm-0.1.2.tar.gz
  • Upload date:
  • Size: 14.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pos_mm-0.1.2.tar.gz
Algorithm Hash digest
SHA256 8088c29956e1bee79905054782054060a5822b602169f9d5417f3264edabf3fc
MD5 2715631b0fce30e6e4ca3c0b57149f03
BLAKE2b-256 4fb63213b5124571cdc14718bfd99dc380455ed51a273d8e3c4232bfef20aad0

See more details on using hashes here.

File details

Details for the file pos_mm-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: pos_mm-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 12.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pos_mm-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c3204aaf10a733ea5e063ed2093c3a7f35030b0522c7525b3f5539bb61e932f6
MD5 5791688c253ac6688a5641b515c6bf3a
BLAKE2b-256 be805e7beded88682110da2ab9a1361ec6d6c7584422ecb5c56b466db11f5801

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page