Skip to content

Commit

Permalink
feat: add endpoint /report-data/code-sets and /code-sets/listings for…
Browse files Browse the repository at this point in the history
… the Criteria Attr rept

OCD-2037
  • Loading branch information
tmy1313 committed Dec 11, 2024
1 parent f3dfbaa commit af822c8
Show file tree
Hide file tree
Showing 5 changed files with 141 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
import org.springframework.web.bind.annotation.RestController;

import gov.healthit.chpl.report.ReportDataManager;
import gov.healthit.chpl.report.criteriaattribute.CodeSetListingReport;
import gov.healthit.chpl.report.criteriaattribute.CodeSetReport;
import gov.healthit.chpl.report.criteriaattribute.ConformanceMethodListingReport;
import gov.healthit.chpl.report.criteriaattribute.ConformanceMethodReport;
import gov.healthit.chpl.report.criteriaattribute.FunctionalityTestedListingReport;
Expand Down Expand Up @@ -204,4 +206,25 @@ public CriteriaAttributeReportController(ReportDataManager reportDataManager) {
return reportDataManager.getCriteriaAttributeAttributeService().getConformanceMethodListingReports();
}

@Operation(summary = "Retrieves the data used to generate the Code Set Criteria Attribute Summary report.",
description = "Retrieves the data used to generate the Code Set Criteria Attribute Summary report.",
security = {
@SecurityRequirement(name = SwaggerSecurityRequirement.API_KEY)
})
@RequestMapping(value = "/code-sets", method = RequestMethod.GET, produces = "application/json; charset=utf-8")
public @ResponseBody List<CodeSetReport> getCodeSetReports() {
return reportDataManager.getCriteriaAttributeAttributeService().getCodeSetReports();
}


@Operation(summary = "Retrieves the data used to generate the Code Set Criteria Attribute Listing report.",
description = "Retrieves the data used to generate the Code SetCriteria Attribute Listing report.",
security = {
@SecurityRequirement(name = SwaggerSecurityRequirement.API_KEY)
})
@RequestMapping(value = "/code-sets/listings", method = RequestMethod.GET, produces = "application/json; charset=utf-8")
public @ResponseBody List<CodeSetListingReport> getCodeSetListingReports() {
return reportDataManager.getCriteriaAttributeAttributeService().getCodeSetListingReports();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package gov.healthit.chpl.report.criteriaattribute;

import gov.healthit.chpl.certificationCriteria.CertificationCriterion;
import gov.healthit.chpl.codeset.CodeSet;
import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class CodeSetListingReport {
private String chplProductNumber;
private CertificationCriterion criterion;
private CodeSet codeSet;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package gov.healthit.chpl.report.criteriaattribute;

import gov.healthit.chpl.certificationCriteria.CertificationCriterion;
import gov.healthit.chpl.codeset.CodeSet;
import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class CodeSetReport {
private CertificationCriterion criterion;
private CodeSet codeSet;
private Long count;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package gov.healthit.chpl.report.criteriaattribute;

import java.util.List;

import org.springframework.stereotype.Repository;

import gov.healthit.chpl.certificationCriteria.CertificationCriterionEntity;
import gov.healthit.chpl.codeset.CodeSetEntity;
import gov.healthit.chpl.dao.impl.BaseDAOImpl;
import jakarta.persistence.Query;

@Repository
public class CodeSetReportDao extends BaseDAOImpl {
public List<CodeSetReport> getCodeSetReports() {
String hql = "SELECT cc, cs, count(*) as codeSetCount "
+ "FROM CertificationCriterionEntity cc, "
+ "CertificationResultEntity cr, "
+ "CertifiedProductDetailsEntity cpd, "
+ "CertificationResultCodeSetEntity crcs, "
+ "CodeSetEntity cs "
+ "WHERE cc.id = cr.certificationCriterionId "
+ "AND cr.certifiedProductId = cpd.id "
+ "AND cr.id = crcs.certificationResultId "
+ "AND crcs.codeSet.id = cs.id "
+ "AND cpd.certificationStatusId IN (1,6,7) "
+ "AND (cc.endDay is null OR cc.endDay > CURRENT_DATE()) "
+ "AND cc.deleted = false "
+ "AND cr.deleted = false "
+ "AND crcs.deleted = false "
+ "AND cpd.deleted = false "
+ "AND cs.deleted = false "
+ "GROUP BY cc.id, cs.id ";

Query query = entityManager.createQuery(hql);
List<Object[]> results = query.getResultList();

return results.stream()
.map(result -> CodeSetReport.builder()
.criterion(((CertificationCriterionEntity) result[0]).toDomain())
.codeSet(((CodeSetEntity) result[1]).toDomain())
.count((Long) result[2])
.build())
.toList();
}

public List<CodeSetListingReport> getCodeSetListingReports() {
String hql = "SELECT cc, cs, cpd.chplProductNumber "
+ "FROM CertificationCriterionEntity cc, "
+ "CertificationResultEntity cr, "
+ "CertifiedProductDetailsEntity cpd, "
+ "CertificationResultCodeSetEntity crcs, "
+ "CodeSetEntity cs "
+ "WHERE cc.id = cr.certificationCriterionId "
+ "AND cr.certifiedProductId = cpd.id "
+ "AND cr.id = crcs.certificationResultId "
+ "AND crcs.codeSet.id = cs.id "
+ "AND cpd.certificationStatusId IN (1,6,7) "
+ "AND cc.deleted = false "
+ "AND cr.deleted = false "
+ "AND crcs.deleted = false "
+ "AND cpd.deleted = false "
+ "AND cs.deleted = false ";

Query query = entityManager.createQuery(hql);
List<Object[]> results = query.getResultList();

return results.stream()
.map(result -> CodeSetListingReport.builder()
.criterion(((CertificationCriterionEntity) result[0]).toDomain())
.codeSet(((CodeSetEntity) result[1]).toDomain())
.chplProductNumber((String) result[2])
.build())
.toList();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public class CriteriaAttributeReportService {
private SvapReportDao svapReportDao;
private PrivacyAndSecurityFrameworkReportDao privacyAndSecurityFrameworkReportDao;
private ConformanceMethodReportDao conformanceMethodReportDao;
private CodeSetReportDao codeSetReportDao;

@Autowired
public CriteriaAttributeReportService(TestToolReportDao testToolReportDao,
Expand All @@ -25,7 +26,8 @@ public CriteriaAttributeReportService(TestToolReportDao testToolReportDao,
TestDataReportDao testDataReportDao,
SvapReportDao svapReportDao,
PrivacyAndSecurityFrameworkReportDao privacyAndSecurityFrameworkReportDao,
ConformanceMethodReportDao conformanceMethodReportDao) {
ConformanceMethodReportDao conformanceMethodReportDao,
CodeSetReportDao codeSetReportDao) {

this.testToolReportDao = testToolReportDao;
this.standardReportDao = standardReportDao;
Expand All @@ -35,7 +37,7 @@ public CriteriaAttributeReportService(TestToolReportDao testToolReportDao,
this.svapReportDao = svapReportDao;
this.privacyAndSecurityFrameworkReportDao = privacyAndSecurityFrameworkReportDao;
this.conformanceMethodReportDao = conformanceMethodReportDao;

this.codeSetReportDao = codeSetReportDao;
}

@Transactional
Expand Down Expand Up @@ -118,4 +120,14 @@ public List<ConformanceMethodListingReport> getConformanceMethodListingReports()
return conformanceMethodReportDao.getConformanceMethodListingReports();
}

@Transactional
public List<CodeSetReport> getCodeSetReports() {
return codeSetReportDao.getCodeSetReports();
}

@Transactional
public List<CodeSetListingReport> getCodeSetListingReports() {
return codeSetReportDao.getCodeSetListingReports();
}

}

0 comments on commit af822c8

Please sign in to comment.