# README

## Overview

Product Management is a full-featured application built on top of user-management, combining user & role administration with product master data management. It uses the product-management, item-management, user-management, primitives, and audit modules.

Key features:

- **User & Role Management**: Create, manage, and control user accounts with role-based access control and audit logging
- **Product Lifecycle**: Create products in DRAFT, activate to ACTIVE for operations, archive to ARCHIVED, and reactivate as needed
- **Attribute & Variant Generation**: Define attributes (e.g., Color, Size) with values, assign to products, and generate variants that create Items in item-management
- **Category Management**: Organize products with a hierarchical category tree (many-to-many classification)
- **Audit Logging**: Chronological record of entity operations with field-level change tracking

## Industry Context

### Target Industry

Retail, Manufacturing, and E-Commerce (cross-industry product information management)

### Domain Terminology

- **User**: An internal system user whose capabilities are determined by assigned roles
- **Role**: A named collection of permissions that can be assigned to users
- **Product**: The commercial representation of a product — identified by a unique code, with name, description, and unit of measure. Parent entity for variant generation
- **Product Status**: Lifecycle state — DRAFT (initial, freely editable), ACTIVE (operational, variant generation enabled), ARCHIVED (deactivated, preserving history)
- **Attribute**: A variant axis (e.g., Color, Size) with predefined values that drive variant generation
- **Variant**: A unique combination of attribute values generated from an ACTIVE product, linked to an Item in item-management
- **Item**: The SKU-level entity in item-management — the sellable, purchasable, and trackable unit referenced by downstream modules
- **Category**: A hierarchical grouping for commercial/marketing product classification (many-to-many with products)
- **Unit of Measure (UoM)**: A measurement unit from the primitives module (e.g., kg, ea, dz) assigned to products and inherited by generated Items
- **Audit Log**: An immutable record of create and update operations with field-level change details
