This document provides comprehensive documentation for all stored procedures, functions, triggers, and views implemented in the FinGuard application. The PL/SQL optimizations provide advanced transaction processing, rollback functionality, fraud detection, and analytics capabilities.
FinGuard_Complete_PL_SQL.sql: Complete PL/SQL implementationdeploy_complete.bat: Deployment script for all PL/SQL featuresfix_collations.sql: Database collation fixesDatabaseSchema_MySQL.sql: Base database schema
Purpose: Daily transaction analytics and metrics
Columns:
transaction_date: Date of transactionstotal_transactions: Total number of transactionstotal_volume: Total transaction volumeavg_transaction_amount: Average transaction amountmin_transaction: Minimum transaction amountmax_transaction: Maximum transaction amountunique_senders: Number of unique sendersunique_receivers: Number of unique receiverstransfers: Number of transfer transactionsdeposits: Number of deposit transactionswithdrawals: Number of withdrawal transactions
Usage Example:
SELECT * FROM v_daily_transaction_analytics
WHERE transaction_date >= DATE_SUB(NOW(), INTERVAL 7 DAY);Purpose: View of users with high risk scores
Columns:
id: User IDfirst_name: User's first namelast_name: User's last namebalance: Current account balancerisk_score: Calculated risk scorefraud_reports: Number of fraud reportsweekly_velocity: Weekly transaction velocityaccount_age_days: Account age in days
Usage Example:
SELECT * FROM v_high_risk_users
WHERE risk_score > 50
ORDER BY risk_score DESC;Purpose: Monthly transaction reporting with cumulative data
Columns:
year: Transaction yearmonth: Transaction monthtransaction_count: Monthly transaction counttotal_volume: Monthly total volumeavg_amount: Monthly average amountcumulative_transactions: Cumulative transaction countcumulative_volume: Cumulative volume
Usage Example:
SELECT * FROM v_monthly_transaction_report
WHERE year = YEAR(NOW())
ORDER BY month DESC;Purpose: Summary of user transaction activity
Columns:
id: User IDfirst_name: User's first namelast_name: User's last namebalance: Current balancetransactions_sent: Number of sent transactionstransactions_received: Number of received transactionstotal_sent: Total amount senttotal_received: Total amount receivedlast_transaction_date: Date of last transactionrisk_score: User's risk score
Usage Example:
SELECT * FROM v_user_transaction_summary
WHERE balance > 1000
ORDER BY total_sent DESC;Purpose: Process money transfers with comprehensive validation
Parameters:
IN p_sender_id CHAR(36): Sender user IDIN p_receiver_id CHAR(36): Receiver user IDIN p_amount DECIMAL(10,2): Transfer amountIN p_payment_method VARCHAR(100): Payment methodIN p_note TEXT: Transaction noteIN p_tx_type ENUM('Transfer', 'Deposit', 'Withdrawal', 'Payment', 'Refund'): Transaction typeIN p_location VARCHAR(255): Transaction locationOUT p_success BOOLEAN: Success statusOUT p_message VARCHAR(500): Result messageOUT p_transaction_id CHAR(36): Generated transaction ID
Functionality:
- β Validates transaction parameters
- β Checks user existence and balances
- β Fraud detection for receiver
- β Updates user balances atomically
- β Comprehensive error handling
- β Transaction record creation
Usage Example:
CALL ProcessMoneyTransfer(
'sender-uuid', 'receiver-uuid', 100.00, 'Bank Transfer',
'Payment for services', 'Transfer', 'New York',
@success, @message, @transaction_id
);Purpose: Rollback a completed transaction by restoring original balances from backup data
Parameters:
IN p_transaction_id CHAR(36): Transaction ID to rollbackIN p_reason TEXT: Reason for rollbackOUT p_success BOOLEAN: Success statusOUT p_message VARCHAR(500): Result message
Functionality:
- β Validates transaction exists and is completed
- β Checks for existing backup data
- β Restores original balances from backup
- β Updates transaction status to 'ROLLED_BACK'
- β Creates audit log entries
- β Comprehensive error handling
Usage Example:
CALL RollbackTransaction('transaction-uuid', 'Fraud detected', @success, @message);Purpose: Register new users with comprehensive validation
Parameters:
IN p_role_name VARCHAR(50): User role nameIN p_first_name VARCHAR(255): First nameIN p_last_name VARCHAR(255): Last nameIN p_dob DATE: Date of birthIN p_age INT: AgeIN p_gender VARCHAR(50): GenderIN p_marital_status VARCHAR(50): Marital statusIN p_blood_group VARCHAR(10): Blood groupIN p_email VARCHAR(255): Email addressIN p_phone VARCHAR(20): Phone numberIN p_password VARCHAR(255): Password hashOUT p_user_id CHAR(36): Generated user IDOUT p_success BOOLEAN: Success statusOUT p_message VARCHAR(500): Result message
Usage Example:
CALL RegisterUser('user', 'John', 'Doe', '1990-01-01', 30, 'Male', 'Single', 'O+',
'john@example.com', '1234567890', 'hashed_password', @user_id, @success, @message);Purpose: Process fraud reports with risk assessment
Parameters:
IN p_reporter_id CHAR(36): Reporter user IDIN p_reported_user_id CHAR(36): Reported user IDIN p_reason VARCHAR(500): Fraud report reasonOUT p_success BOOLEAN: Success statusOUT p_message VARCHAR(500): Result message
Functionality:
- β Validates reporter and reported users exist
- β Prevents duplicate reports
- β Creates fraud report record
- β Calculates risk score
- β Auto-suspends high-risk users
- β Audit trail creation
Usage Example:
CALL ProcessFraudReport('reporter-uuid', 'reported-uuid', 'Suspicious activity', @success, @message);Purpose: Retrieve comprehensive user dashboard data
Parameters:
IN p_user_id CHAR(36): User IDOUT p_current_balance DECIMAL(10,2): Current balanceOUT p_total_sent DECIMAL(15,2): Total amount sentOUT p_total_received DECIMAL(15,2): Total amount receivedOUT p_transaction_count INT: Total transaction countOUT p_risk_score DECIMAL(5,2): User risk score
Usage Example:
CALL GetUserDashboardData('user-uuid', @balance, @sent, @received, @count, @risk);Purpose: Retrieve paginated user transaction history
Parameters:
IN p_user_id CHAR(36): User IDIN p_limit INT: Number of records to returnIN p_offset INT: Starting offset
Usage Example:
CALL GetUserTransactionHistory('user-uuid', 10, 0);Purpose: Calculate comprehensive user statistics
Parameters:
IN p_user_id CHAR(36): User IDOUT p_total_sent DECIMAL(15,2): Total sent amountOUT p_total_received DECIMAL(15,2): Total received amountOUT p_transaction_count INT: Transaction countOUT p_avg_transaction DECIMAL(10,2): Average transaction amountOUT p_last_transaction_date DATETIME: Last transaction date
Usage Example:
CALL CalculateUserStatistics('user-uuid', @sent, @received, @count, @avg, @last_date);Purpose: Admin batch balance updates
Parameters:
IN p_admin_id CHAR(36): Admin user IDIN p_user_ids TEXT: Comma-separated user IDsIN p_amounts TEXT: Comma-separated amountsIN p_reason TEXT: Update reasonOUT p_success BOOLEAN: Success statusOUT p_message VARCHAR(500): Result messageOUT p_updated_count INT: Number of updated users
Usage Example:
CALL AdminBatchBalanceUpdate('admin-uuid', 'user1,user2', '100.00,200.00', 'Bonus', @success, @message, @count);Purpose: Bulk balance updates with validation
Parameters:
IN p_admin_id CHAR(36): Admin user IDIN p_user_ids TEXT: Comma-separated user IDsIN p_amounts TEXT: Comma-separated amountsIN p_reason TEXT: Update reasonOUT p_success BOOLEAN: Success statusOUT p_message VARCHAR(500): Result message
Usage Example:
CALL BulkBalanceUpdate('admin-uuid', 'user1,user2', '100.00,200.00', 'Adjustment', @success, @message);Purpose: Create comprehensive budgets
Parameters:
IN p_user_id CHAR(36): User IDIN p_budget_name VARCHAR(255): Budget nameIN p_currency VARCHAR(10): Currency codeIN p_income_sources TEXT: Income sourcesIN p_total_income DECIMAL(15,2): Total incomeIN p_expenses_json TEXT: Expenses JSON dataOUT p_budget_id CHAR(36): Generated budget IDOUT p_success BOOLEAN: Success statusOUT p_message VARCHAR(500): Result message
Usage Example:
CALL CreateFullBudget('user-uuid', 'Monthly Budget', 'USD', 'Salary', 5000.00, '{}', @budget_id, @success, @message);Purpose: Save or update user budgets
Parameters:
IN p_user_id CHAR(36): User IDIN p_name VARCHAR(255): Budget nameIN p_currency VARCHAR(10): CurrencyIN p_income_source VARCHAR(255): Income sourceIN p_amount DECIMAL(15,2): Budget amountOUT p_budget_id CHAR(36): Budget IDOUT p_success BOOLEAN: Success statusOUT p_message VARCHAR(500): Result message
Usage Example:
CALL SaveOrUpdateBudget('user-uuid', 'Monthly Budget', 'USD', 'Salary', 5000.00, @budget_id, @success, @message);Purpose: Safely add columns to tables
Parameters:
IN p_table_name VARCHAR(64): Table nameIN p_column_name VARCHAR(64): Column nameIN p_column_definition TEXT: Column definition
Usage Example:
CALL AddColumnIfNotExists('users', 'new_column', 'VARCHAR(100) DEFAULT NULL');Purpose: Safe column addition with error handling
Parameters:
IN table_name VARCHAR(128): Table nameIN column_name VARCHAR(128): Column nameIN column_definition TEXT: Column definition
Usage Example:
CALL SafeAddColumn('users', 'status', 'VARCHAR(50) DEFAULT "active"');Purpose: Safe index addition with error handling
Parameters:
IN table_name VARCHAR(128): Table nameIN index_name VARCHAR(128): Index nameIN index_definition TEXT: Index definition
Usage Example:
CALL SafeAddIndex('transactions', 'idx_timestamp', '(timestamp)');Purpose: Calculate user risk score based on multiple factors
Parameters:
p_user_id CHAR(36): User ID
Returns: DECIMAL(5,2) - Risk score (0-100)
Functionality:
- β Fraud reports factor (30 points per report)
- β High-amount transactions factor (10 points per transaction)
- β Account age adjustment (older accounts get lower scores)
- β Maximum score capped at 100
Usage Example:
SELECT GetUserRiskScore('user-uuid') as risk_score;Purpose: Calculate account age in days
Parameters:
p_user_id CHAR(36): User ID
Returns: INT - Account age in days
Usage Example:
SELECT CalculateAccountAge('user-uuid') as account_age;Purpose: Calculate transaction velocity over specified period
Parameters:
p_user_id CHAR(36): User IDp_days INT: Number of days to calculate velocity for
Returns: DECIMAL(10,2) - Transactions per day
Usage Example:
SELECT CalculateTransactionVelocity('user-uuid', 7) as weekly_velocity;Purpose: Automatically create blockchain entries for new transactions
Trigger Type: AFTER INSERT on transactions
Functionality:
- β Calculates next blockchain index
- β Retrieves previous block hash
- β Generates new block hash using SHA256
- β Inserts blockchain record with transaction reference
Blockchain Hash Generation:
SHA2(CONCAT(index, transaction_id, amount, timestamp, previous_hash), 256)Purpose: Validate balance constraints before updates
Trigger Type: BEFORE UPDATE on users
Functionality:
- β Prevents negative balance updates
- β Skips admin_logs to avoid foreign key issues
- β Raises error for invalid balance changes
- Atomic Operations: All transactions use START TRANSACTION/COMMIT/ROLLBACK
- Input Validation: Comprehensive parameter validation
- Fraud Detection: Real-time fraud checking before transfers
- Balance Validation: Prevents negative balances and insufficient funds
- Audit Trail: Complete audit logging for all operations
- Duplicate Prevention: Email/phone uniqueness validation
- Risk Assessment: Automated risk scoring and monitoring
- Auto-Suspension: High-risk users automatically suspended
- Password Security: Secure password storage and validation
- Batch Operations: Secure batch balance updates
- Admin Logging: Complete admin action audit trail
- Permission Validation: Role-based access control
- Error Handling: Comprehensive error handling and logging
- Primary Keys: All tables have optimized primary keys
- Foreign Keys: Proper foreign key relationships
- Query Optimization: Indexes on frequently queried columns
- Compound Indexes: Multi-column indexes for complex queries
- Prepared Statements: Dynamic SQL with prepared statements
- Batch Operations: Efficient batch processing
- View Optimization: Materialized views for complex analytics
- Connection Pooling: Efficient database connection management
- MySQL 8.0 or higher
- InnoDB storage engine
- UTF8MB4 character set support
- Sufficient privileges for stored procedures/functions
- Run Base Schema: Execute
DatabaseSchema_MySQL.sql - Deploy PL/SQL: Run
FinGuard_Complete_PL_SQL.sql - Fix Collations: Execute
fix_collations.sql - Verify Deployment: Run test procedures
- Seed Data: Execute
database_seed.py
-- Check procedures
SHOW PROCEDURE STATUS WHERE Name LIKE '%Transfer%';
-- Check functions
SHOW FUNCTION STATUS WHERE Name LIKE '%Risk%';
-- Check triggers
SHOW TRIGGERS;
-- Check views
SHOW FULL TABLES WHERE Table_Type = 'VIEW';- Slow Query Log: Monitor procedure execution times
- Index Usage: Track index utilization
- Transaction Volume: Monitor transaction throughput
- Error Rates: Track procedure success/failure rates
- Statistics Update: Regular table statistics updates
- Index Maintenance: Periodic index optimization
- Log Rotation: Audit log cleanup and archival
- Backup Strategy: Regular backup of procedures and data
- Daily Analytics:
v_daily_transaction_analytics - Monthly Reports:
v_monthly_transaction_report - User Summaries:
v_user_transaction_summary - Risk Assessment:
v_high_risk_users
- Risk Scoring: Advanced risk calculation algorithms
- Transaction Velocity: Real-time velocity calculations
- Account Age Analysis: Account maturity assessments
- Fraud Pattern Detection: Pattern-based fraud detection
- Validation Errors: Input parameter validation
- Business Logic Errors: Business rule violations
- Database Errors: SQL execution errors
- System Errors: Infrastructure-related errors
- Transaction Rollback: Automatic rollback on errors
- Balance Restoration: Backup-based balance recovery
- Audit Trail: Complete error audit logging
- Alert System: Error notification and alerting
- Code Reviews: Peer review all stored procedures
- Testing: Comprehensive unit and integration testing
- Documentation: Maintain up-to-date documentation
- Version Control: Track all database changes
- Monitoring: Real-time performance monitoring
- Backup: Regular backup and recovery testing
- Security: Regular security audits and updates
- Performance: Ongoing performance optimization
- Foreign Key Constraints: Check referential integrity
- Duplicate Key Errors: Verify unique constraints
- Timeout Issues: Optimize query performance
- Permission Errors: Verify user privileges
-- Check procedure status
SHOW PROCEDURE STATUS WHERE Name = 'ProcedureName';
-- View procedure definition
SHOW CREATE PROCEDURE ProcedureName;
-- Check for locks
SHOW PROCESSLIST;
-- Monitor performance
SELECT * FROM performance_schema.events_statements_summary_by_digest
WHERE DIGEST_TEXT LIKE '%ProcedureName%';- Initial stored procedure implementation
- Basic transaction processing
- User registration and authentication
- Enhanced fraud detection
- Rollback functionality
- Advanced analytics views
- Blockchain integration
- Batch operations
- Performance optimizations
- Enhanced security features
- Comprehensive error handling
For technical support or questions regarding the PL/SQL implementation:
- Development Team: FinGuard Development Team
- Documentation: This file and inline code comments
- Testing: Comprehensive test suite available
- Deployment: Automated deployment scripts provided
Last Updated: July 2025
Version: 3.0
Status: Production Ready
Parameters:
IN p_transaction_id CHAR(36): Transaction ID to rollbackIN p_reason TEXT: Reason for rollbackOUT p_success BOOLEAN: Success statusOUT p_message VARCHAR(500): Result message
Functionality:
- β Validates transaction exists and is eligible
- β Restores original balances from backup
- β Updates transaction status to 'ROLLED_BACK'
- β Creates audit log entry
- β 72-hour rollback window enforcement
Usage Example:
CALL RollbackTransaction('transaction-uuid', 'Customer request', @success, @message);Purpose: Check transaction status and rollback eligibility
Parameters:
IN p_transaction_id CHAR(36): Transaction IDOUT p_status VARCHAR(20): Current transaction statusOUT p_can_rollback BOOLEAN: Rollback eligibilityOUT p_message VARCHAR(500): Status message
Functionality:
- β Checks transaction existence
- β Validates rollback eligibility
- β Calculates time since transaction
- β Checks backup data availability
Usage Example:
CALL GetTransactionStatus('transaction-uuid', @status, @can_rollback, @message);Purpose: Create a backup of user balance before operations
Parameters:
IN p_user_id CHAR(36): User IDIN p_operation_type VARCHAR(50): Operation descriptionOUT p_backup_id CHAR(36): Generated backup IDOUT p_success BOOLEAN: Success statusOUT p_message VARCHAR(500): Result message
Functionality:
- β Creates balance snapshot
- β Generates unique backup ID
- β Audit logging
- β Error handling
Usage Example:
CALL BackupUserBalance('user-uuid', 'Manual backup', @backup_id, @success, @message);Purpose: Restore user balance from a backup
Parameters:
IN p_backup_id CHAR(36): Backup IDIN p_reason TEXT: Restore reasonOUT p_success BOOLEAN: Success statusOUT p_message VARCHAR(500): Result message
Functionality:
- β Validates backup existence
- β Restores balance from backup
- β Updates audit log
- β Timestamps restore operation
Usage Example:
CALL RestoreUserBalance('backup-uuid', 'System error recovery', @success, @message);Purpose: Automatically rollback failed transactions older than threshold
Parameters:
IN p_hours_threshold INT: Age threshold in hours (default: 24)OUT p_rolled_back_count INT: Number of transactions rolled backOUT p_message VARCHAR(500): Operation summary
Functionality:
- β Finds failed transactions older than threshold
- β Attempts rollback for each transaction
- β Counts successful rollbacks
- β System audit logging
Usage Example:
CALL AutoRollbackFailedTransactions(24, @count, @message);Purpose: Clean up fraud reports older than specified days
Parameters:
IN p_days_threshold INT: Age threshold in days (default: 90)
Functionality:
- β Deletes old fraud reports
- β Logs cleanup operation
- β Returns deletion count
Usage Example:
CALL CleanupOldFraudReports(90);Purpose: Calculate user risk score based on fraud reports and transaction patterns
Parameters:
p_user_id CHAR(36): User ID
Returns: DECIMAL(5,2) - Risk score (0-100)
Calculation:
- Fraud reports against user: 25 points each
- High transaction volume (>50/month): 15 points
- High-value transactions (>$1000/week): 10 points each
- Maximum score: 100
Usage Example:
SELECT GetUserRiskScore('user-uuid') as risk_score;Purpose: Calculate user's total spending for current day
Parameters:
p_user_id CHAR(36): User ID
Returns: DECIMAL(10,2) - Daily spending amount
Usage Example:
SELECT GetUserDailySpending('user-uuid') as daily_spending;Purpose: Check if user is within daily spending limit
Parameters:
p_user_id CHAR(36): User IDp_amount DECIMAL(10,2): Transaction amount
Returns: BOOLEAN - True if within limit
Default Limit: $10,000 per day
Usage Example:
SELECT IsWithinSpendingLimit('user-uuid', 500.00) as within_limit;Purpose: Get transaction count for user in specified period
Parameters:
p_user_id CHAR(36): User IDp_days INT: Number of days to look back
Returns: INT - Transaction count
Usage Example:
SELECT GetUserTransactionCount('user-uuid', 30) as monthly_transactions;Purpose: Comprehensive transaction analysis view
Columns:
- Transaction details (ID, amount, method, timestamp, type, status)
- User information (sender/receiver names)
- Risk scores for both parties
- Backup and rollback information
Usage Example:
SELECT * FROM v_transaction_analytics WHERE amount > 1000;Purpose: User risk and spending analysis view
Columns:
- User details (ID, name, balance)
- Risk score
- Daily spending
- Transaction counts (weekly/monthly)
- Fraud report statistics
Usage Example:
SELECT * FROM v_user_risk_analysis WHERE risk_score > 50;Purpose: Rollback eligibility monitoring view
Columns:
- Transaction details
- Backup information
- Rollback status and timestamps
- Hours since transaction
- Rollback eligibility status
Usage Example:
SELECT * FROM v_rollback_monitoring WHERE rollback_status = 'ELIGIBLE';Purpose: Auto-update balances and create audit logs on transaction insert
Trigger Type: AFTER INSERT ON transactions
Functionality:
- β Logs completed transactions
- β Creates audit trail
- β Handles transaction status updates
Purpose: Audit fraud report submissions
Trigger Type: AFTER INSERT ON fraud_list
Functionality:
- β Logs fraud report creation
- β Records reporter and reported user
- β Timestamps fraud reports
Purpose: Audit user account changes, especially balance updates
Trigger Type: AFTER UPDATE ON users
Functionality:
- β Logs balance changes
- β Records old and new values
- β Timestamps user updates
Stores backup data for rollback functionality
backup_id: Unique backup identifieroriginal_transaction_id: Reference to original transactionsender_id,receiver_id: User IDssender_balance_before/after: Balance snapshotsrollback_timestamp: When rollback occurredrollback_reason: Reason for rollback
Logs failed transaction attempts
id: Unique failure record IDattempted_transaction_id: Failed transaction IDfailure_reason: Reason for failureretry_count: Number of retry attempts
Comprehensive audit logging
id: Unique audit record IDoperation_type: Type of operationentity_type: Type of entity affectedold_values/new_values: Change trackingtimestamp: When operation occurredsuccess: Whether operation succeeded
-
Complete Deployment:
deploy_complete.bat
-
Fix Collation Issues (if needed):
fix_collations.bat
-
Manual Deployment:
mysql -u root -p fin_guard < FinGuard_Complete_PL_SQL.sql
- Indexes: Optimized indexes on frequently queried columns
- Transactions: Atomic operations with proper rollback handling
- Locks: Row-level locking for concurrent access
- Audit: Efficient audit logging without performance impact
- Fraud Detection: Real-time fraud checking
- Risk Assessment: Continuous risk scoring
- Audit Trail: Complete operation logging
- Rollback Window: 72-hour rollback limitation
- Balance Validation: Insufficient balance prevention
- Real-time Risk Scoring: Continuous user risk assessment
- Transaction Analytics: Comprehensive transaction insights
- Rollback Monitoring: Track rollback eligibility and usage
- Fraud Reporting: Automated fraud detection and reporting
- Always use procedures for money transfers
- Check rollback eligibility before attempting rollbacks
- Monitor risk scores regularly
- Clean up old data using cleanup procedures
- Review audit logs for security monitoring
- Collation errors: Run
fix_collations.bat - Procedure not found: Redeploy using
deploy_complete.bat - Transaction rollback failed: Check backup data exists
- Risk score calculation errors: Verify fraud_list table data
-- Check procedures
SHOW PROCEDURE STATUS WHERE Db='fin_guard';
-- Check functions
SHOW FUNCTION STATUS WHERE Db='fin_guard';
-- Check triggers
SHOW TRIGGERS;
-- Check views
SHOW FULL TABLES WHERE Table_Type = 'VIEW';- v1.0: Initial PL/SQL implementation
- v1.1: Added rollback functionality
- v1.2: Enhanced fraud detection
- v1.3: Comprehensive audit logging
- v2.0: Complete consolidation and optimization
This documentation covers all PL/SQL features implemented in the FinGuard application. For additional support, refer to the main README.md file.