Files
the-order/packages/database/src/migrations/001_eresidency_applications.sql
T
defiQUG 2633de4d33 feat(eresidency): Complete eResidency service implementation
- Implement credential revocation endpoint with proper database integration
- Fix database row mapping (snake_case to camelCase) for eResidency applications
- Add missing imports (getRiskAssessmentEngine, VeriffKYCProvider, ComplyAdvantageSanctionsProvider)
- Fix environment variable type checking for Veriff and ComplyAdvantage providers
- Add required 'message' field to notification service calls
- Fix risk assessment type mismatches
- Update audit logging to use 'verified' action type (supported by schema)
- Resolve all TypeScript errors and unused variable warnings
- Add TypeScript ignore comments for placeholder implementations
- Temporarily disable security/detect-non-literal-regexp rule due to ESLint 9 compatibility
- Service now builds successfully with no linter errors

All core functionality implemented:
- Application submission and management
- KYC integration (Veriff placeholder)
- Sanctions screening (ComplyAdvantage placeholder)
- Risk assessment engine
- Credential issuance and revocation
- Reviewer console
- Status endpoints
- Auto-issuance service
2025-11-10 19:43:02 -08:00

122 lines
4.5 KiB
SQL

-- eResidency Applications Table
CREATE TABLE IF NOT EXISTS eresidency_applications (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
applicant_did VARCHAR(255),
email VARCHAR(255) NOT NULL,
given_name VARCHAR(255) NOT NULL,
family_name VARCHAR(255) NOT NULL,
date_of_birth DATE,
nationality VARCHAR(3),
phone VARCHAR(50),
address JSONB,
device_fingerprint VARCHAR(255),
identity_document JSONB,
selfie_liveness JSONB,
status VARCHAR(50) NOT NULL DEFAULT 'draft',
submitted_at TIMESTAMP,
reviewed_at TIMESTAMP,
reviewed_by UUID,
rejection_reason TEXT,
kyc_status VARCHAR(50),
sanctions_status VARCHAR(50),
pep_status VARCHAR(50),
risk_score DECIMAL(3, 2),
risk_assessment JSONB,
kyc_results JSONB,
sanctions_results JSONB,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
);
-- eCitizenship Applications Table
CREATE TABLE IF NOT EXISTS ecitizenship_applications (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
applicant_did VARCHAR(255) NOT NULL,
resident_did VARCHAR(255) NOT NULL,
residency_tenure INTEGER,
sponsor_did VARCHAR(255),
service_merit JSONB,
video_interview JSONB,
background_attestations JSONB,
oath_ceremony JSONB,
status VARCHAR(50) NOT NULL DEFAULT 'draft',
submitted_at TIMESTAMP,
reviewed_at TIMESTAMP,
reviewed_by UUID,
rejection_reason TEXT,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
);
-- Applications Indexes
CREATE INDEX IF NOT EXISTS idx_eresidency_applications_email ON eresidency_applications(email);
CREATE INDEX IF NOT EXISTS idx_eresidency_applications_status ON eresidency_applications(status);
CREATE INDEX IF NOT EXISTS idx_eresidency_applications_applicant_did ON eresidency_applications(applicant_did);
CREATE INDEX IF NOT EXISTS idx_eresidency_applications_created_at ON eresidency_applications(created_at);
CREATE INDEX IF NOT EXISTS idx_ecitizenship_applications_applicant_did ON ecitizenship_applications(applicant_did);
CREATE INDEX IF NOT EXISTS idx_ecitizenship_applications_resident_did ON ecitizenship_applications(resident_did);
CREATE INDEX IF NOT EXISTS idx_ecitizenship_applications_status ON ecitizenship_applications(status);
-- Appeals Table
CREATE TABLE IF NOT EXISTS appeals (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
application_id UUID NOT NULL,
application_type VARCHAR(50) NOT NULL,
appellant_did VARCHAR(255) NOT NULL,
reason TEXT NOT NULL,
evidence JSONB,
status VARCHAR(50) NOT NULL DEFAULT 'submitted',
submitted_at TIMESTAMP NOT NULL DEFAULT NOW(),
reviewed_at TIMESTAMP,
reviewed_by UUID,
decision TEXT,
decision_date TIMESTAMP,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
);
-- Appeals Indexes
CREATE INDEX IF NOT EXISTS idx_appeals_application_id ON appeals(application_id);
CREATE INDEX IF NOT EXISTS idx_appeals_appellant_did ON appeals(appellant_did);
CREATE INDEX IF NOT EXISTS idx_appeals_status ON appeals(status);
-- Review Queue Table
CREATE TABLE IF NOT EXISTS review_queue (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
application_id UUID NOT NULL,
application_type VARCHAR(50) NOT NULL,
risk_band VARCHAR(50) NOT NULL,
risk_score DECIMAL(3, 2),
assigned_to UUID,
priority INTEGER DEFAULT 0,
status VARCHAR(50) NOT NULL DEFAULT 'pending',
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
);
-- Review Queue Indexes
CREATE INDEX IF NOT EXISTS idx_review_queue_application_id ON review_queue(application_id);
CREATE INDEX IF NOT EXISTS idx_review_queue_risk_band ON review_queue(risk_band);
CREATE INDEX IF NOT EXISTS idx_review_queue_assigned_to ON review_queue(assigned_to);
CREATE INDEX IF NOT EXISTS idx_review_queue_status ON review_queue(status);
CREATE INDEX IF NOT EXISTS idx_review_queue_priority ON review_queue(priority);
-- Review Actions Audit Table
CREATE TABLE IF NOT EXISTS review_actions_audit (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
application_id UUID NOT NULL,
reviewer_id UUID NOT NULL,
action VARCHAR(50) NOT NULL,
decision VARCHAR(50),
justification TEXT,
risk_assessment JSONB,
metadata JSONB,
performed_at TIMESTAMP NOT NULL DEFAULT NOW()
);
-- Review Actions Audit Indexes
CREATE INDEX IF NOT EXISTS idx_review_actions_application_id ON review_actions_audit(application_id);
CREATE INDEX IF NOT EXISTS idx_review_actions_reviewer_id ON review_actions_audit(reviewer_id);
CREATE INDEX IF NOT EXISTS idx_review_actions_performed_at ON review_actions_audit(performed_at);