/** Who to message about a correction, and the message to send them. */ import type { Condition, Procedure, Reference } from 'fhir/r4'; // A correction goes through messaging to whoever authored the record, never an edit in place. export const resolveProcedureAuthorReference = (procedure: Procedure): Reference | undefined => { const performer = procedure.performer?.find((p) => p.actor?.reference?.startsWith('Practitioner/'))?.actor; if (performer) return performer; if (procedure.recorder?.reference?.startsWith('Practitioner/')) return procedure.recorder; if (procedure.asserter?.reference?.startsWith('Practitioner/')) return procedure.asserter; return undefined; }; // Only a care-team record is corrected by request; a patient's own Condition is edited directly. export const isConditionRecordedByCareTeam = (condition: Condition): boolean => [condition.recorder?.reference, condition.asserter?.reference] .some((reference) => /^(Practitioner|PractitionerRole)\//.test(reference ?? '')); export const isProcedureRecordedByCareTeam = (procedure: Procedure): boolean => [...(procedure.performer ?? []).map((p) => p.actor?.reference), procedure.recorder?.reference, procedure.asserter?.reference] .some((reference) => /^(Practitioner|PractitionerRole)\//.test(reference ?? '')); export const resolveConditionAuthorReference = (condition: Condition): Reference | undefined => { if (condition.recorder?.reference?.startsWith('Practitioner/')) return condition.recorder; if (condition.asserter?.reference?.startsWith('Practitioner/')) return condition.asserter; return undefined; }; export const buildCorrectionRequestMessage = (recordLabel: string, note: string): string => `I'd like to request a correction to this record: ${recordLabel}. Here's what I think is wrong: ${note.trim()}`;