generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("DATABASE_URL") } /// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info. model asset_attachments { id BigInt @id @default(autoincrement()) asset_id BigInt attachment_type String @default("DOCUMENT") @db.VarChar(50) file_name String @db.VarChar(255) file_path String @db.VarChar(500) file_type String? @db.VarChar(100) file_size Int? uploaded_by BigInt? amc_contract_id BigInt? service_visit_id BigInt? insurance_id BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) asset_amc_contracts asset_amc_contracts? @relation(fields: [amc_contract_id], references: [id], onDelete: Cascade, onUpdate: NoAction) asset_insurance_policies asset_insurance_policies? @relation(fields: [insurance_id], references: [id], onDelete: Cascade, onUpdate: NoAction) asset_service_visits asset_service_visits? @relation(fields: [service_visit_id], references: [id], onDelete: Cascade, onUpdate: NoAction) assets assets @relation(fields: [asset_id], references: [id], onDelete: Cascade, onUpdate: NoAction) users users? @relation(fields: [uploaded_by], references: [id], onUpdate: NoAction) } model asset_amc_contracts { id BigInt @id @default(autoincrement()) asset_id BigInt vendor_id BigInt contract_no String? @db.VarChar(100) contract_type String @default("COMPREHENSIVE") @db.VarChar(30) start_date DateTime @db.Date end_date DateTime @db.Date renewal_date DateTime? @db.Date annual_cost Decimal @default(0) @db.Decimal(12, 2) payment_frequency String @default("ANNUAL") @db.VarChar(20) service_frequency String? @db.VarChar(20) visits_per_year Int? contact_person String? @db.VarChar(150) contact_phone String? @db.VarChar(15) contact_email String? @db.VarChar(150) scope_of_work String? exclusions String? remarks String? is_active Boolean @default(true) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) deleted_at DateTime? @db.Timestamptz(6) asset_attachments asset_attachments[] assets assets @relation(fields: [asset_id], references: [id], onDelete: Cascade, onUpdate: NoAction) users_asset_amc_contracts_created_byTousers users? @relation("asset_amc_contracts_created_byTousers", fields: [created_by], references: [id], onUpdate: NoAction) users_asset_amc_contracts_updated_byTousers users? @relation("asset_amc_contracts_updated_byTousers", fields: [updated_by], references: [id], onUpdate: NoAction) vendors vendors @relation(fields: [vendor_id], references: [id], onUpdate: NoAction) asset_service_visits asset_service_visits[] @@index([asset_id], map: "idx_amc_asset_id") @@index([vendor_id], map: "idx_amc_vendor_id") } model asset_insurance_policies { id BigInt @id @default(autoincrement()) asset_id BigInt policy_no String @db.VarChar(100) insurer_name String @db.VarChar(200) insurer_branch String? @db.VarChar(150) insurer_contact String? @db.VarChar(150) insurer_phone String? @db.VarChar(15) insurer_email String? @db.VarChar(150) policy_type String @default("FIRE_AND_ALLIED") @db.VarChar(50) sum_insured Decimal @default(0) @db.Decimal(15, 2) annual_premium Decimal @default(0) @db.Decimal(12, 2) policy_start_date DateTime @db.Date policy_end_date DateTime @db.Date renewal_date DateTime? @db.Date is_auto_renewal Boolean @default(false) premium_paid Boolean @default(false) premium_paid_date DateTime? @db.Date remarks String? is_active Boolean @default(true) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) deleted_at DateTime? @db.Timestamptz(6) asset_attachments asset_attachments[] assets assets @relation(fields: [asset_id], references: [id], onDelete: Cascade, onUpdate: NoAction) users_asset_insurance_policies_created_byTousers users? @relation("asset_insurance_policies_created_byTousers", fields: [created_by], references: [id], onUpdate: NoAction) users_asset_insurance_policies_updated_byTousers users? @relation("asset_insurance_policies_updated_byTousers", fields: [updated_by], references: [id], onUpdate: NoAction) @@index([asset_id], map: "idx_insurance_asset_id") } model asset_service_visits { id BigInt @id @default(autoincrement()) asset_id BigInt amc_contract_id BigInt? visit_type String @db.VarChar(30) visit_date DateTime @db.Date complaint_no String? @db.VarChar(50) complaint_date DateTime? @db.Date complaint_desc String? engineer_name String? @db.VarChar(150) engineer_phone String? @db.VarChar(15) vendor_id BigInt? work_done String? parts_replaced String? next_service_date DateTime? @db.Date status String @default("COMPLETED") @db.VarChar(20) downtime_hours Decimal? @default(0) @db.Decimal(6, 2) service_cost Decimal? @default(0) @db.Decimal(12, 2) is_under_amc Boolean @default(false) asset_condition_after String? @db.VarChar(20) remarks String? created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) deleted_at DateTime? @db.Timestamptz(6) asset_attachments asset_attachments[] asset_amc_contracts asset_amc_contracts? @relation(fields: [amc_contract_id], references: [id], onUpdate: NoAction) assets assets @relation(fields: [asset_id], references: [id], onDelete: Cascade, onUpdate: NoAction) users_asset_service_visits_created_byTousers users? @relation("asset_service_visits_created_byTousers", fields: [created_by], references: [id], onUpdate: NoAction) users_asset_service_visits_updated_byTousers users? @relation("asset_service_visits_updated_byTousers", fields: [updated_by], references: [id], onUpdate: NoAction) vendors vendors? @relation(fields: [vendor_id], references: [id], onUpdate: NoAction) @@index([asset_id], map: "idx_service_asset_id") @@index([amc_contract_id], map: "idx_service_amc_id") } /// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info. model asset_transfers { id BigInt @id @default(autoincrement()) asset_id BigInt transfer_date DateTime @db.Date from_location_id BigInt? to_location_id BigInt? from_department_id BigInt? to_department_id BigInt? from_user_id BigInt? to_user_id BigInt? reason String? transferred_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) assets assets @relation(fields: [asset_id], references: [id], onDelete: Cascade, onUpdate: NoAction) departments_asset_transfers_from_department_idTodepartments departments? @relation("asset_transfers_from_department_idTodepartments", fields: [from_department_id], references: [id], onUpdate: NoAction) from_location locations? @relation("TransferFromLocation", fields: [from_location_id], references: [id], onUpdate: NoAction) users_asset_transfers_from_user_idTousers users? @relation("asset_transfers_from_user_idTousers", fields: [from_user_id], references: [id], onUpdate: NoAction) departments_asset_transfers_to_department_idTodepartments departments? @relation("asset_transfers_to_department_idTodepartments", fields: [to_department_id], references: [id], onUpdate: NoAction) to_location locations? @relation("TransferToLocation", fields: [to_location_id], references: [id], onUpdate: NoAction) users_asset_transfers_to_user_idTousers users? @relation("asset_transfers_to_user_idTousers", fields: [to_user_id], references: [id], onUpdate: NoAction) users_asset_transfers_transferred_byTousers users? @relation("asset_transfers_transferred_byTousers", fields: [transferred_by], references: [id], onUpdate: NoAction) @@index([asset_id], map: "idx_asset_transfers_asset_id") } /// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info. model assets { id BigInt @id @default(autoincrement()) asset_code String @unique @db.VarChar(30) asset_name String @db.VarChar(200) item_category_id BigInt item_subcategory_id BigInt? brand_model String? @db.VarChar(200) manufacturer String? @db.VarChar(200) serial_number String? @db.VarChar(100) part_number String? @db.VarChar(100) location_id BigInt department_id BigInt? location_detail String? @db.VarChar(200) assigned_to_user_id BigInt? maintenance_incharge_user_id BigInt? maintenance_frequency_in_days Int? maintenance_checklist_json Json? @db.JsonB vendor_id BigInt? po_id BigInt? grn_id BigInt? grn_item_id BigInt? commencement_date DateTime? @db.Date purchase_date DateTime? @db.Date purchase_cost Decimal @default(0) @db.Decimal(15, 4) useful_life_years Int? depreciation_method String? @db.VarChar(20) depreciation_rate Decimal? @db.Decimal(8, 4) salvage_value Decimal? @default(0) @db.Decimal(15, 4) salvage_percentage Decimal? @default(0) @db.Decimal(8, 4) warranty_expiry_date DateTime? @db.Date condition String @default("NEW") @db.VarChar(20) status String @default("IN_USE") @db.VarChar(30) qr_code_value String? @db.VarChar(100) disposal_date DateTime? @db.Date disposal_reason String? disposal_value Decimal? @db.Decimal(15, 4) remarks String? is_active Boolean @default(true) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) deleted_at DateTime? @db.Timestamptz(6) asset_amc_contracts asset_amc_contracts[] asset_attachments asset_attachments[] asset_insurance_policies asset_insurance_policies[] asset_maintenance_logs asset_maintenance_logs[] asset_service_visits asset_service_visits[] asset_transfers asset_transfers[] item_categories item_categories @relation(fields: [item_category_id], references: [id], onUpdate: NoAction) item_subcategories item_subcategories? @relation(fields: [item_subcategory_id], references: [id], onUpdate: NoAction) users_assets_assigned_to_user_idTousers users? @relation("assets_assigned_to_user_idTousers", fields: [assigned_to_user_id], references: [id], onUpdate: NoAction) users_assets_maintenance_incharge_idTousers users? @relation("assets_maintenance_incharge_idTousers", fields: [maintenance_incharge_user_id], references: [id], onUpdate: NoAction) users_assets_created_byTousers users? @relation("assets_created_byTousers", fields: [created_by], references: [id], onUpdate: NoAction) departments departments? @relation(fields: [department_id], references: [id], onUpdate: NoAction) grn grn? @relation(fields: [grn_id], references: [id], onUpdate: NoAction) grn_items grn_items? @relation(fields: [grn_item_id], references: [id], onUpdate: NoAction) location locations @relation("AssetLocation", fields: [location_id], references: [id], onUpdate: NoAction) purchase_orders purchase_orders? @relation(fields: [po_id], references: [id], onUpdate: NoAction) users_assets_updated_byTousers users? @relation("assets_updated_byTousers", fields: [updated_by], references: [id], onUpdate: NoAction) vendors_assets_vendor_idTovendors vendors? @relation("assets_vendor_idTovendors", fields: [vendor_id], references: [id], onUpdate: NoAction) @@index([item_category_id], map: "idx_assets_item_category_id") @@index([item_subcategory_id], map: "idx_assets_item_subcategory_id") @@index([department_id], map: "idx_assets_dept_id") @@index([location_id], map: "idx_assets_location_id") @@index([maintenance_incharge_user_id], map: "idx_assets_maintenance_incharge") } model asset_maintenance_logs { id BigInt @id @default(autoincrement()) asset_id BigInt performed_by BigInt? performed_date DateTime @db.Date next_due_date DateTime? @db.Date checklist_json Json? @db.JsonB remarks String? created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) deleted_at DateTime? @db.Timestamptz(6) assets assets @relation(fields: [asset_id], references: [id], onDelete: Cascade, onUpdate: NoAction) users_asset_maintenance_logs_performed_byTousers users? @relation("asset_maintenance_logs_performed_byTousers", fields: [performed_by], references: [id], onUpdate: NoAction) users_asset_maintenance_logs_created_byTousers users? @relation("asset_maintenance_logs_created_byTousers", fields: [created_by], references: [id], onUpdate: NoAction) @@index([asset_id], map: "idx_asset_maintenance_logs_asset_id") @@index([performed_by], map: "idx_asset_maintenance_logs_performed_by") } model audit_logs { id BigInt @id @default(autoincrement()) table_name String @db.VarChar(100) record_id BigInt action String @db.VarChar(50) old_value Json? new_value Json? performed_by BigInt? request_id String? @db.VarChar(50) performed_at DateTime @default(now()) @db.Timestamptz(6) users users? @relation(fields: [performed_by], references: [id], onUpdate: NoAction) @@index([performed_at], map: "idx_audit_logs_performed_at") @@index([performed_by], map: "idx_audit_logs_performed_by") @@index([table_name, record_id], map: "idx_audit_logs_table_record") } /// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info. model delivery_terms { id BigInt @id @default(autoincrement()) code String @unique @db.VarChar(30) name String @db.VarChar(100) description String? is_active Boolean @default(true) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) deleted_at DateTime? @db.Timestamptz(6) users_delivery_terms_created_byTousers users? @relation("delivery_terms_created_byTousers", fields: [created_by], references: [id], onUpdate: NoAction) users_delivery_terms_updated_byTousers users? @relation("delivery_terms_updated_byTousers", fields: [updated_by], references: [id], onUpdate: NoAction) purchase_orders purchase_orders[] } model departments { id BigInt @id @default(autoincrement()) name String @unique @db.VarChar(100) is_active Boolean @default(true) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) deleted_at DateTime? @db.Timestamptz(6) asset_transfers_asset_transfers_from_department_idTodepartments asset_transfers[] @relation("asset_transfers_from_department_idTodepartments") asset_transfers_asset_transfers_to_department_idTodepartments asset_transfers[] @relation("asset_transfers_to_department_idTodepartments") assets assets[] users users[] } model designations { id BigInt @id @default(autoincrement()) name String @unique @db.VarChar(100) is_active Boolean @default(true) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) deleted_at DateTime? @db.Timestamptz(6) users users[] } model document_series { id BigInt @id @default(autoincrement()) code String @unique @db.VarChar(50) prefix String @db.VarChar(30) current_number Int @default(0) padding Int @default(5) description String? @db.VarChar(200) is_active Boolean @default(true) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) users_document_series_created_byTousers users? @relation("document_series_created_byTousers", fields: [created_by], references: [id], onUpdate: NoAction) users_document_series_updated_byTousers users? @relation("document_series_updated_byTousers", fields: [updated_by], references: [id], onUpdate: NoAction) } /// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info. model grn { id BigInt @id @default(autoincrement()) grn_number String @unique @db.VarChar(30) grn_date DateTime @db.Date po_id BigInt vendor_id BigInt location_id BigInt vendor_invoice_no String? @db.VarChar(100) vendor_invoice_date DateTime? @db.Date vendor_invoice_amount Decimal? @db.Decimal(15, 4) vehicle_no String? @db.VarChar(30) lr_no String? @db.VarChar(50) lr_date DateTime? @db.Date status String @default("POSTED") @db.VarChar(20) cancellation_reason String? cancelled_by BigInt? cancelled_at DateTime? @db.Timestamptz(6) received_by BigInt? quality_checked_by BigInt? remarks String? is_active Boolean @default(true) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) deleted_at DateTime? @db.Timestamptz(6) assets assets[] users_grn_cancelled_byTousers users? @relation("grn_cancelled_byTousers", fields: [cancelled_by], references: [id], onUpdate: NoAction) users_grn_created_byTousers users? @relation("grn_created_byTousers", fields: [created_by], references: [id], onUpdate: NoAction) purchase_orders purchase_orders @relation(fields: [po_id], references: [id], onUpdate: NoAction) users_grn_quality_checked_byTousers users? @relation("grn_quality_checked_byTousers", fields: [quality_checked_by], references: [id], onUpdate: NoAction) users_grn_received_byTousers users? @relation("grn_received_byTousers", fields: [received_by], references: [id], onUpdate: NoAction) users_grn_updated_byTousers users? @relation("grn_updated_byTousers", fields: [updated_by], references: [id], onUpdate: NoAction) vendors vendors @relation(fields: [vendor_id], references: [id], onUpdate: NoAction) location locations @relation("GRNLocation", fields: [location_id], references: [id], onUpdate: NoAction) grn_attachments grn_attachments[] grn_items grn_items[] @@index([grn_date], map: "idx_grn_grn_date") @@index([po_id], map: "idx_grn_po_id") @@index([vendor_id], map: "idx_grn_vendor_id") @@index([location_id], map: "idx_grn_location_id") } model grn_attachments { id BigInt @id @default(autoincrement()) grn_id BigInt file_name String @db.VarChar(255) file_path String @db.VarChar(500) file_type String? @db.VarChar(100) file_size Int? uploaded_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) grn grn @relation(fields: [grn_id], references: [id], onDelete: Cascade, onUpdate: NoAction) users users? @relation(fields: [uploaded_by], references: [id], onUpdate: NoAction) } /// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info. model grn_items { id BigInt @id @default(autoincrement()) grn_id BigInt po_item_id BigInt item_id BigInt line_no Int ordered_qty Decimal @db.Decimal(15, 4) previously_received_qty Decimal @default(0) @db.Decimal(15, 4) current_qty Decimal @db.Decimal(15, 4) accepted_qty Decimal @db.Decimal(15, 4) rejected_qty Decimal @default(0) @db.Decimal(15, 4) rejection_reason String? uom_id BigInt rate Decimal @db.Decimal(15, 4) batch_no String? @db.VarChar(100) mfg_date DateTime? @db.Date expiry_date DateTime? @db.Date storage_location String? @db.VarChar(100) remarks String? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) assets assets[] grn grn @relation(fields: [grn_id], references: [id], onDelete: Cascade, onUpdate: NoAction) items items @relation(fields: [item_id], references: [id], onUpdate: NoAction) purchase_order_items purchase_order_items @relation(fields: [po_item_id], references: [id], onUpdate: NoAction) uom uom @relation(fields: [uom_id], references: [id], onUpdate: NoAction) @@unique([grn_id, line_no]) @@index([grn_id], map: "idx_grn_items_grn_id") @@index([item_id], map: "idx_grn_items_item_id") } model gst_rates { id BigInt @id @default(autoincrement()) rate_pct Decimal @unique @db.Decimal(5, 2) description String? @db.VarChar(100) is_active Boolean @default(true) created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) hsn_codes hsn_codes[] items items[] purchase_order_items purchase_order_items[] } model hsn_codes { id BigInt @id @default(autoincrement()) code String @unique @db.VarChar(20) description String? gst_rate_id BigInt? is_active Boolean @default(true) created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) gst_rates gst_rates? @relation(fields: [gst_rate_id], references: [id], onUpdate: NoAction) items items[] purchase_order_items purchase_order_items[] } model item_categories { id BigInt @id @default(autoincrement()) code String @unique @db.VarChar(30) name String @db.VarChar(100) category_type String @default("STOCK") @db.VarChar(10) code_prefix String? @unique @db.VarChar(10) default_useful_life_years Int? default_depreciation_method String? @db.VarChar(20) is_active Boolean @default(true) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) deleted_at DateTime? @db.Timestamptz(6) users_item_categories_created_byTousers users? @relation("item_categories_created_byTousers", fields: [created_by], references: [id], onUpdate: NoAction) users_item_categories_updated_byTousers users? @relation("item_categories_updated_byTousers", fields: [updated_by], references: [id], onUpdate: NoAction) item_subcategories item_subcategories[] items items[] assets assets[] } model item_subcategories { id BigInt @id @default(autoincrement()) item_category_id BigInt code String @unique @db.VarChar(30) name String @db.VarChar(100) is_active Boolean @default(true) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) deleted_at DateTime? @db.Timestamptz(6) users_item_subcategories_created_byTousers users? @relation("item_subcategories_created_byTousers", fields: [created_by], references: [id], onUpdate: NoAction) item_categories item_categories @relation(fields: [item_category_id], references: [id], onUpdate: NoAction) users_item_subcategories_updated_byTousers users? @relation("item_subcategories_updated_byTousers", fields: [updated_by], references: [id], onUpdate: NoAction) items items[] assets assets[] } model items { id BigInt @id @default(autoincrement()) item_code String @unique @db.VarChar(50) item_name String @db.VarChar(200) item_category_id BigInt item_subcategory_id BigInt? uom_id BigInt hsn_code_id BigInt? gst_rate_id BigInt? is_asset_item Boolean @default(false) description String? specification String? tags Json? @db.JsonB min_order_qty Decimal? @db.Decimal(15, 4) reorder_level Decimal? @db.Decimal(15, 4) is_active Boolean @default(true) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) deleted_at DateTime? @db.Timestamptz(6) grn_items grn_items[] users_items_created_byTousers users? @relation("items_created_byTousers", fields: [created_by], references: [id], onUpdate: NoAction) gst_rates gst_rates? @relation(fields: [gst_rate_id], references: [id], onUpdate: NoAction) hsn_codes hsn_codes? @relation(fields: [hsn_code_id], references: [id], onUpdate: NoAction) item_categories item_categories @relation(fields: [item_category_id], references: [id], onUpdate: NoAction) item_subcategories item_subcategories? @relation(fields: [item_subcategory_id], references: [id], onUpdate: NoAction) uom uom @relation(fields: [uom_id], references: [id], onUpdate: NoAction) users_items_updated_byTousers users? @relation("items_updated_byTousers", fields: [updated_by], references: [id], onUpdate: NoAction) purchase_order_items purchase_order_items[] vendor_item_mapping vendor_item_mapping[] @@index([item_category_id], map: "idx_items_category") @@index([item_name(ops: raw("gin_trgm_ops"))], map: "idx_items_name_trgm", type: Gin) } model modules { id BigInt @id @default(autoincrement()) code String @unique @db.VarChar(50) name String @db.VarChar(100) parent_module_id BigInt? sort_order Int @default(0) is_active Boolean @default(true) created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) modules modules? @relation("modulesTomodules", fields: [parent_module_id], references: [id], onUpdate: NoAction) other_modules modules[] @relation("modulesTomodules") permissions permissions[] } model password_reset_tokens { id BigInt @id @default(autoincrement()) user_id BigInt token_hash String @unique @db.VarChar(64) expires_at DateTime @db.Timestamptz(6) used_at DateTime? @db.Timestamptz(6) created_at DateTime @default(now()) @db.Timestamptz(6) users users @relation(fields: [user_id], references: [id], onDelete: Cascade, onUpdate: NoAction) } model payment_terms { id BigInt @id @default(autoincrement()) code String @unique @db.VarChar(30) name String @db.VarChar(100) credit_days Int @default(0) description String? is_active Boolean @default(true) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) deleted_at DateTime? @db.Timestamptz(6) users_payment_terms_created_byTousers users? @relation("payment_terms_created_byTousers", fields: [created_by], references: [id], onUpdate: NoAction) users_payment_terms_updated_byTousers users? @relation("payment_terms_updated_byTousers", fields: [updated_by], references: [id], onUpdate: NoAction) purchase_orders purchase_orders[] vendors vendors[] } /// Default terms & conditions / notes text per document type (one active row per type). model terms_notes { id BigInt @id @default(autoincrement()) type String @unique @db.VarChar(30) notes String is_active Boolean @default(true) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) deleted_at DateTime? @db.Timestamptz(6) users_terms_notes_created_byTousers users? @relation("terms_notes_created_byTousers", fields: [created_by], references: [id], onUpdate: NoAction) users_terms_notes_updated_byTousers users? @relation("terms_notes_updated_byTousers", fields: [updated_by], references: [id], onUpdate: NoAction) } model permissions { id BigInt @id @default(autoincrement()) module_id BigInt action String @db.VarChar(50) is_active Boolean @default(true) created_at DateTime @default(now()) @db.Timestamptz(6) modules modules @relation(fields: [module_id], references: [id], onDelete: Cascade, onUpdate: NoAction) role_permissions role_permissions[] @@unique([module_id, action]) } model locations { id BigInt @id @default(autoincrement()) type String @db.VarChar(20) code String @db.VarChar(30) name String @db.VarChar(150) gstin String? @db.VarChar(15) address String? city String? @db.VarChar(100) state String? @db.VarChar(100) pincode String? @db.VarChar(10) phone String? @db.VarChar(15) location String? @db.VarChar(200) is_active Boolean @default(true) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) deleted_at DateTime? @db.Timestamptz(6) transfers_from asset_transfers[] @relation("TransferFromLocation") transfers_to asset_transfers[] @relation("TransferToLocation") assets_location assets[] @relation("AssetLocation") grn_location grn[] @relation("GRNLocation") po_billing purchase_orders[] @relation("POBillingLocation") po_shipping purchase_orders[] @relation("POShippingLocation") users_plant users[] @relation("UserPlantLocation") users_created users? @relation("locations_created_byTousers", fields: [created_by], references: [id], onUpdate: NoAction, map: "fk_locations_created_by") users_updated users? @relation("locations_updated_byTousers", fields: [updated_by], references: [id], onUpdate: NoAction, map: "fk_locations_updated_by") @@index([type], map: "idx_locations_type") } /// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info. model po_approvals { id BigInt @id @default(autoincrement()) po_id BigInt approval_level Int approver_role_id BigInt? approver_user_id BigInt? status String @default("PENDING") @db.VarChar(20) remarks String? acted_at DateTime? @db.Timestamptz(6) created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) roles roles? @relation(fields: [approver_role_id], references: [id], onUpdate: NoAction) users users? @relation(fields: [approver_user_id], references: [id], onUpdate: NoAction) purchase_orders purchase_orders @relation(fields: [po_id], references: [id], onDelete: Cascade, onUpdate: NoAction) @@index([po_id], map: "idx_po_approvals_po_id") } model po_attachments { id BigInt @id @default(autoincrement()) po_id BigInt file_name String @db.VarChar(255) file_path String @db.VarChar(500) file_type String? @db.VarChar(100) file_size Int? uploaded_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) purchase_orders purchase_orders @relation(fields: [po_id], references: [id], onDelete: Cascade, onUpdate: NoAction) users users? @relation(fields: [uploaded_by], references: [id], onUpdate: NoAction) } model purchase_order_items { id BigInt @id @default(autoincrement()) po_id BigInt item_id BigInt line_no Int ordered_qty Decimal @db.Decimal(15, 4) uom_id BigInt rate Decimal @db.Decimal(15, 4) discount_pct Decimal @default(0) @db.Decimal(5, 2) discount_amount Decimal @default(0) @db.Decimal(15, 4) gst_rate_id BigInt? taxable_amount Decimal @default(0) @db.Decimal(15, 4) tax_amount Decimal @default(0) @db.Decimal(15, 4) line_total Decimal @default(0) @db.Decimal(15, 4) received_qty Decimal @default(0) @db.Decimal(15, 4) hsn_code_id BigInt? remarks String? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) grn_items grn_items[] gst_rates gst_rates? @relation(fields: [gst_rate_id], references: [id], onUpdate: NoAction) hsn_codes hsn_codes? @relation(fields: [hsn_code_id], references: [id], onUpdate: NoAction) items items @relation(fields: [item_id], references: [id], onUpdate: NoAction) purchase_orders purchase_orders @relation(fields: [po_id], references: [id], onDelete: Cascade, onUpdate: NoAction) uom uom @relation(fields: [uom_id], references: [id], onUpdate: NoAction) @@unique([po_id, line_no]) @@index([item_id], map: "idx_po_items_item_id") @@index([po_id], map: "idx_po_items_po_id") } /// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info. model purchase_orders { id BigInt @id @default(autoincrement()) po_number String @unique @db.VarChar(30) po_date DateTime @db.Date vendor_id BigInt billing_id BigInt shipping_id BigInt payment_term_id BigInt? delivery_term_id BigInt? expected_delivery_date DateTime? @db.Date sub_total Decimal @default(0) @db.Decimal(15, 4) discount_amount Decimal @default(0) @db.Decimal(15, 4) taxable_amount Decimal @default(0) @db.Decimal(15, 4) tax_total Decimal @default(0) @db.Decimal(15, 4) cgst Decimal @default(0) @db.Decimal(15, 4) sgst Decimal @default(0) @db.Decimal(15, 4) igst Decimal @default(0) @db.Decimal(15, 4) freight_charges Decimal @default(0) @db.Decimal(15, 4) other_charges Decimal @default(0) @db.Decimal(15, 4) tds_applicable Boolean @default(false) tds_section_pct Decimal? @db.Decimal(5, 2) tds_amount Decimal @default(0) @db.Decimal(15, 4) adjustment Decimal @default(0) @db.Decimal(15, 4) grand_total Decimal @default(0) @db.Decimal(15, 4) status String @default("DRAFT") @db.VarChar(30) revision_no Int @default(0) parent_po_id BigInt? terms_and_conditions String? remarks String? reject_reason String? is_active Boolean @default(true) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) deleted_at DateTime? @db.Timestamptz(6) assets assets[] grn grn[] po_approvals po_approvals[] po_attachments po_attachments[] purchase_order_items purchase_order_items[] users_purchase_orders_created_byTousers users? @relation("purchase_orders_created_byTousers", fields: [created_by], references: [id], onUpdate: NoAction) delivery_terms delivery_terms? @relation(fields: [delivery_term_id], references: [id], onUpdate: NoAction) purchase_orders purchase_orders? @relation("purchase_ordersTopurchase_orders", fields: [parent_po_id], references: [id], onUpdate: NoAction) other_purchase_orders purchase_orders[] @relation("purchase_ordersTopurchase_orders") payment_terms payment_terms? @relation(fields: [payment_term_id], references: [id], onUpdate: NoAction) billing_location locations @relation("POBillingLocation", fields: [billing_id], references: [id], onUpdate: NoAction) shipping_location locations @relation("POShippingLocation", fields: [shipping_id], references: [id], onUpdate: NoAction) users_purchase_orders_updated_byTousers users? @relation("purchase_orders_updated_byTousers", fields: [updated_by], references: [id], onUpdate: NoAction) vendors vendors @relation(fields: [vendor_id], references: [id], onUpdate: NoAction) @@index([created_at], map: "idx_po_created_at") @@index([po_date], map: "idx_po_po_date") @@index([vendor_id], map: "idx_po_vendor_id") } model refresh_tokens { id BigInt @id @default(autoincrement()) user_id BigInt token_hash String @unique @db.VarChar(64) expires_at DateTime @db.Timestamptz(6) revoked_at DateTime? @db.Timestamptz(6) created_at DateTime @default(now()) @db.Timestamptz(6) users users @relation(fields: [user_id], references: [id], onDelete: Cascade, onUpdate: NoAction) @@index([user_id], map: "idx_refresh_tokens_user_id") } model role_permissions { id BigInt @id @default(autoincrement()) role_id BigInt permission_id BigInt created_at DateTime @default(now()) @db.Timestamptz(6) permissions permissions @relation(fields: [permission_id], references: [id], onDelete: Cascade, onUpdate: NoAction) roles roles @relation(fields: [role_id], references: [id], onDelete: Cascade, onUpdate: NoAction) @@unique([role_id, permission_id]) } model user_roles { id BigInt @id @default(autoincrement()) user_id BigInt role_id BigInt created_at DateTime @default(now()) @db.Timestamptz(6) roles roles @relation(fields: [role_id], references: [id], onDelete: Restrict, onUpdate: NoAction) users users @relation(fields: [user_id], references: [id], onDelete: Cascade, onUpdate: NoAction) @@unique([user_id, role_id]) @@index([user_id], map: "idx_user_roles_user_id") @@index([role_id], map: "idx_user_roles_role_id") } model roles { id BigInt @id @default(autoincrement()) name String @unique @db.VarChar(100) description String? is_active Boolean @default(true) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) deleted_at DateTime? @db.Timestamptz(6) po_approvals po_approvals[] role_permissions role_permissions[] user_roles user_roles[] users_roles_created_byTousers users? @relation("roles_created_byTousers", fields: [created_by], references: [id], onUpdate: NoAction, map: "fk_roles_created_by") users_roles_updated_byTousers users? @relation("roles_updated_byTousers", fields: [updated_by], references: [id], onUpdate: NoAction, map: "fk_roles_updated_by") } model uom { id BigInt @id @default(autoincrement()) code String @unique @db.VarChar(20) name String @db.VarChar(100) is_active Boolean @default(true) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) deleted_at DateTime? @db.Timestamptz(6) grn_items grn_items[] items items[] purchase_order_items purchase_order_items[] users_uom_created_byTousers users? @relation("uom_created_byTousers", fields: [created_by], references: [id], onUpdate: NoAction) users_uom_updated_byTousers users? @relation("uom_updated_byTousers", fields: [updated_by], references: [id], onUpdate: NoAction) } /// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info. model users { id BigInt @id @default(autoincrement()) employee_code String @unique @db.VarChar(30) full_name String @db.VarChar(200) email String @unique @db.VarChar(200) mobile String? @db.VarChar(255) mobile_index String? @db.VarChar(64) password_hash String @db.VarChar(255) avatar_path String? @db.VarChar(500) department_id BigInt? designation_id BigInt? plant_id BigInt? reporting_to BigInt? status String @default("active") @db.VarChar(20) is_active Boolean @default(true) failed_login_attempts Int @default(0) locked_until DateTime? @db.Timestamptz(6) last_login_at DateTime? @db.Timestamptz(6) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) deleted_at DateTime? @db.Timestamptz(6) asset_attachments asset_attachments[] asset_amc_contracts_asset_amc_contracts_created_byTousers asset_amc_contracts[] @relation("asset_amc_contracts_created_byTousers") asset_amc_contracts_asset_amc_contracts_updated_byTousers asset_amc_contracts[] @relation("asset_amc_contracts_updated_byTousers") asset_insurance_policies_asset_insurance_policies_created_byTousers asset_insurance_policies[] @relation("asset_insurance_policies_created_byTousers") asset_insurance_policies_asset_insurance_policies_updated_byTousers asset_insurance_policies[] @relation("asset_insurance_policies_updated_byTousers") asset_maintenance_logs_asset_maintenance_logs_performed_byTousers asset_maintenance_logs[] @relation("asset_maintenance_logs_performed_byTousers") asset_maintenance_logs_asset_maintenance_logs_created_byTousers asset_maintenance_logs[] @relation("asset_maintenance_logs_created_byTousers") asset_service_visits_asset_service_visits_created_byTousers asset_service_visits[] @relation("asset_service_visits_created_byTousers") asset_service_visits_asset_service_visits_updated_byTousers asset_service_visits[] @relation("asset_service_visits_updated_byTousers") asset_transfers_asset_transfers_from_user_idTousers asset_transfers[] @relation("asset_transfers_from_user_idTousers") asset_transfers_asset_transfers_to_user_idTousers asset_transfers[] @relation("asset_transfers_to_user_idTousers") asset_transfers_asset_transfers_transferred_byTousers asset_transfers[] @relation("asset_transfers_transferred_byTousers") assets_assets_assigned_to_user_idTousers assets[] @relation("assets_assigned_to_user_idTousers") assets_assets_maintenance_incharge_idTousers assets[] @relation("assets_maintenance_incharge_idTousers") assets_assets_created_byTousers assets[] @relation("assets_created_byTousers") assets_assets_updated_byTousers assets[] @relation("assets_updated_byTousers") audit_logs audit_logs[] delivery_terms_delivery_terms_created_byTousers delivery_terms[] @relation("delivery_terms_created_byTousers") delivery_terms_delivery_terms_updated_byTousers delivery_terms[] @relation("delivery_terms_updated_byTousers") document_series_document_series_created_byTousers document_series[] @relation("document_series_created_byTousers") document_series_document_series_updated_byTousers document_series[] @relation("document_series_updated_byTousers") grn_grn_cancelled_byTousers grn[] @relation("grn_cancelled_byTousers") grn_grn_created_byTousers grn[] @relation("grn_created_byTousers") grn_grn_quality_checked_byTousers grn[] @relation("grn_quality_checked_byTousers") grn_grn_received_byTousers grn[] @relation("grn_received_byTousers") grn_grn_updated_byTousers grn[] @relation("grn_updated_byTousers") grn_attachments grn_attachments[] item_categories_item_categories_created_byTousers item_categories[] @relation("item_categories_created_byTousers") item_categories_item_categories_updated_byTousers item_categories[] @relation("item_categories_updated_byTousers") item_subcategories_item_subcategories_created_byTousers item_subcategories[] @relation("item_subcategories_created_byTousers") item_subcategories_item_subcategories_updated_byTousers item_subcategories[] @relation("item_subcategories_updated_byTousers") items_items_created_byTousers items[] @relation("items_created_byTousers") items_items_updated_byTousers items[] @relation("items_updated_byTousers") password_reset_tokens password_reset_tokens[] payment_terms_payment_terms_created_byTousers payment_terms[] @relation("payment_terms_created_byTousers") payment_terms_payment_terms_updated_byTousers payment_terms[] @relation("payment_terms_updated_byTousers") terms_notes_terms_notes_created_byTousers terms_notes[] @relation("terms_notes_created_byTousers") terms_notes_terms_notes_updated_byTousers terms_notes[] @relation("terms_notes_updated_byTousers") locations_locations_created_byTousers locations[] @relation("locations_created_byTousers") locations_locations_updated_byTousers locations[] @relation("locations_updated_byTousers") po_approvals po_approvals[] po_attachments po_attachments[] purchase_orders_purchase_orders_created_byTousers purchase_orders[] @relation("purchase_orders_created_byTousers") purchase_orders_purchase_orders_updated_byTousers purchase_orders[] @relation("purchase_orders_updated_byTousers") refresh_tokens refresh_tokens[] user_roles user_roles[] roles_roles_created_byTousers roles[] @relation("roles_created_byTousers") roles_roles_updated_byTousers roles[] @relation("roles_updated_byTousers") uom_uom_created_byTousers uom[] @relation("uom_created_byTousers") uom_uom_updated_byTousers uom[] @relation("uom_updated_byTousers") users_users_created_byTousers users? @relation("users_created_byTousers", fields: [created_by], references: [id], onUpdate: NoAction) other_users_users_created_byTousers users[] @relation("users_created_byTousers") departments departments? @relation(fields: [department_id], references: [id], onUpdate: NoAction) designations designations? @relation(fields: [designation_id], references: [id], onUpdate: NoAction) plant_location locations? @relation("UserPlantLocation", fields: [plant_id], references: [id], onUpdate: NoAction) users_users_reporting_toTousers users? @relation("users_reporting_toTousers", fields: [reporting_to], references: [id], onUpdate: NoAction) other_users_users_reporting_toTousers users[] @relation("users_reporting_toTousers") users_users_updated_byTousers users? @relation("users_updated_byTousers", fields: [updated_by], references: [id], onUpdate: NoAction) other_users_users_updated_byTousers users[] @relation("users_updated_byTousers") vendor_addresses_vendor_addresses_created_byTousers vendor_addresses[] @relation("vendor_addresses_created_byTousers") vendor_addresses_vendor_addresses_updated_byTousers vendor_addresses[] @relation("vendor_addresses_updated_byTousers") vendor_bank_details_vendor_bank_details_created_byTousers vendor_bank_details[] @relation("vendor_bank_details_created_byTousers") vendor_bank_details_vendor_bank_details_updated_byTousers vendor_bank_details[] @relation("vendor_bank_details_updated_byTousers") vendor_contacts_vendor_contacts_created_byTousers vendor_contacts[] @relation("vendor_contacts_created_byTousers") vendor_contacts_vendor_contacts_updated_byTousers vendor_contacts[] @relation("vendor_contacts_updated_byTousers") vendor_item_mapping_vendor_item_mapping_created_byTousers vendor_item_mapping[] @relation("vendor_item_mapping_created_byTousers") vendor_item_mapping_vendor_item_mapping_updated_byTousers vendor_item_mapping[] @relation("vendor_item_mapping_updated_byTousers") vendors_vendors_created_byTousers vendors[] @relation("vendors_created_byTousers") vendors_vendors_updated_byTousers vendors[] @relation("vendors_updated_byTousers") } /// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info. model vendor_addresses { id BigInt @id @default(autoincrement()) vendor_id BigInt address_type String @db.VarChar(20) address_line1 String? @db.VarChar(200) address_line2 String? @db.VarChar(200) city String? @db.VarChar(100) state String? @db.VarChar(100) pincode String? @db.VarChar(10) country String @default("India") @db.VarChar(100) gstin String? @db.VarChar(15) is_active Boolean @default(true) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) users_vendor_addresses_created_byTousers users? @relation("vendor_addresses_created_byTousers", fields: [created_by], references: [id], onUpdate: NoAction) users_vendor_addresses_updated_byTousers users? @relation("vendor_addresses_updated_byTousers", fields: [updated_by], references: [id], onUpdate: NoAction) vendors vendors @relation(fields: [vendor_id], references: [id], onDelete: Cascade, onUpdate: NoAction) } /// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info. model vendor_bank_details { id BigInt @id @default(autoincrement()) vendor_id BigInt bank_name String @db.VarChar(150) branch String? @db.VarChar(150) account_number String @db.VarChar(255) account_number_index String? @db.VarChar(64) ifsc String @db.VarChar(15) account_holder_name String @db.VarChar(200) account_type String @default("CURRENT") @db.VarChar(20) is_primary Boolean @default(false) is_active Boolean @default(true) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) users_vendor_bank_details_created_byTousers users? @relation("vendor_bank_details_created_byTousers", fields: [created_by], references: [id], onUpdate: NoAction) users_vendor_bank_details_updated_byTousers users? @relation("vendor_bank_details_updated_byTousers", fields: [updated_by], references: [id], onUpdate: NoAction) vendors vendors @relation(fields: [vendor_id], references: [id], onDelete: Cascade, onUpdate: NoAction) } model vendor_contacts { id BigInt @id @default(autoincrement()) vendor_id BigInt contact_name String @db.VarChar(150) designation String? @db.VarChar(100) phone String? @db.VarChar(15) email String? @db.VarChar(150) is_primary Boolean @default(false) is_active Boolean @default(true) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) users_vendor_contacts_created_byTousers users? @relation("vendor_contacts_created_byTousers", fields: [created_by], references: [id], onUpdate: NoAction) users_vendor_contacts_updated_byTousers users? @relation("vendor_contacts_updated_byTousers", fields: [updated_by], references: [id], onUpdate: NoAction) vendors vendors @relation(fields: [vendor_id], references: [id], onDelete: Cascade, onUpdate: NoAction) } model vendor_item_mapping { id BigInt @id @default(autoincrement()) vendor_id BigInt item_id BigInt last_purchase_rate Decimal? @db.Decimal(15, 4) is_preferred Boolean @default(false) is_active Boolean @default(true) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) users_vendor_item_mapping_created_byTousers users? @relation("vendor_item_mapping_created_byTousers", fields: [created_by], references: [id], onUpdate: NoAction) items items @relation(fields: [item_id], references: [id], onDelete: Cascade, onUpdate: NoAction) users_vendor_item_mapping_updated_byTousers users? @relation("vendor_item_mapping_updated_byTousers", fields: [updated_by], references: [id], onUpdate: NoAction) vendors vendors @relation(fields: [vendor_id], references: [id], onDelete: Cascade, onUpdate: NoAction) @@unique([vendor_id, item_id]) } /// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info. model vendors { id BigInt @id @default(autoincrement()) vendor_code String @unique @db.VarChar(30) vendor_name String @db.VarChar(200) vendor_type String @db.VarChar(30) gst_treatment String? @db.VarChar(30) source_of_supply String? @db.VarChar(100) gstin String? @db.VarChar(15) pan String? @db.VarChar(10) payment_term_id BigInt? credit_period_days Int @default(0) status String @default("active") @db.VarChar(20) remarks String? is_active Boolean @default(true) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) deleted_at DateTime? @db.Timestamptz(6) assets_assets_vendor_idTovendors assets[] @relation("assets_vendor_idTovendors") asset_amc_contracts asset_amc_contracts[] asset_service_visits asset_service_visits[] grn grn[] purchase_orders purchase_orders[] vendor_addresses vendor_addresses[] vendor_bank_details vendor_bank_details[] vendor_contacts vendor_contacts[] vendor_item_mapping vendor_item_mapping[] users_vendors_created_byTousers users? @relation("vendors_created_byTousers", fields: [created_by], references: [id], onUpdate: NoAction) payment_terms payment_terms? @relation(fields: [payment_term_id], references: [id], onUpdate: NoAction) users_vendors_updated_byTousers users? @relation("vendors_updated_byTousers", fields: [updated_by], references: [id], onUpdate: NoAction) @@index([vendor_name(ops: raw("gin_trgm_ops"))], map: "idx_vendors_name_trgm", type: Gin) } model company { id BigInt @id @default(1) org_name String? @db.VarChar(200) gstin String? @db.VarChar(15) mobile String? @db.VarChar(20) email String? @db.VarChar(200) website String? @db.VarChar(255) logo_path String? @db.VarChar(500) favicon_path String? @db.VarChar(500) address String? city String? @db.VarChar(100) state String? @db.VarChar(100) pincode String? @db.VarChar(10) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) } model email_settings { id BigInt @id @default(1) smtp_host String? @db.VarChar(255) smtp_port Int @default(587) smtp_username String? @db.VarChar(200) smtp_password String? @db.VarChar(500) sender_email String? @db.VarChar(200) sender_name String? @db.VarChar(200) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) } model notification_templates { id BigInt @id @default(autoincrement()) code String @unique @db.VarChar(80) name String @db.VarChar(200) channel String @default("EMAIL") @db.VarChar(20) subject String @db.VarChar(500) html_body String placeholders Json @default("[]") @db.JsonB description String? is_active Boolean @default(true) created_by BigInt? updated_by BigInt? created_at DateTime @default(now()) @db.Timestamptz(6) updated_at DateTime @default(now()) @db.Timestamptz(6) deleted_at DateTime? @db.Timestamptz(6) @@index([channel], map: "idx_notification_templates_channel") @@index([is_active], map: "idx_notification_templates_is_active") }