import './personal-record-source.css'; const SOURCE = 'https://akashichealthrecords.com/fhir/StructureDefinition/personal-external-source'; const object = (value: unknown): Record | undefined => value && typeof value === 'object' && !Array.isArray(value) ? value as Record : undefined; const entries = (value: unknown) => Array.isArray(value) ? value : []; const markers = (resource: unknown) => entries(object(resource)?.extension).filter(value => object(value)?.url === SOURCE); export const hasPersonalRecordSource = (resource: unknown) => markers(resource).length > 0; const text = (value: unknown) => typeof value === 'string' && value.trim() ? value : undefined; const source = (resource: unknown) => { const found = markers(resource); if (found.length !== 1) return undefined; const values = entries(object(found[0])?.extension); const field = (name: string) => { const matches = values.filter(value => object(value)?.url === name); if (matches.length !== 1) return undefined; const row = object(matches[0]); return text(row?.valueString ?? row?.valueUri ?? row?.valueDateTime); }; const item = field('source'), edition = field('source-edition'), version = field('original-version'), sha256 = field('original-sha256'), at = field('retrieved-at'); if (!item || !/^https:\/\/[^\s?#]+$/.test(item) || !edition || !version || version === 'null' || !sha256 || !/^[a-f0-9]{64}$/.test(sha256) || !at || !Number.isFinite(Date.parse(at)) || !field('operation') || !field('acceptance') || !field('mapping')) return undefined; return { item, edition, version, sha256, at }; }; const reference = (value: unknown) => { const row = object(value), identifier = object(row?.identifier); return text(row?.display) ?? text(identifier?.value) ?? text(row?.reference); }; export const PersonalRecordSource = ({ resource, className }: { resource?: unknown; className?: string }) => { const row = object(resource), details = source(resource); const authors = ['requester', 'recorder', 'asserter', 'informationSource', 'performer'].flatMap(name => { const value = row?.[name]; return (Array.isArray(value) ? value : [value]).flatMap(value => { const label = reference(object(value)?.actor ?? value); return label ? [name + ': ' + label] : []; }); }); const dates = ['authoredOn', 'recordedDate', 'issued', 'effectiveDateTime', 'occurrenceDateTime', 'performedDateTime', 'onsetDateTime'].flatMap(name => { const value = text(row?.[name]); return value ? ['Source ' + name + ': ' + value] : []; }); return Imported external record {details ? <> {details.item} · edition {details.edition} Retrieved: {details.at} Retained original version {details.version} · SHA256 {details.sha256} : External source details are incomplete; check the retained original.} {text(row?.status) && Source status: {text(row?.status)}} {dates.map(value => {value})} {authors.map((value, index) => Source {value})} {row?.resourceType === 'MedicationRequest' && This external medication request does not prescribe or send an order.} ; };