use of gov.cms.bfd.model.rda.Mbi in project beneficiary-fhir-data by CMSgov.
the class MbiCacheIT method retryFiveTimes.
@Test
public void retryFiveTimes() throws Exception {
RdaPipelineTestUtils.runTestWithTemporaryDb(FissClaimRdaSinkIT.class, Clock.systemUTC(), (appState, entityManager) -> {
final PersistenceException error = new PersistenceException("oops");
final MbiCache.DatabaseLookupFunction lookupFunction = spy(new MbiCache.DatabaseLookupFunction(entityManager, normalHasher));
final MbiCache mbiCache = new MbiCache(lookupFunction, normalHasher);
doThrow(error, error, error, error, error).doReturn(new Mbi(1L, mbi1, hash1)).when(lookupFunction).readOrInsertIfMissing(mbi1);
assertEquals(hash1, mbiCache.lookupMbi(mbi1).getHash());
verify(lookupFunction, times(1)).lookupMbi(mbi1);
verify(lookupFunction, times(6)).readOrInsertIfMissing(mbi1);
});
}
use of gov.cms.bfd.model.rda.Mbi in project beneficiary-fhir-data by CMSgov.
the class McsClaimRdaSinkIT method mcsClaim.
@Test
public void mcsClaim() throws Exception {
RdaPipelineTestUtils.runTestWithTemporaryDb(McsClaimRdaSinkIT.class, Clock.systemUTC(), (appState, entityManager) -> {
final LocalDate today = LocalDate.of(2022, 1, 3);
final Instant now = today.atStartOfDay().toInstant(ZoneOffset.UTC);
final Clock clock = Clock.fixed(now, ZoneOffset.UTC);
final PreAdjMcsClaim claim = new PreAdjMcsClaim();
claim.setSequenceNumber(7L);
claim.setIdrClmHdIcn("3");
claim.setIdrContrId("c1");
claim.setIdrHic("hc");
claim.setIdrClaimType("c");
claim.setMbiRecord(new Mbi(1L, "12345678901", "hash-of-12345678901"));
final PreAdjMcsDetail detail = new PreAdjMcsDetail();
detail.setIdrClmHdIcn(claim.getIdrClmHdIcn());
detail.setPriority((short) 0);
detail.setIdrDtlStatus("P");
claim.getDetails().add(detail);
final PreAdjMcsDiagnosisCode diagCode = new PreAdjMcsDiagnosisCode();
diagCode.setIdrClmHdIcn(claim.getIdrClmHdIcn());
diagCode.setPriority((short) 0);
diagCode.setIdrDiagIcdType("T");
diagCode.setIdrDiagCode("D");
claim.getDiagCodes().add(diagCode);
final McsDetail detailMessage = McsDetail.newBuilder().setIdrDtlStatusUnrecognized(detail.getIdrDtlStatus()).build();
final McsDiagnosisCode diagCodeMessage = McsDiagnosisCode.newBuilder().setIdrDiagIcdTypeUnrecognized(diagCode.getIdrDiagIcdType()).setIdrDiagCode(diagCode.getIdrDiagCode()).build();
final McsClaim claimMessage = McsClaim.newBuilder().setIdrClmHdIcn(claim.getIdrClmHdIcn()).setIdrContrId(claim.getIdrContrId()).setIdrClaimMbi(claim.getIdrClaimMbi()).setIdrHic(claim.getIdrHic()).setIdrClaimTypeUnrecognized(claim.getIdrClaimType()).addMcsDetails(detailMessage).addMcsDiagnosisCodes(diagCodeMessage).build();
final McsClaimChange message = McsClaimChange.newBuilder().setSeq(claim.getSequenceNumber()).setIcn(claim.getIdrClmHdIcn()).setClaim(claimMessage).build();
final IdHasher hasher = new IdHasher(new IdHasher.Config(1, "notarealpepper"));
final McsClaimTransformer transformer = new McsClaimTransformer(clock, MbiCache.computedCache(hasher.getConfig()));
final McsClaimRdaSink sink = new McsClaimRdaSink(appState, transformer, true);
final String expectedMbiHash = hasher.computeIdentifierHash(claim.getIdrClaimMbi());
assertEquals(Optional.empty(), sink.readMaxExistingSequenceNumber());
int count = sink.writeMessage("version", message);
assertEquals(1, count);
List<PreAdjMcsClaim> resultClaims = entityManager.createQuery("select c from PreAdjMcsClaim c", PreAdjMcsClaim.class).getResultList();
assertEquals(1, resultClaims.size());
PreAdjMcsClaim resultClaim = resultClaims.get(0);
assertEquals(Long.valueOf(7), resultClaim.getSequenceNumber());
assertEquals(claim.getIdrHic(), resultClaim.getIdrHic());
assertEquals(claim.getIdrClaimMbi(), resultClaim.getIdrClaimMbi());
assertEquals(expectedMbiHash, resultClaim.getIdrClaimMbiHash());
assertEquals(claim.getDetails().size(), resultClaim.getDetails().size());
assertEquals(claim.getDiagCodes().size(), resultClaim.getDiagCodes().size());
assertEquals(Optional.of(claim.getSequenceNumber()), sink.readMaxExistingSequenceNumber());
Mbi databaseMbiEntity = RdaPipelineTestUtils.lookupCachedMbi(entityManager, claimMessage.getIdrClaimMbi());
assertNotNull(databaseMbiEntity);
assertEquals(claim.getIdrClaimMbi(), databaseMbiEntity.getMbi());
assertEquals(expectedMbiHash, databaseMbiEntity.getHash());
});
}
use of gov.cms.bfd.model.rda.Mbi in project beneficiary-fhir-data by CMSgov.
the class RDATestUtils method seedData.
/**
* Seed data into the database for testing.
*/
public void seedData(boolean includeOldHash) {
doTransaction(em -> {
String oldHash = includeOldHash ? MBI_OLD_HASH : null;
Mbi mbi = em.merge(Mbi.builder().mbi(MBI).hash(MBI_HASH).oldHash(oldHash).build());
em.merge(fissTestDataA(mbi));
em.merge(fissTestDataB(mbi));
em.merge(mcsTestDataA(mbi));
em.merge(mcsTestDataB(mbi));
});
}
use of gov.cms.bfd.model.rda.Mbi in project beneficiary-fhir-data by CMSgov.
the class FissClaimRdaSinkIT method fissClaim.
@Test
public void fissClaim() throws Exception {
RdaPipelineTestUtils.runTestWithTemporaryDb(FissClaimRdaSinkIT.class, Clock.systemUTC(), (appState, entityManager) -> {
final LocalDate today = LocalDate.of(2022, 1, 3);
final Instant now = today.atStartOfDay().toInstant(ZoneOffset.UTC);
final Clock clock = Clock.fixed(now, ZoneOffset.UTC);
final PreAdjFissClaim claim = new PreAdjFissClaim();
claim.setSequenceNumber(3L);
claim.setDcn("1");
claim.setHicNo("h1");
claim.setCurrStatus('T');
claim.setCurrLoc1('A');
claim.setCurrLoc2("1A");
claim.setPracLocCity("city name can be very long indeed");
claim.setMbiRecord(new Mbi(1L, "12345678901", "hash-of-12345678901"));
final PreAdjFissProcCode procCode0 = new PreAdjFissProcCode();
procCode0.setDcn(claim.getDcn());
procCode0.setPriority((short) 0);
procCode0.setProcCode("P");
procCode0.setProcFlag("F");
procCode0.setProcDate(today);
claim.getProcCodes().add(procCode0);
final PreAdjFissDiagnosisCode diagCode0 = new PreAdjFissDiagnosisCode();
diagCode0.setDcn(claim.getDcn());
diagCode0.setPriority((short) 0);
diagCode0.setDiagCd2("cd2");
diagCode0.setDiagPoaInd("Q");
claim.getDiagCodes().add(diagCode0);
final FissProcedureCode procCodeMessage = FissProcedureCode.newBuilder().setProcCd("P").setProcFlag("F").setProcDt("2022-01-03").build();
final FissDiagnosisCode diagCodeMessage = FissDiagnosisCode.newBuilder().setDiagCd2("cd2").setDiagPoaIndUnrecognized("Q").build();
final FissClaim claimMessage = FissClaim.newBuilder().setDcn(claim.getDcn()).setHicNo(claim.getHicNo()).setCurrStatusEnum(FissClaimStatus.CLAIM_STATUS_RTP).setCurrLoc1Unrecognized(String.valueOf(claim.getCurrLoc1())).setCurrLoc2Unrecognized(claim.getCurrLoc2()).setPracLocCity("city name can be very long indeed").addFissProcCodes(0, procCodeMessage).addFissDiagCodes(0, diagCodeMessage).setMbi(claim.getMbi()).build();
final FissClaimChange message = FissClaimChange.newBuilder().setSeq(claim.getSequenceNumber()).setDcn(claim.getDcn()).setClaim(claimMessage).build();
final IdHasher defaultIdHasher = new IdHasher(new IdHasher.Config(1, "notarealpepper"));
final FissClaimTransformer transformer = new FissClaimTransformer(clock, MbiCache.computedCache(defaultIdHasher.getConfig()));
final FissClaimRdaSink sink = new FissClaimRdaSink(appState, transformer, true);
final String expectedMbiHash = defaultIdHasher.computeIdentifierHash(claim.getMbi());
assertEquals(Optional.empty(), sink.readMaxExistingSequenceNumber());
int count = sink.writeMessage("version", message);
assertEquals(1, count);
List<PreAdjFissClaim> claims = entityManager.createQuery("select c from PreAdjFissClaim c", PreAdjFissClaim.class).getResultList();
assertEquals(1, claims.size());
PreAdjFissClaim resultClaim = claims.get(0);
assertEquals(Long.valueOf(3), resultClaim.getSequenceNumber());
assertEquals(claim.getHicNo(), resultClaim.getHicNo());
assertEquals(claim.getPracLocCity(), resultClaim.getPracLocCity());
assertEquals(claim.getMbi(), resultClaim.getMbi());
assertEquals(expectedMbiHash, resultClaim.getMbiHash());
assertEquals(claim.getProcCodes().size(), resultClaim.getProcCodes().size());
assertEquals(claim.getDiagCodes().size(), resultClaim.getDiagCodes().size());
assertEquals(Optional.of(claim.getSequenceNumber()), sink.readMaxExistingSequenceNumber());
Mbi databaseMbiEntity = RdaPipelineTestUtils.lookupCachedMbi(entityManager, claimMessage.getMbi());
assertNotNull(databaseMbiEntity);
assertEquals(claim.getMbi(), databaseMbiEntity.getMbi());
assertEquals(expectedMbiHash, databaseMbiEntity.getHash());
});
}
use of gov.cms.bfd.model.rda.Mbi in project beneficiary-fhir-data by CMSgov.
the class MbiCacheIT method createsNewRecordWhenNoneExists.
@Test
public void createsNewRecordWhenNoneExists() throws Exception {
RdaPipelineTestUtils.runTestWithTemporaryDb(FissClaimRdaSinkIT.class, Clock.systemUTC(), (appState, entityManager) -> {
final MbiCache mbiCache = MbiCache.databaseCache(entityManager, normalHasher);
assertEquals(hash1, mbiCache.lookupMbi(mbi1).getHash());
assertEquals(hash2, mbiCache.lookupMbi(mbi2).getHash());
Mbi databaseMbiEntity = RdaPipelineTestUtils.lookupCachedMbi(entityManager, mbi1);
assertNotNull(databaseMbiEntity);
assertEquals(hash1, databaseMbiEntity.getHash());
databaseMbiEntity = RdaPipelineTestUtils.lookupCachedMbi(entityManager, mbi2);
assertNotNull(databaseMbiEntity);
assertEquals(hash2, databaseMbiEntity.getHash());
});
}
Aggregations