Skip to content

Commit e76187c

Browse files
committed
allow device issues to be hidden from the dashboard
Clinicians can dismiss a device issue by setting its hidden attribute (a timestamp): via the patient update endpoint; only the hidden attribute is writable by clients. The patients list endpoint gains an omitHiddenDeviceIssues parameter that redacts hidden issues from the response and drops patients left without any visible issues. Re-detection preserves a hidden dismissal: the periodic scan sets individual issue fields rather than replacing the subdocument, and the disconnected/erroring queries skip data sources whose issue is already hidden for the same provider. BACK-4316
1 parent cb56f9b commit e76187c

17 files changed

Lines changed: 1049 additions & 250 deletions

File tree

api/gen_server.go

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/gen_spec.go

Lines changed: 226 additions & 225 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/gen_types.go

Lines changed: 8 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/mappers.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,34 +408,54 @@ func NewDeviceIssuesDto(deviceIssues patients.DeviceIssues) *DeviceIssuesV1 {
408408
ProviderId: ProviderIdV1(deviceIssues.StaleData.ProviderId),
409409
}
410410
}
411+
if !deviceIssues.StaleData.Hidden.IsZero() {
412+
hidden := DatetimeV1(deviceIssues.StaleData.Hidden.Format(time.RFC3339Nano))
413+
issues.StaleData.Hidden = &hidden
414+
}
411415

412416
if et := deviceIssues.ExpiredConnectionInvitation.EffectiveTime; !et.IsZero() {
413417
issues.ExpiredConnectionInvitation = DeviceIssueV1{
414418
EffectiveTime: et.Format(time.RFC3339Nano),
415419
ProviderId: ProviderIdV1(deviceIssues.ExpiredConnectionInvitation.ProviderId),
416420
}
417421
}
422+
if !deviceIssues.ExpiredConnectionInvitation.Hidden.IsZero() {
423+
hidden := DatetimeV1(deviceIssues.ExpiredConnectionInvitation.Hidden.Format(time.RFC3339Nano))
424+
issues.ExpiredConnectionInvitation.Hidden = &hidden
425+
}
418426

419427
if et := deviceIssues.StaleConnectionInvitation.EffectiveTime; !et.IsZero() {
420428
issues.StaleConnectionInvitation = DeviceIssueV1{
421429
EffectiveTime: et.Format(time.RFC3339Nano),
422430
ProviderId: ProviderIdV1(deviceIssues.StaleConnectionInvitation.ProviderId),
423431
}
424432
}
433+
if !deviceIssues.StaleConnectionInvitation.Hidden.IsZero() {
434+
hidden := DatetimeV1(deviceIssues.StaleConnectionInvitation.Hidden.Format(time.RFC3339Nano))
435+
issues.StaleConnectionInvitation.Hidden = &hidden
436+
}
425437

426438
if et := deviceIssues.Disconnected.EffectiveTime; !et.IsZero() {
427439
issues.Disconnected = DeviceIssueV1{
428440
EffectiveTime: et.Format(time.RFC3339Nano),
429441
ProviderId: ProviderIdV1(deviceIssues.Disconnected.ProviderId),
430442
}
431443
}
444+
if !deviceIssues.Disconnected.Hidden.IsZero() {
445+
hidden := DatetimeV1(deviceIssues.Disconnected.Hidden.Format(time.RFC3339Nano))
446+
issues.Disconnected.Hidden = &hidden
447+
}
432448

433449
if et := deviceIssues.Erroring.EffectiveTime; !et.IsZero() {
434450
issues.Erroring = DeviceIssueV1{
435451
EffectiveTime: et.Format(time.RFC3339Nano),
436452
ProviderId: ProviderIdV1(deviceIssues.Erroring.ProviderId),
437453
}
438454
}
455+
if !deviceIssues.Erroring.Hidden.IsZero() {
456+
hidden := DatetimeV1(deviceIssues.Erroring.Hidden.Format(time.RFC3339Nano))
457+
issues.Erroring.Hidden = &hidden
458+
}
439459

440460
return issues
441461
}
@@ -483,10 +503,44 @@ func NewPatient(dto PatientV1) patients.Patient {
483503
dt := patients.DiagnosisType(*dto.DiagnosisType)
484504
patient.DiagnosisType = &dt
485505
}
506+
if dto.DeviceIssues != nil {
507+
patient.DeviceIssues = NewDeviceIssues(*dto.DeviceIssues)
508+
}
486509

487510
return patient
488511
}
489512

513+
func NewDeviceIssues(dto DeviceIssuesV1) patients.DeviceIssues {
514+
di := patients.DeviceIssues{}
515+
516+
if dto.Disconnected.Hidden != nil {
517+
ht, _ := time.Parse(time.RFC3339, *dto.Disconnected.Hidden)
518+
di.Disconnected.Hidden = ht
519+
}
520+
521+
if dto.Erroring.Hidden != nil {
522+
ht, _ := time.Parse(time.RFC3339, *dto.Erroring.Hidden)
523+
di.Erroring.Hidden = ht
524+
}
525+
526+
if dto.ExpiredConnectionInvitation.Hidden != nil {
527+
ht, _ := time.Parse(time.RFC3339, *dto.ExpiredConnectionInvitation.Hidden)
528+
di.ExpiredConnectionInvitation.Hidden = ht
529+
}
530+
531+
if dto.StaleConnectionInvitation.Hidden != nil {
532+
ht, _ := time.Parse(time.RFC3339, *dto.StaleConnectionInvitation.Hidden)
533+
di.StaleConnectionInvitation.Hidden = ht
534+
}
535+
536+
if dto.StaleData.Hidden != nil {
537+
ht, _ := time.Parse(time.RFC3339, *dto.StaleData.Hidden)
538+
di.StaleData.Hidden = ht
539+
}
540+
541+
return di
542+
}
543+
490544
func NewPatientFromCreate(dto CreatePatientV1, clinicSites []sites.Site) patients.Patient {
491545
patient := patients.Patient{
492546
Permissions: NewPermissions(dto.Permissions),

api/patients.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ func (h *Handler) ListPatients(ec echo.Context, clinicId ClinicId, params ListPa
5757
filter.OmitNonStandardRanges = params.OmitNonStandardRanges != nil &&
5858
*params.OmitNonStandardRanges
5959

60+
filter.OmitHiddenDeviceIssues = params.OmitHiddenDeviceIssues
61+
6062
if params.DeviceIssues != nil && len(*params.DeviceIssues) > 0 {
6163
issues := make([]string, 0, len(*params.DeviceIssues))
6264
for _, deviceIssue := range *params.DeviceIssues {

client/client.go

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

client/types.go

Lines changed: 8 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)