package contract import ( "time" "github.com/google/uuid" ) type CreatePurchaseCategoryRequest struct { ParentID *uuid.UUID `json:"parent_id,omitempty"` Code *string `json:"code,omitempty"` Name string `json:"name" validate:"required,min=1,max=255"` Type string `json:"type" validate:"required,oneof=raw_material non_inventory"` SortOrder *int `json:"sort_order,omitempty"` IsActive *bool `json:"is_active,omitempty"` } type UpdatePurchaseCategoryRequest struct { ParentID *uuid.UUID `json:"parent_id,omitempty"` Code *string `json:"code,omitempty"` Name *string `json:"name,omitempty" validate:"omitempty,min=1,max=255"` Type *string `json:"type,omitempty" validate:"omitempty,oneof=raw_material non_inventory"` SortOrder *int `json:"sort_order,omitempty"` IsActive *bool `json:"is_active,omitempty"` } type ListPurchaseCategoriesRequest struct { ParentID *uuid.UUID `json:"parent_id,omitempty"` Type string `json:"type,omitempty" validate:"omitempty,oneof=raw_material non_inventory"` Search string `json:"search,omitempty"` IsActive *bool `json:"is_active,omitempty"` Page int `json:"page" validate:"required,min=1"` Limit int `json:"limit" validate:"required,min=1,max=100"` } type PurchaseCategoryResponse struct { ID uuid.UUID `json:"id"` OrganizationID uuid.UUID `json:"organization_id"` PresetID *uuid.UUID `json:"preset_id"` ParentID *uuid.UUID `json:"parent_id"` Code string `json:"code"` Name string `json:"name"` Type string `json:"type"` SortOrder int `json:"sort_order"` IsSystem bool `json:"is_system"` IsActive bool `json:"is_active"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type ListPurchaseCategoriesResponse struct { PurchaseCategories []PurchaseCategoryResponse `json:"purchase_categories"` TotalCount int `json:"total_count"` Page int `json:"page"` Limit int `json:"limit"` TotalPages int `json:"total_pages"` }