Gnumed.business.gmVaccDefs API documentation
Description: GNUmed vaccination related definitions (only) …

# Module `Gnumed.business.gmVaccDefs`

GNUmed vaccination related definitions (only).

Based on WHO ATC data.

Interestingly, WHO does not list ATC codes for a few vaccination indications, such as Q-fever. It also misses some common multi-component vaccines, such as TdaP.

Expand source code

    # -*- coding: utf-8 -*-

    """GNUmed vaccination related definitions (only).

    Based on WHO ATC data.

    Interestingly, WHO does not list ATC codes for a few
    vaccination indications, such as Q-fever. It also misses some
    common multi-component vaccines, such as TdaP."""

    #============================================================
    __author__ = "K.Hilbert <Karsten.Hilbert@gmx.net>"
    __license__ = "GPL v2"

    import sys
    import logging

    if __name__ == '__main__':
            sys.path.insert(0, '../../')
            _ = lambda x:x
    else:
            try:
                    _
            except NameError:
                    from Gnumed.pycommon import gmI18N
                    gmI18N.activate_locale()
                    gmI18N.install_domain()

    _log = logging.getLogger('gm.vacc')

    #============================================================
    __VACCINATION__SINGLE_TARGET_ATCS = {
            # -- non-viral -------------------------------
            'anthrax (bacillus anthracis)': {'atc': 'J07AC01'},
            'brucellosis (brucella)': {'atc': 'J07AD01'},
            'cholera (vibrio cholerae)': {'atc': 'J07AE0'},
            'diphtheria (corynebacterium diphtheriae)': {'atc': 'J07AF01'},
            'HiB (hemophilus influenzae B)': {'atc': 'J07AG01'},
            'MenA (meningococcus A)': {'atc': 'J07AH01'},
            'MenB (meningococcus B)': {'atc': 'J07AH06'},
            'MenC (meningococcus C)': {'atc': 'J07AH07'},
            'MenY (meningococcus Y)': {'atc': 'J07AH0Y'},
            'MenW (meningococcus W)': {'atc': 'J07AH0W'},
            'pertussis (bordetella pertussis)': {'atc': 'J07AJ0'},
            'plague (yersinia pestis)': {'atc': 'J07AK01'},
            'pneumococcal infection (streptococcus pneumoniae)': {'atc': 'J07AL0'},
            'tetanus (clostridium tetani)': {'atc': 'J07AM01'},
            'tuberculosis (mycobacterium tuberculosis)': {'atc': 'J07AN01'},
            'typhoid (salmonella typhi)': {'atc': 'J07AP0'},
            'parathypoid (salmonella typhi)': {'atc': 'J07AP1'},
            'typhus exanthematicus (rickettsia prowazekii)': {'atc': 'J07AR01'},
            'Q fever (coxiella burnetii)': {'atc': 'J07AXQF'},
            # -- viral ------------------------------------------------
            'tick-borne meningoencephalitis (flavivirus)': {'atc': 'J07BA01'},
            'japanese B encephalitis (flavivirus)': {'atc': 'J07BA0J'},
            'influenza (seasonal, H3N2, H1N1)': {'atc': 'J07BB0'},
            'hepatitis B (HBV)': {'atc': 'J07BC01'},
            'hepatitis A (HAV)': {'atc': 'J07BC02'},
            'measles (morbillivirus hominis)': {'atc': 'J07BD01'},
            'mumps (Mumps orthorubolavirus)': {'atc': 'J07BE01'},
            'chickenpox, shingles (varicella zoster virus)': {'atc': 'J07BK0'},
            'rubella (rubivirus rubellae)': {'atc': 'J07BJ01'},
            'poliomyelitis (polio virus)': {'atc': 'J07BF0'},
            'rabies (rabies lyssavirus)': {'atc': 'J07BG01'},
            'rotavirus': {'atc': 'J07BH0'},
            'yellow fever (yellow fever virus)': {'atc': 'J07BL01'},
            'smallpox, mpox (variola virus)': {'atc': 'J07BX01'},
            'dengue fever (flavivirus)': {'atc': 'J07BX04'},
            'RSV (human respiratory syncytial virus)': {'atc': 'J07BX05'},
            'HPV (generic)': {'atc': 'J07BM0'},
            'HPV (6,11,16,18)': {'atc': 'J07BM01'},
            'HPV (16,18)': {'atc': 'J07BM02'},
            'HPV (6,11,16,18,31,33,45,52,58)': {'atc': 'J07BM03'},
            'CoViD-2019 (SARS-CoV-2)': {'atc': 'J07BX03'}
    }

    #============================================================
    __SQL_v23_insert_vaccination_target = """-- v23: single-target vaccination indication "%(target)s"
    INSERT INTO ref.vacc_indication (target, atc)
    SELECT '%(target)s', '%(atc)s' WHERE NOT EXISTS (
            SELECT 1 FROM ref.vacc_indication
            WHERE target = '%(target)s' OR atc = '%(atc)s'
    );
    """

    # useful for creating a bootstrapper script
    def v23_generate_vaccination_targets_SQL():
            lines = []
            for target, data in __VACCINATION__SINGLE_TARGET_ATCS.items():
                    lines.append(__SQL_v23_insert_vaccination_target % {
                            'target': target,
                            'atc': data['atc']
                    })
            return '\n'.join(lines)

    #============================================================
    __SQL_v23_insert_generic_vaccine = """-- v23: single-target generic vaccine for indication "%(target)s"
    INSERT INTO ref.vaccine (atc, comment, is_live)
            SELECT '%(atc)s', 'generic vaccine for %(target)s', False
            WHERE NOT EXISTS (
                    SELECT 1 FROM ref.vaccine WHERE atc = '%(atc)s'
            );

    INSERT INTO ref.lnk_indic2vaccine (fk_vaccine, fk_indication)
            SELECT
                    (SELECT pk FROM ref.vaccine WHERE atc = '%(atc)s' AND fk_drug_product IS NULL),
                    (SELECT pk FROM ref.vacc_indication WHERE atc = '%(atc)s')
            WHERE NOT EXISTS (
                    SELECT 1 FROM ref.lnk_indic2vaccine
                    WHERE
                            (fk_vaccine = (SELECT pk FROM ref.vaccine WHERE atc = '%(atc)s' AND fk_drug_product IS NULL))
                                    AND
                            (fk_indication = (SELECT pk FROM ref.vacc_indication WHERE atc = '%(atc)s'))
            );
    """

    def v23_generate_generic_vaccines_SQL():
            lines = []
            for target, data in __VACCINATION__SINGLE_TARGET_ATCS.items():
                    lines.append(__SQL_v23_insert_generic_vaccine % {
                            'target': target,
                            'atc': data['atc']
                    })
            return '\n'.join(lines)

    #============================================================
    # main - unit testing
    #------------------------------------------------------------
    if __name__ == '__main__':

            if len(sys.argv) < 2:
                    sys.exit()

            if sys.argv[1] != 'test':
                    sys.exit()

            del _
            from Gnumed.pycommon import gmI18N
            gmI18N.activate_locale()
            gmI18N.install_domain()

            #-----------------------------------------------------
            def test_v23_generate_vaccination_targets_SQL():
                    print(v23_generate_vaccination_targets_SQL())

            #-----------------------------------------------------
            def test_v23_generate_generic_vaccines_SQL():
                    print(v23_generate_generic_vaccines_SQL())

            #-----------------------------------------------------
            #test_v23_generate_vaccination_targets_SQL()
            test_v23_generate_generic_vaccines_SQL()

## Functions

`def v23_generate_generic_vaccines_SQL()`
  Expand source code

      def v23_generate_generic_vaccines_SQL():
              lines = []
              for target, data in __VACCINATION__SINGLE_TARGET_ATCS.items():
                      lines.append(__SQL_v23_insert_generic_vaccine % {
                              'target': target,
                              'atc': data['atc']
                      })
              return '\n'.join(lines)

`def v23_generate_vaccination_targets_SQL()`
  Expand source code

      def v23_generate_vaccination_targets_SQL():
              lines = []
              for target, data in __VACCINATION__SINGLE_TARGET_ATCS.items():
                      lines.append(__SQL_v23_insert_vaccination_target % {
                              'target': target,
                              'atc': data['atc']
                      })
              return '\n'.join(lines)