classDiagram
direction BT
class audit_logs {
   varchar(50) user_id
   varchar(100) action
   varchar(50) entity_type
   varchar(50) entity_id
   jsonb old_value
   jsonb new_value
   inet ip_address
   text user_agent
   timestamp with time zone timestamp
   bigint log_id
}
class cart_items {
   varchar(50) cart_id
   varchar(50) product_id
   numeric(12,2) quantity
   numeric(12,2) unit_price
   numeric(12,2) subtotal
   timestamp with time zone added_at
   varchar(50) cart_item_id
}
class carts {
   varchar(50) user_id
   numeric(12,2) total_amount
   boolean is_synced
   timestamp with time zone last_modified
   timestamp with time zone created_at
   varchar(50) cart_id
}
class chat_messages {
   varchar(50) chat_room_id
   varchar(50) sender_id
   content_type content_type
   text content
   varchar(500) attachment_url
   varchar(50) product_reference
   boolean is_read
   boolean is_edited
   boolean is_deleted
   jsonb read_by
   timestamp with time zone timestamp
   timestamp with time zone edited_at
   varchar(50) message_id
}
class chat_rooms {
   room_type room_type
   varchar(50) related_quote_id
   varchar(50) related_order_id
   jsonb participants
   varchar(100) room_name
   boolean is_active
   timestamp with time zone last_activity
   timestamp with time zone created_at
   varchar(50) created_by
   varchar(50) chat_room_id
}
class design_requests {
   varchar(50) user_id
   varchar(200) project_name
   project_type project_type
   numeric(10,2) area
   varchar(100) style
   numeric(12,2) budget
   text current_situation
   text requirements
   text notes
   jsonb attachments
   design_status status
   varchar(100) assigned_designer
   varchar(500) final_design_link
   text feedback
   integer rating
   date estimated_completion
   timestamp with time zone created_at
   timestamp with time zone completed_at
   timestamp with time zone updated_at
   varchar(50) request_id
}
class gift_catalog {
   varchar(200) name
   text description
   varchar(500) image_url
   gift_category category
   integer points_cost
   numeric(12,2) cash_value
   integer quantity_available
   integer quantity_redeemed
   text terms_conditions
   boolean is_active
   date valid_from
   date valid_until
   timestamp with time zone created_at
   timestamp with time zone updated_at
   varchar(50) catalog_id
}
class invoices {
   varchar(50) invoice_number
   varchar(50) user_id
   varchar(50) order_id
   invoice_type invoice_type
   date issue_date
   date due_date
   varchar(3) currency
   numeric(12,2) subtotal_amount
   numeric(12,2) tax_amount
   numeric(12,2) discount_amount
   numeric(12,2) shipping_amount
   numeric(12,2) total_amount
   numeric(12,2) amount_paid
   numeric(12,2) amount_remaining
   invoice_status status
   text payment_terms
   text notes
   varchar(50) erpnext_invoice
   timestamp with time zone created_at
   timestamp with time zone updated_at
   timestamp with time zone last_reminder_sent
   varchar(50) invoice_id
}
class loyalty_point_entries {
   varchar(50) user_id
   integer points
   entry_type entry_type
   entry_source source
   text description
   varchar(50) reference_id
   varchar(50) reference_type
   jsonb complaint
   complaint_status complaint_status
   integer balance_after
   date expiry_date
   timestamp with time zone timestamp
   varchar(50) erpnext_entry_id
   varchar(50) entry_id
}
class notifications {
   varchar(50) user_id
   varchar(50) type
   varchar(200) title
   text message
   jsonb data
   boolean is_read
   boolean is_pushed
   timestamp with time zone created_at
   timestamp with time zone read_at
   varchar(50) notification_id
}
class order_items {
   varchar(50) order_id
   varchar(50) product_id
   numeric(12,2) quantity
   numeric(12,2) unit_price
   numeric(5,2) discount_percent
   numeric(12,2) subtotal
   text notes
   varchar(50) order_item_id
}
class orders {
   varchar(50) order_number
   varchar(50) user_id
   order_status status
   numeric(12,2) total_amount
   numeric(12,2) discount_amount
   numeric(12,2) tax_amount
   numeric(12,2) shipping_fee
   numeric(12,2) final_amount
   jsonb shipping_address
   jsonb billing_address
   date expected_delivery_date
   date actual_delivery_date
   text notes
   text cancellation_reason
   varchar(50) erpnext_sales_order
   timestamp with time zone created_at
   timestamp with time zone updated_at
   varchar(50) order_id
}
class payment_lines {
   varchar(50) invoice_id
   varchar(50) payment_number
   date payment_date
   numeric(12,2) amount
   payment_method payment_method
   varchar(100) bank_name
   varchar(50) bank_account
   varchar(100) reference_number
   text notes
   payment_status status
   varchar(500) receipt_url
   varchar(50) erpnext_payment_entry
   timestamp with time zone created_at
   timestamp with time zone processed_at
   varchar(50) payment_line_id
}
class payment_reminders {
   varchar(50) invoice_id
   varchar(50) user_id
   reminder_type reminder_type
   varchar(200) subject
   text message
   boolean is_read
   boolean is_sent
   timestamp with time zone scheduled_at
   timestamp with time zone sent_at
   timestamp with time zone read_at
   varchar(50) reminder_id
}
class points_records {
   varchar(50) user_id
   varchar(100) invoice_number
   varchar(200) store_name
   date transaction_date
   numeric(12,2) invoice_amount
   text notes
   jsonb attachments
   points_status status
   text reject_reason
   integer points_earned
   timestamp with time zone submitted_at
   timestamp with time zone processed_at
   varchar(50) processed_by
   varchar(50) record_id
}
class products {
   varchar(200) name
   text description
   numeric(12,2) base_price
   jsonb images
   jsonb image_captions
   varchar(500) link_360
   jsonb specifications
   varchar(100) category
   varchar(50) brand
   varchar(20) unit
   boolean is_active
   boolean is_featured
   varchar(50) erpnext_item_code
   timestamp with time zone created_at
   timestamp with time zone updated_at
   varchar(50) product_id
}
class project_submissions {
   varchar(50) user_id
   varchar(200) project_name
   text project_address
   numeric(12,2) project_value
   project_type project_type
   jsonb before_photos
   jsonb after_photos
   jsonb invoices
   submission_status status
   text review_notes
   text rejection_reason
   integer points_earned
   timestamp with time zone submitted_at
   timestamp with time zone reviewed_at
   varchar(50) reviewed_by
   varchar(50) submission_id
}
class quote_items {
   varchar(50) quote_id
   varchar(50) product_id
   numeric(12,2) quantity
   numeric(12,2) original_price
   numeric(12,2) negotiated_price
   numeric(5,2) discount_percent
   numeric(12,2) subtotal
   text notes
   varchar(50) quote_item_id
}
class quotes {
   varchar(50) quote_number
   varchar(50) user_id
   quote_status status
   numeric(12,2) total_amount
   numeric(12,2) discount_amount
   numeric(12,2) final_amount
   varchar(200) project_name
   jsonb delivery_address
   text payment_terms
   text notes
   date valid_until
   varchar(50) converted_order_id
   varchar(50) erpnext_quotation
   timestamp with time zone created_at
   timestamp with time zone updated_at
   varchar(50) quote_id
}
class redeemed_gifts {
   varchar(50) user_id
   varchar(50) catalog_id
   varchar(200) name
   text description
   varchar(50) voucher_code
   varchar(500) qr_code_image
   gift_category gift_type
   integer points_cost
   numeric(12,2) cash_value
   date expiry_date
   gift_status status
   timestamp with time zone redeemed_at
   timestamp with time zone used_at
   varchar(200) used_location
   varchar(100) used_reference
   varchar(50) gift_id
}
class showroom_products {
   numeric(10,2) quantity_used
   varchar(50) showroom_id
   varchar(50) product_id
}
class showrooms {
   varchar(200) title
   text description
   varchar(500) cover_image
   varchar(500) link_360
   numeric(10,2) area
   varchar(100) style
   varchar(200) location
   jsonb gallery_images
   integer view_count
   boolean is_featured
   boolean is_active
   timestamp with time zone published_at
   varchar(50) created_by
   varchar(50) showroom_id
}
class stock_levels {
   numeric(12,2) available_qty
   numeric(12,2) reserved_qty
   numeric(12,2) ordered_qty
   varchar(50) warehouse_code
   timestamp with time zone last_updated
   varchar(50) product_id
}
class system_settings {
   jsonb setting_value
   text description
   boolean is_public
   timestamp with time zone updated_at
   varchar(50) updated_by
   varchar(100) setting_key
}
class user_sessions {
   varchar(50) user_id
   varchar(100) device_id
   varchar(50) device_type
   varchar(100) device_name
   inet ip_address
   text user_agent
   varchar(500) refresh_token
   timestamp with time zone expires_at
   timestamp with time zone created_at
   timestamp with time zone last_activity
   varchar(100) session_id
}
class users {
   varchar(20) phone_number
   varchar(255) password_hash
   varchar(100) full_name
   varchar(100) email
   user_role role
   user_status status
   loyalty_tier loyalty_tier
   integer total_points
   jsonb company_info
   varchar(20) cccd
   jsonb attachments
   text address
   varchar(500) avatar_url
   varchar(20) referral_code
   varchar(50) referred_by
   varchar(50) erpnext_customer_id
   timestamp with time zone created_at
   timestamp with time zone updated_at
   timestamp with time zone last_login_at
   varchar(50) user_id
}

cart_items  -->  carts : cart_id
cart_items  -->  products : product_id
carts  -->  users : user_id
chat_messages  -->  chat_rooms : chat_room_id
chat_messages  -->  products : product_reference:product_id
chat_messages  -->  users : sender_id:user_id
chat_rooms  -->  orders : related_order_id:order_id
chat_rooms  -->  quotes : related_quote_id:quote_id
chat_rooms  -->  users : created_by:user_id
design_requests  -->  users : user_id
invoices  -->  orders : order_id
invoices  -->  users : user_id
loyalty_point_entries  -->  users : user_id
notifications  -->  users : user_id
order_items  -->  orders : order_id
order_items  -->  products : product_id
orders  -->  users : user_id
payment_lines  -->  invoices : invoice_id
payment_reminders  -->  invoices : invoice_id
payment_reminders  -->  users : user_id
points_records  -->  users : user_id
project_submissions  -->  users : user_id
quote_items  -->  products : product_id
quote_items  -->  quotes : quote_id
quotes  -->  orders : converted_order_id:order_id
quotes  -->  users : user_id
redeemed_gifts  -->  gift_catalog : catalog_id
redeemed_gifts  -->  users : user_id
showroom_products  -->  products : product_id
showroom_products  -->  showrooms : showroom_id
showrooms  -->  users : created_by:user_id
stock_levels  -->  products : product_id
user_sessions  -->  users : user_id
users  -->  users : referred_by:user_id
