CRM для виробництва косметики
Структура бази даних та потік роботи
ЕТАП 1: Довідники (створюються один раз)
Suppliers (Постачальники)
●
id
●
name
○
phone
○
link
● createdAt
Приклад: ТОВ "Хімпром"
Materials (Сировина/Комплектуючі)
●
id
●
name
●
type: 'raw' | 'component'
●
unit: 'мл' | 'г' | 'шт'
● minStock
○
comment
Приклад: Гліцерин, 'raw', 'мл'
Баночка 30мл, 'component', 'шт'
Recipes (Тех-карти)
●
id
●
baseProductName
●
baseQuantity: 100
●
unit: 'мл' | 'г'
●
ingredients: []
(materialId, quantity, unit)
○
description
Приклад: Крем для обличчя
базова рецептура на 100мл
Гліцерин: 10мл, Олія: 5мл
використовує
ЕТАП 2: Закупівля сировини
MaterialBatches (Партії сировини)
●
id
●
materialId → Materials
○
supplierId → Suppliers
●
quantity (загальна кількість)
●
currentStock (поточний залишок)
○
cost (вартість партії)
●
arrivalDate
○
manufactureDate
○
expiryDate
○
supplierDocNumber
○
receiptPhoto
○
expiryHistory: []
⚠️ FIFO: використовуються найстаріші
надходить
від постачальника
ЕТАП 3: Виробництво товарів
Productions (Виробництво)
●
id
●
recipeId → Recipes
●
productVariant: (volume, unit)
● coefficient (volume / baseQuantity)
●
plannedQuantity (планували)
●
producedQuantity (вийшло)
●
productionDate
●
batchNumber (унікальний номер)
●
expiryDate (готового товару)
●
usedMaterials: []
(materialId, materialBatchId)
usedQuantity, unitCost
● totalCost (собівартість партії)
● costPerUnit (собівартість 1шт)
● status: 'completed'
Приклад: Зробили 50шт кремів 30мл
ProductBatches (Склад готової продукції)
●
id
●
productId → Products
●
productionId → Productions
●
batchNumber
●
quantity (виготовлено)
●
currentStock (поточний залишок)
● soldQuantity (продано)
●
manufactureDate
●
expiryDate
●
costPerUnit (собівартість)
○
location (де зберігається)
● status: 'available'
⚠️ Партійний облік готових товарів!
⚠️ FIFO: продаються найстаріші
використовує рецепт
списує сировину (FIFO)
створює
ЕТАП 4: Каталог товарів (E-commerce)
Products (Товари в каталозі)
●
id
●
name
●
recipeId → Recipes
●
volume, unit
● coefficient
●
price (ціна продажу)
● images, description
● inventory:
totalStock (сума всіх ProductBatches)
availableStock (доступно для продажу)
reservedStock (зарезервовано)
batches: [] (список партій)
nearestExpiry (найближчий термін)
averageCost (середня собівартість)
Приклад: Крем для обличчя 30мл
Ціна: 250₴, В наявності: 85шт
агрегує дані з партій
посилання на рецепт
ЕТАП 5: Продажі та списання
Orders (Замовлення)
●
id
●
customerId
●
items: []
(productId, quantity, price)
allocatedBatches: []
● status, totalAmount
⚠️ Автоматично списує з найстаріших партій (FIFO)
купує товари
списує з партій
📋 ЛЕГЕНДА
Позначення полів:
●
Обов'язкове поле
○
Опціональне поле
Кольори блоків:
Постачальники
Сировина та партії
Тех-карти (рецепти)
Виробництво
Склад готової продукції
Каталог товарів
Замовлення
⚠️ Ключові принципи:
• FIFO - First In, First Out
Найстаріші партії використовуються першими
• Партійний облік на всіх рівнях:
MaterialBatches - партії сировини
ProductBatches - партії готових товарів
• Автоматичний розрахунок:
Собівартість фіксується при виробництві
Залишки оновлюються автоматично