Skip to main content

Database Schema

This document provides a comprehensive overview of the Rahat database schema, organized by modules and their relationships.

Overview

The Rahat database uses PostgreSQL as the primary database with Prisma as the ORM. The schema is organized into several modules:

  • User Management - Authentication, roles, and user profiles
  • Beneficiary Management - Beneficiary data and grouping
  • Project Management - Project configuration and relationships
  • Transaction Management - Vendor and transaction tracking
  • Grievance System - Issue tracking and resolution
  • Settings & Configuration - System-wide settings
  • Offramp Services - Crypto-to-fiat conversion

Database Configuration

-- Database: PostgreSQL
-- ORM: Prisma
-- Binary Targets: native, linux-musl-openssl-3.0.x

Module: User Management

Core User Tables

tbl_users (User)

The central user table containing basic user information.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
uuidString (UUID)Unique identifier
nameString?User's full name
genderGender enumUser's gender (MALE, FEMALE, OTHER, UNKNOWN)
emailString?Email address
phoneString?Phone number
walletString?Wallet address
extrasJsonB?Additional user data
notesText?User notes
sessionIdString?Current session identifier
createdAtDateTimeRecord creation timestamp
updatedAtDateTime?Last update timestamp
deletedAtDateTime?Soft delete timestamp
createdByString?Creator reference
updatedByString?Last updater reference

tbl_auth_roles (Role)

Defines system roles and permissions.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
nameString (Unique)Role name
isSystemBooleanWhether it's a system role
expiryDateTime?Role expiration date
createdAtDateTimeRecord creation timestamp
updatedAtDateTime?Last update timestamp
createdByInt?Creator reference
updatedByInt?Last updater reference

tbl_auth_permissions (Permission)

Defines specific permissions for roles.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
roleIdInt (FK)Reference to Role
actionStringPermission action
subjectStringPermission subject
invertedBooleanWhether permission is inverted
conditionsJsonB?Permission conditions
reasonText?Permission reason
createdAtDateTimeRecord creation timestamp
updatedAtDateTime?Last update timestamp

tbl_users_roles (UserRole)

Many-to-many relationship between users and roles.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
userIdInt (FK)Reference to User
roleIdInt (FK)Reference to Role
expiryDateTime?Role assignment expiration
createdAtDateTimeRecord creation timestamp
createdByInt?Creator reference

Constraints:

  • Unique constraint on [userId, roleId]

Authentication Tables

tbl_auth (Auth)

Stores authentication methods for users.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
userIdInt (FK)Reference to User
serviceService enumAuthentication service type
serviceIdStringService-specific identifier
detailsJsonB?Service-specific details
challengeString?Authentication challenge
falseAttemptsIntFailed login attempts
isLockedBooleanWhether account is locked
lockedOnAtDateTime?Lock timestamp
lastLoginAtDateTime?Last successful login
createdAtDateTimeRecord creation timestamp
updatedAtDateTime?Last update timestamp

Constraints:

  • Unique constraint on [service, serviceId]

tbl_auth_sessions (AuthSession)

Tracks user sessions.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
clientIdStringClient identifier
sessionIdString (UUID)Unique session identifier
authIdInt (FK)Reference to Auth
ipString?Client IP address
detailsJsonB?Session details
userAgentString?Client user agent
createdAtDateTimeRecord creation timestamp

Signup Management

tbl_users_signups (Signup)

Manages user registration requests.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
uuidString (UUID)Unique identifier
userIdentifierString?User identifier
dataJsonB?Registration data
statusSignupStatusRegistration status
rejectedReasonString?Rejection reason
approvedByInt (FK)?Approver reference
approvedAtDateTime?Approval timestamp
createdAtDateTimeRecord creation timestamp
updatedAtDateTime?Last update timestamp

Enums

Gender

enum Gender {
MALE
FEMALE
OTHER
UNKNOWN
}

Service

enum Service {
EMAIL
PHONE
WALLET
GOOGLE
APPLE
FACEBOOK
TWITTER
GITHUB
LINKEDIN
}

SignupStatus

enum SignupStatus {
PENDING
APPROVED
FAILED
REJECTED
}

Module: Beneficiary Management

Core Beneficiary Tables

tbl_beneficiaries (Beneficiary)

Central table for beneficiary information.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
uuidString (UUID)Unique identifier
genderGenderBeneficiary gender
walletAddressString (Unique)Blockchain wallet address
birthDateDateTime?Date of birth
ageInt?Calculated age
locationString?Geographic location
latitudeFloat?GPS latitude
longitudeFloat?GPS longitude
extrasJsonB?Additional beneficiary data
notesString?Beneficiary notes
bankedStatusBankedStatusBanking status
internetStatusInternetStatusInternet access status
phoneStatusPhoneStatusPhone ownership status
isVerifiedBooleanVerification status
createdAtDateTimeRecord creation timestamp
updatedAtDateTime?Last update timestamp
deletedAtDateTime?Soft delete timestamp

tbl_beneficiaries_pii (BeneficiaryPii)

Stores personally identifiable information for beneficiaries.

FieldTypeDescription
beneficiaryIdInt (FK, Unique)Reference to Beneficiary
nameString?Full name
phoneString (Unique)Phone number
emailString?Email address
extrasJsonB?Additional PII data

Beneficiary Grouping

tbl_beneficiaries_group (BeneficiaryGroup)

Defines beneficiary groups for organizational purposes.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
uuidString (UUID)Unique identifier
nameString (Unique)Group name
groupPurposeGroupPurpose?Purpose of the group
createdAtDateTimeRecord creation timestamp
updatedAtDateTime?Last update timestamp
deletedAtDateTime?Soft delete timestamp

tbl_grouped_beneficiaries (GroupedBeneficiaries)

Many-to-many relationship between beneficiaries and groups.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
uuidString (UUID)Unique identifier
beneficiaryGroupIdString (UUID, FK)Reference to BeneficiaryGroup
beneficiaryIdString (UUID, FK)Reference to Beneficiary
createdAtDateTimeRecord creation timestamp
updatedAtDateTimeLast update timestamp
deletedAtDateTime?Soft delete timestamp

Constraints:

  • Unique constraint on [beneficiaryGroupId, beneficiaryId]

Project Relationships

tbl_beneficiaries_projects (BeneficiaryProject)

Links beneficiaries to projects.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
uuidString (UUID)Unique identifier
projectIdString (UUID, FK)Reference to Project
beneficiaryIdString (UUID, FK)Reference to Beneficiary
createdAtDateTimeRecord creation timestamp
updatedAtDateTimeLast update timestamp
deletedAtDateTime?Soft delete timestamp

Constraints:

  • Unique constraint on [projectId, beneficiaryId]

tbl_beneficiaries_gorup_projects (BeneficiaryGroupProject)

Links beneficiary groups to projects.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
uuidString (UUID)Unique identifier
projectIdString (UUID, FK)Reference to Project
beneficiaryGroupIdString (UUID, FK)Reference to BeneficiaryGroup
createdAtDateTimeRecord creation timestamp
updatedAtDateTimeLast update timestamp
deletedAtDateTime?Soft delete timestamp

Constraints:

  • Unique constraint on [projectId, beneficiaryGroupId]

Enums

BankedStatus

enum BankedStatus {
UNKNOWN
UNBANKED
BANKED
UNDER_BANKED
}

InternetStatus

enum InternetStatus {
UNKNOWN
NO_INTERNET
HOME_INTERNET
MOBILE_INTERNET
}

PhoneStatus

enum PhoneStatus {
UNKNOWN
NO_PHONE
FEATURE_PHONE
SMART_PHONE
}

GroupPurpose

enum GroupPurpose {
BANK_TRANSFER
MOBILE_MONEY
COMMUNICATION
}

Module: Project Management

Core Project Table

tbl_projects (Project)

Defines projects in the Rahat ecosystem.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
uuidString (UUID)Unique identifier
nameStringProject name
descriptionString?Project description
statusProjectStatusProject status
typeStringProject type
contractAddressString?Smart contract address
extrasJsonB?Additional project data
createdAtDateTimeRecord creation timestamp
updatedAtDateTime?Last update timestamp
deletedAtDateTime?Soft delete timestamp

Enums

ProjectStatus

enum ProjectStatus {
NOT_READY
ACTIVE
CLOSED
}

Module: Transaction Management

Vendor Management

tbl_vendors (Vendors)

Stores vendor information.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
uuidString (UUID)Unique identifier
nameStringVendor name
emailString?Vendor email
phoneString?Vendor phone
locationString?Vendor location
walletString?Vendor wallet address
extrasJsonB?Additional vendor data
createdAtDateTimeRecord creation timestamp
updatedAtDateTime?Last update timestamp
deletedAtDateTime?Soft delete timestamp

tbl_projects_vendors (ProjectVendors)

Links vendors to projects.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
projectIdString (UUID, FK)Reference to Project
vendorIdString (FK)Reference to User (vendor)
createdAtDateTimeRecord creation timestamp
updatedAtDateTime?Last update timestamp
deletedAtDateTime?Soft delete timestamp
extrasJsonB?Additional relationship data

Constraints:

  • Unique constraint on [projectId, vendorId]

Transaction Tracking

tbl_transactions (Transactions)

Tracks financial transactions.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
uuidString (UUID)Unique identifier
projectIdString (UUID)Reference to Project
beneficiaryIdString (UUID)Reference to Beneficiary
vendorIdString (UUID)Reference to Vendor
amountFloatTransaction amount
currencyStringCurrency code
statusTransactionStatusTransaction status
extrasJsonB?Additional transaction data
createdAtDateTimeRecord creation timestamp
updatedAtDateTime?Last update timestamp
deletedAtDateTime?Soft delete timestamp

Enums

TransactionStatus

enum TransactionStatus {
PENDING
APPROVED
REJECTED
FAILED
}

Module: Grievance System

Grievance Management

tbl_grievances (Grievance)

Tracks user grievances and support requests.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
uuidString (UUID)Unique identifier
reportedByStringReporter name
reporterUserIdInt (FK)Reference to User
reporterContactStringReporter contact information
titleStringGrievance title
typeGrievanceTypeType of grievance
projectIdString (UUID, FK)Reference to Project
descriptionStringDetailed description
statusGrievanceStatusCurrent status
createdAtDateTimeRecord creation timestamp
updatedAtDateTimeLast update timestamp
deletedAtDateTime?Soft delete timestamp

Enums

GrievanceStatus

enum GrievanceStatus {
NEW
UNDER_REVIEW
RESOLVED
CLOSED
}

GrievanceType

enum GrievanceType {
TECHNICAL
NON_TECHNICAL
OTHER
}

Module: Settings & Configuration

System Settings

tbl_settings (Setting)

Stores system-wide configuration settings.

FieldTypeDescription
nameString (PK)Setting name
valueJsonSetting value
dataTypeSettingDataTypeData type of the value
requiredFieldsString[]Required field names
isReadOnlyBooleanWhether setting is read-only
isPrivateBooleanWhether setting is private

Authentication Apps

tbl_auth_apps (AuthApp)

Stores authentication application configurations.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
uuidString (UUID)Unique identifier
addressString (Unique)App address
nameStringApp name
descriptionString?App description
nonceMessageString?Nonce message for authentication
createdByString?Creator reference
createdAtDateTimeRecord creation timestamp
updatedAtDateTime?Last update timestamp
deletedAtDateTime?Soft delete timestamp

Enums

SettingDataType

enum SettingDataType {
STRING
NUMBER
BOOLEAN
OBJECT
}

TokenDataType

enum TokenDataType {
IMPORTED
CREATED
}

Module: Statistics

Statistics Storage

tbl_stats (Stats)

Stores system statistics and metrics.

FieldTypeDescription
nameString (PK)Statistic name
dataJsonStatistic data
groupString?Statistic group
createdAtDateTimeRecord creation timestamp
updatedAtDateTime?Last update timestamp

Module: Token Management

Token Configuration

tbl_tokens (Token)

Stores token configurations for different blockchains.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
uuidString (UUID)Unique identifier
nameStringToken name
symbolString (Unique)Token symbol
descriptionString?Token description
decimalsIntToken decimal places
initialSupplyIntInitial token supply
fromBlockInt (Unique)Starting block number
contractAddressString (Unique)Smart contract address
transactionHashString (Unique)?Deployment transaction hash
typeTokenDataTypeToken type
createdAtDateTimeRecord creation timestamp
updatedAtDateTime?Last update timestamp
createdByInt?Creator reference
updatedByInt?Last updater reference

Module: Offramp Services

Offramp Provider Management

tbl_offramp_providers (OfframpProvider)

Stores offramp service provider configurations.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
uuidString (UUID)Unique identifier
nameString (Unique)Provider name
descriptionString?Provider description
configJsonBProvider configuration
extrasJsonB?Additional provider data
createdAtDateTimeRecord creation timestamp
updatedAtDateTime?Last update timestamp
deletedAtDateTime?Soft delete timestamp
createdByInt?Creator reference
updatedByInt?Last updater reference

Offramp Request Management

tbl_offramps (OfframpRequest)

Tracks offramp conversion requests.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
uuidString (UUID)Unique identifier
chainStringBlockchain network
tokenStringToken symbol
senderAddressStringSender wallet address
amountFloatConversion amount
requestIdString (Unique)?External request ID
escrowAddressString?Escrow contract address
statusOfframpStatusRequest status
extrasJsonB?Additional request data
createdAtDateTimeRecord creation timestamp
updatedAtDateTime?Last update timestamp
deletedAtDateTime?Soft delete timestamp
createdByInt?Creator reference
updatedByInt?Last updater reference

tbl_offramp_transactions (OfframpTransaction)

Tracks offramp transaction details.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
uuidString (UUID)Unique identifier
requestIdString (Unique, FK)Reference to OfframpRequest
txHashStringTransaction hash
walletIdString?Wallet identifier
customerKeyString?Customer key
chainString?Blockchain network
tokenString?Token symbol
referenceIdString?External reference ID
statusOfframpStatusTransaction status
extrasJsonB?Additional transaction data
createdAtDateTimeRecord creation timestamp
updatedAtDateTime?Last update timestamp
deletedAtDateTime?Soft delete timestamp
createdByInt?Creator reference
updatedByInt?Last updater reference

Enums

OfframpStatus

enum OfframpStatus {
PENDING
PROCESSING
COMPLETED
FAILED
}

Temporary Storage Tables

Temporary Beneficiary Management

tbl_temp_beneficiaries (TempBeneficiary)

Temporary storage for beneficiary data during import processes.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
uuidString (UUID)Unique identifier
firstNameStringFirst name
lastNameStringLast name
govtIDNumberString?Government ID number
genderGenderGender
birthDateDateTime?Date of birth
walletAddressStringWallet address
phoneString?Phone number
emailString?Email address
archivedBooleanArchive status
locationString?Location
latitudeFloat?GPS latitude
longitudeFloat?GPS longitude
notesString?Notes
bankedStatusBankedStatusBanking status
internetStatusInternetStatusInternet status
phoneStatusPhoneStatusPhone status
extrasJsonB?Additional data
createdAtDateTimeRecord creation timestamp
updatedAtDateTime?Last update timestamp
deletedAtDateTime?Soft delete timestamp

tbl_temp_group (TempGroup)

Temporary storage for beneficiary groups.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
uuidString (UUID)Unique identifier
nameString (Unique)Group name
createdAtDateTimeRecord creation timestamp

tbl_temp_beneficiary_group (TempBeneficiaryGroup)

Temporary many-to-many relationship between temp beneficiaries and groups.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
uuidString (UUID)Unique identifier
tempGroupUIDString (UUID, FK)Reference to TempGroup
tempBenefUIDString (UUID, FK)Reference to TempBeneficiary
createdAtDateTimeRecord creation timestamp

Constraints:

  • Unique constraint on [tempGroupUID, tempBenefUID]

Kobo Integration

tbl_kobo_beneficiaries (KoboBeneficiary)

Stores beneficiary data from Kobo form submissions.

FieldTypeDescription
idInt (PK)Auto-incrementing primary key
uuidString (UUID)Unique identifier
nameStringBeneficiary name
genderGenderGender
typeKoboBeneficiaryTypeBeneficiary type
statusKoboBeneficiaryStatusProcessing status
phoneStringPhone number
ageInt?Age
emailString?Email address
walletString?Wallet address
leadInterestsString[]Lead interests
extrasJsonB?Additional data
createdAtDateTimeRecord creation timestamp
updatedAtDateTime?Last update timestamp
deletedAtDateTime?Soft delete timestamp

Enums

KoboBeneficiaryType

enum KoboBeneficiaryType {
SALE
LEAD
HOME_VISIT
}

KoboBeneficiaryStatus

enum KoboBeneficiaryStatus {
PENDING
FAILED
SUCCESS
}

Database Relationships

Key Relationships

  1. User Management

    • UserAuth (One-to-Many)
    • UserUserRole (One-to-Many)
    • RolePermission (One-to-Many)
    • UserSignup (One-to-Many)
  2. Beneficiary Management

    • BeneficiaryBeneficiaryPii (One-to-One)
    • BeneficiaryBeneficiaryProject (One-to-Many)
    • BeneficiaryGroupGroupedBeneficiaries (One-to-Many)
    • ProjectBeneficiaryProject (One-to-Many)
  3. Project Management

    • ProjectProjectVendors (One-to-Many)
    • ProjectBeneficiaryGroupProject (One-to-Many)
  4. Transaction Management

    • ProjectTransactions (One-to-Many)
    • VendorsProjectVendors (One-to-Many)
  5. Grievance System

    • UserGrievance (One-to-Many)
    • ProjectGrievance (One-to-Many)
  6. Offramp Services

    • OfframpRequestOfframpTransaction (One-to-One)

Indexes

The database includes several indexes for performance optimization:

  • Soft Delete Indexes: Most tables have indexes on deletedAt for efficient soft delete queries
  • Foreign Key Indexes: All foreign key relationships are indexed
  • Unique Constraints: Enforced through database constraints
  • Composite Indexes: For many-to-many relationships

Data Types

PostgreSQL Specific Types

  • JsonB: Used for flexible JSON data storage
  • UUID: For unique identifiers
  • Text: For large text fields
  • VarChar: For string fields with length limits

Prisma Types

  • Int: Integer fields
  • String: String fields
  • Float: Decimal numbers
  • Boolean: Boolean values
  • DateTime: Timestamp fields
  • Json: JSON data (stored as JsonB in PostgreSQL)

Best Practices

  1. Soft Deletes: Most tables implement soft delete functionality using deletedAt timestamps
  2. Audit Trails: Tables include createdAt, updatedAt, createdBy, and updatedBy fields
  3. UUID Usage: Primary identifiers use UUIDs for security and scalability
  4. JSON Flexibility: Extras fields use JsonB for flexible data storage
  5. Enum Constraints: Database enums ensure data integrity
  6. Indexing Strategy: Strategic indexing for query performance

Migration Notes

When working with this schema:

  1. Prisma Migrations: Use prisma migrate commands for schema changes
  2. Data Seeding: Use Prisma seed scripts for initial data
  3. Environment Variables: Ensure DATABASE_URL is properly configured
  4. Binary Targets: Schema supports multiple deployment targets
  5. Backup Strategy: Regular backups recommended for production deployments