Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/main/resources/ddl/results/init_concept_hierarchy.sql
Original file line number Diff line number Diff line change
Expand Up @@ -276,9 +276,9 @@ FROM
(
SELECT
c1.concept_id,
CONCAT(v1.vocabulary_name, ' ', c1.concept_code, ': ', c1.concept_name) AS proc_concept_name
CONCAT(COALESCE(v1.vocabulary_name, c1.vocabulary_id), ' ', c1.concept_code, ': ', c1.concept_name) AS proc_concept_name
FROM @vocab_schema.concept c1
INNER JOIN @vocab_schema.vocabulary v1 ON c1.vocabulary_id = v1.vocabulary_id
LEFT JOIN @vocab_schema.vocabulary v1 ON c1.vocabulary_id = v1.vocabulary_id
WHERE c1.domain_id = 'Procedure'
) procs
LEFT JOIN (
Expand Down
48 changes: 44 additions & 4 deletions src/test/java/org/ohdsi/webapi/service/DDLServiceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ public class DDLServiceTest extends AbstractDatabaseTest {
private static final int ATC_4TH = 21604303;
private static final int ATC_2ND = 21604253;
private static final int ATC_1ST = 21604180;
private static final int APPENDECTOMY = 4336464;
private static final int CUSTOM_PROCEDURE = 2000000001;

@Before
public void setUp() {
Expand Down Expand Up @@ -69,9 +71,21 @@ public void tearDown() {

private void insertConcept(int conceptId, String name, String vocabularyId, String conceptClassId, String standard) {

insertConcept(conceptId, name, "Drug", vocabularyId, conceptClassId, standard, null);
}

private void insertConcept(int conceptId, String name, String domainId, String vocabularyId, String conceptClassId,
String standard, String conceptCode) {

jdbcTemplate.update(String.format("INSERT INTO %s.concept (concept_id, concept_name, domain_id, vocabulary_id, "
+ "concept_class_id, standard_concept) VALUES (?, ?, 'Drug', ?, ?, ?)", VOCAB_SCHEMA),
conceptId, name, vocabularyId, conceptClassId, standard);
+ "concept_class_id, standard_concept, concept_code) VALUES (?, ?, ?, ?, ?, ?, ?)", VOCAB_SCHEMA),
conceptId, name, domainId, vocabularyId, conceptClassId, standard, conceptCode);
}

private void insertVocabulary(String vocabularyId, String vocabularyName) {

jdbcTemplate.update(String.format("INSERT INTO %s.vocabulary (vocabulary_id, vocabulary_name) VALUES (?, ?)",
VOCAB_SCHEMA), vocabularyId, vocabularyName);
}

private void insertAncestor(int ancestorId, int descendantId, int levels) {
Expand All @@ -81,15 +95,20 @@ private void insertAncestor(int ancestorId, int descendantId, int levels) {
ancestorId, descendantId, levels, levels);
}

@Test
public void initConceptHierarchy_drugHierarchyUsesStandardIngredientsOnly() {
private void runInitConceptHierarchy() {

for (String path : DDLService.INIT_CONCEPT_HIERARCHY_FILE_PATHS) {
String sql = SqlRender.renderSql(ResourceHelper.GetResourceAsString(path),
new String[]{DDLService.VOCAB_SCHEMA, DDLService.RESULTS_SCHEMA},
new String[]{VOCAB_SCHEMA, RESULTS_SCHEMA});
jdbcTemplate.execute(SqlTranslate.translateSql(sql, "postgresql"));
}
}

@Test
public void initConceptHierarchy_drugHierarchyUsesStandardIngredientsOnly() {

runInitConceptHierarchy();

List<Map<String, Object>> rows = jdbcTemplate.queryForList(String.format("SELECT concept_id, "
+ "level1_concept_name, level2_concept_name, level3_concept_name, level4_concept_name "
Expand All @@ -105,4 +124,25 @@ public void initConceptHierarchy_drugHierarchyUsesStandardIngredientsOnly() {
assertEquals(ACETAMINOPHEN, rows.get(0).get("concept_id"));
assertEquals(ACETAMINOPHEN_TABLET, rows.get(1).get("concept_id"));
}

@Test
public void initConceptHierarchy_procedureHierarchyKeepsConceptsWithoutVocabularyRow() {

insertVocabulary("SNOMED", "Systematic Nomenclature of Medicine - Clinical Terms (IHTSDO)");
insertConcept(APPENDECTOMY, "Appendectomy", "Procedure", "SNOMED", "Procedure", "S", "80146002");
// site-specific concept whose vocabulary_id has no row in the vocabulary table
insertConcept(CUSTOM_PROCEDURE, "Local procedure", "Procedure", "Local", "Procedure", null, "LP-1");

runInitConceptHierarchy();

List<Map<String, Object>> rows = jdbcTemplate.queryForList(String.format("SELECT concept_id, concept_name "
+ "FROM %s.concept_hierarchy WHERE treemap = 'Procedure' ORDER BY concept_id", RESULTS_SCHEMA));

assertEquals(2, rows.size());
assertEquals(APPENDECTOMY, rows.get(0).get("concept_id"));
assertEquals("Systematic Nomenclature of Medicine - Clinical Terms (IHTSDO) 80146002: Appendectomy",
rows.get(0).get("concept_name"));
assertEquals(CUSTOM_PROCEDURE, rows.get(1).get("concept_id"));
assertEquals("Local LP-1: Local procedure", rows.get(1).get("concept_name"));
}
}
Loading