Re_Backend/backend_structure.txt

604 lines
15 KiB
Plaintext

%% Royal Enfield Workflow Management System
%% Entity Relationship Diagram
%% Database: PostgreSQL 16.x
erDiagram
%% Core Tables
users ||--o{ workflow_requests : "initiates"
users ||--o{ approval_levels : "approves"
users ||--o{ participants : "participates"
users ||--o{ work_notes : "posts"
users ||--o{ documents : "uploads"
users ||--o{ activities : "performs"
users ||--o{ notifications : "receives"
users ||--o{ user_sessions : "has"
users ||--o{ users : "reports_to"
workflow_requests ||--|{ approval_levels : "has"
workflow_requests ||--o{ participants : "involves"
workflow_requests ||--o{ documents : "contains"
workflow_requests ||--o{ work_notes : "has"
workflow_requests ||--o{ activities : "logs"
workflow_requests ||--o{ tat_tracking : "monitors"
workflow_requests ||--o{ notifications : "triggers"
workflow_requests ||--|| conclusion_remarks : "concludes"
approval_levels ||--o{ tat_tracking : "tracks"
work_notes ||--o{ work_note_attachments : "has"
notifications ||--o{ email_logs : "sends"
notifications ||--o{ sms_logs : "sends"
%% Entity Definitions
users {
uuid user_id PK
varchar employee_id UK "HR System ID - Optional"
varchar okta_sub UK "Okta Subject ID"
varchar email UK "Primary Email"
varchar first_name "Optional"
varchar last_name "Optional"
varchar display_name "Full Name"
varchar department "Optional"
varchar designation "Optional"
varchar phone "Office Phone - Optional"
varchar manager "Reporting Manager - SSO Optional"
varchar second_email "Alternate Email - SSO Optional"
text job_title "Detailed Job Title - SSO Optional"
varchar employee_number "HR Employee Number - SSO Optional"
varchar postal_address "Work Location - SSO Optional"
varchar mobile_phone "Mobile Contact - SSO Optional"
jsonb ad_groups "AD Group Memberships - SSO Optional"
jsonb location "Location Details - Optional"
boolean is_active "Account Status Default true"
enum role "USER, MANAGEMENT, ADMIN - RBAC Default USER"
timestamp last_login "Last Login Time"
timestamp created_at "Record Created"
timestamp updated_at "Record Updated"
}
workflow_requests {
uuid request_id PK
varchar request_number UK "REQ-YYYY-NNNNN"
uuid initiator_id FK
varchar template_type "CUSTOM or TEMPLATE"
varchar title "Request Summary"
text description "Detailed Description"
enum priority "STANDARD or EXPRESS"
enum status "DRAFT to CLOSED"
integer current_level "Active Stage"
integer total_levels "Max 10 Levels"
decimal total_tat_hours "Cumulative TAT"
timestamp submission_date
timestamp closure_date
text conclusion_remark "Final Summary"
text ai_generated_conclusion "AI Version"
boolean is_draft "Saved Draft"
boolean is_deleted "Soft Delete"
timestamp created_at
timestamp updated_at
}
approval_levels {
uuid level_id PK
uuid request_id FK
integer level_number "Sequential Level"
varchar level_name "Optional Label"
uuid approver_id FK
varchar approver_email
varchar approver_name
decimal tat_hours "Level TAT"
integer tat_days "Calculated Days"
enum status "PENDING to APPROVED"
timestamp level_start_time "Timer Start"
timestamp level_end_time "Timer End"
timestamp action_date "Decision Time"
text comments "Approval Notes"
text rejection_reason
boolean is_final_approver "Last Level"
decimal elapsed_hours "Time Used"
decimal remaining_hours "Time Left"
decimal tat_percentage_used "Usage %"
timestamp created_at
timestamp updated_at
}
participants {
uuid participant_id PK
uuid request_id FK
uuid user_id FK
varchar user_email
varchar user_name
enum participant_type "SPECTATOR etc"
boolean can_comment "Permission"
boolean can_view_documents "Permission"
boolean can_download_documents "Permission"
boolean notification_enabled
uuid added_by FK
timestamp added_at
boolean is_active
}
documents {
uuid document_id PK
uuid request_id FK
uuid uploaded_by FK
varchar file_name "Storage Name"
varchar original_file_name "Display Name"
varchar file_type
varchar file_extension
bigint file_size "Bytes (Max 10MB)"
varchar file_path "Cloud Path"
varchar storage_url "Public URL"
varchar mime_type
varchar checksum "SHA-256"
boolean is_google_doc
varchar google_doc_url
enum category "Document Type"
integer version "Version Number"
uuid parent_document_id FK "Version Parent"
boolean is_deleted
integer download_count
timestamp uploaded_at
}
work_notes {
uuid note_id PK
uuid request_id FK
uuid user_id FK
varchar user_name
varchar user_role "INITIATOR etc"
text message "Max 2000 chars"
varchar message_type "COMMENT etc"
boolean is_priority "Urgent Flag"
boolean has_attachment
uuid parent_note_id FK "Threading"
uuid[] mentioned_users "@Tagged Users"
jsonb reactions "Emoji Responses"
boolean is_edited
boolean is_deleted
timestamp created_at
timestamp updated_at
}
work_note_attachments {
uuid attachment_id PK
uuid note_id FK
varchar file_name
varchar file_type
bigint file_size
varchar file_path
varchar storage_url
boolean is_downloadable
integer download_count
timestamp uploaded_at
}
activities {
uuid activity_id PK
uuid request_id FK
uuid user_id FK "NULL for System"
varchar user_name
varchar activity_type "Event Type"
text activity_description
varchar activity_category "Classification"
varchar severity "INFO to CRITICAL"
jsonb metadata "Additional Context"
boolean is_system_event
varchar ip_address
text user_agent
timestamp created_at
}
notifications {
uuid notification_id PK
uuid user_id FK
uuid request_id FK
varchar notification_type "Event Type"
varchar title
text message
boolean is_read
enum priority "LOW to URGENT"
varchar action_url
boolean action_required
jsonb metadata
varchar[] sent_via "IN_APP, EMAIL, SMS"
boolean email_sent
boolean sms_sent
boolean push_sent
timestamp read_at
timestamp expires_at
timestamp created_at
}
tat_tracking {
uuid tracking_id PK
uuid request_id FK
uuid level_id FK "NULL for Request"
varchar tracking_type "REQUEST or LEVEL"
enum tat_status "ON_TRACK to BREACHED"
decimal total_tat_hours
decimal elapsed_hours
decimal remaining_hours
decimal percentage_used
boolean threshold_50_breached
timestamp threshold_50_alerted_at
boolean threshold_80_breached
timestamp threshold_80_alerted_at
boolean threshold_100_breached
timestamp threshold_100_alerted_at
integer alert_count
timestamp last_calculated_at
}
conclusion_remarks {
uuid conclusion_id PK
uuid request_id FK
text ai_generated_remark "AI Output"
varchar ai_model_used "GPT-4 etc"
decimal ai_confidence_score "0.00 to 1.00"
text final_remark "User Edited"
uuid edited_by FK
boolean is_edited
integer edit_count
jsonb approval_summary
jsonb document_summary
text[] key_discussion_points
timestamp generated_at
timestamp finalized_at
}
audit_logs {
uuid audit_id PK
uuid user_id FK
varchar entity_type "Table Name"
uuid entity_id "Record ID"
varchar action "CREATE, UPDATE etc"
varchar action_category
jsonb old_values "Before"
jsonb new_values "After"
text changes_summary
varchar ip_address
text user_agent
varchar session_id
varchar request_method "GET, POST etc"
varchar request_url
integer response_status "HTTP Code"
integer execution_time_ms
timestamp created_at
}
user_sessions {
uuid session_id PK
uuid user_id FK
varchar session_token UK "JWT Access"
varchar refresh_token "JWT Refresh"
varchar ip_address
text user_agent
varchar device_type "WEB, MOBILE"
varchar browser
varchar os
timestamp login_at
timestamp last_activity_at
timestamp logout_at
timestamp expires_at
boolean is_active
varchar logout_reason
}
email_logs {
uuid email_log_id PK
uuid request_id FK
uuid notification_id FK
varchar recipient_email
uuid recipient_user_id FK
text[] cc_emails
text[] bcc_emails
varchar subject
text body
varchar email_type
varchar status "QUEUED to SENT"
integer send_attempts
timestamp sent_at
timestamp failed_at
text failure_reason
timestamp opened_at
timestamp clicked_at
timestamp created_at
}
sms_logs {
uuid sms_log_id PK
uuid request_id FK
uuid notification_id FK
varchar recipient_phone
uuid recipient_user_id FK
text message
varchar sms_type
varchar status "QUEUED to DELIVERED"
integer send_attempts
timestamp sent_at
timestamp delivered_at
timestamp failed_at
text failure_reason
varchar sms_provider
varchar sms_provider_message_id
decimal cost
timestamp created_at
}
system_settings {
uuid setting_id PK
varchar setting_key UK "CONFIG_NAME"
text setting_value "Value"
varchar setting_type "STRING, NUMBER etc"
varchar setting_category "TAT, NOTIFICATION"
text description
boolean is_editable
boolean is_sensitive "Encrypted"
jsonb validation_rules
text default_value
uuid updated_by FK
timestamp created_at
timestamp updated_at
}
workflow_templates {
uuid template_id PK
varchar template_name "Future Scope"
text template_description
varchar template_category
jsonb approval_levels_config
decimal default_tat_hours
boolean is_active
integer usage_count
uuid created_by FK
timestamp created_at
timestamp updated_at
}
report_cache {
uuid cache_id PK
varchar report_type
jsonb report_params "Input Filters"
jsonb report_data "Cached Result"
uuid generated_by FK
timestamp generated_at
timestamp expires_at
integer access_count
timestamp last_accessed_at
}
%% Notes and Constraints
%% 1. All timestamps are WITH TIME ZONE
%% 2. UUIDs are generated via uuid-ossp extension
%% 3. Enums are custom types defined separately
%% 4. JSONB used for flexible metadata storage
%% 5. Soft deletes via is_deleted flags
%% 6. Audit trail via activities and audit_logs
%% 7. Multi-channel notifications (in-app, email, SMS, push)
%% 8. TAT thresholds: 50%, 80%, 100%
%% 9. Max approval levels: 10
%% 10. Max file size: 10 MB
erDiagram
workflow_requests ||--|| dealer_claim_details : "has_claim_details"
workflow_requests ||--o{ dealer_claim_history : "has_claim_history"
workflow_requests ||--|| dealer_proposal_details : "has_proposal"
workflow_requests ||--|| dealer_completion_details : "has_completion"
workflow_requests ||--|| claim_budget_tracking : "tracks_budget"
workflow_requests ||--|| internal_orders : "has_io"
workflow_requests ||--o{ claim_invoices : "has_invoices"
workflow_requests ||--o{ claim_credit_notes : "has_credit_notes"
workflow_requests ||--o{ tat_alerts : "triggers_alerts"
workflow_requests ||--|| request_summaries : "has_summary"
dealer_proposal_details ||--o{ dealer_proposal_cost_items : "has_items"
dealer_completion_details ||--o{ dealer_completion_expenses : "has_expenses"
claim_invoices ||--o{ claim_credit_notes : "has_credit_notes"
request_summaries ||--o{ shared_summaries : "shared_as"
users ||--o{ shared_summaries : "shares"
users ||--o{ subscriptions : "has_subscription"
users ||--o{ holidays : "creates"
users ||--o{ activity_types : "creates"
dealers {
uuid dealer_id PK
varchar sales_code
varchar service_code
varchar dealer_name
varchar region
varchar state
varchar city
varchar location
boolean is_active
timestamp created_at
timestamp updated_at
}
dealer_claim_details {
uuid claim_id PK
uuid request_id FK
varchar activity_name
varchar activity_type
varchar dealer_code
varchar dealer_name
date activity_date
date period_start_date
date period_end_date
timestamp created_at
timestamp updated_at
}
dealer_claim_history {
uuid history_id PK
uuid request_id FK
uuid approval_level_id FK
integer version
enum snapshot_type
jsonb snapshot_data
text change_reason
uuid changed_by FK
timestamp created_at
}
dealer_proposal_details {
uuid proposal_id PK
uuid request_id FK
varchar proposal_document_path
decimal total_estimated_budget
date expected_completion_date
text dealer_comments
timestamp submitted_at
timestamp created_at
timestamp updated_at
}
dealer_proposal_cost_items {
uuid cost_item_id PK
uuid proposal_id FK
uuid request_id FK
varchar item_description
decimal amount
integer item_order
timestamp created_at
timestamp updated_at
}
dealer_completion_details {
uuid completion_id PK
uuid request_id FK
date activity_completion_date
integer number_of_participants
decimal total_closed_expenses
timestamp submitted_at
timestamp created_at
timestamp updated_at
}
dealer_completion_expenses {
uuid expense_id PK
uuid completion_id FK
uuid request_id FK
varchar description
decimal amount
timestamp created_at
timestamp updated_at
}
claim_budget_tracking {
uuid budget_id PK
uuid request_id FK
decimal initial_estimated_budget
decimal proposal_estimated_budget
decimal approved_budget
decimal io_blocked_amount
decimal closed_expenses
decimal final_claim_amount
decimal credit_note_amount
enum budget_status
timestamp created_at
timestamp updated_at
}
claim_invoices {
uuid invoice_id PK
uuid request_id FK
varchar invoice_number
date invoice_date
decimal amount
varchar status
timestamp created_at
timestamp updated_at
}
claim_credit_notes {
uuid credit_note_id PK
uuid request_id FK
uuid invoice_id FK
varchar credit_note_number
decimal credit_note_amount
varchar status
timestamp created_at
timestamp updated_at
}
internal_orders {
uuid io_id PK
uuid request_id FK
varchar io_number
decimal io_available_balance
decimal io_blocked_amount
enum status
timestamp created_at
timestamp updated_at
}
holidays {
uuid holiday_id PK
date holiday_date
varchar holiday_name
enum holiday_type
boolean is_active
uuid created_by FK
timestamp created_at
timestamp updated_at
}
activity_types {
uuid activity_type_id PK
varchar title
varchar item_code
varchar taxation_type
boolean is_active
uuid created_by FK
timestamp created_at
timestamp updated_at
}
tat_alerts {
uuid alert_id PK
uuid request_id FK
uuid level_id FK
uuid approver_id FK
enum alert_type
boolean is_breached
timestamp alert_sent_at
timestamp created_at
}
request_summaries {
uuid summary_id PK
uuid request_id FK
uuid initiator_id FK
varchar title
text description
text closing_remarks
boolean is_ai_generated
timestamp created_at
timestamp updated_at
}
shared_summaries {
uuid shared_summary_id PK
uuid summary_id FK
uuid shared_by FK
uuid shared_with FK
boolean is_read
timestamp shared_at
timestamp created_at
}
subscriptions {
uuid subscription_id PK
uuid user_id FK
varchar endpoint
varchar p256dh
varchar auth
timestamp created_at
}