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.http.HttpStatus;
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.RestController;
@ -12,6 +13,7 @@ import java.util.List;
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.POST;
/**
* @author Salman
@ -27,13 +29,23 @@ public class MigrasiPasienController {
@RequestMapping(value = "/init", method = GET, produces = APPLICATION_JSON_VALUE)
public ResponseEntity<Object> initiateMigrasiPasien() {
migrasiPasienService.init();
migrasiPasienService.newMigrate();
return new ResponseEntity<>(null, HttpStatus.OK);
}
@RequestMapping(value = "/extraction/transformation", method = GET, produces = APPLICATION_JSON_VALUE)
public ResponseEntity<Object> extractAndTransform() {
List<PasienDto> dto = migrasiPasienService.extractAndTransform();
return new ResponseEntity<>(dto, HttpStatus.OK);
public ResponseEntity<List<PasienDto>> extractAndTransform() {
List<PasienDto> result = migrasiPasienService.extractAndTransform();
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>
<param-name>spring.profiles.default</param-name>
<param-value>bridging</param-value>
<param-value>localhost</param-value>
</context-param>
<listener>

View File

@ -15,6 +15,14 @@ import java.util.List;
* @since 06/11/2023
*/
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);
@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\\.]+$' "
+ "and length(ps.nocm) = 8 " + "and cast(ps.nocm as integer) < 10000000 "
+ "and ps.id not in (select mp.pasienfk from migrasipasien_t mp) "
+ "order by cast(ps.nocm as integer) desc " + "limit 100", nativeQuery = true)
+ "and ps.id not in (select mp.pasienfk from migrasipasien_t mp) " + "and ps.noidentitas is not null "
+ "and ps.noidentitas <> '' " + "and ps.noidentitas <> '-' " + "order by cast(ps.nocm as integer) desc "
+ "limit 100", nativeQuery = true)
List<Pasien> find100LatestByNotMigrateYet();
}

View File

@ -10,7 +10,9 @@ import java.util.List;
* @since 06/11/2023
*/
public interface MigrasiPasienService {
void init();
void newMigrate();
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.transaction.annotation.Transactional;
import java.time.ZoneId;
import java.text.SimpleDateFormat;
import java.util.*;
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.Pekerjaan.*;
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.PEMBAHARUAN;
import static com.jasamedika.medifirst2000.etl.pasien.constant.StatusMigrasi.*;
import static com.jasamedika.medifirst2000.etl.pasien.constant.StatusPerkawinan.*;
/**
@ -54,7 +53,7 @@ public class MigrasiPasienServiceImpl implements MigrasiPasienService {
private AsuransiPasienDao asuransiPasienDao;
@Override
public void init() {
public void newMigrate() {
List<MigrasiPasien> models = new ArrayList<>();
List<Pasien> oneHundredPasien = pasienDao.find100LatestByNotMigrateYet();
List<Integer> oneHundredIdPasien = oneHundredPasien.stream().map(Pasien::getId).collect(Collectors.toList());
@ -72,133 +71,149 @@ public class MigrasiPasienServiceImpl implements MigrasiPasienService {
@Override
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<Pasien> listPasien = migrasiPasienDao.findPasienByStatusMigrasiIn(statusMigrasiList);
List<Integer> listIdPasien = listPasien.stream().map(Pasien::getId).collect(Collectors.toList());
List<String> listNoCmPasien = listPasien.stream().map(Pasien::getNoCm).collect(Collectors.toList());
List<Map<String, Object>> listCaraMeninggal = pasienDaftarDao.findPenyebabKematianByPasienIdIn(listIdPasien);
List<Alamat> listAlamat = alamatDao.findByPasienIdIn(listIdPasien);
List<DokumenVedika> listDokumenVedika = dokumenVedikaDao.findByPasienNoMrIn(listNoCmPasien);
List<Pasien> listPasienAnak = pasienDao.findAnakByNoCmOfIbu(listNoCmPasien);
List<AsuransiPasien> listAsuransi = asuransiPasienDao.findByPasienIdIn(listIdPasien);
List<PasienDto> dtoList = new ArrayList<>();
listPasien.forEach(pasien -> {
PasienDto.PasienDtoBuilder dtoBuilder = PasienDto.builder();
dtoBuilder.noRekamMedis(pasien.getNoCm());
dtoBuilder.namaLengkap(pasien.getNamaPasien());
dtoBuilder.namaPanggilan(pasien.getNamaDepan());
dtoBuilder.tempatLahir(pasien.getTempatLahir());
if (CommonUtil.isNotNullOrEmpty(pasien.getTglLahir()))
dtoBuilder.tanggalLahir(
pasien.getTglLahir().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
dtoBuilder.surel(pasien.getEmail());
if (CommonUtil.isNotNullOrEmpty(pasien.getTitlePasienId()))
dtoBuilder.sapaan(SapaanDto.builder().id(pasien.getTitlePasienId().longValue()).build());
dtoBuilder.identitas(new HashSet<>(Collections.singletonList(
IdentitasDto.builder().jenisIdentitas(JenisIdentitasDto.builder().id(KTP.id()).build())
.noIdentitas(pasien.getNoIdentitas()).build())));
if (CommonUtil.isNotNullOrEmpty(pasien.getJenisKelaminId()))
dtoBuilder.jenisKelamin(JenisKelaminDto.builder().id(pasien.getJenisKelaminId().longValue()).build());
if (CommonUtil.isNotNullOrEmpty(pasien.getGolonganDarahId()))
dtoBuilder
.golonganDarah(GolonganDarahDto.builder().id(pasien.getGolonganDarahId().longValue()).build());
listCaraMeninggal.stream().filter(c -> pasien.getId().equals(c.get("idPasien"))).findFirst()
.ifPresent(c -> {
if (CommonUtil.isNotNullOrEmpty(c.get("idPenyebabKematian"))) {
if (Master.CaraMeninggal.BAWAH_DAN_48_JAM.equals(c.get("idPenyebabKematian")))
dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(BAWAH_DAN_48_JAM.id()).build());
if (Master.CaraMeninggal.ATAS_48_JAM.equals(c.get("idPenyebabKematian")))
dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(ATAS_48_JAM.id()).build());
if (Master.CaraMeninggal.BAWAH_DAN_8_JAM.equals(c.get("idPenyebabKematian")))
dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(BAWAH_DAN_8_JAM.id()).build());
if (Master.CaraMeninggal.ATAS_8_JAM.equals(c.get("idPenyebabKematian")))
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 (Master.CaraMeninggal.BLUECODE.equals(c.get("idPenyebabKematian")))
dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(BLUECODE.id()).build());
if (Arrays.asList(Master.CaraMeninggal.LAHIR)
.contains(Integer.parseInt(c.get("idPenyebabKematian").toString())))
dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(LAHIR.id()).build());
}
});
if (CommonUtil.isNotNullOrEmpty(pasien.getKebangsaanId()))
dtoBuilder
.kewarganegaraan(KewarganegaraanDto.builder().id(pasien.getKebangsaanId().longValue()).build());
if (CommonUtil.isNotNullOrEmpty(pasien.getNegaraId()))
dtoBuilder.negara(NegaraDto.builder().id(pasien.getNegaraId().longValue()).build());
if (CommonUtil.isNotNullOrEmpty(pasien.getAgamaId()))
dtoBuilder.agama(AgamaDto.builder().id(pasien.getAgamaId().longValue()).build());
{
if (Master.Pendidikan.TIDAK_SEKOLAH.equals(pasien.getPendidikanId()))
dtoBuilder.pendidikan(PendidikanDto.builder().id(TIDAK_SEKOLAH.id()).build());
if (Master.Pendidikan.SD.equals(pasien.getPendidikanId()))
dtoBuilder.pendidikan(PendidikanDto.builder().id(SD.id()).build());
if (Master.Pendidikan.SLTP_SEDERAJAT.equals(pasien.getPendidikanId()))
dtoBuilder.pendidikan(PendidikanDto.builder().id(SLTP_SEDERAJAT.id()).build());
if (Master.Pendidikan.SLTA_SEDERAJAT.equals(pasien.getPendidikanId()))
dtoBuilder.pendidikan(PendidikanDto.builder().id(SLTA_SEDERAJAT.id()).build());
if (Arrays.asList(Master.Pendidikan.D1_SAMPAI_D3_SEDERAJAT).contains(pasien.getPendidikanId()))
dtoBuilder.pendidikan(PendidikanDto.builder().id(D1_SAMPAI_D3_SEDERAJAT.id()).build());
if (Master.Pendidikan.D4.equals(pasien.getPendidikanId()))
dtoBuilder.pendidikan(PendidikanDto.builder().id(D4.id()).build());
if (Master.Pendidikan.S1.equals(pasien.getPendidikanId()))
dtoBuilder.pendidikan(PendidikanDto.builder().id(S1.id()).build());
if (Master.Pendidikan.S2.equals(pasien.getPendidikanId()))
dtoBuilder.pendidikan(PendidikanDto.builder().id(S2.id()).build());
if (Master.Pendidikan.S3.equals(pasien.getPendidikanId()))
dtoBuilder.pendidikan(PendidikanDto.builder().id(S3.id()).build());
}
{
List<Alamat> alamatPasien = listAlamat.stream()
.filter(alamat -> pasien.getId().equals(alamat.getPasienId())).collect(Collectors.toList());
dtoBuilder.alamat(setAlamat(alamatPasien));
}
{
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());
if (NumberUtils.isNumber(pasien.getNoHp()) && pasien.getNoHp().charAt(0) == '0')
gawaiDto.add(GawaiDto.builder().noGawai(Long.parseLong("62" + pasien.getNoHp())).build());
dtoBuilder.gawai(gawaiDto);
}
{
if (Master.Pekerjaan.TIDAK_BEKERJA.equals(pasien.getPekerjaanId()))
dtoBuilder.pekerjaan(PekerjaanDto.builder().id(TIDAK_BEKERJA.id()).build());
if (Master.Pekerjaan.PNS.equals(pasien.getPekerjaanId()))
dtoBuilder.pekerjaan(PekerjaanDto.builder().id(PNS.id()).build());
if (Master.Pekerjaan.TNI_ATAU_POLRI.equals(pasien.getPekerjaanId()))
dtoBuilder.pekerjaan(PekerjaanDto.builder().id(TNI_ATAU_POLRI.id()).build());
if (Master.Pekerjaan.BUMN.equals(pasien.getPekerjaanId()))
dtoBuilder.pekerjaan(PekerjaanDto.builder().id(BUMN.id()).build());
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.StatusPerkawinan.BELUM_KAWIN.equals(pasien.getStatusPerkawinanId()))
dtoBuilder.statusPerkawinan(StatusPerkawinanDto.builder().id(BELUM_KAWIN.id()).build());
if (Master.StatusPerkawinan.KAWIN.equals(pasien.getStatusPerkawinanId()))
dtoBuilder.statusPerkawinan(StatusPerkawinanDto.builder().id(KAWIN.id()).build());
if (Master.StatusPerkawinan.CERAI_HIDUP.equals(pasien.getStatusPerkawinanId()))
dtoBuilder.statusPerkawinan(StatusPerkawinanDto.builder().id(CERAI_HIDUP.id()).build());
if (Master.StatusPerkawinan.CERAI_MATI.equals(pasien.getStatusPerkawinanId()))
dtoBuilder.statusPerkawinan(StatusPerkawinanDto.builder().id(CERAI_MATI.id()).build());
}
{
dtoBuilder.berkas(setBerkas(listDokumenVedika));
}
{
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());
});
if (CommonUtil.isNotNullOrEmpty(listPasien)) {
List<Integer> listIdPasien = listPasien.stream().map(Pasien::getId).collect(Collectors.toList());
List<String> listNoCmPasien = listPasien.stream().map(Pasien::getNoCm).collect(Collectors.toList());
List<Map<String, Object>> listCaraMeninggal = pasienDaftarDao
.findPenyebabKematianByPasienIdIn(listIdPasien);
List<Alamat> listAlamat = alamatDao.findByPasienIdIn(listIdPasien);
List<DokumenVedika> listDokumenVedika = dokumenVedikaDao.findByPasienNoMrIn(listNoCmPasien);
List<Pasien> listPasienAnak = pasienDao.findAnakByNoCmOfIbu(listNoCmPasien);
List<AsuransiPasien> listAsuransi = asuransiPasienDao.findByPasienIdIn(listIdPasien);
listPasien.forEach(pasien -> {
PasienDto.PasienDtoBuilder dtoBuilder = PasienDto.builder();
dtoBuilder.status("AKTIF");
dtoBuilder.noRekamMedis(Long.parseLong(pasien.getNoCm()));
dtoBuilder.namaLengkap(pasien.getNamaPasien());
dtoBuilder.namaPanggilan(CommonUtil.isNotNullOrEmpty(pasien.getNamaDepan()) ? pasien.getNamaDepan()
: pasien.getNamaPasien().split(" ")[0]);
dtoBuilder.isKelahiranRS(pasien.getNoCm().equals(pasien.getReportDisplay()));
dtoBuilder.tempatLahir(pasien.getTempatLahir());
dtoBuilder.caraRegistrasi("INTERNAL");
if (CommonUtil.isNotNullOrEmpty(pasien.getTglLahir()))
dtoBuilder.tanggalLahir(dateFormat.format(pasien.getTglLahir()));
dtoBuilder.surel(pasien.getEmail());
if (CommonUtil.isNotNullOrEmpty(pasien.getTitlePasienId()))
dtoBuilder.sapaan(SapaanDto.builder().id(pasien.getTitlePasienId().longValue()).build());
dtoBuilder.identitas(new HashSet<>(Collections.singletonList(
IdentitasDto.builder().jenisIdentitas(JenisIdentitasDto.builder().id(KTP.id()).build())
.noIdentitas(pasien.getNoIdentitas()).build())));
if (CommonUtil.isNotNullOrEmpty(pasien.getJenisKelaminId()))
dtoBuilder
.jenisKelamin(JenisKelaminDto.builder().id(pasien.getJenisKelaminId().longValue()).build());
if (CommonUtil.isNotNullOrEmpty(pasien.getGolonganDarahId()) && pasien.getGolonganDarahId() != 0)
dtoBuilder.golonganDarah(
GolonganDarahDto.builder().id(pasien.getGolonganDarahId().longValue()).build());
listCaraMeninggal.stream().filter(c -> pasien.getId().equals(c.get("idPasien"))).findFirst()
.ifPresent(c -> {
if (CommonUtil.isNotNullOrEmpty(c.get("idPenyebabKematian"))) {
if (Master.CaraMeninggal.BAWAH_DAN_48_JAM.equals(c.get("idPenyebabKematian")))
dtoBuilder.caraMeninggal(
CaraMeninggalDto.builder().id(BAWAH_DAN_48_JAM.id()).build());
if (Master.CaraMeninggal.ATAS_48_JAM.equals(c.get("idPenyebabKematian")))
dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(ATAS_48_JAM.id()).build());
if (Master.CaraMeninggal.BAWAH_DAN_8_JAM.equals(c.get("idPenyebabKematian")))
dtoBuilder
.caraMeninggal(CaraMeninggalDto.builder().id(BAWAH_DAN_8_JAM.id()).build());
if (Master.CaraMeninggal.ATAS_8_JAM.equals(c.get("idPenyebabKematian")))
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 (Master.CaraMeninggal.BLUECODE.equals(c.get("idPenyebabKematian")))
dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(BLUECODE.id()).build());
if (Arrays.asList(Master.CaraMeninggal.LAHIR)
.contains(Integer.parseInt(c.get("idPenyebabKematian").toString())))
dtoBuilder.caraMeninggal(CaraMeninggalDto.builder().id(LAHIR.id()).build());
}
});
if (CommonUtil.isNotNullOrEmpty(pasien.getKebangsaanId()))
dtoBuilder.kewarganegaraan(
KewarganegaraanDto.builder().id(pasien.getKebangsaanId().longValue()).build());
if (CommonUtil.isNotNullOrEmpty(pasien.getNegaraId()))
dtoBuilder.negara(NegaraDto.builder().id(pasien.getNegaraId().longValue()).build());
if (CommonUtil.isNotNullOrEmpty(pasien.getAgamaId()))
dtoBuilder.agama(AgamaDto.builder().id(pasien.getAgamaId().longValue()).build());
{
if (Master.Pendidikan.TIDAK_SEKOLAH.equals(pasien.getPendidikanId()))
dtoBuilder.pendidikan(PendidikanDto.builder().id(TIDAK_SEKOLAH.id()).build());
if (Master.Pendidikan.SD.equals(pasien.getPendidikanId()))
dtoBuilder.pendidikan(PendidikanDto.builder().id(SD.id()).build());
if (Master.Pendidikan.SLTP_SEDERAJAT.equals(pasien.getPendidikanId()))
dtoBuilder.pendidikan(PendidikanDto.builder().id(SLTP_SEDERAJAT.id()).build());
if (Master.Pendidikan.SLTA_SEDERAJAT.equals(pasien.getPendidikanId()))
dtoBuilder.pendidikan(PendidikanDto.builder().id(SLTA_SEDERAJAT.id()).build());
if (Arrays.asList(Master.Pendidikan.D1_SAMPAI_D3_SEDERAJAT).contains(pasien.getPendidikanId()))
dtoBuilder.pendidikan(PendidikanDto.builder().id(D1_SAMPAI_D3_SEDERAJAT.id()).build());
if (Master.Pendidikan.D4.equals(pasien.getPendidikanId()))
dtoBuilder.pendidikan(PendidikanDto.builder().id(D4.id()).build());
if (Master.Pendidikan.S1.equals(pasien.getPendidikanId()))
dtoBuilder.pendidikan(PendidikanDto.builder().id(S1.id()).build());
if (Master.Pendidikan.S2.equals(pasien.getPendidikanId()))
dtoBuilder.pendidikan(PendidikanDto.builder().id(S2.id()).build());
if (Master.Pendidikan.S3.equals(pasien.getPendidikanId()))
dtoBuilder.pendidikan(PendidikanDto.builder().id(S3.id()).build());
}
{
List<Alamat> alamatPasien = listAlamat.stream()
.filter(alamat -> pasien.getId().equals(alamat.getPasienId())).collect(Collectors.toList());
dtoBuilder.alamat(setAlamat(alamatPasien));
}
{
Set<GawaiDto> gawaiDto = new HashSet<>();
if (NumberUtils.isNumber(pasien.getNoTelepon()) && pasien.getNoTelepon().charAt(0) == '0')
gawaiDto.add(
GawaiDto.builder().noGawai(Long.parseLong("62" + numbersOnly(pasien.getNoTelepon())))
.jenisGawai(JenisGawaiDto.builder().id(1L).build()).build());
if (NumberUtils.isNumber(pasien.getNoHp()) && pasien.getNoHp().charAt(0) == '0')
gawaiDto.add(GawaiDto.builder().noGawai(Long.parseLong("62" + numbersOnly(pasien.getNoHp())))
.jenisGawai(JenisGawaiDto.builder().id(2L).build()).build());
dtoBuilder.gawai(gawaiDto);
}
{
if (Master.Pekerjaan.TIDAK_BEKERJA.equals(pasien.getPekerjaanId()))
dtoBuilder.pekerjaan(PekerjaanDto.builder().id(TIDAK_BEKERJA.id()).build());
if (Master.Pekerjaan.PNS.equals(pasien.getPekerjaanId()))
dtoBuilder.pekerjaan(PekerjaanDto.builder().id(PNS.id()).build());
if (Master.Pekerjaan.TNI_ATAU_POLRI.equals(pasien.getPekerjaanId()))
dtoBuilder.pekerjaan(PekerjaanDto.builder().id(TNI_ATAU_POLRI.id()).build());
if (Master.Pekerjaan.BUMN.equals(pasien.getPekerjaanId()))
dtoBuilder.pekerjaan(PekerjaanDto.builder().id(BUMN.id()).build());
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.StatusPerkawinan.KAWIN.equals(pasien.getStatusPerkawinanId())) {
dtoBuilder.statusPerkawinan(StatusPerkawinanDto.builder().id(KAWIN.id()).build());
} else if (Master.StatusPerkawinan.CERAI_HIDUP.equals(pasien.getStatusPerkawinanId())) {
dtoBuilder.statusPerkawinan(StatusPerkawinanDto.builder().id(CERAI_HIDUP.id()).build());
} else if (Master.StatusPerkawinan.CERAI_MATI.equals(pasien.getStatusPerkawinanId())) {
dtoBuilder.statusPerkawinan(StatusPerkawinanDto.builder().id(CERAI_MATI.id()).build());
} else {
dtoBuilder.statusPerkawinan(StatusPerkawinanDto.builder().id(BELUM_KAWIN.id()).build());
}
}
{
dtoBuilder.berkas(setBerkas(listDokumenVedika));
}
{
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;
}
@ -218,7 +233,8 @@ public class MigrasiPasienServiceImpl implements MigrasiPasienService {
{
if (Master.JenisAlamat.IDENTITAS.equals(alamat.getJenisAlamatId()))
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());
}
if (CommonUtil.isNotNullOrEmpty(alamat.getDesaKelurahan())
@ -237,7 +253,7 @@ public class MigrasiPasienServiceImpl implements MigrasiPasienService {
listDokumenVedika.forEach(dokumenVedika -> {
BerkasDto.BerkasDtoBuilder dtoBuilder = BerkasDto.builder();
dtoBuilder.judulBerkas(dokumenVedika.getNamaFile());
dtoBuilder.lokasiBerkas(dokumenVedika.getUrl());
dtoBuilder.lss(dokumenVedika.getUrl());
if (CommonUtil.isNotNullOrEmpty(dokumenVedika.getJenisBerkasId()))
dtoBuilder
.jenisBerkas(JenisBerkasDto.builder().id(dokumenVedika.getJenisBerkasId().longValue()).build());
@ -254,7 +270,7 @@ public class MigrasiPasienServiceImpl implements MigrasiPasienService {
dtoBuilder.namaPanggilan(anak.getNamaDepan());
dtoBuilder.surel(anak.getEmail());
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());
dtoList.add(dtoBuilder.build());
});
@ -265,11 +281,27 @@ public class MigrasiPasienServiceImpl implements MigrasiPasienService {
Set<JaminanDto> dtoList = new HashSet<>();
listAsuransiPasien.forEach(asuransi -> {
JaminanDto.JaminanDtoBuilder dtoBuilder = JaminanDto.builder();
dtoBuilder.nomorKartu(asuransi.getNoAsuransi());
if (CommonUtil.isNotNullOrEmpty(asuransi.getRekanan()))
dtoBuilder.asuransi(AsuransiDto.builder().asuransi(asuransi.getRekanan().getNamaRekanan()).build());
dtoList.add(dtoBuilder.build());
if (CommonUtil.isNotNullOrEmpty(asuransi.getNoAsuransi()) && !"-".equals(asuransi.getNoAsuransi())) {
dtoBuilder.nomorKartu(asuransi.getNoAsuransi());
if (CommonUtil.isNotNullOrEmpty(asuransi.getRekanan()))
dtoBuilder.asuransi(AsuransiDto.builder().asuransi(asuransi.getRekanan().getNamaRekanan()).build());
dtoList.add(dtoBuilder.build());
}
});
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/
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/
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
hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
hibernate.hbm2ddl = update
hibernate.hbm2ddl = none
hibernate.format_sql = true
hibernate.show_sql = true
@ -22,4 +22,6 @@ systemDirectory=/mnt/files/
reportDirectory=/home/svradmin/app-back/uploadfile/
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 JenisBerkasDto jenisBerkas;
private String judulBerkas;
private String lokasiBerkas;
private String lss;
}

View File

@ -19,4 +19,5 @@ import java.util.UUID;
public class GawaiDto {
private UUID id;
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;
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.UUID;
@ -17,15 +19,17 @@ import java.util.UUID;
@NoArgsConstructor
public class PasienDto {
private UUID id;
private String noRekamMedis;
private String status;
private Long noRekamMedis;
private String gelarDepan;
private String namaLengkap;
private String namaPanggilan;
private String gelarBelakang;
private Boolean isKelahiranRS;
private SapaanDto sapaan;
private Set<IdentitasDto> identitas;
private String tempatLahir;
private LocalDateTime tanggalLahir;
private String tanggalLahir;
private JenisKelaminDto jenisKelamin;
private GolonganDarahDto golonganDarah;
private GolonganResusDto golonganResus;
@ -46,4 +50,5 @@ public class PasienDto {
private Set<BerkasDto> berkas;
private Set<KeluargaDto> keluarga;
private Set<JaminanDto> jaminan;
private String caraRegistrasi;
}