All checks were successful
Build and Push Docker Image / build (push) Successful in 4m14s
Reference numbers (unified scheme PREFIX-YYYYMM-HOSP-NNNN, e.g. CMP-202606-HHN-0001): - new ReferenceSequence model + generate_reference() helper (apps/core) - Complaint/Inquiry/Observation/Appreciation/Suggestion emit unified refs via save() - prefix-based auto-routing in public track API (CMP/INQ/OBS trackable; APR/SGT internal-only) - removed legacy CMP-/INQ- generators in ui_views, integrations, px_sources - migrations: core.0003_referencesequence, appreciation.0006, feedback.0008, observations.0012 - unit tests (format, sanitization, monthly reset, 40-thread concurrency) QA audit: - isolated E2E hospital sandbox mirroring HH-N + 10 role users (create_e2e_isolated_env) - feedback-modules-audit.spec.ts + audit helper (headed, run-to-completion) - reports/feedback-modules-qa-report.md Also bundles accumulated in-progress work across complaints, observations, organizations, templates, and other modules.
4.0 KiB
4.0 KiB
Plan: Unify Department Response + Add Reporter Notifications
Goal
- Make all three types use the same department response approach (token-based, no login)
- Add reporter notifications for complaint/inquiry when department responds
1. UNIFY DEPARTMENT RESPONSE (Token-Based for All)
Current State
- Complaint: Uses
ComplaintExplanationmodel with token links — champion clicks link, submits explanation without login - Observation: Champion logs into system, navigates to department detail page, submits response via form
- Inquiry: Same as observation — login required
Target State
All three use token-based links (like complaint):
- PX team sends to department → champion receives email with one-time link
- Champion clicks link → submits response without login
- Link expires after use
Changes Needed
a) Create shared DepartmentResponse model (or reuse existing patterns)
Better approach: Create a token-based response flow for observation and inquiry similar to complaint's ComplaintExplanation.
New model in apps/organizations/models.py (or apps/core/models.py):
class DepartmentResponseToken(UUIDModel, TimeStampedModel):
"""Token-based department response link for observations and inquiries."""
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.UUIDField()
content_object = GenericForeignKey('content_type', 'object_id')
department = models.ForeignKey('organizations.Department', on_delete=models.CASCADE)
staff = models.ForeignKey('organizations.Staff', on_delete=models.CASCADE)
token = models.CharField(max_length=100, unique=True)
is_used = models.BooleanField(default=False)
responded_at = models.DateTimeField(null=True, blank=True)
# SLA
sla_due_at = models.DateTimeField(null=True, blank=True)
is_overdue = models.BooleanField(default=False)
class Meta:
indexes = [models.Index(fields=['token'])]
Actually, simpler approach: just add token fields to the existing models and create views for token-based response.
For Observation (apps/observations/models.py):
- Add
response_tokenfield (CharField, unique, nullable) - Add
response_token_used(BooleanField, default=False) - Add
response_token_sent_at(DateTimeField, nullable)
For Inquiry (apps/complaints/models.py):
- Add same fields to Inquiry model
b) Create token-based response views
observation_respond_with_token(request, pk, token)— public view, no auth requiredinquiry_respond_with_token(request, pk, token)— public view, no auth required
c) Update "Send to Department" views
- Generate token, include in email link
- Email template similar to complaint's explanation request
d) Update department detail page
- Remove direct response forms (or keep as fallback for logged-in users)
- Show token-based response status instead
2. ADD REPORTER NOTIFICATIONS
Current State
- Complaint: No notification to complainant when department responds
- Observation: SMS + email to reporter when department responds ✓
- Inquiry: No notification to inquirer when department responds
Changes Needed
a) Complaint — notify complainant on department response
File: apps/complaints/ui_views.py (in involved_department_response view)
- After department submits response, send SMS + email to complainant
- Include tracking link
b) Inquiry — notify inquirer on department response
File: apps/complaints/ui_views.py (in inquiry_department_response view)
- After department submits response, send SMS + email to inquirer
- Include tracking link
Implementation Order
- Add token fields to Observation and Inquiry models
- Create token-based response views for both
- Update "Send to Department" to generate tokens and send email links
- Add reporter notifications to complaint and inquiry department response flows
- Update templates
- Create migration