Search in sources :

Example 1 with LabMessageDto

use of de.symeda.sormas.api.labmessage.LabMessageDto in project SORMAS-Project by hzi-braunschweig.

the class RelatedLabMessageHandler method getRelatedEntities.

// related entities
public RelatedEntities getRelatedEntities(LabMessageDto labMessage) {
    String reportId = labMessage.getReportId();
    String labSampleId = labMessage.getLabSampleId();
    if (StringUtils.isBlank(reportId) || StringUtils.isBlank(labSampleId)) {
        return null;
    }
    List<SampleDto> relatedSamples = FacadeProvider.getSampleFacade().getByLabSampleId(labSampleId);
    if (relatedSamples.size() != 1) {
        return null;
    }
    SampleDto relatedSample = relatedSamples.get(0);
    List<LabMessageDto> relatedLabMessages = FacadeProvider.getLabMessageFacade().getForSample(relatedSample.toReference()).stream().filter(otherLabMessage -> reportId.equals(otherLabMessage.getReportId()) && LabMessageStatus.PROCESSED.equals(otherLabMessage.getStatus())).collect(Collectors.toList());
    PersonDto relatedPerson;
    if (relatedSample.getAssociatedCase() != null) {
        relatedPerson = FacadeProvider.getPersonFacade().getByContext(PersonContext.CASE, relatedSample.getAssociatedCase().getUuid());
    } else if (relatedSample.getAssociatedContact() != null) {
        relatedPerson = FacadeProvider.getPersonFacade().getByContext(PersonContext.CONTACT, relatedSample.getAssociatedContact().getUuid());
    } else {
        relatedPerson = FacadeProvider.getPersonFacade().getByContext(PersonContext.EVENT_PARTICIPANT, relatedSample.getAssociatedEventParticipant().getUuid());
    }
    List<PathogenTestDto> relatedPathogenTests = new ArrayList<>();
    List<TestReportDto> unmatchedTestReports = new ArrayList<>();
    boolean pathogenTestMisMatch = false;
    List<TestReportDto> testReports = labMessage.getTestReports();
    List<PathogenTestDto> samplePathogenTests = FacadeProvider.getPathogenTestFacade().getAllBySample(relatedSample.toReference());
    for (TestReportDto testReport : testReports) {
        List<PathogenTestDto> matchedPathogenTests = StringUtils.isBlank(testReport.getExternalId()) ? Collections.emptyList() : samplePathogenTests.stream().filter(pt -> matchPathogenTest(testReport, pt)).collect(Collectors.toList());
        if (matchedPathogenTests.isEmpty()) {
            unmatchedTestReports.add(testReport);
        } else if (matchedPathogenTests.size() == 1) {
            relatedPathogenTests.add(matchedPathogenTests.get(0));
        } else {
            unmatchedTestReports.add(testReport);
            pathogenTestMisMatch = true;
        }
    }
    return new RelatedEntities(relatedSample, relatedPerson, relatedPathogenTests, unmatchedTestReports, pathogenTestMisMatch, CollectionUtils.isNotEmpty(relatedLabMessages));
}
Also used : TestReportDto(de.symeda.sormas.api.labmessage.TestReportDto) FacadeProvider(de.symeda.sormas.api.FacadeProvider) BiFunction(java.util.function.BiFunction) CompletableFuture(java.util.concurrent.CompletableFuture) Function(java.util.function.Function) Supplier(java.util.function.Supplier) StringUtils(org.apache.commons.lang3.StringUtils) PersonDto(de.symeda.sormas.api.person.PersonDto) ArrayList(java.util.ArrayList) EntityDto(de.symeda.sormas.api.EntityDto) SampleReferenceDto(de.symeda.sormas.api.sample.SampleReferenceDto) CollectionUtils(org.apache.commons.collections.CollectionUtils) PersonContext(de.symeda.sormas.api.person.PersonContext) MutableObject(org.apache.commons.lang3.mutable.MutableObject) PathogenTestDto(de.symeda.sormas.api.sample.PathogenTestDto) LabMessageStatus(de.symeda.sormas.api.labmessage.LabMessageStatus) DataHelper(de.symeda.sormas.api.utils.DataHelper) CancellationException(java.util.concurrent.CancellationException) LabMessageDto(de.symeda.sormas.api.labmessage.LabMessageDto) Collectors(java.util.stream.Collectors) Consumer(java.util.function.Consumer) List(java.util.List) CompletionStage(java.util.concurrent.CompletionStage) Stream(java.util.stream.Stream) SampleDto(de.symeda.sormas.api.sample.SampleDto) Mutable(org.apache.commons.lang3.mutable.Mutable) Optional(java.util.Optional) Collections(java.util.Collections) TestReportDto(de.symeda.sormas.api.labmessage.TestReportDto) PersonDto(de.symeda.sormas.api.person.PersonDto) LabMessageDto(de.symeda.sormas.api.labmessage.LabMessageDto) ArrayList(java.util.ArrayList) PathogenTestDto(de.symeda.sormas.api.sample.PathogenTestDto) SampleDto(de.symeda.sormas.api.sample.SampleDto)

Example 2 with LabMessageDto

use of de.symeda.sormas.api.labmessage.LabMessageDto in project SORMAS-Project by hzi-braunschweig.

the class LabMessageController method showCorrectionWindow.

private <T> void showCorrectionWindow(LabMessageDto labMessage, String titleTag, CorrectionPanel<T> correctionPanel, Consumer<T> save, RelatedLabMessageHandlerChain chain) {
    Window window = VaadinUiUtil.createPopupWindow();
    correctionPanel.setCancelListener((e) -> {
        chain.cancel();
        window.close();
    });
    correctionPanel.setDiscardListener(() -> {
        if (FacadeProvider.getLabMessageFacade().isProcessed(labMessage.getUuid())) {
            showAlreadyProcessedPopup(null, false);
            correctionPanel.disableContinueButtons();
        } else {
            chain.next(false);
            window.close();
        }
    });
    correctionPanel.setCommitListener((updated) -> {
        if (FacadeProvider.getLabMessageFacade().isProcessed(labMessage.getUuid())) {
            showAlreadyProcessedPopup(null, false);
            correctionPanel.disableContinueButtons();
        } else {
            save.accept(updated);
            chain.next(true);
            window.close();
        }
    });
    window.addCloseListener(e -> {
        if (!chain.done()) {
            chain.cancel();
        }
    });
    HorizontalLayout toolbar = new HorizontalLayout(ButtonHelper.createIconButton(null, VaadinIcons.EYE, e -> showLabMessage(labMessage.getUuid(), false, null)));
    toolbar.setMargin(new MarginInfo(true, true, false, true));
    VerticalLayout content = new VerticalLayout(toolbar, correctionPanel);
    content.setMargin(false);
    content.setSpacing(false);
    content.setExpandRatio(toolbar, 0);
    content.setExpandRatio(correctionPanel, 1);
    content.setSizeFull();
    window.setContent(content);
    window.setSizeFull();
    window.setCaption(I18nProperties.getString(titleTag));
    UI.getCurrent().addWindow(window);
}
Also used : Window(com.vaadin.ui.Window) Panel(com.vaadin.ui.Panel) FeatureType(de.symeda.sormas.api.feature.FeatureType) EventDataForm(de.symeda.sormas.ui.events.EventDataForm) CaseSelectionDto(de.symeda.sormas.api.caze.CaseSelectionDto) SampleController(de.symeda.sormas.ui.samples.SampleController) I18nProperties(de.symeda.sormas.api.i18n.I18nProperties) LoggerFactory(org.slf4j.LoggerFactory) UI(com.vaadin.ui.UI) EventParticipantDto(de.symeda.sormas.api.event.EventParticipantDto) LabMessageIndexDto(de.symeda.sormas.api.labmessage.LabMessageIndexDto) Window(com.vaadin.ui.Window) NamingException(javax.naming.NamingException) CaseSimilarityCriteria(de.symeda.sormas.api.caze.CaseSimilarityCriteria) PersonDto(de.symeda.sormas.api.person.PersonDto) ControllerProvider(de.symeda.sormas.ui.ControllerProvider) ContactCreateForm(de.symeda.sormas.ui.contact.ContactCreateForm) CssStyles(de.symeda.sormas.ui.utils.CssStyles) Page(com.vaadin.server.Page) VaadinIcons(com.vaadin.icons.VaadinIcons) PseudonymizableDto(de.symeda.sormas.api.utils.pseudonymization.PseudonymizableDto) EventParticipantEditForm(de.symeda.sormas.ui.events.EventParticipantEditForm) EventParticipantReferenceDto(de.symeda.sormas.api.event.EventParticipantReferenceDto) UserProvider(de.symeda.sormas.ui.UserProvider) CannotProceedException(javax.naming.CannotProceedException) ValoTheme(com.vaadin.ui.themes.ValoTheme) LabMessageStatus(de.symeda.sormas.api.labmessage.LabMessageStatus) CaseCriteria(de.symeda.sormas.api.caze.CaseCriteria) Collection(java.util.Collection) HorizontalSplitPanel(com.vaadin.ui.HorizontalSplitPanel) CaseDataDto(de.symeda.sormas.api.caze.CaseDataDto) EventDto(de.symeda.sormas.api.event.EventDto) EventSelectionField(de.symeda.sormas.ui.events.eventLink.EventSelectionField) PathogenTestForm(de.symeda.sormas.ui.samples.PathogenTestForm) Collectors(java.util.stream.Collectors) MarginInfo(com.vaadin.shared.ui.MarginInfo) SimilarEntriesDto(de.symeda.sormas.api.labmessage.SimilarEntriesDto) Objects(java.util.Objects) SampleSelectionField(de.symeda.sormas.ui.samples.SampleSelectionField) List(java.util.List) CompletionStage(java.util.concurrent.CompletionStage) ContactDto(de.symeda.sormas.api.contact.ContactDto) SampleEditForm(de.symeda.sormas.ui.samples.SampleEditForm) Optional(java.util.Optional) SimilarContactDto(de.symeda.sormas.api.contact.SimilarContactDto) PathogenTestReferenceDto(de.symeda.sormas.api.sample.PathogenTestReferenceDto) ExternalSurveillanceToolException(de.symeda.sormas.api.externalsurveillancetool.ExternalSurveillanceToolException) EventIndexDto(de.symeda.sormas.api.event.EventIndexDto) TestReportDto(de.symeda.sormas.api.labmessage.TestReportDto) RelatedLabMessageHandlerChain(de.symeda.sormas.ui.labmessage.RelatedLabMessageHandler.RelatedLabMessageHandlerChain) VaadinUiUtil(de.symeda.sormas.ui.utils.VaadinUiUtil) FacadeProvider(de.symeda.sormas.api.FacadeProvider) VerticalLayout(com.vaadin.ui.VerticalLayout) EventParticipantCriteria(de.symeda.sormas.api.event.EventParticipantCriteria) PersonReferenceDto(de.symeda.sormas.api.person.PersonReferenceDto) CompletableFuture(java.util.concurrent.CompletableFuture) ArrayList(java.util.ArrayList) CaseReferenceDto(de.symeda.sormas.api.caze.CaseReferenceDto) EventCriteria(de.symeda.sormas.api.event.EventCriteria) SampleReferenceDto(de.symeda.sormas.api.sample.SampleReferenceDto) Notification(com.vaadin.ui.Notification) SormasUI(de.symeda.sormas.ui.SormasUI) CommitDiscardWrapperComponent(de.symeda.sormas.ui.utils.CommitDiscardWrapperComponent) SampleCreateForm(de.symeda.sormas.ui.samples.SampleCreateForm) Label(com.vaadin.ui.Label) HandlerResult(de.symeda.sormas.ui.labmessage.RelatedLabMessageHandler.HandlerResult) ClientConnector(com.vaadin.server.ClientConnector) SimilarEventParticipantDto(de.symeda.sormas.api.event.SimilarEventParticipantDto) PathogenTestDto(de.symeda.sormas.api.sample.PathogenTestDto) ContactSimilarityCriteria(de.symeda.sormas.api.contact.ContactSimilarityCriteria) ButtonHelper(de.symeda.sormas.ui.utils.ButtonHelper) ContentMode(com.vaadin.shared.ui.ContentMode) Logger(org.slf4j.Logger) Validations(de.symeda.sormas.api.i18n.Validations) ExternalMessageResult(de.symeda.sormas.api.labmessage.ExternalMessageResult) LabMessageDto(de.symeda.sormas.api.labmessage.LabMessageDto) Sizeable(com.vaadin.server.Sizeable) Captions(de.symeda.sormas.api.i18n.Captions) Consumer(java.util.function.Consumer) UserReferenceDto(de.symeda.sormas.api.user.UserReferenceDto) CaseCreateForm(de.symeda.sormas.ui.caze.CaseCreateForm) UserRight(de.symeda.sormas.api.user.UserRight) Button(com.vaadin.ui.Button) Disease(de.symeda.sormas.api.Disease) SampleDto(de.symeda.sormas.api.sample.SampleDto) PersonEditForm(de.symeda.sormas.ui.person.PersonEditForm) HorizontalLayout(com.vaadin.ui.HorizontalLayout) EventReferenceDto(de.symeda.sormas.api.event.EventReferenceDto) ContactReferenceDto(de.symeda.sormas.api.contact.ContactReferenceDto) SampleSimilarityCriteria(de.symeda.sormas.api.sample.SampleSimilarityCriteria) Strings(de.symeda.sormas.api.i18n.Strings) Component(com.vaadin.ui.Component) MarginInfo(com.vaadin.shared.ui.MarginInfo) VerticalLayout(com.vaadin.ui.VerticalLayout) HorizontalLayout(com.vaadin.ui.HorizontalLayout)

Example 3 with LabMessageDto

use of de.symeda.sormas.api.labmessage.LabMessageDto in project SORMAS-Project by hzi-braunschweig.

the class RelatedLabMessageHandler method handle.

public CompletionStage<HandlerResult> handle(LabMessageDto labMessage) {
    RelatedEntities relatedEntities = getRelatedEntities(labMessage);
    if (relatedEntities == null) {
        return CompletableFuture.completedFuture(HandlerResult.NOT_HANDLED);
    }
    LabMessageMapper mapper = LabMessageMapper.forLabMessage(labMessage);
    ChainHandler chainHandler = new ChainHandler();
    Supplier<CompletionStage<Boolean>> correctionFlowConfirmationSupplier = createCachedCorrectionFlowConfirmationSupplier();
    CompletionStage<HandlerResult> correctionFlow = CompletableFuture.completedFuture(HandlerResult.NOT_HANDLED);
    if (relatedEntities.relatedLabMessagesFound && !relatedEntities.pathogenTestMisMatch) {
        correctionFlow = correctionFlow.thenCompose(result -> handlePersonCorrection(labMessage, relatedEntities.person, mapper, correctionFlowConfirmationSupplier, result, chainHandler)).thenCompose((personCorrectionResult) -> handleSampleCorrection(labMessage, relatedEntities.sample, mapper, correctionFlowConfirmationSupplier, personCorrectionResult, chainHandler));
        for (PathogenTestDto p : relatedEntities.pathogenTests) {
            Optional<TestReportDto> testReport = labMessage.getTestReports().stream().filter(t -> matchPathogenTest(t, p)).findFirst();
            if (testReport.isPresent()) {
                correctionFlow = correctionFlow.thenCompose((testCorrectionResult) -> handlePathogenTestCorrection(labMessage, testReport.get(), p, mapper, correctionFlowConfirmationSupplier, testCorrectionResult, chainHandler));
            }
        }
        for (TestReportDto r : relatedEntities.unmatchedTestReports) {
            correctionFlow = correctionFlow.thenCompose((result) -> {
                if (result == HandlerResult.HANDLED) {
                    // do not handle pathogen test creation if there were no corrections in the lab message
                    return handlePathogenTestCreation(labMessage, r, relatedEntities.sample, correctionFlowConfirmationSupplier, chainHandler);
                }
                return CompletableFuture.completedFuture(result);
            });
        }
    }
    return correctionFlow.thenCompose((result) -> {
        if (result == HandlerResult.HANDLED) {
            // ask to continue post processing
            return continueProcessingConfirmation.apply(labMessage, relatedEntities.sample.toReference()).thenCompose((doPostProcess) -> CompletableFuture.completedFuture(CorrectionResult.of(result, doPostProcess)));
        }
        // if no corrections found, then continue
        return CompletableFuture.completedFuture(CorrectionResult.of(result, true));
    }).thenCompose((correctionResult) -> {
        if (correctionResult.shouldContinue) {
            return shortcutFlowConfirmation.apply(relatedEntities.relatedLabMessagesFound).thenCompose(confirmed -> {
                if (confirmed) {
                    return chainHandler.run((chain) -> shortcutHandler.handle(labMessage, relatedEntities.sample, chain)).thenCompose(handled -> CompletableFuture.completedFuture(HandlerResult.HANDLED));
                }
                return CompletableFuture.completedFuture(HandlerResult.CONTINUE);
            });
        }
        return CompletableFuture.completedFuture(correctionResult.result);
    }).exceptionally(e -> {
        if (e.getCause() instanceof CancellationException) {
            return chainHandler.savePerformed ? HandlerResult.CANCELED_WITH_UPDATES : HandlerResult.CANCELED;
        }
        throw (RuntimeException) e;
    });
}
Also used : TestReportDto(de.symeda.sormas.api.labmessage.TestReportDto) FacadeProvider(de.symeda.sormas.api.FacadeProvider) BiFunction(java.util.function.BiFunction) CompletableFuture(java.util.concurrent.CompletableFuture) Function(java.util.function.Function) Supplier(java.util.function.Supplier) StringUtils(org.apache.commons.lang3.StringUtils) PersonDto(de.symeda.sormas.api.person.PersonDto) ArrayList(java.util.ArrayList) EntityDto(de.symeda.sormas.api.EntityDto) SampleReferenceDto(de.symeda.sormas.api.sample.SampleReferenceDto) CollectionUtils(org.apache.commons.collections.CollectionUtils) PersonContext(de.symeda.sormas.api.person.PersonContext) MutableObject(org.apache.commons.lang3.mutable.MutableObject) PathogenTestDto(de.symeda.sormas.api.sample.PathogenTestDto) LabMessageStatus(de.symeda.sormas.api.labmessage.LabMessageStatus) DataHelper(de.symeda.sormas.api.utils.DataHelper) CancellationException(java.util.concurrent.CancellationException) LabMessageDto(de.symeda.sormas.api.labmessage.LabMessageDto) Collectors(java.util.stream.Collectors) Consumer(java.util.function.Consumer) List(java.util.List) CompletionStage(java.util.concurrent.CompletionStage) Stream(java.util.stream.Stream) SampleDto(de.symeda.sormas.api.sample.SampleDto) Mutable(org.apache.commons.lang3.mutable.Mutable) Optional(java.util.Optional) Collections(java.util.Collections) TestReportDto(de.symeda.sormas.api.labmessage.TestReportDto) PathogenTestDto(de.symeda.sormas.api.sample.PathogenTestDto) CancellationException(java.util.concurrent.CancellationException) CompletionStage(java.util.concurrent.CompletionStage)

Example 4 with LabMessageDto

use of de.symeda.sormas.api.labmessage.LabMessageDto in project SORMAS-Project by hzi-braunschweig.

the class LabMessageFacadeEjb method toDto.

public LabMessageDto toDto(LabMessage source) {
    if (source == null) {
        return null;
    }
    LabMessageDto target = new LabMessageDto();
    DtoHelper.fillDto(target, source);
    target.setType(source.getType());
    target.setLabMessageDetails(source.getLabMessageDetails());
    target.setLabSampleId(source.getLabSampleId());
    target.setTestedDisease(source.getTestedDisease());
    target.setMessageDateTime(source.getMessageDateTime());
    target.setPersonBirthDateDD(source.getPersonBirthDateDD());
    target.setPersonBirthDateMM(source.getPersonBirthDateMM());
    target.setPersonBirthDateYYYY(source.getPersonBirthDateYYYY());
    target.setPersonCity(source.getPersonCity());
    target.setPersonFirstName(source.getPersonFirstName());
    target.setPersonHouseNumber(source.getPersonHouseNumber());
    target.setPersonLastName(source.getPersonLastName());
    target.setPersonPostalCode(source.getPersonPostalCode());
    target.setPersonSex(source.getPersonSex());
    target.setPersonStreet(source.getPersonStreet());
    target.setPersonPhone(source.getPersonPhone());
    target.setPersonEmail(source.getPersonEmail());
    target.setLabCity(source.getLabCity());
    target.setLabExternalId(source.getLabExternalId());
    target.setLabName(source.getLabName());
    target.setLabPostalCode(source.getLabPostalCode());
    target.setStatus(source.getStatus());
    target.setSampleDateTime(source.getSampleDateTime());
    target.setSampleMaterial(source.getSampleMaterial());
    target.setSampleMaterialText(source.getSampleMaterialText());
    target.setSampleReceivedDate(source.getSampleReceivedDate());
    target.setSpecimenCondition(source.getSpecimenCondition());
    if (source.getTestReports() != null) {
        target.setTestReports(source.getTestReports().stream().map(t -> TestReportFacadeEjb.toDto(t)).collect(toList()));
    }
    target.setReportId(source.getReportId());
    target.setSampleOverallTestResult(source.getSampleOverallTestResult());
    if (source.getSample() != null) {
        target.setSample(source.getSample().toReference());
    }
    if (source.getAssignee() != null) {
        target.setAssignee(source.getAssignee().toReference());
    }
    return target;
}
Also used : LabMessageDto(de.symeda.sormas.api.labmessage.LabMessageDto)

Example 5 with LabMessageDto

use of de.symeda.sormas.api.labmessage.LabMessageDto in project SORMAS-Project by hzi-braunschweig.

the class SampleServiceTest method testSamplePermanentDeletion.

@Test
public void testSamplePermanentDeletion() {
    TestDataCreator.RDCF rdcf = creator.createRDCF();
    UserDto user = creator.createUser(rdcf, UserRole.ADMIN, UserRole.NATIONAL_USER);
    PersonDto person = creator.createPerson();
    CaseDataDto caze = creator.createCase(user.toReference(), person.toReference(), rdcf);
    SampleDto sample = creator.createSample(caze.toReference(), user.toReference(), rdcf.facility);
    SampleDto referralSample = creator.createSample(caze.toReference(), user.toReference(), rdcf.facility, s -> s.setReferredTo(sample.toReference()));
    creator.createPathogenTest(sample.toReference(), caze);
    creator.createAdditionalTest(sample.toReference());
    LabMessageDto labMessage = creator.createLabMessage(lm -> lm.setSample(sample.toReference()));
    getSampleFacade().deleteSample(sample.toReference(), new DeletionDetails(DeletionReason.OTHER_REASON, "test reason"));
    Sample sampleEntity = getSampleService().getByUuid(sample.getUuid());
    List<PathogenTest> pathogenTests = getPathogenTestService().getAll();
    assertEquals(2, getSampleService().count());
    assertTrue(sampleEntity.isDeleted());
    assertEquals(1, pathogenTests.size());
    assertTrue(pathogenTests.get(0).isDeleted());
    assertEquals(1, getAdditionalTestService().count());
    assertNull(getSampleService().getByUuid(referralSample.getUuid()).getReferredTo());
    assertNull(getLabMessageService().getByUuid(labMessage.getUuid()).getSample());
    getSampleService().deletePermanent(getEntityAttached(sampleEntity));
    assertEquals(1, getSampleService().count());
    assertEquals(0, getPathogenTestService().count());
    assertEquals(0, getAdditionalTestService().count());
    assertEquals(1, getLabMessageService().count());
}
Also used : DeletionDetails(de.symeda.sormas.api.common.DeletionDetails) CaseDataDto(de.symeda.sormas.api.caze.CaseDataDto) PersonDto(de.symeda.sormas.api.person.PersonDto) UserDto(de.symeda.sormas.api.user.UserDto) LabMessageDto(de.symeda.sormas.api.labmessage.LabMessageDto) TestDataCreator(de.symeda.sormas.backend.TestDataCreator) SampleDto(de.symeda.sormas.api.sample.SampleDto) Test(org.junit.Test) AbstractBeanTest(de.symeda.sormas.backend.AbstractBeanTest)

Aggregations

LabMessageDto (de.symeda.sormas.api.labmessage.LabMessageDto)70 Test (org.junit.Test)50 SampleDto (de.symeda.sormas.api.sample.SampleDto)39 AbstractBeanTest (de.symeda.sormas.ui.AbstractBeanTest)38 TestReportDto (de.symeda.sormas.api.labmessage.TestReportDto)28 HandlerResult (de.symeda.sormas.ui.labmessage.processing.AbstractRelatedLabMessageHandler.HandlerResult)23 PathogenTestDto (de.symeda.sormas.api.sample.PathogenTestDto)22 PersonDto (de.symeda.sormas.api.person.PersonDto)19 List (java.util.List)15 FacadeProvider (de.symeda.sormas.api.FacadeProvider)14 CompletionStage (java.util.concurrent.CompletionStage)13 Date (java.util.Date)12 Consumer (java.util.function.Consumer)12 CaseDataDto (de.symeda.sormas.api.caze.CaseDataDto)11 SampleReferenceDto (de.symeda.sormas.api.sample.SampleReferenceDto)11 ArrayList (java.util.ArrayList)11 CompletableFuture (java.util.concurrent.CompletableFuture)11 LabMessageStatus (de.symeda.sormas.api.labmessage.LabMessageStatus)10 SampleAndPathogenTests (de.symeda.sormas.ui.labmessage.processing.SampleAndPathogenTests)9 Supplier (java.util.function.Supplier)9