1. Functional Requirements
1.1 Customer Order Flow
- A customer can place an order containing one or more pizzas.
- Each pizza can have a specific size (Small, Medium, Large), crust type (Thin, Cheese Burst, etc.), and multiple toppings.
- Orders can include beverages and sides.
- Each order must have a unique ID, timestamp, and total cost.
- Orders move through statuses: NEW → PREPARING → BAKED → PACKED → DELIVERED.
1.2 Menu Management
- Maintain a catalog of items (Pizza, Sides, Drinks).
- Menu items have price, category, and availability status.
- Enable dynamic updates to the menu (add, remove, update items).
1.3 Pizza Customization
- Enable customers to build custom pizzas.
- Each topping/crust/size has a configurable price.
- A Pizza is composed of base + crust + toppings + optional extras.
1.4 Kitchen Management
- Display orders in a queue to the kitchen staff.
- Track preparation time per order.
- Update order status as it moves through the kitchen.
1.5 Inventory Management
- Maintain quantity for ingredients (cheese, dough, sauce, toppings, etc.).
- Reduce inventory as pizzas are prepared.
- Trigger alerts for low-stock items.
- Restocking should update inventory records.
1.6 Delivery Management
- Assign delivery agents to orders once packed.
- Track delivery status and update order when completed.
- Calculate estimated delivery time and route optimization (basic simulation in LLD).
1.7 Billing & Payment
- Calculate subtotal, taxes, discounts, and total.
- Support multiple payment methods (Cash, Card, UPI).
- Generate printable/digital receipt.
1.8 User Management
- Roles: Customer, Chef, DeliveryAgent, Manager.
- Role-based access: e.g., only chefs can update preparation status, only managers can restock inventory.
- User registration and authentication system.
1.9 Notifications (Optional/Bonus)
- Notify kitchen when a new order arrives.
- Notify customer when order is out for delivery.
——————————————————————
2. Non-Functional Requirements
- Modular design (SOLID principles)
- Use design patterns where appropriate (e.g., Factory for Pizza, Strategy for Payment)
- Maintainability: Clear separation of concerns between modules
- Scalability: Support for multiple kitchens or branches (extendible class structure)
- Testability: Mock interfaces for components like inventory or payment