377 lines
9.8 KiB
Plaintext
377 lines
9.8 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"
|
|
varchar email UK "Primary Email"
|
|
varchar first_name
|
|
varchar last_name
|
|
varchar display_name "Full Name"
|
|
varchar department
|
|
varchar designation
|
|
varchar phone
|
|
uuid reporting_manager_id FK "Self Reference"
|
|
boolean is_active "Account Status"
|
|
boolean is_admin "Super User Flag"
|
|
timestamp last_login
|
|
timestamp created_at
|
|
timestamp updated_at
|
|
}
|
|
|
|
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 |