Search in sources :

Example 61 with Patient

use of se.inera.intyg.common.support.model.common.internal.Patient in project webcert by sklintyg.

the class PatientDetailsResolverImpl method resolveDoiPatient.

/**
 * DOI har en specialregel som säger att namn och adress skall hämtas från ett DB-intyg i det fall sådant finns
 * utfärdat inom samma Vårdgivare (Integration) eller Vårdenhet (Fristående).
 */
private Patient resolveDoiPatient(Personnummer personnummer, WebCertUser user) {
    PersonSvar personSvar = getPersonSvar(personnummer);
    // Find ALL existing intyg for this patient, filter out so we only have DB left.
    List<Utkast> utkastList = new ArrayList<>();
    if (user.getOrigin().equals(UserOriginType.DJUPINTEGRATION.name())) {
        utkastList.addAll(utkastRepository.findDraftsByPatientAndVardgivareAndStatus(personnummer.getPersonnummer(), user.getValdVardgivare().getId(), UTKAST_STATUSES, Sets.newHashSet("db")));
    } else {
        utkastList.addAll(utkastRepository.findDraftsByPatientAndEnhetAndStatus(personnummer.getPersonnummer(), Arrays.asList(user.getValdVardenhet().getId()), UTKAST_STATUSES, Sets.newHashSet("db")));
    }
    // Use PU and integration parameters for deceased
    if (utkastList.size() > 0) {
        Utkast newest = utkastList.stream().sorted((u1, u2) -> u2.getSenastSparadDatum().compareTo(u1.getSenastSparadDatum())).findFirst().orElseThrow(() -> new IllegalStateException("List was > 0 but findFirst() returned no result."));
        try {
            ModuleApi moduleApi = moduleRegistry.getModuleApi("db");
            Utlatande utlatande = moduleApi.getUtlatandeFromJson(newest.getModel());
            Patient patient = utlatande.getGrundData().getPatient();
            if (personSvar.getStatus() == PersonSvar.Status.FOUND) {
                patient.setSekretessmarkering(personSvar.getPerson().isSekretessmarkering());
            }
            patient.setAvliden((personSvar.getStatus() == PersonSvar.Status.FOUND && personSvar.getPerson().isAvliden()) || (user.getParameters() != null && user.getParameters().isPatientDeceased()) || (personSvar.getStatus() != PersonSvar.Status.FOUND && user.getParameters() == null));
            return patient;
        } catch (ModuleNotFoundException | IOException e) {
            // No usabe DB exist
            return handleDoiNoExistingDb(personnummer, personSvar, user);
        }
    } else {
        // No usabe DB exist
        return handleDoiNoExistingDb(personnummer, personSvar, user);
    }
}
Also used : ModuleApi(se.inera.intyg.common.support.modules.support.api.ModuleApi) ModuleNotFoundException(se.inera.intyg.common.support.modules.registry.ModuleNotFoundException) Utkast(se.inera.intyg.webcert.persistence.utkast.model.Utkast) Utlatande(se.inera.intyg.common.support.model.common.internal.Utlatande) ArrayList(java.util.ArrayList) Patient(se.inera.intyg.common.support.model.common.internal.Patient) IOException(java.io.IOException) PersonSvar(se.inera.intyg.infra.integration.pu.model.PersonSvar)

Example 62 with Patient

use of se.inera.intyg.common.support.model.common.internal.Patient in project webcert by sklintyg.

the class PatientDetailsResolverImpl method resolveTsPatient.

/*
     * I: Namn, s-markering från PU-tjänst.
     * I: Info om avliden från både PU-tjänst och journalsystem.
     * I: Adress från journalsystem.
     * F: PU-tjänsten (alla uppgifter).
     */
private Patient resolveTsPatient(Personnummer personnummer, WebCertUser user) {
    PersonSvar personSvar = getPersonSvar(personnummer);
    if (personSvar.getStatus() == PersonSvar.Status.FOUND) {
        Patient patient = toPatientFromPersonSvar(personnummer, personSvar);
        // Get address if djupintegration from params, fallback to PU for address if unavailable.
        if (user.getOrigin().equals(UserOriginType.DJUPINTEGRATION.name())) {
            IntegrationParameters parameters = user.getParameters();
            // Loading utkast without uthoppslänk would fail during end-to-end tests, thus the line below
            if (parameters == null) {
                parameters = new IntegrationParameters(null, null, null, null, null, null, null, null, null, false, false, false, false);
            }
            // Update avliden with integrationparameters
            patient.setAvliden(patient.isAvliden() || parameters.isPatientDeceased());
            // All address fields needs to be present from integration parameters, otherwise use PU instead.
            if (isNotNullOrEmpty(parameters.getPostadress()) && isNotNullOrEmpty(parameters.getPostnummer()) && isNotNullOrEmpty(parameters.getPostort())) {
                patient.setPostadress(parameters.getPostadress());
                patient.setPostnummer(parameters.getPostnummer());
                patient.setPostort(parameters.getPostort());
            } else {
                patient.setPostadress(personSvar.getPerson().getPostadress());
                patient.setPostnummer(personSvar.getPerson().getPostnummer());
                patient.setPostort(personSvar.getPerson().getPostort());
            }
        }
        return patient;
    } else {
        // No PU means only use integration parameters
        if (user.getOrigin().equals(UserOriginType.DJUPINTEGRATION.name())) {
            return toPatientFromParameters(personnummer, user.getParameters());
        } else {
            return null;
        }
    }
}
Also used : IntegrationParameters(se.inera.intyg.webcert.web.web.controller.integration.dto.IntegrationParameters) Patient(se.inera.intyg.common.support.model.common.internal.Patient) PersonSvar(se.inera.intyg.infra.integration.pu.model.PersonSvar)

Aggregations

Patient (se.inera.intyg.common.support.model.common.internal.Patient)62 Test (org.junit.Test)28 Personnummer (se.inera.intyg.schemas.contract.Personnummer)28 Utkast (se.inera.intyg.webcert.persistence.utkast.model.Utkast)12 HoSPersonal (se.inera.intyg.common.support.model.common.internal.HoSPersonal)11 ArgumentMatchers.anyString (org.mockito.ArgumentMatchers.anyString)7 Utlatande (se.inera.intyg.common.support.model.common.internal.Utlatande)7 Vardenhet (se.inera.intyg.common.support.model.common.internal.Vardenhet)6 ModuleApi (se.inera.intyg.common.support.modules.support.api.ModuleApi)6 ArrayList (java.util.ArrayList)5 Before (org.junit.Before)5 Vardgivare (se.inera.intyg.common.support.model.common.internal.Vardgivare)5 Vardgivare (se.inera.intyg.infra.integration.hsa.model.Vardgivare)5 IntygContentHolder (se.inera.intyg.webcert.web.service.intyg.dto.IntygContentHolder)5 Relations (se.inera.intyg.webcert.web.web.controller.api.dto.Relations)5 IOException (java.io.IOException)4 GrundData (se.inera.intyg.common.support.model.common.internal.GrundData)4 ModuleNotFoundException (se.inera.intyg.common.support.modules.registry.ModuleNotFoundException)4 ModuleException (se.inera.intyg.common.support.modules.support.api.exception.ModuleException)4 PersonSvar (se.inera.intyg.infra.integration.pu.model.PersonSvar)4