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);
}
}
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;
}
}
}
Aggregations