def get_descendent_concepts_template_from_vocab_code()

in src/engine/step5/template_definitions.py [0:0]


def get_descendent_concepts_template_from_vocab_code(schema, vocab, concept_codes):
    """
    Renders a pre-defined sub-sql query schema returning a column of `concept_id`s of a specific standard concept with OMOP CDM concept code and its
    descendents using the vocabulary `vocab` and the vocab concept code.

    Assumption: ICD10 codes don't have ";"

    Args:
        config (module): General tool configuration.
        general_query (str): General SQL query.
        args_dict (dict): Dictionary of processed arguments from step 2.

    Returns:
        str: Rendered query by replacing argument and template placeholders.

    Example args
        schema = cmsdesynpuf23m
        vocab = ICD10
        concept_code = A97;G47.00

    """
    # support for 1+ codes (drug or condition)
    concept_codes_conditions = [
        f"concept_code='{concept_code.strip()}'"
        for concept_code in concept_codes.split(";")
        if concept_code.strip()
    ]

    join_codes_condition = "( " + " OR ".join(concept_codes_conditions) + " )"

    out = (
        f"( SELECT descendant_concept_id AS concept_id FROM "
        + f"(SELECT * FROM "
        + f"(SELECT concept_id_2 FROM "
        + f"( "
        + f"(SELECT concept_id FROM "
        + f"{schema}.concept WHERE vocabulary_id='{vocab}' AND {join_codes_condition}) "
        + f"JOIN "
        + f"( SELECT concept_id_1, concept_id_2 FROM "
        + f"{schema}.concept_relationship WHERE relationship_id='Maps to' ) "
        + f"ON concept_id=concept_id_1) "
        + f") JOIN {schema}.concept ON concept_id_2=concept_id) "
        + f"JOIN {schema}.concept_ancestor ON concept_id=ancestor_concept_id "
        + f") "
    )

    return out