Merge branch 'dev/etl/pasien' into prod/base

This commit is contained in:
Salman Manoe 2024-08-07 10:05:44 +07:00
commit a4db6562b9
16 changed files with 374 additions and 154 deletions

View File

@ -5,6 +5,7 @@ import com.jasamedika.medifirst2000.service.MigrasiPasienService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@ -12,6 +13,7 @@ import java.util.List;
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
import static org.springframework.web.bind.annotation.RequestMethod.GET; import static org.springframework.web.bind.annotation.RequestMethod.GET;
import static org.springframework.web.bind.annotation.RequestMethod.POST;
/** /**
* @author Salman * @author Salman
@ -27,13 +29,23 @@ public class MigrasiPasienController {
@RequestMapping(value = "/init", method = GET, produces = APPLICATION_JSON_VALUE) @RequestMapping(value = "/init", method = GET, produces = APPLICATION_JSON_VALUE)
public ResponseEntity<Object> initiateMigrasiPasien() { public ResponseEntity<Object> initiateMigrasiPasien() {
migrasiPasienService.init(); migrasiPasienService.newMigrate();
return new ResponseEntity<>(null, HttpStatus.OK); return new ResponseEntity<>(null, HttpStatus.OK);
} }
@RequestMapping(value = "/extraction/transformation", method = GET, produces = APPLICATION_JSON_VALUE) @RequestMapping(value = "/extraction/transformation", method = GET, produces = APPLICATION_JSON_VALUE)
public ResponseEntity<Object> extractAndTransform() { public ResponseEntity<List<PasienDto>> extractAndTransform() {
List<PasienDto> dto = migrasiPasienService.extractAndTransform(); List<PasienDto> result = migrasiPasienService.extractAndTransform();
return new ResponseEntity<>(dto, HttpStatus.OK); return new ResponseEntity<>(result, HttpStatus.OK);
}
@RequestMapping(value = "/status", method = POST, consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
public ResponseEntity<Object> setStatus(@RequestBody List<String> noRekamMedisList) {
try {
migrasiPasienService.setStatus(noRekamMedisList);
return new ResponseEntity<>(null, HttpStatus.ACCEPTED);
} catch (Exception e) {
return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
} }
} }

View File

@ -0,0 +1,69 @@
package com.jasamedika.medifirst2000.task.schedule;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.jasamedika.medifirst2000.service.MigrasiPasienService;
import com.jasamedika.medifirst2000.util.CommonUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.net.URI;
import java.net.URISyntaxException;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.jasamedika.medifirst2000.task.schedule.config.HeaderHandler.getHttpHeaders;
import static org.springframework.http.HttpMethod.GET;
/**
* @author salmanoe
* @version 1.0.0
* @since 11/10/2023
*/
@Component
public class MigrasiPasienTask {
private static final Logger LOGGER = LoggerFactory.getLogger(MigrasiPasienTask.class);
@Autowired
private RestTemplate restTemplate;
@Autowired
private ObjectMapper objectMapper;
@Autowired
private MigrasiPasienService migrasiPasienService;
@Value("${app.etl.migrasi.pasien}")
String baseUrl;
@Scheduled(cron = "0 0 18 * * ?")
public void newMigrate() {
LOGGER.info("Task MigrasiPasienTask.newMigrate {}", LocalDateTime.now());
migrasiPasienService.newMigrate();
}
@Scheduled(cron = "0 0 0 * * ?")
public void setStatusTerkirim() throws URISyntaxException {
LOGGER.info("Task MigrasiPasienTask.setStatusTerkirim {}", LocalDateTime.now());
URI uri = new URI(baseUrl + "/no-rekam-medis");
HttpEntity<Object> entity = new HttpEntity<>(null, getHttpHeaders());
ResponseEntity<Object> exchange = restTemplate.exchange(uri, GET, entity, Object.class);
if (CommonUtil.isNotNullOrEmpty(exchange.getBody())) {
Map<String, Object> dto = objectMapper.convertValue(exchange.getBody(), HashMap.class);
if (CommonUtil.isNotNullOrEmpty(dto) && CommonUtil.isNotNullOrEmpty(dto.get("response"))) {
List<String> noRekamMedisList = objectMapper.convertValue(dto.get("response"), List.class);
migrasiPasienService.setStatus(noRekamMedisList);
}
}
}
}

View File

@ -0,0 +1,24 @@
package com.jasamedika.medifirst2000.task.schedule.config;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import java.util.Collections;
import static org.springframework.http.MediaType.APPLICATION_JSON;
/**
* @author Salman
* @version 1.0.0
* @since 29/07/2024
*/
@Component
public class HeaderHandler {
public static HttpHeaders getHttpHeaders() {
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Collections.singletonList(APPLICATION_JSON));
headers.setContentType(APPLICATION_JSON);
return headers;
}
}

View File

@ -0,0 +1,38 @@
package com.jasamedika.medifirst2000.task.schedule.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.web.client.RestTemplate;
/**
* @author Salman
* @since 12 Jul 2023
*/
@Configuration
@EnableScheduling
@ComponentScan("com.jasamedika.medifirst2000.task")
public class ScheduleTaskConfig {
@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(50);
threadPoolTaskScheduler.setThreadNamePrefix("BridgingThreadPoolTaskScheduler");
return threadPoolTaskScheduler;
}
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper();
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}

View File

@ -15,7 +15,7 @@
</context-param> </context-param>
<context-param> <context-param>
<param-name>spring.profiles.default</param-name> <param-name>spring.profiles.default</param-name>
<param-value>bridging</param-value> <param-value>localhost</param-value>
</context-param> </context-param>
<listener> <listener>

View File

@ -15,6 +15,14 @@ import java.util.List;
* @since 06/11/2023 * @since 06/11/2023
*/ */
public interface MigrasiPasienDao extends JpaRepository<MigrasiPasien, String> { public interface MigrasiPasienDao extends JpaRepository<MigrasiPasien, String> {
@Query("select mp.pasien from MigrasiPasien mp where mp.statusMigrasi in (:listStatusMigrasi)") @Query("select ps from MigrasiPasien mp " + "inner join mp.pasien ps "
+ "where mp.statusMigrasi in (:listStatusMigrasi) " + "and ps.noIdentitas is not null "
+ "and ps.noIdentitas <> '' " + "and ps.noIdentitas <> '-'")
List<Pasien> findPasienByStatusMigrasiIn(@Param("listStatusMigrasi") List<StatusMigrasi> statusMigrasiList); List<Pasien> findPasienByStatusMigrasiIn(@Param("listStatusMigrasi") List<StatusMigrasi> statusMigrasiList);
@Query(value = "select mp.* from migrasipasien_t mp " + "inner join pasien_m ps on mp.pasienfk = ps.id "
+ "where mp.statusmigrasi in (:listStatusMigrasi) "
+ "and ps.nocm in (:listNoRekamMedis)", nativeQuery = true)
List<MigrasiPasien> findByStatusMigrasiInAndPasienNoCmIn(@Param("listStatusMigrasi") List<String> statusMigrasiList,
@Param("listNoRekamMedis") List<String> noRekamMedisList);
} }

View File

@ -127,7 +127,8 @@ public interface PasienDao extends JpaRepository<Pasien, Integer> {
@Query(value = "select ps.* from pasien_m ps " + "where ps.statusenabled is true " + "and ps.nocm ~ '^[0-9\\.]+$' " @Query(value = "select ps.* from pasien_m ps " + "where ps.statusenabled is true " + "and ps.nocm ~ '^[0-9\\.]+$' "
+ "and length(ps.nocm) = 8 " + "and cast(ps.nocm as integer) < 10000000 " + "and length(ps.nocm) = 8 " + "and cast(ps.nocm as integer) < 10000000 "
+ "and ps.id not in (select mp.pasienfk from migrasipasien_t mp) " + "and ps.id not in (select mp.pasienfk from migrasipasien_t mp) " + "and ps.noidentitas is not null "
+ "order by cast(ps.nocm as integer) desc " + "limit 100", nativeQuery = true) + "and ps.noidentitas <> '' " + "and ps.noidentitas <> '-' " + "order by cast(ps.nocm as integer) desc "
+ "limit 100", nativeQuery = true)
List<Pasien> find100LatestByNotMigrateYet(); List<Pasien> find100LatestByNotMigrateYet();
} }

View File

@ -10,7 +10,9 @@ import java.util.List;
* @since 06/11/2023 * @since 06/11/2023
*/ */
public interface MigrasiPasienService { public interface MigrasiPasienService {
void init(); void newMigrate();
List<PasienDto> extractAndTransform(); List<PasienDto> extractAndTransform();
void setStatus(List<String> noRekamMedisList);
} }

View File

@ -12,7 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.time.ZoneId; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -23,8 +23,7 @@ import static com.jasamedika.medifirst2000.etl.pasien.constant.JenisAlamat.IDENT
import static com.jasamedika.medifirst2000.etl.pasien.constant.JenisIdentitas.KTP; import static com.jasamedika.medifirst2000.etl.pasien.constant.JenisIdentitas.KTP;
import static com.jasamedika.medifirst2000.etl.pasien.constant.Pekerjaan.*; import static com.jasamedika.medifirst2000.etl.pasien.constant.Pekerjaan.*;
import static com.jasamedika.medifirst2000.etl.pasien.constant.Pendidikan.*; import static com.jasamedika.medifirst2000.etl.pasien.constant.Pendidikan.*;
import static com.jasamedika.medifirst2000.etl.pasien.constant.StatusMigrasi.BELUM_KIRIM; import static com.jasamedika.medifirst2000.etl.pasien.constant.StatusMigrasi.*;
import static com.jasamedika.medifirst2000.etl.pasien.constant.StatusMigrasi.PEMBAHARUAN;
import static com.jasamedika.medifirst2000.etl.pasien.constant.StatusPerkawinan.*; import static com.jasamedika.medifirst2000.etl.pasien.constant.StatusPerkawinan.*;
/** /**
@ -54,7 +53,7 @@ public class MigrasiPasienServiceImpl implements MigrasiPasienService {
private AsuransiPasienDao asuransiPasienDao; private AsuransiPasienDao asuransiPasienDao;
@Override @Override
public void init() { public void newMigrate() {
List<MigrasiPasien> models = new ArrayList<>(); List<MigrasiPasien> models = new ArrayList<>();
List<Pasien> oneHundredPasien = pasienDao.find100LatestByNotMigrateYet(); List<Pasien> oneHundredPasien = pasienDao.find100LatestByNotMigrateYet();
List<Integer> oneHundredIdPasien = oneHundredPasien.stream().map(Pasien::getId).collect(Collectors.toList()); List<Integer> oneHundredIdPasien = oneHundredPasien.stream().map(Pasien::getId).collect(Collectors.toList());
@ -72,133 +71,149 @@ public class MigrasiPasienServiceImpl implements MigrasiPasienService {
@Override @Override
public List<PasienDto> extractAndTransform() { public List<PasienDto> extractAndTransform() {
List<PasienDto> dtoList = new ArrayList<>();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
List<StatusMigrasi> statusMigrasiList = new ArrayList<>(Arrays.asList(BELUM_KIRIM, PEMBAHARUAN)); List<StatusMigrasi> statusMigrasiList = new ArrayList<>(Arrays.asList(BELUM_KIRIM, PEMBAHARUAN));
List<Pasien> listPasien = migrasiPasienDao.findPasienByStatusMigrasiIn(statusMigrasiList); List<Pasien> listPasien = migrasiPasienDao.findPasienByStatusMigrasiIn(statusMigrasiList);
List<Integer> listIdPasien = listPasien.stream().map(Pasien::getId).collect(Collectors.toList()); if (CommonUtil.isNotNullOrEmpty(listPasien)) {
List<String> listNoCmPasien = listPasien.stream().map(Pasien::getNoCm).collect(Collectors.toList()); List<Integer> listIdPasien = listPasien.stream().map(Pasien::getId).collect(Collectors.toList());
List<Map<String, Object>> listCaraMeninggal = pasienDaftarDao.findPenyebabKematianByPasienIdIn(listIdPasien); List<String> listNoCmPasien = listPasien.stream().map(Pasien::getNoCm).collect(Collectors.toList());
List<Alamat> listAlamat = alamatDao.findByPasienIdIn(listIdPasien); List<Map<String, Object>> listCaraMeninggal = pasienDaftarDao
List<DokumenVedika> listDokumenVedika = dokumenVedikaDao.findByPasienNoMrIn(listNoCmPasien); .findPenyebabKematianByPasienIdIn(listIdPasien);
List<Pasien> listPasienAnak = pasienDao.findAnakByNoCmOfIbu(listNoCmPasien); List<Alamat> listAlamat = alamatDao.findByPasienIdIn(listIdPasien);
List<AsuransiPasien> listAsuransi = asuransiPasienDao.findByPasienIdIn(listIdPasien); List<DokumenVedika> listDokumenVedika = dokumenVedikaDao.findByPasienNoMrIn(listNoCmPasien);
List<PasienDto> dtoList = new ArrayList<>(); List<Pasien> listPasienAnak = pasienDao.findAnakByNoCmOfIbu(listNoCmPasien);
listPasien.forEach(pasien -> { List<AsuransiPasien> listAsuransi = asuransiPasienDao.findByPasienIdIn(listIdPasien);
PasienDto.PasienDtoBuilder dtoBuilder = PasienDto.builder(); listPasien.forEach(pasien -> {
dtoBuilder.noRekamMedis(pasien.getNoCm()); PasienDto.PasienDtoBuilder dtoBuilder = PasienDto.builder();
dtoBuilder.namaLengkap(pasien.getNamaPasien()); dtoBuilder.status("AKTIF");
dtoBuilder.namaPanggilan(pasien.getNamaDepan()); dtoBuilder.noRekamMedis(Long.parseLong(pasien.getNoCm()));
dtoBuilder.tempatLahir(pasien.getTempatLahir()); dtoBuilder.namaLengkap(pasien.getNamaPasien());
if (CommonUtil.isNotNullOrEmpty(pasien.getTglLahir())) dtoBuilder.namaPanggilan(CommonUtil.isNotNullOrEmpty(pasien.getNamaDepan()) ? pasien.getNamaDepan()
dtoBuilder.tanggalLahir( : pasien.getNamaPasien().split(" ")[0]);
pasien.getTglLahir().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); dtoBuilder.isKelahiranRS(pasien.getNoCm().equals(pasien.getReportDisplay()));
dtoBuilder.surel(pasien.getEmail()); dtoBuilder.tempatLahir(pasien.getTempatLahir());
if (CommonUtil.isNotNullOrEmpty(pasien.getTitlePasienId())) dtoBuilder.caraRegistrasi("INTERNAL");
dtoBuilder.sapaan(SapaanDto.builder().id(pasien.getTitlePasienId().longValue()).build()); if (CommonUtil.isNotNullOrEmpty(pasien.getTglLahir()))
dtoBuilder.identitas(new HashSet<>(Collections.singletonList( dtoBuilder.tanggalLahir(dateFormat.format(pasien.getTglLahir()));
IdentitasDto.builder().jenisIdentitas(JenisIdentitasDto.builder().id(KTP.id()).build()) dtoBuilder.surel(pasien.getEmail());
.noIdentitas(pasien.getNoIdentitas()).build()))); if (CommonUtil.isNotNullOrEmpty(pasien.getTitlePasienId()))
if (CommonUtil.isNotNullOrEmpty(pasien.getJenisKelaminId())) dtoBuilder.sapaan(SapaanDto.builder().id(pasien.getTitlePasienId().longValue()).build());
dtoBuilder.jenisKelamin(JenisKelaminDto.builder().id(pasien.getJenisKelaminId().longValue()).build()); dtoBuilder.identitas(new HashSet<>(Collections.singletonList(
if (CommonUtil.isNotNullOrEmpty(pasien.getGolonganDarahId())) IdentitasDto.builder().jenisIdentitas(JenisIdentitasDto.builder().id(KTP.id()).build())
dtoBuilder .noIdentitas(pasien.getNoIdentitas()).build())));
.golonganDarah(GolonganDarahDto.builder().id(pasien.getGolonganDarahId().longValue()).build()); if (CommonUtil.isNotNullOrEmpty(pasien.getJenisKelaminId()))
listCaraMeninggal.stream().filter(c -> pasien.getId().equals(c.get("idPasien"))).findFirst() dtoBuilder
.ifPresent(c -> { .jenisKelamin(JenisKelaminDto.builder().id(pasien.getJenisKelaminId().longValue()).build());
if (CommonUtil.isNotNullOrEmpty(c.get("idPenyebabKematian"))) { if (CommonUtil.isNotNullOrEmpty(pasien.getGolonganDarahId()) && pasien.getGolonganDarahId() != 0)
if (Master.CaraMeninggal.BAWAH_DAN_48_JAM.equals(c.get("idPenyebabKematian"))) dtoBuilder.golonganDarah(
dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(BAWAH_DAN_48_JAM.id()).build()); GolonganDarahDto.builder().id(pasien.getGolonganDarahId().longValue()).build());
if (Master.CaraMeninggal.ATAS_48_JAM.equals(c.get("idPenyebabKematian"))) listCaraMeninggal.stream().filter(c -> pasien.getId().equals(c.get("idPasien"))).findFirst()
dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(ATAS_48_JAM.id()).build()); .ifPresent(c -> {
if (Master.CaraMeninggal.BAWAH_DAN_8_JAM.equals(c.get("idPenyebabKematian"))) if (CommonUtil.isNotNullOrEmpty(c.get("idPenyebabKematian"))) {
dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(BAWAH_DAN_8_JAM.id()).build()); if (Master.CaraMeninggal.BAWAH_DAN_48_JAM.equals(c.get("idPenyebabKematian")))
if (Master.CaraMeninggal.ATAS_8_JAM.equals(c.get("idPenyebabKematian"))) dtoBuilder.caraMeninggal(
dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(ATAS_8_JAM.id()).build()); CaraMeninggalDto.builder().id(BAWAH_DAN_48_JAM.id()).build());
if (Master.CaraMeninggal.DOA.equals(c.get("idPenyebabKematian"))) if (Master.CaraMeninggal.ATAS_48_JAM.equals(c.get("idPenyebabKematian")))
dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(DOA.id()).build()); dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(ATAS_48_JAM.id()).build());
if (Master.CaraMeninggal.BLUECODE.equals(c.get("idPenyebabKematian"))) if (Master.CaraMeninggal.BAWAH_DAN_8_JAM.equals(c.get("idPenyebabKematian")))
dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(BLUECODE.id()).build()); dtoBuilder
if (Arrays.asList(Master.CaraMeninggal.LAHIR) .caraMeninggal(CaraMeninggalDto.builder().id(BAWAH_DAN_8_JAM.id()).build());
.contains(Integer.parseInt(c.get("idPenyebabKematian").toString()))) if (Master.CaraMeninggal.ATAS_8_JAM.equals(c.get("idPenyebabKematian")))
dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(LAHIR.id()).build()); dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(ATAS_8_JAM.id()).build());
} if (Master.CaraMeninggal.DOA.equals(c.get("idPenyebabKematian")))
}); dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(DOA.id()).build());
if (CommonUtil.isNotNullOrEmpty(pasien.getKebangsaanId())) if (Master.CaraMeninggal.BLUECODE.equals(c.get("idPenyebabKematian")))
dtoBuilder dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(BLUECODE.id()).build());
.kewarganegaraan(KewarganegaraanDto.builder().id(pasien.getKebangsaanId().longValue()).build()); if (Arrays.asList(Master.CaraMeninggal.LAHIR)
if (CommonUtil.isNotNullOrEmpty(pasien.getNegaraId())) .contains(Integer.parseInt(c.get("idPenyebabKematian").toString())))
dtoBuilder.negara(NegaraDto.builder().id(pasien.getNegaraId().longValue()).build()); dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(LAHIR.id()).build());
if (CommonUtil.isNotNullOrEmpty(pasien.getAgamaId())) }
dtoBuilder.agama(AgamaDto.builder().id(pasien.getAgamaId().longValue()).build()); });
{ if (CommonUtil.isNotNullOrEmpty(pasien.getKebangsaanId()))
if (Master.Pendidikan.TIDAK_SEKOLAH.equals(pasien.getPendidikanId())) dtoBuilder.kewarganegaraan(
dtoBuilder.pendidikan(PendidikanDto.builder().id(TIDAK_SEKOLAH.id()).build()); KewarganegaraanDto.builder().id(pasien.getKebangsaanId().longValue()).build());
if (Master.Pendidikan.SD.equals(pasien.getPendidikanId())) if (CommonUtil.isNotNullOrEmpty(pasien.getNegaraId()))
dtoBuilder.pendidikan(PendidikanDto.builder().id(SD.id()).build()); dtoBuilder.negara(NegaraDto.builder().id(pasien.getNegaraId().longValue()).build());
if (Master.Pendidikan.SLTP_SEDERAJAT.equals(pasien.getPendidikanId())) if (CommonUtil.isNotNullOrEmpty(pasien.getAgamaId()))
dtoBuilder.pendidikan(PendidikanDto.builder().id(SLTP_SEDERAJAT.id()).build()); dtoBuilder.agama(AgamaDto.builder().id(pasien.getAgamaId().longValue()).build());
if (Master.Pendidikan.SLTA_SEDERAJAT.equals(pasien.getPendidikanId())) {
dtoBuilder.pendidikan(PendidikanDto.builder().id(SLTA_SEDERAJAT.id()).build()); if (Master.Pendidikan.TIDAK_SEKOLAH.equals(pasien.getPendidikanId()))
if (Arrays.asList(Master.Pendidikan.D1_SAMPAI_D3_SEDERAJAT).contains(pasien.getPendidikanId())) dtoBuilder.pendidikan(PendidikanDto.builder().id(TIDAK_SEKOLAH.id()).build());
dtoBuilder.pendidikan(PendidikanDto.builder().id(D1_SAMPAI_D3_SEDERAJAT.id()).build()); if (Master.Pendidikan.SD.equals(pasien.getPendidikanId()))
if (Master.Pendidikan.D4.equals(pasien.getPendidikanId())) dtoBuilder.pendidikan(PendidikanDto.builder().id(SD.id()).build());
dtoBuilder.pendidikan(PendidikanDto.builder().id(D4.id()).build()); if (Master.Pendidikan.SLTP_SEDERAJAT.equals(pasien.getPendidikanId()))
if (Master.Pendidikan.S1.equals(pasien.getPendidikanId())) dtoBuilder.pendidikan(PendidikanDto.builder().id(SLTP_SEDERAJAT.id()).build());
dtoBuilder.pendidikan(PendidikanDto.builder().id(S1.id()).build()); if (Master.Pendidikan.SLTA_SEDERAJAT.equals(pasien.getPendidikanId()))
if (Master.Pendidikan.S2.equals(pasien.getPendidikanId())) dtoBuilder.pendidikan(PendidikanDto.builder().id(SLTA_SEDERAJAT.id()).build());
dtoBuilder.pendidikan(PendidikanDto.builder().id(S2.id()).build()); if (Arrays.asList(Master.Pendidikan.D1_SAMPAI_D3_SEDERAJAT).contains(pasien.getPendidikanId()))
if (Master.Pendidikan.S3.equals(pasien.getPendidikanId())) dtoBuilder.pendidikan(PendidikanDto.builder().id(D1_SAMPAI_D3_SEDERAJAT.id()).build());
dtoBuilder.pendidikan(PendidikanDto.builder().id(S3.id()).build()); if (Master.Pendidikan.D4.equals(pasien.getPendidikanId()))
} dtoBuilder.pendidikan(PendidikanDto.builder().id(D4.id()).build());
{ if (Master.Pendidikan.S1.equals(pasien.getPendidikanId()))
List<Alamat> alamatPasien = listAlamat.stream() dtoBuilder.pendidikan(PendidikanDto.builder().id(S1.id()).build());
.filter(alamat -> pasien.getId().equals(alamat.getPasienId())).collect(Collectors.toList()); if (Master.Pendidikan.S2.equals(pasien.getPendidikanId()))
dtoBuilder.alamat(setAlamat(alamatPasien)); dtoBuilder.pendidikan(PendidikanDto.builder().id(S2.id()).build());
} if (Master.Pendidikan.S3.equals(pasien.getPendidikanId()))
{ dtoBuilder.pendidikan(PendidikanDto.builder().id(S3.id()).build());
Set<GawaiDto> gawaiDto = new HashSet<>(); }
if (NumberUtils.isNumber(pasien.getNoTelepon()) && pasien.getNoTelepon().charAt(0) == '0') {
gawaiDto.add(GawaiDto.builder().noGawai(Long.parseLong("62" + pasien.getNoTelepon())).build()); List<Alamat> alamatPasien = listAlamat.stream()
if (NumberUtils.isNumber(pasien.getNoHp()) && pasien.getNoHp().charAt(0) == '0') .filter(alamat -> pasien.getId().equals(alamat.getPasienId())).collect(Collectors.toList());
gawaiDto.add(GawaiDto.builder().noGawai(Long.parseLong("62" + pasien.getNoHp())).build()); dtoBuilder.alamat(setAlamat(alamatPasien));
dtoBuilder.gawai(gawaiDto); }
} {
{ Set<GawaiDto> gawaiDto = new HashSet<>();
if (Master.Pekerjaan.TIDAK_BEKERJA.equals(pasien.getPekerjaanId())) if (NumberUtils.isNumber(pasien.getNoTelepon()) && pasien.getNoTelepon().charAt(0) == '0')
dtoBuilder.pekerjaan(PekerjaanDto.builder().id(TIDAK_BEKERJA.id()).build()); gawaiDto.add(
if (Master.Pekerjaan.PNS.equals(pasien.getPekerjaanId())) GawaiDto.builder().noGawai(Long.parseLong("62" + numbersOnly(pasien.getNoTelepon())))
dtoBuilder.pekerjaan(PekerjaanDto.builder().id(PNS.id()).build()); .jenisGawai(JenisGawaiDto.builder().id(1L).build()).build());
if (Master.Pekerjaan.TNI_ATAU_POLRI.equals(pasien.getPekerjaanId())) if (NumberUtils.isNumber(pasien.getNoHp()) && pasien.getNoHp().charAt(0) == '0')
dtoBuilder.pekerjaan(PekerjaanDto.builder().id(TNI_ATAU_POLRI.id()).build()); gawaiDto.add(GawaiDto.builder().noGawai(Long.parseLong("62" + numbersOnly(pasien.getNoHp())))
if (Master.Pekerjaan.BUMN.equals(pasien.getPekerjaanId())) .jenisGawai(JenisGawaiDto.builder().id(2L).build()).build());
dtoBuilder.pekerjaan(PekerjaanDto.builder().id(BUMN.id()).build()); dtoBuilder.gawai(gawaiDto);
if (Arrays.asList(Master.Pekerjaan.PEGAWAI_SWASTA_ATAU_WIRAUSAHA).contains(pasien.getPekerjaanId())) }
dtoBuilder.pekerjaan(PekerjaanDto.builder().id(PEGAWAI_SWASTA_ATAU_WIRAUSAHA.id()).build()); {
} if (Master.Pekerjaan.TIDAK_BEKERJA.equals(pasien.getPekerjaanId()))
{ dtoBuilder.pekerjaan(PekerjaanDto.builder().id(TIDAK_BEKERJA.id()).build());
if (Master.StatusPerkawinan.BELUM_KAWIN.equals(pasien.getStatusPerkawinanId())) if (Master.Pekerjaan.PNS.equals(pasien.getPekerjaanId()))
dtoBuilder.statusPerkawinan(StatusPerkawinanDto.builder().id(BELUM_KAWIN.id()).build()); dtoBuilder.pekerjaan(PekerjaanDto.builder().id(PNS.id()).build());
if (Master.StatusPerkawinan.KAWIN.equals(pasien.getStatusPerkawinanId())) if (Master.Pekerjaan.TNI_ATAU_POLRI.equals(pasien.getPekerjaanId()))
dtoBuilder.statusPerkawinan(StatusPerkawinanDto.builder().id(KAWIN.id()).build()); dtoBuilder.pekerjaan(PekerjaanDto.builder().id(TNI_ATAU_POLRI.id()).build());
if (Master.StatusPerkawinan.CERAI_HIDUP.equals(pasien.getStatusPerkawinanId())) if (Master.Pekerjaan.BUMN.equals(pasien.getPekerjaanId()))
dtoBuilder.statusPerkawinan(StatusPerkawinanDto.builder().id(CERAI_HIDUP.id()).build()); dtoBuilder.pekerjaan(PekerjaanDto.builder().id(BUMN.id()).build());
if (Master.StatusPerkawinan.CERAI_MATI.equals(pasien.getStatusPerkawinanId())) if (Arrays.asList(Master.Pekerjaan.PEGAWAI_SWASTA_ATAU_WIRAUSAHA).contains(pasien.getPekerjaanId()))
dtoBuilder.statusPerkawinan(StatusPerkawinanDto.builder().id(CERAI_MATI.id()).build()); dtoBuilder.pekerjaan(PekerjaanDto.builder().id(PEGAWAI_SWASTA_ATAU_WIRAUSAHA.id()).build());
} }
{ {
dtoBuilder.berkas(setBerkas(listDokumenVedika)); if (Master.StatusPerkawinan.KAWIN.equals(pasien.getStatusPerkawinanId())) {
} dtoBuilder.statusPerkawinan(StatusPerkawinanDto.builder().id(KAWIN.id()).build());
{ } else if (Master.StatusPerkawinan.CERAI_HIDUP.equals(pasien.getStatusPerkawinanId())) {
List<Pasien> pasienAnak = listPasienAnak.stream() dtoBuilder.statusPerkawinan(StatusPerkawinanDto.builder().id(CERAI_HIDUP.id()).build());
.filter(anak -> pasien.getNoCm().equals(anak.getReportDisplay())).collect(Collectors.toList()); } else if (Master.StatusPerkawinan.CERAI_MATI.equals(pasien.getStatusPerkawinanId())) {
dtoBuilder.keluarga(setAnak(pasienAnak)); dtoBuilder.statusPerkawinan(StatusPerkawinanDto.builder().id(CERAI_MATI.id()).build());
} } else {
{ dtoBuilder.statusPerkawinan(StatusPerkawinanDto.builder().id(BELUM_KAWIN.id()).build());
List<AsuransiPasien> asuransiPasien = listAsuransi.stream() }
.filter(asuransi -> pasien.getId().equals(asuransi.getNoCmId())).collect(Collectors.toList()); }
dtoBuilder.jaminan(setJaminan(asuransiPasien)); {
} dtoBuilder.berkas(setBerkas(listDokumenVedika));
dtoList.add(dtoBuilder.build()); }
}); {
List<Pasien> pasienAnak = listPasienAnak.stream()
.filter(anak -> pasien.getNoCm().equals(anak.getReportDisplay()))
.collect(Collectors.toList());
dtoBuilder.keluarga(setAnak(pasienAnak));
}
{
List<AsuransiPasien> asuransiPasien = listAsuransi.stream()
.filter(asuransi -> pasien.getId().equals(asuransi.getNoCmId()))
.collect(Collectors.toList());
dtoBuilder.jaminan(setJaminan(asuransiPasien));
}
dtoList.add(dtoBuilder.build());
});
}
return dtoList; return dtoList;
} }
@ -218,7 +233,8 @@ public class MigrasiPasienServiceImpl implements MigrasiPasienService {
{ {
if (Master.JenisAlamat.IDENTITAS.equals(alamat.getJenisAlamatId())) if (Master.JenisAlamat.IDENTITAS.equals(alamat.getJenisAlamatId()))
dtoBuilder.jenisAlamat(JenisAlamatDto.builder().id(IDENTITAS.id()).build()); dtoBuilder.jenisAlamat(JenisAlamatDto.builder().id(IDENTITAS.id()).build());
if (Master.JenisAlamat.DOMISILI.equals(alamat.getJenisAlamatId())) if (Master.JenisAlamat.DOMISILI.equals(alamat.getJenisAlamatId())
|| Master.JenisAlamat.RUMAH.equals(alamat.getJenisAlamatId()))
dtoBuilder.jenisAlamat(JenisAlamatDto.builder().id(DOMISILI.id()).build()); dtoBuilder.jenisAlamat(JenisAlamatDto.builder().id(DOMISILI.id()).build());
} }
if (CommonUtil.isNotNullOrEmpty(alamat.getDesaKelurahan()) if (CommonUtil.isNotNullOrEmpty(alamat.getDesaKelurahan())
@ -237,7 +253,7 @@ public class MigrasiPasienServiceImpl implements MigrasiPasienService {
listDokumenVedika.forEach(dokumenVedika -> { listDokumenVedika.forEach(dokumenVedika -> {
BerkasDto.BerkasDtoBuilder dtoBuilder = BerkasDto.builder(); BerkasDto.BerkasDtoBuilder dtoBuilder = BerkasDto.builder();
dtoBuilder.judulBerkas(dokumenVedika.getNamaFile()); dtoBuilder.judulBerkas(dokumenVedika.getNamaFile());
dtoBuilder.lokasiBerkas(dokumenVedika.getUrl()); dtoBuilder.lss(dokumenVedika.getUrl());
if (CommonUtil.isNotNullOrEmpty(dokumenVedika.getJenisBerkasId())) if (CommonUtil.isNotNullOrEmpty(dokumenVedika.getJenisBerkasId()))
dtoBuilder dtoBuilder
.jenisBerkas(JenisBerkasDto.builder().id(dokumenVedika.getJenisBerkasId().longValue()).build()); .jenisBerkas(JenisBerkasDto.builder().id(dokumenVedika.getJenisBerkasId().longValue()).build());
@ -254,7 +270,7 @@ public class MigrasiPasienServiceImpl implements MigrasiPasienService {
dtoBuilder.namaPanggilan(anak.getNamaDepan()); dtoBuilder.namaPanggilan(anak.getNamaDepan());
dtoBuilder.surel(anak.getEmail()); dtoBuilder.surel(anak.getEmail());
if (NumberUtils.isNumber(anak.getNoHp()) && anak.getNoHp().charAt(0) == '0') if (NumberUtils.isNumber(anak.getNoHp()) && anak.getNoHp().charAt(0) == '0')
dtoBuilder.noGawai(Long.parseLong("62" + anak.getNoHp())); dtoBuilder.noGawai(Long.parseLong("62" + numbersOnly(anak.getNoHp())));
dtoBuilder.hubunganKeluarga(HubunganKeluargaDto.builder().id(ANAK.id()).build()); dtoBuilder.hubunganKeluarga(HubunganKeluargaDto.builder().id(ANAK.id()).build());
dtoList.add(dtoBuilder.build()); dtoList.add(dtoBuilder.build());
}); });
@ -265,11 +281,27 @@ public class MigrasiPasienServiceImpl implements MigrasiPasienService {
Set<JaminanDto> dtoList = new HashSet<>(); Set<JaminanDto> dtoList = new HashSet<>();
listAsuransiPasien.forEach(asuransi -> { listAsuransiPasien.forEach(asuransi -> {
JaminanDto.JaminanDtoBuilder dtoBuilder = JaminanDto.builder(); JaminanDto.JaminanDtoBuilder dtoBuilder = JaminanDto.builder();
dtoBuilder.nomorKartu(asuransi.getNoAsuransi()); if (CommonUtil.isNotNullOrEmpty(asuransi.getNoAsuransi()) && !"-".equals(asuransi.getNoAsuransi())) {
if (CommonUtil.isNotNullOrEmpty(asuransi.getRekanan())) dtoBuilder.nomorKartu(asuransi.getNoAsuransi());
dtoBuilder.asuransi(AsuransiDto.builder().asuransi(asuransi.getRekanan().getNamaRekanan()).build()); if (CommonUtil.isNotNullOrEmpty(asuransi.getRekanan()))
dtoList.add(dtoBuilder.build()); dtoBuilder.asuransi(AsuransiDto.builder().asuransi(asuransi.getRekanan().getNamaRekanan()).build());
dtoList.add(dtoBuilder.build());
}
}); });
return dtoList; return dtoList;
} }
private String numbersOnly(String str) {
return str.replaceAll("\\D", "");
}
@Override
public void setStatus(List<String> noRekamMedisList) {
List<String> statusMigrasiList = new ArrayList<>(Arrays.asList(BELUM_KIRIM, PEMBAHARUAN)).stream()
.map(Enum::toString).collect(Collectors.toList());
List<MigrasiPasien> listMigrasiPasien = migrasiPasienDao.findByStatusMigrasiInAndPasienNoCmIn(statusMigrasiList,
noRekamMedisList);
listMigrasiPasien.forEach(migrasiPasien -> migrasiPasien.setStatusMigrasi(TERKIRIM));
migrasiPasienDao.save(listMigrasiPasien);
}
} }

View File

@ -22,4 +22,6 @@ systemDirectory=/mnt/files/
reportDirectory=/home/svradmin/app-back/uploadfile/ reportDirectory=/home/svradmin/app-back/uploadfile/
urlServiceSarPras=https://smart.rsabhk.co.id:2222/jasamedika-web/ urlServiceSarPras=https://smart.rsabhk.co.id:2222/jasamedika-web/
urlService=https://smart.rsabhk.co.id:2222/simrs_harkit/service/transaksi/ urlService=https://smart.rsabhk.co.id:2222/simrs_harkit/service/transaksi/
app.etl.migrasi.pasien=http://localhost:8081/simrs/pasien/migrasi

View File

@ -22,4 +22,6 @@ systemDirectory=/mnt/files/
reportDirectory=/home/svradmin/app-back/uploadfile/ reportDirectory=/home/svradmin/app-back/uploadfile/
urlServiceSarPras=http://192.168.12.3:8080/jasamedika-web/ urlServiceSarPras=http://192.168.12.3:8080/jasamedika-web/
urlService=http://192.168.12.3:5555/simrs_harkit/service/transaksi/ urlService=http://192.168.12.3:5555/simrs_harkit/service/transaksi/
app.etl.migrasi.pasien=http://localhost:8081/simrs/pasien/migrasi

View File

@ -1,7 +1,7 @@
jdbc.driver = org.postgresql.Driver jdbc.driver = org.postgresql.Driver
hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
hibernate.hbm2ddl = update hibernate.hbm2ddl = none
hibernate.format_sql = true hibernate.format_sql = true
hibernate.show_sql = true hibernate.show_sql = true
@ -22,4 +22,6 @@ systemDirectory=/mnt/files/
reportDirectory=/home/svradmin/app-back/uploadfile/ reportDirectory=/home/svradmin/app-back/uploadfile/
urlServiceSarPras=http://192.168.12.3:8080/jasamedika-web/ urlServiceSarPras=http://192.168.12.3:8080/jasamedika-web/
urlService=http://192.168.12.3:5555/simrs_harkit/service/transaksi/ urlService=http://192.168.12.3:5555/simrs_harkit/service/transaksi/
app.etl.migrasi.pasien=http://localhost:8081/simrs/pasien/migrasi

View File

@ -17,5 +17,5 @@ public class BerkasDto {
private UUID id; private UUID id;
private JenisBerkasDto jenisBerkas; private JenisBerkasDto jenisBerkas;
private String judulBerkas; private String judulBerkas;
private String lokasiBerkas; private String lss;
} }

View File

@ -19,4 +19,5 @@ import java.util.UUID;
public class GawaiDto { public class GawaiDto {
private UUID id; private UUID id;
private Long noGawai; private Long noGawai;
private JenisGawaiDto jenisGawai;
} }

View File

@ -0,0 +1,22 @@
package com.jasamedika.medifirst2000.etl.pasien.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
/**
* @author Salman
* @version 1.0.0
* @since 27/07/2024
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class JenisGawaiDto {
private Long id;
private String jenisGawai;
}

View File

@ -1,8 +1,10 @@
package com.jasamedika.medifirst2000.etl.pasien.dto; package com.jasamedika.medifirst2000.etl.pasien.dto;
import lombok.*; import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
@ -17,15 +19,17 @@ import java.util.UUID;
@NoArgsConstructor @NoArgsConstructor
public class PasienDto { public class PasienDto {
private UUID id; private UUID id;
private String noRekamMedis; private String status;
private Long noRekamMedis;
private String gelarDepan; private String gelarDepan;
private String namaLengkap; private String namaLengkap;
private String namaPanggilan; private String namaPanggilan;
private String gelarBelakang; private String gelarBelakang;
private Boolean isKelahiranRS;
private SapaanDto sapaan; private SapaanDto sapaan;
private Set<IdentitasDto> identitas; private Set<IdentitasDto> identitas;
private String tempatLahir; private String tempatLahir;
private LocalDateTime tanggalLahir; private String tanggalLahir;
private JenisKelaminDto jenisKelamin; private JenisKelaminDto jenisKelamin;
private GolonganDarahDto golonganDarah; private GolonganDarahDto golonganDarah;
private GolonganResusDto golonganResus; private GolonganResusDto golonganResus;
@ -46,4 +50,5 @@ public class PasienDto {
private Set<BerkasDto> berkas; private Set<BerkasDto> berkas;
private Set<KeluargaDto> keluarga; private Set<KeluargaDto> keluarga;
private Set<JaminanDto> jaminan; private Set<JaminanDto> jaminan;
private String caraRegistrasi;
} }