import { Address, HumanName } from './fhir-types'; export interface AddressFormatOptions { all?: boolean; use?: boolean; lineSeparator?: string; } export interface HumanNameFormatOptions { all?: boolean; prefix?: boolean; suffix?: boolean; use?: boolean; } export function formatAddress(address: Address, options?: AddressFormatOptions): string { const builder = []; if (address.line) { builder.push(...address.line); } if (address.city || address.state || address.postalCode) { const cityStateZip = []; if (address.city) { cityStateZip.push(address.city); } if (address.state) { cityStateZip.push(address.state); } if (address.postalCode) { cityStateZip.push(address.postalCode); } builder.push(cityStateZip.join(', ')); } if (address.use && (options?.all || options?.use)) { builder.push('[' + address.use + ']'); } return builder.join(options?.lineSeparator || ', ').trim(); } export function formatHumanName(name: HumanName, options?: HumanNameFormatOptions): string { const builder = []; if (name.prefix && options?.prefix !== false) { builder.push(...name.prefix); } if (name.given) { builder.push(...name.given); } if (name.family) { builder.push(name.family); } if (name.suffix && options?.suffix !== false) { builder.push(...name.suffix); } if (name.use && (options?.all || options?.use)) { builder.push('[' + name.use + ']'); } return builder.join(' ').trim(); }