@Test public void testExtractWarningsSearchDtos() { final DateTime start = DataValueUtils.getDateTime(DataValueUtils.getDateTime(new DateTime(2013, 3, 25, 12, 0, DateTimeZone.UTC))); final Map<Long, MedicationHolderDto> medicationHolderMap = new HashMap<>(); final MedicationHolderDto medicationDto1 = new MedicationHolderDto(); medicationDto1.setId(1L); medicationDto1.setName("Lekadol 20x500mg"); medicationHolderMap.put(1L, medicationDto1); final MedicationHolderDto medicationDto2 = new MedicationHolderDto(); medicationDto2.setId(2L); medicationDto2.setName("Primotren 20x500mg"); medicationHolderMap.put(2L, medicationDto2); final MedicationsValueHolder medicationsValueHolder = mock(MedicationsValueHolder.class); when(medicationsValueHolder.getValue()).thenReturn(medicationHolderMap); medicationsBo.setMedicationsValueHolder(medicationsValueHolder); final MedicationOrderComposition composition1 = MedicationsTestUtils.buildTestMedicationOrderComposition("uid1::1", null, null); final MedicationInstructionInstruction instruction1 = MedicationsTestUtils.buildTestMedicationInstruction("MedicationInstructionInstruction 1"); final MedicationTimingCluster medicationTimingCluster = MedicationsTestUtils.buildMedicationTimingCluster(4L, null, null, null, start, null, null); final OrderActivity orderActivity1 = MedicationsTestUtils.buildTestOrderActivity( "Lekadol", 1L, 500.0, "mg", null, null, null, null, 1L, "ORAL", "1", "TBL"); instruction1.getOrder().add(orderActivity1); orderActivity1.setMedicationTiming(medicationTimingCluster); composition1.getMedicationDetail().getMedicationInstruction().add(instruction1); final List<MedicationOrderComposition> medicationInstructionsList1 = new ArrayList<>(); medicationInstructionsList1.add(composition1); final List<MedicationForWarningsSearchDto> warningsSearchDtosList1 = medicationsBo.extractWarningsSearchDtos( medicationInstructionsList1); assertEquals((Double)500.0, warningsSearchDtosList1.get(0).getDoseAmount()); assertEquals("mg", warningsSearchDtosList1.get(0).getDoseUnit()); assertEquals("1", warningsSearchDtosList1.get(0).getRouteCode()); final MedicationOrderComposition composition2 = MedicationsTestUtils.buildTestMedicationOrderComposition("uid1::1", null, null); final MedicationInstructionInstruction instruction2 = MedicationsTestUtils.buildTestMedicationInstruction("MedicationInstructionInstruction 1"); final IngredientCluster ingredient = MedicationsTestUtils.buildTestActiveIngredient("Primotren", "0002", null, null, 10.0, "mg", 3.0, "mL"); final OrderActivity orderActivity2 = MedicationsTestUtils.buildTestOrderActivity(null, null, null, null, null, null, null, null, 1L, "ORAL", "1", "TBL"); instruction2.getOrder().add(orderActivity2); final IngredientsAndFormCluster ingredientsAndForm = new IngredientsAndFormCluster(); orderActivity2.setIngredientsAndForm(ingredientsAndForm); ingredientsAndForm.getIngredient().add(ingredient); orderActivity2.setMedicationTiming(medicationTimingCluster); composition2.getMedicationDetail().getMedicationInstruction().add(instruction2); final List<MedicationOrderComposition> medicationInstructionsList2 = new ArrayList<>(); medicationInstructionsList2.add(composition2); final List<MedicationForWarningsSearchDto> warningsSearchDtosList2 = medicationsBo.extractWarningsSearchDtos( medicationInstructionsList2); assertEquals((Double)10.0, warningsSearchDtosList2.get(0).getDoseAmount()); assertEquals("mg", warningsSearchDtosList2.get(0).getDoseUnit()); assertEquals("1", warningsSearchDtosList2.get(0).getRouteCode()); }
@Override public List<MedicationForWarningsSearchDto> extractWarningsSearchDtos( @Nonnull final List<MedicationOrderComposition> compositions) { Preconditions.checkNotNull(compositions, "compositions must not be null"); final List<MedicationForWarningsSearchDto> medicationSummariesList = new ArrayList<>(); for (final MedicationOrderComposition composition : compositions) { final OrderActivity orderActivity = MedicationsEhrUtils.getRepresentingOrderActivity( composition.getMedicationDetail().getMedicationInstruction().get(0)); if (orderActivity.getIngredientsAndForm() != null && !orderActivity.getIngredientsAndForm().getIngredient().isEmpty()) { for (final IngredientCluster ingredient : orderActivity.getIngredientsAndForm().getIngredient()) { final MedicationForWarningsSearchDto medicationDto = buildWarningSearchDtoFromIngredient(orderActivity, ingredient); if (medicationDto != null) { medicationSummariesList.add(medicationDto); } } } else { final MedicationForWarningsSearchDto medicationDto = buildWarningSearchDtoFromMedication(orderActivity); if (medicationDto != null) { medicationSummariesList.add(medicationDto); } } } return medicationSummariesList; }
DefaultMedicationsBo implements MedicationsBo, MedicationFromEhrConverter.MedicationDataProvider { @Override public List<MedicationForWarningsSearchDto> extractWarningsSearchDtos( @Nonnull final List<MedicationOrderComposition> compositions) { Preconditions.checkNotNull(compositions, "compositions must not be null"); final List<MedicationForWarningsSearchDto> medicationSummariesList = new ArrayList<>(); for (final MedicationOrderComposition composition : compositions) { final OrderActivity orderActivity = MedicationsEhrUtils.getRepresentingOrderActivity( composition.getMedicationDetail().getMedicationInstruction().get(0)); if (orderActivity.getIngredientsAndForm() != null && !orderActivity.getIngredientsAndForm().getIngredient().isEmpty()) { for (final IngredientCluster ingredient : orderActivity.getIngredientsAndForm().getIngredient()) { final MedicationForWarningsSearchDto medicationDto = buildWarningSearchDtoFromIngredient(orderActivity, ingredient); if (medicationDto != null) { medicationSummariesList.add(medicationDto); } } } else { final MedicationForWarningsSearchDto medicationDto = buildWarningSearchDtoFromMedication(orderActivity); if (medicationDto != null) { medicationSummariesList.add(medicationDto); } } } return medicationSummariesList; } }
DefaultMedicationsBo implements MedicationsBo, MedicationFromEhrConverter.MedicationDataProvider { @Override public List<MedicationForWarningsSearchDto> extractWarningsSearchDtos( @Nonnull final List<MedicationOrderComposition> compositions) { Preconditions.checkNotNull(compositions, "compositions must not be null"); final List<MedicationForWarningsSearchDto> medicationSummariesList = new ArrayList<>(); for (final MedicationOrderComposition composition : compositions) { final OrderActivity orderActivity = MedicationsEhrUtils.getRepresentingOrderActivity( composition.getMedicationDetail().getMedicationInstruction().get(0)); if (orderActivity.getIngredientsAndForm() != null && !orderActivity.getIngredientsAndForm().getIngredient().isEmpty()) { for (final IngredientCluster ingredient : orderActivity.getIngredientsAndForm().getIngredient()) { final MedicationForWarningsSearchDto medicationDto = buildWarningSearchDtoFromIngredient(orderActivity, ingredient); if (medicationDto != null) { medicationSummariesList.add(medicationDto); } } } else { final MedicationForWarningsSearchDto medicationDto = buildWarningSearchDtoFromMedication(orderActivity); if (medicationDto != null) { medicationSummariesList.add(medicationDto); } } } return medicationSummariesList; }  }
DefaultMedicationsBo implements MedicationsBo, MedicationFromEhrConverter.MedicationDataProvider { @Override public List<MedicationForWarningsSearchDto> extractWarningsSearchDtos( @Nonnull final List<MedicationOrderComposition> compositions) { Preconditions.checkNotNull(compositions, "compositions must not be null"); final List<MedicationForWarningsSearchDto> medicationSummariesList = new ArrayList<>(); for (final MedicationOrderComposition composition : compositions) { final OrderActivity orderActivity = MedicationsEhrUtils.getRepresentingOrderActivity( composition.getMedicationDetail().getMedicationInstruction().get(0)); if (orderActivity.getIngredientsAndForm() != null && !orderActivity.getIngredientsAndForm().getIngredient().isEmpty()) { for (final IngredientCluster ingredient : orderActivity.getIngredientsAndForm().getIngredient()) { final MedicationForWarningsSearchDto medicationDto = buildWarningSearchDtoFromIngredient(orderActivity, ingredient); if (medicationDto != null) { medicationSummariesList.add(medicationDto); } } } else { final MedicationForWarningsSearchDto medicationDto = buildWarningSearchDtoFromMedication(orderActivity); if (medicationDto != null) { medicationSummariesList.add(medicationDto); } } } return medicationSummariesList; }  @Autowired void setMedicationsOpenEhrDao(final MedicationsOpenEhrDao medicationsOpenEhrDao); @Autowired void setMedicationsDao(final MedicationsDao medicationsDao); @Autowired void setTaggingOpenEhrDao(final TaggingOpenEhrDao taggingOpenEhrDao); @Autowired void setTherapyDisplayProvider(final TherapyDisplayProvider therapyDisplayProvider); @Autowired void setMedicationsValueHolder(final ValueHolder<Map<Long, MedicationHolderDto>> medicationsValueHolder); @Autowired void setMedicationRoutesValueHolder(final ValueHolder<Map<Long, MedicationRouteDto>> medicationRoutesValueHolder); @Autowired void setMedicationHolderDtoMapper(final MedicationHolderDtoMapper medicationHolderDtoMapper); @Autowired void setMedicationsTasksProvider(final MedicationsTasksProvider medicationsTasksProvider); @Autowired void setMedicationOnAdmissionHandler(final MedicationOnAdmissionHandler medicationOnAdmissionHandler); @Autowired void setAdministrationProvider(final AdministrationProvider administrationProvider); @Override Map<Long, MedicationDataForTherapyDto> getMedicationDataForTherapies(
      final List<Pair<MedicationOrderComposition, MedicationInstructionInstruction>> instructionsList,
      @Nullable final String careProviderId); @Override boolean isTherapyModifiedFromLastReview(
      @Nonnull final MedicationInstructionInstruction instruction,
      @Nonnull final List<MedicationActionAction> actionsList,
      @Nonnull final DateTime compositionCreatedTime); @Override int getTherapyConsecutiveDay(
      final DateTime therapyStart,
      final DateTime therapyDay,
      final DateTime currentTime,
      final Integer pastDaysOfTherapy); @Override DateTime getOriginalTherapyStart(
      @Nonnull final String patientId,
      @Nonnull final MedicationOrderComposition composition); @Override Pair<MedicationOrderComposition, MedicationInstructionInstruction> getInstructionFromLink(
      @Nonnull final String patientId,
      @Nonnull final MedicationInstructionInstruction instruction,
      @Nonnull final EhrLinkType linkType,
      final boolean getLatestVersion); @Override Pair<MedicationOrderComposition, MedicationInstructionInstruction> getInstructionFromLink(
      final String patientId,
      final Link link,
      final boolean getLatestVersion); @Override boolean isTherapySuspended(final List<MedicationActionAction> actionsList); @Override void sortTherapyTemplates(final TherapyTemplatesDto templates); @Override int compareTherapiesForSort(final TherapyDto firstTherapy, final TherapyDto secondTherapy, final Collator collator); @Override boolean areInstructionsLinkedByUpdate(
      final Pair<MedicationOrderComposition, MedicationInstructionInstruction> instructionPair,
      final Pair<MedicationOrderComposition, MedicationInstructionInstruction> compareInstructionPair); @Override boolean doesInstructionHaveLinkToCompareInstruction(
      final MedicationInstructionInstruction instruction,
      final Pair<MedicationOrderComposition, MedicationInstructionInstruction> compareInstructionPair,
      final EhrLinkType linkType); @Override List<Long> getMedicationIds(final OrderActivity orderActivity); @Override List<Long> getMedicationIds(final MedicationActionAction medicationAction); @Override Long getMainMedicationId(final OrderActivity orderActivity); @Override boolean isMentalHealthMedication(final long medicationId); @Override boolean isTherapyActive(
      final List<String> daysOfWeek,
      final Integer dosingDaysFrequency,
      final Interval therapyInterval,
      final DateTime when); @Override boolean isTherapySuspended(final MedicationOrderComposition composition, final MedicationInstructionInstruction instruction); @Override TherapyChangeReasonDto getTherapySuspendReason(
      @Nonnull final MedicationOrderComposition composition,
      @Nonnull final MedicationInstructionInstruction instruction); @Override boolean isTherapyCancelledOrAborted(
      final MedicationOrderComposition composition, final MedicationInstructionInstruction instruction); @Override boolean isMedicationTherapyCompleted(
      final MedicationOrderComposition composition,
      final MedicationInstructionInstruction instruction); @Override MedicationActionAction getInstructionAction(
      final MedicationOrderComposition composition,
      final MedicationInstructionInstruction instruction,
      final MedicationActionEnum searchActionEnum,
      @Nullable final Interval searchInterval); @Override String getTherapyFormattedDisplay(
      final String patientId, final String therapyId, final DateTime when, final Locale locale); @Override TherapyDto getTherapy(
      final String patientId, final String compositionId, final String ehrOrderName, final DateTime when, final Locale locale); @Override TherapyDto convertInstructionToTherapyDto(
      @Nonnull final IspekComposition composition,
      @Nonnull final MedicationInstructionInstruction instruction,
      final DateTime currentTime); @Override TherapyDto convertInstructionToTherapyDtoWithDisplayValues(
      @Nonnull final IspekComposition composition,
      @Nonnull final MedicationInstructionInstruction instruction,
      final Double referenceWeight,
      final Double patientHeight,
      final DateTime currentTime,
      final boolean isToday,
      final Locale locale); @Override void fillDisplayValues(
      @Nonnull final TherapyDto therapy,
      final Double referenceWeight,
      final Double patientHeight,
      final boolean isToday,
      final Locale locale); @Override void fillInfusionFormulaFromRate(
      final ComplexTherapyDto therapy,
      final Double referenceWeight,
      final Double patientHeight); @Override void fillInfusionRateFromFormula(
      final ComplexTherapyDto therapy, final Double referenceWeight, final Double patientHeight); @Override double calculateBodySurfaceArea(final double heightInCm, final double weightInKg); @Override List<MedicationForWarningsSearchDto> getTherapiesForWarningsSearch(final String patientId, final DateTime when); @Override List<TherapyDto> getTherapies(
      final String patientId,
      final String centralCaseId,
      final Double referenceWeight,
      @Nullable final Locale locale,
      final DateTime when); @Override List<TherapyDto> getTherapies(
      final String patientId,
      final Interval searchInterval,
      final Double referenceWeight,
      final Double patientHeight,
      @Nullable final Locale locale,
      final DateTime when); @Override List<MedicationOnDischargeGroupDto> getMedicationOnDischargeGroups(
      final String patientId,
      final DateTime lastHospitalizationStart,
      @Nullable final Interval searchInterval,
      final Double referenceWeight,
      final Double patientHeight, // is this @Nullable ?
      @Nullable final Locale locale,
      final DateTime when); @Override List<MentalHealthTherapyDto> getMentalHealthTherapies(
      final String patientId,
      final Interval searchInterval,
      final DateTime when,
      final Locale locale); @Override List<TherapyDto> getLinkTherapyCandidates(
      @Nonnull final String patientId,
      @Nonnull final Double referenceWeight,
      final Double patientHeight,
      @Nonnull final DateTime when,
      @Nonnull final Locale locale); @Override List<TherapySurgeryReportElementDto> getTherapySurgeryReportElements(
      @Nonnull final String patientId,
      final Double patientHeight,
      @Nonnull final DateTime searchStart,
      @Nonnull final RoundsIntervalDto roundsIntervalDto,
      @Nonnull final Locale locale,
      @Nonnull final DateTime when); @Override List<MedicationForWarningsSearchDto> extractWarningsSearchDtos(
      @Nonnull final List<MedicationOrderComposition> compositions); @Override MedicationDto getMedication(final Long medicationId); @Override DoseFormDto getDoseForm(final String doseFormCode, final DateTime when); @Override DoseFormDto getMedicationDoseForm(final long medicationId); @Override MedicationRouteDto getMedicationRoute(final long routeId); @Override String getOriginalTherapyId(final String patientId, final String compositionUid); @Override String getOriginalTherapyId(@Nonnull final MedicationOrderComposition composition); @Override MedicationReferenceWeightComposition buildReferenceWeightComposition(
      final double weight,
      final DateTime when); @Override void sortTherapiesByMedicationTimingStart(
      final List<Pair<MedicationOrderComposition, MedicationInstructionInstruction>> therapies, final boolean descending); @Override void deleteAdministration(final String patientId, final String compositionId, final String comment); @Override DocumentationTherapiesDto findTherapyGroupsForDocumentation(
      final String patientId,
      final String centralCaseId,
      final Interval centralCaseEffective,
      final List<Pair<MedicationOrderComposition, MedicationInstructionInstruction>> instructionPairs,
      final boolean isOutpatient,
      final DateTime when,
      final Locale locale); @Override @Transactional @ServiceMethod(auditing = @Auditing(level = Level.FULL)) DateTime findPreviousTaskForTherapy(
      final String patientId,
      final String compositionUid,
      final String ehrOrderName,
      final DateTime when); }
DefaultMedicationsBo implements MedicationsBo, MedicationFromEhrConverter.MedicationDataProvider { @Override public List<MedicationForWarningsSearchDto> extractWarningsSearchDtos( @Nonnull final List<MedicationOrderComposition> compositions) { Preconditions.checkNotNull(compositions, "compositions must not be null"); final List<MedicationForWarningsSearchDto> medicationSummariesList = new ArrayList<>(); for (final MedicationOrderComposition composition : compositions) { final OrderActivity orderActivity = MedicationsEhrUtils.getRepresentingOrderActivity( composition.getMedicationDetail().getMedicationInstruction().get(0)); if (orderActivity.getIngredientsAndForm() != null && !orderActivity.getIngredientsAndForm().getIngredient().isEmpty()) { for (final IngredientCluster ingredient : orderActivity.getIngredientsAndForm().getIngredient()) { final MedicationForWarningsSearchDto medicationDto = buildWarningSearchDtoFromIngredient(orderActivity, ingredient); if (medicationDto != null) { medicationSummariesList.add(medicationDto); } } } else { final MedicationForWarningsSearchDto medicationDto = buildWarningSearchDtoFromMedication(orderActivity); if (medicationDto != null) { medicationSummariesList.add(medicationDto); } } } return medicationSummariesList; }  @Autowired void setMedicationsOpenEhrDao(final MedicationsOpenEhrDao medicationsOpenEhrDao); @Autowired void setMedicationsDao(final MedicationsDao medicationsDao); @Autowired void setTaggingOpenEhrDao(final TaggingOpenEhrDao taggingOpenEhrDao); @Autowired void setTherapyDisplayProvider(final TherapyDisplayProvider therapyDisplayProvider); @Autowired void setMedicationsValueHolder(final ValueHolder<Map<Long, MedicationHolderDto>> medicationsValueHolder); @Autowired void setMedicationRoutesValueHolder(final ValueHolder<Map<Long, MedicationRouteDto>> medicationRoutesValueHolder); @Autowired void setMedicationHolderDtoMapper(final MedicationHolderDtoMapper medicationHolderDtoMapper); @Autowired void setMedicationsTasksProvider(final MedicationsTasksProvider medicationsTasksProvider); @Autowired void setMedicationOnAdmissionHandler(final MedicationOnAdmissionHandler medicationOnAdmissionHandler); @Autowired void setAdministrationProvider(final AdministrationProvider administrationProvider); @Override Map<Long, MedicationDataForTherapyDto> getMedicationDataForTherapies(
      final List<Pair<MedicationOrderComposition, MedicationInstructionInstruction>> instructionsList,
      @Nullable final String careProviderId); @Override boolean isTherapyModifiedFromLastReview(
      @Nonnull final MedicationInstructionInstruction instruction,
      @Nonnull final List<MedicationActionAction> actionsList,
      @Nonnull final DateTime compositionCreatedTime); @Override int getTherapyConsecutiveDay(
      final DateTime therapyStart,
      final DateTime therapyDay,
      final DateTime currentTime,
      final Integer pastDaysOfTherapy); @Override DateTime getOriginalTherapyStart(
      @Nonnull final String patientId,
      @Nonnull final MedicationOrderComposition composition); @Override Pair<MedicationOrderComposition, MedicationInstructionInstruction> getInstructionFromLink(
      @Nonnull final String patientId,
      @Nonnull final MedicationInstructionInstruction instruction,
      @Nonnull final EhrLinkType linkType,
      final boolean getLatestVersion); @Override Pair<MedicationOrderComposition, MedicationInstructionInstruction> getInstructionFromLink(
      final String patientId,
      final Link link,
      final boolean getLatestVersion); @Override boolean isTherapySuspended(final List<MedicationActionAction> actionsList); @Override void sortTherapyTemplates(final TherapyTemplatesDto templates); @Override int compareTherapiesForSort(final TherapyDto firstTherapy, final TherapyDto secondTherapy, final Collator collator); @Override boolean areInstructionsLinkedByUpdate(
      final Pair<MedicationOrderComposition, MedicationInstructionInstruction> instructionPair,
      final Pair<MedicationOrderComposition, MedicationInstructionInstruction> compareInstructionPair); @Override boolean doesInstructionHaveLinkToCompareInstruction(
      final MedicationInstructionInstruction instruction,
      final Pair<MedicationOrderComposition, MedicationInstructionInstruction> compareInstructionPair,
      final EhrLinkType linkType); @Override List<Long> getMedicationIds(final OrderActivity orderActivity); @Override List<Long> getMedicationIds(final MedicationActionAction medicationAction); @Override Long getMainMedicationId(final OrderActivity orderActivity); @Override boolean isMentalHealthMedication(final long medicationId); @Override boolean isTherapyActive(
      final List<String> daysOfWeek,
      final Integer dosingDaysFrequency,
      final Interval therapyInterval,
      final DateTime when); @Override boolean isTherapySuspended(final MedicationOrderComposition composition, final MedicationInstructionInstruction instruction); @Override TherapyChangeReasonDto getTherapySuspendReason(
      @Nonnull final MedicationOrderComposition composition,
      @Nonnull final MedicationInstructionInstruction instruction); @Override boolean isTherapyCancelledOrAborted(
      final MedicationOrderComposition composition, final MedicationInstructionInstruction instruction); @Override boolean isMedicationTherapyCompleted(
      final MedicationOrderComposition composition,
      final MedicationInstructionInstruction instruction); @Override MedicationActionAction getInstructionAction(
      final MedicationOrderComposition composition,
      final MedicationInstructionInstruction instruction,
      final MedicationActionEnum searchActionEnum,
      @Nullable final Interval searchInterval); @Override String getTherapyFormattedDisplay(
      final String patientId, final String therapyId, final DateTime when, final Locale locale); @Override TherapyDto getTherapy(
      final String patientId, final String compositionId, final String ehrOrderName, final DateTime when, final Locale locale); @Override TherapyDto convertInstructionToTherapyDto(
      @Nonnull final IspekComposition composition,
      @Nonnull final MedicationInstructionInstruction instruction,
      final DateTime currentTime); @Override TherapyDto convertInstructionToTherapyDtoWithDisplayValues(
      @Nonnull final IspekComposition composition,
      @Nonnull final MedicationInstructionInstruction instruction,
      final Double referenceWeight,
      final Double patientHeight,
      final DateTime currentTime,
      final boolean isToday,
      final Locale locale); @Override void fillDisplayValues(
      @Nonnull final TherapyDto therapy,
      final Double referenceWeight,
      final Double patientHeight,
      final boolean isToday,
      final Locale locale); @Override void fillInfusionFormulaFromRate(
      final ComplexTherapyDto therapy,
      final Double referenceWeight,
      final Double patientHeight); @Override void fillInfusionRateFromFormula(
      final ComplexTherapyDto therapy, final Double referenceWeight, final Double patientHeight); @Override double calculateBodySurfaceArea(final double heightInCm, final double weightInKg); @Override List<MedicationForWarningsSearchDto> getTherapiesForWarningsSearch(final String patientId, final DateTime when); @Override List<TherapyDto> getTherapies(
      final String patientId,
      final String centralCaseId,
      final Double referenceWeight,
      @Nullable final Locale locale,
      final DateTime when); @Override List<TherapyDto> getTherapies(
      final String patientId,
      final Interval searchInterval,
      final Double referenceWeight,
      final Double patientHeight,
      @Nullable final Locale locale,
      final DateTime when); @Override List<MedicationOnDischargeGroupDto> getMedicationOnDischargeGroups(
      final String patientId,
      final DateTime lastHospitalizationStart,
      @Nullable final Interval searchInterval,
      final Double referenceWeight,
      final Double patientHeight, // is this @Nullable ?
      @Nullable final Locale locale,
      final DateTime when); @Override List<MentalHealthTherapyDto> getMentalHealthTherapies(
      final String patientId,
      final Interval searchInterval,
      final DateTime when,
      final Locale locale); @Override List<TherapyDto> getLinkTherapyCandidates(
      @Nonnull final String patientId,
      @Nonnull final Double referenceWeight,
      final Double patientHeight,
      @Nonnull final DateTime when,
      @Nonnull final Locale locale); @Override List<TherapySurgeryReportElementDto> getTherapySurgeryReportElements(
      @Nonnull final String patientId,
      final Double patientHeight,
      @Nonnull final DateTime searchStart,
      @Nonnull final RoundsIntervalDto roundsIntervalDto,
      @Nonnull final Locale locale,
      @Nonnull final DateTime when); @Override List<MedicationForWarningsSearchDto> extractWarningsSearchDtos(
      @Nonnull final List<MedicationOrderComposition> compositions); @Override MedicationDto getMedication(final Long medicationId); @Override DoseFormDto getDoseForm(final String doseFormCode, final DateTime when); @Override DoseFormDto getMedicationDoseForm(final long medicationId); @Override MedicationRouteDto getMedicationRoute(final long routeId); @Override String getOriginalTherapyId(final String patientId, final String compositionUid); @Override String getOriginalTherapyId(@Nonnull final MedicationOrderComposition composition); @Override MedicationReferenceWeightComposition buildReferenceWeightComposition(
      final double weight,
      final DateTime when); @Override void sortTherapiesByMedicationTimingStart(
      final List<Pair<MedicationOrderComposition, MedicationInstructionInstruction>> therapies, final boolean descending); @Override void deleteAdministration(final String patientId, final String compositionId, final String comment); @Override DocumentationTherapiesDto findTherapyGroupsForDocumentation(
      final String patientId,
      final String centralCaseId,
      final Interval centralCaseEffective,
      final List<Pair<MedicationOrderComposition, MedicationInstructionInstruction>> instructionPairs,
      final boolean isOutpatient,
      final DateTime when,
      final Locale locale); @Override @Transactional @ServiceMethod(auditing = @Auditing(level = Level.FULL)) DateTime findPreviousTaskForTherapy(
      final String patientId,
      final String compositionUid,
      final String ehrOrderName,
      final DateTime when);  }