13 KiB
PX360 Onboarding & Acknowledgement System - Implementation Guide
Overview
The Onboarding & Acknowledgement System ensures that all new users receive proper training on the PX360 system before accessing it. Users must complete a guided wizard that includes:
- Learning Phase: Review system documentation and procedures
- Acknowledgement Phase: Confirm understanding of key policies and procedures
- Activation Phase: Create username and password with digital signature
Architecture
Models
1. User Model Extensions
is_provisional: Boolean flag for provisional user statusacknowledgement_completed: Boolean flag for completion statusacknowledgement_completed_at: Timestamp of completioncurrent_wizard_step: Track current wizard stepwizard_completed_steps: List of completed step IDsinvitation_token: Unique token for invitation linkinvitation_expires_at: Invitation expiration timestampinvitation_sent_at: Timestamp when invitation was sent
2. AcknowledgementContent
Stores educational content for different roles:
code: Unique identifierrole: Target role (px_admin, hospital_admin, department_manager, staff, physician, all)title_en,title_ar: Title in English and Arabicdescription_en,description_ar: Short descriptioncontent_en,content_ar: Full HTML contenticon,color: UI customizationorder: Display orderis_active: Status flag
3. AcknowledgementChecklistItem
Items users must acknowledge:
code: Unique identifierrole: Target roletext_en,text_ar: Item textdescription_en,description_ar: Additional contextcontent: Link to related AcknowledgementContentis_required: Whether this item is mandatoryorder: Display orderis_active: Status flag
4. UserAcknowledgement
Records user acknowledgements:
user: Foreign key to Userchecklist_item: Foreign key to AcknowledgementChecklistItemis_acknowledged: Boolean flagacknowledged_at: Timestampsignature: Digital signature (base64 encoded)ip_address: User's IP addressuser_agent: Browser information
5. UserProvisionalLog
Audit trail for onboarding events:
user: Foreign key to Userevent_type: Event category (created, step_completed, wizard_completed, user_activated, invitation_sent, reminder_sent)description: Event descriptionmetadata: JSON field for additional datacreated_at: Timestamp
Services
OnboardingService
Key methods:
create_provisional_user(user_data): Create provisional uservalidate_invitation(token): Validate invitation linkget_wizard_content(user): Get role-specific contentget_checklist_items(user): Get role-specific checklistacknowledge_item(user, item, signature, request): Record acknowledgementcomplete_wizard(user, username, password, signature, request): Complete onboardingget_user_progress_percentage(user): Calculate progress
EmailService
Email notifications:
send_invitation_email(user, request): Send invitationsend_reminder_email(user, request): Send remindersend_completion_notification(user, admins, request): Notify admins of completion
Permissions
IsProvisionalUser: Restrict to provisional usersCanManageOnboarding: PX Admin onlyCanManageAcknowledgementContent: PX Admin onlyCanViewOnboarding: PX Admin or own userIsOnboardingOwnerOrAdmin: User can view own, PX Admin can view all
Serializers
ProvisionalUserSerializer: Create provisional userAcknowledgementContentSerializer: Content CRUDAcknowledgementChecklistItemSerializer: Checklist CRUDUserAcknowledgementSerializer: View acknowledgementsWizardProgressSerializer: Progress trackingAcknowledgeItemSerializer: Acknowledge itemAccountActivationSerializer: Activate account
Views & ViewSets
API ViewSets
AcknowledgementContentViewSet: Manage contentAcknowledgementChecklistItemViewSet: Manage checklist itemsUserAcknowledgementViewSet: View acknowledgements (read-only)
UserViewSet Actions
onboarding_create_provisional: Create provisional useronboarding_resend_invitation: Resend invitationonboarding_progress: Get user progressonboarding_content: Get wizard contentonboarding_checklist: Get checklist itemsonboarding_acknowledge: Acknowledge itemonboarding_complete: Complete wizard and activate
UI Views
onboarding_welcome: Welcome pageonboarding_step_content: Content steponboarding_step_checklist: Checklist steponboarding_step_activation: Activation steponboarding_complete: Completion pageprovisional_user_list: Manage provisional usersprovisional_user_progress: View user progressacknowledgement_content_list: Manage contentacknowledgement_checklist_list: Manage checklist items
User Flow
1. Admin Creates Provisional User
Admin → Provisional Users List → Create User → Select Role → Send Invitation
2. User Receives Invitation
Email → Click Link → Welcome Page → Start Wizard
3. Wizard Flow
Step 1: Review Content (multiple steps based on role)
↓
Step 2: Review and Acknowledge Checklist Items
↓
Step 3: Digital Signature
↓
Step 4: Create Username & Password
↓
Completion: Account Activated
4. Admin Monitors Progress
Admin → Provisional Users → View Progress → See Acknowledgements
URL Routes
API Endpoints
POST /api/accounts/users/onboarding/create-provisional/- Create provisional userPOST /api/accounts/users/{id}/onboarding/resend-invitation/- Resend invitationGET /api/accounts/users/onboarding/progress/- Get progressGET /api/accounts/users/onboarding/content/- Get contentGET /api/accounts/users/onboarding/checklist/- Get checklistPOST /api/accounts/users/onboarding/acknowledge/- Acknowledge itemPOST /api/accounts/users/onboarding/complete/- Complete wizardGET /api/accounts/users/{id}/onboarding/status/- Get status
UI Endpoints
/accounts/onboarding/welcome/- Welcome page/accounts/onboarding/wizard/step/{step}/- Content steps/accounts/onboarding/wizard/checklist/- Checklist/accounts/onboarding/wizard/activation/- Activation/accounts/onboarding/complete/- Completion/accounts/onboarding/provisional/- Provisional user list/accounts/onboarding/provisional/{id}/progress/- User progress/accounts/onboarding/content/- Content management/accounts/onboarding/checklist-items/- Checklist management
Templates
Wizard Templates
welcome.html- Welcome page with overviewstep_content.html- Content review step with progress sidebarstep_checklist.html- Checklist with digital signature canvasstep_activation.html- Account activation with password strength indicatorcomplete.html- Success page with next steps
Management Templates (To Be Created)
provisional_list.html- List and create provisional usersprogress_detail.html- View detailed progress for a usercontent_list.html- Manage educational contentchecklist_list.html- Manage checklist items
Email Templates (To Be Created)
invitation_email.html- Invitation emailreminder_email.html- Reminder emailcompletion_notification.html- Admin notification
Signals
post_save - User
log_provisional_user_creation: Log when provisional user is createdcheck_onboarding_completion: Check if all required items are completedlog_account_activation: Log when account is activated
post_save - UserAcknowledgement
log_acknowledgement: Log when item is acknowledged
Database Migrations
Run these migrations to create the onboarding tables:
python manage.py makemigrations accounts
python manage.py migrate accounts
Setup Instructions
1. Create Initial Content
Create role-specific educational content:
# Example: PX Admin content
AcknowledgementContent.objects.create(
code='px_admin_overview',
role='px_admin',
title_en='PX360 System Overview',
title_ar='نظرة عامة على نظام PX360',
description_en='Understanding the PX360 system architecture and features',
description_ar='فهم بنية وميزات نظام PX360',
content_en='<p>Detailed HTML content...</p>',
content_ar='<p>محتوى HTML مفصل...</p>',
icon='cogs',
color='#007bff',
order=1,
is_active=True
)
2. Create Checklist Items
Create acknowledgement checklist items:
# Example: Required acknowledgement
AcknowledgementChecklistItem.objects.create(
code='data_privacy',
role='all',
text_en='I acknowledge that I have read and understood the Data Privacy Policy',
text_ar='أقر بأنني قرأت وفهمت سياسة خصوصية البيانات',
description_en='Commitment to protecting patient data',
description_ar='الالتزام بحماية بيانات المرضى',
is_required=True,
order=1,
is_active=True
)
3. Create Provisional User
As a PX Admin:
# Via API
POST /api/accounts/users/onboarding/create-provisional/
{
"email": "new.user@example.com",
"first_name": "John",
"last_name": "Doe",
"roles": ["staff"]
}
# Via UI
Navigate to /accounts/onboarding/provisional/ and fill the form
4. User Completes Onboarding
- User clicks invitation link
- Goes through wizard steps
- Acknowledges all required items
- Provides digital signature
- Creates username and password
- Account is activated
5. Monitor Progress
# Get user progress
GET /api/accounts/users/onboarding/progress/
# View detailed progress
GET /accounts/onboarding/provisional/{user_id}/progress/
Customization
Role-Specific Content
Content and checklist items can be assigned to specific roles:
px_admin: PX Administratorshospital_admin: Hospital Administratorsdepartment_manager: Department Managersstaff: Staff membersphysician: Physiciansall: All users
Digital Signature
The system uses HTML5 Canvas for digital signature capture. Signature is stored as base64-encoded image in the UserAcknowledgement model.
Email Templates
Customize email templates in templates/accounts/emails/:
invitation_email.html: Invitation emailreminder_email.html: Reminder emailcompletion_notification.html: Admin notification
Security Considerations
- Invitation Links: Single-use tokens with expiration (default 7 days)
- Digital Signatures: Capture IP address and user agent
- Audit Trail: All onboarding events are logged
- Role-Based Access: Content and checklist items filtered by role
- Password Requirements: Minimum 8 characters with strength indicator
Compliance Features
- Audit Trail: Complete log of all onboarding activities
- Digital Signatures: Legally-binding acknowledgements
- Timestamp Records: Exact time of each acknowledgement
- IP Address Logging: Track user location
- Content Versioning: Track which version of content was acknowledged
Monitoring and Reporting
User Progress
from apps.accounts.models import User, UserAcknowledgement
# Get all provisional users
provisional_users = User.objects.filter(is_provisional=True)
# Get completed users
completed_users = User.objects.filter(
is_provisional=False,
acknowledgement_completed=True
)
# Get user progress
user = User.objects.get(id=user_id)
progress = user.get_onboarding_progress_percentage()
Acknowledgement Reports
# Get all acknowledgements for a user
acknowledgements = UserAcknowledgement.objects.filter(user=user)
# Get acknowledgements for a specific item
item_acknowledgements = UserAcknowledgement.objects.filter(
checklist_item=item
)
# Get acknowledgement statistics
total_users = User.objects.filter(is_active=True).count()
total_acknowledged = UserAcknowledgement.objects.filter(
is_acknowledged=True
).values('user').distinct().count()
Troubleshooting
User Cannot Access Wizard
- Check if user is provisional:
user.is_provisional - Check if invitation is expired:
user.invitation_expires_at - Verify user has at least one role assigned
Progress Not Saving
- Check browser console for API errors
- Verify JWT token is valid
- Check UserAcknowledgement records
Email Not Sending
- Verify email configuration in settings.py
- Check mail server logs
- Verify email template exists
Future Enhancements
- Content Localization: Add more language support
- Video Integration: Add video content to learning materials
- Quiz Mode: Add quizzes to verify understanding
- Certificate Generation: Generate completion certificates
- Bulk Import: Import multiple provisional users at once
- Reminders: Automatic reminder emails for inactive users
- Analytics Dashboard: Visual progress tracking
- Content Versioning: Track content changes and updates
Support
For issues or questions:
- Check this documentation
- Review audit logs in
UserProvisionalLog - Check Django logs for errors
- Contact system administrator
Last Updated: January 2026 Version: 1.0.0