{"version":3,"file":"index.modern.mjs","sources":["../src/current-version.js","../src/migrations.js","../src/utils/waveform-svg-validation.js","../src/types.js","../src/definition.js","../src/migration-utils.js","../src/utils/numbers.js","../src/utils/object.js","../src/utils/selectors-lib.js","../src/utils/selector-utils.js","../src/topics/sedation-level.js","../src/actions/presets.js","../src/airway-types.js","../src/utils/id.js","../src/utils/crud-prop.js","../src/topics/airway.js","../src/utils/add-diff-units.js","../src/utils/case-prop-selector.js","../src/topics/case-props.js","../src/utils/sort-by.js","../src/utils/decimals.js","../src/utils/anesthesia-units.js","../src/topics/events.js","../src/topics/drugs-administered.js","../src/utils/dose-prop.js","../src/topics/height-weight.js","../src/topics/infusion-drug.js","../src/utils/is.js","../src/topics/oral-sedative.js","../src/topics/paren-drug.js","../src/topics/fluids.js","../src/topics/drug-totals.js","../src/topics/case-summary.js","../src/topics/case-analytics.js","../src/utils/is-required-checkpoint.js","../src/vital-types.js","../src/topics/vital-type.js","../src/utils/temperature-utils.js","../src/topics/vitals.js","../src/topics/vitals-interval.js","../src/topics/checkpoints.js","../src/topics/custom-events.js","../src/topics/manual-vitals.js","../src/topics/position.js","../src/topics/case-events.js","../src/utils/discharge-score.js","../src/topics/numeric-vitals.js","../src/topics/discharge-scoring.js","../src/utils/drug-sort.js","../src/pre-procedure-drugs.js","../src/topics/pre-proc-sedatives.js","../src/topics/health.js","../src/topics/inhalation-drug.js","../node_modules/milliseconds/milliseconds.js","../src/local-anesthetics.js","../src/utils/convert-la.js","../src/utils/dilute-locals-ratio.js","../src/utils/format.js","../src/topics/la-dilutions.js","../src/topics/local-drug.js","../src/topics/pre-meds.js","../src/topics/systems-review.js","../src/utils/case-hhx-utils.js","../src/topics/macros.js","../src/topics/patient-measurements.js","../src/utils/checklist-helper.js","../src/topics/opt-checks.js","../src/topics/pre-op-checks.js","../src/inhalation-agents.js","../src/utils/dose-per-kg.js","../src/topics/report-selectors.js","../src/topics/ready-for-review.js","../src/topics/signatures.js","../src/topics/vitals-data-reference.js","../src/topics/waveforms.js","../src/match-case.js","../src/utils/height-utils.js","../src/utils/weight-utils.js","../src/utils/string-means-none.js","../src/utils/merge-hhx.js","../src/drug-routes.js"],"sourcesContent":["export const currentVersion = 1\n","//@ts-check\nexport const migrationFunctions = {\n  // this migration renames all cp ids to be `cp_{{timestamp}}` instead of `cp_{{index integer}}`\n  // it also adds 'vitalsCheckpoints.{}.time': 'timestamp'\n  1: caseData => {\n    const {\n      vitalsCheckpoints,\n      vitalRecords,\n      autoVitalRecords,\n      events,\n      vitalsInterval,\n      customEvents,\n    } = caseData\n    const { caseStart } = events || {}\n    if (!caseStart) {\n      return null\n    }\n    if (\n      !vitalsCheckpoints &&\n      !vitalRecords &&\n      !autoVitalRecords &&\n      !customEvents\n    ) {\n      return null\n    }\n\n    const intervalInMilliseconds = (vitalsInterval || 5) * 60000\n\n    const getCheckpointTimeForInt = int => {\n      // if we get a high value here, the update has already been applied\n      if (int > 1000) {\n        return int\n      }\n      return int * intervalInMilliseconds + caseStart\n    }\n\n    const getIntFromName = name => Number(name.split('_')[1])\n\n    const getNewCheckpointName = name =>\n      `cp_${getCheckpointTimeForInt(getIntFromName(name))}`\n\n    const keysWithCheckpoints = [\n      'vitalsCheckpoints',\n      'vitalRecords',\n      'autoVitalRecords',\n    ]\n    let changes = {}\n    for (const key of keysWithCheckpoints) {\n      for (const cpName in caseData[key]) {\n        const value = caseData[key][cpName]\n        changes[`${key}.${cpName}`] = null\n        const checkpointInt = getIntFromName(cpName)\n        const time = getCheckpointTimeForInt(checkpointInt)\n        const newName = `cp_${time}`\n        // this one we also add the time\n        if (key === 'vitalsCheckpoints') {\n          changes[`vitalsCheckpoints.${newName}`] = {\n            complete: !!value.complete,\n            time,\n          }\n        } else {\n          changes[`${key}.${newName}`] = value\n        }\n      }\n    }\n\n    if (customEvents) {\n      for (const id in customEvents) {\n        const event = customEvents[id]\n        if (event.checkpointId) {\n          changes[`customEvents.${id}.checkpointId`] = getNewCheckpointName(\n            event.checkpointId\n          )\n        }\n      }\n    }\n\n    return changes\n  },\n}\n","export const isValidWaveformSVG = svg => {\n  // Lowercase everything for case-insensitive comparison\n  svg = svg.toLowerCase()\n\n  // Ensure it starts with <svg and ends with </svg>\n  if (!svg.startsWith('<svg') || !svg.endsWith('</svg>')) {\n    return false\n  }\n\n  // Check for event handler attributes\n  if (/\\son\\w*=/g.test(svg)) {\n    return false // Fail validation if any event handlers are found\n  }\n\n  // Remove all instances of allowed tags to see if anything else is left over\n  const cleanedSvg = svg\n    .replace(/<\\/?(svg|rect|path)[^>]*>/g, '') // Remove allowed tags\n    .replace(/\\s+/g, '') // Remove whitespace to ignore spaces between tags\n\n  // If anything other than whitespace is left, it's an invalid tag\n  if (cleanedSvg.trim().length > 0) {\n    return false\n  }\n\n  // The SVG is valid if it only contains allowed tags, no event handlers, and passes the above checks\n  return true\n}\n","// @ts-check\nimport { basicTypes } from 'sinks'\nimport isFhirDate from 'is-fhir-date'\nimport { isValidWaveformSVG } from './utils/waveform-svg-validation'\n\nexport default {\n  ...basicTypes,\n  fhirDate: isFhirDate,\n  drugRoute: basicTypes.matches([\n    'PO',\n    'SL',\n    'IM',\n    'IV',\n    'IMAD',\n    'IN',\n    'local',\n    'infusion',\n    'infusionBolus',\n    'inhalation',\n    'fluid',\n    'fluidBolus',\n    'syringeFlush',\n  ]),\n  sedationDepth: basicTypes.matches(['moderate', 'deep', 'ga']),\n  parenDrugRoute: basicTypes.matches(['IV', 'IMAD', 'IM', 'IN']),\n  oralSedativeRoute: basicTypes.matches(['PO', 'SL']),\n  infusionRoute: basicTypes.matches(['infusion', 'infusionBolus']),\n  localDoseUnit: basicTypes.matches(['ml', 'mg', 'cartridges']),\n  drugUnit: basicTypes.matches(['mg', 'mcg']),\n  airwayType: basicTypes.matches([\n    'nc',\n    'nt',\n    'nh',\n    'cpap',\n    'mad',\n    'et',\n    'ntt',\n    'lma',\n    'opa',\n    'fm',\n    'other',\n  ]),\n  waveSvg: isValidWaveformSVG,\n}\n","import { buildDefinition } from 'sinks'\nimport types from './types.js'\n\nexport const caseDataDefinitionBare = {\n  // version number for tracking/applying migrations\n  version: 'int',\n\n  // applied preset id\n  appliedPreset: 'str',\n\n  // identifiers\n  caseId: 'str',\n\n  // provider\n  sedationProviderName: 'str',\n  surgeonName: 'str',\n  recorderName: 'str',\n  office: 'str',\n\n  // case info\n  procedure: 'str',\n  procedureDate: 'fhirDate',\n  reasonForSedation: 'str',\n  responsibleCompanion: 'str',\n  responsibleCompanionSignature: 'str',\n  sedationLevel: 'str',\n  present: 'str',\n  oralSedativesEnabled: 'bool',\n  ivEnabled: 'bool',\n  airwayEnabled: 'bool',\n  userRole: 'str',\n  calculateDrugWaste: 'bool',\n  vitalsInterval: 'num',\n  vitalsTrackingEnabled: 'bool',\n\n  'trackedVitalTypes.{}.selected': 'bool',\n  'trackedVitalTypes.{}.ignored': 'bool',\n  'trackedVitalTypes.{}.hasReceivedAutoValue': 'bool',\n\n  // patient\n  firstName: 'str',\n  lastName: 'str',\n  nickname: 'str',\n  birthDate: 'str',\n  height: 'num',\n  height_raw: 'str',\n  weight: 'num',\n  weight_raw: 'str',\n  allergiesSummary: 'str',\n  anesthesiaHistorySummary: 'str',\n  familyAnesthesiaHistorySummary: 'str',\n  surgicalHistorySummary: 'str',\n  hospitalizationSummary: 'str',\n  pregnant: 'str',\n  pregnancyDetail: 'str',\n  breastfeeding: 'bool',\n  breastfeedingInstructionsGiven: 'bool',\n  lastFood: 'str',\n  lastDrink: 'str',\n  healthHistoryId: 'str',\n  healthHistoryReviewedTime: 'timestamp',\n  // used when receiving a health history from the API\n  // or pasted from an EMR.\n  healthHistorySummary: 'str',\n  // Used as additional notes for health history\n  healthHistoryNotes: 'str',\n  medicalConsult: 'bool',\n  medicalConsultNotes: 'str',\n\n  // medications\n  medicationsText: 'str',\n  medications: 'arr',\n  'medications.[].id': 'str',\n  'medications.[].name': 'str',\n\n  // preop\n  'preOpChecks.[]': 'str', // deprecated\n\n  // pre-op checks\n  'preOpChecklist.{}.label': 'str',\n  'preOpChecklist.{}.complete': 'bool',\n  'preOpChecklist.{}.order': 'num',\n\n  // opt checks\n  'optChecks.{}.label': 'str',\n  'optChecks.{}.complete': 'bool',\n  'optChecks.{}.order': 'num',\n\n  // physical assessment\n  lungAuscultation: 'str',\n  heartAuscultation: 'str',\n  preProcedureRiskAssessment: 'str',\n  weightDistribution: 'str',\n\n  // airway assessment\n  mallampati: 'str',\n  asaClassification: 'str',\n  brodsky: 'str',\n  ulbt: 'str',\n  tmd: 'str',\n  iid: 'str',\n\n  // systems review\n  'systemsReview.{}.hasEntries': 'bool',\n  'systemsReview.{}.entries': 'arr',\n  'systemsReview.{}.entries.[].editing': 'bool',\n  'systemsReview.{}.entries.[].details.{}': 'str',\n  'systemsReview.{}.entries.[].details.{}.name': 'str',\n  'systemsReview.{}.entries.[].details.{}.label': 'str',\n  'systemsReview.{}.entries.[].details.{}.path': 'str',\n  'systemsReview.{}.entries.[].details.{}.value': 'str',\n\n  // checkpoints\n  'vitalsCheckpoints.{}.complete': 'bool',\n  'vitalsCheckpoints.{}.time': 'timestamp',\n\n  'vitalRecords.{}.id': 'str', // deprecated: should not be getting set anymore\n  'vitalRecords.{}.vitals.{}.id': 'str', // deprecated: should not be getting set anymore\n  'vitalRecords.{}.vitals.{}.value': ['str', 'num'],\n\n  'autoVitalRecords.{}.vitals.{}.value': ['str', 'num'],\n  'autoVitalRecords.{}.vitals.{}.time': 'timestamp',\n  'autoVitalRecords.{}.vitals.{}.connectionId': 'str',\n  'autoVitalRecords.{}.vitals.{}.monitorType': 'str',\n\n  // manual vitals (not checkpointed)\n  'mv.{}.time': 'timestamp',\n  'mv.{}.vitals.sbp': 'num',\n  'mv.{}.vitals.dbp': 'num',\n  'mv.{}.vitals.rr': 'num',\n  'mv.{}.vitals.hr': 'num',\n  'mv.{}.vitals.spo2': 'num',\n  'mv.{}.vitals.etco2': 'num',\n\n  // patient measurements taken as part of health history gathering\n  'pm.{}.time': 'timestamp',\n  'pm.{}.vitals.sbp': 'num',\n  'pm.{}.vitals.dbp': 'num',\n  'pm.{}.vitals.rr': 'num',\n  'pm.{}.vitals.hr': 'num',\n  'pm.{}.vitals.spo2': 'num',\n  'pm.{}.vitals.etco2': 'num',\n\n  // connected monitor meta\n  connectedMonitorType: 'str',\n  // kept for backward compatibility (can remove later)\n  lastKnowActiveBPCuffTime: 'timestamp',\n  lastKnownActiveBPCuffTime: 'timestamp',\n\n  // pre-med\n  preMedsUsed: 'bool',\n  'preMedsAdministered.{}.rxcui': 'str',\n  'preMedsAdministered.{}.route': 'str',\n  'preMedsAdministered.{}.unit': 'str',\n  'preMedsAdministered.{}.editing': 'bool',\n  'preMedsAdministered.{}.time': 'timestamp',\n  'preMedsAdministered.{}.dosage': 'str',\n  'preMedsAdministered.{}.drugName': 'str',\n  'preMedsAdministered.{}.drugId': 'str',\n\n  // drugs\n  'drugsAdministered.{}.id': 'str',\n  'drugsAdministered.{}.time': 'timestamp',\n  'drugsAdministered.{}.name': 'str',\n  'drugsAdministered.{}.drugId': 'str',\n  'drugsAdministered.{}.rxcui': 'str',\n  'drugsAdministered.{}.drugVariantId': 'str',\n  'drugsAdministered.{}.epiConcentration': 'num',\n  'drugsAdministered.{}.amount': 'num',\n  'drugsAdministered.{}.amount_raw': 'str',\n  'drugsAdministered.{}.shouldStartCase': 'bool',\n  'drugsAdministered.{}.unit': 'str',\n  'drugsAdministered.{}.route': 'drugRoute',\n  'drugsAdministered.{}.editing': 'bool',\n  'drugsAdministered.{}.siteId': 'str',\n  'drugsAdministered.{}.bagId': 'str',\n\n  // paren drug dosages\n  'drugDosage.iv.doses.{}.time': 'timestamp',\n  'drugDosage.iv.doses.{}.amount_raw': 'str',\n  'drugDosage.iv.doses.{}.wasted_raw': 'str',\n  'drugDosage.iv.doses.{}.drawAmountTemp_raw': 'str',\n  'drugDosage.iv.doses.{}.totalDrawn_raw': 'str',\n  'drugDosage.iv.doses.{}.wasteConfirmed': 'bool',\n  'drugDosage.iv.doses.{}.route': 'parenDrugRoute',\n  'drugDosage.iv.doses.{}.meta': 'str',\n\n  // infusion drug dosage\n  'drugDosage.infusion.doses.{}.time': 'timestamp',\n  'drugDosage.infusion.doses.{}.amount_raw': 'str',\n  // num deprecated as of (Dec 2022)\n  'drugDosage.infusion.doses.{}.wasted_raw': ['str', 'num'],\n  'drugDosage.infusion.doses.{}.used_raw': ['str', 'num'],\n  'drugDosage.infusion.doses.{}.route': 'infusionRoute',\n  'drugDosage.infusion.doses.{}.unit': 'str',\n  'drugDosage.infusion.doses.{}.bolusUnit': 'str',\n  'drugDosage.infusion.doses.{}.wasteConfirmed': 'bool',\n  'drugDosage.infusion.doses.{}.totalUnit': 'str',\n  'drugDosage.infusion.doses.{}.kg': 'str',\n  'drugDosage.infusion.doses.{}.meta': 'str',\n\n  // inhalation drug dosage\n  'drugDosage.inhalation.doses.{}.time': 'timestamp',\n  'drugDosage.inhalation.doses.{}.drugId': 'str', // not used but set on older cases\n  'drugDosage.inhalation.doses.{}.amount': 'num',\n\n  // oral sedative dosage\n  'drugDosage.oral.doses.{}.time': 'timestamp',\n  'drugDosage.oral.doses.{}.amount_raw': 'str',\n  'drugDosage.oral.doses.{}.route': 'oralSedativeRoute',\n\n  // local anesthetics dosage\n  'drugDosage.local.doses.{}.time': 'timestamp',\n  'drugDosage.local.doses.{}.amount_raw': 'str',\n  'drugDosage.local.doses.{}.unit': 'str',\n\n  // case-specific parenteral drug lookup\n  // this is to make sure case data is self-contained\n  // in case\n  parenDrugs: 'obj',\n  'parenDrugs.{}.name': 'str',\n  'parenDrugs.{}.unit': 'str',\n\n  oralSedatives: 'obj',\n  'oralSedatives.{}': 'str', // drug ID\n  'oralSedatives.{}.name': 'str',\n  'oralSedatives.{}.unit': 'str',\n\n  localAnesthetics: 'obj',\n  'localAnesthetics.{}': 'str', // drug ID\n  'localAnesthetics.{}.name': 'str',\n  'localAnesthetics.{}.unit': 'str',\n  'localAnesthetics.{}.rxcui': 'str',\n  'localAnesthetics.{}.epiConcentration': 'num',\n  'localAnesthetics.{}.variantId': 'str',\n  'localAnesthetics.{}.percent': 'num',\n\n  infusionDrugs: 'obj',\n  'infusionDrugs.{}': 'str', // drug ID\n  'infusionDrugs.{}.name': 'str',\n\n  // custom LA\n  'laDilutions.{}.variantId': 'str',\n  // June, 2024: this should have been a number, but we may have some cases with strings. Changed June, 2024\n  'laDilutions.{}.percent': ['str', 'num'],\n\n  // procedure\n  startedOnRoomAir: 'bool',\n  systemsReviewSkipped: 'bool',\n  monitorPlacementComplete: 'bool',\n  dischargeScoreReviewed: 'bool',\n  timelineReviewed: 'bool',\n\n  // ready for review\n  'rfr.time': 'timestamp',\n  'rfr.name': 'str',\n  'rfr.memId': 'str',\n\n  // final details\n  finalReportSignature: 'str',\n  finalReportSignatureTime: 'timestamp',\n  finalReportSignerName: 'str',\n\n  // secondary signatures\n  'sig.{}.name': 'str',\n  'sig.{}.signature': 'str',\n  'sig.{}.time': 'timestamp',\n\n  // for vitals tracking\n  'events.caseStart': 'timestamp',\n  'events.vitalsEnd': 'timestamp',\n  // for IV\n  'events.ivStart': 'timestamp',\n  'events.ivEnd': 'timestamp',\n  // for surgery\n  'events.surgeryStart': 'timestamp',\n  'events.surgeryEnd': 'timestamp',\n  // anesthesia time\n  'events.anesthesiaStart': 'timestamp',\n  'events.anesthesiaEnd': 'timestamp',\n  // recovery and final end\n  'events.recoveryStart': 'timestamp',\n  'events.end': 'timestamp',\n\n  'customEvents.{}.id': 'str', // we used to set this but it's not used anymore. Stopped using May, 2024\n  'customEvents.{}.checkpointId': 'str',\n  'customEvents.{}.time': 'timestamp',\n  'customEvents.{}.note': 'str',\n\n  // iv details\n  'ivLocations.{}.name': 'str',\n  'ivLocations.{}.side': 'str',\n  'ivLocations.{}.securedWith': 'str',\n  'ivLocations.{}.attempts': 'int',\n  'ivLocations.{}.needleGauge': 'str',\n  'ivLocations.{}.time': 'timestamp',\n  'ivLocations.{}.timeRemoved': 'timestamp',\n  'ivLocations.{}.editing': 'bool',\n  'ivLocations.{}.solutions.{}.name': 'str',\n  'ivLocations.{}.solutions.{}.time': 'timestamp',\n  'ivLocations.{}.solutions.{}.timeRemoved': 'timestamp',\n  'ivLocations.{}.solutions.{}.amount': 'positiveInt',\n  'ivLocations.{}.solutions.{}.amount_raw': 'str',\n  'ivLocations.{}.solutions.{}.amountConfirmed': 'bool',\n  'ivLocations.{}.solutions.{}.meta': 'str',\n  'ivLocations.{}.solutions.{}.doseAmount_raw': 'str',\n  'ivLocations.{}.solutions.{}.doseType': 'str',\n\n  // airway\n  airways: 'arr',\n  'airways.[].type': 'str',\n  'airways.[].timeStarted': 'timestamp',\n  'airways.[].timeEnded': 'timestamp',\n\n  // meant to supersede above airways\n  // airway placement\n  'aw.{}.type': 'airwayType',\n  'aw.{}.name': 'str',\n  'aw.{}.notes': 'str',\n  'aw.{}.timePlaced': 'timestamp',\n  'aw.{}.placementComp': 'bool',\n  'aw.{}.placementCompDetail': 'str',\n  'aw.{}.vaso': 'str',\n  'aw.{}.side': 'str',\n  'aw.{}.size': 'str',\n  'aw.{}.preOx': 'str',\n  'aw.{}.magill': 'str',\n  'aw.{}.scope': 'str',\n  'aw.{}.peep': 'str',\n  'aw.{}.maskType': 'str',\n  'aw.{}.scopeType': 'str',\n  'aw.{}.bladeSize': 'str',\n  'aw.{}.viewGrade': 'str',\n  'aw.{}.stylet': 'bool',\n  'aw.{}.cuffed': 'bool',\n  'aw.{}.inflated': 'bool',\n  'aw.{}.securedWith': 'str',\n  'aw.{}.depth': 'str',\n  'aw.{}.eyeProtection': 'str',\n  'aw.{}.confirmation': 'str',\n  'aw.{}.lube': 'bool',\n  'aw.{}.preWarmed': 'bool',\n  // for face mask\n  'aw.{}.sealQuality': 'str',\n  'aw.{}.connectedTo': 'str',\n  'aw.{}.maskHolder': 'str',\n\n  // airway removal\n  'aw.{}.cavityClear': 'bool',\n  'aw.{}.timeRemoved': 'timestamp',\n  'aw.{}.removalComp': 'bool',\n  'aw.{}.removalCompDetail': 'str',\n  'aw.{}.removalNotes': 'str',\n  'aw.{}.preRemovalSpo2': 'str',\n  'aw.{}.postRemovalSpo2': 'str',\n  'aw.{}.deflated': 'bool',\n\n  // waves\n  'waves.{}.name': 'str',\n  'waves.{}.time': 'timestamp',\n  'waves.{}.type': 'str',\n  'waves.{}.svg': 'waveSvg',\n  'waves.{}.notes': 'str',\n\n  // position\n  posSkipped: 'bool',\n  'pos.{}.name': 'str',\n  'pos.{}.time': 'timestamp',\n\n  // notes\n  procedureNotes: 'str',\n  procedureNotesSignature: 'str',\n  otherLocalAnesthetics: 'str',\n  ebl: 'positiveInt',\n\n  // recovery\n  recoveryNotes: 'str',\n  recoveryNotesSignature: 'str',\n  recoveryNotesSignatureTime: 'timestamp',\n  finalRoomAirSpO2: 'positiveInt',\n\n  // discharge scoring\n  dischargeScoreType: 'str',\n  'dischargeScoreEntries.{}.score': 'int',\n\n  // demo / speed helpers\n  'appSpeed.speed': 'positiveInt',\n  'appSpeed.originalStart': 'timestamp',\n  'appSpeed.realTimeAtLastAdjustment': 'timestamp',\n  'appSpeed.totalExtra': 'positiveInt',\n\n  // tour related\n  tourModeEnabled: 'bool',\n  tourModeMeta: 'str',\n\n  // reporting\n  separatePreOpPage: 'bool',\n}\n\nexport const definition = buildDefinition(caseDataDefinitionBare, types)\n","import { updateObject } from 'sinks'\nimport { currentVersion } from './current-version'\nimport { migrationFunctions } from './migrations'\nimport { definition } from './definition'\n\nconst nullIfEmpty = item => {\n  if (Object.keys(item).length === 0) {\n    return null\n  }\n  return item\n}\n\n// plucks out migrations functions to run\n// taking in account both current and target versions\n// and available migrations\nexport const getRelevantMigrations = (\n  caseDataVersion,\n  migrations,\n  targetVersion\n) =>\n  Object.keys(migrations)\n    .map(Number)\n    .filter(migrationKeyAsNumber => {\n      const caseVersion = caseDataVersion || 0\n      return (\n        migrationKeyAsNumber > caseVersion &&\n        migrationKeyAsNumber <= targetVersion\n      )\n    })\n    .sort()\n    .map(keyAsNumber => migrations[keyAsNumber.toString()])\n\n/**\n * @param {CaseData} caseData\n * @param {{\n *   [id: string]: (caseData: CaseData) => any\n * }} migrations\n * @param {number} [targetVersion]\n */\nexport const getMigrationChanges = (\n  caseData,\n  migrations = migrationFunctions,\n  targetVersion = currentVersion\n) => {\n  const { version } = caseData\n  if (targetVersion === version) {\n    return null\n  }\n  const relevantFns = getRelevantMigrations(version, migrations, targetVersion)\n\n  let interimCaseData = caseData\n  const cumulativeChanges = {}\n  for (const fn of relevantFns) {\n    const changes = fn(interimCaseData)\n    interimCaseData = updateObject(interimCaseData, changes)\n    Object.assign(cumulativeChanges, changes)\n  }\n  cumulativeChanges.version = targetVersion\n  return nullIfEmpty(cumulativeChanges)\n}\n\nexport const migrateToLatest = caseObject => {\n  const copy = JSON.parse(JSON.stringify(caseObject))\n  const migrationUpdates = getMigrationChanges(copy)\n  if (migrationUpdates) {\n    return definition.update(copy, migrationUpdates)\n  }\n  return copy\n}\n","/**\n * Takes any import runs `Number(input)` returns the number or 0 if NaN\n *\n * @param {any} input\n * @returns {number}\n */\nexport const toNumber = input => {\n  const num = Number(input)\n  return isNaN(num) ? 0 : num\n}\n\n/**\n * @param {any} num\n * @param {number} [decimals] Max number of decimals\n * @returns\n */\nexport const cleanUpRound = (num, decimals = 3) =>\n  Number(toNumber(num).toFixed(decimals))\n\n/**\n * Gets average value of an array. Tries to convert each entry to a number. So\n * any non-numerical item will be averaged in as a zero.\n *\n * @param {any[]} arr\n * @param {number} [decimals]\n * @returns Number\n */\nexport const getAverage = (arr, decimals = 1) => {\n  if (!arr || !arr.length) return 0\n  const total = arr.reduce((total, num) => total + toNumber(num), 0)\n  return total ? cleanUpRound(total / arr.length, decimals) : 0\n}\n","import { toNumber } from './numbers'\n\n/**\n * Takes an object of simple keys/values and returns a corresponding new object.\n * If there are any keys in the original object whose name end with \"_raw\" the\n * returned object will have a corresponding key (without the _raw suffix) but\n * with its value always converted into a JS number. If it cannot be converted\n * to a number the value will be zero. This way, you can always do math with the result\n *\n * @param {any} obj\n * @returns {object} Updated object\n */\nexport const replaceObjectRawKeys = obj => {\n  const extraValues = {}\n  for (const key in obj) {\n    if (key.endsWith('_raw')) {\n      extraValues[key.replace('_raw', '')] = toNumber(obj[key])\n    }\n  }\n  return { ...obj, ...extraValues }\n}\n\n/**\n * Returns the given item or null if the item is null, undefined, an empty\n * string (optionally after trimming), an empty array, or an empty object.\n *\n * @example\n *   nullIfEmpty(null) // returns null\n *   nullIfEmpty('  ') // returns '  '\n *   nullIfEmpty('  ', true) // returns null\n *   nullIfEmpty([]) // returns null\n *   nullIfEmpty({}) // returns null\n *   nullIfEmpty('Hello') // returns 'Hello'\n *\n * @param {any} item - The item to check.\n * @param {boolean} [trimStrings=false] - If true, will trim the string before\n *   checking if it's empty. Default is `false`\n * @returns {any} Returns the original item or null if it's considered empty\n *   based on the conditions.\n */\nexport const nullIfEmpty = (item, trimStrings = false) => {\n  if (item == null) {\n    return null\n  }\n  if (typeof item === 'string') {\n    const val = trimStrings ? item.trim() : item\n    return val === '' ? null : item\n  }\n  if (typeof item === 'object') {\n    if (Array.isArray(item) && item.length === 0) {\n      return null\n    }\n    if (Object.keys(item).length === 0) {\n      return null\n    }\n  }\n  return item\n}\n\nexport const removeKeysWithNullishValues = (\n  obj,\n  includeEmptyString = false\n) => {\n  const result = {}\n  for (const key in obj) {\n    const value = obj[key]\n    const isNullish = value == null || (includeEmptyString && value === '')\n    if (!isNullish) {\n      result[key] = value\n    }\n  }\n  return result\n}\n\nexport const removeKeysWithEmptyValues = obj =>\n  removeKeysWithNullishValues(obj, true)\n\nexport const shallowEqual = (obj1, obj2) => {\n  const keys1 = Object.keys(obj1)\n  const keys2 = Object.keys(obj2)\n\n  if (keys1.length !== keys2.length) {\n    return false\n  }\n\n  for (let key of keys1) {\n    if (obj1[key] !== obj2[key]) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * Plucks specified keys from an object.\n *\n * @template T - This represents a generic object type.\n * @param {T} obj - The object to pluck keys from.\n * @param {string[]} keys - The keys to pluck from the object.\n * @returns {Partial<T>} - Returns an object with only the plucked keys.\n */\nexport const pluck = (obj, keys) => {\n  /** @type {Partial<T>} */\n  const toReturn = {}\n  for (const key of keys) {\n    if (obj.hasOwnProperty(key)) {\n      toReturn[key] = obj[key]\n    }\n  }\n  return toReturn\n}\n","// heavily borrowed from reselect v. 3.0.1\n// with unused code removed.\n// including the license for compliance:\n/*\nThe MIT License (MIT)\n\nCopyright (c) 2015-2018 Reselect Contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\nconst defaultEqualityCheck = (a, b) => a === b\n\nfunction areArgumentsShallowlyEqual(equalityCheck, prev, next) {\n  if (prev === null || next === null || prev.length !== next.length) {\n    return false\n  }\n\n  const length = prev.length\n  for (let i = 0; i < length; i++) {\n    if (!equalityCheck(prev[i], next[i])) {\n      return false\n    }\n  }\n\n  return true\n}\n\nexport function defaultMemoize(func, optionalEqCheck) {\n  let lastArgs = null\n  let lastResult = null\n  return function () {\n    if (\n      !areArgumentsShallowlyEqual(\n        optionalEqCheck || defaultEqualityCheck,\n        lastArgs,\n        arguments\n      )\n    ) {\n      // apply arguments instead of spreading for performance.\n      lastResult = func.apply(null, arguments)\n    }\n\n    lastArgs = arguments\n    return lastResult\n  }\n}\n\nfunction getDependencies(funcs) {\n  const dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs\n\n  if (\n    !dependencies.every(function (dep) {\n      return typeof dep === 'function'\n    })\n  ) {\n    throw new Error('inputs must be funcs')\n  }\n\n  return dependencies\n}\n\nexport function createSelectorCreator(memoize) {\n  for (\n    var len = arguments.length,\n      memoizeOptions = Array(len > 1 ? len - 1 : 0),\n      key = 1;\n    key < len;\n    key++\n  ) {\n    memoizeOptions[key - 1] = arguments[key]\n  }\n\n  return function () {\n    for (\n      var len2 = arguments.length, funcs = Array(len2), key2 = 0;\n      key2 < len2;\n      key2++\n    ) {\n      funcs[key2] = arguments[key2]\n    }\n\n    const resultFunc = funcs.pop()\n    const dependencies = getDependencies(funcs)\n\n    var memoizedResultFunc = memoize.apply(\n      undefined,\n      [\n        function () {\n          // apply arguments instead of spreading for performance.\n          return resultFunc.apply(null, arguments)\n        },\n      ].concat(memoizeOptions)\n    )\n\n    // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.\n    const selector = defaultMemoize(function () {\n      const params = []\n      const length = dependencies.length\n\n      for (let i = 0; i < length; i++) {\n        // apply arguments instead of spreading and mutate a local list of params for performance.\n        params.push(dependencies[i].apply(null, arguments))\n      }\n\n      // apply arguments instead of spreading for performance.\n      return memoizedResultFunc.apply(null, params)\n    })\n    // @ts-ignore\n    selector.resultFunc = resultFunc\n    return selector\n  }\n}\n","import { shallowEqual } from './object'\nimport { createSelectorCreator, defaultMemoize } from './selectors-lib'\n\nexport const createSelector = createSelectorCreator(defaultMemoize)\n\nexport const createPropSelector = (caseSelector, propName, fallback) =>\n  createSelector(caseSelector, data =>\n    data.hasOwnProperty(propName) ? data[propName] : fallback\n  )\n\nexport const createSelectorForProps = (caseSelector, propNames, resultFn) =>\n  createSelector(\n    ...propNames.map(name => createPropSelector(caseSelector, name)),\n    resultFn\n  )\n\nexport const arraySum = arr => arr.reduce((res, entry) => res + entry, 0)\n\nexport const arrayAverage = arr =>\n  arr.length ? arraySum(arr) / arr.length : null\n\n/**\n * Creates a memoized version of a function with a shallow equality check on arguments.\n *\n * @template T - This represents a generic function type.\n * @param {T} func - The function to memoize.\n * @returns {T} - Returns the new memoized function.\n */\nexport const shallowEqualMemoize = func => defaultMemoize(func, shallowEqual)\n","import { createSelector } from '../utils/selector-utils'\n\n/**\n * @param {SedationLevel} depth The rxcui ID of the drug we're selecting\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUpdateSedationLevel = depth => ({\n  sedationLevel:\n    {\n      local: 'Local',\n      minimal: 'Minimal',\n      moderate: 'Moderate',\n      deep: 'Deep',\n      ga: 'GA',\n    }[depth] || null,\n})\n\n/**\n * @param {CaseData} caseData The case data to select from\n * @returns {SedationLevelCased} The sedation level of the case\n */\nexport const selectSedationLevel = caseData => caseData.sedationLevel || null\n\n/**\n * @param {CaseData} caseData The case data to select from\n * @returns {boolean} Whether the patient is being sedated\n */\nexport const selectSedativesBeingUsed = createSelector(\n  selectSedationLevel,\n  level => level !== 'Local'\n)\n\n/**\n * @param {CaseData} caseData The case data to select from\n * @returns {boolean} Whether the patient is being sedated\n */\nexport const selectHasRecoveryPhase = selectSedativesBeingUsed\n","import { currentVersion } from '../current-version'\nimport { actionUpdateSedationLevel } from '../topics/sedation-level'\n\n/** @param {SedationLevel} sedationLevel */\nexport const actionApplySedationLevel = sedationLevel => {\n  let result = {\n    version: currentVersion,\n    ...actionUpdateSedationLevel(sedationLevel),\n    oralSedativesEnabled: true,\n    ivEnabled: true,\n    airwayEnabled: true,\n    vitalsTrackingEnabled: true,\n  }\n\n  if (sedationLevel === 'local') {\n    result.ivEnabled = false\n    result.oralSedativesEnabled = false\n  } else if (sedationLevel === 'minimal') {\n    result.ivEnabled = false\n  }\n\n  for (const key in result) {\n    if (result[key] === undefined) {\n      delete result[key]\n    }\n  }\n\n  return result\n}\n","// @ts-check\nconst timePlaced = 'Time placed'\nconst maskType = 'Mask Type'\nconst peep = 'PEEP (in cm H₂O)'\nconst placementComp = 'Complications with placement'\nconst placementCompDetail = 'Complication description'\nconst notes = 'Other placement notes'\nconst timeRemoved = 'Time removed'\nconst removalNotes = 'Removal Notes'\nconst size = 'Size'\nconst stylet = 'Stylet utilized'\nconst preOx = 'Preoxygenation'\nconst cuffed = 'Cuffed tube'\nconst inflated = 'Cuff inflated'\nconst scopeType = 'Laryngoscopy type'\nconst scope = 'Laryngoscope blade'\nconst bladeSize = 'Laryngoscope blade size'\nconst viewGrade = 'Laryngoscopy view grade'\nconst securedWith = 'Secured with'\nconst depth = 'Tube depth (in cm)'\nconst magill = 'Forceps'\nconst eyeProtection = 'Eye protection'\nconst confirmation = 'Confirmation of Placement'\nconst cavityClear = 'Oropharyngeal cavity cleared of debris/excess fluids'\nconst preRemovalSpo2 = 'SpO₂ immediately prior to removal'\nconst deflated = 'Deflated prior to extubation'\nconst postRemovalSpo2 = 'SpO₂ after removal'\nconst removalComp = 'Complications with removal'\nconst removalCompDetail = 'Complication description'\nconst sealQuality = 'Mask seal quality'\nconst maskHolder = 'Mask holder'\nconst connectedTo = 'Connected to'\nconst lube = 'Tube lubricated'\nconst vaso = 'Vasoconstrictor'\nconst preWarmed = 'Tube Prewarmed'\nconst side = 'Side'\nconst name = 'Airway Type'\n\n/**\n * Note there is a lot of repeated labels, but this is because the fieldMap is\n * not just for the form, but also for the order of items in the PDF in the\n * report selector.\n *\n * @type {Record<\n *   AirwayType,\n *   {\n *     name: string\n *     hideIfNoSedativesUsed?: true\n *     basic?: true\n *     fieldMap: Record<string, string>\n *   }\n * >}\n */\nexport const airwayTypeLookup = {\n  cpap: {\n    name: 'CPAP',\n    hideIfNoSedativesUsed: true,\n    fieldMap: {\n      timePlaced,\n      maskType,\n      peep,\n      placementComp,\n      placementCompDetail,\n      notes,\n      timeRemoved,\n      removalNotes,\n    },\n  },\n  et: {\n    name: 'Endotracheal Tube',\n    hideIfNoSedativesUsed: true,\n    fieldMap: {\n      timePlaced,\n      size: 'Tube internal diameter (in mm)',\n      stylet,\n      preOx,\n      cuffed,\n      inflated,\n      scopeType,\n      scope,\n      bladeSize,\n      viewGrade,\n      securedWith,\n      depth,\n      magill,\n      eyeProtection,\n      confirmation,\n      placementComp,\n      placementCompDetail,\n      notes,\n      timeRemoved,\n      cavityClear,\n      preRemovalSpo2,\n      deflated,\n      postRemovalSpo2,\n      removalComp,\n      removalCompDetail,\n      removalNotes,\n    },\n  },\n  fm: {\n    name: 'Face Mask',\n    hideIfNoSedativesUsed: true,\n    fieldMap: {\n      timePlaced,\n      sealQuality,\n      maskHolder,\n      size,\n      connectedTo,\n      placementComp,\n      placementCompDetail,\n      notes,\n      timeRemoved,\n      preRemovalSpo2,\n      deflated,\n      postRemovalSpo2,\n      removalNotes,\n    },\n  },\n  lma: {\n    name: 'Laryngeal Mask Airway',\n    hideIfNoSedativesUsed: true,\n    fieldMap: {\n      timePlaced,\n      preOx,\n      size: 'Size of LMA',\n      lube,\n      securedWith,\n      confirmation,\n      placementComp,\n      placementCompDetail,\n      notes,\n      timeRemoved,\n      cavityClear,\n      preRemovalSpo2,\n      deflated,\n      postRemovalSpo2,\n      removalComp,\n      removalCompDetail,\n      removalNotes,\n    },\n  },\n  mad: {\n    name: 'Mandibular Advancement Device',\n    basic: true,\n    hideIfNoSedativesUsed: true,\n    fieldMap: {\n      timePlaced,\n      timeRemoved,\n    },\n  },\n  nc: {\n    name: 'Nasal Cannula',\n    basic: true,\n    fieldMap: {\n      timePlaced,\n      timeRemoved,\n    },\n  },\n  nh: {\n    name: 'Nasal Hood',\n    basic: true,\n    fieldMap: {\n      timePlaced,\n      timeRemoved,\n    },\n  },\n  nt: {\n    name: 'Nasopharyngeal Airway (NPA)',\n    hideIfNoSedativesUsed: true,\n    fieldMap: {\n      timePlaced,\n      size,\n      placementComp,\n      placementCompDetail,\n      notes,\n      timeRemoved,\n      removalNotes,\n    },\n  },\n  ntt: {\n    name: 'Nasotracheal Tube',\n    hideIfNoSedativesUsed: true,\n    fieldMap: {\n      timePlaced,\n      size: 'Tube internal diameter (in mm)',\n      vaso,\n      lube,\n      preWarmed,\n      side,\n      preOx,\n      cuffed,\n      inflated,\n      scopeType,\n      scope,\n      bladeSize,\n      viewGrade,\n      securedWith,\n      depth,\n      magill,\n      eyeProtection,\n      confirmation,\n      placementComp,\n      placementCompDetail,\n      notes,\n      timeRemoved,\n      cavityClear,\n      preRemovalSpo2,\n      deflated,\n      postRemovalSpo2,\n      removalComp,\n      removalCompDetail,\n      removalNotes,\n    },\n  },\n  opa: {\n    name: 'Oropharyngeal Airway (OPA)',\n    hideIfNoSedativesUsed: true,\n    fieldMap: {\n      timePlaced,\n      size,\n      placementComp,\n      placementCompDetail,\n      notes,\n      timeRemoved,\n      removalNotes,\n    },\n  },\n  other: {\n    name: 'Other',\n    fieldMap: {\n      timePlaced,\n      name,\n      notes,\n      timeRemoved,\n      removalNotes,\n    },\n  },\n}\n\n/**\n * @param {AirwayType} type\n * @returns {Record<string, string>}\n */\nexport const getFieldLabelMapForAirwayType = type =>\n  airwayTypeLookup[type] && airwayTypeLookup[type].fieldMap\n","import { customAlphabet } from 'nanoid'\n\nconst nanoid = customAlphabet(\n  '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'\n)\n/**\n * @param {string} baseName The string to prepend\n * @param {number} [idLength] The number of random characters to add after prefix\n * @returns {string} The generated ID\n */\n\nexport const createId = (baseName, idLength) =>\n  `${baseName}_${nanoid(idLength || 14)}`\n","import { createId } from './id'\nimport { createSelector } from './selector-utils'\n\n/**\n * @param {{\n *   rootKey: string\n *   idPrefix?: string\n *   requiredProps?: string[]\n *   sortFn?: (a: any, b: any) => number\n *   mapFn?: (any) => any\n * }} options\n * @returns {{\n *   actionAdd: (initial: any, preGeneratedId?: string) => any\n *   actionRemove: (id: string) => any\n *   actionUpdate: (id: string, updates: any) => any\n *   selectRaw: (caseData: any) => { [id: string]: any }\n *   selectById: (caseData: any) => { [id: string]: { id: string } & any }\n *   select: (caseData: any) => ({ id: string } & any)[]\n * }}\n */\nexport const createCrudProp = ({\n  rootKey,\n  idPrefix,\n  requiredProps,\n  sortFn,\n  mapFn,\n}) => {\n  /**\n   * @param {any} initial The initial values to apply\n   * @param {string} [preGeneratedId] Optionally supply an ID generated outside.\n   *   This is used by some of the speech actions to enable undo. So they can\n   *   know which dose to remove if you cancel.\n   * @returns {any} The changes to apply to the case.\n   */\n  const actionAdd = (initial, preGeneratedId) => {\n    const id = preGeneratedId || createId(idPrefix || rootKey)\n    return actionUpdate(id, initial)\n  }\n\n  /**\n   * @param {string} id The id\n   * @returns {any} The changes to apply to the case.\n   */\n  const actionRemove = id => ({\n    [`${rootKey}.${id}`]: null,\n  })\n\n  /**\n   * @param {string} id The id\n   * @param {any} updates The updates to apply.\n   * @returns {any} The changes to apply to the case.\n   */\n  const actionUpdate = (id, updates) => {\n    const changes = {}\n    for (const key in updates) {\n      changes[`${rootKey}.${id}.${key}`] = updates[key]\n    }\n    return changes\n  }\n\n  const empty = {}\n  const selectRaw = caseData => caseData[rootKey] || empty\n\n  const select = createSelector(selectRaw, raw => {\n    const toReturn = []\n    for (const id in raw) {\n      const data = raw[id]\n      if (\n        requiredProps &&\n        !requiredProps.every(prop => data.hasOwnProperty(prop))\n      ) {\n        continue\n      }\n      toReturn.push({ id, ...raw[id] })\n    }\n    if (sortFn) {\n      toReturn.sort(sortFn)\n    }\n    return mapFn ? toReturn.map(mapFn) : toReturn\n  })\n\n  // same as select but returns an object with the id as the key\n  // different from selectRaw in that it returns the full object\n  // after being processed by mapFn / sortFn.\n  const selectById = createSelector(select, items =>\n    items.reduce((acc, item) => {\n      acc[item.id] = item\n      return acc\n    }, {})\n  )\n\n  return {\n    actionAdd,\n    actionRemove,\n    actionUpdate,\n    selectRaw,\n    selectById,\n    select,\n  }\n}\n","// @ts-check\nimport {\n  airwayTypeLookup,\n  getFieldLabelMapForAirwayType,\n} from '../airway-types'\nimport { createCrudProp } from '../utils/crud-prop'\nimport { createSelector } from '../utils/selector-utils'\n\nconst awProps = createCrudProp({\n  rootKey: 'aw',\n  requiredProps: ['type'],\n  mapFn: airway => {\n    const { name, ...rest } = airwayTypeLookup[airway.type]\n    delete rest.fieldMap\n    return {\n      ...rest,\n      ...airway,\n      airwayTypeName: name,\n    }\n  },\n  sortFn: (a, b) => {\n    const timeA = a.timePlaced\n    const timeB = b.timePlaced\n    // those without a timePlaced should be at the end\n    if (!timeA && timeB) return 1\n    if (!timeB && timeA) return -1\n    return timeA - timeB\n  },\n})\n\n/**\n * @param {AirwayType} type The airway type\n * @param {Omit<CaseDataAirwayEntryRaw, 'type'>} [otherProps] Other properties\n *   to set on the airway\n * @returns {any} The changes to apply to the case.\n */\nexport const actionAddAirway = (type, otherProps = {}) =>\n  awProps.actionAdd({ type, ...otherProps })\n\n/**\n * @param {string} id The airway ID\n * @returns {any} The changes to apply to the case.\n */\nexport const actionRemoveAirway = awProps.actionRemove\n\n/**\n * @param {string} id The airway ID\n * @param {Omit<CaseDataAirwayEntryRaw, 'type'>} updates The updates to apply to\n *   the airway\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUpdateAirway = (id, updates) =>\n  awProps.actionUpdate(id, updates)\n\n/** @type {CaseSelector<CaseDataAirwayEntry[]>} */\nexport const selectAirways = awProps.select\n\n/** @type {CaseSelector<{ [id: string]: CaseDataAirwayEntry }>} */\nexport const selectAirwaysById = awProps.selectById\n\n/** @type {CaseSelector<AirwayEvent[]>} */\nexport const selectAirwayEvents = createSelector(selectAirways, airways => {\n  const placedAirways = airways.filter(entry => entry.timePlaced)\n  /** @type {AirwayEvent[]} */\n  const toReturn = []\n  for (const airway of placedAirways) {\n    const name = airway.name || airway.airwayTypeName\n    toReturn.push({\n      id: airway.id + '_placed',\n      note: `${name} Placed`,\n      type: 'airwayPlaced',\n      time: airway.timePlaced,\n      derived: true,\n      showInEventReport: true,\n    })\n    if (airway.timeRemoved) {\n      toReturn.push({\n        id: airway.id + '_removed',\n        note: `${name} Removed`,\n        type: 'airwayRemoved',\n        time: airway.timeRemoved,\n        derived: true,\n        showInEventReport: true,\n      })\n    }\n  }\n  return toReturn\n})\n\n/** @type {CaseSelector<Record<string, number>>} */\nexport const selectAirwayTimesByEventId = createSelector(\n  selectAirwayEvents,\n  events => {\n    const toReturn = {}\n    for (const event of events) {\n      toReturn[event.id] = event.time\n    }\n    return toReturn\n  }\n)\n\n/** @type {CaseSelector<AirwayReportEntry[]>} */\nexport const selectAirwayReport = createSelector(\n  selectAirways,\n  /**\n   * @param {CaseDataAirwayEntry[]} airways\n   * @returns {AirwayReportEntry[]}\n   */\n  airways =>\n    airways.map(entry => {\n      const { type, id, ...rest } = entry\n      const def = airwayTypeLookup[type]\n      const name = rest.name || (def && def.name)\n      /** @type {AirwayReportEntry} */\n      const toReturn = {\n        id,\n        name,\n        type,\n        items: [],\n        timePlaced: null,\n        timeRemoved: null,\n      }\n      // get a copy so we can delete items if needed\n      const labelMapForType = { ...getFieldLabelMapForAirwayType(type) }\n\n      // the complication details fields should not be shown unless the\n      // complication field is true\n      if (rest.placementComp !== true) {\n        delete labelMapForType.placementCompDetail\n      }\n      if (rest.removalComp !== true) {\n        delete labelMapForType.removalCompDetail\n      }\n\n      for (const [name, label] of Object.entries(labelMapForType)) {\n        let value = rest[name]\n        if (value === undefined || name === 'name') {\n          continue\n        }\n        if (name === 'timePlaced' || name === 'timeRemoved') {\n          toReturn[name] = value\n          continue\n        }\n        if (name === 'removalComp' || name === 'placementComp') {\n          if (value === false) {\n            toReturn.items.push([label, 'none'])\n          }\n          continue\n        }\n        const valueType = typeof value\n        if (valueType === 'boolean') {\n          value = value ? 'yes' : 'no'\n        }\n\n        toReturn.items.push([label, value])\n      }\n\n      return toReturn\n    })\n)\n","import { cleanUpRound } from './numbers'\n\n/**\n * @param {DrugUnit[]} args\n * @returns {DrugUnit}\n */\nconst determineTargetUnit = (...args) => {\n  if (args.includes('g')) return 'g'\n  if (args.includes('mg')) return 'mg'\n  return 'mcg'\n}\n\nconst unitMultiple = {\n  g: 2,\n  mg: 1,\n  mcg: 0,\n}\n\n/**\n * @param {number} value\n * @param {DrugUnit} currentUnit\n * @param {DrugUnit} targetUnit\n * @returns {number}\n */\nexport const toTargetUnit = (value, currentUnit, targetUnit) => {\n  const currentUnitMultiple = unitMultiple[currentUnit]\n  const targetUnitMultiple = unitMultiple[targetUnit]\n  const diff = currentUnitMultiple - targetUnitMultiple\n  if (!diff) {\n    return value\n  }\n  const multiple = Math.pow(1000, Math.abs(diff))\n  return cleanUpRound(diff < 0 ? value / multiple : value * multiple)\n}\n\n/**\n * @param {any} amount1\n * @param {DrugUnit} firstUnit\n * @param {any} amount2\n * @param {DrugUnit} secondUnit\n * @param {DrugUnit} [targetUnit]\n * @returns {{\n *   amount: number\n *   unit: DrugUnit\n * }}\n */\nexport const addDiffUnits = (\n  amount1,\n  firstUnit,\n  amount2,\n  secondUnit,\n  targetUnit\n) => {\n  const finalUnit = targetUnit || determineTargetUnit(firstUnit, secondUnit)\n  return {\n    amount: cleanUpRound(\n      toTargetUnit(amount1, firstUnit, finalUnit) +\n        toTargetUnit(amount2, secondUnit, finalUnit)\n    ),\n    unit: finalUnit,\n  }\n}\n","// @ts-check\n/**\n * @param {keyof CaseData} name\n * @param {any} [fallback] Value to return if the property does not exist\n * @returns {(caseData: CaseData) => any}\n */\nexport const getCasePropSelector = (name, fallback = null) => caseData =>\n  caseData && caseData.hasOwnProperty(name) ? caseData[name] : fallback\n","import { getCasePropSelector } from '../utils/case-prop-selector'\nimport { selectSedationLevel } from './sedation-level'\n\n/** @type {(caseData: CaseData) => boolean} */\nexport const selectCalculateDrugWaste = getCasePropSelector(\n  'calculateDrugWaste',\n  true\n)\n\n// Vitals tracking can only be disabled for local cases, so we ignore vitalsTrackingEnabled\n// for non-local cases in case it's not set correctly.\nconst vitalsTrackingEnabledRaw = getCasePropSelector(\n  'vitalsTrackingEnabled',\n  true\n)\n\n/** @type {CaseSelector<boolean>} */\nexport const selectVitalsTrackingEnabled = caseData => {\n  const sedationLevel = selectSedationLevel(caseData)\n  if (sedationLevel !== 'Local') return true\n  return vitalsTrackingEnabledRaw(caseData)\n}\n\n/** @type {CaseSelector<boolean>} */\nexport const selectAirwayEnabled = getCasePropSelector('airwayEnabled', false)\n\n/** @type {CaseSelector<boolean>} */\nexport const selectIVEnabled = getCasePropSelector('ivEnabled', false)\n","export const sortByTimeIfExists = ({ time: aTime }, { time: bTime }) => {\n  if (!aTime && !bTime) {\n    return 0 // Both times are missing, consider them equal\n  }\n  if (!aTime) {\n    return 1 // Place item with missing time after those with time\n  }\n  if (!bTime) {\n    return -1 // Place item with missing time after those with time\n  }\n  return aTime - bTime // Sort by time if both exist\n}\n\nexport const getSortByStringPropertyIfExists = propertyName => (a, b) => {\n  const propA = a[propertyName]\n  const propB = b[propertyName]\n  const propAIsString = typeof propA === 'string'\n  const propBIsString = typeof propB === 'string'\n\n  // Check if the properties exist and are strings before comparing\n  if (propAIsString && propBIsString) {\n    return propA.localeCompare(propB)\n  } else if (propAIsString) {\n    // Assume non-existent or non-string properties are 'less' than string properties\n    return -1\n  } else if (propBIsString) {\n    // Assume non-existent or non-string properties are 'less' than string properties\n    return 1\n  }\n  // If neither property is a string, consider them equal\n  return 0\n}\n\nexport const sortByNameIfExists = getSortByStringPropertyIfExists('name')\n","export const roundToDecimal = (number, precision) => {\n  const factor = Math.pow(10, precision)\n  return Math.round(number * factor) / factor\n}\n","// @ts-check\nimport { roundToDecimal } from './decimals'\nimport { toNumber } from './numbers'\n\n/**\n * @param {number} [mins]\n * @returns {number}\n */\nexport const toAnesthesiaUnits = mins => roundToDecimal(toNumber(mins) / 15, 1)\n","// @ts-check\nimport { toAnesthesiaUnits } from '../utils/anesthesia-units'\nimport { createSelector, shallowEqualMemoize } from '../utils/selector-utils'\nimport {\n  selectHasRecoveryPhase,\n  selectSedativesBeingUsed,\n} from './sedation-level'\n\nconst empty = {}\nconst rawEvents = caseData => caseData.events || empty\nconst getEventSelector = fn => createSelector(rawEvents, fn)\n\n// note: we do \"floor\" here because that's how we think of\n// time. Digital clocks show \"14:30\" even if actual time is 14:30:59.\n// So by flooring both before calculating duration we will always\n// get a total number of minutes that looks correct.\n// otherwise if you start at 3:30:00 and end at 4:00:54.\n// the report would say 3:30 - 4:00 but duration would be 31 minutes.\nconst getDurationMinutes = (start, end) =>\n  start && end ? Math.floor(end / 60000) - Math.floor(start / 60000) : null\nconst createDurationMinutesSelector = (startEvent, endEvent) =>\n  getEventSelector(events =>\n    getDurationMinutes(events[startEvent], events[endEvent])\n  )\n\nconst getEventPropSelector = propName =>\n  createSelector(rawEvents, raw => raw[propName])\n\nconst selectCaseStartTime = getEventPropSelector('caseStart')\nconst selectSurgeryStartTime = getEventPropSelector('surgeryStart')\nconst selectSurgeryEndTime = getEventPropSelector('surgeryEnd')\nconst selectRecoveryStartTime = getEventPropSelector('recoveryStart')\nconst selectVitalsEndTime = getEventPropSelector('vitalsEnd')\n\nconst selectCaseEndTime = createSelector(\n  selectSurgeryStartTime,\n  selectSurgeryEndTime,\n  getEventPropSelector('end'),\n  selectVitalsEndTime,\n  selectSedativesBeingUsed,\n  (surgeryStart, surgeryEnd, caseEnd, vitalsEnd, sedativesBeingUsed) => {\n    if (sedativesBeingUsed) {\n      return caseEnd\n    } else {\n      if (!vitalsEnd) return\n      if (surgeryStart && surgeryEnd) {\n        return Math.max(surgeryEnd, vitalsEnd)\n      }\n      if (!surgeryStart && !surgeryEnd) {\n        return vitalsEnd\n      }\n    }\n  }\n)\n\nconst selectCaseInRecovery = createSelector(\n  selectHasRecoveryPhase,\n  selectRecoveryStartTime,\n  selectCaseEndTime,\n  (hasRecoveryPhase, recoveryStart, caseEnd) =>\n    !!(hasRecoveryPhase && recoveryStart && !caseEnd)\n)\n\nconst selectCaseComplete = createSelector(selectCaseEndTime, Boolean)\n\nconst selectCaseInProgress = createSelector(\n  selectCaseStartTime,\n  selectCaseEndTime,\n  selectRecoveryStartTime,\n  selectSedativesBeingUsed,\n  (caseStartTime, caseEndTime, recoveryStartTime, sedativesBeingUsed) => {\n    if (!caseStartTime) return false\n    return sedativesBeingUsed ? !recoveryStartTime : !caseEndTime\n  }\n)\nconst selectCaseWasStarted = getEventSelector(raw => !!raw.caseStart)\nconst selectIvStarted = getEventSelector(raw => !!raw.ivStart)\nconst selectRecoveryWasStarted = getEventSelector(raw => !!raw.recoveryStart)\nconst selectCaseStatus = createSelector(\n  selectCaseComplete,\n  selectCaseInRecovery,\n  selectCaseInProgress,\n  selectIvStarted,\n  selectCaseWasStarted,\n  (complete, inRecovery, inProgress, ivStarted, caseWasStarted) => {\n    if (complete) return 'complete'\n    if (inRecovery) return 'recovery'\n    if (inProgress) return 'inProgress'\n    if (ivStarted) return 'ivStarted'\n    if (!caseWasStarted) return 'notStarted'\n  }\n)\n\nconst selectAnesthesiaMinutes = createDurationMinutesSelector(\n  'anesthesiaStart',\n  'anesthesiaEnd'\n)\n\nexport const eventSelectors = {\n  selectEventTimesRaw: rawEvents,\n  selectCaseStartTime,\n  selectAnesthesiaStartTime: getEventPropSelector('anesthesiaStart'),\n  selectAnesthesiaEndTime: getEventPropSelector('anesthesiaEnd'),\n  selectSurgeryStartTime,\n  selectSurgeryEndTime,\n  selectRecoveryStartTime: getEventPropSelector('recoveryStart'),\n  selectVitalsEndTime,\n  selectCaseEndTime,\n  selectIvStarted,\n  selectCaseWasStarted,\n  selectRecoveryWasStarted,\n  selectCaseComplete,\n  selectCaseInProgress: selectCaseInProgress,\n  selectCaseInRecovery,\n  selectCaseStatus,\n  selectAnesthesiaMinutes,\n  selectAnesthesiaUnits: createSelector(\n    selectAnesthesiaMinutes,\n    toAnesthesiaUnits\n  ),\n  selectSurgeryMinutes: createDurationMinutesSelector(\n    'surgeryStart',\n    'surgeryEnd'\n  ),\n  selectMonitoringMinutes: createDurationMinutesSelector(\n    'caseStart',\n    'vitalsEnd'\n  ),\n  selectRecoveryMinutes: createDurationMinutesSelector('recoveryStart', 'end'),\n  selectCompleteCaseMinutes: createSelector(\n    selectCaseStartTime,\n    selectCaseEndTime,\n    getDurationMinutes\n  ),\n}\n\nexport const optionSelectCaseStartOrAppTimeDay = shallowEqualMemoize(\n  /**\n   * @param {CaseData} caseData\n   * @param {number} appTimeDay\n   * @returns {number}\n   */ (caseData, appTimeDay) => {\n    const caseStartTime = eventSelectors.selectCaseStartTime(caseData)\n    return caseStartTime || appTimeDay\n  }\n)\n\n/**\n * @param {{\n *   [id in CaseEventType]?: number | null\n * }} updates\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUpdateEventTimes = updates => {\n  const toReturn = {}\n  for (const key in updates) {\n    toReturn[`events.${key}`] = updates[key]\n  }\n  return toReturn\n}\n","import { createCrudProp } from '../utils/crud-prop'\nimport { replaceObjectRawKeys } from '../utils/object'\nimport { createSelector } from '../utils/selector-utils'\nimport { sortByTimeIfExists } from '../utils/sort-by'\nimport { eventSelectors } from './events'\n\nconst drugsAdminProp = createCrudProp({\n  rootKey: 'drugsAdministered',\n  idPrefix: 'dose',\n  requiredProps: ['route'],\n  sortFn: sortByTimeIfExists,\n  mapFn: replaceObjectRawKeys,\n})\n\n/**\n * @param {{\n *   drugVariantId: string\n *   amount_raw: string\n *   unit: LocalAnestheticUnit\n *   epiConcentration?: number\n *   time?: number\n * }} localDoseArgs\n *   Local dose details\n * @returns {any} The changes to apply to the case.\n */\nexport const actionAddLocalDose = ({\n  drugVariantId,\n  amount_raw,\n  epiConcentration,\n  unit,\n  time,\n}) =>\n  drugsAdminProp.actionAdd({\n    route: 'local',\n    drugVariantId,\n    amount_raw,\n    unit: unit || 'mg',\n    epiConcentration: epiConcentration || 0,\n    time: time || Date.now(),\n    shouldStartCase: false,\n  })\n\n/**\n * @param {{\n *   drugId: string\n *   amount_raw: string\n *   route: ParenDrugRoute\n *   doseId?: string\n *   time?: number\n * }} parenteralDoseArgs\n *   Parenteral dose details\n * @returns {any} The changes to apply to the case.\n */\nexport const actionAddParenteralDose = ({\n  drugId,\n  amount_raw,\n  route,\n  doseId,\n  time,\n}) =>\n  drugsAdminProp.actionAdd(\n    {\n      route,\n      drugId,\n      amount_raw,\n      time: time || Date.now(),\n      shouldStartCase: true,\n    },\n    doseId\n  )\n\n/**\n * @param {{\n *   drugId: string\n *   amount_raw?: string | null\n *   route: OralSedativeRoute\n *   shouldStartCase: boolean\n *   editing?: boolean\n *   time?: number | null\n * }} oralDoseArgs\n *   Oral dose details\n * @returns {any} The changes to apply to the case.\n */\nexport const actionAddOralSedativeDose = ({\n  drugId,\n  amount_raw,\n  route,\n  shouldStartCase,\n  editing,\n  time,\n}) => {\n  const args = {\n    drugId,\n    route,\n    editing: editing || false,\n    shouldStartCase,\n  }\n  // allow passing explicit null to not set at all\n  // this is used by presets for pre-procedure sedatives\n  if (amount_raw !== null) {\n    args.amount_raw = amount_raw || '0'\n  }\n  // allow passing explicit null to not set at all\n  // this is used by presets for pre-procedure sedatives\n  if (time !== null) {\n    args.time = time || Date.now()\n  }\n  return drugsAdminProp.actionAdd(args)\n}\n\n/**\n * @param {{\n *   drugId: string\n *   amount: number\n *   shouldStartCase: boolean\n *   time?: number\n * }} inhalationDoseArgs\n *   Inhalation dose details\n * @returns {any} The changes to apply to the case.\n */\nexport const actionAddInhalationDose = ({\n  drugId,\n  amount,\n  shouldStartCase,\n  time,\n}) =>\n  drugsAdminProp.actionAdd({\n    drugId,\n    route: 'inhalation',\n    amount,\n    time: time || Date.now(),\n    shouldStartCase,\n  })\n\n/**\n * @param {{\n *   drugId: string\n *   amount_raw: string\n *   route: InfusionRoute\n *   time?: number\n *   shouldStartCase?: boolean\n * }} infusionDoseArgs\n *   Infusion dose details\n * @returns {any} The changes to apply to the case.\n */\nexport const actionAddInfusionDose = ({\n  drugId,\n  amount_raw,\n  route,\n  time,\n  shouldStartCase,\n}) =>\n  drugsAdminProp.actionAdd({\n    drugId,\n    amount_raw,\n    route,\n    time: time || Date.now(),\n    shouldStartCase: shouldStartCase !== false,\n  })\n\n/**\n * @param {{\n *   siteId: string\n *   bagId: string\n *   solutionType: string\n *   amount_raw: string\n *   route: FluidRoute\n *   time?: number\n * }} opts\n * @returns {any} The changes to apply to the case.\n */\nexport const actionAddFluidDose = ({\n  solutionType,\n  siteId,\n  bagId,\n  amount_raw,\n  route,\n  time,\n}) =>\n  drugsAdminProp.actionAdd({\n    drugId: solutionType,\n    siteId,\n    route,\n    amount_raw,\n    bagId,\n    time: time || Date.now(),\n  })\n\n/**\n * @param {{\n *   siteId: string\n *   solutionType: string\n *   amount_raw: string\n *   time?: number\n * }} opts\n * @returns {any} The changes to apply to the case.\n */\nexport const actionAddSyringeFlush = ({\n  solutionType,\n  siteId,\n  amount_raw,\n  time,\n}) =>\n  drugsAdminProp.actionAdd({\n    drugId: solutionType,\n    siteId,\n    route: 'syringeFlush',\n    amount_raw,\n    time: time || Date.now(),\n  })\n\n/**\n * @param {string} id The airway ID\n * @returns {any} The changes to apply to the case.\n */\nexport const actionRemoveDose = drugsAdminProp.actionRemove\n\n/**\n * @param {string} id The airway ID\n * @param {any} updates The updates to apply to the airway\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUpdateDose = drugsAdminProp.actionUpdate\n\n/** @type {CaseSelector<DoseAdministered[]>} */\nexport const selectAllDosesAdministered = drugsAdminProp.select\n\n/** @type {CaseSelector<CaseData['drugsAdministered']>} */\nexport const selectAllDosesAdministeredRaw = drugsAdminProp.selectRaw\n\nconst getFilteredDoseSelector = filterFn =>\n  createSelector(selectAllDosesAdministered, doses => doses.filter(filterFn))\n\nconst getByIdSelector = (baseSelector, prop = 'drugId') =>\n  createSelector(baseSelector, doses =>\n    doses.reduce((res, dose) => {\n      if (!res[dose[prop]]) {\n        res[dose[prop]] = []\n      }\n      res[dose[prop]].push(dose)\n      return res\n    }, {})\n  )\n\n/** @type {CaseSelector<LocalDoseAdministeredRaw[]>} */\nexport const selectLocalDosesAdministeredRaw = getFilteredDoseSelector(\n  dose => dose.route === 'local'\n)\n\n/** @type {CaseSelector<{ [drugId: string]: LocalDoseAdministeredRaw[] }>} */\nexport const selectLocalDosesAdministeredRawById = getByIdSelector(\n  selectLocalDosesAdministeredRaw,\n  'drugVariantId'\n)\n\nconst addMeta = selector => caseData => {\n  const caseStart = eventSelectors.selectCaseStartTime(caseData)\n  return selector(caseData).map(dose => ({\n    ...dose,\n    isPreProcedure: caseStart ? dose.time < caseStart : true,\n    isComplete: !!(dose.amount && dose.route && dose.time),\n  }))\n}\n\n/** @type {CaseSelector<ParenDoseAdministered[]>} */\nexport const selectParenteralDosesAdministered = addMeta(\n  getFilteredDoseSelector(\n    dose => dose.route === 'IV' || dose.route === 'IM' || dose.route === 'IN'\n  )\n)\n\n/** @type {CaseSelector<{ [drugId: string]: ParenDoseAdministered[] }>} */\nexport const selectParenteralDosesAdministeredByDrugId = getByIdSelector(\n  selectParenteralDosesAdministered\n)\n\n/** @type {CaseSelector<OralDoseAdministered[]>} */\nexport const selectOralSedativeDosesAdministered = addMeta(\n  getFilteredDoseSelector(dose => dose.route === 'PO' || dose.route === 'SL')\n)\n\n/** @type {CaseSelector<{ [drugId: string]: OralDoseAdministered[] }>} */\nexport const selectOralSedativeDosesAdministeredByDrugId = getByIdSelector(\n  selectOralSedativeDosesAdministered\n)\n\n/** @type {CaseSelector<({ id: string } & InhalationDoseAdministered)[]>} */\nexport const selectInhalationDosesAdministered = getFilteredDoseSelector(\n  dose => dose.route === 'inhalation'\n)\n\n/** @type {CaseSelector<{ [drugId: string]: InhalationDoseAdministered[] }>} */\nexport const selectInhalationDosesAdministeredByDrugId = getByIdSelector(\n  selectInhalationDosesAdministered\n)\n\n/** @type {CaseSelector<({ id: string } & InfusionDoseAdministered)[]>} */\nexport const selectInfusionDosesAdministered = getFilteredDoseSelector(\n  dose => dose.route === 'infusion' || dose.route === 'infusionBolus'\n)\n\n/** @type {CaseSelector<{ [drugId: string]: InfusionDoseAdministered[] }>} */\nexport const selectInfusionDosesAdministeredByDrugId = getByIdSelector(\n  selectInfusionDosesAdministered\n)\n\n/** @type {CaseSelector<({ id: string } & FluidDoseAdministered)[]>} */\nexport const selectFluidDosesAdministered = getFilteredDoseSelector(\n  dose =>\n    dose.route === 'fluid' ||\n    dose.route === 'fluidBolus' ||\n    dose.route === 'syringeFlush'\n)\n\n/** @type {CaseSelector<({ id: string } & FluidDoseAdministered)[]>} */\nexport const selectSyringeFlushesBySiteId = getByIdSelector(\n  getFilteredDoseSelector(dose => dose.route === 'syringeFlush'),\n  'siteId'\n)\n\n/** @type {CaseSelector<boolean>} */\nexport const selectHasFluidDoseDetail = createSelector(\n  selectFluidDosesAdministered,\n  doses => doses.some(dose => dose.amount)\n)\n\n/** @type {CaseSelector<{ [drugId: string]: FluidDoseAdministered[] }>} */\nexport const selectFluidDosesAdministeredBySiteId = getByIdSelector(\n  selectFluidDosesAdministered,\n  'siteId'\n)\n\n/** @type {CaseSelector<PreProcedureSedativeDose[]>} */\nexport const selectPreProcedureSedativeDosesAdministered = createSelector(\n  addMeta(\n    getFilteredDoseSelector(\n      dose =>\n        dose.route === 'PO' ||\n        dose.route === 'SL' ||\n        dose.route === 'IM' ||\n        dose.route === 'IN'\n    )\n  ),\n  /** @param {(OralDoseAdministered | ParenDoseAdministered)[]} doses */\n  doses => doses.filter(dose => dose.isPreProcedure)\n)\n","import { createSelector } from './selector-utils'\n\n/**\n * @param {{\n *   route: string\n *   drugInfoProp: string\n *   mapFn?: (any) => any\n * }} options\n * @returns {{\n *   actionSelect: (id: string, drugProps: any) => any\n *   actionUnselect: (id: string) => any\n *   actionUpdateDosage: (id: string, updates: any) => any\n *   selectDrugInfoRaw: (caseData: any) => { [id: string]: any }\n *   selectDosageRaw: (caseData: any) => { [id: string]: any }\n *   selectDosage: (caseData: any) => { [id: string]: any }\n *   selectSelectedDrugs: (caseData: any) => ({ id: string } & any)[]\n *   selectSelectedDrugsById: (\n *     caseData: any\n *   ) => { [id: string]: { id: string } & any }\n * }}\n */\nexport const createDoseProp = ({ route, drugInfoProp, mapFn }) => {\n  const dosePath = `drugDosage.${route}.doses`\n\n  /**\n   * @param {string} path The id\n   * @param {any} updates The updates to apply.\n   * @returns {any} The changes to apply to the case.\n   */\n  const actionUpdate = (path, updates) => {\n    const changes = {}\n    for (const key in updates) {\n      const value = updates[key]\n      if (value !== undefined) {\n        changes[`${path}.${key}`] = updates[key]\n      }\n    }\n    return changes\n  }\n\n  const actionSelect = (id, drugProps) => ({\n    [`${dosePath}.${id}.time`]: Date.now(),\n    ...actionUpdate(`${drugInfoProp}.${id}`, drugProps),\n  })\n\n  const actionUnselect = id => ({\n    [`${dosePath}.${id}`]: null,\n    [`${drugInfoProp}.${id}`]: null,\n  })\n\n  const actionUpdateDosage = (id, updates) =>\n    actionUpdate(`${dosePath}.${id}`, updates)\n\n  const empty = {}\n  const selectDosageRaw = caseData =>\n    (caseData.drugDosage &&\n      caseData.drugDosage[route] &&\n      caseData.drugDosage[route].doses) ||\n    empty\n\n  const selectDosage = createSelector(selectDosageRaw, raw => {\n    const toReturn = {}\n    for (const key in raw) {\n      toReturn[key] = mapFn(raw[key])\n    }\n    return toReturn\n  })\n\n  const selectDrugInfoRaw = caseData => caseData[drugInfoProp] || empty\n\n  const selectSelectedDrugs = createSelector(\n    selectDosageRaw,\n    selectDrugInfoRaw,\n    (dosageRaw, drugInfoRaw) => {\n      const toReturn = []\n      for (const id in dosageRaw) {\n        const data = dosageRaw[id]\n        const info = drugInfoRaw[id] || {}\n        toReturn.push({ id, ...data, ...info })\n      }\n      return mapFn ? toReturn.map(mapFn) : toReturn\n    }\n  )\n\n  const selectSelectedDrugsById = createSelector(selectSelectedDrugs, dosage =>\n    dosage.reduce((res, item) => {\n      res[item.id] = item\n      return res\n    }, {})\n  )\n\n  return {\n    actionSelect,\n    actionUnselect,\n    actionUpdateDosage,\n    selectDrugInfoRaw,\n    selectDosage,\n    selectDosageRaw,\n    selectSelectedDrugs,\n    selectSelectedDrugsById,\n  }\n}\n","// @ts-check\nimport { roundToDecimal } from '../utils/decimals'\nimport { createSelector } from '../utils/selector-utils'\n\n/** @type {CaseSelector<number | null>} */\nexport const selectPatientWeightInKg = caseData => caseData.weight || null\n/** @type {CaseSelector<number | null>} */\nexport const selectPatientHeightInCm = caseData => caseData.height || null\n/** @type {CaseSelector<number | null>} */\nexport const selectBmi = createSelector(\n  selectPatientHeightInCm,\n  selectPatientWeightInKg,\n  /**\n   * @param {number} [height]\n   * @param {number} [weight]\n   * @returns {number | null}\n   */\n  (height, weight) => {\n    if (!height || !weight) {\n      return null\n    }\n    const heightInMeters = height / 100\n    const result = roundToDecimal(weight / Math.pow(heightInMeters, 2), 1)\n    return Number(result) > 250 ? null : result\n  }\n)\n","import { selectInfusionDosesAdministeredByDrugId } from './drugs-administered'\nimport { createDoseProp } from '../utils/dose-prop'\nimport {\n  removeKeysWithNullishValues,\n  replaceObjectRawKeys,\n} from '../utils/object'\nimport { createSelector } from '../utils/selector-utils'\nimport { selectPatientWeightInKg } from './height-weight'\nimport { toNumber } from '../utils/numbers'\n\nconst prop = createDoseProp({\n  route: 'infusion',\n  drugInfoProp: 'infusionDrugs',\n  mapFn: replaceObjectRawKeys,\n})\n\n/**\n * @param {InfusionDrug} infusionDrug The drug we're selecting\n * @returns {any} The changes to apply to the case.\n */\nexport const actionSelectInfusionDrug = ({ id, name }) =>\n  prop.actionSelect(id, { name })\n\n/**\n * @param {string} id The rxcui ID of the drug we're unselecting\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUnselectInfusionDrug = prop.actionUnselect\n\n/**\n * @param {string} id\n * @param {{\n *   amount_raw?: string\n *   wasted_raw?: string\n *   used_raw?: string\n *   route?: InfusionRoute\n *   unit?: InfusionUnit\n *   bolusUnit?: InfusionBolusUnit\n *   wasteConfirmed?: boolean\n *   totalUnit?: InfusionTotalUnit\n *   kg?: string\n *   meta?: 'totals' | null\n * }} updates\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUpdateInfusionDosage = (id, updates) =>\n  prop.actionUpdateDosage(id, updates)\n\n/**\n * We do this as an action creator, because its important that we capture\n * totalUnit as part of confirming totals for infusions. Up unit totals are\n * confirmed we derive totalUnit from complex variables within the app. This\n * writes it to the case object so we can use it for running reports and analytics.\n *\n * @param {string} id\n * @param {InfusionTotalUnit} totalUnit\n * @returns {any} The changes to apply to the case.\n */\nexport const actionConfirmInfusionTotals = (id, totalUnit) =>\n  actionUpdateInfusionDosage(id, { totalUnit, wasteConfirmed: true })\n\n/**\n * @param {string} id\n * @param {InfusionUnit} unit\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUpdateInfusionDrugUnit = (id, unit) =>\n  prop.actionUpdateDosage(id, { unit })\n\n/**\n * @param {string} id\n * @param {InfusionBolusUnit} bolusUnit\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUpdateInfusionDrugBolusUnit = (id, bolusUnit) =>\n  prop.actionUpdateDosage(id, { bolusUnit })\n\n/**\n * @param {string} id\n * @param {string} amountRaw\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUpdateInfusionDrugAmount = (id, amountRaw) =>\n  prop.actionUpdateDosage(id, { amount_raw: amountRaw })\n\n/**\n * @param {MacroInfusionDrug} macroInfusionDrug\n * @returns {any} The changes to apply to the case.\n */\nexport const actionPresetInfusionDrug = ({\n  id,\n  name,\n  dose,\n  unit,\n  bolusUnit,\n}) => ({\n  ...actionSelectInfusionDrug({ id, name }),\n  ...actionUpdateInfusionDrugAmount(id, dose),\n  ...actionUpdateInfusionDrugUnit(id, unit),\n  ...actionUpdateInfusionDrugBolusUnit(id, bolusUnit),\n})\n\n/** @type {(caseData: CaseData) => CaseData['infusionDrugs']} */\nexport const selectCaseInfusionDrugs = prop.selectDrugInfoRaw\n\n/**\n * @type {(\n *   caseData: CaseData\n * ) => { [drugId: string]: InfusionDrugDosageProcessed }}\n */\nexport const selectInfusionDrugDosage = caseData => prop.selectDosage(caseData)\n\n/** @type {InfusionBolusUnit[]} */\nconst baseInfusionBolusUnits = ['mcg', 'mg']\n/** @type {InfusionBolusUnit[]} */\nconst infusionBolusUnits = ['mcg/kg', ...baseInfusionBolusUnits]\n/** @type {(caseData: CaseData) => SelectedInfusionDrug[]} */\nexport const selectSelectedInfusionDrugs = createSelector(\n  prop.selectSelectedDrugs,\n  selectPatientWeightInKg,\n  /**\n   * @param {InfusionDrugDosage[]} drugs\n   * @param {number | null} patientWeightInKg\n   * @returns {SelectedInfusionDrug[]}\n   */\n  (drugs, patientWeightInKg) =>\n    drugs.map(drug => {\n      /**\n       * Setting the defaults here for the unit and bolus unit so they don't\n       * have to be manually set when selecting a drug. We also set the pumpKg\n       * to the patient weight in kg if it's not set.\n       */\n      const unit = drug.unit || 'mcg/kg/min'\n      let bolusUnit = drug.bolusUnit || 'mcg/kg'\n      const unitNeedsKg = unit.includes('kg')\n\n      /**\n       * We purposely limit the options for boluses here based on the unit of\n       * the infusion. This is because we will derive possible and therefore\n       * default units for boluses based on the unit of the infusion.\n       */\n      const bolusUnitOptions = unitNeedsKg\n        ? infusionBolusUnits\n        : baseInfusionBolusUnits\n\n      /**\n       * If you set the infusion unit to something without kg it doesn't make\n       * sense to have the bolus unit set to something that relates to kg. The\n       * pump won't let you bolus based on weight in that scenario. So we\n       * default guess the best option if it's set to one that is invalid.\n       */\n      if (!bolusUnitOptions.includes(bolusUnit)) {\n        bolusUnit = unit.includes('mcg') ? 'mcg' : 'mg'\n      }\n\n      return {\n        ...drug,\n        pumpKg: toNumber(drug.kg || patientWeightInKg) || null,\n        unitNeedsKg,\n        unit,\n        bolusUnit,\n        bolusUnitOptions,\n      }\n    })\n)\n\n/**\n * @type {(\n *   caseData: CaseData\n * ) => { [drugId: string]: SelectedInfusionDrug }}\n */\nexport const selectSelectedInfusionDrugsById = prop.selectSelectedDrugsById\n\n/** @type {CaseSelector<MacroInfusionDrug[]>} */\nexport const selectInfusionDrugsForMacro = createSelector(\n  selectSelectedInfusionDrugs,\n  selectInfusionDosesAdministeredByDrugId,\n  (selectedDrugs, administeredByDrugId) =>\n    selectedDrugs.map(({ id, name, amount_raw, unit, bolusUnit }) => {\n      const administered = administeredByDrugId[id] || []\n      const firstDose = administered[0]\n      return removeKeysWithNullishValues({\n        id,\n        name,\n        unit,\n        bolusUnit,\n        dose: (firstDose && firstDose.amount_raw) || amount_raw,\n      })\n    })\n)\n","export const isBoolean = val => typeof val === 'boolean'\nexport const isString = val => typeof val === 'string'\nexport const isNumber = val => typeof val === 'number' && !isNaN(val)\n","import { createDoseProp } from '../utils/dose-prop'\nimport { isString } from '../utils/is'\nimport {\n  removeKeysWithNullishValues,\n  replaceObjectRawKeys,\n} from '../utils/object'\nimport { createSelector } from '../utils/selector-utils'\nimport {\n  actionAddOralSedativeDose,\n  selectOralSedativeDosesAdministeredByDrugId,\n} from './drugs-administered'\n\nconst prop = createDoseProp({\n  route: 'oral',\n  drugInfoProp: 'oralSedatives',\n  mapFn: replaceObjectRawKeys,\n})\n\n/**\n * @param {OralSedative} oralSedative The drug we're selecting\n * @returns {any} The changes to apply to the case.\n */\nexport const actionSelectOralSedative = ({ id, name, unit }) =>\n  prop.actionSelect(id, { name, unit })\n\n/**\n * @param {string} id The rxcui ID of the drug we're unselecting\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUnselectOralSedative = prop.actionUnselect\n\n/**\n * @param {string} id The rxcui ID of the drug we're unselecting\n * @param {{\n *   amount_raw?: string\n *   route?: OralSedativeRoute\n * }} updates\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUpdateOralSedativeDosage = (id, updates) =>\n  prop.actionUpdateDosage(id, updates)\n\n/**\n * @param {string} id\n * @param {OralSedativeRoute} route\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUpdateOralSedativeRoute = (id, route) =>\n  prop.actionUpdateDosage(id, { route })\n\n/**\n * @param {string} id\n * @param {string} amount_raw\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUpdateOralSedativeAmount = (id, amount_raw) =>\n  prop.actionUpdateDosage(id, { amount_raw })\n\n/**\n * @param {MacroOralSedative} macroOralSedative\n * @returns {any} The changes to apply to the case.\n */\nexport const actionPresetOralSedative = ({\n  id,\n  name,\n  unit,\n  route,\n  dose,\n  preProcedure,\n}) => {\n  let changes = actionSelectOralSedative({ id, name, unit })\n\n  /**\n   * Pre-procedure sedatives work differently in that they actually create a new\n   * dose in editing mode. Normal mid-case sedatives simply select the drug and\n   * update its dosage without recording a dose.\n   */\n  if (preProcedure) {\n    changes = {\n      ...changes,\n      ...actionAddOralSedativeDose({\n        drugId: id,\n        route: route || 'PO',\n        amount_raw: dose || null,\n        time: null,\n        unit: unit || 'mg',\n        editing: true,\n        shouldStartCase: false,\n      }),\n    }\n  } else {\n    changes = {\n      ...changes,\n      ...actionUpdateOralSedativeAmount(id, dose),\n      ...actionUpdateOralSedativeRoute(id, route),\n    }\n  }\n\n  return changes\n}\n\n/** @type {CaseSelector<CaseData['oralSedatives']>} */\nexport const selectCaseOralSedatives = prop.selectDrugInfoRaw\n\n/** @type {CaseSelector<{ [drugId: string]: OralDrugDosageBase }>} */\nexport const selectOralSedativeDosage = prop.selectDosage\n\n/** @type {CaseSelector<{ [drugId: string]: OralDrugDosage[] }>} */\n// @ts-ignore\nexport const selectSelectedOralSedatives = prop.selectSelectedDrugs\n\n/** @type {CaseSelector<{ [drugId: string]: OralDrugDosage }>} */\nexport const selectSelectedOralSedativesById = prop.selectSelectedDrugsById\n\n/** @type {CaseSelector<MacroOralSedative[]>} */\nexport const selectOralSedativesForMacro = createSelector(\n  selectSelectedOralSedatives,\n  selectOralSedativeDosage,\n  selectOralSedativeDosesAdministeredByDrugId,\n  (drugs, dosage, administeredByDrugId) =>\n    drugs.map(({ id, name, unit }) => {\n      const { amount_raw, route } = dosage[id] || {}\n      const administered = administeredByDrugId[id] || []\n      /**\n       * We use this as the indicator for whether the drug was given before\n       * procedure started or not. Any oral sedative given during the case will\n       * have shouldStartCase equal to true. We don't use the isPreProcedure\n       * flag because that is only determined once we have a case start time. If\n       * they are building a preset in the preset mode (or tour mode) it would\n       * be weird if they had to start a case in order to save a pre-procedure\n       * sedative preset.\n       */\n      const shouldStart = administered.some(\n        dose => dose.shouldStartCase === false\n      )\n      const firstDose = administered[0]\n      let dose = (firstDose && firstDose.amount_raw) || amount_raw\n      if (isString(dose) && dose.trim() === '0') {\n        dose = null\n      }\n      return removeKeysWithNullishValues({\n        id,\n        name,\n        unit,\n        preProcedure: shouldStart || null,\n        dose,\n        route: (firstDose && firstDose.route) || route,\n      })\n    })\n)\n","import { selectParenteralDosesAdministeredByDrugId } from './drugs-administered'\nimport { createDoseProp } from '../utils/dose-prop'\nimport {\n  removeKeysWithNullishValues,\n  replaceObjectRawKeys,\n} from '../utils/object'\nimport { createSelector } from '../utils/selector-utils'\n\nconst prop = createDoseProp({\n  route: 'iv',\n  drugInfoProp: 'parenDrugs',\n  mapFn: replaceObjectRawKeys,\n})\n\n/**\n * @param {ParenDrug} parenteralDrug The drug we're selecting\n * @returns {any} The changes to apply to the case.\n */\nexport const actionSelectParenDrug = ({ id, name, unit }) =>\n  prop.actionSelect(id, { name, unit })\n\n/**\n * @param {string} id The rxcui ID of the drug we're unselecting\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUnselectParenDrug = prop.actionUnselect\n\n/**\n * @param {string} id\n * @param {{\n *   route?: ParenDrugRoute\n *   meta?: 'normal' | 'draw' | 'totals'\n *   drawAmountTemp_raw?: string\n *   totalDrawn_raw?: string\n *   wasted_raw?: string\n *   wasteConfirmed?: boolean\n *   amount_raw?: string\n * }} updates\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUpdateParenDrugDosage = (id, updates) =>\n  prop.actionUpdateDosage(id, updates)\n\n/**\n * @param {string} drugId The rxcui ID of the drug we're selecting\n * @param {string} amountRaw The amount as a string we are setting temp draw value to.\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUpdateParenDrugTempDraw = (drugId, amountRaw) =>\n  prop.actionUpdateDosage(drugId, { drawAmountTemp_raw: amountRaw })\n\n/**\n * @param {string} drugId The rxcui ID of the drug\n * @param {string} amountRaw The amount as a string we are setting amount to.\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUpdateParenDrugTempAmount = (drugId, amountRaw) =>\n  prop.actionUpdateDosage(drugId, { amount_raw: amountRaw })\n\n/**\n * @param {string} drugId The rxcui ID of the drug we're selecting\n * @param {ParenDrugRoute} route The administration route as a string we are setting\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUpdateParenDrugRoute = (drugId, route) =>\n  prop.actionUpdateDosage(drugId, { route })\n\n/**\n * @param {MacroParenDrug} macroParenDrug\n * @returns\n */\nexport const actionPresetParenDrug = ({\n  id,\n  name,\n  unit,\n  draw,\n  dose,\n  route,\n}) => {\n  const toReturn = {\n    ...actionSelectParenDrug({ id, name, unit }),\n    ...actionUpdateParenDrugRoute(id, route),\n    ...actionUpdateParenDrugTempAmount(id, dose),\n    ...actionUpdateParenDrugTempDraw(id, draw),\n  }\n\n  return toReturn\n}\n\n/** @type {CaseSelector<CaseData['parenDrugs']>} */\nexport const selectCaseParenDrugs = caseData => prop.selectDrugInfoRaw(caseData)\n/** @type {CaseSelector<{ [drugId: string]: ParenDrugDosageProcessed }>} */\nexport const selectParenDrugDosage = caseData => prop.selectDosage(caseData)\n/** @type {CaseSelector<ParenDrugDosage[]>} */\nexport const selectSelectedParenDrugs = caseData =>\n  prop.selectSelectedDrugs(caseData)\n/** @type {CaseSelector<{ [drugId: string]: ParenDrugDosage }>} */\nexport const selectSelectedParenDrugsById = caseData =>\n  prop.selectSelectedDrugsById(caseData)\n/** @type {CaseSelector<MacroParenDrug[]>} */\nexport const selectParenDrugsForMacro = createSelector(\n  selectSelectedParenDrugs,\n  selectParenDrugDosage,\n  selectParenteralDosesAdministeredByDrugId,\n  (drugs, dosage, administeredByDrugId) =>\n    drugs.map(({ id, name, unit }) => {\n      const { amount_raw, drawAmountTemp_raw, route } = dosage[id] || {}\n      const administered = administeredByDrugId[id] || []\n      const firstDose = administered[0]\n      return removeKeysWithNullishValues(\n        {\n          id,\n          name,\n          route: (firstDose && firstDose.route) || route,\n          unit,\n          draw: drawAmountTemp_raw,\n          dose: (firstDose && firstDose.amount_raw) || amount_raw,\n        },\n        true\n      )\n    })\n)\n","// @ts-check\nimport { createId } from '../utils/id'\nimport {\n  nullIfEmpty,\n  removeKeysWithNullishValues,\n  replaceObjectRawKeys,\n} from '../utils/object'\nimport { createSelector } from '../utils/selector-utils'\nimport { selectIVEnabled } from './case-props'\nimport { selectHasFluidDoseDetail } from './drugs-administered'\n\n/**\n * An array that contains all possible IvSolutionType values.\n *\n * @type {IvSolutionType[]}\n */\nexport const IvSolutionTypes = ['NS', 'LR', 'D5W', 'D5NS', 'D5LR', 'None']\n\n/** @param {Partial<SimplifiedIvDetails>} obj */\nexport const actionUpdateFirstIvSite = obj => {\n  const changes = {}\n  for (const key in obj) {\n    const value = obj[key]\n    if (key === 'solutionType') {\n      changes[`ivLocations.0.solutions.0.name`] = value\n    } else if (key === 'location') {\n      changes[`ivLocations.0.name`] = value\n    } else if (key === 'amount') {\n      changes[`ivLocations.0.solutions.0.amount`] = value\n    } else {\n      changes[`ivLocations.0.${key}`] = value\n    }\n  }\n  return changes\n}\n\n/** @param {string} [preGeneratedId] */\nexport const actionAddIvSite = preGeneratedId => ({\n  [`ivLocations.${preGeneratedId || createId('iv')}.editing`]: true,\n})\n\n/**\n * @param {string} pmtId\n * @param {Partial<IvSiteUpdateProps>} updates\n */\nexport const actionUpdateIvSite = (pmtId, updates) => {\n  const base = `ivLocations.${pmtId}`\n  const res = {}\n  for (const key /** @type {keyof IvSiteUpdateProps} */ in updates) {\n    const typedKey = /** @type {keyof IvSiteUpdateProps} */ (key)\n    const value = updates[typedKey]\n    if (typedKey === 'solutionType') {\n      res[`${base}.solutions.0.name`] = value\n    } else if (typedKey === 'location') {\n      res[`${base}.name`] = value\n    } else {\n      res[`${base}.${typedKey}`] = value\n    }\n  }\n  return res\n}\n\n/** @param {string} pmtId */\nexport const actionRemoveIvSite = pmtId => ({\n  [`ivLocations.${pmtId}`]: null,\n})\n\n/**\n * @param {string} pmtId\n * @param {IvSolutionType} solutionType\n * @param {number} [timeOverride]\n */\nexport const actionAddIvSolution = (pmtId, solutionType, timeOverride) => {\n  const base = `ivLocations.${pmtId}.solutions.${createId('bag')}`\n  return {\n    [`${base}.name`]: solutionType,\n    [`${base}.time`]: timeOverride || Date.now(),\n  }\n}\n\n/**\n * @param {string} pmtId\n * @param {string} bagId\n * @param {Partial<IvSolutionCaseProps>} updates\n */\nexport const actionUpdateIvSolution = (pmtId, bagId, updates) => {\n  const base = `ivLocations.${pmtId}.solutions.${bagId}`\n  const res = {}\n  for (const key in updates) {\n    const val = updates[key]\n    res[`${base}.${key}`] = val\n  }\n  return res\n}\n\n/**\n * @param {string} pmtId\n * @param {string} bagId\n */\nexport const actionRemoveIvSolution = (pmtId, bagId) => ({\n  [`ivLocations.${pmtId}.solutions.${bagId}`]: null,\n})\n\n// sort fn for sort by time property if there is not a time sort to first position\nconst specialTimeSort = (a, b) => {\n  // but always sort id of '0' to the top\n  if (a.id === '0') {\n    return -1\n  }\n  if (b.id === '0') {\n    return 1\n  }\n  // if both have time sort by time oldest first\n  if (a.time && b.time) {\n    return a.time - b.time\n  }\n\n  // if one of them does not have a time, sort it to the bottom\n  if (!a.time && b.time) {\n    return 1\n  }\n  if (a.time && !b.time) {\n    return -1\n  }\n  return 0\n}\n\nconst empty = []\n/**\n * @param {CaseData} caseData\n * @returns {IvSiteBase[]}\n */\nexport const selectIvSiteArrayRaw = caseData => {\n  const raw = caseData.ivLocations\n  const events = caseData.events\n  /**\n   * Legacy support for case ivStart and ivEnd before ivLocations individual\n   * start/stop times were supported. Written (Oct, 2024). Can eventually be removed.\n   */\n  const deprecatedIvStart = events && events.ivStart\n  const deprecatedIvEnd = events && events.ivEnd\n  if (!raw && !deprecatedIvStart) {\n    return empty\n  }\n  const toReturn = []\n  for (const key in raw) {\n    toReturn.push({ id: key, ...raw[key] })\n  }\n  /**\n   * If there is only one site, and it does not have a time, but the case has a\n   * time, use the case time\n   */\n  if (toReturn.length === 1) {\n    if (!toReturn[0].time && deprecatedIvStart) {\n      toReturn[0].time = deprecatedIvStart\n    }\n    if (!toReturn[0].timeRemoved && deprecatedIvEnd) {\n      toReturn[0].timeRemoved = deprecatedIvEnd\n    }\n  }\n\n  return toReturn.sort(specialTimeSort)\n}\n\n/** @type {(keyof IvSite)[]} */\nconst siteRequiredProps = [\n  'name',\n  'side',\n  'securedWith',\n  'attempts',\n  'needleGauge',\n  'time',\n]\n\n/** @param {Omit<IvSite, 'placementComplete'>} site */\nconst placementIsComplete = site =>\n  !!(\n    siteRequiredProps.every(key => site[key]) &&\n    // has first solution answer\n    site.solutions &&\n    site.solutions['0'] &&\n    site.solutions['0'].name\n  )\n\nconst emptyArray = []\n/** @type {CaseSelector<IvSite[]>} */\nexport const selectIvSites = createSelector(\n  selectIVEnabled,\n  selectIvSiteArrayRaw,\n  /**\n   * @param {boolean} enabled\n   * @param {IvSiteBase[]} sites\n   * @returns {IvSite[]}\n   */\n  (enabled, sites) => {\n    if (!enabled) {\n      return emptyArray\n    }\n    if (!sites.length) {\n      sites = [{ id: '0' }]\n    }\n    const processed = sites.map((siteRaw, index) => {\n      const addedProps = {}\n\n      if (siteRaw.time && siteRaw.timeRemoved) {\n        addedProps.duration = siteRaw.timeRemoved - siteRaw.time\n      }\n      const solutionsRaw = siteRaw.solutions || {}\n      const sortedSolutions = []\n      for (const key in solutionsRaw) {\n        sortedSolutions.push({\n          id: key,\n          ...replaceObjectRawKeys(solutionsRaw[key]),\n        })\n      }\n      sortedSolutions.sort(specialTimeSort)\n\n      let count = 1\n      const solutions = sortedSolutions.map(sol => ({\n        ...sol,\n        bagNumber: sol.name !== 'None' ? count++ : null,\n      }))\n\n      /** @type {Omit<IvSite, 'placementComplete'>} */\n      const site = {\n        ...siteRaw,\n        ...addedProps,\n        active: !!(siteRaw.time && !siteRaw.timeRemoved),\n        siteNumber: index + 1,\n        solutions,\n      }\n      return site\n    })\n\n    /** @type {IvSite[]} */\n    const toReturn = []\n    for (const site of processed) {\n      const placementComplete = placementIsComplete(site)\n      if (!placementComplete) {\n        toReturn.push({ ...site, placementComplete, editing: true })\n      } else {\n        toReturn.push({ ...site, placementComplete })\n      }\n    }\n    return toReturn\n  }\n)\n\n/** @type {CaseSelector<number | null>} */\nexport const selectLatestIvRemovedTime = createSelector(\n  selectIvSites,\n  sites => {\n    let latest = 0\n    for (const site of sites) {\n      if (site.timeRemoved && site.timeRemoved > latest) {\n        latest = site.timeRemoved\n      }\n    }\n    return latest || null\n  }\n)\n\n/** @type {CaseSelector<number | null>} */\nexport const selectEarliestIvPlacedTime = createSelector(\n  selectIvSites,\n  sites => {\n    let earliest = Infinity\n    for (const site of sites) {\n      if (site.time && site.time < earliest) {\n        earliest = site.time\n      }\n    }\n    return earliest === Infinity ? null : earliest\n  }\n)\n\n/** @type {CaseSelector<IvSite[] | null>} */\nexport const selectActiveIvSites = createSelector(selectIvSites, sites =>\n  nullIfEmpty(sites.filter(site => site.active))\n)\n\n/**\n * Uses certain case values as an indicator of whether or not to show the\n * various detailed fluid fields and info.\n *\n * @type {CaseSelector<boolean>}\n */\nexport const selectUsingDetailedFluids = createSelector(\n  selectIVEnabled,\n  selectHasFluidDoseDetail,\n  selectIvSites,\n  /**\n   * @param {IvSite[]} sites\n   * @returns {boolean}\n   */\n  (ivEnabled, hasDetail, sites) =>\n    ivEnabled &&\n    (hasDetail ||\n      sites.length > 1 ||\n      sites.some(\n        site =>\n          site.solutions.length > 1 ||\n          site.solutions.some(sol => sol.amount_raw)\n      ))\n)\n\n/** @deprecated Remove this once no longer used by ac-patterns */\nexport const selectFirstIvSolution = createSelector(\n  selectIvSites,\n  locations => {\n    const first =\n      locations[0] && locations[0].solutions && locations[0].solutions[0]\n    if (!first) {\n      return null\n    }\n    const { name, amount } = first\n    return removeKeysWithNullishValues({ solutionType: name, amount })\n  }\n)\n\nexport const selectIvAccessData = createSelector(selectIvSites, locations => {\n  const { name, side, securedWith, attempts, needleGauge, solutions } =\n    locations[0] || {}\n  const firstSolution = solutions && solutions[0]\n  const firstSolutionType = firstSolution && firstSolution.name\n  return {\n    location: name,\n    side,\n    securedWith,\n    attempts: attempts || 0,\n    needleGauge,\n    solutionType: firstSolutionType || undefined,\n  }\n})\n\nexport const selectHasAnyIvAccessValues = createSelector(\n  selectIvAccessData,\n  data => {\n    for (const key in data) {\n      // anything truthy we'll consider true\n      if (data[key]) {\n        return true\n      }\n    }\n    return false\n  }\n)\n\nconst getDescription = (site, isRemoval, hasMultipleSites) =>\n  [\n    'IV',\n    hasMultipleSites && `#${site.siteNumber}`,\n    isRemoval ? 'removed from' : 'placed at',\n    'the',\n    `${site.side} ${site.name}`,\n  ]\n    .filter(x => x)\n    .join(' ')\n/** @type {CaseSelector<FluidEvent[]>} */\nexport const selectFluidEvents = createSelector(\n  selectIvSites,\n  /** @param {IvSite[]} ivSites */ ivSites => {\n    const filtered = ivSites.filter(site => site.time && site.name && site.side)\n    /** @type {FluidEvent[]} */\n    const toReturn = []\n    const hasMultipleSites = filtered.length > 1\n    for (const site of filtered) {\n      toReturn.push({\n        id: site.id + '_placed',\n        note: getDescription(site, false, hasMultipleSites),\n        type: 'ivPlaced',\n        time: site.time,\n        derived: true,\n        showInEventReport: true,\n      })\n      if (site.timeRemoved) {\n        toReturn.push({\n          id: site.id + '_removed',\n          note: getDescription(site, true, hasMultipleSites),\n          type: 'ivRemoved',\n          time: site.timeRemoved,\n          derived: true,\n          showInEventReport: true,\n        })\n      }\n      if (site.solutions.length > 1) {\n        // only do these for newIvBag events if this was not the first bag\n        for (const solution of site.solutions.slice(1)) {\n          if (solution.time && solution.name !== 'None') {\n            toReturn.push({\n              // @ts-ignore\n              id: `${site.id}_${solution.id}`,\n              note: `Added ${solution.name} IV bag for site #${site.siteNumber} `,\n              type: 'newIvBag',\n              time: solution.time,\n              derived: true,\n              showInEventReport: true,\n            })\n          }\n        }\n      }\n    }\n    return toReturn\n  }\n)\n\n/** @type {CaseSelector<Record<string, number>>} */\nexport const selectFluidTimesByEventId = createSelector(\n  selectFluidEvents,\n  events => {\n    const toReturn = {}\n    for (const event of events) {\n      toReturn[event.id] = event.time\n    }\n    return toReturn\n  }\n)\n","import { selectCalculateDrugWaste } from './case-props'\nimport { createSelector } from '../utils/selector-utils'\nimport {\n  selectParenteralDosesAdministeredByDrugId,\n  selectOralSedativeDosesAdministeredByDrugId,\n  selectSyringeFlushesBySiteId,\n} from './drugs-administered'\nimport { selectSelectedInfusionDrugs } from './infusion-drug'\nimport { selectCaseOralSedatives } from './oral-sedative'\nimport { eventSelectors } from './events'\nimport { selectCaseParenDrugs, selectParenDrugDosage } from './paren-drug'\nimport { cleanUpRound } from '../utils/numbers'\nimport { addDiffUnits } from '../utils/add-diff-units'\nimport { selectUsingDetailedFluids, selectIvSites } from './fluids'\nimport { isNumber } from '../utils/is'\n\nconst totals = (doses, expectedRoutes) => {\n  const byRoute = expectedRoutes.reduce((res, route) => {\n    res[route] = 0\n    return res\n  }, {})\n  const result = { total: 0, byRoute }\n  let max = 0\n  for (const { route, amount, time } of doses) {\n    if (!result.byRoute.hasOwnProperty(route) || !amount || !time) {\n      continue\n    }\n    max = Math.max(max, amount)\n    byRoute[route] = cleanUpRound(byRoute[route] + amount)\n    result.total = cleanUpRound(result.total + amount)\n  }\n  result.maxDose = max\n  return result\n}\n\nconst createArrayVersion = selector =>\n  createSelector(selector, totals => {\n    if (!totals) {\n      return []\n    }\n    const asArray = Object.keys(totals).map(id => ({ id, ...totals[id] }))\n    asArray.sort((a, b) => a.caseCount - b.caseCount)\n    return asArray\n  })\n\nconst createUsedVersion = selector =>\n  createSelector(selector, totals => {\n    const result = {}\n    for (const key in totals) {\n      const entry = totals[key]\n      if (entry.total || entry.wasted) {\n        result[key] = entry\n      }\n    }\n    return result\n  })\n\nconst parenRoutes = ['IV', 'IM', 'IN']\n/** @type {CaseSelector<SingleCaseParenDrugTotalsById>} */\nexport const selectParenDrugTotalsNoInfusion = createSelector(\n  selectCaseParenDrugs,\n  selectCaseOralSedatives,\n  eventSelectors.selectCaseStartTime,\n  selectParenteralDosesAdministeredByDrugId,\n  selectParenDrugDosage,\n  selectCalculateDrugWaste,\n  /**\n   * @param {CaseData['parenDrugs']} parenDrugs\n   * @param {CaseData['oralSedatives']} oralSedatives\n   * @param {number | null} caseStartTime\n   * @param {any} dosesByDrugId\n   * @param {{ [drugId: string]: ParenDrugDosageProcessed }} dosageById\n   * @param {boolean} calculateDrugWaste\n   */\n  (\n    parenDrugs,\n    oralSedatives,\n    caseStartTime,\n    dosesByDrugId,\n    dosageById,\n    calculateDrugWaste\n  ) => {\n    const result = {}\n    for (const drugId in dosesByDrugId) {\n      const allDoses = dosesByDrugId[drugId]\n      const dosage = dosageById[drugId] || {}\n      const { unit, name } = parenDrugs[drugId] || oralSedatives[drugId] || {}\n      const doses = []\n      let preProcedureTotal = 0\n      allDoses.forEach(dose => {\n        const { time } = dose\n        if (!caseStartTime || caseStartTime > time) {\n          preProcedureTotal += dose.amount\n        } else {\n          doses.push(dose)\n        }\n      })\n      const loopReturn = (result[drugId] = totals(allDoses, parenRoutes))\n      if (calculateDrugWaste) {\n        loopReturn.wasted = cleanUpRound(\n          // we have to add back pre-procedure total here because\n          // we don't currently track waste for pre-procedure IM drugs\n          // @ts-ignore\n          (dosage.totalDrawn || 0) - loopReturn.total + preProcedureTotal\n        )\n      } else {\n        // @ts-ignore\n        loopReturn.wasted = dosage.wasted || 0\n      }\n      loopReturn.unit = unit || 'mg'\n      loopReturn.name = name || null\n      loopReturn.expended = cleanUpRound(loopReturn.total + loopReturn.wasted)\n    }\n    return result\n  }\n)\n/** @type {CaseSelector<SingleCaseParenDrugTotalsById>} */\nexport const selectUsedParenDrugTotalsNoInfusion = createUsedVersion(\n  selectParenDrugTotalsNoInfusion\n)\n\n/** @type {CaseSelector<SingleCaseParenDrugTotalsById>} */\nexport const selectInfusionDrugTotals = createSelector(\n  selectSelectedInfusionDrugs,\n  /** @param {SelectedInfusionDrug[]} infusionDrugs */\n  infusionDrugs => {\n    const result = {}\n    for (const drug of infusionDrugs) {\n      const { id, name, wasted, totalUnit, used, wasteConfirmed } = drug\n\n      if (!wasteConfirmed || !totalUnit) {\n        continue\n      }\n\n      let finalWasted = wasted || 0\n      let finalTotal = used || 0\n\n      result[id] = {\n        wasted: finalWasted,\n        unit: totalUnit,\n        total: finalTotal,\n        name,\n        expended: cleanUpRound(finalTotal + finalWasted),\n      }\n    }\n    return result\n  }\n)\n/** @type {CaseSelector<SingleCaseParenDrugTotalsById>} */\nexport const selectUsedInfusionDrugTotals = createUsedVersion(\n  selectInfusionDrugTotals\n)\n\n/** @type {(caseData: CaseData) => SingleCaseParenDrugTotalsById} */\nexport const selectParenDrugTotals = createSelector(\n  selectParenDrugTotalsNoInfusion,\n  selectInfusionDrugTotals,\n  /**\n   * @param {SingleCaseSingleParenDrugTotal} parenTotals\n   * @param {SingleCaseSingleParenDrugTotal} infusionTotals\n   * @returns {SingleCaseParenDrugTotalsById}\n   */\n  (parenTotals, infusionTotals) => {\n    /** @type {SingleCaseParenDrugTotalsById} */\n    const result = JSON.parse(JSON.stringify(parenTotals))\n    for (const id in infusionTotals) {\n      if (result[id]) {\n        const paren = result[id]\n        const infusion = infusionTotals[id]\n        paren.total = addDiffUnits(\n          paren.total,\n          paren.unit,\n          infusion.total,\n          infusion.unit,\n          paren.unit\n        ).amount\n        paren.byRoute.IV = addDiffUnits(\n          paren.byRoute.IV,\n          paren.unit,\n          infusion.total,\n          infusion.unit,\n          paren.unit\n        ).amount\n        paren.wasted = addDiffUnits(\n          paren.wasted,\n          paren.unit,\n          infusion.wasted,\n          infusion.unit,\n          paren.unit\n        ).amount\n        paren.expended = addDiffUnits(\n          paren.expended,\n          paren.unit,\n          infusion.expended,\n          infusion.unit,\n          paren.unit\n        ).amount\n      } else {\n        const entry = infusionTotals[id]\n        result[id] = entry\n        // we do this to keep it consistent\n        // structure for infusions as for other\n        // paren drugs\n        result[id].byRoute = {\n          IV: entry.total,\n          IM: 0,\n          IN: 0,\n        }\n      }\n    }\n\n    return result\n  }\n)\n/** @type {(caseData: CaseData) => SingleCaseParenDrugTotalsById} */\nexport const selectUsedParenDrugTotals = createUsedVersion(\n  selectParenDrugTotals\n)\n\nconst oralRoutes = ['PO', 'SL']\n/** @type {CaseSelector<SingleCaseOralDrugTotalsById>} */\nexport const selectOralSedativeTotals = createSelector(\n  selectCaseOralSedatives,\n  selectOralSedativeDosesAdministeredByDrugId,\n  /**\n   * @type {(\n   *   oralSedatives: CaseData['oralSedatives'],\n   *   oralDoses: ReturnType<selectOralSedativeDosesAdministeredByDrugId>\n   * ) => SingleCaseOralDrugTotalsById}\n   */\n  (oralSedatives, oralDoses) => {\n    /** @type {SingleCaseOralDrugTotalsById} */\n    const result = {}\n    for (const drugId in oralDoses) {\n      const doses = oralDoses[drugId]\n      const { unit, name } = oralSedatives[drugId] || {}\n      /** @type {SingleCaseSingleOralDrugTotal} */\n      // @ts-ignore\n      const loopReturn = (result[drugId] = totals(doses, oralRoutes))\n      // @ts-ignore\n      loopReturn.unit = unit || 'mg'\n      loopReturn.name = name || null\n    }\n\n    return result\n  }\n)\n/** @type {CaseSelector<SingleCaseOralDrugTotalsById>} */\nexport const selectUsedOralSedativeTotals = createUsedVersion(\n  selectOralSedativeTotals\n)\n\n/** @type {CaseSelector<SingleCaseSingleOralDrugTotal[]>} */\nexport const selectOralSedativeTotalsAsArray = createArrayVersion(\n  selectOralSedativeTotals\n)\n/** @type {CaseSelector<SingleCaseSingleOralDrugTotal[]>} */\nexport const selectUsedOralSedativeTotalsAsArray = createArrayVersion(\n  selectUsedOralSedativeTotals\n)\n/** @type {CaseSelector<SingleCaseSingleParenDrugTotal[]>} */\nexport const selectParenDrugTotalsAsArray = createArrayVersion(\n  selectParenDrugTotals\n)\n/** @type {CaseSelector<SingleCaseSingleParenDrugTotal[]>} */\nexport const selectUsedParenDrugTotalsAsArray = createArrayVersion(\n  selectUsedParenDrugTotals\n)\n/** @type {CaseSelector<FluidTotals>} */\nexport const selectSolutionFluidTotals = createSelector(\n  selectIvSites,\n  selectUsingDetailedFluids,\n  selectSyringeFlushesBySiteId,\n  /**\n   * @param {IvSite[]} ivSites\n   * @returns {FluidTotals}\n   */\n  (ivSites, usingDetailedFluids, syringeFlushesBySiteId) => {\n    const interim = { overall: {}, bySite: {} }\n    const addTotal = (targetObj, name, total) => {\n      if (!targetObj[name]) {\n        targetObj[name] = { id: name, name, total, unit: 'mL' }\n      } else {\n        targetObj[name].total += total\n      }\n    }\n    for (const site of ivSites) {\n      const siteTotals = {}\n      const { solutions } = site\n      const syringeFlushes = syringeFlushesBySiteId[site.id] || []\n      if (solutions) {\n        for (const solution of solutions) {\n          const { name, amount, amountConfirmed } = solution\n          if (\n            !name ||\n            name === 'None' ||\n            !isNumber(amount) ||\n            (usingDetailedFluids && !amountConfirmed)\n          ) {\n            continue\n          }\n          addTotal(interim.overall, name, amount)\n          addTotal(siteTotals, name, amount)\n        }\n      }\n      for (const flush of syringeFlushes) {\n        const { drugId, amount } = flush\n        if (!drugId || !isNumber(amount)) {\n          continue\n        }\n        addTotal(interim.overall, drugId, amount)\n        addTotal(siteTotals, drugId, amount)\n      }\n      interim.bySite[site.id] = siteTotals\n    }\n\n    /** @type {FluidTotals} */\n    const toReturn = { overall: [], bySite: {} }\n    for (const key in interim.overall) {\n      toReturn.overall.push(interim.overall[key])\n    }\n\n    for (const key in interim.bySite) {\n      const siteTotals = interim.bySite[key]\n      toReturn.bySite[key] = []\n      for (const siteKey in siteTotals) {\n        toReturn.bySite[key].push(siteTotals[siteKey])\n      }\n    }\n\n    return toReturn\n  }\n)\n\n/** @type {CaseSelector<FluidTotal[]>} */\nexport const selectSolutionFluidTotalsAsArray = createSelector(\n  selectSolutionFluidTotals,\n  totals => totals.overall\n)\n","import { createSelector } from '../utils/selector-utils'\nimport {\n  selectUsedOralSedativeTotalsAsArray,\n  selectUsedParenDrugTotalsAsArray,\n} from './drug-totals'\nimport { eventSelectors } from './events'\nimport { selectEarliestIvPlacedTime, selectLatestIvRemovedTime } from './fluids'\nimport { selectSedativesBeingUsed } from './sedation-level'\n\nconst {\n  selectAnesthesiaMinutes,\n  selectSurgeryMinutes,\n  selectRecoveryMinutes,\n  selectCompleteCaseMinutes,\n  selectMonitoringMinutes,\n  selectEventTimesRaw,\n} = eventSelectors\n\nexport const selectEventsForCaseSummary = createSelector(\n  selectEventTimesRaw,\n  selectEarliestIvPlacedTime,\n  selectLatestIvRemovedTime,\n  (events, earliestIv, latestIvRemoved) => {\n    const toReturn = { ...events }\n    if (earliestIv) {\n      toReturn.ivStart = earliestIv\n    }\n    if (latestIvRemoved) {\n      toReturn.ivEnd = latestIvRemoved\n    }\n    return toReturn\n  }\n)\n\nexport const selectCaseSummary = createSelector(\n  selectUsedParenDrugTotalsAsArray,\n  selectUsedOralSedativeTotalsAsArray,\n  selectEventsForCaseSummary,\n  selectAnesthesiaMinutes,\n  selectSurgeryMinutes,\n  selectRecoveryMinutes,\n  selectCompleteCaseMinutes,\n  selectMonitoringMinutes,\n  selectSedativesBeingUsed,\n  (\n    parenDrugsUsed,\n    oralSedativesUsed,\n    events,\n    anesthesiaMinutes,\n    surgeryMinutes,\n    recoveryMinutes,\n    completeCaseMinutes,\n    monitoringMinutes,\n    sedativesBeingUsed\n  ) => ({\n    parenDrugsUsed,\n    oralSedativesUsed,\n    events,\n    anesthesiaMinutes: sedativesBeingUsed ? anesthesiaMinutes || 0 : null,\n    surgeryMinutes: surgeryMinutes || 0,\n    recoveryMinutes: sedativesBeingUsed ? recoveryMinutes || 0 : null,\n    completeCaseMinutes: completeCaseMinutes || 0,\n    monitoringMinutes: monitoringMinutes || 0,\n  })\n)\n","import { addDiffUnits, toTargetUnit } from '../utils/add-diff-units'\nimport { cleanUpRound, getAverage } from '../utils/numbers'\nimport { selectCaseSummary } from './case-summary'\n\nconst propsToKeep = [\n  'sedationProviderName',\n  'calculateDrugWaste', // needed for calculating wasted\n  'surgeonName',\n  'recorderName',\n  'sedationLevel',\n  'preMedsAdministered',\n  'drugsAdministered',\n  'drugDosage',\n  'parenDrugs',\n  'oralSedatives',\n  'localAnesthetics',\n  'infusionDrugs',\n  'laDilutions',\n  'events',\n  'customEvents',\n]\nexport const removePropsNotNeededForAnalytics = caseData => {\n  const toReturn = {}\n  for (const prop of propsToKeep) {\n    if (caseData.hasOwnProperty(prop)) {\n      toReturn[prop] = caseData[prop]\n    }\n  }\n  return toReturn\n}\n\nconst timeKeys = [\n  'anesthesiaMinutes',\n  'surgeryMinutes',\n  'recoveryMinutes',\n  'completeCaseMinutes',\n  'monitoringMinutes',\n]\n/** @type {(entries: CaseSummary[]) => CaseMinutes} */\nconst getTimeAverages = entries => {\n  const averagesData = {\n    anesthesiaMinutes: [],\n    surgeryMinutes: [],\n    recoveryMinutes: [],\n    completeCaseMinutes: [],\n    monitoringMinutes: [],\n  }\n  for (const entry of entries) {\n    for (const key of timeKeys) {\n      const value = entry[key]\n      // there are certain cases we don't want to include a case at all in the average\n      // in those scenarios, the value should be explicitly set to null\n      if (value !== null) {\n        averagesData[key].push(entry[key])\n      }\n    }\n  }\n  const averages = {}\n  for (const key in averagesData) {\n    averages[key] = getAverage(averagesData[key])\n  }\n  // @ts-ignore\n  return averages\n}\n\nconst ensureDrugsHaveName = list => {\n  for (const entry of list) {\n    if (!entry.name) {\n      throw Error('MISSING_DRUG_NAME')\n    }\n  }\n}\n\n/** @type {(entries: CaseReport[]) => CaseSummary[]} */\nexport const getProcessedCaseList = entries =>\n  entries.map(({ caseData, ...rest }) => {\n    try {\n      const toReturn = {\n        ...rest,\n        ...selectCaseSummary(caseData),\n      }\n      ensureDrugsHaveName(toReturn.parenDrugsUsed)\n      ensureDrugsHaveName(toReturn.oralSedativesUsed)\n      return toReturn\n    } catch (err) {\n      const { compositionId, appointmentId } = rest\n      const message = `${err.message} (apptId: ${appointmentId}, compId: ${compositionId})`\n      err.message = message\n      throw err\n    }\n  })\n\n/** @type {(entries: CaseSummary[]) => OralDrugAnalysisResult[]} */\nconst getOralDrugAnalysis = entries => {\n  const oralSedatives = {}\n  const totalCaseCount = entries.length\n\n  /** @type {(totalResultForCase: SingleCaseSingleOralDrugTotal) => void} */\n  const addEntry = totalResultForCase => {\n    const { id, total, maxDose, name, unit, byRoute } = totalResultForCase\n    let existing = oralSedatives[id]\n    if (!existing) {\n      existing = oralSedatives[id] = {\n        byRoute: {\n          PO: 0,\n          SL: 0,\n        },\n      }\n    }\n\n    const startingUnit = existing.unit || unit\n\n    // this will determine the unit we're using from now on\n    const { amount: updatedTotal, unit: updatedUnit } = addDiffUnits(\n      existing.total || 0,\n      startingUnit,\n      total || 0,\n      unit\n    )\n\n    existing.maxDose = Math.max(\n      toTargetUnit(existing.maxDose || 0, startingUnit, updatedUnit),\n      toTargetUnit(maxDose || 0, unit, updatedUnit)\n    )\n    existing.name = existing.name || name\n    existing.unit = updatedUnit\n    existing.total = updatedTotal\n    existing.caseCount = (existing.caseCount || 0) + 1\n    existing.percentOfCases = cleanUpRound(existing.caseCount / totalCaseCount)\n    existing.byRoute = {\n      PO: addDiffUnits(\n        existing.byRoute.PO,\n        startingUnit,\n        byRoute.PO,\n        unit,\n        updatedUnit\n      ).amount,\n      SL: addDiffUnits(\n        existing.byRoute.SL,\n        startingUnit,\n        byRoute.SL,\n        unit,\n        updatedUnit\n      ).amount,\n    }\n  }\n\n  for (const entry of entries) {\n    for (const drugEntry of entry.oralSedativesUsed) {\n      addEntry(drugEntry)\n    }\n  }\n\n  const asArray = []\n\n  for (const id in oralSedatives) {\n    asArray.push({ id, ...oralSedatives[id] })\n  }\n\n  asArray.sort((a, b) => b.caseCount - a.caseCount)\n\n  return asArray\n}\n\n/** @type {(entries: CaseSummary[]) => ParenDrugAnalysisResult[]} */\nconst getParenDrugAnalysis = entries => {\n  const parenDrugs = {}\n  const totalCaseCount = entries.length\n\n  /** @type {(totalResultForCase: SingleCaseSingleParenDrugTotal) => void} */\n  const addEntry = totalResultForCase => {\n    const {\n      id,\n      total,\n      wasted,\n      maxDose,\n      name,\n      unit,\n      byRoute,\n    } = totalResultForCase\n    if (!parenDrugs[id]) {\n      parenDrugs[id] = {\n        byRoute: {\n          IV: 0,\n          IM: 0,\n          IN: 0,\n        },\n      }\n    }\n\n    const existing = parenDrugs[id]\n    const startingUnit = existing.unit || unit\n\n    // this will determine the unit we're using from now on\n    const { amount: updatedTotal, unit: updatedUnit } = addDiffUnits(\n      existing.total || 0,\n      startingUnit,\n      total || 0,\n      unit\n    )\n\n    // this will force wasted to use the same unit\n    const { amount: updatedWaste } = addDiffUnits(\n      existing.wasted || 0,\n      startingUnit,\n      wasted || 0,\n      unit,\n      updatedUnit\n    )\n\n    existing.maxDose = Math.max(\n      toTargetUnit(existing.maxDose || 0, startingUnit, updatedUnit),\n      toTargetUnit(maxDose || 0, unit, updatedUnit)\n    )\n    existing.name = existing.name || name\n    existing.unit = updatedUnit\n    existing.total = updatedTotal\n    existing.wasted = updatedWaste\n    existing.expended = cleanUpRound(updatedTotal + updatedWaste)\n    existing.caseCount = (existing.caseCount || 0) + 1\n    existing.percentOfCases = cleanUpRound(existing.caseCount / totalCaseCount)\n    existing.byRoute = {\n      IV: addDiffUnits(\n        existing.byRoute.IV,\n        startingUnit,\n        byRoute.IV,\n        unit,\n        updatedUnit\n      ).amount,\n      IM: addDiffUnits(\n        existing.byRoute.IM,\n        startingUnit,\n        byRoute.IM,\n        unit,\n        updatedUnit\n      ).amount,\n      IN: addDiffUnits(\n        existing.byRoute.IN,\n        startingUnit,\n        byRoute.IN,\n        unit,\n        updatedUnit\n      ).amount,\n    }\n  }\n\n  for (const entry of entries) {\n    for (const drugEntry of entry.parenDrugsUsed) {\n      addEntry(drugEntry)\n    }\n  }\n\n  const asArray = []\n\n  for (const id in parenDrugs) {\n    asArray.push({ id, ...parenDrugs[id] })\n  }\n\n  asArray.sort((a, b) => b.caseCount - a.caseCount)\n\n  return asArray\n}\n\n/** @type {(entries: CaseReport[]) => CaseAnalyticsResult} */\nexport const getCaseAnalytics = entries => {\n  const cases = getProcessedCaseList(entries)\n  return {\n    cases,\n    timeAverages: getTimeAverages(cases),\n    oralDrugs: getOralDrugAnalysis(cases),\n    parenDrugs: getParenDrugAnalysis(cases),\n  }\n}\n","/**\n * @param {{\n *   caseStart: number\n *   baseInterval: 5 | 10\n *   cpTime: number\n *   vitalsDuration: number\n * }} param0\n * @returns {boolean}\n */\nexport const isRequiredCheckpoint = ({\n  caseStart,\n  baseInterval,\n  cpTime,\n  vitalsDuration,\n}) => {\n  const elapsed = cpTime - caseStart\n  if (elapsed > vitalsDuration) return false\n  return elapsed >= 0 && elapsed % (baseInterval * 60000) === 0\n}\n","// @ts-check\nimport { shallowEqualMemoize } from './utils/selector-utils'\n\n/**\n * @param {Pick<ReportRenderingInputs, 'tempUnit'>} opts\n * @returns {Record<EveryVitalType, VitalTypeDefinition>}\n */\nexport const getVitalTypesById = opts => ({\n  bp: {\n    name: 'Blood Pressure',\n    chartName: 'BP',\n    type: 'bp',\n    includeInComparison: false,\n    includeInAuto: true,\n    unit: 'mmHg',\n  },\n  sbp: {\n    name: 'Systolic Blood Pressure',\n    chartName: 'SBP',\n    startValue: 120,\n    type: 'number',\n    min: 0,\n    max: 400,\n    unit: 'mmHg',\n    includeInComparison: true,\n    includeInAuto: true,\n    subItem: true,\n    includeInManual: true,\n  },\n  dbp: {\n    name: 'Diastolic Blood Pressure',\n    chartName: 'DBP',\n    startValue: 80,\n    type: 'number',\n    min: 0,\n    max: 400,\n    unit: 'mmHg',\n    includeInComparison: true,\n    includeInAuto: true,\n    subItem: true,\n    includeInManual: true,\n  },\n  map: {\n    name: 'Mean Arterial Pressure',\n    chartName: 'MAP',\n    startValue: 90,\n    type: 'number',\n    min: 0,\n    max: 400,\n    unit: 'mmHg',\n    includeInComparison: true,\n    includeInAuto: true,\n    subItem: true,\n  },\n  hr: {\n    name: 'Heart Rate',\n    chartName: 'HR',\n    includeInComparison: true,\n    includeInAuto: true,\n    startValue: 80,\n    type: 'number',\n    min: 0,\n    max: 500,\n    unit: 'bpm',\n    includeInManual: true,\n  },\n  spo2: {\n    name: 'Oxygen saturation',\n    chartName: 'SpO₂',\n    includeInComparison: true,\n    includeInAuto: true,\n    startValue: 100,\n    type: 'number',\n    max: 100,\n    min: 1,\n    unit: '%',\n    table: true,\n    includeInManual: true,\n  },\n  ecg: {\n    name: 'ECG Rhythm',\n    chartName: 'ECG',\n    startValue: 'NSR',\n    type: 'string',\n    fillFromPrevious: true,\n    table: true,\n  },\n  rr: {\n    name: 'Respiration Rate',\n    chartName: 'RR',\n    includeInComparison: true,\n    includeInAuto: true,\n    startValue: 16,\n    type: 'number',\n    unit: 'R/min',\n    max: 200,\n    min: 0,\n    includeInManual: true,\n  },\n  temp: {\n    name: 'Temperature',\n    chartName: 'Temp',\n    includeInAuto: true,\n    startValue: opts.tempUnit === 'F' ? 98.7 : 37,\n    type: 'float',\n    step: 0.1,\n    min: 0,\n    max: opts.tempUnit === 'F' ? 122 : 50,\n    unit: opts.tempUnit === 'F' ? '°F' : '°C',\n    table: true,\n  },\n  fico2: {\n    name: 'F.I. CO₂',\n    chartName: 'FiCO₂',\n    includeInAuto: true,\n    startValue: 0,\n    min: 0,\n    max: 760,\n    type: 'number',\n    unit: 'mmHg',\n    table: true,\n  },\n  etco2: {\n    name: 'E.T. CO₂',\n    chartName: 'EtCO₂',\n    includeInComparison: true,\n    includeInAuto: true,\n    startValue: 40,\n    min: 0,\n    max: 1500,\n    type: 'number',\n    unit: 'mmHg',\n    table: true,\n    includeInManual: true,\n  },\n  fio2: {\n    name: 'F.I. O₂',\n    chartName: 'FiO₂',\n    includeInAuto: true,\n    startValue: 21,\n    type: 'number',\n    max: 1500,\n    min: 0,\n    // We don't specify a unit here because\n    // it could be either mmHg or %\n    unit: '',\n    table: true,\n  },\n  eto2: {\n    name: 'E.T. O₂',\n    chartName: 'EtO₂',\n    includeInAuto: true,\n    startValue: 70,\n    type: 'number',\n    max: 1500,\n    min: 0,\n    // We don't specify a unit here because\n    // it could be either mmHg or %\n    unit: '',\n    table: true,\n  },\n  fin2o: {\n    name: 'F.I. N₂O',\n    chartName: 'FiN₂O',\n    includeInAuto: true,\n    startValue: 50,\n    type: 'number',\n    max: 1500,\n    min: 0,\n    // We don't specify a unit here because\n    // it could be either mmHg or %\n    unit: '',\n    table: true,\n  },\n  etn2o: {\n    name: 'E.T. N₂O',\n    chartName: 'EtN₂O',\n    includeInAuto: true,\n    startValue: 45,\n    type: 'number',\n    max: 1500,\n    min: 0,\n    // We don't specify a unit here because\n    // it could be either mmHg or %\n    unit: '',\n    table: true,\n  },\n  sedLev: {\n    name: 'Sedation Level',\n    chartName: 'Sed Level',\n    startValue: 'None',\n    type: 'string',\n    fillFromPrevious: true,\n    table: true,\n  },\n  // Describes the patient's breathing status and degree of support, whether spontaneous, assisted, or fully controlled.\n  ventStatus: {\n    name: 'Ventilatory Status',\n    chartName: 'Vent Status',\n    startValue: 'Spon',\n    type: 'string',\n    fillFromPrevious: true,\n    table: true,\n  },\n  // Specifies the operational mode of the ventilator when in use for mechanical ventilation.\n  ventMode: {\n    name: 'Ventilator Mode',\n    chartName: 'Vent Mode',\n    startValue: 'None',\n    type: 'string',\n    fillFromPrevious: true,\n    table: true,\n  },\n  fisev: {\n    name: 'F.I. Sevoflurane',\n    chartName: 'FiSev',\n    includeInAuto: true,\n    startValue: 0,\n    type: 'float',\n    step: 0.01,\n    min: 0,\n    max: 100,\n    unit: '%',\n    table: true,\n  },\n  etsev: {\n    name: 'E.T. Sevoflurane',\n    chartName: 'EtSev',\n    includeInAuto: true,\n    startValue: 0,\n    type: 'float',\n    step: 0.01,\n    min: 0,\n    max: 100,\n    unit: '%',\n    table: true,\n  },\n  fides: {\n    name: 'F.I. Desflurane',\n    chartName: 'FiDes',\n    includeInAuto: true,\n    startValue: 0,\n    type: 'float',\n    step: 0.01,\n    min: 0,\n    max: 100,\n    unit: '%',\n    table: true,\n  },\n  etdes: {\n    name: 'E.T. Desflurane',\n    chartName: 'EtDes',\n    includeInAuto: true,\n    startValue: 0,\n    type: 'float',\n    step: 0.01,\n    min: 0,\n    max: 100,\n    unit: '%',\n    table: true,\n  },\n  fiiso: {\n    name: 'F.I. Isoflurane',\n    chartName: 'FiIso',\n    includeInAuto: true,\n    startValue: 0,\n    type: 'float',\n    step: 0.01,\n    min: 0,\n    max: 100,\n    unit: '%',\n    table: true,\n  },\n  etiso: {\n    name: 'E.T. Isoflurane',\n    chartName: 'EtIso',\n    includeInAuto: true,\n    startValue: 0,\n    type: 'float',\n    step: 0.01,\n    min: 0,\n    max: 100,\n    unit: '%',\n    table: true,\n  },\n  mac: {\n    name: 'MAC',\n    chartName: 'MAC',\n    includeInAuto: true,\n    type: 'float',\n    startValue: 0.43,\n    step: 0.01,\n    min: 0,\n    max: 130, // yes this is intentionally over 100%\n    unit: '%',\n    table: true,\n  },\n  peep: {\n    name: 'PEEP',\n    chartName: 'PEEP',\n    step: 0.1,\n    type: 'float',\n    unit: 'cmH₂O',\n    min: 0,\n    max: 50,\n    startValue: 4,\n    table: true,\n    fillFromPrevious: true,\n  },\n  pip: {\n    name: 'PIP',\n    chartName: 'PIP',\n    step: 1,\n    type: 'number',\n    unit: 'cmH₂O',\n    min: 0,\n    max: 50,\n    startValue: 20,\n    table: true,\n  },\n  tv: {\n    name: 'Tidal Volume',\n    chartName: 'Tidal Volume',\n    step: 1,\n    type: 'number',\n    unit: 'mL',\n    min: 0,\n    max: 10000,\n    startValue: 500,\n    table: true,\n  },\n  RSS: {\n    name: 'Ramsay Sedation Scale',\n    chartName: 'Sed. Level (RSS)',\n    startValue: 2,\n    type: 'manualNumber',\n    min: 1,\n    max: 6,\n    table: true,\n    fillFromPrevious: true,\n  },\n  GCS: {\n    name: 'Glasgow Coma Scale',\n    chartName: 'Sed. Level (GCS)',\n    startValue: 15,\n    type: 'manualNumber',\n    min: 3,\n    max: 15,\n    table: true,\n    fillFromPrevious: true,\n  },\n  ESS: {\n    name: 'Ellis Sedation Score',\n    chartName: 'Sed. Level (ESS)',\n    startValue: 0,\n    type: 'manualNumber',\n    min: -5,\n    max: 4,\n    table: true,\n    fillFromPrevious: true,\n  },\n})\n\n/** @type {Record<string, number>} */\nexport const vitalIdSortOrderLookup = Object.keys(\n  getVitalTypesById({ tempUnit: 'F' })\n).reduce((acc, id, index) => {\n  acc[id] = index\n  return acc\n}, {})\n\nexport const getVitalTypesBaseArray = shallowEqualMemoize(\n  /**\n   * @param {Pick<ReportRenderingInputs, 'tempUnit'>} opts\n   * @returns {(VitalTypeDefinition & {\n   *   id: EveryVitalType\n   * })[]}\n   */ opts => {\n    const base = getVitalTypesById(opts)\n    const toReturn = []\n    for (const id in base) {\n      toReturn.push({ id, ...base[id] })\n    }\n    return toReturn\n  }\n)\n\nexport const getUserSelectableVitalTypes = shallowEqualMemoize(\n  /**\n   * @param {Pick<ReportRenderingInputs, 'tempUnit'>} opts\n   * @returns {UserSelectableVitalTypeWithId[]}\n   */\n  // @ts-ignore\n  opts => getVitalTypesBaseArray(opts).filter(vital => !vital.subItem)\n)\n\n/** @returns {UserSelectableVitalTypeWithId[]} */\nexport const getManualVitalTypes = () =>\n  // @ts-ignore\n  // NB: we hardcode unit here because temp isn't included in the manual vitals list\n  getVitalTypesBaseArray({ tempUnit: 'F' }).filter(\n    vital => vital.includeInManual\n  )\n\nexport const getVitalsNameAndUnitLookup = shallowEqualMemoize(\n  /**\n   * @param {Pick<ReportRenderingInputs, 'tempUnit'>} opts\n   * @returns {Record<EveryVitalType, [string, string?]>}\n   */ opts => {\n    const vitals = getVitalTypesBaseArray(opts)\n    /** @type {Record<EveryVitalType, [string, string?]>} */\n    // @ts-ignore\n    const toReturn = {}\n    for (const vital of vitals) {\n      toReturn[vital.id] = [vital.chartName || vital.name, vital.unit]\n    }\n    return toReturn\n  }\n)\n\n/** @type {EveryVitalType[]} */\nexport const vitalKeyTypesForComparison = getVitalTypesBaseArray({\n  tempUnit: 'F',\n})\n  .filter(type => type.includeInComparison)\n  .map(type => type.id)\n\n/** @type {Record<string, string>} */\nexport const vitalsShortNameLookup = Object.entries(\n  getVitalsNameAndUnitLookup({ tempUnit: 'F' })\n).reduce((acc, [name, value]) => {\n  acc[name] = value[0]\n  return acc\n}, {})\n","import { createSelector } from '../utils/selector-utils'\nimport {\n  getUserSelectableVitalTypes,\n  getVitalTypesBaseArray,\n} from '../vital-types'\n\n/**\n * @param {UserSelectableVitalType} id The vital type ID\n * @returns {any} The changes to apply to the case.\n */\nexport const actionIgnoreVitalType = id => ({\n  [`trackedVitalTypes.${id}.ignored`]: true,\n})\n\n/**\n * @param {UserSelectableVitalType} id The vital type ID\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUnIgnoreVitalType = id => ({\n  [`trackedVitalTypes.${id}.ignored`]: null,\n})\n\n/**\n * @param {UserSelectableVitalType} id The vital type ID\n * @returns {any} The changes to apply to the case.\n */\nexport const actionSelectVitalType = id => ({\n  [`trackedVitalTypes.${id}.selected`]: true,\n})\n\n/**\n * @param {UserSelectableVitalType} id The vital type ID\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUnselectVitalType = id => ({\n  [`trackedVitalTypes.${id}.selected`]: false,\n})\n\n/**\n * @param {UserSelectableVitalType} id The vital type ID\n * @returns {any} The changes to apply to the case.\n */\nexport const actionResumeVitalType = id => ({\n  [`trackedVitalTypes.${id}.selected`]: null,\n})\n\n/**\n * @param {EmittableVitalType | IndividualVitalType} id The vital type ID\n * @returns {any} The changes to apply to the case.\n */\nexport const actionClearReceivedVitalType = id => ({\n  [`trackedVitalTypes.${id}.hasReceivedAutoValue`]: null,\n})\n\n/**\n * @param {EmittableVitalType | IndividualVitalType} id The vital type ID\n * @returns {any} The changes to apply to the case.\n */\nexport const actionHasReceivedVitalType = id => ({\n  [`trackedVitalTypes.${id}.hasReceivedAutoValue`]: true,\n})\n\n/**\n * @param {CaseData} caseData\n * @returns {CaseData['trackedVitalTypes']}\n */\nexport const selectTrackedVitalTypesRaw = caseData =>\n  caseData.trackedVitalTypes || {}\n\nconst getVitalSelector = condition =>\n  createSelector(selectTrackedVitalTypesRaw, vitalTypes =>\n    Object.keys(vitalTypes).filter(key => condition(vitalTypes[key]))\n  )\n\n/** @type {(caseData: CaseData) => VitalType[]} } */\nexport const selectAutoVitalsTypesReceived = getVitalSelector(\n  val => val && val.hasReceivedAutoValue\n)\n\n/** @type {(caseData: CaseData) => VitalType[]} } */\nexport const selectVitalsTypesSelectedNotAuto = getVitalSelector(\n  val => val && val.selected && !val.hasReceivedAutoValue\n)\n\n/**\n * @param {{\n *   hasAutoData: boolean\n *   hasManualData: boolean\n *   ignored: boolean\n *   selected: boolean\n *   wasUnselected: boolean\n * }} param0\n * @returns {UserSelectableVitalTypeStatus}\n */\nconst determineStatus = ({\n  hasAutoData,\n  hasManualData,\n  ignored,\n  selected,\n  wasUnselected,\n}) => {\n  if (ignored) {\n    return 'ignored'\n  }\n\n  if (hasAutoData || hasManualData) {\n    if (wasUnselected) {\n      return 'paused'\n    } else {\n      return hasAutoData ? 'auto' : 'manual'\n    }\n  }\n\n  // has no data\n  return selected ? 'selected' : 'unselected'\n}\n\n/**\n * @param {UserSelectableVitalTypeStatus} status\n * @returns {boolean}\n */\nconst isPlaced = status =>\n  status === 'auto' || status === 'selected' || status === 'manual'\n\nconst selectVitalTypesWithManualValues = caseData => {\n  if (!caseData || !caseData.vitalRecords) {\n    return {}\n  }\n\n  const types = {}\n\n  for (const cpId in caseData.vitalRecords) {\n    for (const typeId in caseData.vitalRecords[cpId].vitals) {\n      types[typeId] = true\n    }\n  }\n  return types\n}\n\n/**\n * @type {CaseSelector<{\n *   [key: string]: UserSelectableVitalTypeStatus\n * }>}\n */\nexport const selectVitalsTypesWithStatus = createSelector(\n  selectTrackedVitalTypesRaw,\n  selectAutoVitalsTypesReceived,\n  selectVitalTypesWithManualValues,\n  (vitalTypes, autoVitalsTypesReceived, typesWithManualValues) => {\n    /**\n     * @type {{\n     *   [key: VitalType]: UserSelectableVitalTypeStatus\n     * }}\n     */\n    const result = {}\n\n    // Build a set of all ids, since we want to report on all of them\n    // event if they aren't in tracked vital types raw yet\n    const allIds = new Set([\n      ...Object.keys(vitalTypes),\n      ...autoVitalsTypesReceived,\n      ...Object.keys(typesWithManualValues),\n    ])\n\n    // BP is special, as we want to report on the BP status, not the individual entries\n    // but values are stored on the individual entries, while user selection/ignoring happens on bp\n    if (allIds.has('bp') || allIds.has('sbp') || allIds.has('dbp')) {\n      result.bp = determineStatus({\n        // These are set by the user on the bp vital type directly\n        ignored: vitalTypes.bp && vitalTypes.bp.ignored,\n        selected: vitalTypes.bp && vitalTypes.bp.selected,\n        wasUnselected: !!(vitalTypes.bp && vitalTypes.bp.selected === false),\n\n        // But records are recorded to individual types\n        hasAutoData:\n          (vitalTypes.sbp && vitalTypes.sbp.hasReceivedAutoValue) ||\n          (vitalTypes.dbp && vitalTypes.dbp.hasReceivedAutoValue),\n        hasManualData: typesWithManualValues.sbp || typesWithManualValues.dbp,\n      })\n    }\n\n    for (const id of Array.from(allIds)) {\n      // handled above so don't add duplicate entries\n      if (id === 'bp' || id === 'sbp' || id === 'dbp' || id === 'map') {\n        continue\n      }\n\n      const found = vitalTypes[id]\n      const hasReceivedAutoValue = autoVitalsTypesReceived.includes(id)\n      const ignored = !!(found && found.ignored)\n      const selected = !!(found && found.selected)\n      const wasUnselected = !!(found && found.selected === false)\n\n      result[id] = determineStatus({\n        hasAutoData: hasReceivedAutoValue,\n        hasManualData: !!typesWithManualValues[id],\n        ignored,\n        selected,\n        wasUnselected,\n      })\n    }\n\n    return result\n  }\n)\n\n/** @type {(caseData: CaseData) => string[]} } */\nexport const selectAutoVitalsTypeIdsToReport = createSelector(\n  selectVitalsTypesWithStatus,\n  types => Object.keys(types).filter(key => types[key] === 'auto')\n)\n\n/** @type {(caseData: CaseData) => VitalType[]} } */\nexport const selectIgnoredVitalTypes = getVitalSelector(\n  val => val && val.ignored\n)\n\nexport const selectVitalTypesForMacro = createSelector(\n  selectVitalsTypesSelectedNotAuto,\n  selectIgnoredVitalTypes,\n  (selected, ignored) => {\n    const result = {}\n    for (const id of selected) {\n      result[id] = 'selected'\n    }\n    for (const id of ignored) {\n      result[id] = 'ignored'\n    }\n    return result\n  }\n)\n\n/**\n * @param {CaseData} caseData\n * @param {Pick<ReportRenderingInputs, 'tempUnit'>} opts\n * @returns {DecoratedUserSelectableVitalType[]}\n */\nexport const optionSelectUserSelectableVitalTypes = (caseData, opts) => {\n  const vitalsTypesWithStatus = selectVitalsTypesWithStatus(caseData)\n  const monitorTypes = getUserSelectableVitalTypes(opts)\n  return monitorTypes.map(monitorType => {\n    const status = vitalsTypesWithStatus[monitorType.id] || 'unselected'\n    return {\n      ...monitorType,\n      status,\n      placed: isPlaced(status),\n    }\n  })\n}\n\n/**\n * @param {CaseData} caseData\n * @param {Pick<ReportRenderingInputs, 'tempUnit'>} opts\n * @returns {DecoratedIndividualVitalType[]}\n */\nexport const optionSelectIndividualVitalTypes = (caseData, opts) => {\n  const vitalsTypesWithStatus = selectVitalsTypesWithStatus(caseData)\n  const monitorTypes = getVitalTypesBaseArray(opts)\n  const bpStatus = vitalsTypesWithStatus.bp || 'unselected'\n  /** @type {DecoratedIndividualVitalType[]} */\n  const toReturn = []\n  for (const vital of monitorTypes) {\n    // we skip this, we want them individually for this\n    if (vital.id === 'bp') {\n      continue\n    }\n    // for bp sub items we defer to status of bp\n    const isBpSubItem =\n      vital.id === 'sbp' || vital.id === 'dbp' || vital.id === 'map'\n\n    const status = isBpSubItem\n      ? bpStatus\n      : vitalsTypesWithStatus[vital.id] || 'unselected'\n\n    toReturn.push({\n      ...vital,\n      status,\n      placed: isPlaced(status),\n    })\n  }\n  return toReturn\n}\n","import { roundToDecimal } from './decimals'\n\nconst guessBodyTempUnits = value => (value < 50 ? '°C' : '°F')\n\nconst convertCelsiusToFahrenheit = celsius =>\n  roundToDecimal(celsius * (9 / 5) + 32, 1)\n\nconst convertFahrenheitToCelsius = (fahrenheit, precision = 1) =>\n  roundToDecimal((fahrenheit - 32) * (5 / 9), precision)\n\n/**\n * This is the the function we always want to use when storing a temperature to\n * the case data.\n *\n * If it is given in fahrenheit, it will be converted to celsius with 2 decimal\n * places of precision this ensures that it is stored with enough precision to\n * be converted back to the same one decimal of precision value if we are going\n * back to fahrenheit.\n *\n * @param {number} unknownValueType\n * @returns {number}\n */\nexport const coerceToCelsiusForStorage = unknownValueType =>\n  guessBodyTempUnits(unknownValueType) === '°F'\n    ? convertFahrenheitToCelsius(unknownValueType, 2)\n    : unknownValueType\n\n/**\n * @param {number} valueFromCaseData\n * @param {TempUnit} targetUnit\n * @returns {number}\n */\nexport const displayTemperature = (valueFromCaseData, targetUnit) => {\n  // If the value is greater than 50, we assume it got saved\n  // as fahrenheit so if we are trying to display as fahrenheit\n  // just return it.\n  const wasStoredInFahrenheit = guessBodyTempUnits(valueFromCaseData) === '°F'\n  if (wasStoredInFahrenheit) {\n    if (targetUnit === 'F') {\n      return valueFromCaseData\n    }\n    return convertFahrenheitToCelsius(valueFromCaseData)\n  }\n\n  // if the value is less than 50, we assume it got saved as celsius\n  if (targetUnit === 'F') {\n    return convertCelsiusToFahrenheit(valueFromCaseData)\n  }\n  if (targetUnit === 'C') {\n    return roundToDecimal(valueFromCaseData, 1)\n  }\n}\n","// @ts-check\nimport { actionHasReceivedVitalType } from './vital-type'\nimport { eventSelectors } from './events'\nimport { arrayAverage, createSelector } from '../utils/selector-utils'\nimport {\n  coerceToCelsiusForStorage,\n  displayTemperature,\n} from '../utils/temperature-utils'\n\n/**\n * @param {string} cpId Checkpoint ID\n * @param {string} vitalId Vital ID\n * @param {VitalValue} value Vital value\n * @returns {any} The changes to apply to the case.\n */\nexport const actionRecordVitalValue = (cpId, vitalId, value) => ({\n  [`vitalRecords.${cpId}.vitals.${vitalId}.value`]:\n    vitalId === 'temp' && value !== 'skipped'\n      ? // @ts-ignore\n        coerceToCelsiusForStorage(value)\n      : value,\n})\n\n/**\n * @param {string} cpId Checkpoint ID\n * @param {{ [vitalId: string]: VitalValue }} values Vital values\n * @returns {any} The changes to apply to the case.\n */\nexport const actionRecordVitalValues = (cpId, values) => {\n  let changes = {}\n  for (const vitalId in values) {\n    changes = {\n      ...changes,\n      ...actionRecordVitalValue(cpId, vitalId, values[vitalId]),\n    }\n  }\n  return changes\n}\n\n/**\n * @param {string} cpId Checkpoint ID\n * @param {string} vitalId Vital ID\n * @returns {any} The changes to apply to the case.\n */\nexport const actionSkipVitalValue = (cpId, vitalId) =>\n  actionRecordVitalValue(cpId, vitalId, 'skipped')\n\n/**\n * @param {string} cpId Checkpoint ID\n * @param {EmittableVitalType} vitalId Vital ID\n * @param {AutoVitalEntry} vitalData Vital entry\n * @returns {any} The changes to apply to the case.\n */\nexport const actionRecordAutoVitalValue = (cpId, vitalId, vitalData) => {\n  let toSave = vitalData\n  if (vitalId === 'temp') {\n    toSave = {\n      ...toSave,\n      // @ts-ignore\n      value: coerceToCelsiusForStorage(vitalData.value),\n    }\n  }\n  return {\n    [`autoVitalRecords.${cpId}.vitals.${vitalId}`]: toSave,\n    // We also note that we have received this\n    // vital type from a monitor.\n    ...actionHasReceivedVitalType(vitalId),\n  }\n}\n\n/**\n * @param {string} cpId Checkpoint ID\n * @param {{ [vitalId: string]: AutoVitalEntry }} values Vital value\n * @returns {any} The changes to apply to the case.\n */\nexport const actionRecordAutoVitalValues = (cpId, values) => {\n  let changes = {}\n\n  for (const vitalId in values) {\n    changes = {\n      ...changes,\n      // @ts-ignore\n      ...actionRecordAutoVitalValue(cpId, vitalId, values[vitalId]),\n    }\n  }\n  return changes\n}\n\nconst empty = {}\nconst selectVitalRecordsRaw = caseData => caseData.vitalRecords || empty\nconst selectAutoVitalRecordsRaw = caseData => caseData.autoVitalRecords || empty\nconst selectVitalRecords = createSelector(selectVitalRecordsRaw, records => {\n  const toReturn = {}\n  for (const checkpointId in records) {\n    toReturn[checkpointId] = {}\n    const vitals = records[checkpointId].vitals\n    for (const vitalId in vitals) {\n      toReturn[checkpointId][vitalId] = vitals[vitalId].value\n    }\n  }\n  return toReturn\n})\nconst selectVitalAutoRecords = createSelector(\n  selectAutoVitalRecordsRaw,\n  records => {\n    const toReturn = {}\n    for (const checkpointId in records) {\n      toReturn[checkpointId] = records[checkpointId].vitals\n    }\n    return toReturn\n  }\n)\nconst addVital = (acc, cpId, vitalType, value) => {\n  if (value > 0 && value < 250) {\n    const res = acc[cpId] || (acc[cpId] = {})\n    res[vitalType] = Number(value)\n  }\n}\n\nexport const vitalsSelectors = {\n  selectVitalRecordsRaw,\n  selectVitalRecords,\n  selectAutoVitalRecordsRaw,\n  selectVitalAutoRecords,\n  selectEstimatedBreathsBeats: createSelector(\n    selectVitalRecords,\n    selectVitalAutoRecords,\n    eventSelectors.selectMonitoringMinutes,\n    (records, autoRecords, minutes) => {\n      const byCheckpoint = {}\n      for (const cpId in autoRecords) {\n        const entry = autoRecords[cpId]\n        addVital(byCheckpoint, cpId, 'rr', entry.rr && entry.rr.value)\n        addVital(byCheckpoint, cpId, 'hr', entry.hr && entry.hr.value)\n      }\n      for (const cpId in records) {\n        const entry = records[cpId]\n        addVital(byCheckpoint, cpId, 'rr', entry.rr)\n        addVital(byCheckpoint, cpId, 'hr', entry.hr)\n      }\n      const rr = []\n      const hr = []\n      for (const entries of Object.entries(byCheckpoint)) {\n        const value = entries[1]\n        if (value.rr) rr.push(value.rr)\n        if (value.hr) hr.push(value.hr)\n      }\n      const toReturn = { breaths: 0, heartbeats: 0 }\n      if (minutes) {\n        const avgRR = arrayAverage(rr)\n        const avgHR = arrayAverage(hr)\n        if (avgRR) {\n          toReturn.breaths = Math.round(avgRR * minutes)\n        }\n        if (avgHR) {\n          toReturn.heartbeats = Math.round(avgHR * minutes)\n        }\n      }\n      return toReturn\n    }\n  ),\n  // these two accept options and are not directly memoized.\n  // They're expected to be used as a part of a larger\n  // selector that is memoized.\n  optionSelectVitalRecords:\n    /**\n     * @param {CaseData} caseData\n     * @param {{ tempUnit: TempUnit }} param1\n     * @returns {{\n     *   [checkpointId: string]: {\n     *     [vitalId: string]: VitalValue\n     *   }\n     * }}\n     */\n    (caseData, { tempUnit }) => {\n      const records = selectVitalRecords(caseData)\n      /**\n       * @type {{\n       *   [checkpointId: string]: {\n       *     [vitalId: string]: VitalValue\n       *   }\n       * }}\n       */\n      const toReturn = {}\n      for (const checkpointId in records) {\n        toReturn[checkpointId] = {}\n        const vitals = records[checkpointId]\n        for (const vitalId in vitals) {\n          let value = vitals[vitalId]\n          if (vitalId === 'temp') {\n            value = displayTemperature(value, tempUnit)\n          }\n          toReturn[checkpointId][vitalId] = value\n        }\n      }\n      return toReturn\n    },\n  optionSelectVitalAutoRecords:\n    /**\n     * @param {CaseData} caseData\n     * @param {{ tempUnit: TempUnit }} param1\n     * @returns {{\n     *   [checkpointId: string]: {\n     *     [vitalId: string]: AutoVitalEntry\n     *   }\n     * }}\n     */\n    (caseData, { tempUnit }) => {\n      const records = selectAutoVitalRecordsRaw(caseData)\n      /**\n       * @type {{\n       *   [checkpointId: string]: {\n       *     [vitalId: string]: AutoVitalEntry\n       *   }\n       * }}\n       */\n      const toReturn = {}\n      for (const checkpointId in records) {\n        const vitals = records[checkpointId].vitals\n        toReturn[checkpointId] = {}\n        for (const vitalId in vitals) {\n          let entry = vitals[vitalId]\n          if (vitalId === 'temp') {\n            const coerced = displayTemperature(entry.value, tempUnit)\n            if (coerced !== entry.value) {\n              entry = {\n                ...entry,\n                value: coerced,\n              }\n            }\n          }\n          toReturn[checkpointId][vitalId] = entry\n        }\n      }\n      return toReturn\n    },\n}\n","import { getCasePropSelector } from '../utils/case-prop-selector'\nimport { createSelector } from '../utils/selector-utils'\n\nconst valid = [null, 1, 2.5, 5, 10]\n/**\n * @param {null | 1 | 2.5 | 5 | 10} interval\n * @returns {any}\n */\nexport const actionUpdateVitalsInterval = interval =>\n  valid.includes(interval) ? { vitalsInterval: interval } : {}\n\n/** @type {CaseSelector<CaseData['vitalsInterval']>} */\nexport const selectVitalsInterval = getCasePropSelector('vitalsInterval', 5)\n\n/** @type {CaseSelector<5 | 10>} */\nexport const selectBaseVitalsInterval = createSelector(\n  selectVitalsInterval,\n  interval => (interval === 10 ? 10 : 5)\n)\n","// @ts-check\nimport { getCasePropSelector } from '../utils/case-prop-selector'\nimport { isRequiredCheckpoint } from '../utils/is-required-checkpoint'\nimport { toNumber } from '../utils/numbers'\nimport { createSelector } from '../utils/selector-utils'\nimport { selectVitalsTrackingEnabled } from './case-props'\nimport { eventSelectors } from './events'\nimport { optionSelectIndividualVitalTypes } from './vital-type'\nimport { vitalsSelectors } from './vitals'\nimport { selectBaseVitalsInterval } from './vitals-interval'\n\nconst root = 'vitalsCheckpoints'\n/**\n * @param {number} time\n * @param {boolean} [complete]\n * @returns {any}\n */\nexport const actionAddVitalsCheckpoint = (time, complete) => {\n  time = toNumber(time)\n  const cp = { time }\n  if (complete) cp.complete = true\n  return { [`${root}.cp_${time}`]: cp }\n}\n/**\n * @type {(id: string, complete: boolean) => any}\n * @returns {any}\n */\nexport const actionUpdateCheckpointComplete = (id, complete) => ({\n  [`${root}.${id}.complete`]: complete ? true : null,\n})\n\n/** @type {CaseSelector<CaseData['vitalsCheckpoints'] | {}>} */\nexport const selectVitalsCheckpointsRaw = getCasePropSelector(root, {})\n\n/** @type {CaseSelector<{ id: string; time: number; complete: boolean }[]>} */\nexport const selectVitalsCheckpointsRawArray = createSelector(\n  selectVitalsCheckpointsRaw,\n  raw => {\n    const result = []\n    for (const id in raw) {\n      const { time, complete } = raw[id]\n      if (!time) continue\n      result.push({\n        id,\n        time,\n        complete: !!complete,\n      })\n    }\n    result.sort((a, b) => a.time - b.time)\n    return result\n  }\n)\n\n/**\n * Returns a reasonable number for vitals duration based on caseStart time,\n * appTime, and maximum allowed duration.\n *\n * It will use the lesser of appTime and vitalsEnd (hence the \"no future\" part).\n *\n * It will never return a negative number, and will never return a number\n * greater than the maxDuration.\n *\n * @param {CaseData} caseData\n * @param {{\n *   appTime: number\n *   maxDuration: number\n * }} param1\n * @returns {number}\n */\nexport const optionSelectVitalsDurationNoFuture = (\n  caseData,\n  { appTime, maxDuration }\n) => {\n  const caseStartTime = eventSelectors.selectCaseStartTime(caseData)\n  const vitalsEndTime = eventSelectors.selectVitalsEndTime(caseData)\n  if (!caseStartTime) {\n    return 0\n  }\n  const timeToUseAsEnd = Math.min(appTime, vitalsEndTime || appTime)\n  // never less than 0, never more than maxDuration\n  return Math.max(0, Math.min(maxDuration, timeToUseAsEnd - caseStartTime))\n}\n\n/**\n * @param {CaseData} caseData\n * @param {{\n *   appTime: number\n *   maxDuration: number\n * }} param1\n * @returns {number}\n */\nexport const optionSelectNumberOfRequiredCheckpoints = (\n  caseData,\n  { appTime, maxDuration }\n) => {\n  const baseInterval = selectBaseVitalsInterval(caseData)\n  const duration = optionSelectVitalsDurationNoFuture(caseData, {\n    appTime,\n    maxDuration,\n  })\n  if (!duration) {\n    return 1\n  }\n  return Math.floor(duration / (baseInterval * 60000)) + 1\n}\n\n/**\n * @param {CaseData} caseData\n * @param {{ appTime: number }} param1\n */\nexport const optionSelectVitalsCheckpointsRawArrayNoFuture = (\n  caseData,\n  { appTime }\n) =>\n  selectVitalsCheckpointsRawArray(caseData).filter(\n    ({ time }) => time <= appTime\n  )\n\n/**\n * @param {CaseData} caseData\n * @param {{\n *   appTime: number\n *   maxDuration: number\n * }} param1\n * @returns {number[]}\n */\nexport const optionSelectRequiredCheckpointTimes = (\n  caseData,\n  { appTime, maxDuration }\n) => {\n  const caseStartTime = eventSelectors.selectCaseStartTime(caseData)\n  const intervalMinutes = selectBaseVitalsInterval(caseData)\n  const numberOfCheckpoints = optionSelectNumberOfRequiredCheckpoints(\n    caseData,\n    { appTime, maxDuration }\n  )\n  if (!caseStartTime) {\n    return []\n  }\n  const numberToCreate = numberOfCheckpoints\n  const result = []\n\n  for (let i = 0; i < numberToCreate; i++) {\n    result.push(caseStartTime + i * (60000 * intervalMinutes))\n  }\n  return result\n}\n\n/**\n * @param {CaseData} caseData\n * @param {Pick<\n *   ReportRenderingInputs,\n *   'appTime' | 'maxDuration' | 'tempUnit' | 'activeCheckpointId'\n * >} opts\n * @returns {Checkpoint[]}\n */\nexport const optionSelectVitalsCheckpoints = (\n  caseData,\n  { appTime, maxDuration, activeCheckpointId, tempUnit }\n) => {\n  const caseStart = eventSelectors.selectCaseStartTime(caseData)\n  const baseInterval = selectBaseVitalsInterval(caseData)\n  const checkpointsBaseArray = optionSelectVitalsCheckpointsRawArrayNoFuture(\n    caseData,\n    { appTime }\n  )\n  const individualVitalTypes = optionSelectIndividualVitalTypes(caseData, {\n    tempUnit,\n  })\n  const records = vitalsSelectors.optionSelectVitalRecords(caseData, {\n    tempUnit,\n  })\n  const autoRecords = vitalsSelectors.optionSelectVitalAutoRecords(caseData, {\n    tempUnit,\n  })\n  const vitalsTrackingEnabled = selectVitalsTrackingEnabled(caseData)\n  const vitalsDuration = optionSelectVitalsDurationNoFuture(caseData, {\n    appTime,\n    maxDuration,\n  })\n\n  // we build this object up for each possible vital\n  // to ensure we start with `null` values for type-safe\n  // checks later.\n  // Otherwise logic down the road can't safely check for `=== null`\n  const previousValues = {}\n  for (const vitalType of individualVitalTypes) {\n    previousValues[vitalType.id] = null\n  }\n\n  // If we are tracking vitals and have no checkpoints yet we need an initial one\n  // But if we are not tracking vitals we don't need one.\n  const defaultCheckpoints = vitalsTrackingEnabled\n    ? [{ id: 'cp_0', time: null, extra: false, complete: false }]\n    : []\n\n  const checkpoints = checkpointsBaseArray.length\n    ? checkpointsBaseArray\n    : defaultCheckpoints\n\n  const toReturn = []\n  let index = 0\n  for (const cp of checkpoints) {\n    const cpId = cp.id\n    const isComplete = !!cp.complete\n    const isFirst = index === 0\n    const isLast = index === checkpoints.length - 1\n    const autoRecordsForCheckpoint = autoRecords[cpId] || null\n    const selected = activeCheckpointId === cpId\n    /** @type {{ [id: string]: CheckpointValueVital }} */\n    const values = {}\n    const vitalsInUse = []\n\n    // increment index\n    index++\n\n    let hasAllRelevantValues = true\n    let isBlank = true\n\n    for (const vitalType of individualVitalTypes) {\n      const { id, startValue, fillFromPrevious } = vitalType\n\n      const recordedValue =\n        records && records[cpId] && records[cpId].hasOwnProperty(id)\n          ? records[cpId][id]\n          : null\n\n      // grab previous value if relevant\n      const previousValue =\n        previousValues[id] !== null && previousValues[id] !== 'skipped'\n          ? previousValues[id]\n          : null\n\n      const autoRecordForVital =\n        (autoRecordsForCheckpoint && autoRecordsForCheckpoint[id]) || null\n\n      /**\n       * NB: It's important that we consider those filled from previous to still\n       * be \"blank\" because we use that property to determine what checkpoints\n       * can be deleted if a vitals end time is set. Of course those auto filled\n       * from previous will have \"a value\" but it is not a \"recorded\" value so\n       * we still consider it \"blank\" for the purposes of deletion.\n       */\n      if (autoRecordForVital || recordedValue != null) {\n        isBlank = false\n      }\n\n      const isPlaced = vitalType.placed\n\n      /** @type {CheckpointVitalValueSource} */\n      let valueSource = 'manual'\n      let value = null\n      let connectionId\n      let monitorType\n      let autoValue = null\n      let autoValueTime = null\n\n      // if we have an auto value, use it\n      if (autoRecordForVital !== null) {\n        valueSource = 'auto'\n        value = autoValue = autoRecordForVital.value\n        connectionId = autoRecordForVital.connectionId\n        monitorType = autoRecordForVital.monitorType\n        autoValueTime = autoRecordForVital.time\n      } else if (id === 'map') {\n        const sbpValueObj = values.sbp\n        const dbpValueObj = values.dbp\n        /** @type {number | string | null} */\n        let sbpValue = (sbpValueObj && sbpValueObj.value) || null\n        /** @type {number | string | null} */\n        let dbpValue = (dbpValueObj && dbpValueObj.value) || null\n\n        const hasBpValues = !!(sbpValue && dbpValue)\n\n        if (isFirst && hasBpValues) {\n          sbpValue = sbpValueObj && sbpValueObj.startValueForVital\n          dbpValue = dbpValueObj && dbpValueObj.startValueForVital\n        }\n\n        if (sbpValue !== null && dbpValue !== null) {\n          if (sbpValue === 'skipped' || dbpValue === 'skipped') {\n            value = 'skipped'\n          } else {\n            // calculate MAP\n            // @ts-ignore\n            value = Math.round((dbpValue * 2 + sbpValue) / 3)\n          }\n          valueSource = 'calculated'\n        }\n      }\n\n      // If we are doing auto vitals, and this is one\n      // that we can fill from previous we do that.\n      if (fillFromPrevious && isPlaced && previousValue !== null) {\n        valueSource = 'previous'\n        value = previousValue\n      }\n\n      // any manually recorded value always wins\n      if (recordedValue !== null) {\n        if (valueSource === 'previous') {\n          valueSource = 'manual'\n        } else {\n          valueSource = value !== null ? 'override' : 'manual'\n        }\n        value = recordedValue\n      }\n\n      const hasValue = value != null\n      const isSkipped = value === 'skipped'\n\n      // store as \"previous\" for the next round\n      if (hasValue && !isSkipped) {\n        previousValues[id] = value\n      }\n\n      if ((!isPlaced && !hasValue) || vitalType.status === 'ignored') {\n        continue\n      } else {\n        vitalsInUse.push(vitalType)\n      }\n\n      /** @type {CheckpointValueVital} */\n      const toReturn = {\n        previousValue,\n        startValueForVital: startValue,\n        autoValue,\n        autoValueTime,\n        connectionId,\n        monitorType,\n        recordedValue,\n        value,\n        valueSource,\n      }\n\n      if (!hasValue) {\n        hasAllRelevantValues = false\n      }\n\n      // capture it\n      values[id] = toReturn\n    }\n\n    // end of vitals loop now stuff that applies to whole checkpoint\n    /** @type {Checkpoint} */\n    const finalCheckpointObject = {\n      id: cpId,\n      extra: !!(\n        cp.time &&\n        !isRequiredCheckpoint({\n          caseStart,\n          baseInterval,\n          cpTime: cp.time,\n          vitalsDuration,\n        })\n      ),\n      time: cp.time,\n      isFirst,\n      isLast,\n      selected,\n      vitalsInUse,\n      values,\n      isComplete,\n      hasAllRelevantValues,\n      hasAnySelectedVitals: vitalsInUse.length > 0,\n      isBlank,\n    }\n\n    toReturn.push(finalCheckpointObject)\n  }\n\n  return toReturn\n}\n","// @ts-check\nimport { createCrudProp } from '../utils/crud-prop'\nimport { removeKeysWithNullishValues } from '../utils/object'\nimport { createSelector } from '../utils/selector-utils'\nimport { sortByTimeIfExists } from '../utils/sort-by'\nimport { selectVitalsCheckpointsRaw } from './checkpoints'\n\nconst eventProps = createCrudProp({\n  rootKey: 'customEvents',\n  idPrefix: 'ev',\n  requiredProps: ['time', 'note'],\n  sortFn: sortByTimeIfExists,\n})\n\n/**\n * @param {{\n *   note: string\n *   time: number\n *   checkpointId?: string\n * }} updates\n * @returns {any} Updates to apply to the case\n */\nexport const actionAddCustomEvent = ({ note, time, checkpointId }) =>\n  eventProps.actionAdd(\n    removeKeysWithNullishValues({ note, time, checkpointId })\n  )\n\n/**\n * @param {string} id\n * @param {{ note?: string; time?: number }} updates\n * @returns {any} Updates to apply to the case\n */\nexport const actionUpdateCustomEvent = eventProps.actionUpdate\n\n/**\n * @param {string} id\n * @returns {any} Updates to apply to the case\n */\nexport const actionRemoveCustomEvent = eventProps.actionRemove\n\n/** @type {CaseSelector<(CustomCaseEventRaw & { id: string })[]>} */\nexport const selectCustomEventsAsArray = createSelector(\n  eventProps.select,\n  selectVitalsCheckpointsRaw,\n  (customEvents, checkpointsRaw) =>\n    customEvents.map(event => {\n      const { checkpointId, time } = event\n      let timeToUse = time || null\n      // if this is a checkpoint note, and we have a checkpoint with a time\n      // we should use the checkpoint time.\n      // (previously we allowed for checkpoint-tied events to not record a time)\n      if (checkpointId) {\n        const correspondingCheckpoint = checkpointsRaw[checkpointId]\n        if (correspondingCheckpoint && correspondingCheckpoint.time) {\n          timeToUse = correspondingCheckpoint.time\n        }\n      }\n      return {\n        ...event,\n        time: timeToUse,\n      }\n    })\n)\n\n/** @type {CaseSelector<Record<string, number>>} */\nexport const selectCustomEventTimesByEventId = createSelector(\n  selectCustomEventsAsArray,\n  events => {\n    /** @type {Record<string, number>} */\n    const toReturn = {}\n    for (const event of events) {\n      toReturn[event.id] = event.time\n    }\n    return toReturn\n  }\n)\n","// @ts-check\nimport { createCrudProp } from '../utils/crud-prop'\nimport { createSelector } from '../utils/selector-utils'\nimport { sortByTimeIfExists } from '../utils/sort-by'\nimport { optionSelectVitalsCheckpoints } from './checkpoints'\nimport { eventSelectors, optionSelectCaseStartOrAppTimeDay } from './events'\nimport { optionSelectIndividualVitalTypes } from './vital-type'\n\nconst mvProps = createCrudProp({ rootKey: 'mv', sortFn: sortByTimeIfExists })\n\n/**\n * @param {ManualMeasurement} initial - The initial properties to apply.\n * @returns {any} - The changes to apply to the case.\n */\nexport const actionAddManualVital = mvProps.actionAdd\n\n/**\n * @param {string} id - The id of the item to remove.\n * @returns {any} - The changes to apply to the case.\n */\nexport const actionRemoveManualVital = mvProps.actionRemove\n\n/**\n * @param {string} id - The id of the item\n * @param {Partial<ManualMeasurement>} updates - The updates to apply.\n * @returns {any} - The changes to apply to the case.\n */\nexport const actionUpdateManualVital = mvProps.actionUpdate\n\n/** @type {CaseSelector<ManualMeasurementWithId[]>} */\nexport const selectManualVitals = mvProps.select\n\n/**\n * This adds manual vitals as if they were \"extra\" checkpoints\n *\n * @param {CaseData} caseData\n * @param {Pick<ReportRenderingInputs, 'tempUnit'>} opts\n * @returns {Checkpoint[]}\n */\nconst optionSelectAllManualVitalsCheckpoints = (caseData, { tempUnit }) => {\n  const manualVitals = selectManualVitals(caseData)\n  const vitalTypes = optionSelectIndividualVitalTypes(caseData, { tempUnit })\n  /** @type {Checkpoint[]} */\n  const toReturn = []\n  // Add manualVitals as if they are \"extra\" points\n  for (const mv of manualVitals) {\n    /** @type {DecoratedIndividualVitalType[]} */\n    const vitalsInUse = []\n\n    /** @type {{ [id: string]: CheckpointValueVital }} */\n    const values = {}\n\n    for (const vitalType of vitalTypes) {\n      const { id } = vitalType\n      const value = mv.vitals[id]\n\n      if (value) {\n        vitalsInUse.push(vitalType)\n        values[id] = {\n          value,\n          valueSource: 'manual',\n        }\n      }\n    }\n\n    if (vitalsInUse.length > 0) {\n      toReturn.push({\n        id: mv.id,\n        extra: true,\n        time: mv.time,\n        vitalsInUse,\n        values,\n        hasAllRelevantValues: true,\n        hasAnySelectedVitals: true,\n        isComplete: true,\n        isBlank: false,\n        selected: false,\n        isFirst: false,\n        isLast: false,\n      })\n    }\n  }\n  return toReturn\n}\n\n/**\n * @param {CaseData} caseData\n * @param {Pick<\n *   ReportRenderingInputs,\n *   'appTime' | 'tempUnit' | 'maxDuration' | 'activeCheckpointId'\n * >} opts\n * @returns {Checkpoint[]}\n */\nexport const optionSelectCombinedAutoAndManualCheckpoints = (\n  caseData,\n  { appTime, tempUnit, maxDuration, activeCheckpointId }\n) =>\n  [\n    ...optionSelectVitalsCheckpoints(caseData, {\n      appTime,\n      tempUnit,\n      maxDuration,\n      activeCheckpointId,\n    })\n      // for this, we don't want to include the very first \"filler\" checkpoint\n      // that we create for the case that doesn't have any vitals or a time.\n      .filter(item => !!item.time),\n    ...optionSelectAllManualVitalsCheckpoints(caseData, {\n      tempUnit,\n    }),\n  ].sort((a, b) => a.time - b.time)\n\n/**\n * @param {CaseData} caseData\n * @param {Pick<\n *   ReportRenderingInputs,\n *   'appTime' | 'tempUnit' | 'maxDuration' | 'activeCheckpointId'\n * >} opts\n * @returns {Checkpoint[]}\n */\nexport const optionSelectCombinedAutoAndManualCheckpointsWithinCaseTime = (\n  caseData,\n  { appTime, tempUnit, maxDuration, activeCheckpointId }\n) => {\n  const caseStart = eventSelectors.selectCaseStartTime(caseData)\n  if (!caseStart) {\n    return []\n  }\n  return (\n    optionSelectCombinedAutoAndManualCheckpoints(caseData, {\n      appTime,\n      tempUnit,\n      maxDuration,\n      activeCheckpointId,\n    })\n      // NB: we do not trim off any end values here because conceivably\n      // someone may take a final post-recovery vital that isn't within the\n      // case time. But in that scenario, we would still want to show it.\n      .filter(({ time }) => time >= caseStart)\n  )\n}\n\n/**\n * @param {number} time\n * @returns {string}\n */\nconst toDateString = time => new Date(time).toDateString()\n\n/**\n * @param {CaseData} caseData\n * @param {Pick<ReportRenderingInputs, 'tempUnit' | 'appTimeDay'>} opts\n * @returns {Checkpoint[]}\n */\nexport const optionSelectManualVitalsCheckpointsOnCaseDay = (\n  caseData,\n  { tempUnit, appTimeDay }\n) => {\n  const caseDayString = toDateString(\n    optionSelectCaseStartOrAppTimeDay(caseData, appTimeDay)\n  )\n  return optionSelectAllManualVitalsCheckpoints(caseData, { tempUnit }).filter(\n    ({ time }) => toDateString(time) === caseDayString\n  )\n}\n\nconst manualVitalToEventNote = vitals => {\n  const strParts = []\n  if (vitals.sbp && vitals.dbp) {\n    strParts.push(`BP: ${vitals.sbp}/${vitals.dbp}`)\n  } else if (vitals.sbp) {\n    strParts.push(`SBP: ${vitals.sbp}`)\n  } else if (vitals.dbp) {\n    strParts.push(`DBP: ${vitals.dbp}`)\n  }\n  if (vitals.hr) {\n    strParts.push(`HR: ${vitals.hr}`)\n  }\n  if (vitals.spo2) {\n    strParts.push(`SpO₂: ${vitals.spo2}`)\n  }\n  if (vitals.rr) {\n    strParts.push(`RR: ${vitals.rr}`)\n  }\n  if (vitals.etco2) {\n    strParts.push(`EtCO₂: ${vitals.etco2}`)\n  }\n  return strParts.join(' ')\n}\n\n/** @type {CaseSelector<ManualVitalsEvent[]>} */\nexport const selectManualVitalsEvents = createSelector(\n  selectManualVitals,\n  manualVitals =>\n    manualVitals.map(mv => ({\n      id: mv.id,\n      time: mv.time,\n      note: `Manually Recorded Vital: ${manualVitalToEventNote(mv.vitals)}`,\n      type: 'manualVital',\n      static: true,\n      canSet: false,\n      showInEventReport: true,\n      derived: true,\n    }))\n)\n","// @ts-check\nimport { createSelector } from '../utils/selector-utils'\nimport { createCrudProp } from '../utils/crud-prop'\nimport { sortByTimeIfExists } from '../utils/sort-by'\n\nconst posProps = createCrudProp({\n  rootKey: 'pos',\n  requiredProps: ['name'],\n  sortFn: sortByTimeIfExists,\n})\n\n/**\n * @param {string} name The position name\n * @returns {any} The changes to apply to the case.\n */\nexport const actionAddPosition = name => posProps.actionAdd({ name })\n\n/**\n * @param {string} id The position ID\n * @returns {any} The changes to apply to the case.\n */\nexport const actionRemovePosition = posProps.actionRemove\n\n/**\n * @param {string} id The position ID\n * @param {any} updates The updates to apply to the position\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUpdatePosition = posProps.actionUpdate\n\n/**\n * @param {boolean} posSkipped\n * @returns {any} The changes to apply to the case.\n */\nexport const actionSkipPositions = posSkipped => ({\n  posSkipped: posSkipped ? true : null,\n})\n\n/** @type {CaseSelector<boolean>} */\nexport const selectPositionsSkipped = caseData =>\n  caseData ? !!caseData.posSkipped : false\n\n/** @type {CaseSelector<CasePositionEntry[]>} */\nexport const selectPositions = createSelector(\n  selectPositionsSkipped,\n  posProps.select,\n  (skipped, selected) => (skipped ? [] : selected)\n)\n\n/** @type {CaseSelector<boolean>} */\nexport const selectPositionsComplete = createSelector(\n  selectPositionsSkipped,\n  selectPositions,\n  (skipped, positions) => skipped || !!positions.length\n)\n\n/** @type {CaseSelector<PositionEvent[]>} */\nexport const selectPositionEvents = createSelector(selectPositions, positions =>\n  positions\n    // remove all without a time\n    .filter(entry => entry.time)\n    .map(\n      positionEntry =>\n        /** @type {PositionEvent} */\n        ({\n          id: positionEntry.id + '_position',\n          note: `${positionEntry.name} Position`,\n          time: positionEntry.time,\n          type: 'position',\n          derived: true,\n          showInEventReport: true,\n        })\n    )\n)\n\n/** @type {CaseSelector<Record<string, number>>} */\nexport const selectPositionTimesByEventId = createSelector(\n  selectPositionEvents,\n  events => {\n    /** @type {Record<string, number>} */\n    const toReturn = {}\n    for (const event of events) {\n      toReturn[event.id] = event.time\n    }\n    return toReturn\n  }\n)\n","// @ts-check\nimport { createSelector } from '../utils/selector-utils'\nimport { selectAirwayEvents, selectAirwayTimesByEventId } from './airway'\nimport { selectAirwayEnabled, selectVitalsTrackingEnabled } from './case-props'\nimport { selectCustomEventsAsArray } from './custom-events'\nimport { eventSelectors } from './events'\nimport { selectFluidEvents, selectFluidTimesByEventId } from './fluids'\nimport { selectManualVitalsEvents } from './manual-vitals'\nimport {\n  selectPositionEvents,\n  selectPositionTimesByEventId,\n  selectPositionsSkipped,\n} from './position'\nimport { selectSedativesBeingUsed } from './sedation-level'\n\n/** @type {CaseSelector<CaseEventBase[]>} */\nconst selectBaseEvents = createSelector(\n  selectSedativesBeingUsed,\n  selectPositionsSkipped,\n  selectAirwayEnabled,\n  selectVitalsTrackingEnabled,\n  selectPositionEvents,\n  selectAirwayEvents,\n  selectFluidEvents,\n  /**\n   * @param {boolean} sedativesBeingUsed\n   * @param {boolean} positionsSkipped\n   * @param {boolean} airwayEnabled\n   * @param {boolean} vitalsTrackingEnabled\n   * @param {PositionEvent[]} positionEvents\n   * @param {AirwayEvent[]} airwayEvents\n   * @param {FluidEvent[]} fluidEvents\n   * @returns {CaseEventBase[]}\n   */\n  (\n    sedativesBeingUsed,\n    positionsSkipped,\n    airwayEnabled,\n    vitalsTrackingEnabled,\n    positionEvents,\n    airwayEvents,\n    fluidEvents\n  ) => {\n    /** @type {CaseEventBase[]} */\n    const events = []\n\n    if (vitalsTrackingEnabled) {\n      events.push({\n        id: 'caseStart',\n        note: 'Started monitoring vitals',\n        required: true,\n      })\n    } else {\n      events.push({\n        id: 'caseStart',\n        note: 'Case Started',\n        derived: true,\n      })\n    }\n\n    if (sedativesBeingUsed) {\n      events.push({\n        id: 'anesthesiaStart',\n        note: 'Anesthesia Time Started',\n        maxTimeName: 'anesthesiaEnd',\n        required: true,\n      })\n    }\n\n    if (vitalsTrackingEnabled) {\n      events.push({\n        id: 'surgeryStart',\n        note: 'Procedure Started',\n        maxTimeName: 'surgeryEnd',\n        showInEventReport: true,\n        required: false,\n      })\n    }\n\n    if (!positionsSkipped) {\n      events.push(...positionEvents)\n    }\n\n    if (airwayEnabled) {\n      events.push(...airwayEvents)\n    }\n\n    if (fluidEvents.length) {\n      events.push(...fluidEvents)\n    }\n\n    if (sedativesBeingUsed) {\n      events.push({\n        id: 'anesthesiaEnd',\n        note: 'Anesthesia Time Ended',\n        minTimeName: 'caseStart',\n        required: true,\n      })\n    }\n\n    if (sedativesBeingUsed) {\n      events.push({\n        id: 'recoveryStart',\n        note: 'Recovery started',\n        preReq: 'caseStart',\n        minTimeName: 'caseStart',\n        maxTimeName: 'end',\n        required: true,\n      })\n    }\n\n    if (vitalsTrackingEnabled) {\n      events.push({\n        id: 'surgeryEnd',\n        note: 'Procedure Ended',\n        maxTimeName: 'end',\n        preReq: 'surgeryStart',\n        showInEventReport: true,\n        required: false,\n      })\n    }\n\n    if (vitalsTrackingEnabled) {\n      events.push({\n        id: 'vitalsEnd',\n        note: 'Stopped monitoring vitals',\n        preReq: sedativesBeingUsed ? 'recoveryStart' : 'caseStart',\n        minTimeName: sedativesBeingUsed ? 'recoveryStart' : 'caseStart',\n        maxTimeName: 'end',\n        required: true,\n      })\n    } else {\n      events.push({\n        id: 'vitalsEnd',\n        note: 'Case Complete',\n        preReq: 'caseStart',\n        minTimeName: 'caseStart',\n        required: true,\n      })\n    }\n\n    if (sedativesBeingUsed) {\n      events.push({\n        id: 'end',\n        note: 'Recovery complete',\n        preReq: 'vitalsEnd',\n        minTimeName: 'vitalsEnd',\n        required: true,\n      })\n    }\n\n    return events\n  }\n)\n\n/** @type {CaseSelector<CaseEventProcessed[]>} */\nconst selectBaseEventsProcessed = createSelector(\n  selectBaseEvents,\n  eventSelectors.selectEventTimesRaw,\n  selectPositionTimesByEventId,\n  selectAirwayTimesByEventId,\n  selectFluidTimesByEventId,\n  /**\n   * @param {CaseEventBase[]} baseEvents\n   * @param {CaseDataEvents} eventTimesRaw\n   * @param {{ [key: string]: number }} positionTimesByEventId\n   * @param {{ [key: string]: number }} airwayTimesByEventId\n   * @returns {CaseEventProcessed[]}\n   */\n  (\n    baseEvents,\n    eventTimesRaw,\n    positionTimesByEventId,\n    airwayTimesByEventId,\n    fluidTimes\n  ) => {\n    const times = {\n      ...eventTimesRaw,\n      ...positionTimesByEventId,\n      ...airwayTimesByEventId,\n      ...fluidTimes,\n    }\n\n    const eventsWithTimes = baseEvents.map(event => {\n      const { id, ...rest } = event\n\n      let time = times[id] || null\n\n      return {\n        id,\n        ...rest,\n        time,\n        static: true,\n      }\n    })\n\n    return eventsWithTimes.map(event => {\n      const { id, required, ...rest } = event\n      let isRequired = !!required\n\n      const max = times[event.maxTimeName] || null\n      const min = times[event.minTimeName] || null\n\n      let canSet = true\n      if (event.preReq) {\n        canSet = !!times[event.preReq]\n      }\n      if (canSet && event.derived) {\n        canSet = false\n      }\n\n      // surgery start is only required if surgery end is set\n      if (id === 'surgeryEnd') {\n        if (times.surgeryStart) {\n          isRequired = true\n        }\n      }\n\n      /** @type {CaseEventProcessed} */\n      return {\n        id,\n        ...rest,\n        required: isRequired,\n        canSet,\n        min,\n        max,\n        static: true,\n      }\n    })\n  }\n)\n\n/** @type {CaseSelector<CaseEventProcessed[]>} */\nexport const selectAllEventsArray = createSelector(\n  selectCustomEventsAsArray,\n  selectBaseEventsProcessed,\n  selectManualVitalsEvents,\n  /**\n   * @param {CustomCaseEvent[]} customEventsArray\n   * @param {CaseEventProcessed[]} baseEventsArray\n   * @param {ManualVitalsEvent[]} manualVitalEvents\n   */\n  (customEventsArray, baseEventsArray, manualVitalEvents) =>\n    customEventsArray\n      .concat(baseEventsArray)\n      .concat(manualVitalEvents)\n      .sort(({ time: timeA }, { time: timeB }) => {\n        if (!timeA && timeB) {\n          return 1\n        }\n        if (!timeB && timeA) {\n          return -1\n        }\n        return timeA - timeB\n      })\n)\n\n/** @type {CaseSelector<FinalEventsReport[]>} */\nexport const selectFinalEventsReport = createSelector(\n  selectAllEventsArray,\n  /** @param {CaseEventProcessed[]} events */\n  events => {\n    /** @type {FinalEventsReport[]} */\n    const result = []\n    let number = 0\n    for (const event of events) {\n      if (event.time && (!event.static || event.showInEventReport)) {\n        number++\n        result.push({\n          id: event.id,\n          time: event.time,\n          note: event.note,\n          // first one will be 1\n          number,\n        })\n      }\n    }\n    return result\n  }\n)\n","// @ts-check\n/** @type {DischargeQuestionBaseEntry[]} */\nexport const ALDRETE_FIELDS = [\n  {\n    label: 'Oxygenation',\n    name: 'aldreteOxygenation',\n    options: [\n      ['SpO2 > 92% on room air', 2],\n      ['SpO2 > 90% on oxygen', 1],\n      ['SpO2 < 90% on oxygen', 0],\n    ],\n  },\n  {\n    label: 'Respiratory Stability',\n    name: 'aldreteRespiratoryStability',\n    options: [\n      ['Breathes deeply and coughs freely', 2],\n      ['Dyspnoeic, shallow or limited breathing', 1],\n      ['Apnea', 0],\n    ],\n  },\n  {\n    label: 'Consciousness',\n    name: 'aldreteConsciousness',\n    options: [\n      ['Awake and oriented', 2],\n      ['Arousable with minimal stimulation', 1],\n      ['Responsive only to tactile stimulation', 0],\n    ],\n  },\n  {\n    label: 'Post Operative Pain',\n    name: 'aldretePain',\n    options: [\n      ['Minimal to no pain', 2],\n      ['Moderate', 1],\n      ['Persistent severe pain', 0],\n    ],\n  },\n  {\n    label: 'Nausea and Vomiting',\n    name: 'aldreteNausea',\n    options: [\n      ['None to minimal', 2],\n      ['Moderate', 1],\n      ['Severe', 0],\n    ],\n  },\n  {\n    label: 'Gait',\n    name: 'aldreteGait',\n    options: [\n      ['Steady w/o dizziness', 2],\n      ['Requires assistance', 1],\n      ['Unable to ambulate', 0],\n    ],\n  },\n]\n\n/** @type {DischargeQuestionBaseEntry[]} */\nexport const PADS_FIELDS = [\n  {\n    label: 'Patient is oriented',\n    name: 'oriented',\n    isBoolean: true,\n    options: [\n      ['oriented', 1],\n      ['not oriented', 0],\n    ],\n  },\n  {\n    label: 'Patient has steady gait',\n    name: 'steadyGait',\n    isBoolean: true,\n    options: [\n      ['steady gait', 1],\n      ['not steady gait', 0],\n    ],\n  },\n  {\n    label: 'Patient voided',\n    name: 'voided',\n    isBoolean: true,\n    options: [\n      ['voided', 1],\n      ['not voided', 0],\n    ],\n  },\n  {\n    label: 'Patient drank',\n    name: 'poFluids',\n    isBoolean: true,\n    options: [\n      ['PO fluids', 1],\n      ['no PO fluids', 0],\n    ],\n  },\n  {\n    label: 'Surgical bleeding',\n    name: 'surgicalBleeding',\n    options: [\n      ['Minimal', 2],\n      ['Moderate', 1],\n      ['Severe', 0],\n    ],\n  },\n  {\n    label: 'Pain, nausea and/or vomiting',\n    name: 'painNauseaVomiting',\n    options: [\n      ['Minimal', 2],\n      ['Moderate', 1],\n      ['Severe', 0],\n    ],\n  },\n]\n","// @ts-check\nimport { vitalKeyTypesForComparison } from '../vital-types'\nimport {\n  optionSelectCombinedAutoAndManualCheckpointsWithinCaseTime,\n  optionSelectManualVitalsCheckpointsOnCaseDay,\n} from './manual-vitals'\n\nexport const BASIC_VITALS_IDS = ['sbp', 'dbp', 'spo2', 'rr', 'hr']\n\n/**\n * @param {Checkpoint} checkpoint\n * @param {string[]} keysToInclude\n * @param {NumericVitalValues} aggregator\n */\nexport const extractNumericValues = (checkpoint, keysToInclude, aggregator) => {\n  const { vitalsInUse, values } = checkpoint\n  vitalsInUse.forEach(({ id }) => {\n    if (keysToInclude.includes(id)) {\n      const val = values[id] && values[id].value\n      if (typeof val === 'number' && !isNaN(val)) {\n        if (!aggregator.hasOwnProperty(id)) {\n          aggregator[id] = val\n        }\n      }\n    }\n  })\n}\n\nconst getNumericVitalsFn = (last = false) =>\n  /**\n   * @param {CaseData} caseData\n   * @param {Pick<\n   *   ReportRenderingInputs,\n   *   'appTime' | 'tempUnit' | 'maxDuration'\n   * >} opts\n   * @returns {NumericVitalValues}\n   */\n  (caseData, { appTime, tempUnit, maxDuration }) => {\n    const checkpoints = optionSelectCombinedAutoAndManualCheckpointsWithinCaseTime(\n      caseData,\n      { appTime, tempUnit, maxDuration }\n    )\n    if (last) {\n      checkpoints.reverse()\n    }\n    /** @type {NumericVitalValues} */\n    const result = {}\n    // look from the end of the array to the beginning\n    for (let i = 0, l = checkpoints.length; i < l; i++) {\n      const cp = checkpoints[i]\n      extractNumericValues(cp, vitalKeyTypesForComparison, result)\n      if (Object.keys(result).length === vitalKeyTypesForComparison.length) {\n        return result\n      }\n    }\n    return result\n  }\nexport const optionSelectFirstInCaseVitalsRaw = getNumericVitalsFn(false)\nexport const optionSelectLastInCaseVitalsRaw = getNumericVitalsFn(true)\n\n/**\n * @param {CaseData} caseData\n * @param {Pick<ReportRenderingInputs, 'appTimeDay' | 'tempUnit'>} opts\n * @returns {NumericVitalValues}\n */\nexport const optionSelectPreOpInitialManualVital = (\n  caseData,\n  { appTimeDay, tempUnit }\n) => {\n  const checkpoints = optionSelectManualVitalsCheckpointsOnCaseDay(caseData, {\n    appTimeDay,\n    tempUnit,\n  })\n  if (!checkpoints.length) {\n    return null\n  }\n  /** @type {NumericVitalValues} */\n  const result = {}\n  extractNumericValues(checkpoints[0], BASIC_VITALS_IDS, result)\n  return result\n}\n","// @ts-check\nimport { getCasePropSelector } from '../utils/case-prop-selector'\nimport { ALDRETE_FIELDS, PADS_FIELDS } from '../utils/discharge-score'\nimport { isNumber } from '../utils/is'\nimport { pluck } from '../utils/object'\nimport { createSelector } from '../utils/selector-utils'\nimport { getVitalTypesById } from '../vital-types'\nimport { optionSelectCombinedAutoAndManualCheckpointsWithinCaseTime } from './manual-vitals'\nimport {\n  BASIC_VITALS_IDS,\n  optionSelectFirstInCaseVitalsRaw,\n  optionSelectLastInCaseVitalsRaw,\n} from './numeric-vitals'\n\nconst aldreteVitalsKeys = ['sbp', 'dbp']\nconst padsVitalsKeys = ['sbp', 'dbp', 'map', 'spo2', 'hr', 'rr', 'etco2']\n\n/** @type {CaseSelector<DischargeScore>} */\nexport const selectDischargeScoreType = getCasePropSelector(\n  'dischargeScoreType',\n  'aldrete'\n)\n\n/**\n * @type {CaseSelector<\n *   ['sbp', 'dbp'] | ['sbp', 'dbp', 'map', 'spo2', 'hr', 'rr', 'etco2']\n * >}\n */\nexport const selectVitalTypeKeysForDischargeScore = createSelector(\n  selectDischargeScoreType,\n  type => (type === 'pads' ? padsVitalsKeys : aldreteVitalsKeys)\n)\n\n/** @type {CaseSelector<CaseData['dischargeScoreEntries']>} */\nconst selectDischargeScoreEntries = getCasePropSelector(\n  'dischargeScoreEntries',\n  {}\n)\n\n/**\n * @param {string} field\n * @param {number} score\n * @returns {Record<string, number>}\n */\nexport const actionSetDischargeScoreEntry = (field, score) => ({\n  [`dischargeScoreEntries.${field}.score`]: score,\n})\n\n/** @type {CaseSelector<DischargeQuestionEntry[]>} */\nexport const selectDischargeScoreFields = createSelector(\n  selectDischargeScoreEntries,\n  selectDischargeScoreType,\n  /**\n   * @param {CaseData['dischargeScoreEntries']} entries\n   * @param {DischargeScore} type\n   * @returns {DischargeQuestionEntry[]}\n   */\n  (entries, type) =>\n    (type === 'pads' ? PADS_FIELDS : ALDRETE_FIELDS).map(field => {\n      const foundEntry = entries[field.name]\n      const score =\n        foundEntry && isNumber(foundEntry.score) ? foundEntry.score : null\n      const selectedOption = field.options.find(option => option[1] === score)\n      /** @type {DischargeQuestionEntry} */\n      const toReturn = {\n        ...field,\n        value: selectedOption ? selectedOption[0] : null,\n        score,\n      }\n      return toReturn\n    })\n)\n\nconst getOrderedNumericVitalsFn = (last = false) => /**\n * @param {CaseData} caseData\n * @param {Pick<\n *   ReportRenderingInputs,\n *   'appTime' | 'tempUnit' | 'maxDuration'\n * >} opts\n * @returns {NumericVitalValues}\n */ (caseData, { appTime, tempUnit, maxDuration }) =>\n  pluck(\n    (last ? optionSelectLastInCaseVitalsRaw : optionSelectFirstInCaseVitalsRaw)(\n      caseData,\n      {\n        appTime,\n        tempUnit,\n        maxDuration,\n      }\n    ),\n    selectVitalTypeKeysForDischargeScore(caseData)\n  )\n\nexport const optionSelectFirstInCaseVitalsToCompare = getOrderedNumericVitalsFn(\n  false\n)\nexport const optionSelectLastInCaseVitalsToCompare = getOrderedNumericVitalsFn(\n  true\n)\n\n/**\n * @param {CaseData} caseData\n * @param {Pick<\n *   ReportRenderingInputs,\n *   'appTime' | 'tempUnit' | 'maxDuration'\n * >} opts\n * @returns {DischargeVitalsComparisonEntry[] | null}\n */\nexport const optionSelectVitalsForDischargeComparison = (\n  caseData,\n  { appTime, tempUnit, maxDuration }\n) => {\n  const opts = { appTime, tempUnit, maxDuration }\n  const checkpoints = optionSelectCombinedAutoAndManualCheckpointsWithinCaseTime(\n    caseData,\n    opts\n  )\n  if (checkpoints.length < 2) {\n    return null\n  }\n  const nameLookup = getVitalTypesById({ tempUnit })\n  const first = optionSelectFirstInCaseVitalsToCompare(caseData, opts)\n  const last = optionSelectLastInCaseVitalsToCompare(caseData, opts)\n  /** @type {DischargeVitalsComparisonEntry[]} */\n  const result = []\n  for (const key in first) {\n    const startValue = first[key]\n    const endValue = last[key]\n    const percentageDelta = Math.round(\n      ((endValue - startValue) / startValue) * 100\n    )\n    if (!isNaN(percentageDelta)) {\n      const vital = nameLookup[key]\n      const name = (vital && vital.name) || key\n      result.push({\n        id: key,\n        name,\n        startValue,\n        endValue,\n        percentageDelta,\n      })\n    }\n  }\n  return result.length ? result : null\n}\n\n/**\n * @param {CaseData} caseData\n * @param {Pick<\n *   ReportRenderingInputs,\n *   'appTime' | 'tempUnit' | 'maxDuration'\n * >} opts\n * @returns {{ start: NumericVitalValues; end: NumericVitalValues }}\n */\nexport const optionSelectStartEndBasicVitals = (\n  caseData,\n  { appTime, tempUnit, maxDuration }\n) => ({\n  start: pluck(\n    optionSelectFirstInCaseVitalsRaw(caseData, {\n      appTime,\n      tempUnit,\n      maxDuration,\n    }),\n    BASIC_VITALS_IDS\n  ),\n  end: pluck(\n    optionSelectLastInCaseVitalsRaw(caseData, {\n      appTime,\n      tempUnit,\n      maxDuration,\n    }),\n    BASIC_VITALS_IDS\n  ),\n})\n\n/**\n * @param {CaseData} caseData\n * @param {Pick<\n *   ReportRenderingInputs,\n *   'appTime' | 'tempUnit' | 'maxDuration'\n * >} param1\n * @returns {{\n *   maxDelta: number\n *   vitalsScore: number\n *   vitalsComparison: DischargeVitalsComparisonEntry[]\n * } | null}\n *   }\n */\nexport const optionSelectDischargeVitalsScoreData = (\n  caseData,\n  { appTime, tempUnit, maxDuration }\n) => {\n  const forComparison = optionSelectVitalsForDischargeComparison(caseData, {\n    appTime,\n    tempUnit,\n    maxDuration,\n  })\n  if (!forComparison || forComparison.length <= 1) {\n    return null\n  }\n  const values = forComparison.map(item => Math.abs(item.percentageDelta))\n  const maxDelta = Math.max(...values, 0)\n\n  if (!isNumber(maxDelta)) {\n    return null\n  }\n\n  let vitalsScore = 0\n\n  if (maxDelta < 20) {\n    vitalsScore = 2\n  } else if (maxDelta < 40) {\n    vitalsScore = 1\n  }\n\n  return {\n    maxDelta,\n    vitalsScore,\n    vitalsComparison: forComparison,\n  }\n}\n\nconst severityMap = ['severe', 'moderate', 'minimal']\n/**\n * Pads does a weird thing where it combines the score of two fields for several\n * of the fields. This function calculates the total score for each field and\n * then combines them into a summary.\n *\n * @param {DischargeQuestionEntry[]} fields\n * @returns {DischargeScoreValue[]}\n */\nconst getPadsSummaryValues = fields => {\n  /** @type {Record<string, DischargeQuestionEntry>} */\n  const fieldsByName = fields.reduce((acc, field) => {\n    acc[field.name] = field\n    return acc\n  }, {})\n\n  // based on the field names we know exist in the PADS_FIELDS array\n  const {\n    steadyGait,\n    oriented,\n    voided,\n    poFluids,\n    surgicalBleeding,\n    painNauseaVomiting,\n  } = fieldsByName\n\n  let mentalStatus = ''\n  if (isNumber(oriented.score)) {\n    mentalStatus = oriented.score ? 'oriented' : 'not oriented'\n  }\n  if (isNumber(steadyGait.score)) {\n    if (mentalStatus) {\n      mentalStatus += ', '\n    }\n    mentalStatus += steadyGait.score ? 'steady gait' : 'not steady gait'\n  }\n\n  let intake = ''\n  if (isNumber(poFluids.score)) {\n    intake = poFluids.score ? 'PO fluids' : 'no PO fluids'\n  }\n  if (isNumber(voided.score)) {\n    if (intake) {\n      intake += ', '\n    }\n    intake += voided.score ? 'voided' : 'not voided'\n  }\n\n  return [\n    [\n      'Activity/mental status',\n      mentalStatus,\n      isNumber(oriented.score) || isNumber(steadyGait.score)\n        ? (oriented.score || 0) + (steadyGait.score || 0)\n        : null,\n    ],\n    [\n      painNauseaVomiting.label,\n      severityMap[painNauseaVomiting.score],\n      isNumber(painNauseaVomiting.score) ? painNauseaVomiting.score : null,\n    ],\n    [\n      surgicalBleeding.label,\n      severityMap[surgicalBleeding.score],\n      isNumber(surgicalBleeding.score) ? surgicalBleeding.score : null,\n    ],\n    [\n      'Intake and output',\n      intake,\n      isNumber(poFluids.score) || isNumber(voided.score)\n        ? (poFluids.score || 0) + (voided.score || 0)\n        : null,\n    ],\n  ]\n}\n\n/**\n * @param {DischargeQuestionEntry[]} fields\n * @returns {DischargeScoreValue[]}\n */\nconst getAldreteSummaryValues = fields => {\n  /** @type {DischargeScoreValue[]} */\n  const values = []\n  for (const field of fields) {\n    values.push([field.label, '', field.score])\n  }\n\n  return values\n}\n\n/**\n * @param {CaseData} caseData\n * @param {Pick<\n *   ReportRenderingInputs,\n *   'appTime' | 'tempUnit' | 'maxDuration'\n * >} param1\n * @returns {DischargeScoreSummary}\n */\nexport const optionSelectDischargeScoreSummary = (\n  caseData,\n  { appTime, tempUnit, maxDuration }\n) => {\n  const result = optionSelectDischargeVitalsScoreData(caseData, {\n    appTime,\n    tempUnit,\n    maxDuration,\n  })\n  const fields = selectDischargeScoreFields(caseData)\n  const type = selectDischargeScoreType(caseData)\n  let nonVitalsComplete = true\n  const totalWithoutVitals = fields.reduce((acc, field) => {\n    if (field.score === null) {\n      nonVitalsComplete = false\n    }\n    return acc + (field.score || 0)\n  }, 0)\n  const toReturn = {\n    name: type === 'pads' ? 'PADS' : 'Aldrete',\n    type,\n    fields,\n    complete: false,\n    targetScore: type === 'pads' ? 9 : 12,\n    totalScore: totalWithoutVitals,\n    vitalsScore: null,\n    values: null,\n    vitalsComparison: null,\n  }\n  if (!result) {\n    return toReturn\n  }\n  const { maxDelta, vitalsScore, vitalsComparison } = result\n  /** @type {DischargeScoreValue} */\n  const vitalValue = [\n    'Vital signs',\n    isNumber(maxDelta) ? `within ${maxDelta}% of preoperative value` : '',\n    vitalsScore,\n  ]\n  return {\n    ...toReturn,\n    vitalsScore,\n    complete: nonVitalsComplete && vitalsScore !== null,\n    totalScore: totalWithoutVitals + vitalsScore,\n    values: [\n      vitalValue,\n      ...(type === 'pads' ? getPadsSummaryValues : getAldreteSummaryValues)(\n        fields\n      ),\n    ],\n    vitalsComparison,\n  }\n}\n","// @ts-check\nexport const getDrugSort = (alwaysTop = {}) => (a, b) => {\n  const aInTop = alwaysTop[a.name] || 0\n  const bInTop = alwaysTop[b.name] || 0\n\n  if (aInTop > bInTop) {\n    return -1\n  }\n\n  if (bInTop > aInTop) {\n    return 1\n  }\n\n  if (a.favorite && !b.favorite) {\n    return -1\n  }\n  if (b.favorite && !a.favorite) {\n    return 1\n  }\n\n  return a.name.localeCompare(b.name)\n}\n\nexport const drugSort = getDrugSort()\n","// @ts-check\nimport { getDrugSort } from './utils/drug-sort'\n\nconst mostCommonOralDrugs = {\n  Triazolam: 100,\n  Diazepam: 80,\n  Clonidine: 50,\n}\n\nconst oralsDrugSort = getDrugSort(mostCommonOralDrugs)\n\n/**\n * @typedef {{\n *   id: string\n *   name: string\n *   unit?: 'mg' | 'mcg'\n *   availableRoutes?: PreProcedureSedativeRoute[]\n *   common?: boolean\n * }} PreProcedureRawDef\n */\n\n/**\n * @param {PreProcedureRawDef} overrides\n * @returns {PreProcedureSedative}\n */\nconst fillInDefaults = overrides => ({\n  unit: 'mg',\n  availableRoutes: ['PO', 'SL'],\n  common: false,\n  ...overrides,\n})\n\n/** @type {PreProcedureSedativeRoute[]} */\nexport const allPreProcedureSedRoutes = ['PO', 'SL', 'IM', 'IN']\n\n/** @type {PreProcedureRawDef[]} */\nconst preProcedureSedativesRaw = [\n  {\n    id: '2599',\n    name: 'Clonidine',\n    unit: 'mg',\n    common: true,\n  },\n  {\n    id: '10767',\n    name: 'Triazolam',\n    common: true,\n  },\n  {\n    id: '3322',\n    name: 'Diazepam',\n    common: true,\n  },\n  {\n    id: '74667',\n    name: 'Zaleplon',\n  },\n  {\n    id: '6470',\n    name: 'Lorazepam',\n    availableRoutes: ['PO', 'SL', 'IM'],\n  },\n  {\n    id: '5553',\n    name: 'Hydroxyzine',\n    availableRoutes: allPreProcedureSedRoutes,\n  },\n  {\n    id: '6960',\n    name: 'Midazolam',\n    availableRoutes: allPreProcedureSedRoutes,\n  },\n  {\n    id: '596',\n    name: 'Alprazolam',\n  },\n  {\n    id: '6130',\n    name: 'Ketamine',\n    availableRoutes: allPreProcedureSedRoutes,\n  },\n  {\n    id: '6754',\n    name: 'Meperidine',\n    availableRoutes: ['PO', 'SL', 'IM'],\n  },\n  {\n    id: '5489',\n    name: 'Hydrocodone',\n  },\n  {\n    id: '7052',\n    name: 'Morphine',\n    availableRoutes: ['PO', 'SL', 'IM'],\n  },\n  {\n    id: '2344',\n    name: 'Chloral hydrate',\n  },\n  {\n    id: '4337',\n    name: 'Fentanyl',\n    unit: 'mcg',\n    availableRoutes: allPreProcedureSedRoutes,\n  },\n  {\n    id: '8745',\n    name: 'Promethazine',\n    availableRoutes: ['PO', 'SL', 'IM'],\n  },\n  {\n    id: '3498',\n    name: 'Diphenhydramine',\n    availableRoutes: ['PO', 'SL', 'IM'],\n  },\n  {\n    id: '48937',\n    name: 'Dexmedetomidine',\n    unit: 'mcg',\n    availableRoutes: ['IN'],\n  },\n]\n\n/** @type {Required<PreProcedureSedative>[]} */\nexport const preProcedureSedatives = preProcedureSedativesRaw\n  .map(item => fillInDefaults(item))\n  .sort(oralsDrugSort)\n\nconst toObject = arr =>\n  arr.reduce((acc, item) => {\n    acc[item.id] = item\n    return acc\n  }, {})\n\n/**\n * @type {{\n *   [id: string]: Required<PreProcedureSedative>\n * }}\n */\nexport const preProcedureSedativesById = toObject(preProcedureSedatives)\n\nexport const oralSedatives = preProcedureSedatives.filter(\n  item =>\n    item.availableRoutes.includes('PO') || item.availableRoutes.includes('SL')\n)\n\n/**\n * @type {{\n *   [id: string]: Required<PreProcedureSedative>\n * }}\n */\nexport const oralSedativesById = toObject(oralSedatives)\n","import { preProcedureSedativesById } from '../pre-procedure-drugs'\nimport { createSelector } from '../utils/selector-utils'\nimport { selectPreProcedureSedativeDosesAdministered } from './drugs-administered'\nimport { selectCaseOralSedatives } from './oral-sedative'\nimport { selectCaseParenDrugs } from './paren-drug'\n\n/** @type {CaseSelector<PreProcedureSedativeDoseWithDrug[]>} */\nexport const selectPreProcedureSedativeDosesAdministeredWithDrug = createSelector(\n  selectCaseParenDrugs,\n  selectCaseOralSedatives,\n  selectPreProcedureSedativeDosesAdministered,\n  (caseParenDrugs, caseOralSedatives, preProcedureSedativeDoses) => {\n    const result = []\n    for (const dose of preProcedureSedativeDoses) {\n      const { drugId, route } = dose\n      let drug\n      if (route === 'PO' || route === 'SL') {\n        drug = caseOralSedatives[drugId]\n      } else {\n        drug = caseParenDrugs[drugId]\n      }\n      /**\n       * Noted Feb, 24, 2025: We do this as a fallback for older cases that\n       * could potentially not have the drug in the case data. We likely don't\n       * need to keep this here indefinitely.\n       */\n      if (!drug) {\n        const matchedDrug = preProcedureSedativesById[drugId]\n        if (matchedDrug) {\n          drug = { name: matchedDrug.name, unit: matchedDrug.unit }\n        }\n      }\n      if (drug) {\n        result.push({ ...dose, drug })\n      }\n    }\n    return result\n  }\n)\n","// @ts-check\nimport { getCasePropSelector } from '../utils/case-prop-selector'\nimport { nullIfEmpty } from '../utils/object'\nimport { createSelector } from '../utils/selector-utils'\n\nexport const selectHealthQuestionsSummary = createSelector(\n  getCasePropSelector('surgicalHistorySummary'),\n  getCasePropSelector('anesthesiaHistorySummary'),\n  getCasePropSelector('familyAnesthesiaHistorySummary'),\n  getCasePropSelector('hospitalizationSummary'),\n  (\n    surgicalHistorySummary,\n    anesthesiaHistorySummary,\n    familyAnesthesiaHistorySummary,\n    hospitalizationSummary\n  ) => {\n    const result = []\n\n    if (hospitalizationSummary) {\n      result.push([\n        'Non-surgical hospitalization summary',\n        hospitalizationSummary,\n      ])\n    }\n    if (surgicalHistorySummary) {\n      result.push(['Surgeries', surgicalHistorySummary])\n    }\n    if (anesthesiaHistorySummary) {\n      result.push(['Personal anesthesia history', anesthesiaHistorySummary])\n    }\n    if (familyAnesthesiaHistorySummary) {\n      result.push([\n        'Familial anesthesia history',\n        familyAnesthesiaHistorySummary,\n      ])\n    }\n\n    return nullIfEmpty(result)\n  }\n)\n\n/** @type {CaseSelector<string | null>} */\nexport const selectMedicalConsultNotes = createSelector(\n  getCasePropSelector('medicalConsult'),\n  getCasePropSelector('medicalConsultNotes'),\n  (medicalConsult, medicalConsultNotes) =>\n    (medicalConsult && medicalConsultNotes) || null\n)\n\n/** @type {CaseSelector<string>} */\nexport const selectPatientMedicationSummary = createSelector(\n  getCasePropSelector('medications'),\n  getCasePropSelector('medicationsText'),\n  (medications, medicationsText) =>\n    medicationsText ||\n    (medications && medications.map(item => item.name).join(', ')) ||\n    ''\n)\n\n/**\n * @type {Pick<\n *   Record<keyof CaseData, string>,\n *   'brodsky' | 'ulbt' | 'tmd' | 'iid' | 'mallampati'\n * >}\n */\nexport const airwayAssessmentLabelMap = {\n  mallampati: 'Modified Mallampati',\n  brodsky: 'Tonsil Size (Brodsky scale)',\n  ulbt: 'Upper lip bite test',\n  tmd: 'Thyromental Distance (in cm)',\n  iid: 'Inter-incisor Distance (in cm)',\n}\n\nconst airwayKeys = Object.keys(airwayAssessmentLabelMap)\nconst airwayLabels = Object.values(airwayAssessmentLabelMap)\n\n/**\n * @type {CaseSelector<\n *   { name: string; label: string; value: string }[] | null\n * >}\n */\nexport const selectAirwayAssessmentReport = createSelector(\n  // @ts-ignore\n  ...airwayKeys.map(key => getCasePropSelector(key)),\n  (...values) => {\n    const result = []\n    for (let i = 0; i < airwayKeys.length; i++) {\n      const label = airwayLabels[i]\n      const value = values[i]\n      const key = airwayKeys[i]\n      result.push({ name: key, label, value })\n    }\n    return result\n  }\n)\n","// @ts-check\nimport { createDoseProp } from '../utils/dose-prop'\nimport { replaceObjectRawKeys } from '../utils/object'\n\nconst prop = createDoseProp({\n  route: 'inhalation',\n  drugInfoProp: 'inhalationAgents',\n  mapFn: replaceObjectRawKeys,\n})\n\n/**\n * @param {string} id\n * @param {{\n *   amount: number\n *   time: number\n * }} updates\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUpdateInhalationDosage = (id, updates) =>\n  prop.actionUpdateDosage(id, updates)\n\n/**\n * @param {string} id\n * @returns {any} The changes to apply to the case.\n */\nexport const actionClearInhalationDosage = id => ({\n  [`drugDosage.inhalation.doses.${id}`]: null,\n})\n\n/**\n * @type {(\n *   caseData: CaseData\n * ) => {\n *   [drugId: string]: {\n *     amount: number\n *     time: number\n *   }\n * }}\n */\nexport const selectInhalationDosage = prop.selectDosageRaw\n","function calc(m) {\n    return function(n) { return Math.round(n * m); };\n};\nmodule.exports = {\n    seconds: calc(1e3),\n    minutes: calc(6e4),\n    hours: calc(36e5),\n    days: calc(864e5),\n    weeks: calc(6048e5),\n    months: calc(26298e5),\n    years: calc(315576e5)\n};\n","// @ts-check\nimport ms from 'milliseconds'\nimport { roundToDecimal } from './utils/decimals'\n\n/** @type {LocalAnestheticBase[]} */\nconst localAnestheticsBase = [\n  {\n    id: '142440',\n    name: 'Lidocaine',\n    percent: 0.02,\n    halfLife: ms.minutes(120),\n    input: 'cartridges',\n    variants: [\n      {\n        id: '142440|1',\n        epi: 50,\n        color: '#007D59',\n        manAbsoluteMax: 500,\n        manRatioMax: 7,\n        aapdAbsoluteMax: 300,\n        aapdRatioMax: 4.4,\n        countries: ['US'],\n      },\n      {\n        id: '142440|2',\n        epi: 100,\n        color: '#FB0019',\n        manAbsoluteMax: 500,\n        manRatioMax: 7,\n        aapdAbsoluteMax: 300,\n        aapdRatioMax: 4.4,\n        countries: ['US'],\n      },\n    ],\n  },\n  {\n    id: '2117',\n    name: 'Articaine',\n    percent: 0.04,\n    halfLife: ms.minutes(44.4),\n    input: 'cartridges',\n    variants: [\n      {\n        id: '2117|0',\n        epi: 100,\n        color: '#B28768',\n        manAbsoluteMax: null,\n        manRatioMax: 7,\n        aapdAbsoluteMax: 500,\n        aapdRatioMax: 7,\n        minAge: 5,\n        enableDilute: true,\n        ageWarning:\n          'Manufacturer recommends not using on patients 4 and under.',\n        countries: ['US'],\n      },\n      {\n        id: '2117|1',\n        epi: 200,\n        color: '#807772',\n        manAbsoluteMax: null,\n        manRatioMax: 7,\n        aapdAbsoluteMax: 500,\n        aapdRatioMax: 7,\n        minAge: 5,\n        enableDilute: true,\n        ageWarning:\n          'Manufacturer recommends not using on patients 4 and under.',\n        countries: ['US'],\n      },\n    ],\n  },\n  {\n    id: '267396',\n    name: 'Bupivacaine',\n    percent: 0.005,\n    halfLife: ms.hours(3.5),\n    nameForChart: '0.5% Bupiv.',\n    input: 'cartridges',\n    variants: [\n      {\n        id: '267396|0',\n        epi: 200,\n        color: '#2063A1',\n        manAbsoluteMax: 90,\n        manRatioMax: 7,\n        minAge: 13,\n        enableDilute: true,\n        ageWarning: 'Extra caution advised for pediatric patients.',\n        countries: ['US'],\n      },\n    ],\n  },\n  {\n    id: '2557',\n    name: 'Prilocaine',\n    percent: 0.04,\n    halfLife: ms.hours(1.6),\n    input: 'cartridges',\n    variants: [\n      {\n        id: '2557|0',\n        epi: 200,\n        color: '#FFE95E',\n        manAbsoluteMax: 600,\n        manRatioMax: 8,\n        aapdAbsoluteMax: 400,\n        aapdRatioMax: 6,\n        countries: ['US'],\n      },\n      {\n        id: '2557|1',\n        epi: 0,\n        color: '#2B251F',\n        manAbsoluteMax: 600,\n        manRatioMax: 8,\n        aapdAbsoluteMax: 300,\n        aapdRatioMax: 6,\n        countries: ['US'],\n      },\n    ],\n  },\n  {\n    id: '203185',\n    name: 'Mepivacaine',\n    percent: 0.03,\n    halfLife: ms.hours(1.9),\n    input: 'cartridges',\n    variants: [\n      {\n        id: '203185|0',\n        color: '#EFC09B',\n        manAbsoluteMax: 400,\n        manRatioMax: 6.6,\n        aapdAbsoluteMax: 300,\n        aapdRatioMax: 4.4,\n        countries: ['US'],\n      },\n      {\n        id: '700826|0',\n        rxcui: '700826',\n        subName: '1:20,000 Levonordefrin',\n        nameForChart: 'Mepivacaine',\n        unitForChart: 'Levonordefrin',\n        percent: 0.02,\n        color: '#874C41',\n        manAbsoluteMax: 400,\n        manRatioMax: 6.6,\n        aapdAbsoluteMax: 300,\n        aapdRatioMax: 4.4,\n        countries: ['US'],\n      },\n    ],\n  },\n  {\n    id: '1726513',\n    name: 'Exparel™',\n    altName: 'Bupivacaine liposome susp.',\n    reminder:\n      'Never to be injected within 20 minutes of any other kind of non-Bupivacaine local anesthetic, nor is any other local anesthetic to be given 96 hours after Exparel.',\n    percent: 0.0133,\n    halfLife: ms.hours(24),\n    input: 'mg',\n    variants: [\n      {\n        id: '1726513|0',\n        color: '#044F56',\n        minAge: 6,\n        ageWarning: 'FDA approved for age 6+ only.',\n        countries: ['US'],\n      },\n    ],\n  },\n  {\n    id: '1856568',\n    name: 'OraVerse™',\n    altName: 'Phentolamine Mesylate',\n    reminder:\n      'Should only follow local anesthetics that contain a vasoconstrictor.',\n    percent: roundToDecimal(0.4 / 1.7 / 1000, 7),\n    input: 'cartridges',\n    variants: [\n      {\n        id: '1856568|0',\n        subName: '0.4 mg/1.7 mL',\n        color: '#B2EB87',\n        minAge: 3,\n        noEpiWarning:\n          'No doses with epinephrine have been recorded. Should only be given after locals with a vasoconstrictor.',\n        ageWarning:\n          'The safety and efficacy of Phentolamine Mesylate has not been established in patients younger than 3 years.',\n        // very important!\n        skipForToxicity: true,\n        countries: ['US'],\n      },\n    ],\n  },\n]\n\n/** @type {(country?: 'US' | 'AUS') => LocalAnestheticVariantProcessed[]} */\nexport const getLocalAnestheticVariantsForCountry = (country = 'US') =>\n  localAnestheticsBase.reduce((result, drug) => {\n    const { variants, ...rest } = drug\n    variants.forEach(variant => {\n      const { countries, ...variantRest } = variant\n      if (!countries.includes(country)) return\n      result.push({\n        ...rest,\n        rxcui: drug.id,\n        ...variantRest,\n      })\n    })\n    return result\n  }, [])\n\n/** @type {Record<string, LocalAnestheticVariantProcessed>} */\nexport const localAnestheticLookupById = getLocalAnestheticVariantsForCountry().reduce(\n  (result, drug) => {\n    result[drug.id] = drug\n    return result\n  },\n  {}\n)\n","// @ts-check\nimport { roundToDecimal } from './decimals'\n\nconst mlToMg = (ml, percentage) => ml * percentage * 10 * 100\nconst mgToMl = (mg, percentage) => mg / percentage / 10 / 100\nconst mlToCart = ml => ml / 1.8\nconst cartToMl = cart => (cart || 0) * 1.8\n\n// round all to 2\nconst round = val => roundToDecimal(val, 2)\n\n/**\n * @param {{\n *   mg?: number\n *   ml?: number\n *   cartridges?: number\n *   drugPercent: number\n * }} param0\n * @returns {{\n *   cartridges: number\n *   ml: number\n *   mg: number\n * }}\n */\nexport const convertLa = ({ cartridges, mg, ml, drugPercent }) => {\n  if (mg) {\n    const ml = mgToMl(mg, drugPercent)\n    return {\n      cartridges: round(mlToCart(ml)),\n      ml: round(ml),\n      mg: Number(mg),\n    }\n  }\n\n  if (ml) {\n    return {\n      cartridges: round(mlToCart(ml)),\n      ml: round(Number(ml)),\n      mg: round(mlToMg(ml, drugPercent)),\n    }\n  }\n\n  if (cartridges) {\n    const ml = cartToMl(cartridges)\n    return {\n      cartridges: round(Number(cartridges)),\n      ml: round(ml),\n      mg: round(mlToMg(ml, drugPercent)),\n    }\n  }\n\n  return { ml: 0, mg: 0, cartridges: 0 }\n}\n","// @ts-check\n// if ratio is `1:20,000` input is `20`\nexport const diluteLocalsRatio = (input, strength) =>\n  Math.round(1 / ((1 / (input * 1000)) * strength)) / 1000\n","// @ts-check\nexport const formatPercent = number => `${number * 100}%`\n\nexport const addCommas = input => {\n  const string = (input && input.toString()) || ''\n  if (string.length <= 3) {\n    return string\n  }\n  const reversed = string.split('').reverse()\n\n  let result = ''\n  reversed.forEach((number, index) => {\n    const mod = index % 3\n    if (index && !mod) {\n      result = number + ',' + result\n    } else {\n      result = number + result\n    }\n  })\n\n  return result\n}\n\nexport const formatEpi = number =>\n  number == 0 ? 'no epi' : `1:${addCommas(Math.round(number * 1000))} epi`\n","// @ts-check\nimport { createCrudProp } from '../utils/crud-prop'\nimport { createSelector } from '../utils/selector-utils'\n\nconst prop = createCrudProp({\n  rootKey: 'laDilutions',\n  idPrefix: 'customla',\n  requiredProps: ['variantId', 'percent'],\n  mapFn: entry => ({\n    ...entry,\n    percent: Number(entry.percent),\n  }),\n})\n\n/**\n * @param {{\n *   variantId: string\n *   percent: number\n * }} localDilution\n * @param {string} [preGeneratedId]\n * @returns {any} The changes to apply to the case.\n */\nexport const actionAddLocalDilutionRaw = prop.actionAdd\n\n/**\n * @param {string} customVariantId\n * @returns {any} The changes to apply to the case.\n */\nexport const actionRemoveLocalDilutionRaw = prop.actionRemove\n\n/**\n * @type {CaseSelector<{\n *   [dilutionId: string]: LocalDilutionEntry\n * }>}\n */\n// @ts-ignore\nexport const selectLocalDilutionsById = prop.selectById\n\n/**\n * @type {CaseSelector<{\n *   [drugVariantId: string]: LocalDilutionEntry[]\n * }>}\n */\nexport const selectLocalDilutionsByBaseDrugId = createSelector(\n  selectLocalDilutionsById,\n  /**\n   * @param {{\n   *   [dilutionId: string]: LocalDilutionEntry\n   * }} byId\n   */\n  byId => {\n    /** @type {{ [drugVariantId: string]: LocalDilutionEntry[] }} */\n    const result = {}\n    for (const key in byId) {\n      const dilution = byId[key]\n      if (!result[dilution.variantId]) {\n        result[dilution.variantId] = []\n      }\n      result[dilution.variantId].push(dilution)\n    }\n    return result\n  }\n)\n","// @ts-check\nimport {\n  localAnestheticLookupById,\n  getLocalAnestheticVariantsForCountry,\n} from '../local-anesthetics'\nimport { convertLa } from '../utils/convert-la'\nimport { roundToDecimal } from '../utils/decimals'\nimport { diluteLocalsRatio } from '../utils/dilute-locals-ratio'\nimport { createDoseProp } from '../utils/dose-prop'\nimport { formatEpi } from '../utils/format'\nimport { createId } from '../utils/id'\nimport {\n  removeKeysWithNullishValues,\n  replaceObjectRawKeys,\n} from '../utils/object'\nimport { createSelector } from '../utils/selector-utils'\nimport { sortByTimeIfExists } from '../utils/sort-by'\nimport { selectLocalDosesAdministeredRawById } from './drugs-administered'\nimport {\n  actionAddLocalDilutionRaw,\n  actionRemoveLocalDilutionRaw,\n  selectLocalDilutionsByBaseDrugId,\n} from './la-dilutions'\n\nconst extractRxcui = id => {\n  const splitId = id.split('|')\n  if (splitId.length == 2 && /^\\d+$/.test(splitId[0])) {\n    return splitId[0]\n  }\n  return null\n}\nconst prop = createDoseProp({\n  route: 'local',\n  drugInfoProp: 'localAnesthetics',\n  mapFn: drug => {\n    if (drug.rxcui || !drug.id) {\n      return drug\n    }\n    const rxcui = extractRxcui(drug.id)\n    if (rxcui) {\n      return { ...drug, rxcui }\n    }\n    return drug\n  },\n})\n\n/**\n * @param {{\n *   id: string\n *   rxcui?: string\n *   name: string\n *   epi: number\n *   percent: number\n * }} localDrug\n *   The drug we're selecting. We really want rxcui to be required, but we may not\n *   have it if we're creating it off of presets.\n * @returns {any} The changes to apply to the case.\n */\nexport const actionSelectLocalDrug = ({ id, rxcui, name, epi, percent }) =>\n  prop.actionSelect(id, { name, epi, percent, rxcui })\n\n/**\n * @param {string} id The rxcui ID of the drug we're unselecting\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUnselectLocalDrug = prop.actionUnselect\n\n/**\n * @param {string} id\n * @param {{\n *   unit: LocalDoseUnit\n *   amount_raw: string\n * }} updates\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUpdateLocalDosage = prop.actionUpdateDosage\n\n/**\n * @param {string} id\n * @param {LocalDoseUnit} unit\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUpdateLocalUnit = (id, unit) =>\n  prop.actionUpdateDosage(id, { unit })\n\n/**\n * @param {string} id\n * @param {string} amountRaw\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUpdateLocalAmount = (id, amountRaw) =>\n  prop.actionUpdateDosage(id, { amount_raw: amountRaw })\n\nexport const actionAddLocalDilution = (drugVariantId, percentStrength) => {\n  const variant = localAnestheticLookupById[drugVariantId]\n  if (!variant || !variant.enableDilute) return\n  const { name, epi, percent, rxcui } = variant\n  const id = createId('customla')\n  return {\n    ...actionAddLocalDilutionRaw(\n      {\n        variantId: drugVariantId,\n        percent: percentStrength,\n      },\n      id\n    ),\n    ...actionSelectLocalDrug({ id, name, epi, percent, rxcui }),\n  }\n}\n\n/**\n * @param {string} customVariantId\n * @returns {any} The changes to apply to the case.\n */\nexport const actionRemoveLocalDilution = customVariantId => ({\n  ...actionRemoveLocalDilutionRaw(customVariantId),\n  ...actionUnselectLocalDrug(customVariantId),\n})\n\n/**\n * @param {MacroLocalDrug} localDrugSelection\n * @returns {any} The changes to apply to the case.\n */\nexport const actionPresetLocalDrug = ({\n  id,\n  name,\n  percent,\n  epi,\n  unit,\n  dose,\n}) => ({\n  ...actionSelectLocalDrug({ id, name, percent, epi }),\n  ...actionUpdateLocalUnit(id, unit),\n  ...(dose ? actionUpdateLocalAmount(id, dose) : {}),\n})\n\nexport const getSubName = variant => {\n  if (variant.subName) {\n    return variant.subName\n  }\n  if (variant.epi != null) {\n    if (variant.epi > 0) {\n      return formatEpi(variant.epi)\n    }\n    return '(no epi)'\n  }\n}\n\n/** @type {CaseSelector<LocalAnestheticVariant[]>} */\nexport const selectLocalDrugVariantsFullList = createSelector(\n  selectLocalDosesAdministeredRawById,\n  selectLocalDilutionsByBaseDrugId,\n  prop.selectDosage,\n  /**\n   * @param selectedById\n   * @param {{\n   *   [drugVariantId: string]: LocalDilutionEntry[]\n   * }} dilutionsByBaseDrugId\n   * @returns\n   */\n  (dosesById, dilutionsByBaseDrugId, dosageById) => {\n    // in the future this country could come from case data\n    const baseList = getLocalAnestheticVariantsForCountry('US')\n    /** @type {LocalAnestheticVariant[]} */\n    const result = []\n    const addVariant = variant => {\n      result.push({\n        ...variant,\n        selected: !!dosageById[variant.id],\n        subName: getSubName(variant),\n      })\n    }\n\n    baseList.forEach(variant => {\n      addVariant(variant)\n      const dilutions = dilutionsByBaseDrugId[variant.id]\n      if (dilutions) {\n        dilutions.forEach(customVariant => {\n          const { percent, id } = customVariant\n          addVariant({\n            ...variant,\n            id,\n            custom: true,\n            percent: variant.percent * percent,\n            epi: diluteLocalsRatio(variant.epi, percent),\n          })\n        })\n      }\n    })\n\n    return result.map(variant => {\n      let doses\n\n      if (variant.selected) {\n        doses = (dosesById[variant.id] || []).map(dose => {\n          const {\n            id,\n            unit,\n            amount,\n            amount_raw,\n            epiConcentration,\n            drugVariantId,\n            shouldStartCase,\n            time,\n          } = dose\n\n          let { mg, ml, cartridges } = convertLa({\n            [unit]: amount,\n            drugPercent: variant.percent,\n          })\n\n          let epiMg = 0\n          if (epiConcentration) {\n            const epiMgPerMl = 1 / epiConcentration\n            epiMg = roundToDecimal(ml * epiMgPerMl, 3)\n          }\n          /** @type {LocalDoseProcessed} */\n          const toReturn = {\n            id,\n            drugVariantId,\n            time,\n            amount,\n            amount_raw,\n            unit,\n            epiConcentration,\n            cartridges,\n            epiMg,\n            mg,\n            shouldStartCase,\n            skipForToxicity: !!variant.skipForToxicity,\n          }\n          return toReturn\n        })\n      } else {\n        doses = []\n      }\n\n      const totalMgGiven = roundToDecimal(\n        doses.reduce((total, dose) => total + dose.mg, 0),\n        2\n      )\n      const totalCartridgesGiven = roundToDecimal(\n        doses.reduce((total, dose) => total + dose.cartridges, 0),\n        2\n      )\n      const totalEpiMgGiven = roundToDecimal(\n        doses.reduce((total, dose) => total + dose.epiMg, 0),\n        2\n      )\n\n      const { amount, amount_raw, unit } = replaceObjectRawKeys(\n        dosageById[variant.id] || {}\n      )\n\n      let nameWithPct = variant.name\n      const percent = variant.percent\n\n      if (percent) {\n        nameWithPct = `${roundToDecimal(percent * 100, 2)}% ${nameWithPct}`\n      }\n\n      return removeKeysWithNullishValues({\n        ...variant,\n        nameWithPct,\n        amount,\n        amount_raw,\n        unit,\n        doses,\n        inUse: !!doses.length,\n        totalMgGiven,\n        totalCartridgesGiven,\n        totalEpiMgGiven,\n      })\n    })\n  }\n)\n\n/** @type {CaseSelector<Record<string, LocalAnestheticVariant>>} */\nexport const selectLocalDrugVariantsFullListById = createSelector(\n  selectLocalDrugVariantsFullList,\n  variants =>\n    variants.reduce((acc, variant) => {\n      acc[variant.id] = variant\n      return acc\n    }, {})\n)\n\n/** @type {CaseSelector<LocalAnestheticVariant[]>} */\nexport const selectSelectedLocals = createSelector(\n  selectLocalDrugVariantsFullList,\n  /** @param {LocalAnestheticVariant[]} variants */\n  variants => variants.filter(item => item.selected)\n)\n\n/** @type {CaseSelector<Record<string, LocalAnestheticVariant>>} */\nexport const selectSelectedLocalsById = createSelector(\n  selectSelectedLocals,\n  selected =>\n    selected.reduce((acc, item) => {\n      acc[item.id] = item\n      return acc\n    }, {})\n)\n\n/**\n * We re-assemble it from here instead of doing it at a lower level because with\n * this approach we can keep add in all the context of the drug variant, such as\n * whether or not it should be included in toxicity calculations.\n *\n * This is bit round-about but it should work well and since we don't expect\n * anything in the selector layers below to rapidly it should not have any\n * significant negative performance implications.\n *\n * @type {CaseSelector<LocalDoseProcessed[]>}\n */\nexport const selectLocalDosesAdministered = createSelector(\n  selectSelectedLocals,\n  /** @param {LocalAnestheticVariant[]} variants */\n  variants => {\n    /** @type {LocalAnestheticVariant['doses']} */\n    const toReturn = []\n    variants.forEach(variant => {\n      toReturn.push(...variant.doses)\n    })\n    toReturn.sort(sortByTimeIfExists)\n    return toReturn\n  }\n)\n\n/** @type {CaseSelector<boolean>} */\nexport const selectHasUsedNonToxicLocal = createSelector(\n  selectLocalDosesAdministered,\n  doses => doses.some(dose => dose.skipForToxicity)\n)\n\n/** @type {CaseSelector<boolean>} */\nexport const selectHasTrackedLocalAnesthetics = createSelector(\n  selectLocalDosesAdministered,\n  /** @param {LocalAnestheticVariant['doses']} doses */\n  doses => doses.some(dose => dose.mg > 0)\n)\n\n/** @type {CaseSelector<MacroLocalDrug[]>} */\nexport const selectLocalsForMacro = createSelector(\n  selectSelectedLocals,\n  prop.selectDosageRaw,\n  (locals, dosage) =>\n    locals.map(({ id, rxcui, name, percent, epi, doses }) => {\n      const { amount_raw, unit } = dosage[id] || {}\n      const firstDose = doses[0]\n      return removeKeysWithNullishValues(\n        {\n          id,\n          rxcui,\n          name,\n          percent,\n          epi,\n          dose: (firstDose && firstDose.amount_raw) || amount_raw,\n          unit: (firstDose && firstDose.unit) || unit,\n        },\n        true\n      )\n    })\n)\n","// @ts-check\nimport { createCrudProp } from '../utils/crud-prop'\nimport { nullIfEmpty, removeKeysWithEmptyValues } from '../utils/object'\nimport { createSelector } from '../utils/selector-utils'\nimport { sortByTimeIfExists } from '../utils/sort-by'\n\nconst preMedProp = createCrudProp({\n  rootKey: 'preMedsAdministered',\n  idPrefix: 'pmed',\n  sortFn: sortByTimeIfExists,\n})\n\n/**\n * @param {boolean} preMedsUsed\n * @returns {any} The changes to apply to the case.\n */\nexport const actionPreMedsUsed = preMedsUsed => ({ preMedsUsed })\n\n/**\n * @param {PreMedEditable} [props]\n * @returns {any} The changes to apply to the case.\n */\nexport const actionAddPreMed = props => ({\n  ...preMedProp.actionAdd({\n    time: Date.now(),\n    editing: true,\n    ...props,\n  }),\n  ...actionPreMedsUsed(true),\n})\n\n/**\n * @param {string} id The preMed ID\n * @returns {any} The changes to apply to the case.\n */\nexport const actionRemovePreMed = preMedProp.actionRemove\n\n/**\n * @param {string} id The airway ID\n * @param {PreMedEditable} updates The updates to apply to the preMed\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUpdatePreMed = preMedProp.actionUpdate\n\n/**\n * @param {CaseData} caseData\n * @returns {PreMed[]}\n */\nexport const selectPreMeds = preMedProp.select\n\n/**\n * @param {CaseData} caseData\n * @returns {{ [id: string]: Omit<PreMed, 'id'> }}\n */\nexport const selectPreMedsRaw = preMedProp.selectRaw\n\n/**\n * @param {CaseData} caseData\n * @returns {boolean | null}\n */\nexport const selectPreMedsUsed = caseData => caseData.preMedsUsed\n\n/**\n * @param {CaseData} caseData\n * @returns {boolean}\n */\nexport const selectHasAnsweredPreMed = caseData => {\n  const answer = selectPreMedsUsed(caseData)\n  return answer === true || answer === false\n}\n\n/**\n * @param {CaseData} caseData\n * @returns {MacroPreMed[] | null}\n */\nexport const selectPreMedsForMacro = createSelector(selectPreMeds, preMeds =>\n  nullIfEmpty(\n    preMeds\n      .filter(preMed => preMed.drugId && preMed.drugName)\n      .map(preMed =>\n        removeKeysWithEmptyValues({\n          drugId: preMed.drugId,\n          drugName: preMed.drugName,\n          route: preMed.route,\n          dosage: preMed.dosage,\n          unit: preMed.unit,\n        })\n      )\n  )\n)\n","// @ts-check\nimport { getCasePropSelector } from '../utils/case-prop-selector'\nimport { createSelector } from '../utils/selector-utils'\n\n/** @type {Record<SystemsReviewCategory, string>} */\nexport const systemsReviewCategoryMap = {\n  general: 'General',\n  cardiac: 'Cardiac System',\n  pulmonary: 'Pulmonary System',\n  hepatic: 'Hepatic System',\n  renal: 'Renal System',\n  hematologic: 'Hematological System',\n  endocrine: 'Endocrine System',\n  oncology: 'Oncology',\n  cns: 'Central Nervous System',\n  muscular: 'Muscular/Skeletal System',\n  gastro: 'Gastrointestinal System',\n  psychiatric: 'Psychiatric/Psychological',\n  gyn: 'Gynecological System',\n  developmental: 'Developmental Challenges',\n  habits: 'Habits',\n}\n\n/** @type {CaseSelector<SystemsReviewRaw>} */\nexport const selectSystemsReviewRaw = caseData => caseData.systemsReview || {}\n\n/** @type {CaseSelector<boolean>} */\nexport const selectIsHealthy = createSelector(\n  selectSystemsReviewRaw,\n  raw =>\n    Object.keys(raw).length === Object.keys(systemsReviewCategoryMap).length &&\n    Object.values(raw).every(system => system.hasEntries === false)\n)\n\n/**\n * @param {SystemsReviewCategory} category\n * @returns {any} Updates to apply to case\n */\nexport const actionSetSystemCategoryToNo = category => ({\n  [`systemsReview.${category}.entries`]: null,\n  [`systemsReview.${category}.hasEntries`]: false,\n})\n\n/**\n * @param {{\n *   category: SystemsReviewCategory\n *   index: number\n *   detailIndex: number\n *   name: string\n *   value: string\n *   path: string\n *   label\n * }} opts\n * @returns {any} Updates to apply to case\n */\nexport const actionUpdateSystemsReviewDetail = ({\n  category,\n  index,\n  detailIndex,\n  name,\n  value,\n  path,\n  label,\n}) => ({\n  [`systemsReview.${category}.entries.[${index}].details.${detailIndex}`]: {\n    name,\n    value,\n    path,\n    label,\n  },\n})\n\n/**\n * @param {SystemsReviewCategory} category\n * @param {number} index\n * @param {boolean} isEditing\n * @returns {any} Updates to apply to case\n */\nexport const actionEditSystemQuestion = (category, index, isEditing) => ({\n  [`systemsReview.${category}.entries.[${index}].editing`]: !!isEditing,\n})\n\n/**\n * @param {SystemsReviewCategory} category\n * @param {number} index\n * @param {boolean} isLastEntry\n * @returns {any} Updates to apply to case\n */\nexport const actionRemoveSystemQuestions = (category, index, isLastEntry) => ({\n  [`systemsReview.${category}.entries.[${index}]`]: null,\n  [`systemsReview.${category}.hasEntries`]: isLastEntry ? null : true,\n})\n\n/**\n * @param {SystemsReviewCategory} category\n * @param {number} index\n * @returns {any} Updates to apply to case\n */\nexport const actionAddSystemQuestions = (category, index) => ({\n  [`systemsReview.${category}.entries.[${index}]`]: {\n    editing: true,\n  },\n  [`systemsReview.${category}.hasEntries`]: true,\n})\n\n/** @type {SystemsReviewCategory[]} */\nconst allSystemCategories = [\n  'cardiac',\n  'cns',\n  'developmental',\n  'endocrine',\n  'gastro',\n  'general',\n  'gyn',\n  'habits',\n  'hematologic',\n  'hepatic',\n  'muscular',\n  'oncology',\n  'psychiatric',\n  'pulmonary',\n  'renal',\n]\n/** @returns {any} Updates to apply to case */\nexport const actionSetAllSystemCategoriesToNo = () =>\n  allSystemCategories.reduce(\n    (obj, category) =>\n      Object.assign(obj, actionSetSystemCategoryToNo(category)),\n    {}\n  )\n\n/** @type {CaseSelector<{}>} */\nexport const selectSystemsReviewItemsByCategory = createSelector(\n  selectSystemsReviewRaw,\n  items => {\n    const res = {}\n    for (const key in items) {\n      if (!res[key]) {\n        res[key] = []\n      }\n      res[key] = items[key].entries || []\n    }\n    return res\n  }\n)\n\nexport const selectSystemsReviewProcessed = createSelector(\n  selectSystemsReviewItemsByCategory,\n  raw => {\n    const res = {}\n    for (const key in systemsReviewCategoryMap) {\n      const entries = raw[key]\n      if (entries) {\n        res[key] = []\n        for (const entry of entries) {\n          const editing = entry.editing\n          const details = entry.details || []\n\n          const questionObject = { editing }\n          res[key].push(questionObject)\n\n          // We loop this way because it works for both arrays and objects\n          // At on point `details` were arrays and not objects.\n          // But we changed that because it caused some issues.\n          // So we loop through with a `for ... in` which will work\n          // for both arrays and objects.\n          for (let keyOrIndex in details) {\n            const detail = details[keyOrIndex]\n            const { name, label, path, value } = detail\n            questionObject[name] = {\n              name,\n              valueDescription: label,\n              path,\n              value,\n            }\n          }\n        }\n      } else {\n        res[key] = null\n      }\n    }\n    return res\n  }\n)\n\nconst formatSystemReviewValues = arr => {\n  const values = arr\n    .map(value => (value && value.trim ? value.trim() : value))\n    .filter(x => x)\n  return values.length > 1\n    ? values[0] + ': ' + values.slice(1).join(', ')\n    : values[0]\n}\n\n/** @type {CaseSelector<SystemsReviewCategorySummary | null>} */\nexport const selectSystemsReviewSummariesByCategory = createSelector(\n  selectSystemsReviewProcessed,\n  systemsReview => {\n    const toReturn = {}\n    let hasAnyValues = false\n    for (const key in systemsReview) {\n      let issues = systemsReview[key]\n      if (issues) {\n        toReturn[key] = {\n          name: key,\n          label: systemsReviewCategoryMap[key],\n          summaries: [],\n        }\n        issues.forEach(issueValuesByName => {\n          hasAnyValues = true\n          const values = []\n          for (const key in issueValuesByName) {\n            const { valueDescription } = issueValuesByName[key]\n            if (valueDescription) {\n              values.push(valueDescription)\n            }\n          }\n          const toPush = formatSystemReviewValues(values)\n          if (toPush) {\n            toReturn[key].summaries.push(formatSystemReviewValues(values))\n          }\n        })\n      }\n    }\n    if (!hasAnyValues) {\n      return null\n    }\n    return toReturn\n  }\n)\n\n/** @type {CaseSelector<SystemsReviewSummary | null>} */\nexport const selectSystemsReviewSummary = createSelector(\n  selectSystemsReviewSummariesByCategory,\n  getCasePropSelector('systemsReviewSkipped', false),\n  selectIsHealthy,\n  (systemsReviewSummariesByCategory, skipped, isHealthy) => {\n    const buff = []\n    if (skipped) {\n      return null\n    }\n    if (isHealthy) {\n      return buff\n    }\n    if (!systemsReviewSummariesByCategory) {\n      return null\n    }\n    for (const key in systemsReviewSummariesByCategory) {\n      const entry = systemsReviewSummariesByCategory[key]\n      if (!entry || !entry.summaries.length) {\n        continue\n      }\n      const cat = entry.label\n      const catEntries = []\n      for (const summary of entry.summaries) {\n        catEntries.push(summary)\n      }\n      buff.push([cat, catEntries])\n    }\n    if (!buff.length) {\n      return null\n    }\n    return buff\n  }\n)\n","// @ts-check\nimport { nullIfEmpty } from './object'\nimport { createSelector } from './selector-utils'\n\n/**\n * This lookup is an exhaustive list of all the definition fields that are\n * considered part of the HHX.\n *\n * The string value represents whether a given key should be included in HHX\n * data when hhx is done in Xchart, elsewhere, or both.\n *\n * @type {Record<HhxFieldWithoutFinal, 'local' | 'elsewhere' | 'both'>}\n */\nconst hhxKeyLookup = {\n  // physical\n  height: 'both',\n  height_raw: 'both',\n  weight: 'both',\n  weight_raw: 'both',\n  asaClassification: 'both',\n  mallampati: 'both',\n  lungAuscultation: 'both',\n  heartAuscultation: 'both',\n\n  // allergies\n  allergiesSummary: 'both',\n\n  // history\n  hospitalizationSummary: 'local',\n  surgicalHistorySummary: 'local',\n  anesthesiaHistorySummary: 'local',\n  familyAnesthesiaHistorySummary: 'local',\n\n  // open field\n  healthHistorySummary: 'elsewhere',\n  healthHistoryNotes: 'local',\n\n  // medications\n  medicationsText: 'local',\n  medications: 'local',\n\n  // review of systems\n  systemsReview: 'local',\n  systemsReviewSkipped: 'both',\n\n  // patient measurements\n  pm: 'local',\n\n  // airway\n  brodsky: 'local',\n  ulbt: 'local',\n  tmd: 'local',\n  iid: 'local',\n\n  // consult\n  medicalConsult: 'local',\n  medicalConsultNotes: 'local',\n}\n\n/** @type {HhxField[]} */\n// @ts-ignore\nexport const caseKeysFromHhx = Object.keys(hhxKeyLookup)\n\n/** @type {HhxField[]} */\nconst hhxKeysWhenDoingHhxElsewhere = caseKeysFromHhx.filter(\n  key => hhxKeyLookup[key] === 'elsewhere' || hhxKeyLookup[key] === 'both'\n)\n\n/** @type {HhxField[]} */\nconst hhxKeysWhenDoingHhxInXchart = caseKeysFromHhx.filter(\n  key => hhxKeyLookup[key] === 'local' || hhxKeyLookup[key] === 'both'\n)\n\n/**\n * This will select all the HHX data from the passed object. Even if it won't\n * ultimately be used in the report.\n *\n * If you select you've done HHX elsewhere via the systemsReviewSkipped field it\n * could contain more data than what we actually want in the report.\n *\n * @param {CaseData | HhxData} caseData\n * @returns {HhxData | null}\n */\nexport const selectAnyHhxDataOrNull = caseData => {\n  if (!caseData) return null\n  const result = {}\n  for (const key of caseKeysFromHhx) {\n    if (caseData.hasOwnProperty(key)) {\n      result[key] = caseData[key]\n    }\n  }\n  return nullIfEmpty(result)\n}\n\n/**\n * This will select *relevant* HHX data only following the rule that if we do\n * HHX Elsewhere, the other stuff is ignored.\n *\n * Also, if medicalConsult is false, we should not include the notes, even if\n * they exist in the data.\n *\n * @param {CaseData | HhxData} caseData\n * @returns {boolean}\n */\nexport const selectRelevantHhxData = createSelector(\n  selectAnyHhxDataOrNull,\n  hhxData => {\n    if (!hhxData) return {}\n    const elsewhere = !!hhxData.systemsReviewSkipped\n    const keysToUse = elsewhere\n      ? hhxKeysWhenDoingHhxElsewhere\n      : hhxKeysWhenDoingHhxInXchart\n    const result = {}\n    for (const key of keysToUse) {\n      if (hhxData.hasOwnProperty(key)) {\n        result[key] = hhxData[key]\n      }\n    }\n    // additional check for medicalConsultNotes\n    if (!hhxData.medicalConsult) {\n      delete result.medicalConsultNotes\n    }\n    return result\n  }\n)\n\n/**\n * Returns an object of HHX data that should be cleared out based on the data within it.\n *\n * If this selector does not return null it means there are changes that should be made.\n *\n * @param {HhxData | CaseData} hhxData\n * @returns {any | null}\n */\nexport const selectExtraHhxDataOrNull = createSelector(\n  selectAnyHhxDataOrNull,\n  selectRelevantHhxData,\n  (allHhx, relevantHhx) => {\n    if (!allHhx) return null\n    const changes = {}\n    for (const key in allHhx) {\n      if (!relevantHhx.hasOwnProperty(key)) {\n        changes[key] = allHhx[key]\n      }\n    }\n    return nullIfEmpty(changes)\n  }\n)\n\n/**\n * @param {CaseData | HhxData} caseData\n * @returns {boolean}\n */\nexport const selectContainsAnyHhxData = createSelector(\n  selectAnyHhxDataOrNull,\n  x => !!x\n)\n\n/**\n * This helps us combine data from the case and hhx data in a way that matches\n * our business rules. Specifically any time we have any HHX data in the case\n * data we want to just use it and completely ignore the HHX data.\n *\n * This is how we can let people override the HHX data with the case data.\n *\n * @param {CaseData} caseData\n * @param {HhxData} [hhxData]\n * @returns {CaseData}\n */\nexport const mergeCaseAndHhx = (caseData, hhxData) => {\n  if (selectContainsAnyHhxData(caseData)) {\n    return caseData\n  }\n  /** @type {{ [key: string]: any }} */\n  const toReturn = { ...caseData }\n  const relevantHhxData = selectRelevantHhxData(hhxData || {})\n  /**\n   * We want to loop through *all* the keys, but only include from relevant keys\n   * because we also want to make sure the non-relevant HHX keys are removed\n   * from the returned object.\n   */\n  for (const key of caseKeysFromHhx) {\n    if (relevantHhxData.hasOwnProperty(key)) {\n      toReturn[key] = relevantHhxData[key]\n    } else {\n      // we delete the key from the returned combined case data\n      // because we want to grab one or the other, not mix them.\n      delete toReturn[key]\n    }\n  }\n  return toReturn\n}\n","import { nullIfEmpty, removeKeysWithEmptyValues } from '../utils/object'\nimport { actionAddAirway } from './airway'\nimport {\n  actionPresetInfusionDrug,\n  selectInfusionDrugsForMacro,\n} from './infusion-drug'\nimport { actionUpdateFirstIvSite, selectIvAccessData } from './fluids'\nimport { actionPresetLocalDrug, selectLocalsForMacro } from './local-drug'\nimport {\n  actionPresetOralSedative,\n  selectOralSedativesForMacro,\n} from './oral-sedative'\nimport { actionPresetParenDrug, selectParenDrugsForMacro } from './paren-drug'\nimport { actionAddPosition } from './position'\nimport { actionAddPreMed, selectPreMedsForMacro } from './pre-meds'\nimport {\n  actionSetAllSystemCategoriesToNo,\n  selectIsHealthy,\n} from './systems-review'\nimport {\n  actionIgnoreVitalType,\n  actionSelectVitalType,\n  selectVitalTypesForMacro,\n} from './vital-type'\nimport { caseKeysFromHhx } from '../utils/case-hhx-utils'\n\nconst saveableItems = [\n  'sedationLevel',\n  'ivEnabled',\n  'airwayEnabled',\n  'recorderName',\n  'present',\n  'userRole',\n  'asaClassification',\n  'mallampati',\n  'weightDistribution',\n  'surgeonName',\n  'sedationProviderName',\n  'reasonForSedation',\n  'pregnant',\n  'breastfeeding',\n  'breastfeedingInstructionsGiven',\n  'lastFood',\n  'lastDrink',\n  'procedureNotes',\n  'recoveryNotes',\n  'preProcedureRiskAssessment',\n  'calculateDrugWaste',\n  'dischargeScoreType',\n]\n\n/**\n * @param {CaseData} caseData\n * @returns {Macro}\n */\nexport const createMacroFromCase = caseData => {\n  const {\n    aw,\n    pos,\n    preMedsUsed,\n    ivLocations,\n    systemsReviewSkipped,\n    startedOnRoomAir,\n    vitalsTrackingEnabled,\n  } = caseData\n\n  const result = {\n    copied: {},\n  }\n\n  // straight copy\n  for (const key of saveableItems) {\n    if (\n      caseData.hasOwnProperty(key) &&\n      caseData[key] != null &&\n      caseData[key] !== ''\n    ) {\n      result.copied[key] = caseData[key]\n    }\n  }\n\n  // this is also added to \"copied\" but we only do this if true, not false\n  if (systemsReviewSkipped) {\n    result.copied.systemsReviewSkipped = true\n  }\n\n  // this is also added to \"copied\" but we only do this if true, not false\n  if (startedOnRoomAir) {\n    result.copied.startedOnRoomAir = true\n  }\n\n  // also copied but only if false\n  if (preMedsUsed === false) {\n    result.copied.preMedsUsed = preMedsUsed\n  }\n\n  // we only store the vitalsTrackingEnabled if it's false\n  // otherwise we can safely assume it's true\n  if (vitalsTrackingEnabled === false) {\n    result.copied.vitalsTrackingEnabled = false\n  }\n\n  // if they've said \"no\" to everything in systems review\n  if (selectIsHealthy(caseData)) {\n    result.healthyPatient = true\n  }\n\n  result.preMeds = selectPreMedsForMacro(caseData)\n  result.vitalTypes = selectVitalTypesForMacro(caseData)\n  result.localDrugs = selectLocalsForMacro(caseData)\n  result.parenDrugs = selectParenDrugsForMacro(caseData)\n  result.infusionDrugs = selectInfusionDrugsForMacro(caseData)\n  result.oralSedatives = selectOralSedativesForMacro(caseData)\n\n  if (aw) {\n    result.airways = Object.values(aw)\n      .map(awDetails => {\n        const toReturn = {}\n        for (const key in awDetails) {\n          // things we don't want to include\n          if (\n            key === 'placementComp' ||\n            key === 'timePlaced' ||\n            key === 'timeRemoved' ||\n            key === 'preRemovalSpo2' ||\n            key === 'postRemovalSpo2'\n          ) {\n            continue\n          }\n          const value = nullIfEmpty(awDetails[key], true)\n          if (value !== null) {\n            toReturn[key] = value\n          }\n        }\n\n        return nullIfEmpty(toReturn)\n      })\n      .filter(Boolean)\n  }\n\n  if (pos) {\n    /** @type {Macro['pos']} */\n    result.pos = Object.values(pos).map(item => item.name)\n  }\n\n  if (ivLocations) {\n    const ivAccess = selectIvAccessData(caseData)\n    // we don't keep if if it's zero because it's never\n    // part of a macro if it's zero.\n    if (ivAccess.attempts === 0) {\n      delete ivAccess.attempts\n    }\n    result.iv = removeKeysWithEmptyValues(ivAccess)\n  }\n\n  // remove any keys that are empty objects\n  for (const key in result) {\n    const value = result[key]\n    const isObject = typeof value === 'object'\n    if (isObject && nullIfEmpty(value) === null) {\n      delete result[key]\n    }\n  }\n\n  return result\n}\n\n/**\n * @param {Macro} macro\n * @returns {any} Updates to apply\n */\nexport const actionGetUpdatesForMacro = macro => {\n  const {\n    copied,\n    airways,\n    pos,\n    iv,\n    preMeds,\n    healthyPatient,\n    vitalTypes,\n    localDrugs,\n    parenDrugs,\n    infusionDrugs,\n    oralSedatives,\n  } = macro\n  const updates = {}\n  if (copied) {\n    for (const key in copied) {\n      updates[key] = copied[key]\n    }\n  }\n\n  if (healthyPatient) {\n    Object.assign(updates, actionSetAllSystemCategoriesToNo())\n  }\n\n  if (airways) {\n    for (const airway of airways) {\n      const { type, ...rest } = airway\n      Object.assign(updates, actionAddAirway(type, rest))\n    }\n  }\n\n  if (pos) {\n    for (const name of pos) {\n      Object.assign(updates, actionAddPosition(name))\n    }\n  }\n\n  if (iv) {\n    Object.assign(updates, actionUpdateFirstIvSite(iv))\n  }\n\n  if (preMeds) {\n    for (const preMed of preMeds) {\n      // we want time null here so that we don't enter specific times just by\n      // applying the preset\n      Object.assign(updates, actionAddPreMed({ ...preMed, time: null }))\n    }\n  }\n\n  if (vitalTypes) {\n    for (const id in vitalTypes) {\n      const val = vitalTypes[id]\n      if (val === 'selected') {\n        Object.assign(updates, actionSelectVitalType(id))\n      }\n      if (val === 'ignored') {\n        Object.assign(updates, actionIgnoreVitalType(id))\n      }\n    }\n  }\n\n  if (localDrugs) {\n    Object.assign(updates, ...localDrugs.map(actionPresetLocalDrug))\n  }\n\n  if (parenDrugs) {\n    Object.assign(\n      updates,\n      ...parenDrugs.map(drug => actionPresetParenDrug(drug))\n    )\n  }\n\n  if (infusionDrugs) {\n    Object.assign(updates, ...infusionDrugs.map(actionPresetInfusionDrug))\n  }\n\n  if (oralSedatives) {\n    Object.assign(updates, ...oralSedatives.map(actionPresetOralSedative))\n  }\n\n  /**\n   * This final check is to make sure we don't put the case file into a weird\n   * state where the vitalsTrackingEnabled is false but the sedation level is\n   * not local. We still have a selector that will still return the correct\n   * value for vitalsTrackingEnabled but this check makes sure the value isn't\n   * wrong in the underlying case file.\n   */\n  if (\n    updates.sedationLevel &&\n    updates.sedationLevel !== 'Local' &&\n    updates.vitalsTrackingEnabled === false\n  ) {\n    delete updates.vitalsTrackingEnabled\n  }\n\n  return updates\n}\n\nconst combineObject = (a, b) => nullIfEmpty({ ...(a || {}), ...(b || {}) })\n\nconst mergeArraysByProp = (a, b, prop) => {\n  if (a && b) {\n    const entries = {}\n    for (const entry of a) {\n      entries[entry[prop]] = entry\n    }\n    for (const entry of b) {\n      entries[entry[prop]] = combineObject(entries[entry[prop]], entry)\n    }\n    return Object.values(entries)\n  }\n\n  return a || b\n}\n\n/**\n * @param {Macro} a\n * @param {Macro} b\n * @returns {Macro}\n */\nconst mergeTwoMacros = (a, b) => {\n  const result = {}\n  result.copied = combineObject(a.copied, b.copied)\n  result.iv = combineObject(a.iv, b.iv)\n  result.pos = b.pos || a.pos\n  result.airways = mergeArraysByProp(a.airways, b.airways, 'type')\n  result.vitalTypes = combineObject(a.vitalTypes, b.vitalTypes)\n  result.localDrugs = mergeArraysByProp(a.localDrugs, b.localDrugs, 'id')\n  result.parenDrugs = mergeArraysByProp(a.parenDrugs, b.parenDrugs, 'id')\n  result.preMeds = mergeArraysByProp(a.preMeds, b.preMeds, 'drugId')\n  result.infusionDrugs = mergeArraysByProp(\n    a.infusionDrugs,\n    b.infusionDrugs,\n    'id'\n  )\n  result.healthyPatient = a.healthyPatient || b.healthyPatient || null\n  result.oralSedatives = mergeArraysByProp(\n    a.oralSedatives,\n    b.oralSedatives,\n    'id'\n  )\n\n  return removeKeysWithEmptyValues(result)\n}\n\n/**\n * @param {Macro[]} macros\n * @returns {Macro}\n */\nexport const mergeMacros = (...macros) => macros.reduce(mergeTwoMacros, {})\n\n/**\n * @param {Macro} macro\n * @returns {Macro}\n */\nexport const removeHhxItemsFromMacro = macro => {\n  const result = JSON.parse(JSON.stringify(macro))\n  // remove any copied keys that are in the caseKeysFromHhx\n  if (result.copied) {\n    for (const key in result.copied) {\n      if (caseKeysFromHhx.includes(key)) {\n        delete result.copied[key]\n      }\n    }\n    if (nullIfEmpty(result.copied) === null) {\n      delete result.copied\n    }\n  }\n  delete result.healthyPatient\n  return result\n}\n","// @ts-check\nimport ms from 'milliseconds'\nimport { createCrudProp } from '../utils/crud-prop'\nimport { sortByTimeIfExists } from '../utils/sort-by'\nimport { optionSelectCaseStartOrAppTimeDay } from './events'\n\nconst patientMeasurementProps = createCrudProp({\n  rootKey: 'pm',\n  sortFn: sortByTimeIfExists,\n})\n\n/**\n * @param {ManualMeasurement} initial - The initial properties to apply.\n * @returns {any} - The changes to apply to the case.\n */\nexport const actionAddPatientMeasurement = patientMeasurementProps.actionAdd\n\n/**\n * @param {string} id - The id of the item to remove.\n * @returns {any} - The changes to apply to the case.\n */\nexport const actionRemovePatientMeasurement =\n  patientMeasurementProps.actionRemove\n\n/**\n * @param {string} id - The id of the item\n * @param {Partial<ManualMeasurement>} updates - The updates to apply.\n * @returns {any} - The changes to apply to the case.\n */\nexport const actionUpdatePatientMeasurement =\n  patientMeasurementProps.actionUpdate\n\n/** @type {CaseSelector<ManualMeasurementWithId[]>} */\nexport const selectPatientMeasurements = patientMeasurementProps.select\n\n/**\n * @param {CaseData} caseData\n * @param {{ maxTime: number; minTime: number }} opts\n * @returns {ManualMeasurementWithId[]}\n */\nexport const optionSelectPatientMeasurementsWithinTime = (\n  caseData,\n  { maxTime, minTime }\n) =>\n  selectPatientMeasurements(caseData).filter(\n    ({ time }) => time >= minTime && time <= maxTime\n  )\n\n/**\n * @param {CaseData} caseData\n * @param {{ maxTime: number; minTime: number }} opts\n * @returns {ManualMeasurementWithId | null}\n */\nexport const optionSelectLatestPatientMeasurementWithinTime = (\n  caseData,\n  opts\n) => {\n  const results = optionSelectPatientMeasurementsWithinTime(caseData, opts)\n  // grab the last one\n  return results[results.length - 1] || null\n}\n\n/**\n * Grabs the latest patient measurement up to, but not past, the passed in time.\n * If the useCaseStart option is passed in, it will use the case start time as\n * the max time if it is available.\n *\n * @param {CaseData} caseData\n * @param {{\n *   appTime?: number\n *   maxAgeDays?: number\n *   useCaseStart?: boolean\n * }} [opts]\n * @returns {ManualMeasurementWithId | null}\n */\nexport const optionSelectPatientMeasurementClosestToTime = (\n  caseData,\n  opts = {}\n) => {\n  const time = opts.appTime || Date.now()\n  const maxDays = opts.maxAgeDays || 30\n  const maxTime = opts.useCaseStart\n    ? optionSelectCaseStartOrAppTimeDay(caseData, time)\n    : time\n  const minTime = maxTime - ms.days(maxDays)\n  return optionSelectLatestPatientMeasurementWithinTime(caseData, {\n    maxTime,\n    minTime,\n  })\n}\n","import { createSelector } from './selector-utils'\nimport { createId } from '../utils/id'\n\n/**\n * @param {string} rootKey\n * @param {string} idPrefix\n * @returns {{\n *   actionAddList: (initial: any) => any\n *   actionCheck: (id: string) => any\n *   actionUncheck: (id: string) => any\n *   selectRaw: (caseData: any) => { [id: string]: any }\n *   select: (caseData: any) => ({ id: string } & any)[]\n *   selectLabels: (caseData: any) => string[]\n * }}\n */\nexport const createChecklistHelpers = (rootKey, idPrefix) => {\n  const required = ['label', 'order']\n  /**\n   * @param {string[]} listOfStrings\n   * @returns {any} Updates to apply to case\n   */\n  const actionAddList = listOfStrings => {\n    const updates = {}\n    listOfStrings.forEach((name, index) => {\n      updates[`${rootKey}.${createId(idPrefix)}`] = {\n        label: name,\n        order: index,\n        complete: false,\n      }\n    })\n    return updates\n  }\n\n  /**\n   * @param {string} id\n   * @returns {any} Updates to apply to case\n   */\n  const actionCheck = id => ({\n    [`${rootKey}.${id}.complete`]: true,\n  })\n\n  /**\n   * @param {string} id\n   * @returns {any} Updates to apply to case\n   */\n  const actionUncheck = id => ({\n    [`${rootKey}.${id}.complete`]: false,\n  })\n\n  const empty = {}\n\n  /**\n   * @param {any} caseData\n   * @returns {{\n   *   [id: string]: {\n   *     label: string\n   *     order: number\n   *     complete: boolean\n   *   }\n   * }}\n   */\n  const selectRaw = caseData => caseData[rootKey] || empty\n\n  /**\n   * @param {any} caseData\n   * @returns {Checklist}\n   */\n  const select = createSelector(selectRaw, raw => {\n    const toReturn = []\n    for (const id in raw) {\n      const data = raw[id]\n      // only return if has every prop\n      if (!required.every(prop => data.hasOwnProperty(prop))) {\n        continue\n      }\n      toReturn.push({ id, ...raw[id] })\n    }\n    toReturn.sort((a, b) => a.order - b.order)\n    return toReturn\n  })\n\n  const selectLabels = createSelector(select, arr =>\n    arr.map(item => item.label)\n  )\n\n  return {\n    actionAddList,\n    actionCheck,\n    actionUncheck,\n    selectRaw,\n    select,\n    selectLabels,\n  }\n}\n","import { createChecklistHelpers } from '../utils/checklist-helper'\n\nconst {\n  actionAddList,\n  actionCheck,\n  actionUncheck,\n  selectRaw,\n  select,\n  selectLabels,\n} = createChecklistHelpers('optChecks', 'opt')\n\n/**\n * @param {string[]} listOfStrings\n * @returns {any} Updates to apply to case\n */\nexport const actionAddOptChecks = actionAddList\n\n/**\n * @param {string} id\n * @returns {any} Updates to apply to case\n */\nexport const actionCheckOptCheck = actionCheck\n\n/**\n * @param {string} id\n * @returns {any} Updates to apply to case\n */\nexport const actionUncheckOptCheck = actionUncheck\n\n/**\n * @param {any} caseData\n * @returns {{\n *   [id: string]: {\n *     label: string\n *     order: number\n *     complete: boolean\n *   }\n * }}\n */\nexport const selectOptChecksRaw = selectRaw\n\n/**\n * @param {any} caseData\n * @returns {Checklist}\n */\nexport const selectOptChecks = select\n\n/**\n * @param {any} caseData\n * @returns {string[]}\n */\nexport const selectOptCheckLabels = selectLabels\n","import { createChecklistHelpers } from '../utils/checklist-helper'\n\nconst {\n  actionAddList,\n  actionCheck,\n  actionUncheck,\n  selectRaw,\n  select,\n  selectLabels,\n} = createChecklistHelpers('preOpChecklist', 'precheck')\n\n/**\n * @param {string[]} listOfStrings\n * @returns {any} Updates to apply to case\n */\nexport const actionAddPreOpChecks = actionAddList\n\n/**\n * @param {string} id\n * @returns {any} Updates to apply to case\n */\nexport const actionCheckPreOpCheck = actionCheck\n\n/**\n * @param {string} id\n * @returns {any} Updates to apply to case\n */\nexport const actionUncheckPreOpCheck = actionUncheck\n\n/**\n * @param {any} caseData\n * @returns {{\n *   [id: string]: {\n *     label: string\n *     order: number\n *     complete: boolean\n *   }\n * }}\n */\nexport const selectPreOpChecksRaw = selectRaw\n\n/**\n * @param {any} caseData\n * @returns {Checklist}\n */\nexport const selectPreOpChecks = select\n\n/**\n * @param {any} caseData\n * @returns {string[]}\n */\nexport const selectPreOpCheckLabels = selectLabels\n","// @ts-check\n/** @type {InhalationAgent[]} */\nexport const inhalationAgentsArray = [\n  {\n    id: '7806',\n    name: 'Oxygen',\n    color: '#00B154',\n    unit: 'L/min',\n    step: 0.5,\n    sortOrder: 0,\n    max: 25,\n  },\n  {\n    id: '7486',\n    name: 'Nitrous Oxide',\n    color: '#437AF8',\n    unit: 'L/min',\n    step: 0.5,\n    sortOrder: 1,\n    max: 25,\n  },\n  {\n    id: '36453',\n    name: 'Sevoflurane',\n    color: '#E6C90F',\n    unit: '%',\n    step: 0.1,\n    max: 8,\n    isAA: true,\n    sortOrder: 2,\n  },\n  {\n    id: '27340',\n    name: 'Desflurane',\n    color: '#00A0E1',\n    unit: '%',\n    step: 0.1,\n    max: 18,\n    isAA: true,\n    sortOrder: 3,\n  },\n  {\n    id: '6026',\n    name: 'Isoflurane',\n    color: '#A93F9A',\n    unit: '%',\n    step: 0.1,\n    max: 5,\n    isAA: true,\n    sortOrder: 4,\n  },\n  {\n    id: '411',\n    name: 'Medical Air',\n    color: '#FFDF00,#000',\n    unit: 'L/min',\n    step: 0.5,\n    max: 25,\n    deepGaOnly: true,\n    sortOrder: 5,\n  },\n]\n\n/** @type {Record<string, InhalationAgent & { sortOrder: number }>} */\nexport const inhalationAgentsById = inhalationAgentsArray.reduce(\n  (acc, agent) => {\n    acc[agent.id] = agent\n    return acc\n  },\n  {}\n)\n","import { roundToDecimal } from './decimals'\n\nconst unitOrder = ['g', 'mg', 'mcg']\n\n/**\n * @param {number} amount\n * @param {'g' | 'mg' | 'mcg'} unit\n * @param {number} weightInKg\n * @returns {string}\n */\nexport const getDosePerKg = (amount, unit, weightInKg) => {\n  if (!amount || !unit || !weightInKg) {\n    return ''\n  }\n  let res = amount / weightInKg\n  let unitToUse = unit\n  let precision = 1\n  if (res < 0.1 && unit !== 'mcg') {\n    res = res * 1000\n    // next unit\n    unitToUse = unitOrder[unitOrder.indexOf(unit) + 1]\n  }\n\n  if (res < 10) {\n    precision = 2\n  }\n\n  return `${roundToDecimal(res, precision)}${unitToUse}/kg`\n}\n","// @ts-check\nimport { inhalationAgentsArray } from '../inhalation-agents'\nimport { getDosePerKg } from '../utils/dose-per-kg'\nimport { cleanUpRound, toNumber } from '../utils/numbers'\nimport { replaceObjectRawKeys } from '../utils/object'\nimport { createSelector } from '../utils/selector-utils'\nimport { sortByNameIfExists } from '../utils/sort-by'\nimport { selectCalculateDrugWaste } from './case-props'\nimport {\n  selectInfusionDrugTotals,\n  selectSolutionFluidTotals,\n} from './drug-totals'\nimport {\n  selectFluidDosesAdministeredBySiteId,\n  selectInfusionDosesAdministeredByDrugId,\n  selectInhalationDosesAdministeredByDrugId,\n  selectOralSedativeDosesAdministeredByDrugId,\n  selectParenteralDosesAdministeredByDrugId,\n} from './drugs-administered'\nimport { selectPatientWeightInKg } from './height-weight'\nimport { selectSelectedInfusionDrugs } from './infusion-drug'\nimport { selectIvSites } from './fluids'\nimport {\n  selectLocalDosesAdministered,\n  selectSelectedLocalsById,\n} from './local-drug'\nimport {\n  selectCaseOralSedatives,\n  selectOralSedativeDosage,\n} from './oral-sedative'\nimport { selectCaseParenDrugs, selectParenDrugDosage } from './paren-drug'\nimport { selectSedationLevel } from './sedation-level'\nimport { isNumber } from '../utils/is'\nimport { selectPreProcedureSedativeDosesAdministeredWithDrug } from './pre-proc-sedatives'\n\n/** @type {CaseSelector<InfusionDrugReport[]>} */\nexport const selectInfusionDrugsReport = createSelector(\n  selectSelectedInfusionDrugs,\n  selectInfusionDosesAdministeredByDrugId,\n  selectInfusionDrugTotals,\n  /**\n   * @param {SelectedInfusionDrug[]} drugs\n   * @param {{ [drugId: string]: InfusionDoseAdministered[] }} administeredByDrugId\n   * @param {SingleCaseParenDrugTotalsById} drugTotals\n   */\n  (drugs, administeredByDrugId, drugTotals) => {\n    /** @type {InfusionDrugReport[]} */\n    const toReturn = []\n    for (const drug of drugs) {\n      const { name, id, unit, bolusUnit, pumpKg } = drug\n      // NB: we will only have \"totals\" for confirmed values\n      const totals = drugTotals[id]\n      const administered = administeredByDrugId[id]\n      const boluses = administered\n        ? administered.filter(d => d.route === 'infusionBolus')\n        : []\n      const infusions = administered\n        ? administered.filter(d => d.route === 'infusion')\n        : []\n\n      /** @type {InfusionDrugReport} */\n      const entry = {\n        id,\n        name,\n        total: isNumber(totals && totals.total) ? totals.total : null,\n        wasted: isNumber(totals && totals.wasted) ? totals.wasted : null,\n        pumpKg,\n        unit,\n        bolusUnit,\n        boluses,\n        infusions,\n        // @ts-ignore\n        totalUnit: (totals && totals.unit) || null,\n      }\n\n      toReturn.push(entry)\n    }\n    return toReturn\n  }\n)\n\n/**\n * This one simply filters out drugs that have no infusions or boluses. This is\n * for use on the final record, where as the above can be used to render the\n * infusions graph preview.\n *\n * @type {CaseSelector<InfusionDrugReport[]>}\n */\nexport const selectInfusionDrugsFinalReport = createSelector(\n  selectInfusionDrugsReport,\n  /**\n   * @param {InfusionDrugReport[]} drugs\n   * @returns {InfusionDrugReport[]}\n   */\n  drugs => drugs.filter(drug => drug.infusions.length || drug.boluses.length)\n)\n\n/** @type {CaseSelector<FluidReport[]>} */\nexport const selectFluidsReport = createSelector(\n  selectIvSites,\n  selectFluidDosesAdministeredBySiteId,\n  selectSolutionFluidTotals,\n  /**\n   * @param {IvSite[]} sites\n   * @param {any} dosesBySiteId\n   * @param {FluidTotals} fluidTotals\n   * @returns {FluidReport[]}\n   */\n  (sites, dosesBySiteId, fluidTotals) =>\n    sites.map(site => {\n      const id = site.id\n      /** @type {IvSolution[]} */\n      const solutions = site.solutions\n\n      const doses = dosesBySiteId[id] || []\n      const flowRateDoses = doses.filter(d => d.route === 'fluid')\n      const bolusDoses = doses.filter(d => d.route === 'fluidBolus')\n      const syringeFlushes = doses.filter(d => d.route === 'syringeFlush')\n      const lastDose = flowRateDoses[flowRateDoses.length - 1] || null\n      const lastBolus = bolusDoses[bolusDoses.length - 1] || null\n      const hasNonZeroDose = doses.some(dose => dose.amount)\n      const totals = fluidTotals.bySite[id] || []\n\n      const solutionsWithDoseData = solutions.map(sol => {\n        const filter = d => d.bagId === sol.id\n        const solDoses = doses.filter(filter)\n        const solFlowRateDoses = flowRateDoses.filter(filter)\n        const solBolusDoses = bolusDoses.filter(filter)\n        const lastDose = solFlowRateDoses[solFlowRateDoses.length - 1] || null\n        const lastBolus = solBolusDoses[solBolusDoses.length - 1] || null\n        const solutionHasNonZeroDose = solDoses.some(dose => dose.amount)\n        return {\n          ...sol,\n          doses: solDoses,\n          flowRateDoses: solFlowRateDoses,\n          bolusDoses: solBolusDoses,\n          lastDose,\n          lastBolus,\n          hasNonZeroDose: solutionHasNonZeroDose,\n        }\n      })\n      return {\n        ...site,\n        hasNonZeroDose,\n        doses,\n        syringeFlushes,\n        flowRateDoses,\n        bolusDoses,\n        lastDose,\n        lastBolus,\n        solutions: solutionsWithDoseData,\n        totals,\n      }\n    })\n)\n\n/** @type {CaseSelector<FluidReport[]>} */\nexport const selectFluidsFinalReport = createSelector(\n  selectFluidsReport,\n  /** @param {FluidReport[]} fluids */\n  fluids => fluids.filter(x => x.side && x.name)\n)\n\n/**\n * @remarks\n *   This selector is used to generate the a report of all parenteral drugs based\n *   on drugs selected for the case. It's includes both pre-procedure and during\n *   case doses.\n *\n *   Inclusion is based on whether there is a \"dosage\" for the drug. Which is\n *   analogous to it having been selected for a case.\n * @type {CaseSelector<ParenDrugReport[]>}\n */\nexport const selectParenDrugsReport = createSelector(\n  selectCaseParenDrugs,\n  selectParenteralDosesAdministeredByDrugId,\n  selectParenDrugDosage,\n  selectCalculateDrugWaste,\n  selectPatientWeightInKg,\n  /**\n   * @param {CaseData['parenDrugs']} caseParenDrugs\n   * @param {{ [drugId: string]: ParenDoseAdministered[] }} dosesAdministeredById\n   * @param {{ [drugId: string]: ParenDrugDosageProcessed }} dosageProcessedById\n   * @param {boolean} calculateDrugWaste\n   * @param {number | null} patientWeightInKg\n   * @returns {ParenDrugReport[]}\n   */\n  (\n    caseParenDrugs,\n    dosesAdministeredById,\n    dosageProcessedById,\n    calculateDrugWaste,\n    patientWeightInKg\n  ) => {\n    /** @type {{ [drugId: string]: ParenDrugReport }} */\n    const result = {}\n    for (const drugId in dosageProcessedById) {\n      /** We grab unit here, because it will be consistent for all of these. */\n      const { unit, name } = caseParenDrugs[drugId] || {}\n      const dosesRaw = dosesAdministeredById[drugId] || []\n      /** @type {Omit<ParenDrugReportDose, 'pctOfMax'>[]} */\n      const doses = []\n      let maxDose = 0\n      let total = 0\n      let givenDuringProcedure = 0\n      for (const dose of dosesRaw) {\n        const {\n          amount,\n          amount_raw,\n          time,\n          route,\n          id,\n          isPreProcedure,\n        } = replaceObjectRawKeys(dose)\n        const perKg = getDosePerKg(amount, unit, patientWeightInKg)\n        /** @type {Omit<ParenDrugReportDose, 'pctOfMax'>} */\n        const reportDose = {\n          id,\n          amount,\n          amount_raw,\n          unit,\n          time,\n          route,\n          isPreProcedure,\n        }\n        if (perKg) {\n          reportDose.perKg = perKg\n        }\n        // track max\n        maxDose = Math.max(maxDose, reportDose.amount)\n\n        // track total\n        total += reportDose.amount\n        if (!isPreProcedure) {\n          givenDuringProcedure += reportDose.amount\n        }\n\n        doses.push(reportDose)\n      }\n\n      const dosage = dosageProcessedById[drugId]\n      let wasted = dosage.wasted\n      total = cleanUpRound(total)\n      if (calculateDrugWaste) {\n        wasted = cleanUpRound((dosage.totalDrawn || 0) - total)\n      }\n\n      result[drugId] = {\n        id: drugId,\n        name,\n        unit,\n        total,\n        givenDuringProcedure: cleanUpRound(givenDuringProcedure),\n        maxDose,\n        wasted: toNumber(wasted),\n        doses: doses.map(dose => ({\n          ...dose,\n          pctOfMax: cleanUpRound(maxDose ? dose.amount / maxDose : 0),\n        })),\n      }\n    }\n\n    return Object.values(result).sort(sortByNameIfExists)\n  }\n)\n\n/**\n * This one simply filters out drugs that have no recorded doses or waste.\n *\n * @type {CaseSelector<ParenDrugReport[]>}\n */\nexport const selectParenDrugsFinalReport = createSelector(\n  selectParenDrugsReport,\n  /**\n   * @param {ParenDrugReport[]} drugs\n   * @returns {ParenDrugReport[]}\n   */\n  drugs => drugs.filter(drug => drug.total || drug.wasted)\n)\n\n/**\n * @remarks\n *   This selector is used to generate the a report of all oral sedatives based on\n *   on drugs selected for the case.\n *\n *   Inclusion is based on whether there is a \"dosage\" for the drug. Which is\n *   analogous to it having been selected for a case.\n * @type {CaseSelector<OralSedativeReport[]>}\n */\nexport const selectOralSedativesReport = createSelector(\n  selectCaseOralSedatives,\n  selectOralSedativeDosesAdministeredByDrugId,\n  selectOralSedativeDosage,\n  selectPatientWeightInKg,\n  /**\n   * @param {CaseData['oralSedatives']} caseOralSedatives\n   * @param {{ [drugId: string]: OralDoseAdministered[] }} dosesAdministeredById\n   * @param {{ [drugId: string]: OralDrugDosageProcessed }} dosageProcessedById\n   * @param {number | null} patientWeightInKg\n   * @returns {OralSedativeReport[]}\n   */\n  (\n    caseOralSedatives,\n    dosesAdministeredById,\n    dosageProcessedById,\n    patientWeightInKg\n  ) => {\n    /** @type {{ [drugId: string]: OralSedativeReport }} */\n    const result = {}\n    for (const drugId in dosageProcessedById) {\n      const { unit, name } = caseOralSedatives[drugId] || {}\n      const dosesRaw = dosesAdministeredById[drugId] || []\n      /** @type {Omit<OralSedativeReportDose, 'pctOfMax'>[]} */\n      const doses = []\n      let maxDose = 0\n      let total = 0\n      let givenDuringProcedure = 0\n      for (const dose of dosesRaw) {\n        const {\n          amount,\n          time,\n          route,\n          isPreProcedure,\n          isComplete,\n          id,\n        } = replaceObjectRawKeys(dose)\n        const perKg = getDosePerKg(amount, unit, patientWeightInKg)\n        /** @type {Omit<OralSedativeReportDose, 'pctOfMax'>} */\n        const reportDose = {\n          id,\n          amount,\n          unit,\n          time,\n          route,\n          isPreProcedure,\n          isComplete,\n        }\n        if (perKg) {\n          reportDose.perKg = perKg\n        }\n\n        // only include complete doses\n        // in totals\n        if (isComplete) {\n          // track max\n          maxDose = Math.max(maxDose, reportDose.amount)\n\n          // track total\n          total += reportDose.amount\n          if (!isPreProcedure) {\n            givenDuringProcedure += reportDose.amount\n          }\n        }\n\n        doses.push(reportDose)\n      }\n\n      result[drugId] = {\n        id: drugId,\n        name,\n        unit,\n        total: cleanUpRound(total),\n        maxDose,\n        givenDuringProcedure: cleanUpRound(givenDuringProcedure),\n        doses: doses.map(dose => ({\n          ...dose,\n          pctOfMax:\n            maxDose && dose.isComplete\n              ? cleanUpRound(dose.amount / maxDose)\n              : 0,\n        })),\n      }\n    }\n\n    return Object.values(result).sort(sortByNameIfExists)\n  }\n)\n\n/** @type {CaseSelector<boolean>} */\nexport const selectHasGivenOralSedativesDuringProcedure = createSelector(\n  selectOralSedativesReport,\n  /** @param {OralSedativeReport[]} drug */\n  drug => drug.some(drug => drug.givenDuringProcedure > 0)\n)\n\n/**\n * This one filters out doses that are being edited or are zero amount and\n * recomputes the total.\n *\n * @type {CaseSelector<OralSedativeReport[]>}\n */\nexport const selectOralSedativesFinalReport = createSelector(\n  selectOralSedativesReport,\n  /**\n   * @param {OralSedativeReport[]} drugs\n   * @returns {OralSedativeReport[]}\n   */\n  drugs =>\n    drugs\n      .map(drug => {\n        const { doses, ...rest } = drug\n        let totalOfCompleteDoses = 0\n        let maxDose = 0\n        let givenDuringProcedure = 0\n        const completeDoses = doses.filter(dose => dose.isComplete)\n\n        /** @type {OralSedativeReportDose[]} */\n        const dosesToReturn = []\n\n        for (const dose of completeDoses) {\n          totalOfCompleteDoses += dose.amount\n          maxDose = Math.max(maxDose, dose.amount)\n          if (!dose.isPreProcedure) {\n            givenDuringProcedure += dose.amount\n          }\n        }\n\n        for (const dose of completeDoses) {\n          dosesToReturn.push({\n            ...dose,\n            pctOfMax: cleanUpRound(maxDose ? dose.amount / maxDose : 0),\n          })\n        }\n\n        return {\n          ...rest,\n          total: cleanUpRound(totalOfCompleteDoses),\n          maxDose,\n          givenDuringProcedure: cleanUpRound(givenDuringProcedure),\n          doses: dosesToReturn,\n        }\n      })\n      .filter(drug => drug.total)\n)\n\n/** @type {CaseSelector<InhalationReport[]>} */\nexport const selectInhalationReport = createSelector(\n  selectSedationLevel,\n  selectInhalationDosesAdministeredByDrugId,\n  /**\n   * @param {SedationLevelCased} sedationLevel\n   * @param {{ [drugId: string]: InhalationDoseAdministered[] }} dosesByDrugId\n   * @returns {InhalationReport[]}\n   */\n  (sedationLevel, dosesByDrugId) => {\n    const isDeepOrGA = sedationLevel === 'Deep' || sedationLevel === 'GA'\n    const filtered = isDeepOrGA\n      ? inhalationAgentsArray\n      : inhalationAgentsArray.filter(agent => !agent.isAA && !agent.deepGaOnly)\n\n    return filtered.map(({ id, name, color, unit, step, max, isAA }) => {\n      const records = (dosesByDrugId[id] || []).map(({ id, amount, time }) => ({\n        id,\n        amount,\n        time,\n      }))\n      const hasBeenUsed =\n        !!records.length && records.some(record => record.amount > 0)\n      const lastRecord = records[records.length - 1]\n      const currentDose = (lastRecord && lastRecord.amount) || 0\n\n      return {\n        id,\n        name,\n        step,\n        max,\n        color,\n        unit,\n        isAA: !!isAA,\n        currentDose,\n        hasBeenUsed,\n        records,\n      }\n    })\n  }\n)\n\n/**\n * Only includes the ones that were actually used.\n *\n * @type {CaseSelector<InhalationReport[]>}\n */\nexport const selectInhalationFinalReport = createSelector(\n  selectInhalationReport,\n  /**\n   * @param {InhalationReport[]} drugs\n   * @returns {InhalationReport[]}\n   */\n  drugs => drugs.filter(drug => drug.hasBeenUsed)\n)\n\n/** @type {CaseSelector<boolean>} */\nexport const selectHasGivenInhalationAgents = createSelector(\n  selectInhalationFinalReport,\n  drugs => drugs.length > 0\n)\n\n/** @type {CaseSelector<LocalDoseReportEntry[]>} */\nexport const selectLocalAnestheticsFinalReport = createSelector(\n  selectLocalDosesAdministered,\n  selectSelectedLocalsById,\n  (doses, variantById) =>\n    doses.reduce((result, { id, drugVariantId, time, mg, epiMg }) => {\n      const drugVariant = variantById[drugVariantId]\n      const drugName =\n        drugVariant && (drugVariant.nameWithPct || drugVariant.name)\n      if (drugName) {\n        /** @type {LocalDoseReportEntry} */\n        const entry = {\n          id,\n          drugName,\n          time,\n          mg,\n          epiMg,\n        }\n        result.push(entry)\n      }\n      return result\n    }, [])\n)\n\n/** @type {CaseSelector<PreProcedureSedativeReport[]>} */\nexport const selectPreProcedureSedativeReport = createSelector(\n  selectPreProcedureSedativeDosesAdministeredWithDrug,\n  /** @param {PreProcedureSedativeDoseWithDrug[]} preProcedureDoses */\n  preProcedureDoses => {\n    /** @type {PreProcedureSedativeReport[]} */\n    const result = []\n    for (const dose of preProcedureDoses) {\n      const { id, isComplete, time, amount, route, drug } = dose\n      // we know \"drug\" is there because we explicitly filter out\n      // ones that don't have it in the input selector\n      const { name, unit } = drug\n      if (isComplete) {\n        result.push({\n          id,\n          name,\n          amount,\n          route,\n          unit,\n          time,\n        })\n      }\n    }\n    return result\n  }\n)\n","// @ts-check\n\nimport { getCasePropSelector } from '../utils/case-prop-selector'\nimport { createSelector } from '../utils/selector-utils'\n\n/**\n * @param {{ name: string; memberId: string; time?: number }} param0\n * @returns {any} Changes to mark as ready for review\n */\nexport const actionSetRfr = ({ name, memberId, time }) => ({\n  'rfr.name': name,\n  'rfr.memId': memberId,\n  'rfr.time': time || Date.now(),\n})\n\n/** @returns {any} Changes to clear ready for review */\nexport const actionClearRrf = () => ({\n  rfr: null,\n})\n\nconst selectRfrRaw = getCasePropSelector('rfr', null)\n\n/**\n * @param {CaseData} caseData\n * @returns {{\n *   name: string\n *   memberId: string\n *   time: number\n * } | null}\n */\nexport const selectRfr = createSelector(selectRfrRaw, raw => {\n  if (!raw) return null\n  const { name, memId, time } = raw\n  return name && memId && time ? { name, memberId: memId, time } : null\n})\n\n/**\n * @param {CaseData} caseData\n * @returns {boolean}\n */\nexport const selectIsRfr = createSelector(selectRfr, rfr => !!rfr)\n","// @ts-check\nimport { createCrudProp } from '../utils/crud-prop'\nimport { sortByTimeIfExists } from '../utils/sort-by'\n\nconst sigProp = createCrudProp({\n  rootKey: 'sig',\n  requiredProps: ['name', 'signature', 'time'],\n  sortFn: sortByTimeIfExists,\n})\n\n/**\n * @param {{ name: string; signature: string; time: number }} param0 The signature name\n * @returns {any} The changes to apply to the case.\n */\nexport const actionAddSignature = ({ name, signature, time }) =>\n  sigProp.actionAdd({ name, signature, time })\n\n/**\n * @param {string} id The signature ID\n * @returns {any} The changes to apply to the case.\n */\nexport const actionRemoveSignature = sigProp.actionRemove\n\n/** @type {CaseSelector<CaseSignatureEntry[]>} */\nexport const selectSignatures = sigProp.select\n","import { optionSelectCombinedAutoAndManualCheckpoints } from './manual-vitals'\nimport { optionSelectIndividualVitalTypes } from './vital-type'\n\n/**\n * @param {CaseData} caseData\n * @param {{\n *   maxDuration: number\n *   tempUnit: TempUnit\n *   appTime: number\n *   timeFormatFn?: (time: number) => string\n * }} opts\n * @returns {string[][]}\n */\nexport const optionSelectVitalsDataReference = (\n  caseData,\n  { maxDuration, tempUnit, appTime, timeFormatFn }\n) => {\n  const checkpoints = optionSelectCombinedAutoAndManualCheckpoints(caseData, {\n    appTime,\n    tempUnit,\n    maxDuration,\n  })\n  const vitalTypesById = optionSelectIndividualVitalTypes(caseData, {\n    tempUnit,\n  }).reduce((acc, vt) => {\n    acc[vt.id] = vt\n    return acc\n  }, {})\n\n  const vitalsObj = {}\n  for (const cp of checkpoints) {\n    for (const vital of cp.vitalsInUse) {\n      vitalsObj[vital.id] = true\n    }\n  }\n  const vitalTypes = Object.keys(vitalsObj)\n  const rows = [\n    ['Time', ...vitalTypes.map(type => vitalTypesById[type].chartName)],\n  ]\n\n  for (const cp of checkpoints) {\n    const values = cp.values || {}\n    // We get a placeholder checkpoint before the case\n    // has started that does not have a time\n    // We don't want to try to render this.\n    if (cp.time) {\n      rows.push([\n        timeFormatFn ? timeFormatFn(cp.time) : cp.time,\n        ...vitalTypes.map(type => {\n          const found = values[type]\n          const value = found && found.value != null ? found.value : null\n          return value === 'skipped' ? null : value\n        }),\n      ])\n    }\n  }\n  return rows\n}\n","import { createCrudProp } from '../utils/crud-prop'\nimport { sortByTimeIfExists } from '../utils/sort-by'\n\nconst waveProps = createCrudProp({\n  rootKey: 'waves',\n  idPrefix: 'wv',\n  requiredProps: ['name', 'time', 'type', 'svg'],\n  sortFn: sortByTimeIfExists,\n})\n\n/**\n * @param {WaveformCaptureBase} props The wave properties\n * @returns {any} The changes to apply to the case.\n */\nexport const actionAddWave = props => waveProps.actionAdd(props)\n\n/**\n * @param {string} id The wave ID\n * @returns {any} The changes to apply to the case.\n */\nexport const actionRemoveWave = waveProps.actionRemove\n\n/**\n * @param {string} id The wave ID\n * @param {{ notes: string }} notes The updates to apply to the wave\n * @returns {any} The changes to apply to the case.\n */\nexport const actionUpdateWave = (id, { notes }) =>\n  waveProps.actionUpdate(id, { notes })\n\n/** @returns {WaveformCapture[]} The waveform captures sorted by time */\nexport const selectWaves = waveProps.select\n\n/**\n * @param {any} caseData\n * @returns {{\n *   [id: string]: WaveformCaptureBase\n * }}\n */\nexport const selectWavesRaw = waveProps.selectRaw\n","import { getChanges, simpleObjectDeepEqual } from 'sinks'\nimport { definition } from './definition'\n\nconst ignoredKeys = ['finalReportSignature', 'finalReportSignatureTime']\n\n/**\n * This function is for when we either want to restore from a backup version of a case\n *\n * @param {{\n *   caseDataToChange: CaseData\n *   caseDataToMatch: CaseData\n * }} opts\n * @returns {any} The changes to be made to the case\n */\nexport const getChangesToMatchCase = ({\n  caseDataToChange,\n  caseDataToMatch,\n}) => {\n  const changesToApply = getChanges(caseDataToChange, caseDataToMatch, {\n    includeDeletions: true,\n    ignoredKeys,\n  })\n\n  // this is a sanity check to make sure we are not about to apply changes that will\n  // result in a different caseData than the caseDataToMatch\n  // and that the new case data is valid.\n  const updated = definition.update(caseDataToChange, changesToApply, true)\n  if (!simpleObjectDeepEqual(updated, caseDataToMatch, ignoredKeys)) {\n    throw new Error('applied changes to not match caseDataToMatch')\n  }\n\n  return changesToApply\n}\n","// @ts-check\nimport { roundToDecimal } from './decimals'\nimport { isNumber } from './is'\nimport { cleanUpRound } from './numbers'\nconst CM_TO_IN = 2.54\n\nconst inToCm = inches => cleanUpRound(CM_TO_IN * inches)\nconst cmToIn = cm => cleanUpRound(cm / CM_TO_IN)\n\n/**\n * This is the the function we always want to use when storing a height/length\n * to the case data.\n *\n * If it is given in inches we'll store it as cm with 2 decimal places of\n * precision to ensure that it is stored with enough precision to be converted\n * back to the same one decimal of precision value if we are going back to inches.\n *\n * @param {number} inches\n * @returns {number}\n */\nexport const convertInToCmForStorage = inches =>\n  roundToDecimal(inToCm(inches), 2)\n\n/**\n * @param {number} heightInCm\n * @param {HeightUnit} targetHeightUnit\n * @returns {number | null}\n */\nexport const convertStoredCmForDisplay = (heightInCm, targetHeightUnit) => {\n  if (!isNumber(heightInCm)) {\n    return null\n  }\n  return roundToDecimal(\n    targetHeightUnit === 'in' ? cmToIn(heightInCm) : heightInCm,\n    1\n  )\n}\n","// @ts-check\nimport { roundToDecimal } from './decimals'\nimport { isNumber } from './is'\nimport { cleanUpRound } from './numbers'\nconst KG_TO_LBS = 0.45359237\n\nconst lbsToKg = lbs => cleanUpRound(KG_TO_LBS * lbs)\nconst kgToLbs = kg => cleanUpRound(kg / KG_TO_LBS)\n\n/**\n * This is the the function we always want to use when storing a weight to the case data.\n *\n * If it is given in inches we'll store it as kg with 2 decimal places of\n * precision to ensure that it is stored with enough precision to be converted\n * back to the same one decimal of precision value if we are going back to lbs.\n *\n * @param {number} lbs\n * @returns {number | null}\n */\nexport const convertLbsToKgForStorage = lbs =>\n  isNumber(lbs) ? roundToDecimal(lbsToKg(lbs), 2) : null\n\n/**\n * @param {number} kgs\n * @param {WeightUnit} targetWeightUnit\n * @returns {number | null}\n */\nexport const convertStoredKgForDisplay = (kgs, targetWeightUnit) => {\n  if (!isNumber(kgs)) {\n    return null\n  }\n  return roundToDecimal(targetWeightUnit === 'lb' ? kgToLbs(kgs) : kgs, 1)\n}\n","// @ts-check\n\nconst meansNone = [\n  'n',\n  'no',\n  'non',\n  'none',\n  'nkda',\n  'no known',\n  'no',\n  'n/a',\n  'nka',\n]\n\nconst getNoneFunction = (...otherStrings) => {\n  const stringsThatMeanNone = [...meansNone, ...otherStrings].map(s =>\n    s.toLowerCase()\n  )\n  return str => {\n    if (!str) return false\n    const cleaned = str.trim().toLowerCase()\n    return stringsThatMeanNone.includes(cleaned)\n  }\n}\n\nexport const stringMeansNone = getNoneFunction()\n\nconst isAnesNone = getNoneFunction('No known anesthesia complications')\n\n/** @type {Partial<{ [key in HhxField]: (val: string) => boolean }>} */\nexport const noneStringTestsByField = {\n  allergiesSummary: stringMeansNone,\n  healthHistoryNotes: stringMeansNone,\n  lungAuscultation: getNoneFunction('CTAB'),\n  heartAuscultation: getNoneFunction('RRR w/o murmur', 'RRR'),\n  hospitalizationSummary: stringMeansNone,\n  surgicalHistorySummary: stringMeansNone,\n  anesthesiaHistorySummary: isAnesNone,\n  familyAnesthesiaHistorySummary: isAnesNone,\n}\n\n/**\n * @param {HhxField} fieldName\n * @param {any} value\n * @returns {boolean | null}\n */\nexport const caseFieldStringMeansNone = (fieldName, value) => {\n  const test = noneStringTestsByField[fieldName]\n  if (test) {\n    return test(value)\n  }\n  return null\n}\n","// @ts-check\n\nimport { caseKeysFromHhx } from './case-hhx-utils'\nimport { nullIfEmpty } from './object'\nimport {\n  caseFieldStringMeansNone,\n  noneStringTestsByField,\n} from './string-means-none'\n\n/** @type {HhxField[]} */\nexport const keysWeShouldTakeNewer = [\n  'height',\n  'height_raw',\n  'weight',\n  'weight_raw',\n  'asaClassification',\n\n  // stuff from EMR\n  'healthHistorySummary',\n\n  // all the airway stuff, newer is better if we have both\n  'mallampati',\n  'brodsky',\n  'ulbt',\n  'tmd',\n  'iid',\n]\n\n/** @type {HhxField[]} */\nexport const keysToNeverInclude = [\n  /**\n   * The medical consult notes only appear based on answer to 'medicalConsult'\n   * field so we handle the notes as part of the related field.\n   */\n  'medicalConsultNotes',\n]\n\nconst combineNoneField = (fieldName, newerValue, olderValue) => {\n  const oldIsNone = caseFieldStringMeansNone(fieldName, olderValue)\n  const newIsNone = caseFieldStringMeansNone(fieldName, newerValue)\n  // if both are none, just return the newer one\n  if (oldIsNone && newIsNone) {\n    return newerValue\n  }\n  // if one is none, return the other\n  if (oldIsNone) {\n    return newerValue\n  }\n  if (newIsNone) {\n    return olderValue\n  }\n\n  // If they are identical, just return one\n  if (newerValue === olderValue) {\n    return newerValue\n  }\n\n  // if neither is none, combined them into a single string\n  return `${olderValue}, ${newerValue}`\n}\n\n/**\n * @param {CaseData['systemsReview']} systemsReview\n * @returns {CaseData['systemsReview']}\n */\nconst cleanSystemsReviewObject = systemsReview => {\n  const copy = JSON.parse(JSON.stringify(systemsReview))\n  for (const key in copy) {\n    const entry = copy[key]\n    // make sure it doesn't have any entries if it says it doesn't\n    if (entry.hasEntries === false) {\n      delete entry.entries\n    }\n  }\n  return copy\n}\n\n/**\n * @param {HhxData} newer\n * @param {HhxData} older\n * @returns {Partial<HhxData>}\n */\nexport const mergeHhx = (newer, older) => {\n  /** @type {Partial<HhxData>} */\n  const result = {}\n\n  let handledMeds = false\n  for (const key of caseKeysFromHhx) {\n    // Some fields, such as the finalization fields, we skip entirely.\n    // @ts-ignore\n    if (keysToNeverInclude.includes(key)) {\n      continue\n    }\n\n    /**\n     * For medications we combine the arrays and de-duplicate them if they both\n     * have them. Otherwise we ignore the \"no\" answer and use the one that has them.\n     */\n    if ((key === 'medications' || key === 'medicationsText') && !handledMeds) {\n      handledMeds = true\n      if (newer.medications && older.medications) {\n        const combinedMeds = [...newer.medications]\n        for (const med of older.medications) {\n          const found = newer.medications.find(m => m.id === med.id)\n          if (!found) {\n            combinedMeds.push(med)\n          }\n        }\n        result.medications = combinedMeds\n      } else {\n        const medications = newer.medications || older.medications\n        if (medications) {\n          result.medications = medications\n        }\n      }\n\n      /**\n       * If we don't have a medications array on the result, we should use the\n       * medicationsText field if either has it since it will just say \"none\"\n       */\n      if (\n        !result.medications &&\n        (newer.medicationsText || older.medicationsText)\n      ) {\n        result.medicationsText = newer.medicationsText || older.medicationsText\n      }\n      continue\n    }\n\n    const inOlder = older.hasOwnProperty(key)\n    const inNewer = newer.hasOwnProperty(key)\n\n    // if not in either skip it\n    if (!inOlder && !inNewer) {\n      continue\n    }\n\n    if (key === 'systemsReviewSkipped') {\n      /**\n       * If this one exists, it means it's true but since it hides a bunch of\n       * stuff we only want to set it to true if both are true.\n       */\n      if (inNewer && inOlder) {\n        // if either is true, we take the newer one\n        result.systemsReviewSkipped = true\n        continue\n      }\n    }\n\n    // if a key is only in one keep the one we have\n    if (inOlder && !inNewer) {\n      // @ts-ignore\n      result[key] = older[key]\n      continue\n    }\n    if (inNewer && !inOlder) {\n      // @ts-ignore\n      result[key] = newer[key]\n      continue\n    }\n\n    // NB: We know it is in both at this point!\n\n    /**\n     * For patient measurements when merging we keep all from both as long as\n     * their keys are unique. If they have the same key they're assumed to be\n     * the same measurement since they're assigned a unique id and may have been\n     * copied from one to the other\n     */\n    if (key === 'pm') {\n      /** @type {{ [key: string]: ManualMeasurement }} */\n      const merged = {}\n      for (const id in newer.pm) {\n        merged[id] = newer.pm[id]\n      }\n      for (const id in older.pm) {\n        if (!merged[id]) {\n          merged[id] = older.pm[id]\n        }\n      }\n      result.pm = merged\n    }\n\n    // Some keys we should always take the newer value\n    if (keysWeShouldTakeNewer.includes(key)) {\n      // @ts-ignore\n      result[key] = newer[key]\n      continue\n    }\n\n    /**\n     * Some keys with various \"none\" type string values we have a special way of\n     * combining them to avoid duplicates.\n     */\n    if (noneStringTestsByField[key]) {\n      // @ts-ignore\n      result[key] = combineNoneField(key, newer[key], older[key])\n      continue\n    }\n\n    if (key === 'medicalConsult') {\n      // if either is yes, we take the newer one\n      if (newer.medicalConsult || older.medicalConsult) {\n        result.medicalConsult = true\n        // we do this to ignore the notes field if the question\n        // that makes it appear is false\n        const medConsultNotesFromNewer =\n          newer.medicalConsult && newer.medicalConsultNotes\n        const medConsultNotesFromOlder =\n          older.medicalConsult && older.medicalConsultNotes\n\n        // if both have values and are identical, we just take one\n        if (\n          medConsultNotesFromNewer === medConsultNotesFromOlder &&\n          medConsultNotesFromNewer\n        ) {\n          result.medicalConsultNotes = medConsultNotesFromNewer\n        } else {\n          // in all other cases we combine any notes we may have\n          const combinedNotes = [\n            medConsultNotesFromOlder,\n            medConsultNotesFromNewer,\n          ]\n            .filter(x => x)\n            .join('\\n\\n')\n          if (combinedNotes) {\n            result.medicalConsultNotes = combinedNotes\n          }\n        }\n      } else {\n        /**\n         * At this point we know both are false because we know both have the\n         * field, but we checked above if either is true.\n         *\n         * So it must be false.\n         */\n        result.medicalConsult = false\n      }\n    }\n\n    if (key === 'systemsReview') {\n      const olderSystems = cleanSystemsReviewObject(older.systemsReview || {})\n      const newSystems = cleanSystemsReviewObject(newer.systemsReview || {})\n      const combinedSystems = { ...olderSystems }\n      const keysInNew = Object.keys(newSystems)\n      for (const systemKey of keysInNew) {\n        // if the older one doesn't have this key, just use\n        // the newer one.\n        if (!olderSystems[systemKey]) {\n          combinedSystems[systemKey] = newSystems[systemKey]\n          continue\n        }\n\n        // NB: at this point we know both have this key\n        const olderHasEntries = olderSystems[systemKey].hasEntries\n        const newHasEntries = newSystems[systemKey].hasEntries\n\n        if (!olderHasEntries && !newHasEntries) {\n          // if neither has entries, just use the newer one\n          combinedSystems[systemKey] = newSystems[systemKey]\n          continue\n        }\n\n        if (olderHasEntries && !newHasEntries) {\n          // if the older one has entries and the new one doesn't, keep the older\n          combinedSystems[systemKey] = olderSystems[systemKey]\n          continue\n        }\n\n        if (!olderHasEntries && newHasEntries) {\n          // if the older one doesn't have entries and the new one does, keep the new\n          combinedSystems[systemKey] = newSystems[systemKey]\n          continue\n        }\n\n        // NB: at this point we know both have entries\n        combinedSystems[systemKey] = {\n          hasEntries: true,\n          entries: [\n            ...olderSystems[systemKey].entries,\n            ...newSystems[systemKey].entries,\n          ],\n        }\n      }\n\n      // only set the combined systems if we have any\n      if (nullIfEmpty(combinedSystems)) {\n        result.systemsReview = combinedSystems\n      }\n      continue\n    }\n  }\n\n  return result\n}\n","// @ts-check\n/** @type {Record<PreMedRoute, string>} */\nexport const preMedDrugRoutes = {\n  PO: 'PO',\n  SL: 'SL',\n  IM: 'IM',\n  IN: 'Intranasal',\n  PR: 'Rectal',\n  SC: 'Subcutaneous',\n  TD: 'Transdermal',\n  BUC: 'Buccal',\n  OR: 'Oral Rinse',\n  INH: 'Inhalation',\n  TOP: 'Topical',\n  OPH: 'Ophthalmic',\n}\n\n/** @type {PreMedRoute[]} */\n// @ts-ignore\nexport const preMedDrugRouteIds = Object.keys(preMedDrugRoutes)\n"],"names":["currentVersion","migrationFunctions","caseData","vitalsCheckpoints","vitalRecords","autoVitalRecords","events","vitalsInterval","customEvents","caseStart","intervalInMilliseconds","getCheckpointTimeForInt","int","getIntFromName","name","Number","split","getNewCheckpointName","keysWithCheckpoints","changes","key","cpName","value","checkpointInt","time","newName","complete","id","event","checkpointId","isValidWaveformSVG","svg","toLowerCase","startsWith","endsWith","test","cleanedSvg","replace","trim","length","_extends","basicTypes","fhirDate","isFhirDate","drugRoute","matches","sedationDepth","parenDrugRoute","oralSedativeRoute","infusionRoute","localDoseUnit","drugUnit","airwayType","waveSvg","caseDataDefinitionBare","version","appliedPreset","caseId","sedationProviderName","surgeonName","recorderName","office","procedure","procedureDate","reasonForSedation","responsibleCompanion","responsibleCompanionSignature","sedationLevel","present","oralSedativesEnabled","ivEnabled","airwayEnabled","userRole","calculateDrugWaste","vitalsTrackingEnabled","firstName","lastName","nickname","birthDate","height","height_raw","weight","weight_raw","allergiesSummary","anesthesiaHistorySummary","familyAnesthesiaHistorySummary","surgicalHistorySummary","hospitalizationSummary","pregnant","pregnancyDetail","breastfeeding","breastfeedingInstructionsGiven","lastFood","lastDrink","healthHistoryId","healthHistoryReviewedTime","healthHistorySummary","healthHistoryNotes","medicalConsult","medicalConsultNotes","medicationsText","medications","lungAuscultation","heartAuscultation","preProcedureRiskAssessment","weightDistribution","mallampati","asaClassification","brodsky","ulbt","tmd","iid","connectedMonitorType","lastKnowActiveBPCuffTime","lastKnownActiveBPCuffTime","preMedsUsed","parenDrugs","oralSedatives","localAnesthetics","infusionDrugs","startedOnRoomAir","systemsReviewSkipped","monitorPlacementComplete","dischargeScoreReviewed","timelineReviewed","finalReportSignature","finalReportSignatureTime","finalReportSignerName","airways","posSkipped","procedureNotes","procedureNotesSignature","otherLocalAnesthetics","ebl","recoveryNotes","recoveryNotesSignature","recoveryNotesSignatureTime","finalRoomAirSpO2","dischargeScoreType","tourModeEnabled","tourModeMeta","separatePreOpPage","definition","buildDefinition","types","nullIfEmpty","item","Object","keys","getRelevantMigrations","caseDataVersion","migrations","targetVersion","map","filter","migrationKeyAsNumber","caseVersion","sort","keyAsNumber","toString","getMigrationChanges","relevantFns","interimCaseData","cumulativeChanges","fn","updateObject","assign","migrateToLatest","caseObject","copy","JSON","parse","stringify","migrationUpdates","update","toNumber","input","num","isNaN","cleanUpRound","decimals","toFixed","getAverage","arr","total","reduce","replaceObjectRawKeys","obj","extraValues","trimStrings","val","Array","isArray","removeKeysWithNullishValues","includeEmptyString","result","isNullish","removeKeysWithEmptyValues","shallowEqual","obj1","obj2","keys1","keys2","pluck","toReturn","hasOwnProperty","defaultEqualityCheck","a","b","areArgumentsShallowlyEqual","equalityCheck","prev","next","i","defaultMemoize","func","optionalEqCheck","lastArgs","lastResult","arguments","apply","getDependencies","funcs","dependencies","every","dep","Error","createSelectorCreator","memoize","len","memoizeOptions","len2","key2","resultFunc","pop","memoizedResultFunc","undefined","concat","selector","params","push","createSelector","arraySum","res","entry","arrayAverage","shallowEqualMemoize","actionUpdateSedationLevel","depth","local","minimal","moderate","deep","ga","selectSedationLevel","selectSedativesBeingUsed","level","selectHasRecoveryPhase","actionApplySedationLevel","timePlaced","maskType","peep","placementComp","placementCompDetail","notes","timeRemoved","removalNotes","size","stylet","preOx","cuffed","inflated","scopeType","scope","bladeSize","viewGrade","securedWith","magill","eyeProtection","confirmation","cavityClear","preRemovalSpo2","deflated","postRemovalSpo2","removalComp","removalCompDetail","sealQuality","maskHolder","connectedTo","lube","vaso","preWarmed","side","airwayTypeLookup","cpap","hideIfNoSedativesUsed","fieldMap","et","fm","lma","mad","basic","nc","nh","nt","ntt","opa","other","getFieldLabelMapForAirwayType","type","nanoid","customAlphabet","createId","baseName","idLength","createCrudProp","rootKey","idPrefix","requiredProps","sortFn","mapFn","actionAdd","initial","preGeneratedId","actionUpdate","actionRemove","updates","empty","selectRaw","select","raw","data","prop","selectById","items","acc","awProps","airway","_airwayTypeLookup$air","rest","_objectWithoutPropertiesLoose","_excluded","airwayTypeName","timeA","timeB","actionAddAirway","otherProps","actionRemoveAirway","actionUpdateAirway","selectAirways","selectAirwaysById","selectAirwayEvents","placedAirways","note","derived","showInEventReport","selectAirwayTimesByEventId","selectAirwayReport","_excluded2","def","labelMapForType","label","entries","valueType","determineTargetUnit","args","includes","unitMultiple","g","mg","mcg","toTargetUnit","currentUnit","targetUnit","currentUnitMultiple","targetUnitMultiple","diff","multiple","Math","pow","abs","addDiffUnits","amount1","firstUnit","amount2","secondUnit","finalUnit","amount","unit","getCasePropSelector","fallback","selectCalculateDrugWaste","vitalsTrackingEnabledRaw","selectVitalsTrackingEnabled","selectAirwayEnabled","selectIVEnabled","sortByTimeIfExists","aTime","bTime","getSortByStringPropertyIfExists","propertyName","propA","propB","propAIsString","propBIsString","localeCompare","sortByNameIfExists","roundToDecimal","number","precision","factor","round","toAnesthesiaUnits","mins","rawEvents","getEventSelector","getDurationMinutes","start","end","floor","createDurationMinutesSelector","startEvent","endEvent","getEventPropSelector","propName","selectCaseStartTime","selectSurgeryStartTime","selectSurgeryEndTime","selectRecoveryStartTime","selectVitalsEndTime","selectCaseEndTime","surgeryStart","surgeryEnd","caseEnd","vitalsEnd","sedativesBeingUsed","max","selectCaseInRecovery","hasRecoveryPhase","recoveryStart","selectCaseComplete","Boolean","selectCaseInProgress","caseStartTime","caseEndTime","recoveryStartTime","selectCaseWasStarted","selectIvStarted","ivStart","selectRecoveryWasStarted","selectCaseStatus","inRecovery","inProgress","ivStarted","caseWasStarted","selectAnesthesiaMinutes","eventSelectors","selectEventTimesRaw","selectAnesthesiaStartTime","selectAnesthesiaEndTime","selectAnesthesiaUnits","selectSurgeryMinutes","selectMonitoringMinutes","selectRecoveryMinutes","selectCompleteCaseMinutes","optionSelectCaseStartOrAppTimeDay","appTimeDay","actionUpdateEventTimes","drugsAdminProp","actionAddLocalDose","drugVariantId","amount_raw","epiConcentration","route","Date","now","shouldStartCase","actionAddParenteralDose","drugId","doseId","actionAddOralSedativeDose","editing","actionAddInhalationDose","actionAddInfusionDose","actionAddFluidDose","solutionType","siteId","bagId","actionAddSyringeFlush","actionRemoveDose","actionUpdateDose","selectAllDosesAdministered","selectAllDosesAdministeredRaw","getFilteredDoseSelector","filterFn","doses","getByIdSelector","baseSelector","dose","selectLocalDosesAdministeredRaw","selectLocalDosesAdministeredRawById","addMeta","isPreProcedure","isComplete","selectParenteralDosesAdministered","selectParenteralDosesAdministeredByDrugId","selectOralSedativeDosesAdministered","selectOralSedativeDosesAdministeredByDrugId","selectInhalationDosesAdministered","selectInhalationDosesAdministeredByDrugId","selectInfusionDosesAdministered","selectInfusionDosesAdministeredByDrugId","selectFluidDosesAdministered","selectSyringeFlushesBySiteId","selectHasFluidDoseDetail","some","selectFluidDosesAdministeredBySiteId","selectPreProcedureSedativeDosesAdministered","createDoseProp","drugInfoProp","dosePath","path","actionSelect","drugProps","actionUnselect","actionUpdateDosage","selectDosageRaw","drugDosage","selectDosage","selectDrugInfoRaw","selectSelectedDrugs","dosageRaw","drugInfoRaw","info","selectSelectedDrugsById","dosage","selectPatientWeightInKg","selectPatientHeightInCm","selectBmi","heightInMeters","actionSelectInfusionDrug","actionUnselectInfusionDrug","actionUpdateInfusionDosage","actionConfirmInfusionTotals","totalUnit","wasteConfirmed","actionUpdateInfusionDrugUnit","actionUpdateInfusionDrugBolusUnit","bolusUnit","actionUpdateInfusionDrugAmount","amountRaw","actionPresetInfusionDrug","selectCaseInfusionDrugs","selectInfusionDrugDosage","baseInfusionBolusUnits","infusionBolusUnits","selectSelectedInfusionDrugs","drugs","patientWeightInKg","drug","unitNeedsKg","bolusUnitOptions","pumpKg","kg","selectSelectedInfusionDrugsById","selectInfusionDrugsForMacro","selectedDrugs","administeredByDrugId","administered","firstDose","isString","isNumber","actionSelectOralSedative","actionUnselectOralSedative","actionUpdateOralSedativeDosage","actionUpdateOralSedativeRoute","actionUpdateOralSedativeAmount","actionPresetOralSedative","preProcedure","selectCaseOralSedatives","selectOralSedativeDosage","selectSelectedOralSedatives","selectSelectedOralSedativesById","selectOralSedativesForMacro","shouldStart","actionSelectParenDrug","actionUnselectParenDrug","actionUpdateParenDrugDosage","actionUpdateParenDrugTempDraw","drawAmountTemp_raw","actionUpdateParenDrugTempAmount","actionUpdateParenDrugRoute","actionPresetParenDrug","draw","selectCaseParenDrugs","selectParenDrugDosage","selectSelectedParenDrugs","selectSelectedParenDrugsById","selectParenDrugsForMacro","IvSolutionTypes","actionUpdateFirstIvSite","actionAddIvSite","actionUpdateIvSite","pmtId","base","typedKey","actionRemoveIvSite","actionAddIvSolution","timeOverride","actionUpdateIvSolution","actionRemoveIvSolution","specialTimeSort","selectIvSiteArrayRaw","ivLocations","deprecatedIvStart","deprecatedIvEnd","ivEnd","siteRequiredProps","placementIsComplete","site","solutions","emptyArray","selectIvSites","enabled","sites","processed","siteRaw","index","addedProps","duration","solutionsRaw","sortedSolutions","count","sol","bagNumber","active","siteNumber","placementComplete","selectLatestIvRemovedTime","latest","selectEarliestIvPlacedTime","earliest","Infinity","selectActiveIvSites","selectUsingDetailedFluids","hasDetail","selectFirstIvSolution","locations","first","selectIvAccessData","attempts","needleGauge","firstSolution","firstSolutionType","location","selectHasAnyIvAccessValues","getDescription","isRemoval","hasMultipleSites","x","join","selectFluidEvents","ivSites","filtered","solution","slice","selectFluidTimesByEventId","totals","expectedRoutes","byRoute","maxDose","createArrayVersion","asArray","caseCount","createUsedVersion","wasted","parenRoutes","selectParenDrugTotalsNoInfusion","dosesByDrugId","dosageById","allDoses","preProcedureTotal","forEach","loopReturn","totalDrawn","expended","selectUsedParenDrugTotalsNoInfusion","selectInfusionDrugTotals","used","finalWasted","finalTotal","selectUsedInfusionDrugTotals","selectParenDrugTotals","parenTotals","infusionTotals","paren","infusion","IV","IM","IN","selectUsedParenDrugTotals","oralRoutes","selectOralSedativeTotals","oralDoses","selectUsedOralSedativeTotals","selectOralSedativeTotalsAsArray","selectUsedOralSedativeTotalsAsArray","selectParenDrugTotalsAsArray","selectUsedParenDrugTotalsAsArray","selectSolutionFluidTotals","usingDetailedFluids","syringeFlushesBySiteId","interim","overall","bySite","addTotal","targetObj","siteTotals","syringeFlushes","amountConfirmed","flush","siteKey","selectSolutionFluidTotalsAsArray","selectEventsForCaseSummary","earliestIv","latestIvRemoved","selectCaseSummary","parenDrugsUsed","oralSedativesUsed","anesthesiaMinutes","surgeryMinutes","recoveryMinutes","completeCaseMinutes","monitoringMinutes","propsToKeep","removePropsNotNeededForAnalytics","timeKeys","getTimeAverages","averagesData","averages","ensureDrugsHaveName","list","getProcessedCaseList","_ref","err","compositionId","appointmentId","message","getOralDrugAnalysis","totalCaseCount","addEntry","totalResultForCase","existing","PO","SL","startingUnit","updatedTotal","updatedUnit","percentOfCases","drugEntry","getParenDrugAnalysis","updatedWaste","getCaseAnalytics","cases","timeAverages","oralDrugs","isRequiredCheckpoint","baseInterval","cpTime","vitalsDuration","elapsed","getVitalTypesById","opts","bp","chartName","includeInComparison","includeInAuto","sbp","startValue","min","subItem","includeInManual","dbp","hr","spo2","table","ecg","fillFromPrevious","rr","temp","tempUnit","step","fico2","etco2","fio2","eto2","fin2o","etn2o","sedLev","ventStatus","ventMode","fisev","etsev","fides","etdes","fiiso","etiso","mac","pip","tv","RSS","GCS","ESS","vitalIdSortOrderLookup","getVitalTypesBaseArray","getUserSelectableVitalTypes","vital","getManualVitalTypes","getVitalsNameAndUnitLookup","vitals","vitalKeyTypesForComparison","vitalsShortNameLookup","actionIgnoreVitalType","actionUnIgnoreVitalType","actionSelectVitalType","actionUnselectVitalType","actionResumeVitalType","actionClearReceivedVitalType","actionHasReceivedVitalType","selectTrackedVitalTypesRaw","trackedVitalTypes","getVitalSelector","condition","vitalTypes","selectAutoVitalsTypesReceived","hasReceivedAutoValue","selectVitalsTypesSelectedNotAuto","selected","determineStatus","hasAutoData","hasManualData","ignored","wasUnselected","isPlaced","status","selectVitalTypesWithManualValues","cpId","typeId","selectVitalsTypesWithStatus","autoVitalsTypesReceived","typesWithManualValues","allIds","Set","has","from","found","selectAutoVitalsTypeIdsToReport","selectIgnoredVitalTypes","selectVitalTypesForMacro","optionSelectUserSelectableVitalTypes","vitalsTypesWithStatus","monitorTypes","monitorType","placed","optionSelectIndividualVitalTypes","bpStatus","isBpSubItem","guessBodyTempUnits","convertCelsiusToFahrenheit","celsius","convertFahrenheitToCelsius","fahrenheit","coerceToCelsiusForStorage","unknownValueType","displayTemperature","valueFromCaseData","wasStoredInFahrenheit","actionRecordVitalValue","vitalId","actionRecordVitalValues","values","actionSkipVitalValue","actionRecordAutoVitalValue","vitalData","toSave","actionRecordAutoVitalValues","selectVitalRecordsRaw","selectAutoVitalRecordsRaw","selectVitalRecords","records","selectVitalAutoRecords","addVital","vitalType","vitalsSelectors","selectEstimatedBreathsBeats","autoRecords","minutes","byCheckpoint","breaths","heartbeats","avgRR","avgHR","optionSelectVitalRecords","optionSelectVitalAutoRecords","coerced","valid","actionUpdateVitalsInterval","interval","selectVitalsInterval","selectBaseVitalsInterval","root","actionAddVitalsCheckpoint","cp","actionUpdateCheckpointComplete","selectVitalsCheckpointsRaw","selectVitalsCheckpointsRawArray","optionSelectVitalsDurationNoFuture","appTime","maxDuration","vitalsEndTime","timeToUseAsEnd","optionSelectNumberOfRequiredCheckpoints","optionSelectVitalsCheckpointsRawArrayNoFuture","optionSelectRequiredCheckpointTimes","intervalMinutes","numberOfCheckpoints","numberToCreate","optionSelectVitalsCheckpoints","activeCheckpointId","checkpointsBaseArray","individualVitalTypes","previousValues","defaultCheckpoints","extra","checkpoints","isFirst","isLast","autoRecordsForCheckpoint","vitalsInUse","hasAllRelevantValues","isBlank","recordedValue","previousValue","autoRecordForVital","valueSource","connectionId","autoValue","autoValueTime","sbpValueObj","dbpValueObj","sbpValue","dbpValue","hasBpValues","startValueForVital","hasValue","isSkipped","finalCheckpointObject","hasAnySelectedVitals","eventProps","actionAddCustomEvent","actionUpdateCustomEvent","actionRemoveCustomEvent","selectCustomEventsAsArray","checkpointsRaw","timeToUse","correspondingCheckpoint","selectCustomEventTimesByEventId","mvProps","actionAddManualVital","actionRemoveManualVital","actionUpdateManualVital","selectManualVitals","optionSelectAllManualVitalsCheckpoints","manualVitals","mv","optionSelectCombinedAutoAndManualCheckpoints","optionSelectCombinedAutoAndManualCheckpointsWithinCaseTime","toDateString","optionSelectManualVitalsCheckpointsOnCaseDay","caseDayString","manualVitalToEventNote","strParts","selectManualVitalsEvents","static","canSet","posProps","actionAddPosition","actionRemovePosition","actionUpdatePosition","actionSkipPositions","selectPositionsSkipped","selectPositions","skipped","selectPositionsComplete","positions","selectPositionEvents","positionEntry","selectPositionTimesByEventId","selectBaseEvents","positionsSkipped","positionEvents","airwayEvents","fluidEvents","required","maxTimeName","minTimeName","preReq","selectBaseEventsProcessed","baseEvents","eventTimesRaw","positionTimesByEventId","airwayTimesByEventId","fluidTimes","times","eventsWithTimes","isRequired","selectAllEventsArray","customEventsArray","baseEventsArray","manualVitalEvents","selectFinalEventsReport","ALDRETE_FIELDS","options","PADS_FIELDS","isBoolean","BASIC_VITALS_IDS","extractNumericValues","checkpoint","keysToInclude","aggregator","getNumericVitalsFn","last","reverse","l","optionSelectFirstInCaseVitalsRaw","optionSelectLastInCaseVitalsRaw","optionSelectPreOpInitialManualVital","aldreteVitalsKeys","padsVitalsKeys","selectDischargeScoreType","selectVitalTypeKeysForDischargeScore","selectDischargeScoreEntries","actionSetDischargeScoreEntry","field","score","selectDischargeScoreFields","foundEntry","selectedOption","find","option","getOrderedNumericVitalsFn","optionSelectFirstInCaseVitalsToCompare","optionSelectLastInCaseVitalsToCompare","optionSelectVitalsForDischargeComparison","nameLookup","endValue","percentageDelta","optionSelectStartEndBasicVitals","optionSelectDischargeVitalsScoreData","forComparison","maxDelta","vitalsScore","vitalsComparison","severityMap","getPadsSummaryValues","fields","fieldsByName","steadyGait","oriented","voided","poFluids","surgicalBleeding","painNauseaVomiting","mentalStatus","intake","getAldreteSummaryValues","optionSelectDischargeScoreSummary","nonVitalsComplete","totalWithoutVitals","targetScore","totalScore","vitalValue","getDrugSort","alwaysTop","aInTop","bInTop","favorite","drugSort","mostCommonOralDrugs","Triazolam","Diazepam","Clonidine","oralsDrugSort","fillInDefaults","overrides","availableRoutes","common","allPreProcedureSedRoutes","preProcedureSedativesRaw","preProcedureSedatives","toObject","preProcedureSedativesById","oralSedativesById","selectPreProcedureSedativeDosesAdministeredWithDrug","caseParenDrugs","caseOralSedatives","preProcedureSedativeDoses","matchedDrug","selectHealthQuestionsSummary","selectMedicalConsultNotes","selectPatientMedicationSummary","airwayAssessmentLabelMap","airwayKeys","airwayLabels","selectAirwayAssessmentReport","actionUpdateInhalationDosage","actionClearInhalationDosage","selectInhalationDosage","localAnestheticsBase","percent","halfLife","ms","variants","epi","color","manAbsoluteMax","manRatioMax","aapdAbsoluteMax","aapdRatioMax","countries","minAge","enableDilute","ageWarning","hours","nameForChart","rxcui","subName","unitForChart","altName","reminder","noEpiWarning","skipForToxicity","getLocalAnestheticVariantsForCountry","country","variant","variantRest","localAnestheticLookupById","mlToMg","ml","percentage","mgToMl","mlToCart","cartToMl","cart","convertLa","cartridges","drugPercent","diluteLocalsRatio","strength","addCommas","string","reversed","mod","formatEpi","actionAddLocalDilutionRaw","actionRemoveLocalDilutionRaw","selectLocalDilutionsById","selectLocalDilutionsByBaseDrugId","byId","dilution","variantId","extractRxcui","splitId","actionSelectLocalDrug","actionUnselectLocalDrug","actionUpdateLocalDosage","actionUpdateLocalUnit","actionUpdateLocalAmount","actionAddLocalDilution","percentStrength","actionRemoveLocalDilution","customVariantId","actionPresetLocalDrug","getSubName","selectLocalDrugVariantsFullList","dosesById","dilutionsByBaseDrugId","baseList","addVariant","dilutions","customVariant","custom","epiMg","epiMgPerMl","totalMgGiven","totalCartridgesGiven","totalEpiMgGiven","nameWithPct","inUse","selectLocalDrugVariantsFullListById","selectSelectedLocals","selectSelectedLocalsById","selectLocalDosesAdministered","selectHasUsedNonToxicLocal","selectHasTrackedLocalAnesthetics","selectLocalsForMacro","locals","preMedProp","actionPreMedsUsed","actionAddPreMed","props","actionRemovePreMed","actionUpdatePreMed","selectPreMeds","selectPreMedsRaw","selectPreMedsUsed","selectHasAnsweredPreMed","answer","selectPreMedsForMacro","preMeds","preMed","drugName","systemsReviewCategoryMap","general","cardiac","pulmonary","hepatic","renal","hematologic","endocrine","oncology","cns","muscular","gastro","psychiatric","gyn","developmental","habits","selectSystemsReviewRaw","systemsReview","selectIsHealthy","system","hasEntries","actionSetSystemCategoryToNo","category","actionUpdateSystemsReviewDetail","detailIndex","actionEditSystemQuestion","isEditing","actionRemoveSystemQuestions","isLastEntry","actionAddSystemQuestions","allSystemCategories","actionSetAllSystemCategoriesToNo","selectSystemsReviewItemsByCategory","selectSystemsReviewProcessed","details","questionObject","keyOrIndex","detail","valueDescription","formatSystemReviewValues","selectSystemsReviewSummariesByCategory","hasAnyValues","issues","summaries","issueValuesByName","toPush","selectSystemsReviewSummary","systemsReviewSummariesByCategory","isHealthy","buff","cat","catEntries","summary","hhxKeyLookup","pm","caseKeysFromHhx","hhxKeysWhenDoingHhxElsewhere","hhxKeysWhenDoingHhxInXchart","selectAnyHhxDataOrNull","selectRelevantHhxData","hhxData","elsewhere","keysToUse","selectExtraHhxDataOrNull","allHhx","relevantHhx","selectContainsAnyHhxData","mergeCaseAndHhx","relevantHhxData","saveableItems","createMacroFromCase","aw","pos","copied","healthyPatient","localDrugs","awDetails","ivAccess","iv","isObject","actionGetUpdatesForMacro","macro","combineObject","mergeArraysByProp","mergeTwoMacros","mergeMacros","macros","removeHhxItemsFromMacro","patientMeasurementProps","actionAddPatientMeasurement","actionRemovePatientMeasurement","actionUpdatePatientMeasurement","selectPatientMeasurements","optionSelectPatientMeasurementsWithinTime","maxTime","minTime","optionSelectLatestPatientMeasurementWithinTime","results","optionSelectPatientMeasurementClosestToTime","maxDays","maxAgeDays","useCaseStart","days","createChecklistHelpers","actionAddList","listOfStrings","order","actionCheck","actionUncheck","selectLabels","actionAddOptChecks","actionCheckOptCheck","actionUncheckOptCheck","selectOptChecksRaw","selectOptChecks","selectOptCheckLabels","actionAddPreOpChecks","actionCheckPreOpCheck","actionUncheckPreOpCheck","selectPreOpChecksRaw","selectPreOpChecks","selectPreOpCheckLabels","inhalationAgentsArray","sortOrder","isAA","deepGaOnly","inhalationAgentsById","agent","unitOrder","getDosePerKg","weightInKg","unitToUse","indexOf","selectInfusionDrugsReport","drugTotals","boluses","d","infusions","selectInfusionDrugsFinalReport","selectFluidsReport","dosesBySiteId","fluidTotals","flowRateDoses","bolusDoses","lastDose","lastBolus","hasNonZeroDose","solutionsWithDoseData","solDoses","solFlowRateDoses","solBolusDoses","solutionHasNonZeroDose","selectFluidsFinalReport","fluids","selectParenDrugsReport","dosesAdministeredById","dosageProcessedById","dosesRaw","givenDuringProcedure","perKg","reportDose","pctOfMax","selectParenDrugsFinalReport","selectOralSedativesReport","selectHasGivenOralSedativesDuringProcedure","selectOralSedativesFinalReport","totalOfCompleteDoses","completeDoses","dosesToReturn","selectInhalationReport","isDeepOrGA","hasBeenUsed","record","lastRecord","currentDose","selectInhalationFinalReport","selectHasGivenInhalationAgents","selectLocalAnestheticsFinalReport","variantById","drugVariant","selectPreProcedureSedativeReport","preProcedureDoses","actionSetRfr","memberId","actionClearRrf","rfr","selectRfrRaw","selectRfr","memId","selectIsRfr","sigProp","actionAddSignature","signature","actionRemoveSignature","selectSignatures","optionSelectVitalsDataReference","timeFormatFn","vitalTypesById","vt","vitalsObj","rows","waveProps","actionAddWave","actionRemoveWave","actionUpdateWave","selectWaves","selectWavesRaw","ignoredKeys","getChangesToMatchCase","caseDataToChange","caseDataToMatch","changesToApply","getChanges","includeDeletions","updated","simpleObjectDeepEqual","CM_TO_IN","inToCm","inches","cmToIn","cm","convertInToCmForStorage","convertStoredCmForDisplay","heightInCm","targetHeightUnit","KG_TO_LBS","lbsToKg","lbs","kgToLbs","convertLbsToKgForStorage","convertStoredKgForDisplay","kgs","targetWeightUnit","meansNone","getNoneFunction","otherStrings","stringsThatMeanNone","s","str","cleaned","stringMeansNone","isAnesNone","noneStringTestsByField","caseFieldStringMeansNone","fieldName","keysWeShouldTakeNewer","keysToNeverInclude","combineNoneField","newerValue","olderValue","oldIsNone","newIsNone","cleanSystemsReviewObject","mergeHhx","newer","older","handledMeds","combinedMeds","med","m","inOlder","inNewer","merged","medConsultNotesFromNewer","medConsultNotesFromOlder","combinedNotes","olderSystems","newSystems","combinedSystems","keysInNew","systemKey","olderHasEntries","newHasEntries","preMedDrugRoutes","PR","SC","TD","BUC","OR","INH","TOP","OPH","preMedDrugRouteIds"],"mappings":"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"}