chitfund / schema.sql
zombee11's picture
Upload 15 files
46f356a verified
Raw
History Blame Contribute Delete
5.47 kB
CREATE TABLE roles (
role_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
role_code TEXT UNIQUE NOT NULL,
role_name TEXT NOT NULL,
role_level INT NOT NULL
);
CREATE TABLE credit_hubs (
hub_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
hub_code TEXT UNIQUE NOT NULL,
hub_name TEXT NOT NULL,
city TEXT NOT NULL,
state TEXT NOT NULL
);
CREATE TABLE users (
user_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
employee_id TEXT UNIQUE NOT NULL,
email TEXT UNIQUE NOT NULL,
role_id UUID REFERENCES roles(role_id),
hub_id UUID REFERENCES credit_hubs(hub_id),
branch_name TEXT,
is_active BOOLEAN DEFAULT TRUE
);
CREATE TABLE cases (
case_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
kurie_no TEXT NOT NULL,
draw_no INT NOT NULL,
loyalty_id TEXT NOT NULL,
chittal_no TEXT NOT NULL,
chittal TEXT NOT NULL,
prize_money NUMERIC(14,2) NOT NULL,
future_liability NUMERIC(14,2) NOT NULL,
remaining_liability NUMERIC(14,2) NOT NULL,
bid_loss NUMERIC(14,2),
branch_name TEXT NOT NULL,
current_hub_id UUID REFERENCES credit_hubs(hub_id),
pending_days INT DEFAULT 0,
status TEXT NOT NULL,
created_at TIMESTAMPTZ DEFAULT now()
);
CREATE TABLE security_types (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
code TEXT UNIQUE NOT NULL,
name TEXT NOT NULL,
formula_config JSONB NOT NULL,
is_active BOOLEAN DEFAULT TRUE
);
CREATE TABLE parties (
party_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
case_id UUID REFERENCES cases(case_id),
party_type TEXT NOT NULL,
loyalty_id TEXT,
temp_id TEXT,
full_name TEXT NOT NULL,
gross_monthly_income NUMERIC(14,2)
);
CREATE TABLE case_securities (
security_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
case_id UUID REFERENCES cases(case_id),
security_type_id UUID REFERENCES security_types(id),
party_id UUID REFERENCES parties(party_id),
holder_type TEXT NOT NULL,
accepted_value NUMERIC(14,2) NOT NULL,
input_params JSONB NOT NULL
);
CREATE TABLE document_master (
doc_code TEXT PRIMARY KEY,
doc_title TEXT NOT NULL,
category TEXT NOT NULL,
upload_method TEXT NOT NULL
);
CREATE TABLE document_security_mapping (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
doc_code TEXT REFERENCES document_master(doc_code),
security_type_id UUID REFERENCES security_types(id),
applicable_to TEXT NOT NULL,
is_mandatory BOOLEAN DEFAULT TRUE
);
CREATE TABLE case_documents (
doc_instance_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
case_id UUID REFERENCES cases(case_id),
party_id UUID REFERENCES parties(party_id),
doc_code TEXT REFERENCES document_master(doc_code),
status TEXT NOT NULL,
file_url TEXT,
uploaded_at TIMESTAMPTZ,
verified_by UUID REFERENCES users(user_id)
);
CREATE TABLE dispatch_records (
dispatch_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
case_id UUID UNIQUE REFERENCES cases(case_id),
hub_id UUID REFERENCES credit_hubs(hub_id),
courier_name TEXT NOT NULL,
awb_number TEXT NOT NULL,
dispatch_date TIMESTAMPTZ NOT NULL,
received_date TIMESTAMPTZ
);
CREATE TABLE field_investigations (
fi_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
case_id UUID REFERENCES cases(case_id),
assigned_to UUID REFERENCES users(user_id),
questionnaire_responses JSONB,
status TEXT NOT NULL
);
CREATE TABLE fi_uploads (
upload_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
fi_id UUID REFERENCES field_investigations(fi_id),
upload_type TEXT NOT NULL,
file_url TEXT NOT NULL,
gps_latitude NUMERIC(10,7),
gps_longitude NUMERIC(10,7)
);
CREATE TABLE approvals (
approval_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
case_id UUID REFERENCES cases(case_id),
approval_level TEXT NOT NULL,
approver_id UUID REFERENCES users(user_id),
decision TEXT NOT NULL,
remarks TEXT,
decided_at TIMESTAMPTZ DEFAULT now()
);
CREATE TABLE case_workflow_log (
log_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
case_id UUID REFERENCES cases(case_id),
from_status TEXT,
to_status TEXT NOT NULL,
action TEXT NOT NULL,
actioned_by UUID REFERENCES users(user_id),
remarks TEXT,
actioned_at TIMESTAMPTZ DEFAULT now()
);
CREATE TABLE audit_logs (
log_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
timestamp TIMESTAMPTZ DEFAULT now(),
user_id UUID REFERENCES users(user_id),
action TEXT NOT NULL,
entity_type TEXT NOT NULL,
entity_id UUID NOT NULL,
old_value JSONB,
new_value JSONB,
ip_address INET
);
CREATE TABLE sla_tracking (
sla_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
case_id UUID REFERENCES cases(case_id),
role_code TEXT NOT NULL,
started_at TIMESTAMPTZ NOT NULL,
sla_deadline TIMESTAMPTZ NOT NULL,
completed_at TIMESTAMPTZ,
status TEXT NOT NULL
);
CREATE TABLE notifications (
notif_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
case_id UUID REFERENCES cases(case_id),
recipient_id UUID REFERENCES users(user_id),
type TEXT NOT NULL,
channel TEXT NOT NULL,
message TEXT NOT NULL,
is_read BOOLEAN DEFAULT FALSE,
sent_at TIMESTAMPTZ DEFAULT now()
);
CREATE INDEX idx_cases_status_hub ON cases(status, current_hub_id);
CREATE INDEX idx_cases_draw_pending ON cases(created_at, pending_days);
CREATE INDEX idx_case_documents_case_doc ON case_documents(case_id, doc_code);
CREATE INDEX idx_audit_entity ON audit_logs(entity_id, entity_type);
CREATE INDEX idx_sla_status_deadline ON sla_tracking(status, sla_deadline);
CREATE INDEX idx_notifications_recipient ON notifications(recipient_id, is_read);