Add native CodeIgniter 4 report generation functionality replacing legacy spooler_db system. Provides centralized report generation with audit logging and multi-language support. New Features: - Report generation with Indonesian and English language support - Role-based access control (Lab, Admin, Superuser: generate; CS: print only) - Preview mode for validation workflow - Print audit logging to AUDIT_REQUESTS table - Multi-page report support with proper pagination - Dual unit system (Conventional and International units) Controllers: - ReportController: Main controller for report generation, preview, and print - generate(): Full report with audit logging - preview(): Preview mode without audit logging - print(): Print-only access for CS role - Home::printReport(): Route handler redirecting based on user role Libraries: - ReportHelper: Comprehensive report data retrieval - Patient information (name, MR number, demographics, referral) - Test results with reference ranges and unit conversions - Collection and reception data with timestamps - Validation status and validator information - Special handling for pending samples and Chinese translations Routes: - /report/(:num) - Generate report (Lab, Admin, Superuser) - /report/(:num)/preview - Preview without audit logging - /report/(:num)/eng - English language report - /report/print/(:num) - Print-only access (CS role) - /print/(:num) - Redirect based on role (all roles) Views: - report/template.php: Professional lab report template with Gleneagles branding - Header and footer images - Patient information table - Test results with dual unit columns - Collection and reception timestamps - Authorization signature area - Preview watermark Role Index Views: - Removed dialog_preview.php inclusion from all role dashboards - Consolidated print button directly linking to new report routes Assets: - Report-specific CSS files (normalize.min.css, style.css, pdf.css, style_qr.css) - Gleneagles header and footer images - Legacy spooler_db files preserved in public/spooler_db/ for reference Tests: - ReportTest.php: Unit tests for report generation functionality Database: - Uses existing tables: REQUESTS, TESTS, DICT_TESTS, SP_REQUESTS, PATIENTS - Inserts print audit records into AUDIT_REQUESTS table Security: - Parameterized queries throughout (SQL injection prevention) - Role-based access control enforced at route level - Proper output escaping with esc() in views
4.7 KiB
4.7 KiB
Report Generation Migration - Implementation Summary
Overview
Migrated legacy PHP report script (main2.php) to CodeIgniter 4 framework for lab result report generation.
Files Created/Modified
New Files
-
app/Libraries/ReportHelper.php - Core report generation logic
- Migrated all helper functions from
_function.php - Includes: getReportData, getResult, getData2, getNotes, getOthers, getCollData, getRecvData, getNoSample, getStatus, getValBy, cutData, f_repl
- Uses parameterized SQL queries for security
- Supports bilingual output (English/Indonesian)
- Migrated all helper functions from
-
app/Controllers/ReportController.php - Controller for report endpoints
generate($accessnumber, $eng, $preview)- Main report generationpreview($accessnumber, $eng)- Preview modeprint($accessnumber, $eng)- Print mode for CS rolelogPrintAudit()- Audit logging
-
app/Views/report/template.php - Report view template
- HTML structure matching original layout
- Supports multi-page reports
- Preview mode banner
- Bilingual labels
-
tests/Unit/ReportTest.php - Unit tests
- Tests for ReportHelper methods
- Validation of data processing
Modified Files
-
app/Config/Routes.php - Added report routes
/report/{accessnumber} - Generate report /report/{accessnumber}/preview - Preview mode /report/{accessnumber}/eng - English version /report/print/{accessnumber} - CS print access /print/{accessnumber} - Backward compatibility -
app/Controllers/Home.php - Updated printReport method
- Redirects to new ReportController
- Role-based routing (Lab, Admin, Superuser → /report, CS → /report/print)
Assets Copied
- public/assets/report/ - Report CSS and images
- gleneagleshdr.png, gleneaglesftr.png
- style.css, pdf.css, normalize.min.css
Access Control
| Role | Routes | Permissions |
|---|---|---|
| Superuser (0) | /report/* | Generate, Preview |
| Admin (1) | /report/* | Generate, Preview |
| Lab (2) | /report/* | Generate, Preview |
| CS (4) | /report/print/* | Print only |
| Phlebo (3) | - | No access |
Features Implemented
-
Bilingual Support
- URL parameter
?eng=1for English - Default is Indonesian
- URL parameter
-
Preview Mode
- No audit logging
- "PREVIEW ONLY" banner
- Route:
/report/{id}/preview
-
Audit Logging
- Logs to
GDC_CMOD.dbo.AUDIT_REQUESTSon non-preview - Records: ACCESSNUMBER, STEPDATE (GETDATE), STEPTYPE ('PRINT'), STEPSTATUS
- Logs to
-
Multi-page Reports
- Automatic pagination (38 lines per page)
- Handles test results, notes, non-lab tests
-
Data Processing
- Patient information (name, MR, age, address, etc.)
- Test results with conventional/international units
- Reference ranges with flagging (*L, *H)
- Collection and reception data
- No sample handling
Database Queries
All queries use parameterized statements for security:
- Uses
?placeholders $this->db->query($sql, [$params])- No string concatenation with user input
Testing
# Syntax validation
php -l app/Controllers/ReportController.php
php -l app/Libraries/ReportHelper.php
php -l app/Views/report/template.php
# Unit tests (requires PHPUnit)
composer test
./vendor/bin/phpunit tests/Unit/ReportTest.php
Example URLs
# Generate report (Indonesian)
http://localhost/report/123456
# Generate report (English)
http://localhost/report/123456/eng
# Preview (Indonesian)
http://localhost/report/123456/preview
# Preview (English)
http://localhost/report/123456/preview/eng
# Print (CS role only)
http://localhost/report/print/123456
# Backward compatibility
http://localhost/print/123456
Next Steps (Optional Enhancements)
-
PDF Generation
- Integrate dompdf/tcpdf for automatic PDF generation
- Save to
public/pdf/process/andpublic/pdf/archive/
-
Code Refactoring
- Split
getResult()(300+ lines) into smaller methods - Move
$_chineseand$_italicarrays to config file - Use regex for text parsing instead of strpos/substr
- Split
-
Validation
- Add input validation for accessnumber format
- Handle invalid access numbers gracefully
-
Performance
- Cache common queries
- Optimize SQL joins
-
Testing
- Add integration tests with database
- Test with real data
- Test pagination edge cases
Migration Status: ✅ COMPLETE
All core functionality migrated from main2.php to CI4:
- ✅ Report generation
- ✅ Bilingual support
- ✅ Preview mode
- ✅ Role-based access
- ✅ Audit logging
- ✅ Multi-page reports
- ✅ Data processing
- ✅ Asset migration
- ✅ Route configuration
- ✅ Backward compatibility