costco-grocery-list/frontend/src/constants/classifications.js

182 lines
4.3 KiB
JavaScript

// Item classification constants - app-level controlled values
export const ITEM_TYPES = {
PRODUCE: "produce",
MEAT: "meat",
DAIRY: "dairy",
BAKERY: "bakery",
FROZEN: "frozen",
PANTRY: "pantry",
BEVERAGE: "beverage",
SNACK: "snack",
HOUSEHOLD: "household",
PERSONAL_CARE: "personal_care",
OTHER: "other",
};
// Item groups filtered by item type
export const ITEM_GROUPS = {
[ITEM_TYPES.PRODUCE]: [
"Fruits",
"Vegetables",
"Salad Mix",
"Herbs",
"Organic Produce",
],
[ITEM_TYPES.MEAT]: [
"Beef",
"Pork",
"Chicken",
"Seafood",
"Deli Meat",
"Prepared Meat",
],
[ITEM_TYPES.DAIRY]: [
"Milk",
"Cheese",
"Yogurt",
"Butter",
"Eggs",
"Cream",
],
[ITEM_TYPES.BAKERY]: [
"Bread",
"Rolls",
"Pastries",
"Cakes",
"Bagels",
"Tortillas",
],
[ITEM_TYPES.FROZEN]: [
"Frozen Meals",
"Ice Cream",
"Frozen Vegetables",
"Frozen Meat",
"Pizza",
"Desserts",
],
[ITEM_TYPES.PANTRY]: [
"Canned Goods",
"Pasta",
"Rice",
"Cereal",
"Condiments",
"Spices",
"Baking",
"Oils",
],
[ITEM_TYPES.BEVERAGE]: [
"Water",
"Soda",
"Juice",
"Coffee",
"Tea",
"Alcohol",
"Sports Drinks",
],
[ITEM_TYPES.SNACK]: [
"Chips",
"Crackers",
"Nuts",
"Candy",
"Cookies",
"Protein Bars",
],
[ITEM_TYPES.HOUSEHOLD]: [
"Cleaning Supplies",
"Paper Products",
"Laundry",
"Kitchen Items",
"Storage",
],
[ITEM_TYPES.PERSONAL_CARE]: [
"Bath & Body",
"Hair Care",
"Oral Care",
"Skincare",
"Health",
],
[ITEM_TYPES.OTHER]: [
"Miscellaneous",
],
};
// Store zones - path-oriented physical shopping areas
// Applicable to Costco, 99 Ranch, Stater Bros, and similar large grocery stores
export const ZONES = {
ENTRANCE: "Entrance & Seasonal",
PRODUCE_SECTION: "Produce & Fresh Vegetables",
MEAT_SEAFOOD: "Meat & Seafood Counter",
DELI_PREPARED: "Deli & Prepared Foods",
BAKERY_SECTION: "Bakery",
DAIRY_SECTION: "Dairy & Refrigerated",
FROZEN_FOODS: "Frozen Foods",
DRY_GOODS_CENTER: "Center Aisles (Dry Goods)",
BEVERAGES: "Beverages & Water",
SNACKS_CANDY: "Snacks & Candy",
HOUSEHOLD_CLEANING: "Household & Cleaning",
HEALTH_BEAUTY: "Health & Beauty",
CHECKOUT_AREA: "Checkout Area",
};
// Default zone mapping for each item type
// This determines where items are typically found in the store
export const ITEM_TYPE_TO_ZONE = {
[ITEM_TYPES.PRODUCE]: ZONES.PRODUCE_SECTION,
[ITEM_TYPES.MEAT]: ZONES.MEAT_SEAFOOD,
[ITEM_TYPES.DAIRY]: ZONES.DAIRY_SECTION,
[ITEM_TYPES.BAKERY]: ZONES.BAKERY_SECTION,
[ITEM_TYPES.FROZEN]: ZONES.FROZEN_FOODS,
[ITEM_TYPES.PANTRY]: ZONES.DRY_GOODS_CENTER,
[ITEM_TYPES.BEVERAGE]: ZONES.BEVERAGES,
[ITEM_TYPES.SNACK]: ZONES.SNACKS_CANDY,
[ITEM_TYPES.HOUSEHOLD]: ZONES.HOUSEHOLD_CLEANING,
[ITEM_TYPES.PERSONAL_CARE]: ZONES.HEALTH_BEAUTY,
[ITEM_TYPES.OTHER]: ZONES.DRY_GOODS_CENTER,
};
// Optimal walking flow through the store
// Represents a typical shopping path that minimizes backtracking
// Start with perimeter (fresh items), then move to center aisles, end at checkout
export const ZONE_FLOW = [
ZONES.ENTRANCE,
ZONES.PRODUCE_SECTION,
ZONES.MEAT_SEAFOOD,
ZONES.DELI_PREPARED,
ZONES.BAKERY_SECTION,
ZONES.DAIRY_SECTION,
ZONES.FROZEN_FOODS,
ZONES.DRY_GOODS_CENTER,
ZONES.BEVERAGES,
ZONES.SNACKS_CANDY,
ZONES.HOUSEHOLD_CLEANING,
ZONES.HEALTH_BEAUTY,
ZONES.CHECKOUT_AREA,
];
// Helper to get display label for item type
export const getItemTypeLabel = (type) => {
const labels = {
[ITEM_TYPES.PRODUCE]: "Produce",
[ITEM_TYPES.MEAT]: "Meat & Seafood",
[ITEM_TYPES.DAIRY]: "Dairy & Eggs",
[ITEM_TYPES.BAKERY]: "Bakery",
[ITEM_TYPES.FROZEN]: "Frozen",
[ITEM_TYPES.PANTRY]: "Pantry & Dry Goods",
[ITEM_TYPES.BEVERAGE]: "Beverages",
[ITEM_TYPES.SNACK]: "Snacks",
[ITEM_TYPES.HOUSEHOLD]: "Household",
[ITEM_TYPES.PERSONAL_CARE]: "Personal Care",
[ITEM_TYPES.OTHER]: "Other",
};
return labels[type] || type;
};
// Helper to get all zone values as array (for dropdowns)
export const getZoneValues = () => Object.values(ZONES);
// Helper to get suggested zone for an item type
export const getSuggestedZone = (itemType) => {
return ITEM_TYPE_TO_ZONE[itemType] || null;
};