= ER дијаграм = [[Image(ERModel_v01.png)]] == Податочни побарувања == === Ентитети === 1.''' Role '''- ентитет за улогата на корисникот во системот * role_id - SERIAL (примарен клуч) * role_name - VARCHAR(50) (атрибут) * description - TEXT (атрибут) 2. ''' App User ''' - ентитет за корисникот кој се логира во системот * user_id - SERIAL (примарен клуч) * role_id - INT (надворешен клуч) * username - VARCHAR(50) (атрибут) * password_hash - TEXT (атрибут) * first_name - VARCHAR(50) (атрибут) * last_name - VARCHAR(50) (атрибут) * email - VARCHAR(100) (атрибут) * active - BOOLEAN (атрибут) 3.''' Session '''- ентитет за активна сесија на корисникот (токен) * token - UUID (примарен клуч) * user_id - INT (надворешен клуч) * created_at - TIMESTAMP (атрибут) * expires_at - TIMESTAMP (атрибут) 4.''' Audit Log '''- ентитет за дневник на активности * log_id - SERIAL (примарен клуч) * user_id - INT (надворешен клуч) * action - TEXT (атрибут) * entity_name - VARCHAR(50) (атрибут) * created_at - TIMESTAMP (атрибут) 5.''' Category '''- ентитет за категорија на производи * category_id - SERIAL (примарен клуч) * name - VARCHAR(100) (атрибут) * description - TEXT (атрибут) * active - BOOLEAN (атрибут) 6.''' Product '''- ентитет за производ од менито * product_id - SERIAL (примарен клуч) * category_id - INT (надворешен клуч) * name - VARCHAR(100) (атрибут) * description - TEXT (атрибут) * price - NUMERIC (атрибут) * active - BOOLEAN (атрибут) * min_stock - INT (атрибут) 7.''' Ingredient '''- ентитет за состојка која се користи во рецептите * ingredient_id - SERIAL (примарен клуч) * name - VARCHAR(200) (атрибут) * unit - VARCHAR(20) (атрибут) * min_stock - NUMERIC (атрибут) * active - BOOLEAN (атрибут) 8.''' Inventory '''- ентитет за движење на залихи на готови производи * inventory_id - SERIAL (примарен клуч) * product_id - INT (надворешен клуч) * quantity_change - INT (атрибут) * operation_type - VARCHAR(30) (атрибут) * created_at - TIMESTAMPTZ (атрибут) 9.''' Ingredient Inventory '''- ентитет за движење на залихи на состојки * id - SERIAL (примарен клуч) * ingredient_id - INT (надворешен клуч) * quantity_change - NUMERIC (атрибут) * operation_type - VARCHAR(40) (атрибут) * created_at - TIMESTAMP (атрибут) 10.''' Recipe '''- ентитет за рецепт на производ * recipe_id - SERIAL (примарен клуч) * product_id - INT (надворешен клуч, UNIQUE) 11.''' Recipe Item '''- слаб ентитет за поединечна состојка во рецепт * recipe_id - INT (примарен клуч, дел од композитен) * ingredient_id - INT (примарен клуч, дел од композитен, надворешен клуч) * quantity_needed - NUMERIC (атрибут) 12.''' Restaurant Table '''- ентитет за маса во ресторанот * table_id - SERIAL (примарен клуч) * table_number - VARCHAR(20) (атрибут) * capacity - INT (атрибут) * status - VARCHAR(20) (атрибут) 13.''' Orders '''- ентитет за нарачка * order_id - SERIAL (примарен клуч) * user_id - INT (надворешен клуч) * table_id - INT (надворешен клуч) * created_at - TIMESTAMPTZ (атрибут) * status - VARCHAR(20) (атрибут) 14.''' Order Item '''- слаб ентитет за ставка во нарачка * order_id - INT (примарен клуч, дел од композитен) * item_number - INT (примарен клуч, дел од композитен) * product_id - INT (надворешен клуч) * quantity - INT (атрибут) * unit_price - NUMERIC (атрибут) * status - VARCHAR(20) (атрибут) 15.''' Payment '''- ентитет за плаќање * payment_id - SERIAL (примарен клуч) * order_id - INT (надворешен клуч, UNIQUE) * amount - NUMERIC (атрибут) * method - VARCHAR(20) (атрибут) * payment_date - TIMESTAMPTZ (атрибут) 16.''' Invoice '''- ентитет за фактура * invoice_id - SERIAL (примарен клуч) * payment_id - INT (надворешен клуч, UNIQUE) * invoice_number - VARCHAR(50) (атрибут) * issued_at - TIMESTAMPTZ (атрибут) 17.''' Shift '''- ентитет за работна смена * shift_id - SERIAL (примарен клуч) * user_id - INT (надворешен клуч) * start_time - TIMESTAMP (атрибут) * end_time - TIMESTAMP (атрибут) 18.''' Shift Close '''- ентитет за затворање на смена * shift_id - SERIAL (примарен клуч) * closed_at - TIMESTAMP (атрибут) * closed_by - INT (надворешен клуч) * total - NUMERIC (атрибут) * order_count - INT (атрибут) 19.''' App Settings '''- ентитет за поставки на апликацијата * id - INT (примарен клуч) * restaurant_name - VARCHAR(100) (атрибут) * vat_rate - NUMERIC (атрибут) * currency - VARCHAR(10) (атрибут) * printer_config - VARCHAR(255) (атрибут) 20.''' Settings '''- ентитет за поставки на системот * id - INT (примарен клуч) * restaurant_name - VARCHAR(200) (атрибут) * vat_percent - NUMERIC (атрибут) * currency - VARCHAR(10) (атрибут) * printer_ip - VARCHAR(64) (атрибут) * printer_port - INT (атрибут) === Релации === * ''' HAS_ROLE ''' - 1:N еден корисник има една улога, една улога може да биде доделена на повеќе корисници * ''' HAS_SESSION ''' - 1:N еден корисник може да има повеќе сесии * ''' PERFORMS ''' - 1:N еден корисник може да изврши повеќе активности во дневникот * ''' WORKS ''' - 1:N еден корисник може да работи повеќе смени * ''' CLOSES ''' - 1:N еден корисник може да затвори повеќе смени * ''' HAS_CATEGORY ''' - 1:N една категорија содржи повеќе производи * ''' HAS_INVENTORY ''' - 1:N еден производ може да има повеќе движења на залиха * ''' HAS_INGREDIENT_INVENTORY ''' - 1:N една состојка може да има повеќе движења на залиха * ''' HAS_RECIPE ''' - 1:1 еден производ има најмногу еден рецепт * ''' USES ''' - 1:N еден рецепт содржи повеќе состојки * ''' CONTAINS_INGREDIENT ''' - 1:N една состојка може да биде дел од повеќе рецепти * ''' RECEIVES ''' - 1:N една маса може да прими повеќе нарачки * ''' CREATES ''' - 1:N еден корисник може да креира повеќе нарачки * ''' CONTAINS ''' - 1:N една нарачка содржи повеќе ставки * ''' INCLUDES ''' - 1:N еден производ може да биде дел од повеќе ставки * ''' HAS_PAYMENT ''' - 1:1 една нарачка има едно плаќање * ''' HAS_INVOICE ''' - 1:1 едно плаќање има една фактура * ''' CLOSES_SHIFT ''' - 1:1 една смена има едно затворање