# Product Information Management

The Innovorder Catalog (PIM) is the backbone of the ordering experience. It uses a flexible, hierarchical, and **bi-recursive** data structure to model everything from simple coffees to complex, multi-step composite meals.

###  1 Core Entities

-    Menu  The root container. A restaurant can have multiple menus (e.g., "Lunch", "Dinner", "Delivery"). 
-    Category  Organizes products within a menu. Can be nested (Category &gt; Sub-Category). 
-    Product  The sellable item (Burger, Coke) or an option choice (Rare, No Ice). 
-    Step  Defines a choice or modification (e.g., "Choose Cooking Level", "Select Sides"). 

###  2 Recursive Logic

The power of the model lies in the **Product ↔ Step** relationship:

Product (e.g. "Menu Best Seller")

↳ Step (e.g. "Choose Burger")

↳ Product (e.g. "Cheese Burger")

↳ Step (e.g. "Cooking Level")

↳ Product (e.g. "Rare")

#### Key Concept: The "Menu Hash Map"

Due to the complexity of the graph, retrieving a menu item by item is inefficient. We provide a `/hash_map` endpoint that returns the **entire** menu structure in a compressed, normalized JSON format. Front-end applications should load this once and reconstruct the tree locally.
