diff --git a/.github/workflows/dhis2-verify-app.yml b/.github/workflows/dhis2-verify-app.yml index 243da7b09..b355cc931 100644 --- a/.github/workflows/dhis2-verify-app.yml +++ b/.github/workflows/dhis2-verify-app.yml @@ -95,19 +95,19 @@ jobs: with: node-version: 16 - name: End-to-End tests - uses: cypress-io/github-action@v2 + uses: cypress-io/github-action@v5 with: - start: yarn start:nobrowser - wait-on: 'http://localhost:3000' - wait-on-timeout: 300 + start: npx --yes @dhis2/cli-cluster up 2.40 --channel dev --db-version 2.40 --seed, yarn start:nobrowser + wait-on: 'http://localhost:8080/dhis-web-commons/security/login.action, http://localhost:3000' + wait-on-timeout: 600 record: true parallel: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} - CYPRESS_dhis2BaseUrl: http://localhost:8080 - CYPRESS_dhis2ApiVersion: 40 - CYPRESS_networkMode: stub + CYPRESS_LOGIN_NAME: ${{ secrets.CYPRESS_LOGIN_NAME }} + CYPRESS_LOGIN_PASSWORD: ${{ secrets.CYPRESS_LOGIN_PASSWORD }} + CYPRESS_LOGIN_SERVER: http://localhost:8080 release: runs-on: ubuntu-latest diff --git a/cypress.config.js b/cypress.config.js new file mode 100644 index 000000000..9cac4c1aa --- /dev/null +++ b/cypress.config.js @@ -0,0 +1,50 @@ +// eslint-disable-next-line import/no-unused-modules +const { defineConfig } = require('cypress') +const webpack = require('@cypress/webpack-preprocessor') +const preprocessor = require('@badeball/cypress-cucumber-preprocessor') + +/** + * Configuration for the cypress-cucumber preprocessing, see: + * https://github.com/badeball/cypress-cucumber-preprocessor/tree/master/examples/webpack-cjs + */ +async function setupNodeEvents(on, config) { + // This is required for the preprocessor to be able to generate JSON reports after each run, and more, + await preprocessor.addCucumberPreprocessorPlugin(on, config) + + on( + 'file:preprocessor', + webpack({ + webpackOptions: { + resolve: { + extensions: ['.ts', '.js'], + }, + module: { + rules: [ + { + test: /\.feature$/, + use: [ + { + loader: '@badeball/cypress-cucumber-preprocessor/webpack', + options: config, + }, + ], + }, + ], + }, + }, + }) + ) + + // Make sure to return the config object as it might have been modified by the plugin. + return config +} + +module.exports = defineConfig({ + projectId: 'sc56ms', + video: false, + e2e: { + setupNodeEvents, + baseUrl: 'http://localhost:3000', + specPattern: 'cypress/e2e/**/*.feature', + }, +}) diff --git a/cypress.env.json.example b/cypress.env.json.example index 31a1889ef..dd528f9a4 100644 --- a/cypress.env.json.example +++ b/cypress.env.json.example @@ -1,5 +1,5 @@ { - "dhis2BaseUrl": "http://localhost:8080", - "dhis2Username": "USERNAME_HERE", - "dhis2Password": "PASSWORD_HERE" + "LOGIN_NAME": "login name here", + "LOGIN_PASSWORD": "password here", + "LOGIN_SERVER": "https://debug.dhis2.org/dev" } diff --git a/cypress.json b/cypress.json deleted file mode 100644 index 91635a070..000000000 --- a/cypress.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "baseUrl": "http://localhost:3000", - "projectId": "sc56ms", - "testFiles": "**/*.feature", - "experimentalInteractiveRunEvents": true, - "video": false, - "env": { - "dhis2DataTestPrefix": "dhis2-scheduler", - "dhis2ApiVersion": "40" - } -} diff --git a/cypress/integration/add-route/back-to-all-jobs.feature b/cypress/e2e/add-route/back-to-all-jobs.feature similarity index 100% rename from cypress/integration/add-route/back-to-all-jobs.feature rename to cypress/e2e/add-route/back-to-all-jobs.feature diff --git a/cypress/integration/add-route/back-to-all-jobs/index.js b/cypress/e2e/add-route/back-to-all-jobs/index.js similarity index 90% rename from cypress/integration/add-route/back-to-all-jobs/index.js rename to cypress/e2e/add-route/back-to-all-jobs/index.js index 3e792a08b..caa929d65 100644 --- a/cypress/integration/add-route/back-to-all-jobs/index.js +++ b/cypress/e2e/add-route/back-to-all-jobs/index.js @@ -1,4 +1,4 @@ -import { Given, When, Then } from 'cypress-cucumber-preprocessor/steps' +import { Given, When, Then } from '@badeball/cypress-cucumber-preprocessor' Given('the user navigated to the add job page', () => { cy.visit('/#/add') diff --git a/cypress/integration/add-route/create-parameter-jobs.feature b/cypress/e2e/add-route/create-parameter-jobs.feature similarity index 100% rename from cypress/integration/add-route/create-parameter-jobs.feature rename to cypress/e2e/add-route/create-parameter-jobs.feature diff --git a/cypress/integration/add-route/create-parameter-jobs/index.js b/cypress/e2e/add-route/create-parameter-jobs/index.js similarity index 99% rename from cypress/integration/add-route/create-parameter-jobs/index.js rename to cypress/e2e/add-route/create-parameter-jobs/index.js index 51f71e91c..8078d9dac 100644 --- a/cypress/integration/add-route/create-parameter-jobs/index.js +++ b/cypress/e2e/add-route/create-parameter-jobs/index.js @@ -1,4 +1,4 @@ -import { Given, Then } from 'cypress-cucumber-preprocessor/steps' +import { Given, Then } from '@badeball/cypress-cucumber-preprocessor' /** * Local helpers diff --git a/cypress/integration/add-route/create-parameterless-jobs.feature b/cypress/e2e/add-route/create-parameterless-jobs.feature similarity index 100% rename from cypress/integration/add-route/create-parameterless-jobs.feature rename to cypress/e2e/add-route/create-parameterless-jobs.feature diff --git a/cypress/integration/add-route/create-parameterless-jobs/index.js b/cypress/e2e/add-route/create-parameterless-jobs/index.js similarity index 97% rename from cypress/integration/add-route/create-parameterless-jobs/index.js rename to cypress/e2e/add-route/create-parameterless-jobs/index.js index d71b13177..c45146cc3 100644 --- a/cypress/integration/add-route/create-parameterless-jobs/index.js +++ b/cypress/e2e/add-route/create-parameterless-jobs/index.js @@ -1,4 +1,4 @@ -import { Given, Then } from 'cypress-cucumber-preprocessor/steps' +import { Given, Then } from '@badeball/cypress-cucumber-preprocessor' /** * Local helpers diff --git a/cypress/integration/add-route/cron-presets.feature b/cypress/e2e/add-route/cron-presets.feature similarity index 91% rename from cypress/integration/add-route/cron-presets.feature rename to cypress/e2e/add-route/cron-presets.feature index 1f9000ac4..2ecde90ad 100644 --- a/cypress/integration/add-route/cron-presets.feature +++ b/cypress/e2e/add-route/cron-presets.feature @@ -2,6 +2,7 @@ Feature: Users should be able to insert cron presets Scenario: User inserts a cron preset Given the user navigated to the add job page + And the job types have loaded And the user selects a cron scheduled job type When the user clicks the choose from preset times button And selects a cron preset from the modal @@ -10,6 +11,7 @@ Feature: Users should be able to insert cron presets Scenario: User cancels inserting a cron preset Given the user navigated to the add job page + And the job types have loaded And the user selects a cron scheduled job type When the user clicks the choose from preset times button And selects a cron preset from the modal diff --git a/cypress/integration/add-route/cron-presets/index.js b/cypress/e2e/add-route/cron-presets/index.js similarity index 83% rename from cypress/integration/add-route/cron-presets/index.js rename to cypress/e2e/add-route/cron-presets/index.js index 3fe800dbd..88a8b2b53 100644 --- a/cypress/integration/add-route/cron-presets/index.js +++ b/cypress/e2e/add-route/cron-presets/index.js @@ -1,10 +1,17 @@ -import { Given, When, Then } from 'cypress-cucumber-preprocessor/steps' +import { Given, When, Then } from '@badeball/cypress-cucumber-preprocessor' Given('the user navigated to the add job page', () => { cy.visit('/#/add') cy.findByRole('heading', { name: 'New Job' }).should('exist') }) +Given('the job types have loaded', () => { + cy.get('[data-test="dhis2-uicore-select-input"]').should( + 'not.have.class', + 'disabled' + ) +}) + Given('the user selects a cron scheduled job type', () => { cy.get('[data-test="dhis2-uicore-select-input"]').click() cy.findByText('Data integrity').click() diff --git a/cypress/integration/add-route/info-link.feature b/cypress/e2e/add-route/info-link.feature similarity index 100% rename from cypress/integration/add-route/info-link.feature rename to cypress/e2e/add-route/info-link.feature diff --git a/cypress/integration/add-route/info-link/index.js b/cypress/e2e/add-route/info-link/index.js similarity index 88% rename from cypress/integration/add-route/info-link/index.js rename to cypress/e2e/add-route/info-link/index.js index 2243c584d..53b5129c9 100644 --- a/cypress/integration/add-route/info-link/index.js +++ b/cypress/e2e/add-route/info-link/index.js @@ -1,4 +1,4 @@ -import { Given, Then } from 'cypress-cucumber-preprocessor/steps' +import { Given, Then } from '@badeball/cypress-cucumber-preprocessor' const infoHref = 'https://docs.dhis2.org/en/use/user-guides/dhis-core-version-236/maintaining-the-system/scheduling.html' diff --git a/cypress/integration/edit-route/back-to-all-jobs.feature b/cypress/e2e/edit-route/back-to-all-jobs.feature similarity index 100% rename from cypress/integration/edit-route/back-to-all-jobs.feature rename to cypress/e2e/edit-route/back-to-all-jobs.feature diff --git a/cypress/integration/edit-route/back-to-all-jobs/index.js b/cypress/e2e/edit-route/back-to-all-jobs/index.js similarity index 92% rename from cypress/integration/edit-route/back-to-all-jobs/index.js rename to cypress/e2e/edit-route/back-to-all-jobs/index.js index ce8ddcb13..79d454e33 100644 --- a/cypress/integration/edit-route/back-to-all-jobs/index.js +++ b/cypress/e2e/edit-route/back-to-all-jobs/index.js @@ -1,4 +1,4 @@ -import { Given, When, Then } from 'cypress-cucumber-preprocessor/steps' +import { Given, When, Then } from '@badeball/cypress-cucumber-preprocessor' Given('a single user job exists', () => { cy.intercept( diff --git a/cypress/integration/edit-route/cron-presets.feature b/cypress/e2e/edit-route/cron-presets.feature similarity index 100% rename from cypress/integration/edit-route/cron-presets.feature rename to cypress/e2e/edit-route/cron-presets.feature diff --git a/cypress/integration/edit-route/cron-presets/index.js b/cypress/e2e/edit-route/cron-presets/index.js similarity index 94% rename from cypress/integration/edit-route/cron-presets/index.js rename to cypress/e2e/edit-route/cron-presets/index.js index ae862228b..4b65b8aa2 100644 --- a/cypress/integration/edit-route/cron-presets/index.js +++ b/cypress/e2e/edit-route/cron-presets/index.js @@ -1,4 +1,4 @@ -import { Given, When, Then } from 'cypress-cucumber-preprocessor/steps' +import { Given, When, Then } from '@badeball/cypress-cucumber-preprocessor' Given('a single cron scheduled user job exists', () => { cy.intercept( diff --git a/cypress/integration/edit-route/delete-button.feature b/cypress/e2e/edit-route/delete-button.feature similarity index 100% rename from cypress/integration/edit-route/delete-button.feature rename to cypress/e2e/edit-route/delete-button.feature diff --git a/cypress/integration/edit-route/delete-button/index.js b/cypress/e2e/edit-route/delete-button/index.js similarity index 94% rename from cypress/integration/edit-route/delete-button/index.js rename to cypress/e2e/edit-route/delete-button/index.js index 37fd88b6a..304b31224 100644 --- a/cypress/integration/edit-route/delete-button/index.js +++ b/cypress/e2e/edit-route/delete-button/index.js @@ -1,4 +1,4 @@ -import { Given, When, Then } from 'cypress-cucumber-preprocessor/steps' +import { Given, When, Then } from '@badeball/cypress-cucumber-preprocessor' Given('a single user job exists', () => { cy.intercept( diff --git a/cypress/integration/edit-route/display-jobs.feature b/cypress/e2e/edit-route/display-jobs.feature similarity index 100% rename from cypress/integration/edit-route/display-jobs.feature rename to cypress/e2e/edit-route/display-jobs.feature diff --git a/cypress/integration/edit-route/display-jobs/index.js b/cypress/e2e/edit-route/display-jobs/index.js similarity index 94% rename from cypress/integration/edit-route/display-jobs/index.js rename to cypress/e2e/edit-route/display-jobs/index.js index 0cf40a184..dcacf2fd7 100644 --- a/cypress/integration/edit-route/display-jobs/index.js +++ b/cypress/e2e/edit-route/display-jobs/index.js @@ -1,4 +1,4 @@ -import { Given, Then } from 'cypress-cucumber-preprocessor/steps' +import { Given, Then } from '@badeball/cypress-cucumber-preprocessor' Given('a single user job exists', () => { cy.intercept( diff --git a/cypress/integration/edit-route/edit-parameter-jobs.feature b/cypress/e2e/edit-route/edit-parameter-jobs.feature similarity index 100% rename from cypress/integration/edit-route/edit-parameter-jobs.feature rename to cypress/e2e/edit-route/edit-parameter-jobs.feature diff --git a/cypress/integration/edit-route/edit-parameter-jobs/index.js b/cypress/e2e/edit-route/edit-parameter-jobs/index.js similarity index 99% rename from cypress/integration/edit-route/edit-parameter-jobs/index.js rename to cypress/e2e/edit-route/edit-parameter-jobs/index.js index 5a7b70b00..a85ee4b9f 100644 --- a/cypress/integration/edit-route/edit-parameter-jobs/index.js +++ b/cypress/e2e/edit-route/edit-parameter-jobs/index.js @@ -1,4 +1,4 @@ -import { Given, Then } from 'cypress-cucumber-preprocessor/steps' +import { Given, Then } from '@badeball/cypress-cucumber-preprocessor' /** * Local helpers diff --git a/cypress/integration/edit-route/edit-parameterless-jobs.feature b/cypress/e2e/edit-route/edit-parameterless-jobs.feature similarity index 100% rename from cypress/integration/edit-route/edit-parameterless-jobs.feature rename to cypress/e2e/edit-route/edit-parameterless-jobs.feature diff --git a/cypress/integration/edit-route/edit-parameterless-jobs/index.js b/cypress/e2e/edit-route/edit-parameterless-jobs/index.js similarity index 97% rename from cypress/integration/edit-route/edit-parameterless-jobs/index.js rename to cypress/e2e/edit-route/edit-parameterless-jobs/index.js index e960112dd..4fc50a1a2 100644 --- a/cypress/integration/edit-route/edit-parameterless-jobs/index.js +++ b/cypress/e2e/edit-route/edit-parameterless-jobs/index.js @@ -1,4 +1,4 @@ -import { Given, Then } from 'cypress-cucumber-preprocessor/steps' +import { Given, Then } from '@badeball/cypress-cucumber-preprocessor' /** * Local helpers diff --git a/cypress/integration/edit-route/info-link.feature b/cypress/e2e/edit-route/info-link.feature similarity index 100% rename from cypress/integration/edit-route/info-link.feature rename to cypress/e2e/edit-route/info-link.feature diff --git a/cypress/integration/edit-route/info-link/index.js b/cypress/e2e/edit-route/info-link/index.js similarity index 90% rename from cypress/integration/edit-route/info-link/index.js rename to cypress/e2e/edit-route/info-link/index.js index 7e9f15a8c..d3686afe2 100644 --- a/cypress/integration/edit-route/info-link/index.js +++ b/cypress/e2e/edit-route/info-link/index.js @@ -1,4 +1,4 @@ -import { Given, Then } from 'cypress-cucumber-preprocessor/steps' +import { Given, Then } from '@badeball/cypress-cucumber-preprocessor' const infoHref = 'https://docs.dhis2.org/en/use/user-guides/dhis-core-version-236/maintaining-the-system/scheduling.html' diff --git a/cypress/integration/list-route/filter-jobs.feature b/cypress/e2e/list-route/filter-jobs.feature similarity index 100% rename from cypress/integration/list-route/filter-jobs.feature rename to cypress/e2e/list-route/filter-jobs.feature diff --git a/cypress/integration/list-route/filter-jobs/index.js b/cypress/e2e/list-route/filter-jobs/index.js similarity index 88% rename from cypress/integration/list-route/filter-jobs/index.js rename to cypress/e2e/list-route/filter-jobs/index.js index 5f2f2ab0d..a4905736c 100644 --- a/cypress/integration/list-route/filter-jobs/index.js +++ b/cypress/e2e/list-route/filter-jobs/index.js @@ -1,15 +1,15 @@ -import { Given, When, Then } from 'cypress-cucumber-preprocessor/steps' +import { Given, When, Then } from '@badeball/cypress-cucumber-preprocessor' Given('some user jobs exist', () => { cy.intercept( - { pathname: /jobConfigurations$/ }, + { pathname: /scheduler$/ }, { fixture: 'list-route/some-user-jobs' } ) }) Given('some user and system jobs exist', () => { cy.intercept( - { pathname: /jobConfigurations$/ }, + { pathname: /scheduler$/ }, { fixture: 'list-route/some-user-and-system-jobs' } ) }) diff --git a/cypress/integration/list-route/include-system-jobs.feature b/cypress/e2e/list-route/include-system-jobs.feature similarity index 100% rename from cypress/integration/list-route/include-system-jobs.feature rename to cypress/e2e/list-route/include-system-jobs.feature diff --git a/cypress/integration/list-route/include-system-jobs/index.js b/cypress/e2e/list-route/include-system-jobs/index.js similarity index 89% rename from cypress/integration/list-route/include-system-jobs/index.js rename to cypress/e2e/list-route/include-system-jobs/index.js index 28971e7c7..13c317aa5 100644 --- a/cypress/integration/list-route/include-system-jobs/index.js +++ b/cypress/e2e/list-route/include-system-jobs/index.js @@ -1,15 +1,15 @@ -import { Given, When, Then } from 'cypress-cucumber-preprocessor/steps' +import { Given, When, Then } from '@badeball/cypress-cucumber-preprocessor' Given('some user jobs exist', () => { cy.intercept( - { pathname: /jobConfigurations$/ }, + { pathname: /scheduler$/ }, { fixture: 'list-route/some-user-jobs' } ) }) Given('some user and system jobs exist', () => { cy.intercept( - { pathname: /jobConfigurations$/ }, + { pathname: /scheduler$/ }, { fixture: 'list-route/some-user-and-system-jobs' } ) }) diff --git a/cypress/integration/list-route/info-link.feature b/cypress/e2e/list-route/info-link.feature similarity index 100% rename from cypress/integration/list-route/info-link.feature rename to cypress/e2e/list-route/info-link.feature diff --git a/cypress/integration/list-route/info-link/index.js b/cypress/e2e/list-route/info-link/index.js similarity index 88% rename from cypress/integration/list-route/info-link/index.js rename to cypress/e2e/list-route/info-link/index.js index f6f2141aa..7c0e0ae7d 100644 --- a/cypress/integration/list-route/info-link/index.js +++ b/cypress/e2e/list-route/info-link/index.js @@ -1,4 +1,4 @@ -import { Given, Then } from 'cypress-cucumber-preprocessor/steps' +import { Given, Then } from '@badeball/cypress-cucumber-preprocessor' const infoHref = 'https://docs.dhis2.org/en/use/user-guides/dhis-core-version-236/maintaining-the-system/scheduling.html' diff --git a/cypress/integration/list-route/job-toggle.feature b/cypress/e2e/list-route/job-toggle.feature similarity index 80% rename from cypress/integration/list-route/job-toggle.feature rename to cypress/e2e/list-route/job-toggle.feature index b7e2a63ac..3391765df 100644 --- a/cypress/integration/list-route/job-toggle.feature +++ b/cypress/e2e/list-route/job-toggle.feature @@ -4,12 +4,12 @@ Feature: User jobs can be enabled and disabled Given a disabled user job exists And the user navigated to the job list page And the job toggle switch is off - When the user clicks the job toggle switch + When the user clicks the disabled job toggle switch Then the job toggle switch is on Scenario: The user disables a user job Given an enabled user job exists And the user navigated to the job list page And the job toggle switch is on - When the user clicks the job toggle switch + When the user clicks the enabled job toggle switch Then the job toggle switch is off diff --git a/cypress/e2e/list-route/job-toggle/index.js b/cypress/e2e/list-route/job-toggle/index.js new file mode 100644 index 000000000..44326d3a5 --- /dev/null +++ b/cypress/e2e/list-route/job-toggle/index.js @@ -0,0 +1,48 @@ +import { Given, When, Then } from '@badeball/cypress-cucumber-preprocessor' + +Given('a disabled user job exists', () => { + cy.intercept( + { pathname: /scheduler$/ }, + { fixture: 'list-route/disabled-user-job' } + ) +}) + +Given('an enabled user job exists', () => { + cy.intercept( + { pathname: /scheduler$/ }, + { fixture: 'list-route/enabled-user-job' } + ) +}) + +Given('the user navigated to the job list page', () => { + cy.visit('/') + cy.findByRole('heading', { name: 'Scheduled jobs' }).should('exist') +}) + +Given('the job toggle switch is off', () => { + cy.findByRole('switch', { name: 'Toggle job' }).should('not.be.checked') +}) + +When('the user clicks the enabled job toggle switch', () => { + cy.intercept({ pathname: /lnWRZN67iDU$/ }, { statusCode: 204 }) + cy.intercept( + { pathname: /scheduler$/ }, + { fixture: 'list-route/disabled-user-job' } + ) + + cy.findByRole('switch', { name: 'Toggle job' }).click() +}) + +When('the user clicks the disabled job toggle switch', () => { + cy.intercept({ pathname: /lnWRZN67iDU$/ }, { statusCode: 204 }) + cy.intercept( + { pathname: /scheduler$/ }, + { fixture: 'list-route/enabled-user-job' } + ) + + cy.findByRole('switch', { name: 'Toggle job' }).click() +}) + +Then('the job toggle switch is on', () => { + cy.findByRole('switch', { name: 'Toggle job' }).should('be.checked') +}) diff --git a/cypress/integration/list-route/list-user-jobs.feature b/cypress/e2e/list-route/list-user-jobs.feature similarity index 100% rename from cypress/integration/list-route/list-user-jobs.feature rename to cypress/e2e/list-route/list-user-jobs.feature diff --git a/cypress/integration/list-route/list-user-jobs/index.js b/cypress/e2e/list-route/list-user-jobs/index.js similarity index 77% rename from cypress/integration/list-route/list-user-jobs/index.js rename to cypress/e2e/list-route/list-user-jobs/index.js index ba7b48c9f..43ddd3b8b 100644 --- a/cypress/integration/list-route/list-user-jobs/index.js +++ b/cypress/e2e/list-route/list-user-jobs/index.js @@ -1,15 +1,12 @@ -import { Given, Then } from 'cypress-cucumber-preprocessor/steps' +import { Given, Then } from '@badeball/cypress-cucumber-preprocessor' Given('there are no user jobs', () => { - cy.intercept( - { pathname: /jobConfigurations$/ }, - { fixture: 'list-route/no-jobs' } - ) + cy.intercept({ pathname: /scheduler$/ }, { fixture: 'list-route/no-jobs' }) }) Given('some user jobs exist', () => { cy.intercept( - { pathname: /jobConfigurations$/ }, + { pathname: /scheduler$/ }, { fixture: 'list-route/some-user-jobs' } ) }) diff --git a/cypress/integration/list-route/new-job.feature b/cypress/e2e/list-route/new-job.feature similarity index 100% rename from cypress/integration/list-route/new-job.feature rename to cypress/e2e/list-route/new-job.feature diff --git a/cypress/integration/list-route/new-job/index.js b/cypress/e2e/list-route/new-job/index.js similarity index 82% rename from cypress/integration/list-route/new-job/index.js rename to cypress/e2e/list-route/new-job/index.js index 6d11c0917..6b2973048 100644 --- a/cypress/integration/list-route/new-job/index.js +++ b/cypress/e2e/list-route/new-job/index.js @@ -1,4 +1,4 @@ -import { Given, Then } from 'cypress-cucumber-preprocessor/steps' +import { Given, Then } from '@badeball/cypress-cucumber-preprocessor' Given('the user navigated to the job list page', () => { cy.visit('/') diff --git a/cypress/integration/list-route/system-job-actions.feature b/cypress/e2e/list-route/system-job-actions.feature similarity index 100% rename from cypress/integration/list-route/system-job-actions.feature rename to cypress/e2e/list-route/system-job-actions.feature diff --git a/cypress/integration/list-route/system-job-actions/index.js b/cypress/e2e/list-route/system-job-actions/index.js similarity index 81% rename from cypress/integration/list-route/system-job-actions/index.js rename to cypress/e2e/list-route/system-job-actions/index.js index f0c02a79e..e2360b36e 100644 --- a/cypress/integration/list-route/system-job-actions/index.js +++ b/cypress/e2e/list-route/system-job-actions/index.js @@ -1,10 +1,15 @@ -import { Given, When, Then } from 'cypress-cucumber-preprocessor/steps' +import { Given, When, Then } from '@badeball/cypress-cucumber-preprocessor' Given('a single system job exists', () => { cy.intercept( - { pathname: /jobConfigurations$/ }, + { pathname: /scheduler$/ }, { fixture: 'list-route/single-system-job' } ) + + cy.intercept( + { pathname: /jobConfigurations$/ }, + { fixture: 'list-route/single-system-job-job-configurations' } + ) }) Given('the user navigated to the job list page', () => { diff --git a/cypress/integration/list-route/user-job-actions.feature b/cypress/e2e/list-route/user-job-actions.feature similarity index 100% rename from cypress/integration/list-route/user-job-actions.feature rename to cypress/e2e/list-route/user-job-actions.feature diff --git a/cypress/integration/list-route/user-job-actions/index.js b/cypress/e2e/list-route/user-job-actions/index.js similarity index 92% rename from cypress/integration/list-route/user-job-actions/index.js rename to cypress/e2e/list-route/user-job-actions/index.js index 6a3f62c94..4df3acba0 100644 --- a/cypress/integration/list-route/user-job-actions/index.js +++ b/cypress/e2e/list-route/user-job-actions/index.js @@ -1,10 +1,15 @@ -import { Given, When, Then } from 'cypress-cucumber-preprocessor/steps' +import { Given, When, Then } from '@badeball/cypress-cucumber-preprocessor' Given('a single user job exists', () => { cy.intercept( - { pathname: /jobConfigurations$/ }, + { pathname: /scheduler$/ }, { fixture: 'list-route/single-user-job' } ) + + cy.intercept( + { pathname: /jobConfigurations$/ }, + { fixture: 'list-route/single-user-job-job-configurations' } + ) }) Given('the user navigated to the job list page', () => { diff --git a/cypress/integration/not-authorized-route/block-unauthorized.feature b/cypress/e2e/not-authorized-route/block-unauthorized.feature similarity index 100% rename from cypress/integration/not-authorized-route/block-unauthorized.feature rename to cypress/e2e/not-authorized-route/block-unauthorized.feature diff --git a/cypress/integration/not-authorized-route/block-unauthorized/index.js b/cypress/e2e/not-authorized-route/block-unauthorized/index.js similarity index 86% rename from cypress/integration/not-authorized-route/block-unauthorized/index.js rename to cypress/e2e/not-authorized-route/block-unauthorized/index.js index b756fde5d..87f25891e 100644 --- a/cypress/integration/not-authorized-route/block-unauthorized/index.js +++ b/cypress/e2e/not-authorized-route/block-unauthorized/index.js @@ -1,4 +1,4 @@ -import { Given, Then } from 'cypress-cucumber-preprocessor/steps' +import { Given, Then } from '@badeball/cypress-cucumber-preprocessor' Given('an unauthorized user navigates to the app', () => { cy.intercept( diff --git a/cypress/integration/view-route/back-to-all-jobs.feature b/cypress/e2e/view-route/back-to-all-jobs.feature similarity index 100% rename from cypress/integration/view-route/back-to-all-jobs.feature rename to cypress/e2e/view-route/back-to-all-jobs.feature diff --git a/cypress/integration/view-route/back-to-all-jobs/index.js b/cypress/e2e/view-route/back-to-all-jobs/index.js similarity index 89% rename from cypress/integration/view-route/back-to-all-jobs/index.js rename to cypress/e2e/view-route/back-to-all-jobs/index.js index a7bf3f8ca..7e429198c 100644 --- a/cypress/integration/view-route/back-to-all-jobs/index.js +++ b/cypress/e2e/view-route/back-to-all-jobs/index.js @@ -1,4 +1,4 @@ -import { Given, Then } from 'cypress-cucumber-preprocessor/steps' +import { Given, Then } from '@badeball/cypress-cucumber-preprocessor' Given('a single system job exists', () => { cy.intercept( diff --git a/cypress/integration/view-route/display-jobs.feature b/cypress/e2e/view-route/display-jobs.feature similarity index 100% rename from cypress/integration/view-route/display-jobs.feature rename to cypress/e2e/view-route/display-jobs.feature diff --git a/cypress/integration/view-route/display-jobs/index.js b/cypress/e2e/view-route/display-jobs/index.js similarity index 94% rename from cypress/integration/view-route/display-jobs/index.js rename to cypress/e2e/view-route/display-jobs/index.js index d2d8c910a..dc0405c94 100644 --- a/cypress/integration/view-route/display-jobs/index.js +++ b/cypress/e2e/view-route/display-jobs/index.js @@ -1,4 +1,4 @@ -import { Given, Then } from 'cypress-cucumber-preprocessor/steps' +import { Given, Then } from '@badeball/cypress-cucumber-preprocessor' Given('a single system job exists', () => { cy.intercept( diff --git a/cypress/integration/view-route/info-link.feature b/cypress/e2e/view-route/info-link.feature similarity index 100% rename from cypress/integration/view-route/info-link.feature rename to cypress/e2e/view-route/info-link.feature diff --git a/cypress/integration/view-route/info-link/index.js b/cypress/e2e/view-route/info-link/index.js similarity index 91% rename from cypress/integration/view-route/info-link/index.js rename to cypress/e2e/view-route/info-link/index.js index 3941c582c..77c5defd2 100644 --- a/cypress/integration/view-route/info-link/index.js +++ b/cypress/e2e/view-route/info-link/index.js @@ -1,4 +1,4 @@ -import { Given, Then } from 'cypress-cucumber-preprocessor/steps' +import { Given, Then } from '@badeball/cypress-cucumber-preprocessor' const infoHref = 'https://docs.dhis2.org/en/use/user-guides/dhis-core-version-236/maintaining-the-system/scheduling.html' diff --git a/cypress/fixtures/list-route/disabled-user-job.json b/cypress/fixtures/list-route/disabled-user-job.json index deb893dff..3ed166a93 100644 --- a/cypress/fixtures/list-route/disabled-user-job.json +++ b/cypress/fixtures/list-route/disabled-user-job.json @@ -1,48 +1,21 @@ -{ - "jobConfigurations": [ - { - "lastUpdated": "2021-02-23T11:28:02.492", - "id": "lnWRZN67iDU", - "href": "https://debug.dhis2.org/dev/api/32/jobConfigurations/lnWRZN67iDU", - "created": "2021-02-23T11:28:02.492", - "name": "Job 1", - "jobStatus": "DISABLED", - "displayName": "Job 1", - "enabled": false, - "leaderOnlyJob": false, - "externalAccess": false, - "jobType": "DATA_INTEGRITY", - "nextExecutionTime": "2021-03-01T03:00:00.000", - "sharing": { - "external": false, - "users": {}, - "userGroups": {} - }, - "cronExpression": "0 0 3 ? * MON", - "schedulingType": "CRON", - "lastRuntimeExecution": "00:00:21.780", - "lastExecutedStatus": "COMPLETED", - "lastExecuted": "2021-02-22T03:00:21.795", - "favorite": false, - "configurable": true, - "access": { - "read": true, - "update": true, - "externalize": false, - "delete": true, - "write": true, - "manage": true - }, - "lastUpdatedBy": { - "displayName": "John Traore", - "id": "xE7jOejl9FI", - "username": "admin" - }, - "favorites": [], - "translations": [], - "userGroupAccesses": [], - "attributeValues": [], - "userAccesses": [] - } - ] -} +[ + { + "name": "Job 1", + "type": "DATA_INTEGRITY", + "cronExpression": "0 0 3 ? * MON", + "nextExecutionTime": "2021-03-01T03:00:00.000", + "status": "DISABLED", + "enabled": false, + "configurable": true, + "sequence": [ + { + "id": "lnWRZN67iDU", + "name": "Job 1", + "type": "DATA_INTEGRITY", + "cronExpression": "0 0 3 ? * MON", + "nextExecutionTime": "2021-03-01T03:00:00.000", + "status": "DISABLED" + } + ] + } +] diff --git a/cypress/fixtures/list-route/enabled-user-job.json b/cypress/fixtures/list-route/enabled-user-job.json index 07df2e7a3..580ca662b 100644 --- a/cypress/fixtures/list-route/enabled-user-job.json +++ b/cypress/fixtures/list-route/enabled-user-job.json @@ -1,48 +1,21 @@ -{ - "jobConfigurations": [ - { - "lastUpdated": "2021-02-23T11:28:02.492", - "id": "lnWRZN67iDU", - "href": "https://debug.dhis2.org/dev/api/32/jobConfigurations/lnWRZN67iDU", - "created": "2021-02-23T11:28:02.492", - "name": "Job 1", - "jobStatus": "DISABLED", - "displayName": "Job 1", - "enabled": true, - "leaderOnlyJob": false, - "externalAccess": false, - "jobType": "DATA_INTEGRITY", - "nextExecutionTime": "2021-03-01T03:00:00.000", - "sharing": { - "external": false, - "users": {}, - "userGroups": {} - }, - "cronExpression": "0 0 3 ? * MON", - "schedulingType": "CRON", - "lastRuntimeExecution": "00:00:21.780", - "lastExecutedStatus": "COMPLETED", - "lastExecuted": "2021-02-22T03:00:21.795", - "favorite": false, - "configurable": true, - "access": { - "read": true, - "update": true, - "externalize": false, - "delete": true, - "write": true, - "manage": true - }, - "lastUpdatedBy": { - "displayName": "John Traore", - "id": "xE7jOejl9FI", - "username": "admin" - }, - "favorites": [], - "translations": [], - "userGroupAccesses": [], - "attributeValues": [], - "userAccesses": [] - } - ] -} +[ + { + "name": "Job 1", + "type": "DATA_INTEGRITY", + "cronExpression": "0 0 3 ? * MON", + "nextExecutionTime": "2021-03-01T03:00:00.000", + "status": "DISABLED", + "enabled": true, + "configurable": true, + "sequence": [ + { + "id": "lnWRZN67iDU", + "name": "Job 1", + "type": "DATA_INTEGRITY", + "cronExpression": "0 0 3 ? * MON", + "nextExecutionTime": "2021-03-01T03:00:00.000", + "status": "DISABLED" + } + ] + } +] diff --git a/cypress/fixtures/list-route/no-jobs.json b/cypress/fixtures/list-route/no-jobs.json index a18880dff..fe51488c7 100644 --- a/cypress/fixtures/list-route/no-jobs.json +++ b/cypress/fixtures/list-route/no-jobs.json @@ -1 +1 @@ -{ "jobConfigurations": [] } +[] diff --git a/cypress/fixtures/list-route/single-system-job-job-configurations.json b/cypress/fixtures/list-route/single-system-job-job-configurations.json new file mode 100644 index 000000000..4e0536b21 --- /dev/null +++ b/cypress/fixtures/list-route/single-system-job-job-configurations.json @@ -0,0 +1,43 @@ +{ + "jobConfigurations": [ + { + "lastUpdated": "2021-02-24T02:00:00.368", + "id": "sHMedQF7VYa", + "href": "https://debug.dhis2.org/dev/api/32/jobConfigurations/sHMedQF7VYa", + "created": "2021-02-19T13:51:53.974", + "name": "System Job 1", + "jobStatus": "SCHEDULED", + "displayName": "System Job 1", + "enabled": true, + "leaderOnlyJob": true, + "externalAccess": false, + "jobType": "CREDENTIALS_EXPIRY_ALERT", + "nextExecutionTime": "2021-02-25T02:00:00.000", + "sharing": { + "external": false, + "users": {}, + "userGroups": {} + }, + "cronExpression": "0 0 2 ? * *", + "schedulingType": "CRON", + "lastRuntimeExecution": "00:00:00.349", + "lastExecutedStatus": "COMPLETED", + "lastExecuted": "2021-02-24T02:00:00.364", + "favorite": false, + "configurable": false, + "access": { + "read": true, + "update": true, + "externalize": false, + "delete": true, + "write": true, + "manage": true + }, + "favorites": [], + "translations": [], + "userGroupAccesses": [], + "attributeValues": [], + "userAccesses": [] + } + ] +} diff --git a/cypress/fixtures/list-route/single-system-job.json b/cypress/fixtures/list-route/single-system-job.json index 4e0536b21..4f5cda83f 100644 --- a/cypress/fixtures/list-route/single-system-job.json +++ b/cypress/fixtures/list-route/single-system-job.json @@ -1,43 +1,21 @@ -{ - "jobConfigurations": [ - { - "lastUpdated": "2021-02-24T02:00:00.368", - "id": "sHMedQF7VYa", - "href": "https://debug.dhis2.org/dev/api/32/jobConfigurations/sHMedQF7VYa", - "created": "2021-02-19T13:51:53.974", - "name": "System Job 1", - "jobStatus": "SCHEDULED", - "displayName": "System Job 1", - "enabled": true, - "leaderOnlyJob": true, - "externalAccess": false, - "jobType": "CREDENTIALS_EXPIRY_ALERT", - "nextExecutionTime": "2021-02-25T02:00:00.000", - "sharing": { - "external": false, - "users": {}, - "userGroups": {} - }, - "cronExpression": "0 0 2 ? * *", - "schedulingType": "CRON", - "lastRuntimeExecution": "00:00:00.349", - "lastExecutedStatus": "COMPLETED", - "lastExecuted": "2021-02-24T02:00:00.364", - "favorite": false, - "configurable": false, - "access": { - "read": true, - "update": true, - "externalize": false, - "delete": true, - "write": true, - "manage": true - }, - "favorites": [], - "translations": [], - "userGroupAccesses": [], - "attributeValues": [], - "userAccesses": [] - } - ] -} +[ + { + "name": "System Job 1", + "type": "CREDENTIALS_EXPIRY_ALERT", + "cronExpression": "0 0 2 ? * *", + "nextExecutionTime": "2021-02-25T02:00:00.000", + "status": "SCHEDULED", + "enabled": true, + "configurable": false, + "sequence": [ + { + "id": "sHMedQF7VYa", + "name": "System Job 1", + "type": "CREDENTIALS_EXPIRY_ALERT", + "cronExpression": "0 0 2 ? * *", + "nextExecutionTime": "2021-02-25T02:00:00.000", + "status": "SCHEDULED" + } + ] + } +] diff --git a/cypress/fixtures/list-route/single-user-job-job-configurations.json b/cypress/fixtures/list-route/single-user-job-job-configurations.json new file mode 100644 index 000000000..89cdfdbf4 --- /dev/null +++ b/cypress/fixtures/list-route/single-user-job-job-configurations.json @@ -0,0 +1,48 @@ +{ + "jobConfigurations": [ + { + "lastUpdated": "2021-02-23T11:28:02.492", + "id": "lnWRZN67iDU", + "href": "https://debug.dhis2.org/dev/api/32/jobConfigurations/lnWRZN67iDU", + "created": "2021-02-23T11:28:02.492", + "name": "Job 1", + "jobStatus": "SCHEDULED", + "displayName": "Job 1", + "enabled": true, + "leaderOnlyJob": false, + "externalAccess": false, + "jobType": "DATA_INTEGRITY", + "nextExecutionTime": "2021-03-01T03:00:00.000", + "sharing": { + "external": false, + "users": {}, + "userGroups": {} + }, + "cronExpression": "0 0 3 ? * MON", + "schedulingType": "CRON", + "lastRuntimeExecution": "00:00:21.780", + "lastExecutedStatus": "COMPLETED", + "lastExecuted": "2021-02-22T03:00:21.795", + "favorite": false, + "configurable": true, + "access": { + "read": true, + "update": true, + "externalize": false, + "delete": true, + "write": true, + "manage": true + }, + "lastUpdatedBy": { + "displayName": "John Traore", + "id": "xE7jOejl9FI", + "username": "admin" + }, + "favorites": [], + "translations": [], + "userGroupAccesses": [], + "attributeValues": [], + "userAccesses": [] + } + ] +} diff --git a/cypress/fixtures/list-route/single-user-job.json b/cypress/fixtures/list-route/single-user-job.json index 89cdfdbf4..0bd903d7f 100644 --- a/cypress/fixtures/list-route/single-user-job.json +++ b/cypress/fixtures/list-route/single-user-job.json @@ -1,48 +1,21 @@ -{ - "jobConfigurations": [ - { - "lastUpdated": "2021-02-23T11:28:02.492", - "id": "lnWRZN67iDU", - "href": "https://debug.dhis2.org/dev/api/32/jobConfigurations/lnWRZN67iDU", - "created": "2021-02-23T11:28:02.492", - "name": "Job 1", - "jobStatus": "SCHEDULED", - "displayName": "Job 1", - "enabled": true, - "leaderOnlyJob": false, - "externalAccess": false, - "jobType": "DATA_INTEGRITY", - "nextExecutionTime": "2021-03-01T03:00:00.000", - "sharing": { - "external": false, - "users": {}, - "userGroups": {} - }, - "cronExpression": "0 0 3 ? * MON", - "schedulingType": "CRON", - "lastRuntimeExecution": "00:00:21.780", - "lastExecutedStatus": "COMPLETED", - "lastExecuted": "2021-02-22T03:00:21.795", - "favorite": false, - "configurable": true, - "access": { - "read": true, - "update": true, - "externalize": false, - "delete": true, - "write": true, - "manage": true - }, - "lastUpdatedBy": { - "displayName": "John Traore", - "id": "xE7jOejl9FI", - "username": "admin" - }, - "favorites": [], - "translations": [], - "userGroupAccesses": [], - "attributeValues": [], - "userAccesses": [] - } - ] -} +[ + { + "name": "Job 1", + "type": "DATA_INTEGRITY", + "cronExpression": "0 0 3 ? * MON", + "nextExecutionTime": "2021-03-01T03:00:00.000", + "status": "SCHEDULED", + "enabled": true, + "configurable": true, + "sequence": [ + { + "id": "lnWRZN67iDU", + "name": "Job 1", + "type": "DATA_INTEGRITY", + "cronExpression": "0 0 3 ? * MON", + "nextExecutionTime": "2021-03-01T03:00:00.000", + "status": "SCHEDULED" + } + ] + } +] diff --git a/cypress/fixtures/list-route/some-user-and-system-jobs.json b/cypress/fixtures/list-route/some-user-and-system-jobs.json index 32fd639c6..528822340 100644 --- a/cypress/fixtures/list-route/some-user-and-system-jobs.json +++ b/cypress/fixtures/list-route/some-user-and-system-jobs.json @@ -1,256 +1,116 @@ -{ - "jobConfigurations": [ - { - "lastUpdated": "2021-02-24T02:00:00.368", - "id": "sHMedQF7VYa", - "href": "https://debug.dhis2.org/dev/api/32/jobConfigurations/sHMedQF7VYa", - "created": "2021-02-19T13:51:53.974", - "name": "System Job 1", - "jobStatus": "SCHEDULED", - "displayName": "System Job 1", - "enabled": true, - "leaderOnlyJob": true, - "externalAccess": false, - "jobType": "CREDENTIALS_EXPIRY_ALERT", - "nextExecutionTime": "2021-02-25T02:00:00.000", - "sharing": { - "external": false, - "users": {}, - "userGroups": {} - }, - "cronExpression": "0 0 2 ? * *", - "schedulingType": "CRON", - "lastRuntimeExecution": "00:00:00.349", - "lastExecutedStatus": "COMPLETED", - "lastExecuted": "2021-02-24T02:00:00.364", - "favorite": false, - "configurable": false, - "access": { - "read": true, - "update": true, - "externalize": false, - "delete": true, - "write": true, - "manage": true - }, - "favorites": [], - "translations": [], - "userGroupAccesses": [], - "attributeValues": [], - "userAccesses": [] - }, - { - "lastUpdated": "2021-02-24T02:00:00.406", - "id": "YvAwAmrqAtN", - "href": "https://debug.dhis2.org/dev/api/32/jobConfigurations/YvAwAmrqAtN", - "created": "2017-12-08T12:45:18.355", - "name": "System Job 2", - "jobStatus": "SCHEDULED", - "displayName": "System Job 2", - "enabled": true, - "leaderOnlyJob": true, - "externalAccess": false, - "jobType": "DATA_SET_NOTIFICATION", - "nextExecutionTime": "2021-02-25T02:00:00.000", - "sharing": { - "external": false, - "users": {}, - "userGroups": {} - }, - "cronExpression": "0 0 2 * * ?", - "schedulingType": "CRON", - "lastRuntimeExecution": "00:00:00.364", - "lastExecutedStatus": "COMPLETED", - "lastExecuted": "2021-02-24T02:00:00.386", - "favorite": false, - "configurable": false, - "access": { - "read": true, - "update": true, - "externalize": false, - "delete": true, - "write": true, - "manage": true - }, - "favorites": [], - "translations": [], - "userGroupAccesses": [], - "attributeValues": [], - "userAccesses": [] - }, - { - "lastUpdated": "2021-02-24T02:00:00.732", - "id": "BFa3jDsbtdO", - "href": "https://debug.dhis2.org/dev/api/32/jobConfigurations/BFa3jDsbtdO", - "created": "2017-12-08T12:45:18.337", - "name": "System Job 3", - "jobStatus": "SCHEDULED", - "displayName": "System Job 3", - "enabled": true, - "leaderOnlyJob": true, - "externalAccess": false, - "jobType": "DATA_STATISTICS", - "nextExecutionTime": "2021-02-25T02:00:00.000", - "sharing": { - "external": false, - "users": {}, - "userGroups": {} - }, - "cronExpression": "0 0 2 * * ?", - "schedulingType": "CRON", - "lastRuntimeExecution": "00:00:00.727", - "lastExecutedStatus": "COMPLETED", - "lastExecuted": "2021-02-24T02:00:00.729", - "favorite": false, - "configurable": false, - "access": { - "read": true, - "update": true, - "externalize": false, - "delete": true, - "write": true, - "manage": true - }, - "favorites": [], - "translations": [], - "userGroupAccesses": [], - "attributeValues": [], - "userAccesses": [] - }, - { - "lastUpdated": "2021-02-23T11:28:02.492", - "id": "lnWRZN67iDU", - "href": "https://debug.dhis2.org/dev/api/32/jobConfigurations/lnWRZN67iDU", - "created": "2021-02-23T11:28:02.492", - "name": "Job 1", - "jobStatus": "SCHEDULED", - "displayName": "Job 1", - "enabled": true, - "leaderOnlyJob": false, - "externalAccess": false, - "jobType": "DATA_INTEGRITY", - "nextExecutionTime": "2021-03-01T03:00:00.000", - "sharing": { - "external": false, - "users": {}, - "userGroups": {} - }, - "cronExpression": "0 0 3 ? * MON", - "schedulingType": "CRON", - "lastRuntimeExecution": "00:00:21.780", - "lastExecutedStatus": "COMPLETED", - "lastExecuted": "2021-02-22T03:00:21.795", - "favorite": false, - "configurable": true, - "access": { - "read": true, - "update": true, - "externalize": false, - "delete": true, - "write": true, - "manage": true - }, - "lastUpdatedBy": { - "displayName": "John Traore", - "id": "xE7jOejl9FI", - "username": "admin" - }, - "favorites": [], - "translations": [], - "userGroupAccesses": [], - "attributeValues": [], - "userAccesses": [] - }, - { - "lastUpdated": "2021-02-22T03:00:01.033", - "id": "HEUQRVwkSaB", - "href": "https://debug.dhis2.org/dev/api/32/jobConfigurations/HEUQRVwkSaB", - "created": "2021-02-10T10:11:14.515", - "name": "Job 2", - "jobStatus": "SCHEDULED", - "displayName": "Job 2", - "enabled": true, - "leaderOnlyJob": false, - "externalAccess": false, - "jobType": "MONITORING", - "nextExecutionTime": "2021-03-01T03:00:00.000", - "sharing": { - "external": false, - "users": {}, - "userGroups": {} - }, - "cronExpression": "0 0 3 ? * MON", - "schedulingType": "CRON", - "lastRuntimeExecution": "00:00:01.016", - "lastExecutedStatus": "COMPLETED", - "lastExecuted": "2021-02-22T03:00:01.031", - "favorite": false, - "configurable": true, - "access": { - "read": true, - "update": true, - "externalize": false, - "delete": true, - "write": true, - "manage": true - }, - "jobParameters": { - "relativeEnd": 2, - "persistResults": false, - "relativeStart": 1, - "sendNotifications": false, - "validationRuleGroups": ["WUZXEFdn1PX", "UiOSY1iIdub"] - }, - "favorites": [], - "translations": [], - "userGroupAccesses": [], - "attributeValues": [], - "userAccesses": [] - }, - { - "lastUpdated": "2021-02-23T11:31:23.189", - "id": "thARpL8RTbe", - "href": "https://debug.dhis2.org/dev/api/32/jobConfigurations/thARpL8RTbe", - "created": "2021-02-23T11:31:23.189", - "name": "Job 3", - "jobStatus": "SCHEDULED", - "displayName": "Job 3", - "enabled": true, - "leaderOnlyJob": false, - "externalAccess": false, - "jobType": "DISABLE_INACTIVE_USERS", - "nextExecutionTime": "2021-03-01T03:00:00.000", - "sharing": { - "external": false, - "users": {}, - "userGroups": {} - }, - "cronExpression": "0 0 3 ? * MON", - "schedulingType": "CRON", - "lastExecutedStatus": "NOT_STARTED", - "favorite": false, - "configurable": true, - "access": { - "read": true, - "update": true, - "externalize": false, - "delete": true, - "write": true, - "manage": true - }, - "lastUpdatedBy": { - "displayName": "John Traore", - "id": "xE7jOejl9FI", - "username": "admin" - }, - "jobParameters": { - "inactiveMonths": 6 - }, - "favorites": [], - "translations": [], - "userGroupAccesses": [], - "attributeValues": [], - "userAccesses": [] - } - ] -} +[ + { + "name": "System Job 1", + "type": "CREDENTIALS_EXPIRY_ALERT", + "cronExpression": "0 0 2 ? * *", + "nextExecutionTime": "2021-02-25T02:00:00.000", + "status": "SCHEDULED", + "enabled": true, + "configurable": false, + "sequence": [ + { + "id": "sHMedQF7VYa", + "name": "System Job 1", + "type": "CREDENTIALS_EXPIRY_ALERT", + "cronExpression": "0 0 2 ? * *", + "nextExecutionTime": "2021-02-25T02:00:00.000", + "status": "SCHEDULED" + } + ] + }, + { + "name": "System Job 2", + "type": "DATA_SET_NOTIFICATION", + "cronExpression": "0 0 2 ? * *", + "nextExecutionTime": "2021-02-25T02:00:00.000", + "status": "SCHEDULED", + "enabled": true, + "configurable": false, + "sequence": [ + { + "id": "YvAwAmrqAtN", + "name": "System Job 2", + "type": "DATA_SET_NOTIFICATION", + "cronExpression": "0 0 2 ? * *", + "nextExecutionTime": "2021-02-25T02:00:00.000", + "status": "SCHEDULED" + } + ] + }, + { + "name": "System Job 3", + "type": "DATA_STATISTICS", + "cronExpression": "0 0 2 ? * *", + "nextExecutionTime": "2021-02-25T02:00:00.000", + "status": "SCHEDULED", + "enabled": true, + "configurable": false, + "sequence": [ + { + "id": "BFa3jDsbtdO", + "name": "System Job 3", + "type": "DATA_STATISTICS", + "cronExpression": "0 0 2 ? * *", + "nextExecutionTime": "2021-02-25T02:00:00.000", + "status": "SCHEDULED" + } + ] + }, + { + "name": "Job 1", + "type": "DATA_INTEGRITY", + "cronExpression": "0 0 3 ? * MON", + "nextExecutionTime": "2021-03-01T03:00:00.000", + "status": "SCHEDULED", + "enabled": true, + "configurable": true, + "sequence": [ + { + "id": "lnWRZN67iDU", + "name": "Job 1", + "type": "DATA_INTEGRITY", + "cronExpression": "0 0 3 ? * MON", + "nextExecutionTime": "2021-03-01T03:00:00.000", + "status": "SCHEDULED" + } + ] + }, + { + "name": "Job 2", + "type": "MONITORING", + "cronExpression": "0 0 3 ? * MON", + "nextExecutionTime": "2021-03-01T03:00:00.000", + "status": "SCHEDULED", + "enabled": true, + "configurable": true, + "sequence": [ + { + "id": "HEUQRVwkSaB", + "name": "Job 2", + "type": "MONITORING", + "cronExpression": "0 0 3 ? * MON", + "nextExecutionTime": "2021-03-01T03:00:00.000", + "status": "SCHEDULED" + } + ] + }, + { + "name": "Job 3", + "type": "DISABLE_INACTIVE_USERS", + "cronExpression": "0 0 3 ? * MON", + "nextExecutionTime": "2021-03-01T03:00:00.000", + "status": "SCHEDULED", + "enabled": true, + "configurable": true, + "sequence": [ + { + "id": "thARpL8RTbe", + "name": "Job 3", + "type": "DISABLE_INACTIVE_USERS", + "cronExpression": "0 0 3 ? * MON", + "nextExecutionTime": "2021-03-01T03:00:00.000", + "status": "SCHEDULED" + } + ] + } +] diff --git a/cypress/fixtures/list-route/some-user-jobs.json b/cypress/fixtures/list-route/some-user-jobs.json index bfa78942e..0abf57d16 100644 --- a/cypress/fixtures/list-route/some-user-jobs.json +++ b/cypress/fixtures/list-route/some-user-jobs.json @@ -1,139 +1,59 @@ -{ - "jobConfigurations": [ - { - "lastUpdated": "2021-02-23T11:28:02.492", - "id": "lnWRZN67iDU", - "href": "https://debug.dhis2.org/dev/api/32/jobConfigurations/lnWRZN67iDU", - "created": "2021-02-23T11:28:02.492", - "name": "Job 1", - "jobStatus": "SCHEDULED", - "displayName": "Job 1", - "enabled": true, - "leaderOnlyJob": false, - "externalAccess": false, - "jobType": "DATA_INTEGRITY", - "nextExecutionTime": "2021-03-01T03:00:00.000", - "sharing": { - "external": false, - "users": {}, - "userGroups": {} - }, - "cronExpression": "0 0 3 ? * MON", - "schedulingType": "CRON", - "lastRuntimeExecution": "00:00:21.780", - "lastExecutedStatus": "COMPLETED", - "lastExecuted": "2021-02-22T03:00:21.795", - "favorite": false, - "configurable": true, - "access": { - "read": true, - "update": true, - "externalize": false, - "delete": true, - "write": true, - "manage": true - }, - "lastUpdatedBy": { - "displayName": "John Traore", - "id": "xE7jOejl9FI", - "username": "admin" - }, - "favorites": [], - "translations": [], - "userGroupAccesses": [], - "attributeValues": [], - "userAccesses": [] - }, - { - "lastUpdated": "2021-02-22T03:00:01.033", - "id": "HEUQRVwkSaB", - "href": "https://debug.dhis2.org/dev/api/32/jobConfigurations/HEUQRVwkSaB", - "created": "2021-02-10T10:11:14.515", - "name": "Job 2", - "jobStatus": "SCHEDULED", - "displayName": "Job 2", - "enabled": true, - "leaderOnlyJob": false, - "externalAccess": false, - "jobType": "MONITORING", - "nextExecutionTime": "2021-03-01T03:00:00.000", - "sharing": { - "external": false, - "users": {}, - "userGroups": {} - }, - "cronExpression": "0 0 3 ? * MON", - "schedulingType": "CRON", - "lastRuntimeExecution": "00:00:01.016", - "lastExecutedStatus": "COMPLETED", - "lastExecuted": "2021-02-22T03:00:01.031", - "favorite": false, - "configurable": true, - "access": { - "read": true, - "update": true, - "externalize": false, - "delete": true, - "write": true, - "manage": true - }, - "jobParameters": { - "relativeEnd": 2, - "persistResults": false, - "relativeStart": 1, - "sendNotifications": false, - "validationRuleGroups": ["WUZXEFdn1PX", "UiOSY1iIdub"] - }, - "favorites": [], - "translations": [], - "userGroupAccesses": [], - "attributeValues": [], - "userAccesses": [] - }, - { - "lastUpdated": "2021-02-23T11:31:23.189", - "id": "thARpL8RTbe", - "href": "https://debug.dhis2.org/dev/api/32/jobConfigurations/thARpL8RTbe", - "created": "2021-02-23T11:31:23.189", - "name": "Job 3", - "jobStatus": "SCHEDULED", - "displayName": "Job 3", - "enabled": true, - "leaderOnlyJob": false, - "externalAccess": false, - "jobType": "DISABLE_INACTIVE_USERS", - "nextExecutionTime": "2021-03-01T03:00:00.000", - "sharing": { - "external": false, - "users": {}, - "userGroups": {} - }, - "cronExpression": "0 0 3 ? * MON", - "schedulingType": "CRON", - "lastExecutedStatus": "NOT_STARTED", - "favorite": false, - "configurable": true, - "access": { - "read": true, - "update": true, - "externalize": false, - "delete": true, - "write": true, - "manage": true - }, - "lastUpdatedBy": { - "displayName": "John Traore", - "id": "xE7jOejl9FI", - "username": "admin" - }, - "jobParameters": { - "inactiveMonths": 6 - }, - "favorites": [], - "translations": [], - "userGroupAccesses": [], - "attributeValues": [], - "userAccesses": [] - } - ] -} +[ + { + "name": "Job 1", + "type": "DATA_INTEGRITY", + "cronExpression": "0 0 3 ? * MON", + "nextExecutionTime": "2021-03-01T03:00:00.000", + "status": "SCHEDULED", + "enabled": true, + "configurable": true, + "sequence": [ + { + "id": "lnWRZN67iDU", + "name": "Job 1", + "type": "DATA_INTEGRITY", + "cronExpression": "0 0 3 ? * MON", + "nextExecutionTime": "2021-03-01T03:00:00.000", + "status": "SCHEDULED" + } + ] + }, + { + "name": "Job 2", + "type": "MONITORING", + "cronExpression": "0 0 3 ? * MON", + "nextExecutionTime": "2021-03-01T03:00:00.000", + "status": "SCHEDULED", + "enabled": true, + "configurable": true, + "sequence": [ + { + "id": "HEUQRVwkSaB", + "name": "Job 2", + "type": "MONITORING", + "cronExpression": "0 0 3 ? * MON", + "nextExecutionTime": "2021-03-01T03:00:00.000", + "status": "SCHEDULED" + } + ] + }, + { + "name": "Job 3", + "type": "DISABLE_INACTIVE_USERS", + "cronExpression": "0 0 3 ? * MON", + "nextExecutionTime": "2021-03-01T03:00:00.000", + "status": "SCHEDULED", + "enabled": true, + "configurable": true, + "sequence": [ + { + "id": "thARpL8RTbe", + "name": "Job 3", + "type": "DISABLE_INACTIVE_USERS", + "cronExpression": "0 0 3 ? * MON", + "nextExecutionTime": "2021-03-01T03:00:00.000", + "status": "SCHEDULED" + } + ] + } +] diff --git a/cypress/fixtures/network/40/all_user_defined_jobs_should_be_listed.json b/cypress/fixtures/network/40/all_user_defined_jobs_should_be_listed.json deleted file mode 100644 index 7520e05d4..000000000 --- a/cypress/fixtures/network/40/all_user_defined_jobs_should_be_listed.json +++ /dev/null @@ -1,271 +0,0 @@ -[ - { - "path": "/api/40/systemSettings/helpPageLink", - "featureName": "All user defined jobs should be listed", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"helpPageLink\":\"https://dhis2.github.io/dhis2-docs/master/en/user/html/dhis2_user_manual_en.html\"}", - "responseSize": 99, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations/jobTypes?fields=*&paging=false", - "featureName": "All user defined jobs should be listed", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"jobTypes\":[{\"name\":\"Data integrity\",\"jobType\":\"DATA_INTEGRITY\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"checks\",\"fieldName\":\"Checks\",\"persisted\":false,\"collectionName\":\"checks\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/dataIntegrity\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.parameters.DataIntegrityJobParameters$DataIntegrityReportType\",\"name\":\"type\",\"fieldName\":\"Type\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"REPORT\",\"SUMMARY\",\"DETAILS\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Resource table\",\"jobType\":\"RESOURCE_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Analytics table\",\"jobType\":\"ANALYTICS_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"skipPrograms\",\"fieldName\":\"Skip programs\",\"persisted\":false,\"collectionName\":\"skipPrograms\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/programs\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipResourceTables\",\"fieldName\":\"Skip resource tables\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Continuous analytics table\",\"jobType\":\"CONTINUOUS_ANALYTICS_TABLE\",\"schedulingType\":\"FIXED_DELAY\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"fullUpdateHourOfDay\",\"fieldName\":\"Full update hour of day\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Data sync\",\"jobType\":\"DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker programs data sync\",\"jobType\":\"TRACKER_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Event programs data sync\",\"jobType\":\"EVENT_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Meta data sync\",\"jobType\":\"META_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"trackerProgramPageSize\",\"fieldName\":\"Tracker program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"eventProgramPageSize\",\"fieldName\":\"Event program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"dataValuesPageSize\",\"fieldName\":\"Data values page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Aggregate data exchange\",\"jobType\":\"AGGREGATE_DATA_EXCHANGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"dataExchangeIds\",\"fieldName\":\"Data exchange ids\",\"persisted\":false,\"collectionName\":\"dataExchangeIds\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/aggregateDataExchanges\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Send scheduled message\",\"jobType\":\"SEND_SCHEDULED_MESSAGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Program notifications\",\"jobType\":\"PROGRAM_NOTIFICATIONS\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Monitoring\",\"jobType\":\"MONITORING\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"validationRuleGroups\",\"fieldName\":\"Validation rule groups\",\"persisted\":false,\"collectionName\":\"validationRuleGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/validationRuleGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"sendNotifications\",\"fieldName\":\"Send notifications\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"persistResults\",\"fieldName\":\"Persist results\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Push analysis\",\"jobType\":\"PUSH_ANALYSIS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"pushAnalysis\",\"fieldName\":\"Push analysis\",\"persisted\":false,\"collectionName\":\"pushAnalysis\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/pushAnalysis\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker search optimization\",\"jobType\":\"TRACKER_SEARCH_OPTIMIZATION\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"attributes\",\"fieldName\":\"Attributes\",\"persisted\":false,\"collectionName\":\"attributes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/trackedEntityAttributes/indexable\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipIndexDeletion\",\"fieldName\":\"Skip index deletion\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Predictor\",\"jobType\":\"PREDICTOR\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictors\",\"fieldName\":\"Predictors\",\"persisted\":false,\"collectionName\":\"predictors\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictors\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictorGroups\",\"fieldName\":\"Predictor groups\",\"persisted\":false,\"collectionName\":\"predictorGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictorGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Disable inactive users\",\"jobType\":\"DISABLE_INACTIVE_USERS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"inactiveMonths\",\"fieldName\":\"Inactive months\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"reminderDaysBefore\",\"fieldName\":\"Reminder days before\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Test\",\"jobType\":\"TEST\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Long\",\"name\":\"waitMillis\",\"fieldName\":\"Wait millis\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"stages\",\"fieldName\":\"Stages\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtStage\",\"fieldName\":\"Fail at stage\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"items\",\"fieldName\":\"Items\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtItem\",\"fieldName\":\"Fail at item\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Long\",\"name\":\"itemDuration\",\"fieldName\":\"Item duration\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.String\",\"name\":\"failWithMessage\",\"fieldName\":\"Fail with message\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"failWithException\",\"fieldName\":\"Fail with exception\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.JobProgress$FailurePolicy\",\"name\":\"failWithPolicy\",\"fieldName\":\"Fail with policy\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"PARENT\",\"FAIL\",\"SKIP_STAGE\",\"SKIP_ITEM\",\"SKIP_ITEM_OUTLIER\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"runStagesParallel\",\"fieldName\":\"Run stages parallel\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]}]}", - "responseSize": 24994, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/analytics/tableTypes", - "featureName": "All user defined jobs should be listed", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"]", - "responseSize": 122, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictors?paging=false", - "featureName": "All user defined jobs should be listed", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictors\":[{\"displayName\":\"Malaria Outbreak Threshold\",\"id\":\"tEK1OEqS4O1\"}]}", - "responseSize": 80, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/pushAnalysis?paging=false", - "featureName": "All user defined jobs should be listed", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"pushAnalysis\":[{\"displayName\":\"Immunization Key Indicators Monthly Report\",\"id\":\"jtcMAKhWwnc\"}]}", - "responseSize": 98, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/validationRuleGroups?paging=false", - "featureName": "All user defined jobs should be listed", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"validationRuleGroups\":[{\"displayName\":\"ANC\",\"id\":\"UP1lctvalPn\"},{\"displayName\":\"Commodities\",\"id\":\"xcpl667ccfF\"},{\"displayName\":\"Critical event\",\"id\":\"xWtt9c443Lt\"},{\"displayName\":\"District stock\",\"id\":\"mEtdbIDDhix\"},{\"displayName\":\"Epidemic disease outbreak\",\"id\":\"y2yQIm79VTW\"},{\"displayName\":\"Facility Stock\",\"id\":\"SqyI8HKqI4g\"},{\"displayName\":\"Immunisation\",\"id\":\"UiOSY1iIdub\"},{\"displayName\":\"Infectious disease outbreak\",\"id\":\"WUZXEFdn1PX\"},{\"displayName\":\"Malaria\",\"id\":\"zlaSof6qLqF\"},{\"displayName\":\"Population\",\"id\":\"D3bItmtBpsW\"},{\"displayName\":\"TB\",\"id\":\"IMF6p1MqoHl\"},{\"displayName\":\"Testing\",\"id\":\"nMDkAJXsmlR\"}]}", - "responseSize": 628, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictorGroups?paging=false", - "featureName": "All user defined jobs should be listed", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictorGroups\":[]}", - "responseSize": 22, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/dataIntegrity", - "featureName": "All user defined jobs should be listed", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[{\"name\":\"orgunits_invalid_geometry\",\"displayName\":\"Organisation units with invalid geometry.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with invalid geometry.\",\"introduction\":\"DHIS2 uses the PostGIS database extension to manage the geographical information associated\\nwith organisation units. There are various reasons why geometries may be considered to be\\ninvalid including self-inclusions, self-intersections, and sliver polygons. Please see the\\nPostGIS documentation for a more in-depth discussion on this topic.\\n\\nInvalid geometry is not always a problem and may be able to be ignored, however, it has been observed in certain systems\\nthat this can lead to problems in analytics. If you are experiencing issues when generating analytics\\ntables, and see errors related to invalid geometries, you will need to either remove the invalid geometry,\\nor fix it.\",\"recommendation\":\"Update the geometry of the affected organisation units to a valid geometry. It may be possible to use the PostGIS function `ST_MakeValid` to automatically fix the problem. However, in other cases the geometry may need to be edited in a GIS tool, and then updated again in DHIS2.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OIG\"},{\"name\":\"data_elements_without_groups\",\"displayName\":\"Data elements lacking groups\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data element groups\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWG\"},{\"name\":\"orgunit_group_sets_excess_groups\",\"displayName\":\"Organisation units which belong to multiple groups in a group set.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which belong to multiple groups in a group set.\",\"introduction\":\"Organisation units should belong to exactly one group within each organisation unit group set of which they are a member. If the organisation unit belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the organisation units in the details list to exactly one group within each group set membership.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OGSEG\"},{\"name\":\"validation_rules_missing_value_strategy_null\",\"displayName\":\"All validation rule expressions should have a missing value strategy.\",\"section\":\"Validation rules\",\"severity\":\"SEVERE\",\"description\":\"All validation rule expressions should have a missing value strategy.\",\"introduction\":\"Validation rules are composed of a left and right side expression. In certain systems the missing value strategy may not be defined. This may lead to an exception during validation rule analysis. The affected validation rules should be corrected to with an appropriate missing value strategy.\",\"recommendation\":\"Using the results of the the details SQL view, identify the affected validation rules and which side of the rule the missing value strategy has not been specified. Using the maintenance app, make the appropriate corrections and save the rule.\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRMVSN\"},{\"name\":\"category_combos_being_invalid\",\"displayName\":\"Invalid Category-combos\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Lists all category-combos that are invalid\",\"recommendation\":\"Make sure the category combo is assigned to at least one category and that all categories have category options \",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCBI\"},{\"name\":\"data_elements_in_data_set_not_in_form\",\"displayName\":\"Data sets with data elements not in data entry form\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that have data elements which are neither a member of the set's data entry form nor a member of the sets section\",\"recommendation\":\"Either remove the data elements in question or make them a member of the set's form or section\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DEIDSNIF\"},{\"name\":\"categories_no_options\",\"displayName\":\"Categories with no category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with no category options\",\"introduction\":\"Categories should always have at least one category option.\",\"recommendation\":\"Any categories without category options should either be removed from the system if they are not in use. Otherwise, appropriate category options should be added to the category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CNO\"},{\"name\":\"data_elements_aggregate_no_analysis\",\"displayName\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"introduction\":\"All aggregate data elements that are captured in DHIS2 should be used to produce some type of analysis output (charts, maps, tables). This can be by using them directly in an output, or by having them contribute to an indicator calculation that is used an output.\",\"recommendation\":\"Data elements that are not routinely being reviewed in analysis, either directly or indirectly through indicators, should be reviewed to determine if they still need to be collected. If these are meant to be used in routine review, then associated outputs should be created using them. If these data elements are not going to be used for any type of information review, consideration should be made to either archive them or delete them.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANA\"},{\"name\":\"indicators_duplicated_terms\",\"displayName\":\"Indicators with the same terms.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same terms.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check attempts to identify indicators with the same formulas, regardless of the order of their their terms. Suppose you have an indicator which calculates total ANC attendance: ANC Total = ANC1 + ANC2 + ANC3 Suppose then another indicator exists in the system, which has been defined as: ANC Totals = ANC3 + ANC2 + ANC1 These two indicators are equivalent, and will produce the same result, and are thus considered to be duplicated.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Considered deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IDT\"},{\"name\":\"program_rules_no_action\",\"displayName\":\"Program rules with no action.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules with no action.\",\"introduction\":\"All program rules should have an action.\",\"recommendation\":\"Using the DHIS2 user interface, assign an action to each of the program rules which is missing one. Alternatively, if the program rule is not in use, then consider removing it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNA\"},{\"name\":\"orgunits_compulsory_group_count\",\"displayName\":\"Organisation units that are not in all compulsory orgunit group sets\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Orgunits that are not in all compulsory orgunit group sets\",\"introduction\":\"If any organisation unit groups have been marked as compulsory, each and every organisation unit should belong to exactly one group within each compulsory organisation unit group set. Assume we have created a group set called \\\"Ownership\\\" with two groups \\\"Public\\\" and \\\"Private\\\". Each and every organisation unit contained in the hierarchy must belong to either Public or Private (but not both). When organisation unit are not part of a group set, results in the analytics apps will not be correct if the organisation unit group set is used for aggregation.\",\"recommendation\":\"For each of the organisation units identified in the details query, you should assign the appropriate organisation unit group within the group set. Alternatively, if the group set should not be compulsory, you should change this attribute.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OCGC\"},{\"name\":\"orgunits_no_coordinates\",\"displayName\":\"Organisation units with no coordinates.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with no coordinates.\",\"introduction\":\"Ideally, all organisation units contained in the DHIS2 hierarchy should have a valid\\nset of coordinates. Usually for all organisation units above the facility level,\\nthese coordinates should be a polygon which provides the boundary of the organisation\\nunit. For facilities, these are usually represented as point coordinates.\\n\\nThere can obviously be exceptions to this rule. Mobile health facilities may not have\\na fixed location. Community health workers or wards below the facility level\\nmay also not have a defined or definable coordinate.\\n\\nThis check is intended to allow you to review all organisation units which do\\nnot have any coordinates and make a determination as to whether they should be updated.\",\"recommendation\":\"Where appropriate, update the geometry of each organisation unit with a valid geometry.\\nYou may need to contact the appropriate local government office to obtain a copy\\nof district boundaries, commonly referred to as \\\"shape files\\\". Another possibility\\nis to use freely available boundary files from GADM (https://gadm.org)\\n\\nIf facilities are missing coordinates, it may be possible to obtain these from\\nthe facility staff using their smart phone to get the coordinates. Images\\nfrom Google Maps can also often be used to estimate the position of a facility,\\nassuming that you have good enough resolution and local knowledge of where\\nit is located.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONC\"},{\"name\":\"data_sets_not_assigned_to_org_units\",\"displayName\":\"Data sets not assigned to organisation units\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that are not assigned to any organisation units\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DSNATOU\"},{\"name\":\"dashboards_no_items\",\"displayName\":\"Dashboards with no items.\",\"section\":\"Dashboards\",\"severity\":\"INFO\",\"description\":\"Dashboards with no items.\",\"introduction\":\"All dashboards should have content on them. Dashboards without any content do not serve any purpose, and can make it more difficult to find relevant dashboards with content.\",\"recommendation\":\"Dashboards without content that have not been modified in the last 14 days should be considered for deletion.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNI\"},{\"name\":\"orgunits_same_name_and_parent\",\"displayName\":\"Organisation units should not have the same name and parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have the same name and parent.\",\"introduction\":\"Organisation units may have exactly the same name. This may become confusing to users, particularly if the organisation unit has the same name and same parent. This can easily lead to data entry or analysis mistakes as users have no way to distinguish between the two organisation units.\",\"recommendation\":\"Rename identically named organisation units which share the same parent using the maintenance app.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OSNAP\"},{\"name\":\"indicators_not_grouped\",\"displayName\":\"Indicators not in any groups.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not in any groups.\",\"introduction\":\"All indicators should be in an indicator group. This allows users to find the indicators more easily in analysis apps and also contributes to having more complete indicators group sets. Maintenance operations can also be made more efficient by applying bulk settings (ex. sharing, filtering) to all indicators within an indicator group.\",\"recommendation\":\"Indicators that are not in a indicator group should be added to a relevant indicator group. If the indicators are not needed, they should be deleted.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"ING\"},{\"name\":\"category_option_group_sets_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option group sets should be composed of at least two category option groups.\",\"recommendation\":\"Considering removing groups with zero or one category option groups, or alternatively, add additional category option groups to the group set to make it more useful.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSS\"},{\"name\":\"org_units_without_groups\",\"displayName\":\"Organisation units lacking groups\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are not connected to at least one group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWG\"},{\"name\":\"data_elements_excess_groupset_membership\",\"displayName\":\"Data elements which belong to multiple groups in a group set.\",\"section\":\"data_elements\",\"severity\":\"SEVERE\",\"description\":\"Data elements which belong to multiple groups in a group set.\",\"introduction\":\"Data elements should belong to exactly one group within each data element group set of which they are a member. If the data element belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the data elements in the details list to exactly one data element group within each group set.\",\"issuesIdType\":\"data_elements_aggregate\",\"isSlow\":false,\"code\":\"DEEGM\"},{\"name\":\"data_element_groups_scarce\",\"displayName\":\"Data element groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Data element groups should have at least two members.\",\"introduction\":\"All data element groups should be composed of at least two data elements.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"dataElementGroups\",\"isSlow\":false,\"code\":\"DEGS\"},{\"name\":\"orgunits_not_contained_by_parent\",\"displayName\":\"Organisation units with point coordinates should be contained by their parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with point coordinates should be contained by their parent.\",\"introduction\":\"Facilities are often represented as points in the DHIS2 hierarchy. Their parent organisation units geometry should contain all facilities which have been associated with them.\",\"recommendation\":\"Often boundary files are simplified when they are uploaded into DHIS2. This process may result in\\nfacilities which are located close to the border of a given district to fall outside of the district\\nwhen the boundary is simplified. This is considered to be more of a cosmetic problem for most DHIS2\\ninstallations, but could become an issue if any geospatial analysis is attempted using the\\nboundaries and point coordinates.\\n\\nIn cases where the facility falls outside of its parent's boundary\\nyou should confirm that the coordinates are correct. If the location is close to the boundary, you\\nmay want to reconsider how the boundary files have been simplified. Otherwise, if the location of\\nthe facility is completely incorrect, it should be rectified.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONCBP\"},{\"name\":\"program_rules_message_no_template\",\"displayName\":\"Program rules actions which should send or schedule a message without a message template.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules actions which should send or schedule a message without a message template.\",\"introduction\":\"Program rule actions of type \\\"Send message\\\" or \\\"Schedule message\\\" should have an associated message template.\",\"recommendation\":\"Using the DHIS2 user interface, assign a message template to each of the program rule actions which send or schedule messages but which does not have an association with a message template.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRMNT\"},{\"name\":\"indicators_with_invalid_denominator\",\"displayName\":\"Indicators with invalid denominator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"List all indicators where the denominator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWID\"},{\"name\":\"indicator_types_duplicated\",\"displayName\":\"Indicator types with the same factor.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicator types with the same factor.\",\"introduction\":\"Indicators can be assigned a factor which is multiplied by the indicator's value. For example, if you create a percentage based indicator, you can assign the indicator a factor of 100, which would be multiplied by the actual value of the indicator calculated by DHIS2. In general, having multiple indicator types with the same factor is not recommended. It is duplicative, and may lead to confusion.\",\"recommendation\":\"Duplicated indicator types should consider to be removed from the system. Consider choosing one of the duplicated indicator types as the one to keep, and then update all indicators which share the same factor to this indicator type. The duplicated indicator types can then be removed from the system.\",\"issuesIdType\":\"indicatorTypes\",\"isSlow\":false,\"code\":\"ITD\"},{\"name\":\"options_sets_empty\",\"displayName\":\"Empty option sets\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Empty option sets\",\"introduction\":\"All option sets should generally include at least two items. Empty option sets serve no purpose.\",\"recommendation\":\"Options should either be added to the option set, or the option set should be deleted.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSE\"},{\"name\":\"category_options_no_categories\",\"displayName\":\"Category options with no categories.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options with no categories.\",\"introduction\":\"All category options should belong to at least one category.\",\"recommendation\":\"Category options which are not part of any category should be removed or alternatively should be added to an appropriate category.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CONC\"},{\"name\":\"orgunits_orphaned\",\"displayName\":\"Orphaned organisation units.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"Orphaned organisation units.\",\"introduction\":\"Orphaned organisation units are those which have neither parents nor any children. This means that they have no relationship to the main organisation unit hierarchy. These may be created by faulty metadata imports or direct manipulation of the database.\",\"recommendation\":\"The orphaned organisation units should be assigned a parent or removed from the system. It is recommended to use the DHIS2 API for this task if possible. If this is not possible, then they may need to be removed through direct SQL on the DHIS2 database.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OO\"},{\"name\":\"indicators_with_identical_formulas\",\"displayName\":\"Indicators with identical formulas\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that have the identical formulas with at least one other indicator\",\"recommendation\":\"Check if the same indicator should be used everywhere and remove duplicates\",\"isSlow\":false,\"code\":\"IWIF\"},{\"name\":\"program_indicators_with_invalid_filters\",\"displayName\":\"Program indicators with invalid filter\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators with invalid filter expression\",\"recommendation\":\"Check that the expression evaluates to true/false\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIF\"},{\"name\":\"program_rules_without_condition\",\"displayName\":\"Program rules lacking a condition\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that have no condition yet\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWC\"},{\"name\":\"categories_one_default_category\",\"displayName\":\"Only one default category should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category should exist\",\"introduction\":\"There should only exist one category with name and code \\\"default\\\".\",\"recommendation\":\"Only the category with UID \\\"GLevLNI9wkl\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category or move all references to category \\\"GLevLNI9wkl\\\" and then remove the unused conflicting category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CODC\"},{\"name\":\"org_units_with_cyclic_references\",\"displayName\":\"Organisation units with cyclic references\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that have a conflicting parent hierarchy definition so that two organisation units become parent of each other or in other words they form a circular reference\",\"recommendation\":\"One of the organisation units must be setup wrongly and needs to be corrected so that a non-circular tree connects the two\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWCR\"},{\"name\":\"program_rule_variables_without_data_element\",\"displayName\":\"Program rule variables lacking a data element\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring a data element source but that is not yet linked to a data element\",\"recommendation\":\"Assign a data element to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWDE\"},{\"name\":\"org_units_violating_exclusive_group_sets\",\"displayName\":\"Organisation units with conflicting exclusive group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are members of multiple exclusive organisation unit groups\",\"recommendation\":\"Remove the organisation unit from all but one exclusive organisation unit group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUVEGS\"},{\"name\":\"program_rule_actions_without_data_object\",\"displayName\":\"Program rules with actions lacking a data object\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires either a data element or an attribute but is not connected either\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWDO\"},{\"name\":\"orgunits_openingdate_gt_closeddate\",\"displayName\":\"Organisation units which have an opening date later than the closed date.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which have an opening date later than the closed date.\",\"introduction\":\"If a closing date has been defined for an organisation unit, it should always be after the opening date (if one has been defined).\",\"recommendation\":\"Alter either the opening or closing date of all affected organisation units so that the closing date is after the opening date.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OOGC\"},{\"name\":\"categories_one_default_category_option_combo\",\"displayName\":\"Only one default category option combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option combo should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option combo with UID \\\"HllvX50cXC0\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option combo or move all references to category option combo \\\"HllvX50cXC0\\\" and then remove the unused conflicting category option combo.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CODCOC\"},{\"name\":\"category_option_group_sets_incomplete\",\"displayName\":\"Category option group sets which do not contain all category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option group sets which which do not contain all category options.\",\"introduction\":\"Category option group sets are composed of multiple category option groups, which are in turn composed of various category options. Category option group sets are often used to group related category options together for analytical purposes. Categories are also composed of category options. In general, but not always, category option group sets should contain all category options of related categories. Suppose we have the following two age categories. \\nAge coarse: <15, 15+ Age fine: <1, 1-10, 10-14,15-19,20-24,25-29,30-34,35-39,40-44,45+\\nIn many cases, related data elements may be disaggregated differently. This may be to differences in the way in which the data is collected, or as is often the case, the disaggregation has changed over time. If we wish to analyze data for two different data elements (one of which uses Age coarse and the other Age fine), we can create a category option group set consisting of two category option groups which should consist of the following category options from above. \\n<15: <15, <1, 1-10, 10-14 15+: 15+, 15-19,20-24,25-29,30-34,35-39,40-44,45+\\nSuppose that we happen to omit the category option \\\"<1\\\" from the \\\"<15\\\" category option group. This would result in potential aggregation errors in when using this category option group set in any analytical objects. The details of this metadata check would return the UID and name of the category option group set. The category and category option would also be provided. Using the previous example, we would see \\\"Age fine:{<1}\\\" in the metadata check details section, to indicate that the <1 category option which is part of the \\\"Age fine\\\" category, is missing from the category option group set.\\nThere may exist specific analytical reasons why specific category options are omitted from a category option group set. However,these should usually be special cases. This metadata check will identify cases where category option group sets appear to be incomplete, however you should carefully review any groups which appear in the details. \\nThis check may also produce a number of issues which may at first glance appear to be false positives. In some cases, category options may be added to a category by mistake. When category option group sets are created, this extraneous option may be omitted and thus appear as missing from the group set. \\nAnother observed situation is where an option like \\\"Unknown\\\" is used across unrelated categories. Suppose you have two categories \\\"Age (<15, 15+, Unknown)\\\" and \\\"Sex (Male,Female,Unknown)\\\". Similar to above, we create category option group sets like: \\n<15: <15 15+: 15+ Unknown: Unknown\\nThis metadata check will report that \\\"Male\\\" and \\\"Female\\\" are missing from the group set. This is because the same \\\"Unknown\\\" option is shared between two different, unrelated categories. It is recommended that if this situation occurs, that you create two separate \\\"Unknown\\\" category options like \\\"Unknown sex\\\" and \\\"Unknown age\\\".\",\"recommendation\":\"Using the maintenance app, assign the missing category options to an appropriate category option group within the affected category option group set.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSI\"},{\"name\":\"maps_not_viewed_one_year\",\"displayName\":\"Maps which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Maps which have not been viewed in the past 12 months\",\"introduction\":\"Maps should be regularly viewed in the system. In many cases, users may create maps for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system and being difficult to find in the Maps app.\",\"recommendation\":\"Unused maps can be removed directly using the Maps app by a user with sufficient authority. If maps are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"maps\",\"isSlow\":false,\"code\":\"MNVOY\"},{\"name\":\"indicators_exact_duplicates\",\"displayName\":\"Indicators with the same formula.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same formula.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check shows indicators which have the exact same formulas. Spaces which are present are removed prior to comparison.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Consider deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IED\"},{\"name\":\"indicators_violating_exclusive_group_sets\",\"displayName\":\"Indicators with conflicting exclusive group sets\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that are members of multiple exclusive indicator groups\",\"recommendation\":\"Remove the indicator from all but one exclusive indicator group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IVEGS\"},{\"name\":\"category_options_excess_groupset_membership\",\"displayName\":\"Category options which belong to multiple groups in a category option group set.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category options which belong to multiple groups in a category option group set.\",\"introduction\":\"Category options should belong to exactly one category option group which are part of a category option group set. If the category option belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the category option in the details list to exactly one category option group within each group set.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"COEGM\"},{\"name\":\"periods_duplicates\",\"displayName\":\"Duplicate Periods\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Lists all periods duplicates which have identical type and start date\",\"recommendation\":\"Make sure all database references are moved to one of the duplicates before deleting the unused duplicates\",\"isSlow\":false,\"code\":\"PD\"},{\"name\":\"program_rules_without_action\",\"displayName\":\"Program rules lacking an action\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that are not connected to any program rule action\",\"recommendation\":\"Connect the rule to an action or consider removing the rule\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWA\"},{\"name\":\"orgunits_multiple_roots\",\"displayName\":\"The organisation unit hierarchy should have a single root.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"The organisation unit hierarchy should have a single root.\",\"introduction\":\"Every DHIS2 system should have a single root organisation unit. This means a single organisation unit from which all other branches of the hierarchy are descendants.\",\"recommendation\":\"Once you have decided which organisation unit should be the real root of the organisation unit hierarchy, you should update the parent organisation unit. This can be done by using the DHIS2 API or my updating the value directly in the `organisationunit` table.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMR\"},{\"name\":\"validation_rules_with_invalid_left_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a left side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWILSE\"},{\"name\":\"program_rule_actions_without_stage_id\",\"displayName\":\"Program rules with actions lacking a program stage\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a program stage but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWSI\"},{\"name\":\"indicator_groups_scarce\",\"displayName\":\"Indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups should have at least two members.\",\"introduction\":\"All indicator groups should be composed of at least two indicators.\",\"recommendation\":\"Considering removing groups with zero or one groups, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"indicatorGroups\",\"isSlow\":false,\"code\":\"IGS\"},{\"name\":\"option_sets_wrong_sort_order\",\"displayName\":\"Option sets with possibly wrong sort order.\",\"section\":\"Option sets\",\"severity\":\"SEVERE\",\"description\":\"Option sets with possibly wrong sort order.\",\"introduction\":\"Option sets contain options which should be ordered sequentially. The sort_order property should always start with 1 and have a sequential sequence. If there are three options in the option set, then the sort order should be 1,2,3. \\nIn certain circumstances, options may be deleted from an option set, and the sort order may become corrupted. This may lead to a situation where it becomes impossible to update the option set from the maintenance app, and may lead to problems when attempting to using the option set in the data entry app.\",\"recommendation\":\"If it is possible to open the option set in the maintenance app, you can resort the option set, which should correct the problem. Another possible solution is to directly update the sort_order property of in the `optionset` table in the database, ensuring that a valid sequence is present for all options in the option set.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSWSO\"},{\"name\":\"periods_same_start_end_date\",\"displayName\":\"Periods with the same start and end dates\",\"section\":\"Periods\",\"severity\":\"CRITICAL\",\"description\":\"Periods with the same start and end dates\",\"introduction\":\"Different periods should not have exactly the same start and end date.\",\"recommendation\":\"All references to the duplicate periods should be removed from the system and reassigned. It is recommended to use the period with the lower periodid.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PSSED\"},{\"name\":\"program_indicators_with_invalid_expressions\",\"displayName\":\"Program indicators with invalid expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have an invalid expression\",\"recommendation\":\"Check that the expression evaluates to a number\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIE\"},{\"name\":\"program_rule_actions_without_notification\",\"displayName\":\"Program rule with actions lacking a notification template\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires a notification template but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWN\"},{\"name\":\"indicator_no_analysis\",\"displayName\":\"Indicators not used in analytical objects.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not used in analytical objects.\",\"introduction\":\"Indicators should be used to produce some type of analytical output (charts, maps, pivot tables). Note: indicators used in datasets to provide feedback during data entry are not counted as being used in analytical objects.\",\"recommendation\":\"Indicators that are not routinely being used for analysis should be reviewed to determine if they are useful and needed. If these are meant to be used for routine review, then associated outputs should be created using them. If these indicators are not going to be used for any type of information review, and are not used in data sets for feedback during data entry, consideration should be made to delete them.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"INA\"},{\"name\":\"user_groups_scarce\",\"displayName\":\"User groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"User groups should have at least two members.\",\"introduction\":\"Generally, user groups should contain two or more users.\",\"recommendation\":\"Considering removing user groups with less than two users, or alternatively, add additional users to the group to make it more useful.\",\"issuesIdType\":\"userGroups\",\"isSlow\":false,\"code\":\"UGS\"},{\"name\":\"data_elements_aggregate_with_different_period_types\",\"displayName\":\"Aggregate data elements which belong to datasets with different period types.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"SEVERE\",\"description\":\"Aggregate data elements which belong to datasets with different period types.\",\"introduction\":\"Data elements should not belong to datasets with different period types.\",\"recommendation\":\"If you need to collect data with different period types (e.g. weekly and monthly) you should use different data elements for each period type. In general, it is not recommended to collect data with different frequencies, since in general, data collected at higher frequencies (e.g. weekly) can be aggregated to data with lower frequencies (e.g yearly).\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAWDPT\"},{\"name\":\"validation_rules_without_groups\",\"displayName\":\"Validation rules lacking groups\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that are not member of at least one validation rule group\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWG\"},{\"name\":\"category_option_combos_disjoint\",\"displayName\":\"Category option combinations with disjoint associations.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with disjoint associations.\",\"introduction\":\"Under certain circumstances, category option combinations may exist in the system, but not have any direct association with category options which are associated with their category combination. This situation usually occurs when category options have been added to a category and then the category is added to a category combination. New category option combinations are created in the system at this point. If any of the category options are then removed in one of the underlying categories, a so-called disjoint category option combination may result. This is a category option combination which has no direct association with any category options in any of the categories associated with the category combination.\",\"recommendation\":\"The disjoint category option combinations should be removed from the system if possible. However, if any data is associated with the category option combination, a determination will need to be made in regards of how to deal with this data.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"COCD\"},{\"name\":\"options_sets_unused\",\"displayName\":\"Option sets which are not used\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Option sets which are not used\",\"introduction\":\"Option sets should be used for some purpose. The may be used by data elements, comments, attributes, or tracked entity attributes.\",\"recommendation\":\"Consider deleting unused option sets, or alternatively, ensure that they have been properly assigned.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSU\"},{\"name\":\"catoptioncombos_no_catcombo\",\"displayName\":\"Category options combinations with no category combination.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options combinations with no category combination.\",\"introduction\":\"All category option combinations should be associated with a category combo. In certain cases, when category combinations are deleted,the linkage between a category option combination and a category combination may become corrupted.\",\"recommendation\":\"Check if any data is associated with the category option combination in question. Likely, the data should either be deleted or migrated to a valid category option combination. Any data which is associated with any of these category option combinations will not be available through either the data entry modules or any of the analytical apps.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CNC\"},{\"name\":\"data_elements_violating_exclusive_group_sets\",\"displayName\":\"Data elements with conflicting exclusive group sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are a members of more than one exclusive data element set belonging to the same data element group set\",\"recommendation\":\"Either remove the data element from all but one exclusive group set or consider if the set really should be an exclusive group set\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEVEGS\"},{\"name\":\"categories_same_category_options\",\"displayName\":\"Categories with the same category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with the same category options\",\"introduction\":\"Categories with the exact same category options should be considered to be merged. Categories with the exact same category options may be easily confused by users in analysis. The details view will provide a list of categories which have the exact same category options. For each duplicated category a number in parentheses such as (1) will indicate which categories belong to duplicated groups.\",\"recommendation\":\"If category combinations have already been created with duplicative categories,\\nit is recommended that you do not take any action, but rather ensure\\nthat users understand that there may be two category combinations which are duplicative.\\n\\nIf you choose to merge the duplicative category combinations, you would need to \\nremap all category option combinations from the category combo which you wish to \\nremove, to the one which you wish to keep. \\n\\nIf one of the categories is not in use in any category combination, it should\\nconsider to be removed from the system.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CSCO\"},{\"name\":\"visualizations_not_viewed_one_year\",\"displayName\":\"Visualizations which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Visualizations which have not been viewed in the past 12 months\",\"introduction\":\"Visualizations should be regularly viewed in the system. In many cases, users may create charts for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to charts being difficult to find in the visualization app.\",\"recommendation\":\"Unused charts can be removed directly using the data visualization app by a user with sufficient authority. If charts are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"visualizations\",\"isSlow\":false,\"code\":\"VNVOY\"},{\"name\":\"categories_one_default_category_option\",\"displayName\":\"Only one default category option should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option with UID \\\"xYerKDKCefk\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option or move all references to category option \\\"xYerKDKCefk\\\" and then remove the unused conflicting category option.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CODCO\"},{\"name\":\"orgunits_multiple_spaces\",\"displayName\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"introduction\":\"Names and/or shortnames of organisation units should not contain multiple spaces. They are superfluous and may complicate the location of organisation units when they are searched.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the multiple spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMS\"},{\"name\":\"data_elements_aggregate_abandoned\",\"displayName\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"introduction\":\"Data elements are considered to be abandoned when they have not been edited in at least 100 days and do not have any data values associated with them. Often, these are the result of new or changed configurations that have been abandoned at some point.\",\"recommendation\":\"Data elements that have no data associated with them and which there are no plans to start using for data collection should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAA\"},{\"name\":\"data_elements_assigned_to_data_sets_with_different_period_types\",\"displayName\":\"Data elements assigned to data sets with different period type\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are assigned to at least one data set that has a different period type\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEATDSWDPT\"},{\"name\":\"data_elements_aggregate_no_groups\",\"displayName\":\"Aggregate data elements not in any data element groups.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not in any data element groups.\",\"introduction\":\"All data elements should be in a data element group. This allows users to find the data elements more easily in analysis\\n apps and also contributes to having more complete data element group sets.\\n Maintenance operations can also be made more efficient by applying\\n bulk settings (ex. sharing) to all data elements within a data element group.\",\"recommendation\":\"Data elements that are not in a data element group should be added to a relevant data element group. If the data elements are not needed, they should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANG\"},{\"name\":\"category_options_shared_within_category_combo\",\"displayName\":\"Category combinations with categories which share the same category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category combinations with categories which share the same category options.\",\"introduction\":\"As a general rule, category options should be reused where possible between categories. The exception to this rule however, is when you have a category combo with multiple categories, and within those categories, a category option is shared. As a simple example, lets say you have a category called \\\"Sex\\\" with options \\\"Male\\\"\\\", \\\"Female\\\" and \\\"Unknown\\\". There is also a second category called \\\"Age\\\" with options \\\"<15\\\", \\\"15+\\\", and \\\"Unknown\\\". A category combination called \\\"Age/Sex\\\" is then created with these two categories, which share the option \\\"Unknown\\\". This situation should be avoided, as it creates issues when analyzing data.\",\"recommendation\":\"The recommended approach to dealing with this situation is to create a new category combination, using two new categories. Using the example from the introduction, you should create two new category options called \\\"Unknown age\\\" and \\\"Unknown sex\\\". A new category combination can then be created with these new categories, which do not share category options. All data which is potentially associated with the old category combinations, would need to be reassigned to the new category option combinations. Any analytical objects which use the categories to be removed would also need to be updated.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"COSWCC\"},{\"name\":\"orgunits_null_island\",\"displayName\":\"Organisation units located within 100 km of Null Island (0,0).\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units located within 100 km of Null Island (0,0).\",\"introduction\":\"A common problem when importing coordinates is the inclusion of coordinates situated around the point of [Null Island](https://en.wikipedia.org/wiki/Null_Island). This is the point on the Earth's surface where the Prime Meridian and Equator intersect with a latitude of 0 and a longitude of 0. The point also happens to be situated currently in the middle of the ocean. This query identifies any points located within 100 km of the point having latitude and longitude equal to zero.\",\"recommendation\":\"Update the coordinates of the affected organization unit to the correct location.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONI\"},{\"name\":\"program_rule_actions_without_section\",\"displayName\":\"Program rules with actions lacking a program stage section\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a section but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWS\"},{\"name\":\"periods_3y_future\",\"displayName\":\"Periods which are more than three years in the future.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are more than three years in the future.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\nfar future. Different data entry clients may not properly validate for periods\\nwhich are in the future, and thus any periods in the future should be reviewed.\\nIn some cases, data may be valid for future dates, e.g. targets which are set for the\\nnext fiscal year.\",\"recommendation\":\"If any periods exist in the system in the future, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\\n\\nIn many cases, clients may mean to transmit\\ndata for January 2021, but due to data entry errors, January 2031 is selected. Thus,\\nany data in the far future should be investigated to ensure it does not result\\nfrom data entry errors.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"P3F\"},{\"name\":\"orgunits_trailing_spaces\",\"displayName\":\"Organisation units should not have trailing spaces.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have trailing spaces.\",\"introduction\":\"Trailing spaces in organisation units are superfluous.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the trailing spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OTS\"},{\"name\":\"validation_rule_groups_scarce\",\"displayName\":\"Validation rule should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Validation rule should have at least two members.\",\"introduction\":\"Generally validation rule groups should be composed of multiple validation rules.\",\"recommendation\":\"Considering removing groups which are empty or which have a single member. Alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"validationRuleGroups\",\"isSlow\":false,\"code\":\"VRGS\"},{\"name\":\"indicators_with_invalid_numerator\",\"displayName\":\"Indicators with invalid numerator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators where the numerator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWIN\"},{\"name\":\"categories_one_default_category_combo\",\"displayName\":\"Only one default category combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category combo should exist\",\"introduction\":\"There should only exist one category combo with name and code \\\"default\\\".\",\"recommendation\":\"Only the category combo with UID \\\"bjDvmb4bfuf\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category combo or move all references to category combo \\\"bjDvmb4bfuf\\\" and then remove the unused conflicting category combo.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CODCC\"},{\"name\":\"data_elements_without_data_sets\",\"displayName\":\"Data elements lacking data Sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data sets\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWDS\"},{\"name\":\"category_combos_unused\",\"displayName\":\"Category combinations not used by other metadata objects\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category combinations not used by other metadata objects\",\"introduction\":\"Category combinations which are unused in any datasets, data elements, programs or data approval workflows may be safe to delete. In some cases, category combinations may be created, but never actually used for anything. This may lead to situations where users and implementers are confused about which category combination should actually be used. In general, it should be safe to delete unused category combinations, except in situations where existing data has been associated with them.\",\"recommendation\":\"Check to see if any data is associated with the category combination before attempting to delete it. Category combinations which are not currently used in any metadata objects may still be valid for legacy reasons, but they should be reviewed to be sure they are still needed. Otherwise, it should be safe to remove them from the system.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCU\"},{\"name\":\"category_option_groups_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option groups should be composed of at least two category options. There can however be legitimate cases when a single category option is part of a group, especially in cases where there is a direct mapping between age bands and category options.\",\"recommendation\":\"Considering removing groups with zero or one category options, or alternatively, add additional category options to the group to make it more useful.\",\"issuesIdType\":\"categoryOptionGroups\",\"isSlow\":false,\"code\":\"COGS\"},{\"name\":\"datasets_empty\",\"displayName\":\"Datasets with no data elements.\",\"section\":\"Data sets\",\"severity\":\"WARNING\",\"description\":\"Datasets with no data elements.\",\"introduction\":\"All datasets should have data elements assigned to them.\",\"recommendation\":\"Remove empty datasets, or alternatively, assign data elements to them.\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DE\"},{\"name\":\"indicators_without_groups\",\"displayName\":\"Indicators lacking groups\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that do not have at least one group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWG\"},{\"name\":\"orgunit_groups_scarce\",\"displayName\":\"Organisation unit groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Organisation unit groups should have at least two members.\",\"introduction\":\"Generally, organisation unit groups should be composed of multiple organisation units.\",\"recommendation\":\"Considering removing groups with zero or one organisation units, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OGS\"},{\"name\":\"program_rules_without_priority\",\"displayName\":\"Program rules lacking a priority setting\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules with action type \\\"assign\\\" where the rule priority is not yet set\",\"recommendation\":\"Set a priority for the program rule(s)\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWP\"},{\"name\":\"categories_unique_category_combo\",\"displayName\":\"Different category combinations should not have the exact same combination of categories.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Different category combinations should not have the exact same combination of categories.\",\"introduction\":\"Category combinations should be a unique combination of categories. If two or more category combinations contain the exact same set of categories, this would be considered to be duplicative and potentially confusing to users.\",\"recommendation\":\"One category combo is kept, all references are updated to use this combo and other combos are removed.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CUCC\"},{\"name\":\"indicator_group_sets_scarce\",\"displayName\":\"Indicator groups sets should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups sets should have at least two members.\",\"introduction\":\"All indicator group set should be composed of at least two indicators groups.\",\"recommendation\":\"Considering removing indicator group sets with less than two indicator groups, or alternatively, add additional indicator groups to the indicator group set to make it more useful.\",\"issuesIdType\":\"indicatorGroupSets\",\"isSlow\":false,\"code\":\"IGSS\"},{\"name\":\"validation_rules_with_invalid_right_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a right side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWIRSE\"},{\"name\":\"data_elements_aggregate_aggregation_operator\",\"displayName\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"introduction\":\"Data elements which are not numeric (text, dates, etc) should have an aggregation operator set to NONE. Data elements which are able to be aggregated (numbers, integers, etc) should have an aggregation operator set to something other than NONE, most often SUM.\",\"recommendation\":\"Open the affected data elements in the Maintenance App and change their aggregation type to an appropriate type. Alternatively, these can be altered via the API.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAAO\"},{\"name\":\"org_unit_groups_without_group_sets\",\"displayName\":\"Organisation unit groups lacking group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation unit groups that aren't member of at least one organisation unit group set\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OUGWGS\"},{\"name\":\"program_rule_variables_without_attribute\",\"displayName\":\"Program rule variables lacking an attribute\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring an attribute source but that is not yet linked to an attribute\",\"recommendation\":\"Assign an attribute to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWA\"},{\"name\":\"program_indicator_groups_scarce\",\"displayName\":\"Program indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Program indicator groups should have at least two members.\",\"introduction\":\"Program indicator groups should generally be composed of two or more program indicators.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"programIndicatorGroups\",\"isSlow\":false,\"code\":\"PIGS\"},{\"name\":\"program_rules_no_expression\",\"displayName\":\"Program rules with no expression.\",\"section\":\"Program rules\",\"severity\":\"WARNING\",\"description\":\"Program rules with no expression.\",\"introduction\":\"All program rules should have an expression. Expressions are used by program rules to determine when they should be triggered. Program rules with no expression have no purpose.\",\"recommendation\":\"Using the DHIS2 user interface, assign an expression to each of the program rules which is missing one. Otherwise, if it is safe to delete the program rule with no expression, it is recommended to remove it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNE\"},{\"name\":\"data_elements_aggregate_no_data\",\"displayName\":\"Aggregate data elements with NO data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements with NO data values.\",\"introduction\":\"Data elements should generally always be associated with data values. If data elements exist in a data set which is active, but there are no data values associated with them, they may not be part of the data entry screens. Alternatively, the data element may have been added but never been associated with a dataset.\",\"recommendation\":\"Consider removing data elements with no data values.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAND\"},{\"name\":\"program_indicators_without_expression\",\"displayName\":\"Program indicators lacking an expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have no expression set yet\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWE\"},{\"name\":\"periods_distant_past\",\"displayName\":\"Periods which are in the distant past.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are in the distant past.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\ndistant past. Different data entry clients may not properly validate for periods\\nwhich are in the distant past, and thus these periods should be triaged to ensure\\nthat data has not been entered against them by mistake.\",\"recommendation\":\"If any periods exist in the system in the distant past, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PDP\"},{\"name\":\"org_units_being_orphaned\",\"displayName\":\"Orphaned organisation units\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that aren't level 1 units but that lack a parent so that they are not connected to the rest of the organisation tree\",\"recommendation\":\"Find (or create) and set the correct parent for the orphaned organisation unit(s). Eventually this is also caused by having set the wrong level.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUBO\"},{\"name\":\"cocs_wrong_cardinality\",\"displayName\":\"Category option combinations with incorrect cardinality.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with incorrect cardinality.\",\"introduction\":\"All category option combinations should have exactly the same number of category option associations as the number of categories in the category combination. If there are two categories in a category combination, then every category option combination should have exactly two category options.\\nCategory option combinations with the incorrect cardinality are usually the result of a category combination having been created, and then modified later. Suppose that two categories are used to create a category combination. Each category option combination of this category combo will have two category options. If an additional category is added to the category combination later, new category option combinations with three category options will be created and associated with this category combo. The original category option combinations would be considered to be invalid.\",\"recommendation\":\"Category option combinations which have an incorrect cardinality will be ignored by the DHIS2 analytics system and should be removed.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CWC\"},{\"name\":\"dashboards_not_viewed_one_year\",\"displayName\":\"Dashboards which have not been actively viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Dashboards which have not been actively viewed in the past 12 months\",\"introduction\":\"Dashboards should be regularly viewed in the system. In many cases, users may create dashboards for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to useful dashboards being difficult to find. This check identifies any dashboards which have not been viewed in the past year.\",\"recommendation\":\"Unused dashboards can be deleted in the entirety from the main dashboard app by clicking on the \\\"Edit\\\" button and choosing \\\"Delete\\\". Note that this process cannot be undone! Another option would be to alter the sharing of the dashboard so that it is not visible to any user.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNVOY\"}]", - "responseSize": 66022, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - } -] diff --git a/cypress/fixtures/network/40/jobs_can_be_filtered.json b/cypress/fixtures/network/40/jobs_can_be_filtered.json deleted file mode 100644 index d484c1ab8..000000000 --- a/cypress/fixtures/network/40/jobs_can_be_filtered.json +++ /dev/null @@ -1,271 +0,0 @@ -[ - { - "path": "/api/40/systemSettings/helpPageLink", - "featureName": "Jobs can be filtered", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"helpPageLink\":\"https://dhis2.github.io/dhis2-docs/master/en/user/html/dhis2_user_manual_en.html\"}", - "responseSize": 99, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/analytics/tableTypes", - "featureName": "Jobs can be filtered", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"]", - "responseSize": 122, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictorGroups?paging=false", - "featureName": "Jobs can be filtered", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictorGroups\":[]}", - "responseSize": 22, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations/jobTypes?fields=*&paging=false", - "featureName": "Jobs can be filtered", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"jobTypes\":[{\"name\":\"Data integrity\",\"jobType\":\"DATA_INTEGRITY\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"checks\",\"fieldName\":\"Checks\",\"persisted\":false,\"collectionName\":\"checks\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/dataIntegrity\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.parameters.DataIntegrityJobParameters$DataIntegrityReportType\",\"name\":\"type\",\"fieldName\":\"Type\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"REPORT\",\"SUMMARY\",\"DETAILS\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Resource table\",\"jobType\":\"RESOURCE_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Analytics table\",\"jobType\":\"ANALYTICS_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"skipPrograms\",\"fieldName\":\"Skip programs\",\"persisted\":false,\"collectionName\":\"skipPrograms\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/programs\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipResourceTables\",\"fieldName\":\"Skip resource tables\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Continuous analytics table\",\"jobType\":\"CONTINUOUS_ANALYTICS_TABLE\",\"schedulingType\":\"FIXED_DELAY\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"fullUpdateHourOfDay\",\"fieldName\":\"Full update hour of day\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Data sync\",\"jobType\":\"DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker programs data sync\",\"jobType\":\"TRACKER_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Event programs data sync\",\"jobType\":\"EVENT_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Meta data sync\",\"jobType\":\"META_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"trackerProgramPageSize\",\"fieldName\":\"Tracker program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"eventProgramPageSize\",\"fieldName\":\"Event program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"dataValuesPageSize\",\"fieldName\":\"Data values page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Aggregate data exchange\",\"jobType\":\"AGGREGATE_DATA_EXCHANGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"dataExchangeIds\",\"fieldName\":\"Data exchange ids\",\"persisted\":false,\"collectionName\":\"dataExchangeIds\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/aggregateDataExchanges\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Send scheduled message\",\"jobType\":\"SEND_SCHEDULED_MESSAGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Program notifications\",\"jobType\":\"PROGRAM_NOTIFICATIONS\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Monitoring\",\"jobType\":\"MONITORING\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"validationRuleGroups\",\"fieldName\":\"Validation rule groups\",\"persisted\":false,\"collectionName\":\"validationRuleGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/validationRuleGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"sendNotifications\",\"fieldName\":\"Send notifications\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"persistResults\",\"fieldName\":\"Persist results\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Push analysis\",\"jobType\":\"PUSH_ANALYSIS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"pushAnalysis\",\"fieldName\":\"Push analysis\",\"persisted\":false,\"collectionName\":\"pushAnalysis\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/pushAnalysis\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker search optimization\",\"jobType\":\"TRACKER_SEARCH_OPTIMIZATION\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"attributes\",\"fieldName\":\"Attributes\",\"persisted\":false,\"collectionName\":\"attributes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/trackedEntityAttributes/indexable\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipIndexDeletion\",\"fieldName\":\"Skip index deletion\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Predictor\",\"jobType\":\"PREDICTOR\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictors\",\"fieldName\":\"Predictors\",\"persisted\":false,\"collectionName\":\"predictors\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictors\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictorGroups\",\"fieldName\":\"Predictor groups\",\"persisted\":false,\"collectionName\":\"predictorGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictorGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Disable inactive users\",\"jobType\":\"DISABLE_INACTIVE_USERS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"inactiveMonths\",\"fieldName\":\"Inactive months\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"reminderDaysBefore\",\"fieldName\":\"Reminder days before\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Test\",\"jobType\":\"TEST\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Long\",\"name\":\"waitMillis\",\"fieldName\":\"Wait millis\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"stages\",\"fieldName\":\"Stages\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtStage\",\"fieldName\":\"Fail at stage\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"items\",\"fieldName\":\"Items\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtItem\",\"fieldName\":\"Fail at item\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Long\",\"name\":\"itemDuration\",\"fieldName\":\"Item duration\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.String\",\"name\":\"failWithMessage\",\"fieldName\":\"Fail with message\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"failWithException\",\"fieldName\":\"Fail with exception\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.JobProgress$FailurePolicy\",\"name\":\"failWithPolicy\",\"fieldName\":\"Fail with policy\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"PARENT\",\"FAIL\",\"SKIP_STAGE\",\"SKIP_ITEM\",\"SKIP_ITEM_OUTLIER\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"runStagesParallel\",\"fieldName\":\"Run stages parallel\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]}]}", - "responseSize": 24994, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/pushAnalysis?paging=false", - "featureName": "Jobs can be filtered", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"pushAnalysis\":[{\"displayName\":\"Immunization Key Indicators Monthly Report\",\"id\":\"jtcMAKhWwnc\"}]}", - "responseSize": 98, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictors?paging=false", - "featureName": "Jobs can be filtered", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictors\":[{\"displayName\":\"Malaria Outbreak Threshold\",\"id\":\"tEK1OEqS4O1\"}]}", - "responseSize": 80, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/validationRuleGroups?paging=false", - "featureName": "Jobs can be filtered", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"validationRuleGroups\":[{\"displayName\":\"ANC\",\"id\":\"UP1lctvalPn\"},{\"displayName\":\"Commodities\",\"id\":\"xcpl667ccfF\"},{\"displayName\":\"Critical event\",\"id\":\"xWtt9c443Lt\"},{\"displayName\":\"District stock\",\"id\":\"mEtdbIDDhix\"},{\"displayName\":\"Epidemic disease outbreak\",\"id\":\"y2yQIm79VTW\"},{\"displayName\":\"Facility Stock\",\"id\":\"SqyI8HKqI4g\"},{\"displayName\":\"Immunisation\",\"id\":\"UiOSY1iIdub\"},{\"displayName\":\"Infectious disease outbreak\",\"id\":\"WUZXEFdn1PX\"},{\"displayName\":\"Malaria\",\"id\":\"zlaSof6qLqF\"},{\"displayName\":\"Population\",\"id\":\"D3bItmtBpsW\"},{\"displayName\":\"TB\",\"id\":\"IMF6p1MqoHl\"},{\"displayName\":\"Testing\",\"id\":\"nMDkAJXsmlR\"}]}", - "responseSize": 628, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/dataIntegrity", - "featureName": "Jobs can be filtered", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[{\"name\":\"orgunits_invalid_geometry\",\"displayName\":\"Organisation units with invalid geometry.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with invalid geometry.\",\"introduction\":\"DHIS2 uses the PostGIS database extension to manage the geographical information associated\\nwith organisation units. There are various reasons why geometries may be considered to be\\ninvalid including self-inclusions, self-intersections, and sliver polygons. Please see the\\nPostGIS documentation for a more in-depth discussion on this topic.\\n\\nInvalid geometry is not always a problem and may be able to be ignored, however, it has been observed in certain systems\\nthat this can lead to problems in analytics. If you are experiencing issues when generating analytics\\ntables, and see errors related to invalid geometries, you will need to either remove the invalid geometry,\\nor fix it.\",\"recommendation\":\"Update the geometry of the affected organisation units to a valid geometry. It may be possible to use the PostGIS function `ST_MakeValid` to automatically fix the problem. However, in other cases the geometry may need to be edited in a GIS tool, and then updated again in DHIS2.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OIG\"},{\"name\":\"data_elements_without_groups\",\"displayName\":\"Data elements lacking groups\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data element groups\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWG\"},{\"name\":\"orgunit_group_sets_excess_groups\",\"displayName\":\"Organisation units which belong to multiple groups in a group set.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which belong to multiple groups in a group set.\",\"introduction\":\"Organisation units should belong to exactly one group within each organisation unit group set of which they are a member. If the organisation unit belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the organisation units in the details list to exactly one group within each group set membership.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OGSEG\"},{\"name\":\"validation_rules_missing_value_strategy_null\",\"displayName\":\"All validation rule expressions should have a missing value strategy.\",\"section\":\"Validation rules\",\"severity\":\"SEVERE\",\"description\":\"All validation rule expressions should have a missing value strategy.\",\"introduction\":\"Validation rules are composed of a left and right side expression. In certain systems the missing value strategy may not be defined. This may lead to an exception during validation rule analysis. The affected validation rules should be corrected to with an appropriate missing value strategy.\",\"recommendation\":\"Using the results of the the details SQL view, identify the affected validation rules and which side of the rule the missing value strategy has not been specified. Using the maintenance app, make the appropriate corrections and save the rule.\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRMVSN\"},{\"name\":\"category_combos_being_invalid\",\"displayName\":\"Invalid Category-combos\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Lists all category-combos that are invalid\",\"recommendation\":\"Make sure the category combo is assigned to at least one category and that all categories have category options \",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCBI\"},{\"name\":\"data_elements_in_data_set_not_in_form\",\"displayName\":\"Data sets with data elements not in data entry form\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that have data elements which are neither a member of the set's data entry form nor a member of the sets section\",\"recommendation\":\"Either remove the data elements in question or make them a member of the set's form or section\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DEIDSNIF\"},{\"name\":\"categories_no_options\",\"displayName\":\"Categories with no category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with no category options\",\"introduction\":\"Categories should always have at least one category option.\",\"recommendation\":\"Any categories without category options should either be removed from the system if they are not in use. Otherwise, appropriate category options should be added to the category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CNO\"},{\"name\":\"data_elements_aggregate_no_analysis\",\"displayName\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"introduction\":\"All aggregate data elements that are captured in DHIS2 should be used to produce some type of analysis output (charts, maps, tables). This can be by using them directly in an output, or by having them contribute to an indicator calculation that is used an output.\",\"recommendation\":\"Data elements that are not routinely being reviewed in analysis, either directly or indirectly through indicators, should be reviewed to determine if they still need to be collected. If these are meant to be used in routine review, then associated outputs should be created using them. If these data elements are not going to be used for any type of information review, consideration should be made to either archive them or delete them.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANA\"},{\"name\":\"indicators_duplicated_terms\",\"displayName\":\"Indicators with the same terms.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same terms.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check attempts to identify indicators with the same formulas, regardless of the order of their their terms. Suppose you have an indicator which calculates total ANC attendance: ANC Total = ANC1 + ANC2 + ANC3 Suppose then another indicator exists in the system, which has been defined as: ANC Totals = ANC3 + ANC2 + ANC1 These two indicators are equivalent, and will produce the same result, and are thus considered to be duplicated.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Considered deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IDT\"},{\"name\":\"program_rules_no_action\",\"displayName\":\"Program rules with no action.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules with no action.\",\"introduction\":\"All program rules should have an action.\",\"recommendation\":\"Using the DHIS2 user interface, assign an action to each of the program rules which is missing one. Alternatively, if the program rule is not in use, then consider removing it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNA\"},{\"name\":\"orgunits_compulsory_group_count\",\"displayName\":\"Organisation units that are not in all compulsory orgunit group sets\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Orgunits that are not in all compulsory orgunit group sets\",\"introduction\":\"If any organisation unit groups have been marked as compulsory, each and every organisation unit should belong to exactly one group within each compulsory organisation unit group set. Assume we have created a group set called \\\"Ownership\\\" with two groups \\\"Public\\\" and \\\"Private\\\". Each and every organisation unit contained in the hierarchy must belong to either Public or Private (but not both). When organisation unit are not part of a group set, results in the analytics apps will not be correct if the organisation unit group set is used for aggregation.\",\"recommendation\":\"For each of the organisation units identified in the details query, you should assign the appropriate organisation unit group within the group set. Alternatively, if the group set should not be compulsory, you should change this attribute.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OCGC\"},{\"name\":\"orgunits_no_coordinates\",\"displayName\":\"Organisation units with no coordinates.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with no coordinates.\",\"introduction\":\"Ideally, all organisation units contained in the DHIS2 hierarchy should have a valid\\nset of coordinates. Usually for all organisation units above the facility level,\\nthese coordinates should be a polygon which provides the boundary of the organisation\\nunit. For facilities, these are usually represented as point coordinates.\\n\\nThere can obviously be exceptions to this rule. Mobile health facilities may not have\\na fixed location. Community health workers or wards below the facility level\\nmay also not have a defined or definable coordinate.\\n\\nThis check is intended to allow you to review all organisation units which do\\nnot have any coordinates and make a determination as to whether they should be updated.\",\"recommendation\":\"Where appropriate, update the geometry of each organisation unit with a valid geometry.\\nYou may need to contact the appropriate local government office to obtain a copy\\nof district boundaries, commonly referred to as \\\"shape files\\\". Another possibility\\nis to use freely available boundary files from GADM (https://gadm.org)\\n\\nIf facilities are missing coordinates, it may be possible to obtain these from\\nthe facility staff using their smart phone to get the coordinates. Images\\nfrom Google Maps can also often be used to estimate the position of a facility,\\nassuming that you have good enough resolution and local knowledge of where\\nit is located.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONC\"},{\"name\":\"data_sets_not_assigned_to_org_units\",\"displayName\":\"Data sets not assigned to organisation units\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that are not assigned to any organisation units\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DSNATOU\"},{\"name\":\"dashboards_no_items\",\"displayName\":\"Dashboards with no items.\",\"section\":\"Dashboards\",\"severity\":\"INFO\",\"description\":\"Dashboards with no items.\",\"introduction\":\"All dashboards should have content on them. Dashboards without any content do not serve any purpose, and can make it more difficult to find relevant dashboards with content.\",\"recommendation\":\"Dashboards without content that have not been modified in the last 14 days should be considered for deletion.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNI\"},{\"name\":\"orgunits_same_name_and_parent\",\"displayName\":\"Organisation units should not have the same name and parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have the same name and parent.\",\"introduction\":\"Organisation units may have exactly the same name. This may become confusing to users, particularly if the organisation unit has the same name and same parent. This can easily lead to data entry or analysis mistakes as users have no way to distinguish between the two organisation units.\",\"recommendation\":\"Rename identically named organisation units which share the same parent using the maintenance app.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OSNAP\"},{\"name\":\"indicators_not_grouped\",\"displayName\":\"Indicators not in any groups.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not in any groups.\",\"introduction\":\"All indicators should be in an indicator group. This allows users to find the indicators more easily in analysis apps and also contributes to having more complete indicators group sets. Maintenance operations can also be made more efficient by applying bulk settings (ex. sharing, filtering) to all indicators within an indicator group.\",\"recommendation\":\"Indicators that are not in a indicator group should be added to a relevant indicator group. If the indicators are not needed, they should be deleted.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"ING\"},{\"name\":\"category_option_group_sets_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option group sets should be composed of at least two category option groups.\",\"recommendation\":\"Considering removing groups with zero or one category option groups, or alternatively, add additional category option groups to the group set to make it more useful.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSS\"},{\"name\":\"org_units_without_groups\",\"displayName\":\"Organisation units lacking groups\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are not connected to at least one group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWG\"},{\"name\":\"data_elements_excess_groupset_membership\",\"displayName\":\"Data elements which belong to multiple groups in a group set.\",\"section\":\"data_elements\",\"severity\":\"SEVERE\",\"description\":\"Data elements which belong to multiple groups in a group set.\",\"introduction\":\"Data elements should belong to exactly one group within each data element group set of which they are a member. If the data element belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the data elements in the details list to exactly one data element group within each group set.\",\"issuesIdType\":\"data_elements_aggregate\",\"isSlow\":false,\"code\":\"DEEGM\"},{\"name\":\"data_element_groups_scarce\",\"displayName\":\"Data element groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Data element groups should have at least two members.\",\"introduction\":\"All data element groups should be composed of at least two data elements.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"dataElementGroups\",\"isSlow\":false,\"code\":\"DEGS\"},{\"name\":\"orgunits_not_contained_by_parent\",\"displayName\":\"Organisation units with point coordinates should be contained by their parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with point coordinates should be contained by their parent.\",\"introduction\":\"Facilities are often represented as points in the DHIS2 hierarchy. Their parent organisation units geometry should contain all facilities which have been associated with them.\",\"recommendation\":\"Often boundary files are simplified when they are uploaded into DHIS2. This process may result in\\nfacilities which are located close to the border of a given district to fall outside of the district\\nwhen the boundary is simplified. This is considered to be more of a cosmetic problem for most DHIS2\\ninstallations, but could become an issue if any geospatial analysis is attempted using the\\nboundaries and point coordinates.\\n\\nIn cases where the facility falls outside of its parent's boundary\\nyou should confirm that the coordinates are correct. If the location is close to the boundary, you\\nmay want to reconsider how the boundary files have been simplified. Otherwise, if the location of\\nthe facility is completely incorrect, it should be rectified.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONCBP\"},{\"name\":\"program_rules_message_no_template\",\"displayName\":\"Program rules actions which should send or schedule a message without a message template.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules actions which should send or schedule a message without a message template.\",\"introduction\":\"Program rule actions of type \\\"Send message\\\" or \\\"Schedule message\\\" should have an associated message template.\",\"recommendation\":\"Using the DHIS2 user interface, assign a message template to each of the program rule actions which send or schedule messages but which does not have an association with a message template.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRMNT\"},{\"name\":\"indicators_with_invalid_denominator\",\"displayName\":\"Indicators with invalid denominator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"List all indicators where the denominator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWID\"},{\"name\":\"indicator_types_duplicated\",\"displayName\":\"Indicator types with the same factor.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicator types with the same factor.\",\"introduction\":\"Indicators can be assigned a factor which is multiplied by the indicator's value. For example, if you create a percentage based indicator, you can assign the indicator a factor of 100, which would be multiplied by the actual value of the indicator calculated by DHIS2. In general, having multiple indicator types with the same factor is not recommended. It is duplicative, and may lead to confusion.\",\"recommendation\":\"Duplicated indicator types should consider to be removed from the system. Consider choosing one of the duplicated indicator types as the one to keep, and then update all indicators which share the same factor to this indicator type. The duplicated indicator types can then be removed from the system.\",\"issuesIdType\":\"indicatorTypes\",\"isSlow\":false,\"code\":\"ITD\"},{\"name\":\"options_sets_empty\",\"displayName\":\"Empty option sets\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Empty option sets\",\"introduction\":\"All option sets should generally include at least two items. Empty option sets serve no purpose.\",\"recommendation\":\"Options should either be added to the option set, or the option set should be deleted.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSE\"},{\"name\":\"category_options_no_categories\",\"displayName\":\"Category options with no categories.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options with no categories.\",\"introduction\":\"All category options should belong to at least one category.\",\"recommendation\":\"Category options which are not part of any category should be removed or alternatively should be added to an appropriate category.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CONC\"},{\"name\":\"orgunits_orphaned\",\"displayName\":\"Orphaned organisation units.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"Orphaned organisation units.\",\"introduction\":\"Orphaned organisation units are those which have neither parents nor any children. This means that they have no relationship to the main organisation unit hierarchy. These may be created by faulty metadata imports or direct manipulation of the database.\",\"recommendation\":\"The orphaned organisation units should be assigned a parent or removed from the system. It is recommended to use the DHIS2 API for this task if possible. If this is not possible, then they may need to be removed through direct SQL on the DHIS2 database.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OO\"},{\"name\":\"indicators_with_identical_formulas\",\"displayName\":\"Indicators with identical formulas\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that have the identical formulas with at least one other indicator\",\"recommendation\":\"Check if the same indicator should be used everywhere and remove duplicates\",\"isSlow\":false,\"code\":\"IWIF\"},{\"name\":\"program_indicators_with_invalid_filters\",\"displayName\":\"Program indicators with invalid filter\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators with invalid filter expression\",\"recommendation\":\"Check that the expression evaluates to true/false\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIF\"},{\"name\":\"program_rules_without_condition\",\"displayName\":\"Program rules lacking a condition\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that have no condition yet\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWC\"},{\"name\":\"categories_one_default_category\",\"displayName\":\"Only one default category should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category should exist\",\"introduction\":\"There should only exist one category with name and code \\\"default\\\".\",\"recommendation\":\"Only the category with UID \\\"GLevLNI9wkl\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category or move all references to category \\\"GLevLNI9wkl\\\" and then remove the unused conflicting category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CODC\"},{\"name\":\"org_units_with_cyclic_references\",\"displayName\":\"Organisation units with cyclic references\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that have a conflicting parent hierarchy definition so that two organisation units become parent of each other or in other words they form a circular reference\",\"recommendation\":\"One of the organisation units must be setup wrongly and needs to be corrected so that a non-circular tree connects the two\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWCR\"},{\"name\":\"program_rule_variables_without_data_element\",\"displayName\":\"Program rule variables lacking a data element\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring a data element source but that is not yet linked to a data element\",\"recommendation\":\"Assign a data element to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWDE\"},{\"name\":\"org_units_violating_exclusive_group_sets\",\"displayName\":\"Organisation units with conflicting exclusive group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are members of multiple exclusive organisation unit groups\",\"recommendation\":\"Remove the organisation unit from all but one exclusive organisation unit group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUVEGS\"},{\"name\":\"program_rule_actions_without_data_object\",\"displayName\":\"Program rules with actions lacking a data object\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires either a data element or an attribute but is not connected either\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWDO\"},{\"name\":\"orgunits_openingdate_gt_closeddate\",\"displayName\":\"Organisation units which have an opening date later than the closed date.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which have an opening date later than the closed date.\",\"introduction\":\"If a closing date has been defined for an organisation unit, it should always be after the opening date (if one has been defined).\",\"recommendation\":\"Alter either the opening or closing date of all affected organisation units so that the closing date is after the opening date.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OOGC\"},{\"name\":\"categories_one_default_category_option_combo\",\"displayName\":\"Only one default category option combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option combo should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option combo with UID \\\"HllvX50cXC0\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option combo or move all references to category option combo \\\"HllvX50cXC0\\\" and then remove the unused conflicting category option combo.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CODCOC\"},{\"name\":\"category_option_group_sets_incomplete\",\"displayName\":\"Category option group sets which do not contain all category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option group sets which which do not contain all category options.\",\"introduction\":\"Category option group sets are composed of multiple category option groups, which are in turn composed of various category options. Category option group sets are often used to group related category options together for analytical purposes. Categories are also composed of category options. In general, but not always, category option group sets should contain all category options of related categories. Suppose we have the following two age categories. \\nAge coarse: <15, 15+ Age fine: <1, 1-10, 10-14,15-19,20-24,25-29,30-34,35-39,40-44,45+\\nIn many cases, related data elements may be disaggregated differently. This may be to differences in the way in which the data is collected, or as is often the case, the disaggregation has changed over time. If we wish to analyze data for two different data elements (one of which uses Age coarse and the other Age fine), we can create a category option group set consisting of two category option groups which should consist of the following category options from above. \\n<15: <15, <1, 1-10, 10-14 15+: 15+, 15-19,20-24,25-29,30-34,35-39,40-44,45+\\nSuppose that we happen to omit the category option \\\"<1\\\" from the \\\"<15\\\" category option group. This would result in potential aggregation errors in when using this category option group set in any analytical objects. The details of this metadata check would return the UID and name of the category option group set. The category and category option would also be provided. Using the previous example, we would see \\\"Age fine:{<1}\\\" in the metadata check details section, to indicate that the <1 category option which is part of the \\\"Age fine\\\" category, is missing from the category option group set.\\nThere may exist specific analytical reasons why specific category options are omitted from a category option group set. However,these should usually be special cases. This metadata check will identify cases where category option group sets appear to be incomplete, however you should carefully review any groups which appear in the details. \\nThis check may also produce a number of issues which may at first glance appear to be false positives. In some cases, category options may be added to a category by mistake. When category option group sets are created, this extraneous option may be omitted and thus appear as missing from the group set. \\nAnother observed situation is where an option like \\\"Unknown\\\" is used across unrelated categories. Suppose you have two categories \\\"Age (<15, 15+, Unknown)\\\" and \\\"Sex (Male,Female,Unknown)\\\". Similar to above, we create category option group sets like: \\n<15: <15 15+: 15+ Unknown: Unknown\\nThis metadata check will report that \\\"Male\\\" and \\\"Female\\\" are missing from the group set. This is because the same \\\"Unknown\\\" option is shared between two different, unrelated categories. It is recommended that if this situation occurs, that you create two separate \\\"Unknown\\\" category options like \\\"Unknown sex\\\" and \\\"Unknown age\\\".\",\"recommendation\":\"Using the maintenance app, assign the missing category options to an appropriate category option group within the affected category option group set.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSI\"},{\"name\":\"maps_not_viewed_one_year\",\"displayName\":\"Maps which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Maps which have not been viewed in the past 12 months\",\"introduction\":\"Maps should be regularly viewed in the system. In many cases, users may create maps for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system and being difficult to find in the Maps app.\",\"recommendation\":\"Unused maps can be removed directly using the Maps app by a user with sufficient authority. If maps are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"maps\",\"isSlow\":false,\"code\":\"MNVOY\"},{\"name\":\"indicators_exact_duplicates\",\"displayName\":\"Indicators with the same formula.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same formula.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check shows indicators which have the exact same formulas. Spaces which are present are removed prior to comparison.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Consider deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IED\"},{\"name\":\"indicators_violating_exclusive_group_sets\",\"displayName\":\"Indicators with conflicting exclusive group sets\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that are members of multiple exclusive indicator groups\",\"recommendation\":\"Remove the indicator from all but one exclusive indicator group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IVEGS\"},{\"name\":\"category_options_excess_groupset_membership\",\"displayName\":\"Category options which belong to multiple groups in a category option group set.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category options which belong to multiple groups in a category option group set.\",\"introduction\":\"Category options should belong to exactly one category option group which are part of a category option group set. If the category option belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the category option in the details list to exactly one category option group within each group set.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"COEGM\"},{\"name\":\"periods_duplicates\",\"displayName\":\"Duplicate Periods\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Lists all periods duplicates which have identical type and start date\",\"recommendation\":\"Make sure all database references are moved to one of the duplicates before deleting the unused duplicates\",\"isSlow\":false,\"code\":\"PD\"},{\"name\":\"program_rules_without_action\",\"displayName\":\"Program rules lacking an action\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that are not connected to any program rule action\",\"recommendation\":\"Connect the rule to an action or consider removing the rule\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWA\"},{\"name\":\"orgunits_multiple_roots\",\"displayName\":\"The organisation unit hierarchy should have a single root.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"The organisation unit hierarchy should have a single root.\",\"introduction\":\"Every DHIS2 system should have a single root organisation unit. This means a single organisation unit from which all other branches of the hierarchy are descendants.\",\"recommendation\":\"Once you have decided which organisation unit should be the real root of the organisation unit hierarchy, you should update the parent organisation unit. This can be done by using the DHIS2 API or my updating the value directly in the `organisationunit` table.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMR\"},{\"name\":\"validation_rules_with_invalid_left_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a left side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWILSE\"},{\"name\":\"program_rule_actions_without_stage_id\",\"displayName\":\"Program rules with actions lacking a program stage\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a program stage but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWSI\"},{\"name\":\"indicator_groups_scarce\",\"displayName\":\"Indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups should have at least two members.\",\"introduction\":\"All indicator groups should be composed of at least two indicators.\",\"recommendation\":\"Considering removing groups with zero or one groups, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"indicatorGroups\",\"isSlow\":false,\"code\":\"IGS\"},{\"name\":\"option_sets_wrong_sort_order\",\"displayName\":\"Option sets with possibly wrong sort order.\",\"section\":\"Option sets\",\"severity\":\"SEVERE\",\"description\":\"Option sets with possibly wrong sort order.\",\"introduction\":\"Option sets contain options which should be ordered sequentially. The sort_order property should always start with 1 and have a sequential sequence. If there are three options in the option set, then the sort order should be 1,2,3. \\nIn certain circumstances, options may be deleted from an option set, and the sort order may become corrupted. This may lead to a situation where it becomes impossible to update the option set from the maintenance app, and may lead to problems when attempting to using the option set in the data entry app.\",\"recommendation\":\"If it is possible to open the option set in the maintenance app, you can resort the option set, which should correct the problem. Another possible solution is to directly update the sort_order property of in the `optionset` table in the database, ensuring that a valid sequence is present for all options in the option set.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSWSO\"},{\"name\":\"periods_same_start_end_date\",\"displayName\":\"Periods with the same start and end dates\",\"section\":\"Periods\",\"severity\":\"CRITICAL\",\"description\":\"Periods with the same start and end dates\",\"introduction\":\"Different periods should not have exactly the same start and end date.\",\"recommendation\":\"All references to the duplicate periods should be removed from the system and reassigned. It is recommended to use the period with the lower periodid.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PSSED\"},{\"name\":\"program_indicators_with_invalid_expressions\",\"displayName\":\"Program indicators with invalid expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have an invalid expression\",\"recommendation\":\"Check that the expression evaluates to a number\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIE\"},{\"name\":\"program_rule_actions_without_notification\",\"displayName\":\"Program rule with actions lacking a notification template\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires a notification template but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWN\"},{\"name\":\"indicator_no_analysis\",\"displayName\":\"Indicators not used in analytical objects.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not used in analytical objects.\",\"introduction\":\"Indicators should be used to produce some type of analytical output (charts, maps, pivot tables). Note: indicators used in datasets to provide feedback during data entry are not counted as being used in analytical objects.\",\"recommendation\":\"Indicators that are not routinely being used for analysis should be reviewed to determine if they are useful and needed. If these are meant to be used for routine review, then associated outputs should be created using them. If these indicators are not going to be used for any type of information review, and are not used in data sets for feedback during data entry, consideration should be made to delete them.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"INA\"},{\"name\":\"user_groups_scarce\",\"displayName\":\"User groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"User groups should have at least two members.\",\"introduction\":\"Generally, user groups should contain two or more users.\",\"recommendation\":\"Considering removing user groups with less than two users, or alternatively, add additional users to the group to make it more useful.\",\"issuesIdType\":\"userGroups\",\"isSlow\":false,\"code\":\"UGS\"},{\"name\":\"data_elements_aggregate_with_different_period_types\",\"displayName\":\"Aggregate data elements which belong to datasets with different period types.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"SEVERE\",\"description\":\"Aggregate data elements which belong to datasets with different period types.\",\"introduction\":\"Data elements should not belong to datasets with different period types.\",\"recommendation\":\"If you need to collect data with different period types (e.g. weekly and monthly) you should use different data elements for each period type. In general, it is not recommended to collect data with different frequencies, since in general, data collected at higher frequencies (e.g. weekly) can be aggregated to data with lower frequencies (e.g yearly).\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAWDPT\"},{\"name\":\"validation_rules_without_groups\",\"displayName\":\"Validation rules lacking groups\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that are not member of at least one validation rule group\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWG\"},{\"name\":\"category_option_combos_disjoint\",\"displayName\":\"Category option combinations with disjoint associations.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with disjoint associations.\",\"introduction\":\"Under certain circumstances, category option combinations may exist in the system, but not have any direct association with category options which are associated with their category combination. This situation usually occurs when category options have been added to a category and then the category is added to a category combination. New category option combinations are created in the system at this point. If any of the category options are then removed in one of the underlying categories, a so-called disjoint category option combination may result. This is a category option combination which has no direct association with any category options in any of the categories associated with the category combination.\",\"recommendation\":\"The disjoint category option combinations should be removed from the system if possible. However, if any data is associated with the category option combination, a determination will need to be made in regards of how to deal with this data.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"COCD\"},{\"name\":\"options_sets_unused\",\"displayName\":\"Option sets which are not used\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Option sets which are not used\",\"introduction\":\"Option sets should be used for some purpose. The may be used by data elements, comments, attributes, or tracked entity attributes.\",\"recommendation\":\"Consider deleting unused option sets, or alternatively, ensure that they have been properly assigned.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSU\"},{\"name\":\"catoptioncombos_no_catcombo\",\"displayName\":\"Category options combinations with no category combination.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options combinations with no category combination.\",\"introduction\":\"All category option combinations should be associated with a category combo. In certain cases, when category combinations are deleted,the linkage between a category option combination and a category combination may become corrupted.\",\"recommendation\":\"Check if any data is associated with the category option combination in question. Likely, the data should either be deleted or migrated to a valid category option combination. Any data which is associated with any of these category option combinations will not be available through either the data entry modules or any of the analytical apps.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CNC\"},{\"name\":\"data_elements_violating_exclusive_group_sets\",\"displayName\":\"Data elements with conflicting exclusive group sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are a members of more than one exclusive data element set belonging to the same data element group set\",\"recommendation\":\"Either remove the data element from all but one exclusive group set or consider if the set really should be an exclusive group set\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEVEGS\"},{\"name\":\"categories_same_category_options\",\"displayName\":\"Categories with the same category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with the same category options\",\"introduction\":\"Categories with the exact same category options should be considered to be merged. Categories with the exact same category options may be easily confused by users in analysis. The details view will provide a list of categories which have the exact same category options. For each duplicated category a number in parentheses such as (1) will indicate which categories belong to duplicated groups.\",\"recommendation\":\"If category combinations have already been created with duplicative categories,\\nit is recommended that you do not take any action, but rather ensure\\nthat users understand that there may be two category combinations which are duplicative.\\n\\nIf you choose to merge the duplicative category combinations, you would need to \\nremap all category option combinations from the category combo which you wish to \\nremove, to the one which you wish to keep. \\n\\nIf one of the categories is not in use in any category combination, it should\\nconsider to be removed from the system.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CSCO\"},{\"name\":\"visualizations_not_viewed_one_year\",\"displayName\":\"Visualizations which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Visualizations which have not been viewed in the past 12 months\",\"introduction\":\"Visualizations should be regularly viewed in the system. In many cases, users may create charts for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to charts being difficult to find in the visualization app.\",\"recommendation\":\"Unused charts can be removed directly using the data visualization app by a user with sufficient authority. If charts are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"visualizations\",\"isSlow\":false,\"code\":\"VNVOY\"},{\"name\":\"categories_one_default_category_option\",\"displayName\":\"Only one default category option should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option with UID \\\"xYerKDKCefk\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option or move all references to category option \\\"xYerKDKCefk\\\" and then remove the unused conflicting category option.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CODCO\"},{\"name\":\"orgunits_multiple_spaces\",\"displayName\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"introduction\":\"Names and/or shortnames of organisation units should not contain multiple spaces. They are superfluous and may complicate the location of organisation units when they are searched.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the multiple spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMS\"},{\"name\":\"data_elements_aggregate_abandoned\",\"displayName\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"introduction\":\"Data elements are considered to be abandoned when they have not been edited in at least 100 days and do not have any data values associated with them. Often, these are the result of new or changed configurations that have been abandoned at some point.\",\"recommendation\":\"Data elements that have no data associated with them and which there are no plans to start using for data collection should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAA\"},{\"name\":\"data_elements_assigned_to_data_sets_with_different_period_types\",\"displayName\":\"Data elements assigned to data sets with different period type\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are assigned to at least one data set that has a different period type\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEATDSWDPT\"},{\"name\":\"data_elements_aggregate_no_groups\",\"displayName\":\"Aggregate data elements not in any data element groups.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not in any data element groups.\",\"introduction\":\"All data elements should be in a data element group. This allows users to find the data elements more easily in analysis\\n apps and also contributes to having more complete data element group sets.\\n Maintenance operations can also be made more efficient by applying\\n bulk settings (ex. sharing) to all data elements within a data element group.\",\"recommendation\":\"Data elements that are not in a data element group should be added to a relevant data element group. If the data elements are not needed, they should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANG\"},{\"name\":\"category_options_shared_within_category_combo\",\"displayName\":\"Category combinations with categories which share the same category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category combinations with categories which share the same category options.\",\"introduction\":\"As a general rule, category options should be reused where possible between categories. The exception to this rule however, is when you have a category combo with multiple categories, and within those categories, a category option is shared. As a simple example, lets say you have a category called \\\"Sex\\\" with options \\\"Male\\\"\\\", \\\"Female\\\" and \\\"Unknown\\\". There is also a second category called \\\"Age\\\" with options \\\"<15\\\", \\\"15+\\\", and \\\"Unknown\\\". A category combination called \\\"Age/Sex\\\" is then created with these two categories, which share the option \\\"Unknown\\\". This situation should be avoided, as it creates issues when analyzing data.\",\"recommendation\":\"The recommended approach to dealing with this situation is to create a new category combination, using two new categories. Using the example from the introduction, you should create two new category options called \\\"Unknown age\\\" and \\\"Unknown sex\\\". A new category combination can then be created with these new categories, which do not share category options. All data which is potentially associated with the old category combinations, would need to be reassigned to the new category option combinations. Any analytical objects which use the categories to be removed would also need to be updated.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"COSWCC\"},{\"name\":\"orgunits_null_island\",\"displayName\":\"Organisation units located within 100 km of Null Island (0,0).\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units located within 100 km of Null Island (0,0).\",\"introduction\":\"A common problem when importing coordinates is the inclusion of coordinates situated around the point of [Null Island](https://en.wikipedia.org/wiki/Null_Island). This is the point on the Earth's surface where the Prime Meridian and Equator intersect with a latitude of 0 and a longitude of 0. The point also happens to be situated currently in the middle of the ocean. This query identifies any points located within 100 km of the point having latitude and longitude equal to zero.\",\"recommendation\":\"Update the coordinates of the affected organization unit to the correct location.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONI\"},{\"name\":\"program_rule_actions_without_section\",\"displayName\":\"Program rules with actions lacking a program stage section\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a section but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWS\"},{\"name\":\"periods_3y_future\",\"displayName\":\"Periods which are more than three years in the future.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are more than three years in the future.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\nfar future. Different data entry clients may not properly validate for periods\\nwhich are in the future, and thus any periods in the future should be reviewed.\\nIn some cases, data may be valid for future dates, e.g. targets which are set for the\\nnext fiscal year.\",\"recommendation\":\"If any periods exist in the system in the future, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\\n\\nIn many cases, clients may mean to transmit\\ndata for January 2021, but due to data entry errors, January 2031 is selected. Thus,\\nany data in the far future should be investigated to ensure it does not result\\nfrom data entry errors.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"P3F\"},{\"name\":\"orgunits_trailing_spaces\",\"displayName\":\"Organisation units should not have trailing spaces.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have trailing spaces.\",\"introduction\":\"Trailing spaces in organisation units are superfluous.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the trailing spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OTS\"},{\"name\":\"validation_rule_groups_scarce\",\"displayName\":\"Validation rule should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Validation rule should have at least two members.\",\"introduction\":\"Generally validation rule groups should be composed of multiple validation rules.\",\"recommendation\":\"Considering removing groups which are empty or which have a single member. Alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"validationRuleGroups\",\"isSlow\":false,\"code\":\"VRGS\"},{\"name\":\"indicators_with_invalid_numerator\",\"displayName\":\"Indicators with invalid numerator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators where the numerator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWIN\"},{\"name\":\"categories_one_default_category_combo\",\"displayName\":\"Only one default category combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category combo should exist\",\"introduction\":\"There should only exist one category combo with name and code \\\"default\\\".\",\"recommendation\":\"Only the category combo with UID \\\"bjDvmb4bfuf\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category combo or move all references to category combo \\\"bjDvmb4bfuf\\\" and then remove the unused conflicting category combo.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CODCC\"},{\"name\":\"data_elements_without_data_sets\",\"displayName\":\"Data elements lacking data Sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data sets\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWDS\"},{\"name\":\"category_combos_unused\",\"displayName\":\"Category combinations not used by other metadata objects\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category combinations not used by other metadata objects\",\"introduction\":\"Category combinations which are unused in any datasets, data elements, programs or data approval workflows may be safe to delete. In some cases, category combinations may be created, but never actually used for anything. This may lead to situations where users and implementers are confused about which category combination should actually be used. In general, it should be safe to delete unused category combinations, except in situations where existing data has been associated with them.\",\"recommendation\":\"Check to see if any data is associated with the category combination before attempting to delete it. Category combinations which are not currently used in any metadata objects may still be valid for legacy reasons, but they should be reviewed to be sure they are still needed. Otherwise, it should be safe to remove them from the system.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCU\"},{\"name\":\"category_option_groups_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option groups should be composed of at least two category options. There can however be legitimate cases when a single category option is part of a group, especially in cases where there is a direct mapping between age bands and category options.\",\"recommendation\":\"Considering removing groups with zero or one category options, or alternatively, add additional category options to the group to make it more useful.\",\"issuesIdType\":\"categoryOptionGroups\",\"isSlow\":false,\"code\":\"COGS\"},{\"name\":\"datasets_empty\",\"displayName\":\"Datasets with no data elements.\",\"section\":\"Data sets\",\"severity\":\"WARNING\",\"description\":\"Datasets with no data elements.\",\"introduction\":\"All datasets should have data elements assigned to them.\",\"recommendation\":\"Remove empty datasets, or alternatively, assign data elements to them.\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DE\"},{\"name\":\"indicators_without_groups\",\"displayName\":\"Indicators lacking groups\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that do not have at least one group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWG\"},{\"name\":\"orgunit_groups_scarce\",\"displayName\":\"Organisation unit groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Organisation unit groups should have at least two members.\",\"introduction\":\"Generally, organisation unit groups should be composed of multiple organisation units.\",\"recommendation\":\"Considering removing groups with zero or one organisation units, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OGS\"},{\"name\":\"program_rules_without_priority\",\"displayName\":\"Program rules lacking a priority setting\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules with action type \\\"assign\\\" where the rule priority is not yet set\",\"recommendation\":\"Set a priority for the program rule(s)\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWP\"},{\"name\":\"categories_unique_category_combo\",\"displayName\":\"Different category combinations should not have the exact same combination of categories.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Different category combinations should not have the exact same combination of categories.\",\"introduction\":\"Category combinations should be a unique combination of categories. If two or more category combinations contain the exact same set of categories, this would be considered to be duplicative and potentially confusing to users.\",\"recommendation\":\"One category combo is kept, all references are updated to use this combo and other combos are removed.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CUCC\"},{\"name\":\"indicator_group_sets_scarce\",\"displayName\":\"Indicator groups sets should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups sets should have at least two members.\",\"introduction\":\"All indicator group set should be composed of at least two indicators groups.\",\"recommendation\":\"Considering removing indicator group sets with less than two indicator groups, or alternatively, add additional indicator groups to the indicator group set to make it more useful.\",\"issuesIdType\":\"indicatorGroupSets\",\"isSlow\":false,\"code\":\"IGSS\"},{\"name\":\"validation_rules_with_invalid_right_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a right side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWIRSE\"},{\"name\":\"data_elements_aggregate_aggregation_operator\",\"displayName\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"introduction\":\"Data elements which are not numeric (text, dates, etc) should have an aggregation operator set to NONE. Data elements which are able to be aggregated (numbers, integers, etc) should have an aggregation operator set to something other than NONE, most often SUM.\",\"recommendation\":\"Open the affected data elements in the Maintenance App and change their aggregation type to an appropriate type. Alternatively, these can be altered via the API.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAAO\"},{\"name\":\"org_unit_groups_without_group_sets\",\"displayName\":\"Organisation unit groups lacking group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation unit groups that aren't member of at least one organisation unit group set\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OUGWGS\"},{\"name\":\"program_rule_variables_without_attribute\",\"displayName\":\"Program rule variables lacking an attribute\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring an attribute source but that is not yet linked to an attribute\",\"recommendation\":\"Assign an attribute to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWA\"},{\"name\":\"program_indicator_groups_scarce\",\"displayName\":\"Program indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Program indicator groups should have at least two members.\",\"introduction\":\"Program indicator groups should generally be composed of two or more program indicators.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"programIndicatorGroups\",\"isSlow\":false,\"code\":\"PIGS\"},{\"name\":\"program_rules_no_expression\",\"displayName\":\"Program rules with no expression.\",\"section\":\"Program rules\",\"severity\":\"WARNING\",\"description\":\"Program rules with no expression.\",\"introduction\":\"All program rules should have an expression. Expressions are used by program rules to determine when they should be triggered. Program rules with no expression have no purpose.\",\"recommendation\":\"Using the DHIS2 user interface, assign an expression to each of the program rules which is missing one. Otherwise, if it is safe to delete the program rule with no expression, it is recommended to remove it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNE\"},{\"name\":\"data_elements_aggregate_no_data\",\"displayName\":\"Aggregate data elements with NO data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements with NO data values.\",\"introduction\":\"Data elements should generally always be associated with data values. If data elements exist in a data set which is active, but there are no data values associated with them, they may not be part of the data entry screens. Alternatively, the data element may have been added but never been associated with a dataset.\",\"recommendation\":\"Consider removing data elements with no data values.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAND\"},{\"name\":\"program_indicators_without_expression\",\"displayName\":\"Program indicators lacking an expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have no expression set yet\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWE\"},{\"name\":\"periods_distant_past\",\"displayName\":\"Periods which are in the distant past.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are in the distant past.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\ndistant past. Different data entry clients may not properly validate for periods\\nwhich are in the distant past, and thus these periods should be triaged to ensure\\nthat data has not been entered against them by mistake.\",\"recommendation\":\"If any periods exist in the system in the distant past, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PDP\"},{\"name\":\"org_units_being_orphaned\",\"displayName\":\"Orphaned organisation units\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that aren't level 1 units but that lack a parent so that they are not connected to the rest of the organisation tree\",\"recommendation\":\"Find (or create) and set the correct parent for the orphaned organisation unit(s). Eventually this is also caused by having set the wrong level.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUBO\"},{\"name\":\"cocs_wrong_cardinality\",\"displayName\":\"Category option combinations with incorrect cardinality.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with incorrect cardinality.\",\"introduction\":\"All category option combinations should have exactly the same number of category option associations as the number of categories in the category combination. If there are two categories in a category combination, then every category option combination should have exactly two category options.\\nCategory option combinations with the incorrect cardinality are usually the result of a category combination having been created, and then modified later. Suppose that two categories are used to create a category combination. Each category option combination of this category combo will have two category options. If an additional category is added to the category combination later, new category option combinations with three category options will be created and associated with this category combo. The original category option combinations would be considered to be invalid.\",\"recommendation\":\"Category option combinations which have an incorrect cardinality will be ignored by the DHIS2 analytics system and should be removed.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CWC\"},{\"name\":\"dashboards_not_viewed_one_year\",\"displayName\":\"Dashboards which have not been actively viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Dashboards which have not been actively viewed in the past 12 months\",\"introduction\":\"Dashboards should be regularly viewed in the system. In many cases, users may create dashboards for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to useful dashboards being difficult to find. This check identifies any dashboards which have not been viewed in the past year.\",\"recommendation\":\"Unused dashboards can be deleted in the entirety from the main dashboard app by clicking on the \\\"Edit\\\" button and choosing \\\"Delete\\\". Note that this process cannot be undone! Another option would be to alter the sharing of the dashboard so that it is not visible to any user.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNVOY\"}]", - "responseSize": 66022, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - } -] diff --git a/cypress/fixtures/network/40/static_resources.json b/cypress/fixtures/network/40/static_resources.json deleted file mode 100644 index e47a13cf7..000000000 --- a/cypress/fixtures/network/40/static_resources.json +++ /dev/null @@ -1,371 +0,0 @@ -[ - { - "path": "/api/system/info", - "featureName": null, - "static": true, - "count": 63, - "nonDeterministic": true, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": [ - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:42:44.813\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 35 m, 53 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:42:48.918\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 35 m, 58 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:42:50.401\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 35 m, 59 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:42:51.817\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 36 m\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:43:00.707\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 36 m, 9 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:43:06.720\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 36 m, 15 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:43:09.239\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 36 m, 18 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:43:11.248\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 36 m, 20 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:43:13.201\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 36 m, 22 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:43:15.000\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 36 m, 24 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:43:17.550\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 36 m, 26 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:43:20.468\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 36 m, 29 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:43:23.140\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 36 m, 32 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:43:32.370\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 36 m, 41 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:43:38.200\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 36 m, 47 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:43:40.192\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 36 m, 49 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:43:42.104\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 36 m, 51 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:43:50.497\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 36 m, 59 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:43:56.135\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 37 m, 5 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:44:04.576\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 37 m, 13 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:44:13.356\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 37 m, 22 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:44:17.843\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 37 m, 27 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:44:19.338\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 37 m, 28 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:44:20.754\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 37 m, 29 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:44:29.375\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 37 m, 38 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:44:33.362\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 37 m, 42 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:44:41.938\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 37 m, 51 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:44:45.098\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 37 m, 54 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:44:54.439\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 38 m, 3 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:45:04.942\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 38 m, 14 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:45:12.203\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 38 m, 21 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:45:15.074\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 38 m, 24 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:45:17.816\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 38 m, 26 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:45:20.027\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 38 m, 29 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:45:22.533\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 38 m, 31 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:45:25.552\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 38 m, 34 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:45:28.820\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 38 m, 37 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:45:31.956\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 38 m, 41 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:45:42.442\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 38 m, 51 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:45:48.433\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 38 m, 57 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:45:50.654\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 38 m, 59 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:45:52.778\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 39 m, 1 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:46:01.966\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 39 m, 11 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:46:12.055\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 39 m, 21 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:46:15.529\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 39 m, 24 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:46:23.750\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 39 m, 32 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:46:27.078\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 39 m, 36 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:46:36.290\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 39 m, 45 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:46:46.307\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 39 m, 55 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:46:49.705\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 39 m, 58 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:46:58.201\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 40 m, 7 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:47:01.104\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 40 m, 10 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:47:09.662\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 40 m, 18 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:47:19.204\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 40 m, 28 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:47:29.120\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 40 m, 38 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:47:33.264\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 40 m, 42 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:47:34.936\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 40 m, 44 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:47:36.775\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 40 m, 45 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:47:38.093\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 40 m, 47 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:47:47.263\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 40 m, 56 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:47:56.160\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 41 m, 5 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:48:05.960\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 41 m, 15 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}", - "{\"contextPath\":\"http://localhost:8080\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/9.5.1 Chrome/94.0.4606.81 Electron/15.3.4 Safari/537.36\",\"calendar\":\"iso8601\",\"dateFormat\":\"yyyy-mm-dd\",\"serverDate\":\"2023-03-01T08:48:16.085\",\"serverTimeZoneId\":\"Etc/UTC\",\"serverTimeZoneDisplayName\":\"Coordinated Universal Time\",\"lastAnalyticsTableSuccess\":\"2023-02-22T15:06:50.840\",\"intervalSinceLastAnalyticsTableSuccess\":\"161 h, 41 m, 25 s\",\"lastAnalyticsTableRuntime\":\"00:02:22.612\",\"lastSystemMonitoringSuccess\":\"2019-03-26T17:07:15.418\",\"version\":\"2.40-SNAPSHOT\",\"revision\":\"826dce3\",\"buildTime\":\"2023-02-08T07:39:33.000\",\"databaseInfo\":{\"spatialSupport\":false},\"encryption\":false,\"emailConfigured\":false,\"redisEnabled\":false,\"systemName\":\"DHIS 2 Demo - Sierra Leone\",\"isMetadataVersionEnabled\":true}" - ], - "responseSize": 853, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, no-store, max-age=0, must-revalidate", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - }, - "responseLookup": [ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62 - ] - }, - { - "path": "/api/40/userSettings", - "featureName": null, - "static": true, - "count": 63, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false}", - "responseSize": 3609, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/systemSettings/applicationTitle", - "featureName": null, - "static": true, - "count": 63, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"applicationTitle\":\"DHIS 2 Demo - Sierra Leone\"}", - "responseSize": 49, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/me/dashboard", - "featureName": null, - "static": true, - "count": 63, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"unreadInterpretations\":41,\"unreadMessageConversations\":182}", - "responseSize": 61, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, no-store, max-age=0, must-revalidate", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/me?fields=authorities,avatar,email,name,settings", - "featureName": null, - "static": true, - "count": 62, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"name\":\"John Traore\",\"email\":\"dummy@dhis2.org\",\"settings\":{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false},\"authorities\":[\"F_PROGRAM_INDICATOR_PUBLIC_ADD\",\"F_SQLVIEW_EXECUTE\",\"F_USER_VIEW\",\"F_GENERATE_MIN_MAX_VALUES\",\"F_VALIDATIONRULE_PUBLIC_ADD\",\"F_CATEGORY_PRIVATE_ADD\",\"F_INDICATORGROUPSET_PUBLIC_ADD\",\"F_DATAVALUE_DELETE\",\"F_EXTERNAL_MAP_LAYER_PRIVATE_ADD\",\"F_RELATIONSHIPTYPE_DELETE\",\"F_CATEGORY_OPTION_PRIVATE_ADD\",\"F_SINGLE_EVENT_DATA_ENTRY\",\"F_CATEGORY_OPTION_GROUP_PUBLIC_ADD\",\"F_GIS_ADMIN\",\"M_dhis-web-event-capture\",\"F_SEND_EMAIL\",\"M_dhis-web-aggregate-data-entry\",\"F_ORGUNITGROUPSET_PRIVATE_ADD\",\"F_INDICATOR_DELETE\",\"M_dhis-web-event-reports\",\"F_VIEW_UNAPPROVED_DATA\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW\",\"F_TRACKED_ENTITY_INSTANCE_CHANGE_LOCATION\",\"F_OPTIONGROUPSET_DELETE\",\"F_USERGROUP_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_PRIVATE_ADD\",\"F_DOCUMENT_EXTERNAL\",\"F_PROGRAM_TRACKING_MANAGEMENT\",\"F_TRACKED_ENTITY_ATTRIBUTE_PUBLIC_ADD\",\"F_GENERATE_PROGRAM_SUMMARY_REPORT\",\"F_PROGRAM_INDICATOR_DELETE\",\"F_MOBILE_SENDSMS\",\"F_TRACKED_ENTITY_ADD\",\"F_TRACKED_ENTITY_MANAGEMENT\",\"F_RELATIONSHIP_DELETE\",\"F_VALIDATIONRULEGROUP_PUBLIC_ADD\",\"F_REPORT_EXTERNAL\",\"F_DOCUMENT_PRIVATE_ADD\",\"M_dhis-web-reports\",\"F_TRACKED_ENTITY_DELETE\",\"F_USERGROUP_DELETE\",\"F_PROGRAM_PRIVATE_ADD\",\"F_CATEGORY_COMBO_PRIVATE_ADD\",\"F_SCHEDULING_SEND_MESSAGE\",\"F_EXTERNAL_MAP_LAYER_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_DELETE\",\"F_ORGANISATIONUNIT_MOVE\",\"M_dhis-web-usage-analytics\",\"F_COLOR_DELETE\",\"F_INDICATORGROUP_DELETE\",\"F_ORGANISATIONUNIT_DELETE\",\"F_PROGRAM_RULE_ADD\",\"M_dhis-web-light\",\"F_OPTIONGROUPSET_PRIVATE_ADD\",\"F_DATA_MART_ADMIN\",\"M_dhis-web-maintenance-mobile\",\"F_DATASET_PUBLIC_ADD\",\"F_CATEGORY_COMBO_DELETE\",\"F_SECTION_DELETE\",\"F_USER_DELETE\",\"F_INDICATORGROUPSET_PRIVATE_ADD\",\"F_PROGRAM_INDICATOR_PRIVATE_ADD\",\"F_METADATA_IMPORT\",\"M_dhis-web-maintenance-appmanager\",\"F_EXPORT_EVENTS\",\"M_dhis-web-maintenance-settings\",\"F_SQLVIEW_PUBLIC_ADD\",\"F_PERFORM_MAINTENANCE\",\"F_COLOR_SET_ADD\",\"F_PROGRAM_STAGE_INSTANCE_DELETE\",\"F_METADATA_EXPORT\",\"F_MINMAX_DATAELEMENT_ADD\",\"F_PROGRAMSTAGE_SECTION_ADD\",\"F_DATAELEMENTGROUP_PRIVATE_ADD\",\"F_VALIDATIONRULE_PRIVATE_ADD\",\"F_APPROVE_DATA\",\"M_dhis-web-mapping\",\"F_DATAELEMENT_PRIVATE_ADD\",\"F_VALIDATIONCRITERIA_ADD\",\"F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS\",\"F_IGNORE_TRACKER_REQUIRED_VALUE_VALIDATION\",\"F_PROGRAM_PUBLIC_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_DELETE\",\"F_USER_ADD_WITHIN_MANAGED_GROUP\",\"M_Web_Portal\",\"F_ORGANISATIONUNIT_ADD\",\"M_dhis-web-user\",\"F_LEGEND_SET_PUBLIC_ADD\",\"F_CONSTANT_ADD\",\"F_PREDICTORGROUP_DELETE\",\"F_TRACKED_ENTITY_COMMENT_ADD\",\"F_TRACKED_ENTITY_INSTANCE_MANAGEMENT\",\"M_dhis-web-visualizer\",\"F_INDICATOR_PUBLIC_ADD\",\"F_INDICATORGROUP_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_PRIVATE_ADD\",\"M_dhis-web-maintenance\",\"M_dhis-web-approval\",\"F_PROGRAM_RULE_MANAGEMENT\",\"F_TEI_CASCADE_DELETE\",\"F_FRED_UPDATE\",\"F_VISUALIZATION_EXTERNAL\",\"M_dhis-web-cache-cleaner\",\"F_EDIT_EXPIRED\",\"F_ACCESS_TRACKED_ENTITY_ATTRIBUTES\",\"F_PROGRAM_DASHBOARD_CONFIG_ADMIN\",\"F_EVENT_VISUALIZATION_EXTERNAL\",\"F_ORGANISATIONUNITLEVEL_UPDATE\",\"F_CATEGORY_OPTION_PUBLIC_ADD\",\"M_dhis-web-datastore\",\"F_CATEGORY_OPTION_DELETE\",\"M_Data_Table\",\"M_dhis-web-menu-management\",\"F_REPORT_PUBLIC_ADD\",\"F_VALIDATIONRULEGROUP_DELETE\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_ADD\",\"F_RELATIONSHIP_MANAGEMENT\",\"F_COLOR_ADD\",\"F_OPTIONSET_PRIVATE_ADD\",\"F_PROGRAM_RULE_DELETE\",\"F_GENERATE_STATISTICAL_PROGRAM_REPORT\",\"F_ORGUNITGROUP_DELETE\",\"F_DATAELEMENTGROUPSET_PRIVATE_ADD\",\"M_dhis-web-tracker-capture\",\"F_LOCALE_ADD\",\"F_LEGEND_ADD\",\"F_CATEGORY_OPTION_GROUP_PRIVATE_ADD\",\"F_PROGRAM_INSTANCE_MANAGEMENT\",\"M_dhis-web-reporting\",\"F_CATEGORY_PUBLIC_ADD\",\"F_SECTION_ADD\",\"F_CATEGORY_COMBO_PUBLIC_ADD\",\"M_dhis-web-maintenance-datadictionary\",\"F_DATASET_DELETE\",\"F_INDICATORGROUPSET_DELETE\",\"F_USER_DELETE_WITHIN_MANAGED_GROUP\",\"F_ADD_TRACKED_ENTITY_FORM\",\"M_dhis-web-scheduler\",\"F_OPTIONGROUP_PUBLIC_ADD\",\"F_USERROLE_PRIVATE_ADD\",\"M_dhis-web-messaging\",\"M_dhis-web-maintenance-program\",\"F_EXTERNALFILERESOURCE_ADD\",\"F_MAP_EXTERNAL\",\"M_bna_widget\",\"F_DATAELEMENTGROUPSET_PUBLIC_ADD\",\"F_DATAELEMENTGROUP_DELETE\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_ADD\",\"F_RELATIONSHIP_ADD\",\"F_ORGUNITGROUP_PRIVATE_ADD\",\"F_DATAELEMENTGROUP_PUBLIC_ADD\",\"F_USER_GROUPS_READ_ONLY_ADD_MEMBERS\",\"F_LOCALE_DELETE\",\"F_PREDICTOR_RUN\",\"F_DATAELEMENT_DELETE\",\"F_OPTIONGROUP_DELETE\",\"F_LEGEND_SET_PRIVATE_ADD\",\"F_PROGRAMSTAGE_DELETE\",\"F_ATTRIBUTE_PUBLIC_ADD\",\"F_TRACKED_ENTITY_FORM_DELETE\",\"F_USERROLE_DELETE\",\"F_DOCUMENT_DELETE\",\"F_ORGUNITGROUPSET_DELETE\",\"M_dhis-web-translations\",\"M_dhis-web-sms\",\"F_SCHEDULING_CASE_AGGREGATE_QUERY_BUILDER\",\"F_PROGRAM_DELETE\",\"F_VALIDATIONRULE_DELETE\",\"F_PROGRAMDATAELEMENT_ADD\",\"M_dhis-web-mobile\",\"F_ACTIVITY_PLAN\",\"F_RELATIONSHIPTYPE_PUBLIC_ADD\",\"F_PREDICTOR_ADD\",\"F_SQLVIEW_PRIVATE_ADD\",\"F_EXPORT_DATA\",\"F_OAUTH2_CLIENT_MANAGE\",\"F_EVENT_VISUALIZATION_PUBLIC_ADD\",\"F_ORGUNITGROUP_PUBLIC_ADD\",\"F_APPROVE_DATA_LOWER_LEVELS\",\"M_Social_Media_Video\",\"F_OPTIONSET_PUBLIC_ADD\",\"F_EVENTCHART_EXTERNAL\",\"M_dhis-web-dataentry\",\"F_PROGRAM_TRACKING_SEARCH\",\"M_dhis-web-maintenance-dataset\",\"F_USERROLE_LIST\",\"M_dhis-web-import-export\",\"M_dhis-web-caseentry\",\"F_USERROLE_PUBLIC_ADD\",\"M_dhis-web-importexport\",\"M_InterpretationsTest\",\"F_ORGUNITGROUPSET_PUBLIC_ADD\",\"F_SQLVIEW_EXTERNAL\",\"F_REPORT_DELETE\",\"F_DASHBOARD_PUBLIC_ADD\",\"F_CONSTANT_DELETE\",\"M_dhis-web-maintenance-user\",\"F_PREDICTOR_DELETE\",\"M_dhis-web-data-visualizer\",\"F_DATASET_PRIVATE_ADD\",\"F_EVENTREPORT_PUBLIC_ADD\",\"F_PROGRAMSTAGE_SECTION_DELETE\",\"F_TRACKED_ENTITY_UPDATE\",\"F_CATEGORY_OPTION_GROUP_SET_PUBLIC_ADD\",\"F_TRACKED_ENTITY_INSTANCE_DASHBOARD\",\"F_METADATA_MANAGE\",\"F_ANALYTICSTABLEHOOK_DELETE\",\"F_UNCOMPLETE_EVENT\",\"M_dhis-web-sms-configuration\",\"M_dhis-web-interpretation\",\"F_LEGEND_DELETE\",\"M_Custom_Js_Css\",\"F_PROGRAM_INDICATOR_MANAGEMENT\",\"F_ANONYMOUS_DATA_ENTRY\",\"F_MAP_PUBLIC_ADD\",\"F_PROGRAM_VALIDATION\",\"F_SCHEDULING_ADMIN\",\"F_TRACKED_ENTITY_COMMENT_DELETE\",\"F_DATAELEMENT_MINMAX_DELETE\",\"F_MOBILE_SETTINGS\",\"F_PREDICTORGROUP_ADD\",\"F_REPORT_PRIVATE_ADD\",\"F_VALIDATIONRULEGROUP_PRIVATE_ADD\",\"F_PUSH_ANALYSIS_DELETE\",\"F_REPLICATE_USER\",\"F_DATAVALUE_ADD\",\"M_dhis-web-maintenance-organisationunit\",\"F_INSERT_CUSTOM_JS_CSS\",\"F_DATAELEMENTGROUPSET_DELETE\",\"F_SQLVIEW_DELETE\",\"F_ENROLLMENT_CASCADE_DELETE\",\"F_PROGRAMDATAELEMENT_DELETE\",\"F_TRACKED_ENTITY_INSTANCE_LIST\",\"F_INDICATORTYPE_ADD\",\"F_LEGEND_SET_DELETE\",\"F_VIEW_EVENT_ANALYTICS\",\"F_PROGRAMSTAGE_SECTION_MANAGEMENT\",\"F_IMPORT_EVENTS\",\"F_PROGRAM_INSTANCE_DELETE\",\"F_INDICATOR_PRIVATE_ADD\",\"F_TRACKED_ENTITY_INSTANCE_HISTORY\",\"F_FRED_CREATE\",\"F_EVENTCHART_PUBLIC_ADD\",\"F_PUSH_ANALYSIS_ADD\",\"M_dhis-web-event-visualizer\",\"F_USER_ADD\",\"F_EXTERNAL_MAP_LAYER_DELETE\",\"F_SYSTEM_SETTING\",\"F_ANALYTICSTABLEHOOK_ADD\",\"F_ATTRIBUTE_PRIVATE_ADD\",\"F_DOCUMENT_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_DELETE\",\"M_Easy_Visualization\",\"F_VISUALIZATION_PUBLIC_ADD\",\"F_DATAELEMENT_MINMAX_ADD\",\"M_dhis-web-data-quality\",\"M_dhis-web-pivot\",\"F_EVENTREPORT_EXTERNAL\",\"F_PROGRAM_RULE_UPDATE\",\"F_DATAELEMENT_PUBLIC_ADD\",\"M_dhis-web-validationrule\",\"F_CONSTANT_MANAGEMENT\",\"F_RUN_VALIDATION\",\"F_MANAGE_TICKETS\",\"F_GENERATE_BENEFICIARY_TABULAR_REPORT\",\"F_OPTIONGROUP_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_DELETE\",\"M_User_Administration\",\"M_dhis-web-settings\",\"F_IMPORT_DATA\",\"F_VIEW_DATABROWSER\",\"F_PERFORM_ANALYTICS_EXPLAIN\",\"F_MOBILE_DELETE_SMS\",\"F_OPTIONSET_MANAGEMENT\",\"F_SEND_MESSAGE\",\"F_PROGRAMSTAGE_ADD\",\"M_dhis-web-maps\",\"F_MINMAX_DATAELEMENT_DELETE\",\"F_ATTRIBUTE_DELETE\",\"F_OPTIONSET_DELETE\",\"F_PROGRAM_TRACKING_LIST\",\"M_dhis-web-dashboard\",\"M_dhis-web-data-administration\",\"F_ACCEPT_DATA_LOWER_LEVELS\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_DELETE\",\"F_OPTIONGROUPSET_PUBLIC_ADD\",\"M_dhis-web-capture\",\"F_PROGRAM_INDICATOR_GROUP_PUBLIC_ADD\",\"F_CATEGORY_DELETE\",\"F_COLOR_SET_DELETE\",\"M_dhis-web-app-management\",\"F_INDICATORTYPE_DELETE\",\"F_NAME_BASED_DATA_ENTRY\",\"F_INDICATORGROUP_PRIVATE_ADD\",\"F_FRED_DELETE\",\"F_VALIDATIONCRITERIA_DELETE\",\"F_PROGRAM_STAGE_INSTANCE_SEARCH\"]}", - "responseSize": 11607, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/dhis-web-commons/menu/getModules.action", - "featureName": null, - "static": true, - "count": 63, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"modules\":[{\"name\":\"dhis-web-dashboard\",\"namespace\":\"/dhis-web-dashboard\",\"defaultAction\":\"../dhis-web-dashboard/index.action\",\"displayName\":\"Dashboard\",\"icon\":\"../icons/dhis-web-dashboard.png\",\"description\":\"\"},{\"name\":\"dhis-web-maps\",\"namespace\":\"/dhis-web-maps\",\"defaultAction\":\"../dhis-web-maps/index.action\",\"displayName\":\"Maps\",\"icon\":\"../icons/dhis-web-maps.png\",\"description\":\"\"},{\"name\":\"dhis-web-data-visualizer\",\"namespace\":\"/dhis-web-data-visualizer\",\"defaultAction\":\"../dhis-web-data-visualizer/index.action\",\"displayName\":\"Data Visualizer\",\"icon\":\"../icons/dhis-web-data-visualizer.png\",\"description\":\"\"},{\"name\":\"dhis-web-event-visualizer\",\"namespace\":\"/dhis-web-event-visualizer\",\"defaultAction\":\"../dhis-web-event-visualizer/index.action\",\"displayName\":\"Event Visualizer\",\"icon\":\"../icons/dhis-web-event-visualizer.png\",\"description\":\"\"},{\"name\":\"dhis-web-event-reports\",\"namespace\":\"/dhis-web-event-reports\",\"defaultAction\":\"../dhis-web-event-reports/index.action\",\"displayName\":\"Event Reports\",\"icon\":\"../icons/dhis-web-event-reports.png\",\"description\":\"\"},{\"name\":\"dhis-web-dataentry\",\"namespace\":\"/dhis-web-dataentry\",\"defaultAction\":\"../dhis-web-dataentry/index.action\",\"displayName\":\"Data Entry\",\"icon\":\"../icons/dhis-web-dataentry.png\",\"description\":\"\"},{\"name\":\"dhis-web-tracker-capture\",\"namespace\":\"/dhis-web-tracker-capture\",\"defaultAction\":\"../dhis-web-tracker-capture/index.action\",\"displayName\":\"Tracker Capture\",\"icon\":\"../icons/dhis-web-tracker-capture.png\",\"description\":\"\"},{\"name\":\"dhis-web-maintenance\",\"namespace\":\"/dhis-web-maintenance\",\"defaultAction\":\"../dhis-web-maintenance/index.action\",\"displayName\":\"Maintenance\",\"icon\":\"../icons/dhis-web-maintenance.png\",\"description\":\"\"},{\"name\":\"dhis-web-scheduler\",\"namespace\":\"/dhis-web-scheduler\",\"defaultAction\":\"../dhis-web-scheduler/index.action\",\"displayName\":\"Scheduler\",\"icon\":\"../icons/dhis-web-scheduler.png\",\"description\":\"\"},{\"name\":\"dhis-web-settings\",\"namespace\":\"/dhis-web-settings\",\"defaultAction\":\"../dhis-web-settings/index.action\",\"displayName\":\"System Settings\",\"icon\":\"../icons/dhis-web-settings.png\",\"description\":\"\"},{\"name\":\"dhis-web-usage-analytics\",\"namespace\":\"/dhis-web-usage-analytics\",\"defaultAction\":\"../dhis-web-usage-analytics/index.action\",\"displayName\":\"Usage Analytics\",\"icon\":\"../icons/dhis-web-usage-analytics.png\",\"description\":\"\"},{\"name\":\"dhis-web-interpretation\",\"namespace\":\"/dhis-web-interpretation\",\"defaultAction\":\"../dhis-web-interpretation/index.action\",\"displayName\":\"Interpretations\",\"icon\":\"../icons/dhis-web-interpretation.png\",\"description\":\"\"},{\"name\":\"dhis-web-datastore\",\"namespace\":\"/dhis-web-datastore\",\"defaultAction\":\"../dhis-web-datastore/index.action\",\"displayName\":\"Datastore Management\",\"icon\":\"../icons/dhis-web-datastore.png\",\"description\":\"\"},{\"name\":\"dhis-web-app-management\",\"namespace\":\"/dhis-web-app-management\",\"defaultAction\":\"../dhis-web-app-management/index.action\",\"displayName\":\"App Management\",\"icon\":\"../icons/dhis-web-app-management.png\",\"description\":\"\"},{\"name\":\"dhis-web-cache-cleaner\",\"namespace\":\"/dhis-web-cache-cleaner\",\"defaultAction\":\"../dhis-web-cache-cleaner/index.action\",\"displayName\":\"Browser Cache Cleaner\",\"icon\":\"../icons/dhis-web-cache-cleaner.png\",\"description\":\"\"},{\"name\":\"dhis-web-translations\",\"namespace\":\"/dhis-web-translations\",\"defaultAction\":\"../dhis-web-translations/index.action\",\"displayName\":\"Translations\",\"icon\":\"../icons/dhis-web-translations.png\",\"description\":\"\"},{\"name\":\"dhis-web-capture\",\"namespace\":\"/dhis-web-capture\",\"defaultAction\":\"../dhis-web-capture/index.action\",\"displayName\":\"Capture\",\"icon\":\"../icons/dhis-web-capture.png\",\"description\":\"\"},{\"name\":\"dhis-web-data-administration\",\"namespace\":\"/dhis-web-data-administration\",\"defaultAction\":\"../dhis-web-data-administration/index.action\",\"displayName\":\"Data Administration\",\"icon\":\"../icons/dhis-web-data-administration.png\",\"description\":\"\"},{\"name\":\"dhis-web-data-quality\",\"namespace\":\"/dhis-web-data-quality\",\"defaultAction\":\"../dhis-web-data-quality/index.action\",\"displayName\":\"Data Quality\",\"icon\":\"../icons/dhis-web-data-quality.png\",\"description\":\"\"},{\"name\":\"dhis-web-user\",\"namespace\":\"/dhis-web-user\",\"defaultAction\":\"../dhis-web-user/index.action\",\"displayName\":\"Users\",\"icon\":\"../icons/dhis-web-user.png\",\"description\":\"\"},{\"name\":\"dhis-web-aggregate-data-entry\",\"namespace\":\"/dhis-web-aggregate-data-entry\",\"defaultAction\":\"../dhis-web-aggregate-data-entry/index.action\",\"displayName\":\"Data Entry (Beta)\",\"icon\":\"../icons/dhis-web-aggregate-data-entry.png\",\"description\":\"\"},{\"name\":\"dhis-web-approval\",\"namespace\":\"/dhis-web-approval\",\"defaultAction\":\"../dhis-web-approval/index.action\",\"displayName\":\"Data Approval\",\"icon\":\"../icons/dhis-web-approval.png\",\"description\":\"\"},{\"name\":\"dhis-web-import-export\",\"namespace\":\"/dhis-web-import-export\",\"defaultAction\":\"../dhis-web-import-export/index.action\",\"displayName\":\"Import/Export\",\"icon\":\"../icons/dhis-web-import-export.png\",\"description\":\"\"},{\"name\":\"dhis-web-menu-management\",\"namespace\":\"/dhis-web-menu-management\",\"defaultAction\":\"../dhis-web-menu-management/index.action\",\"displayName\":\"Menu Management\",\"icon\":\"../icons/dhis-web-menu-management.png\",\"description\":\"\"},{\"name\":\"dhis-web-reports\",\"namespace\":\"/dhis-web-reports\",\"defaultAction\":\"../dhis-web-reports/index.action\",\"displayName\":\"Reports\",\"icon\":\"../icons/dhis-web-reports.png\",\"description\":\"\"},{\"name\":\"dhis-web-sms-configuration\",\"namespace\":\"/dhis-web-sms-configuration\",\"defaultAction\":\"../dhis-web-sms-configuration/index.action\",\"displayName\":\"SMS Configuration\",\"icon\":\"../icons/dhis-web-sms-configuration.png\",\"description\":\"\"}]}", - "responseSize": 5640, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, no-store, max-age=0, must-revalidate", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/me", - "featureName": null, - "static": true, - "count": 62, - "nonDeterministic": true, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": [ - "{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"surname\":\"Traore\",\"firstName\":\"John\",\"employer\":\"DHIS\",\"languages\":\"English\",\"gender\":\"gender_male\",\"jobTitle\":\"Super user\",\"created\":\"2013-04-18T17:15:08.407\",\"lastUpdated\":\"2023-03-01T08:42:42.295\",\"dataViewOrganisationUnits\":[],\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userGroupAccesses\":[],\"userAccesses\":[],\"userGroups\":[{\"id\":\"Kk12LkEWtXp\"},{\"id\":\"M1Qre0247G3\"},{\"id\":\"NTC8GjJ7p8P\"},{\"id\":\"B6JNeAQ6akX\"},{\"id\":\"wl5cDMuUhmF\"},{\"id\":\"QYrzIjSfI8z\"},{\"id\":\"lFHP5lLkzVr\"},{\"id\":\"jvrEwEJ2yZn\"},{\"id\":\"vAvEltyXGbD\"},{\"id\":\"w900PX10L7O\"},{\"id\":\"GogLpGmkL0g\"},{\"id\":\"vRoAruMnNpB\"},{\"id\":\"z1gNAf2zUxZ\"},{\"id\":\"gXpmQO6eEOo\"},{\"id\":\"tH0GcNZZ1vW\"},{\"id\":\"H9XnHoWRKCg\"}],\"translations\":[],\"teiSearchOrganisationUnits\":[],\"organisationUnits\":[{\"id\":\"ImspTQPwCqd\"}],\"externalAccess\":false,\"displayName\":\"John Traore\",\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"name\":\"John Traore\",\"email\":\"dummy@dhis2.org\",\"introduction\":\"I am the super user of DHIS 2\",\"birthday\":\"1971-04-08T00:00:00.000\",\"nationality\":\"Sierra Leone\",\"education\":\"Master of super using\",\"interests\":\"Football, swimming, singing, dancing\",\"whatsApp\":\"+123123123123\",\"facebookMessenger\":\"john.traore\",\"skype\":\"john.traore\",\"telegram\":\"john.traore\",\"twitter\":\"john.traore\",\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}],\"settings\":{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false},\"programs\":[\"uy2gU8kT1jF\",\"ur1Edk5Oe2n\",\"MoUd5BTQ3lY\",\"lxAQ7Zs9VYR\",\"IpHINAT79UW\",\"kla3mAPgvCH\",\"qDkgAbB5Jlk\",\"VBqh0ynB2wv\",\"bMcwwoVnbSR\",\"q04UBOqq3rp\",\"eBAyeGv0exc\",\"M3xtLkYBlKI\",\"fDd25txQckK\",\"WSGAb5XwJ3Y\"],\"authorities\":[\"F_PROGRAM_INDICATOR_PUBLIC_ADD\",\"F_SQLVIEW_EXECUTE\",\"F_USER_VIEW\",\"F_GENERATE_MIN_MAX_VALUES\",\"F_VALIDATIONRULE_PUBLIC_ADD\",\"F_CATEGORY_PRIVATE_ADD\",\"F_INDICATORGROUPSET_PUBLIC_ADD\",\"F_DATAVALUE_DELETE\",\"F_EXTERNAL_MAP_LAYER_PRIVATE_ADD\",\"F_RELATIONSHIPTYPE_DELETE\",\"F_CATEGORY_OPTION_PRIVATE_ADD\",\"F_SINGLE_EVENT_DATA_ENTRY\",\"F_CATEGORY_OPTION_GROUP_PUBLIC_ADD\",\"F_GIS_ADMIN\",\"M_dhis-web-event-capture\",\"F_SEND_EMAIL\",\"M_dhis-web-aggregate-data-entry\",\"F_ORGUNITGROUPSET_PRIVATE_ADD\",\"F_INDICATOR_DELETE\",\"M_dhis-web-event-reports\",\"F_VIEW_UNAPPROVED_DATA\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW\",\"F_TRACKED_ENTITY_INSTANCE_CHANGE_LOCATION\",\"F_OPTIONGROUPSET_DELETE\",\"F_USERGROUP_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_PRIVATE_ADD\",\"F_DOCUMENT_EXTERNAL\",\"F_PROGRAM_TRACKING_MANAGEMENT\",\"F_TRACKED_ENTITY_ATTRIBUTE_PUBLIC_ADD\",\"F_GENERATE_PROGRAM_SUMMARY_REPORT\",\"F_PROGRAM_INDICATOR_DELETE\",\"F_MOBILE_SENDSMS\",\"F_TRACKED_ENTITY_ADD\",\"F_TRACKED_ENTITY_MANAGEMENT\",\"F_RELATIONSHIP_DELETE\",\"F_VALIDATIONRULEGROUP_PUBLIC_ADD\",\"F_REPORT_EXTERNAL\",\"F_DOCUMENT_PRIVATE_ADD\",\"M_dhis-web-reports\",\"F_TRACKED_ENTITY_DELETE\",\"F_USERGROUP_DELETE\",\"F_PROGRAM_PRIVATE_ADD\",\"F_CATEGORY_COMBO_PRIVATE_ADD\",\"F_SCHEDULING_SEND_MESSAGE\",\"F_EXTERNAL_MAP_LAYER_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_DELETE\",\"F_ORGANISATIONUNIT_MOVE\",\"M_dhis-web-usage-analytics\",\"F_COLOR_DELETE\",\"F_INDICATORGROUP_DELETE\",\"F_ORGANISATIONUNIT_DELETE\",\"F_PROGRAM_RULE_ADD\",\"M_dhis-web-light\",\"F_OPTIONGROUPSET_PRIVATE_ADD\",\"F_DATA_MART_ADMIN\",\"M_dhis-web-maintenance-mobile\",\"F_DATASET_PUBLIC_ADD\",\"F_CATEGORY_COMBO_DELETE\",\"F_SECTION_DELETE\",\"F_USER_DELETE\",\"F_INDICATORGROUPSET_PRIVATE_ADD\",\"F_PROGRAM_INDICATOR_PRIVATE_ADD\",\"F_METADATA_IMPORT\",\"M_dhis-web-maintenance-appmanager\",\"F_EXPORT_EVENTS\",\"M_dhis-web-maintenance-settings\",\"F_SQLVIEW_PUBLIC_ADD\",\"F_PERFORM_MAINTENANCE\",\"F_COLOR_SET_ADD\",\"F_PROGRAM_STAGE_INSTANCE_DELETE\",\"F_METADATA_EXPORT\",\"F_MINMAX_DATAELEMENT_ADD\",\"F_PROGRAMSTAGE_SECTION_ADD\",\"F_DATAELEMENTGROUP_PRIVATE_ADD\",\"F_VALIDATIONRULE_PRIVATE_ADD\",\"F_APPROVE_DATA\",\"M_dhis-web-mapping\",\"F_DATAELEMENT_PRIVATE_ADD\",\"F_VALIDATIONCRITERIA_ADD\",\"F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS\",\"F_IGNORE_TRACKER_REQUIRED_VALUE_VALIDATION\",\"F_PROGRAM_PUBLIC_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_DELETE\",\"F_USER_ADD_WITHIN_MANAGED_GROUP\",\"M_Web_Portal\",\"F_ORGANISATIONUNIT_ADD\",\"M_dhis-web-user\",\"F_LEGEND_SET_PUBLIC_ADD\",\"F_CONSTANT_ADD\",\"F_PREDICTORGROUP_DELETE\",\"F_TRACKED_ENTITY_COMMENT_ADD\",\"F_TRACKED_ENTITY_INSTANCE_MANAGEMENT\",\"M_dhis-web-visualizer\",\"F_INDICATOR_PUBLIC_ADD\",\"F_INDICATORGROUP_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_PRIVATE_ADD\",\"M_dhis-web-maintenance\",\"M_dhis-web-approval\",\"F_PROGRAM_RULE_MANAGEMENT\",\"F_TEI_CASCADE_DELETE\",\"F_FRED_UPDATE\",\"F_VISUALIZATION_EXTERNAL\",\"M_dhis-web-cache-cleaner\",\"F_EDIT_EXPIRED\",\"F_ACCESS_TRACKED_ENTITY_ATTRIBUTES\",\"F_PROGRAM_DASHBOARD_CONFIG_ADMIN\",\"F_EVENT_VISUALIZATION_EXTERNAL\",\"F_ORGANISATIONUNITLEVEL_UPDATE\",\"F_CATEGORY_OPTION_PUBLIC_ADD\",\"M_dhis-web-datastore\",\"F_CATEGORY_OPTION_DELETE\",\"M_Data_Table\",\"M_dhis-web-menu-management\",\"F_REPORT_PUBLIC_ADD\",\"F_VALIDATIONRULEGROUP_DELETE\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_ADD\",\"F_RELATIONSHIP_MANAGEMENT\",\"F_COLOR_ADD\",\"F_OPTIONSET_PRIVATE_ADD\",\"F_PROGRAM_RULE_DELETE\",\"F_GENERATE_STATISTICAL_PROGRAM_REPORT\",\"F_ORGUNITGROUP_DELETE\",\"F_DATAELEMENTGROUPSET_PRIVATE_ADD\",\"M_dhis-web-tracker-capture\",\"F_LOCALE_ADD\",\"F_LEGEND_ADD\",\"F_CATEGORY_OPTION_GROUP_PRIVATE_ADD\",\"F_PROGRAM_INSTANCE_MANAGEMENT\",\"M_dhis-web-reporting\",\"F_CATEGORY_PUBLIC_ADD\",\"F_SECTION_ADD\",\"F_CATEGORY_COMBO_PUBLIC_ADD\",\"M_dhis-web-maintenance-datadictionary\",\"F_DATASET_DELETE\",\"F_INDICATORGROUPSET_DELETE\",\"F_USER_DELETE_WITHIN_MANAGED_GROUP\",\"F_ADD_TRACKED_ENTITY_FORM\",\"M_dhis-web-scheduler\",\"F_OPTIONGROUP_PUBLIC_ADD\",\"F_USERROLE_PRIVATE_ADD\",\"M_dhis-web-messaging\",\"M_dhis-web-maintenance-program\",\"F_EXTERNALFILERESOURCE_ADD\",\"F_MAP_EXTERNAL\",\"M_bna_widget\",\"F_DATAELEMENTGROUPSET_PUBLIC_ADD\",\"F_DATAELEMENTGROUP_DELETE\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_ADD\",\"F_RELATIONSHIP_ADD\",\"F_ORGUNITGROUP_PRIVATE_ADD\",\"F_DATAELEMENTGROUP_PUBLIC_ADD\",\"F_USER_GROUPS_READ_ONLY_ADD_MEMBERS\",\"F_LOCALE_DELETE\",\"F_PREDICTOR_RUN\",\"F_DATAELEMENT_DELETE\",\"F_OPTIONGROUP_DELETE\",\"F_LEGEND_SET_PRIVATE_ADD\",\"F_PROGRAMSTAGE_DELETE\",\"F_ATTRIBUTE_PUBLIC_ADD\",\"F_TRACKED_ENTITY_FORM_DELETE\",\"F_USERROLE_DELETE\",\"F_DOCUMENT_DELETE\",\"F_ORGUNITGROUPSET_DELETE\",\"M_dhis-web-translations\",\"M_dhis-web-sms\",\"F_SCHEDULING_CASE_AGGREGATE_QUERY_BUILDER\",\"F_PROGRAM_DELETE\",\"F_VALIDATIONRULE_DELETE\",\"F_PROGRAMDATAELEMENT_ADD\",\"M_dhis-web-mobile\",\"F_ACTIVITY_PLAN\",\"F_RELATIONSHIPTYPE_PUBLIC_ADD\",\"F_PREDICTOR_ADD\",\"F_SQLVIEW_PRIVATE_ADD\",\"F_EXPORT_DATA\",\"F_OAUTH2_CLIENT_MANAGE\",\"F_EVENT_VISUALIZATION_PUBLIC_ADD\",\"F_ORGUNITGROUP_PUBLIC_ADD\",\"F_APPROVE_DATA_LOWER_LEVELS\",\"M_Social_Media_Video\",\"F_OPTIONSET_PUBLIC_ADD\",\"F_EVENTCHART_EXTERNAL\",\"M_dhis-web-dataentry\",\"F_PROGRAM_TRACKING_SEARCH\",\"M_dhis-web-maintenance-dataset\",\"F_USERROLE_LIST\",\"M_dhis-web-import-export\",\"M_dhis-web-caseentry\",\"F_USERROLE_PUBLIC_ADD\",\"M_dhis-web-importexport\",\"M_InterpretationsTest\",\"F_ORGUNITGROUPSET_PUBLIC_ADD\",\"F_SQLVIEW_EXTERNAL\",\"F_REPORT_DELETE\",\"F_DASHBOARD_PUBLIC_ADD\",\"F_CONSTANT_DELETE\",\"M_dhis-web-maintenance-user\",\"F_PREDICTOR_DELETE\",\"M_dhis-web-data-visualizer\",\"F_DATASET_PRIVATE_ADD\",\"F_EVENTREPORT_PUBLIC_ADD\",\"F_PROGRAMSTAGE_SECTION_DELETE\",\"F_TRACKED_ENTITY_UPDATE\",\"F_CATEGORY_OPTION_GROUP_SET_PUBLIC_ADD\",\"F_TRACKED_ENTITY_INSTANCE_DASHBOARD\",\"F_METADATA_MANAGE\",\"F_ANALYTICSTABLEHOOK_DELETE\",\"F_UNCOMPLETE_EVENT\",\"M_dhis-web-sms-configuration\",\"M_dhis-web-interpretation\",\"F_LEGEND_DELETE\",\"M_Custom_Js_Css\",\"F_PROGRAM_INDICATOR_MANAGEMENT\",\"F_ANONYMOUS_DATA_ENTRY\",\"F_MAP_PUBLIC_ADD\",\"F_PROGRAM_VALIDATION\",\"F_SCHEDULING_ADMIN\",\"F_TRACKED_ENTITY_COMMENT_DELETE\",\"F_DATAELEMENT_MINMAX_DELETE\",\"F_MOBILE_SETTINGS\",\"F_PREDICTORGROUP_ADD\",\"F_REPORT_PRIVATE_ADD\",\"F_VALIDATIONRULEGROUP_PRIVATE_ADD\",\"F_PUSH_ANALYSIS_DELETE\",\"F_REPLICATE_USER\",\"F_DATAVALUE_ADD\",\"M_dhis-web-maintenance-organisationunit\",\"F_INSERT_CUSTOM_JS_CSS\",\"F_DATAELEMENTGROUPSET_DELETE\",\"F_SQLVIEW_DELETE\",\"F_ENROLLMENT_CASCADE_DELETE\",\"F_PROGRAMDATAELEMENT_DELETE\",\"F_TRACKED_ENTITY_INSTANCE_LIST\",\"F_INDICATORTYPE_ADD\",\"F_LEGEND_SET_DELETE\",\"F_VIEW_EVENT_ANALYTICS\",\"F_PROGRAMSTAGE_SECTION_MANAGEMENT\",\"F_IMPORT_EVENTS\",\"F_PROGRAM_INSTANCE_DELETE\",\"F_INDICATOR_PRIVATE_ADD\",\"F_TRACKED_ENTITY_INSTANCE_HISTORY\",\"F_FRED_CREATE\",\"F_EVENTCHART_PUBLIC_ADD\",\"F_PUSH_ANALYSIS_ADD\",\"M_dhis-web-event-visualizer\",\"F_USER_ADD\",\"F_EXTERNAL_MAP_LAYER_DELETE\",\"F_SYSTEM_SETTING\",\"F_ANALYTICSTABLEHOOK_ADD\",\"F_ATTRIBUTE_PRIVATE_ADD\",\"F_DOCUMENT_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_DELETE\",\"M_Easy_Visualization\",\"F_VISUALIZATION_PUBLIC_ADD\",\"F_DATAELEMENT_MINMAX_ADD\",\"M_dhis-web-data-quality\",\"M_dhis-web-pivot\",\"F_EVENTREPORT_EXTERNAL\",\"F_PROGRAM_RULE_UPDATE\",\"F_DATAELEMENT_PUBLIC_ADD\",\"M_dhis-web-validationrule\",\"F_CONSTANT_MANAGEMENT\",\"F_RUN_VALIDATION\",\"F_MANAGE_TICKETS\",\"F_GENERATE_BENEFICIARY_TABULAR_REPORT\",\"F_OPTIONGROUP_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_DELETE\",\"M_User_Administration\",\"M_dhis-web-settings\",\"F_IMPORT_DATA\",\"F_VIEW_DATABROWSER\",\"F_PERFORM_ANALYTICS_EXPLAIN\",\"F_MOBILE_DELETE_SMS\",\"F_OPTIONSET_MANAGEMENT\",\"F_SEND_MESSAGE\",\"F_PROGRAMSTAGE_ADD\",\"M_dhis-web-maps\",\"F_MINMAX_DATAELEMENT_DELETE\",\"F_ATTRIBUTE_DELETE\",\"F_OPTIONSET_DELETE\",\"F_PROGRAM_TRACKING_LIST\",\"M_dhis-web-dashboard\",\"M_dhis-web-data-administration\",\"F_ACCEPT_DATA_LOWER_LEVELS\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_DELETE\",\"F_OPTIONGROUPSET_PUBLIC_ADD\",\"M_dhis-web-capture\",\"F_PROGRAM_INDICATOR_GROUP_PUBLIC_ADD\",\"F_CATEGORY_DELETE\",\"F_COLOR_SET_DELETE\",\"M_dhis-web-app-management\",\"F_INDICATORTYPE_DELETE\",\"F_NAME_BASED_DATA_ENTRY\",\"F_INDICATORGROUP_PRIVATE_ADD\",\"F_FRED_DELETE\",\"F_VALIDATIONCRITERIA_DELETE\",\"F_PROGRAM_STAGE_INSTANCE_SEARCH\"],\"dataSets\":[\"Nyh6laLdBEJ\",\"j38YW1Am7he\",\"aLpVgfXiz0f\",\"YFTk3VdO9av\",\"Rl58JxmKJo2\",\"eZDhcZi6FLP\",\"N4fIX1HL3TQ\",\"EDzMBk0RRji\",\"TuL8IOPzpHh\",\"ce7DSxx5H2I\",\"EKWVBc5C0ms\",\"PLq9sJluXvc\",\"rsyjyJmYD4J\",\"ULowA8V3ucd\",\"QX4ZTUbOt3a\",\"pBOMPrpg1QX\",\"OsPTWNqq26W\",\"V8MHeZHIrcP\",\"YZhd4nu3mzY\",\"Y8gAn9DfAGU\",\"vc6nF5yZsPR\",\"Lpw6GcnTrmS\",\"lyLU2wR22tC\",\"VTdjfLXXmoi\",\"SF8FDSqw30D\",\"BfMAe6Itzgt\"],\"userCredentials\":{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"externalAuth\":false,\"twoFA\":false,\"passwordLastUpdated\":\"2014-12-18T20:56:05.264\",\"cogsDimensionConstraints\":[],\"catDimensionConstraints\":[],\"previousPasswords\":[],\"lastLogin\":\"2023-03-01T08:42:42.294\",\"selfRegistered\":false,\"invitation\":false,\"disabled\":false,\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}]}}", - "{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"surname\":\"Traore\",\"firstName\":\"John\",\"employer\":\"DHIS\",\"languages\":\"English\",\"gender\":\"gender_male\",\"jobTitle\":\"Super user\",\"created\":\"2013-04-18T17:15:08.407\",\"lastUpdated\":\"2023-03-01T08:42:58.094\",\"dataViewOrganisationUnits\":[],\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userGroupAccesses\":[],\"userAccesses\":[],\"userGroups\":[{\"id\":\"Kk12LkEWtXp\"},{\"id\":\"M1Qre0247G3\"},{\"id\":\"NTC8GjJ7p8P\"},{\"id\":\"B6JNeAQ6akX\"},{\"id\":\"wl5cDMuUhmF\"},{\"id\":\"QYrzIjSfI8z\"},{\"id\":\"lFHP5lLkzVr\"},{\"id\":\"jvrEwEJ2yZn\"},{\"id\":\"vAvEltyXGbD\"},{\"id\":\"w900PX10L7O\"},{\"id\":\"GogLpGmkL0g\"},{\"id\":\"vRoAruMnNpB\"},{\"id\":\"z1gNAf2zUxZ\"},{\"id\":\"gXpmQO6eEOo\"},{\"id\":\"tH0GcNZZ1vW\"},{\"id\":\"H9XnHoWRKCg\"}],\"translations\":[],\"teiSearchOrganisationUnits\":[],\"organisationUnits\":[{\"id\":\"ImspTQPwCqd\"}],\"externalAccess\":false,\"displayName\":\"John Traore\",\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"name\":\"John Traore\",\"email\":\"dummy@dhis2.org\",\"introduction\":\"I am the super user of DHIS 2\",\"birthday\":\"1971-04-08T00:00:00.000\",\"nationality\":\"Sierra Leone\",\"education\":\"Master of super using\",\"interests\":\"Football, swimming, singing, dancing\",\"whatsApp\":\"+123123123123\",\"facebookMessenger\":\"john.traore\",\"skype\":\"john.traore\",\"telegram\":\"john.traore\",\"twitter\":\"john.traore\",\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}],\"settings\":{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false},\"programs\":[\"uy2gU8kT1jF\",\"ur1Edk5Oe2n\",\"MoUd5BTQ3lY\",\"lxAQ7Zs9VYR\",\"IpHINAT79UW\",\"kla3mAPgvCH\",\"qDkgAbB5Jlk\",\"VBqh0ynB2wv\",\"bMcwwoVnbSR\",\"q04UBOqq3rp\",\"eBAyeGv0exc\",\"M3xtLkYBlKI\",\"fDd25txQckK\",\"WSGAb5XwJ3Y\"],\"authorities\":[\"F_PROGRAM_INDICATOR_PUBLIC_ADD\",\"F_SQLVIEW_EXECUTE\",\"F_USER_VIEW\",\"F_GENERATE_MIN_MAX_VALUES\",\"F_VALIDATIONRULE_PUBLIC_ADD\",\"F_CATEGORY_PRIVATE_ADD\",\"F_INDICATORGROUPSET_PUBLIC_ADD\",\"F_DATAVALUE_DELETE\",\"F_EXTERNAL_MAP_LAYER_PRIVATE_ADD\",\"F_RELATIONSHIPTYPE_DELETE\",\"F_CATEGORY_OPTION_PRIVATE_ADD\",\"F_SINGLE_EVENT_DATA_ENTRY\",\"F_CATEGORY_OPTION_GROUP_PUBLIC_ADD\",\"F_GIS_ADMIN\",\"M_dhis-web-event-capture\",\"F_SEND_EMAIL\",\"M_dhis-web-aggregate-data-entry\",\"F_ORGUNITGROUPSET_PRIVATE_ADD\",\"F_INDICATOR_DELETE\",\"M_dhis-web-event-reports\",\"F_VIEW_UNAPPROVED_DATA\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW\",\"F_TRACKED_ENTITY_INSTANCE_CHANGE_LOCATION\",\"F_OPTIONGROUPSET_DELETE\",\"F_USERGROUP_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_PRIVATE_ADD\",\"F_DOCUMENT_EXTERNAL\",\"F_PROGRAM_TRACKING_MANAGEMENT\",\"F_TRACKED_ENTITY_ATTRIBUTE_PUBLIC_ADD\",\"F_GENERATE_PROGRAM_SUMMARY_REPORT\",\"F_PROGRAM_INDICATOR_DELETE\",\"F_MOBILE_SENDSMS\",\"F_TRACKED_ENTITY_ADD\",\"F_TRACKED_ENTITY_MANAGEMENT\",\"F_RELATIONSHIP_DELETE\",\"F_VALIDATIONRULEGROUP_PUBLIC_ADD\",\"F_REPORT_EXTERNAL\",\"F_DOCUMENT_PRIVATE_ADD\",\"M_dhis-web-reports\",\"F_TRACKED_ENTITY_DELETE\",\"F_USERGROUP_DELETE\",\"F_PROGRAM_PRIVATE_ADD\",\"F_CATEGORY_COMBO_PRIVATE_ADD\",\"F_SCHEDULING_SEND_MESSAGE\",\"F_EXTERNAL_MAP_LAYER_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_DELETE\",\"F_ORGANISATIONUNIT_MOVE\",\"M_dhis-web-usage-analytics\",\"F_COLOR_DELETE\",\"F_INDICATORGROUP_DELETE\",\"F_ORGANISATIONUNIT_DELETE\",\"F_PROGRAM_RULE_ADD\",\"M_dhis-web-light\",\"F_OPTIONGROUPSET_PRIVATE_ADD\",\"F_DATA_MART_ADMIN\",\"M_dhis-web-maintenance-mobile\",\"F_DATASET_PUBLIC_ADD\",\"F_CATEGORY_COMBO_DELETE\",\"F_SECTION_DELETE\",\"F_USER_DELETE\",\"F_INDICATORGROUPSET_PRIVATE_ADD\",\"F_PROGRAM_INDICATOR_PRIVATE_ADD\",\"F_METADATA_IMPORT\",\"M_dhis-web-maintenance-appmanager\",\"F_EXPORT_EVENTS\",\"M_dhis-web-maintenance-settings\",\"F_SQLVIEW_PUBLIC_ADD\",\"F_PERFORM_MAINTENANCE\",\"F_COLOR_SET_ADD\",\"F_PROGRAM_STAGE_INSTANCE_DELETE\",\"F_METADATA_EXPORT\",\"F_MINMAX_DATAELEMENT_ADD\",\"F_PROGRAMSTAGE_SECTION_ADD\",\"F_DATAELEMENTGROUP_PRIVATE_ADD\",\"F_VALIDATIONRULE_PRIVATE_ADD\",\"F_APPROVE_DATA\",\"M_dhis-web-mapping\",\"F_DATAELEMENT_PRIVATE_ADD\",\"F_VALIDATIONCRITERIA_ADD\",\"F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS\",\"F_IGNORE_TRACKER_REQUIRED_VALUE_VALIDATION\",\"F_PROGRAM_PUBLIC_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_DELETE\",\"F_USER_ADD_WITHIN_MANAGED_GROUP\",\"M_Web_Portal\",\"F_ORGANISATIONUNIT_ADD\",\"M_dhis-web-user\",\"F_LEGEND_SET_PUBLIC_ADD\",\"F_CONSTANT_ADD\",\"F_PREDICTORGROUP_DELETE\",\"F_TRACKED_ENTITY_COMMENT_ADD\",\"F_TRACKED_ENTITY_INSTANCE_MANAGEMENT\",\"M_dhis-web-visualizer\",\"F_INDICATOR_PUBLIC_ADD\",\"F_INDICATORGROUP_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_PRIVATE_ADD\",\"M_dhis-web-maintenance\",\"M_dhis-web-approval\",\"F_PROGRAM_RULE_MANAGEMENT\",\"F_TEI_CASCADE_DELETE\",\"F_FRED_UPDATE\",\"F_VISUALIZATION_EXTERNAL\",\"M_dhis-web-cache-cleaner\",\"F_EDIT_EXPIRED\",\"F_ACCESS_TRACKED_ENTITY_ATTRIBUTES\",\"F_PROGRAM_DASHBOARD_CONFIG_ADMIN\",\"F_EVENT_VISUALIZATION_EXTERNAL\",\"F_ORGANISATIONUNITLEVEL_UPDATE\",\"F_CATEGORY_OPTION_PUBLIC_ADD\",\"M_dhis-web-datastore\",\"F_CATEGORY_OPTION_DELETE\",\"M_Data_Table\",\"M_dhis-web-menu-management\",\"F_REPORT_PUBLIC_ADD\",\"F_VALIDATIONRULEGROUP_DELETE\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_ADD\",\"F_RELATIONSHIP_MANAGEMENT\",\"F_COLOR_ADD\",\"F_OPTIONSET_PRIVATE_ADD\",\"F_PROGRAM_RULE_DELETE\",\"F_GENERATE_STATISTICAL_PROGRAM_REPORT\",\"F_ORGUNITGROUP_DELETE\",\"F_DATAELEMENTGROUPSET_PRIVATE_ADD\",\"M_dhis-web-tracker-capture\",\"F_LOCALE_ADD\",\"F_LEGEND_ADD\",\"F_CATEGORY_OPTION_GROUP_PRIVATE_ADD\",\"F_PROGRAM_INSTANCE_MANAGEMENT\",\"M_dhis-web-reporting\",\"F_CATEGORY_PUBLIC_ADD\",\"F_SECTION_ADD\",\"F_CATEGORY_COMBO_PUBLIC_ADD\",\"M_dhis-web-maintenance-datadictionary\",\"F_DATASET_DELETE\",\"F_INDICATORGROUPSET_DELETE\",\"F_USER_DELETE_WITHIN_MANAGED_GROUP\",\"F_ADD_TRACKED_ENTITY_FORM\",\"M_dhis-web-scheduler\",\"F_OPTIONGROUP_PUBLIC_ADD\",\"F_USERROLE_PRIVATE_ADD\",\"M_dhis-web-messaging\",\"M_dhis-web-maintenance-program\",\"F_EXTERNALFILERESOURCE_ADD\",\"F_MAP_EXTERNAL\",\"M_bna_widget\",\"F_DATAELEMENTGROUPSET_PUBLIC_ADD\",\"F_DATAELEMENTGROUP_DELETE\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_ADD\",\"F_RELATIONSHIP_ADD\",\"F_ORGUNITGROUP_PRIVATE_ADD\",\"F_DATAELEMENTGROUP_PUBLIC_ADD\",\"F_USER_GROUPS_READ_ONLY_ADD_MEMBERS\",\"F_LOCALE_DELETE\",\"F_PREDICTOR_RUN\",\"F_DATAELEMENT_DELETE\",\"F_OPTIONGROUP_DELETE\",\"F_LEGEND_SET_PRIVATE_ADD\",\"F_PROGRAMSTAGE_DELETE\",\"F_ATTRIBUTE_PUBLIC_ADD\",\"F_TRACKED_ENTITY_FORM_DELETE\",\"F_USERROLE_DELETE\",\"F_DOCUMENT_DELETE\",\"F_ORGUNITGROUPSET_DELETE\",\"M_dhis-web-translations\",\"M_dhis-web-sms\",\"F_SCHEDULING_CASE_AGGREGATE_QUERY_BUILDER\",\"F_PROGRAM_DELETE\",\"F_VALIDATIONRULE_DELETE\",\"F_PROGRAMDATAELEMENT_ADD\",\"M_dhis-web-mobile\",\"F_ACTIVITY_PLAN\",\"F_RELATIONSHIPTYPE_PUBLIC_ADD\",\"F_PREDICTOR_ADD\",\"F_SQLVIEW_PRIVATE_ADD\",\"F_EXPORT_DATA\",\"F_OAUTH2_CLIENT_MANAGE\",\"F_EVENT_VISUALIZATION_PUBLIC_ADD\",\"F_ORGUNITGROUP_PUBLIC_ADD\",\"F_APPROVE_DATA_LOWER_LEVELS\",\"M_Social_Media_Video\",\"F_OPTIONSET_PUBLIC_ADD\",\"F_EVENTCHART_EXTERNAL\",\"M_dhis-web-dataentry\",\"F_PROGRAM_TRACKING_SEARCH\",\"M_dhis-web-maintenance-dataset\",\"F_USERROLE_LIST\",\"M_dhis-web-import-export\",\"M_dhis-web-caseentry\",\"F_USERROLE_PUBLIC_ADD\",\"M_dhis-web-importexport\",\"M_InterpretationsTest\",\"F_ORGUNITGROUPSET_PUBLIC_ADD\",\"F_SQLVIEW_EXTERNAL\",\"F_REPORT_DELETE\",\"F_DASHBOARD_PUBLIC_ADD\",\"F_CONSTANT_DELETE\",\"M_dhis-web-maintenance-user\",\"F_PREDICTOR_DELETE\",\"M_dhis-web-data-visualizer\",\"F_DATASET_PRIVATE_ADD\",\"F_EVENTREPORT_PUBLIC_ADD\",\"F_PROGRAMSTAGE_SECTION_DELETE\",\"F_TRACKED_ENTITY_UPDATE\",\"F_CATEGORY_OPTION_GROUP_SET_PUBLIC_ADD\",\"F_TRACKED_ENTITY_INSTANCE_DASHBOARD\",\"F_METADATA_MANAGE\",\"F_ANALYTICSTABLEHOOK_DELETE\",\"F_UNCOMPLETE_EVENT\",\"M_dhis-web-sms-configuration\",\"M_dhis-web-interpretation\",\"F_LEGEND_DELETE\",\"M_Custom_Js_Css\",\"F_PROGRAM_INDICATOR_MANAGEMENT\",\"F_ANONYMOUS_DATA_ENTRY\",\"F_MAP_PUBLIC_ADD\",\"F_PROGRAM_VALIDATION\",\"F_SCHEDULING_ADMIN\",\"F_TRACKED_ENTITY_COMMENT_DELETE\",\"F_DATAELEMENT_MINMAX_DELETE\",\"F_MOBILE_SETTINGS\",\"F_PREDICTORGROUP_ADD\",\"F_REPORT_PRIVATE_ADD\",\"F_VALIDATIONRULEGROUP_PRIVATE_ADD\",\"F_PUSH_ANALYSIS_DELETE\",\"F_REPLICATE_USER\",\"F_DATAVALUE_ADD\",\"M_dhis-web-maintenance-organisationunit\",\"F_INSERT_CUSTOM_JS_CSS\",\"F_DATAELEMENTGROUPSET_DELETE\",\"F_SQLVIEW_DELETE\",\"F_ENROLLMENT_CASCADE_DELETE\",\"F_PROGRAMDATAELEMENT_DELETE\",\"F_TRACKED_ENTITY_INSTANCE_LIST\",\"F_INDICATORTYPE_ADD\",\"F_LEGEND_SET_DELETE\",\"F_VIEW_EVENT_ANALYTICS\",\"F_PROGRAMSTAGE_SECTION_MANAGEMENT\",\"F_IMPORT_EVENTS\",\"F_PROGRAM_INSTANCE_DELETE\",\"F_INDICATOR_PRIVATE_ADD\",\"F_TRACKED_ENTITY_INSTANCE_HISTORY\",\"F_FRED_CREATE\",\"F_EVENTCHART_PUBLIC_ADD\",\"F_PUSH_ANALYSIS_ADD\",\"M_dhis-web-event-visualizer\",\"F_USER_ADD\",\"F_EXTERNAL_MAP_LAYER_DELETE\",\"F_SYSTEM_SETTING\",\"F_ANALYTICSTABLEHOOK_ADD\",\"F_ATTRIBUTE_PRIVATE_ADD\",\"F_DOCUMENT_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_DELETE\",\"M_Easy_Visualization\",\"F_VISUALIZATION_PUBLIC_ADD\",\"F_DATAELEMENT_MINMAX_ADD\",\"M_dhis-web-data-quality\",\"M_dhis-web-pivot\",\"F_EVENTREPORT_EXTERNAL\",\"F_PROGRAM_RULE_UPDATE\",\"F_DATAELEMENT_PUBLIC_ADD\",\"M_dhis-web-validationrule\",\"F_CONSTANT_MANAGEMENT\",\"F_RUN_VALIDATION\",\"F_MANAGE_TICKETS\",\"F_GENERATE_BENEFICIARY_TABULAR_REPORT\",\"F_OPTIONGROUP_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_DELETE\",\"M_User_Administration\",\"M_dhis-web-settings\",\"F_IMPORT_DATA\",\"F_VIEW_DATABROWSER\",\"F_PERFORM_ANALYTICS_EXPLAIN\",\"F_MOBILE_DELETE_SMS\",\"F_OPTIONSET_MANAGEMENT\",\"F_SEND_MESSAGE\",\"F_PROGRAMSTAGE_ADD\",\"M_dhis-web-maps\",\"F_MINMAX_DATAELEMENT_DELETE\",\"F_ATTRIBUTE_DELETE\",\"F_OPTIONSET_DELETE\",\"F_PROGRAM_TRACKING_LIST\",\"M_dhis-web-dashboard\",\"M_dhis-web-data-administration\",\"F_ACCEPT_DATA_LOWER_LEVELS\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_DELETE\",\"F_OPTIONGROUPSET_PUBLIC_ADD\",\"M_dhis-web-capture\",\"F_PROGRAM_INDICATOR_GROUP_PUBLIC_ADD\",\"F_CATEGORY_DELETE\",\"F_COLOR_SET_DELETE\",\"M_dhis-web-app-management\",\"F_INDICATORTYPE_DELETE\",\"F_NAME_BASED_DATA_ENTRY\",\"F_INDICATORGROUP_PRIVATE_ADD\",\"F_FRED_DELETE\",\"F_VALIDATIONCRITERIA_DELETE\",\"F_PROGRAM_STAGE_INSTANCE_SEARCH\"],\"dataSets\":[\"Nyh6laLdBEJ\",\"j38YW1Am7he\",\"aLpVgfXiz0f\",\"YFTk3VdO9av\",\"Rl58JxmKJo2\",\"eZDhcZi6FLP\",\"N4fIX1HL3TQ\",\"EDzMBk0RRji\",\"TuL8IOPzpHh\",\"ce7DSxx5H2I\",\"EKWVBc5C0ms\",\"PLq9sJluXvc\",\"rsyjyJmYD4J\",\"ULowA8V3ucd\",\"QX4ZTUbOt3a\",\"pBOMPrpg1QX\",\"OsPTWNqq26W\",\"V8MHeZHIrcP\",\"YZhd4nu3mzY\",\"Y8gAn9DfAGU\",\"vc6nF5yZsPR\",\"Lpw6GcnTrmS\",\"lyLU2wR22tC\",\"VTdjfLXXmoi\",\"SF8FDSqw30D\",\"BfMAe6Itzgt\"],\"userCredentials\":{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"externalAuth\":false,\"twoFA\":false,\"passwordLastUpdated\":\"2014-12-18T20:56:05.264\",\"cogsDimensionConstraints\":[],\"catDimensionConstraints\":[],\"previousPasswords\":[],\"lastLogin\":\"2023-03-01T08:42:58.092\",\"selfRegistered\":false,\"invitation\":false,\"disabled\":false,\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}]}}", - "{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"surname\":\"Traore\",\"firstName\":\"John\",\"employer\":\"DHIS\",\"languages\":\"English\",\"gender\":\"gender_male\",\"jobTitle\":\"Super user\",\"created\":\"2013-04-18T17:15:08.407\",\"lastUpdated\":\"2023-03-01T08:43:30.474\",\"dataViewOrganisationUnits\":[],\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userGroupAccesses\":[],\"userAccesses\":[],\"userGroups\":[{\"id\":\"Kk12LkEWtXp\"},{\"id\":\"M1Qre0247G3\"},{\"id\":\"NTC8GjJ7p8P\"},{\"id\":\"B6JNeAQ6akX\"},{\"id\":\"wl5cDMuUhmF\"},{\"id\":\"QYrzIjSfI8z\"},{\"id\":\"lFHP5lLkzVr\"},{\"id\":\"jvrEwEJ2yZn\"},{\"id\":\"vAvEltyXGbD\"},{\"id\":\"w900PX10L7O\"},{\"id\":\"GogLpGmkL0g\"},{\"id\":\"vRoAruMnNpB\"},{\"id\":\"z1gNAf2zUxZ\"},{\"id\":\"gXpmQO6eEOo\"},{\"id\":\"tH0GcNZZ1vW\"},{\"id\":\"H9XnHoWRKCg\"}],\"translations\":[],\"teiSearchOrganisationUnits\":[],\"organisationUnits\":[{\"id\":\"ImspTQPwCqd\"}],\"externalAccess\":false,\"displayName\":\"John Traore\",\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"name\":\"John Traore\",\"email\":\"dummy@dhis2.org\",\"introduction\":\"I am the super user of DHIS 2\",\"birthday\":\"1971-04-08T00:00:00.000\",\"nationality\":\"Sierra Leone\",\"education\":\"Master of super using\",\"interests\":\"Football, swimming, singing, dancing\",\"whatsApp\":\"+123123123123\",\"facebookMessenger\":\"john.traore\",\"skype\":\"john.traore\",\"telegram\":\"john.traore\",\"twitter\":\"john.traore\",\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}],\"settings\":{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false},\"programs\":[\"uy2gU8kT1jF\",\"ur1Edk5Oe2n\",\"MoUd5BTQ3lY\",\"lxAQ7Zs9VYR\",\"IpHINAT79UW\",\"kla3mAPgvCH\",\"qDkgAbB5Jlk\",\"VBqh0ynB2wv\",\"bMcwwoVnbSR\",\"q04UBOqq3rp\",\"eBAyeGv0exc\",\"M3xtLkYBlKI\",\"fDd25txQckK\",\"WSGAb5XwJ3Y\"],\"authorities\":[\"F_PROGRAM_INDICATOR_PUBLIC_ADD\",\"F_SQLVIEW_EXECUTE\",\"F_USER_VIEW\",\"F_GENERATE_MIN_MAX_VALUES\",\"F_VALIDATIONRULE_PUBLIC_ADD\",\"F_CATEGORY_PRIVATE_ADD\",\"F_INDICATORGROUPSET_PUBLIC_ADD\",\"F_DATAVALUE_DELETE\",\"F_EXTERNAL_MAP_LAYER_PRIVATE_ADD\",\"F_RELATIONSHIPTYPE_DELETE\",\"F_CATEGORY_OPTION_PRIVATE_ADD\",\"F_SINGLE_EVENT_DATA_ENTRY\",\"F_CATEGORY_OPTION_GROUP_PUBLIC_ADD\",\"F_GIS_ADMIN\",\"M_dhis-web-event-capture\",\"F_SEND_EMAIL\",\"M_dhis-web-aggregate-data-entry\",\"F_ORGUNITGROUPSET_PRIVATE_ADD\",\"F_INDICATOR_DELETE\",\"M_dhis-web-event-reports\",\"F_VIEW_UNAPPROVED_DATA\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW\",\"F_TRACKED_ENTITY_INSTANCE_CHANGE_LOCATION\",\"F_OPTIONGROUPSET_DELETE\",\"F_USERGROUP_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_PRIVATE_ADD\",\"F_DOCUMENT_EXTERNAL\",\"F_PROGRAM_TRACKING_MANAGEMENT\",\"F_TRACKED_ENTITY_ATTRIBUTE_PUBLIC_ADD\",\"F_GENERATE_PROGRAM_SUMMARY_REPORT\",\"F_PROGRAM_INDICATOR_DELETE\",\"F_MOBILE_SENDSMS\",\"F_TRACKED_ENTITY_ADD\",\"F_TRACKED_ENTITY_MANAGEMENT\",\"F_RELATIONSHIP_DELETE\",\"F_VALIDATIONRULEGROUP_PUBLIC_ADD\",\"F_REPORT_EXTERNAL\",\"F_DOCUMENT_PRIVATE_ADD\",\"M_dhis-web-reports\",\"F_TRACKED_ENTITY_DELETE\",\"F_USERGROUP_DELETE\",\"F_PROGRAM_PRIVATE_ADD\",\"F_CATEGORY_COMBO_PRIVATE_ADD\",\"F_SCHEDULING_SEND_MESSAGE\",\"F_EXTERNAL_MAP_LAYER_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_DELETE\",\"F_ORGANISATIONUNIT_MOVE\",\"M_dhis-web-usage-analytics\",\"F_COLOR_DELETE\",\"F_INDICATORGROUP_DELETE\",\"F_ORGANISATIONUNIT_DELETE\",\"F_PROGRAM_RULE_ADD\",\"M_dhis-web-light\",\"F_OPTIONGROUPSET_PRIVATE_ADD\",\"F_DATA_MART_ADMIN\",\"M_dhis-web-maintenance-mobile\",\"F_DATASET_PUBLIC_ADD\",\"F_CATEGORY_COMBO_DELETE\",\"F_SECTION_DELETE\",\"F_USER_DELETE\",\"F_INDICATORGROUPSET_PRIVATE_ADD\",\"F_PROGRAM_INDICATOR_PRIVATE_ADD\",\"F_METADATA_IMPORT\",\"M_dhis-web-maintenance-appmanager\",\"F_EXPORT_EVENTS\",\"M_dhis-web-maintenance-settings\",\"F_SQLVIEW_PUBLIC_ADD\",\"F_PERFORM_MAINTENANCE\",\"F_COLOR_SET_ADD\",\"F_PROGRAM_STAGE_INSTANCE_DELETE\",\"F_METADATA_EXPORT\",\"F_MINMAX_DATAELEMENT_ADD\",\"F_PROGRAMSTAGE_SECTION_ADD\",\"F_DATAELEMENTGROUP_PRIVATE_ADD\",\"F_VALIDATIONRULE_PRIVATE_ADD\",\"F_APPROVE_DATA\",\"M_dhis-web-mapping\",\"F_DATAELEMENT_PRIVATE_ADD\",\"F_VALIDATIONCRITERIA_ADD\",\"F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS\",\"F_IGNORE_TRACKER_REQUIRED_VALUE_VALIDATION\",\"F_PROGRAM_PUBLIC_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_DELETE\",\"F_USER_ADD_WITHIN_MANAGED_GROUP\",\"M_Web_Portal\",\"F_ORGANISATIONUNIT_ADD\",\"M_dhis-web-user\",\"F_LEGEND_SET_PUBLIC_ADD\",\"F_CONSTANT_ADD\",\"F_PREDICTORGROUP_DELETE\",\"F_TRACKED_ENTITY_COMMENT_ADD\",\"F_TRACKED_ENTITY_INSTANCE_MANAGEMENT\",\"M_dhis-web-visualizer\",\"F_INDICATOR_PUBLIC_ADD\",\"F_INDICATORGROUP_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_PRIVATE_ADD\",\"M_dhis-web-maintenance\",\"M_dhis-web-approval\",\"F_PROGRAM_RULE_MANAGEMENT\",\"F_TEI_CASCADE_DELETE\",\"F_FRED_UPDATE\",\"F_VISUALIZATION_EXTERNAL\",\"M_dhis-web-cache-cleaner\",\"F_EDIT_EXPIRED\",\"F_ACCESS_TRACKED_ENTITY_ATTRIBUTES\",\"F_PROGRAM_DASHBOARD_CONFIG_ADMIN\",\"F_EVENT_VISUALIZATION_EXTERNAL\",\"F_ORGANISATIONUNITLEVEL_UPDATE\",\"F_CATEGORY_OPTION_PUBLIC_ADD\",\"M_dhis-web-datastore\",\"F_CATEGORY_OPTION_DELETE\",\"M_Data_Table\",\"M_dhis-web-menu-management\",\"F_REPORT_PUBLIC_ADD\",\"F_VALIDATIONRULEGROUP_DELETE\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_ADD\",\"F_RELATIONSHIP_MANAGEMENT\",\"F_COLOR_ADD\",\"F_OPTIONSET_PRIVATE_ADD\",\"F_PROGRAM_RULE_DELETE\",\"F_GENERATE_STATISTICAL_PROGRAM_REPORT\",\"F_ORGUNITGROUP_DELETE\",\"F_DATAELEMENTGROUPSET_PRIVATE_ADD\",\"M_dhis-web-tracker-capture\",\"F_LOCALE_ADD\",\"F_LEGEND_ADD\",\"F_CATEGORY_OPTION_GROUP_PRIVATE_ADD\",\"F_PROGRAM_INSTANCE_MANAGEMENT\",\"M_dhis-web-reporting\",\"F_CATEGORY_PUBLIC_ADD\",\"F_SECTION_ADD\",\"F_CATEGORY_COMBO_PUBLIC_ADD\",\"M_dhis-web-maintenance-datadictionary\",\"F_DATASET_DELETE\",\"F_INDICATORGROUPSET_DELETE\",\"F_USER_DELETE_WITHIN_MANAGED_GROUP\",\"F_ADD_TRACKED_ENTITY_FORM\",\"M_dhis-web-scheduler\",\"F_OPTIONGROUP_PUBLIC_ADD\",\"F_USERROLE_PRIVATE_ADD\",\"M_dhis-web-messaging\",\"M_dhis-web-maintenance-program\",\"F_EXTERNALFILERESOURCE_ADD\",\"F_MAP_EXTERNAL\",\"M_bna_widget\",\"F_DATAELEMENTGROUPSET_PUBLIC_ADD\",\"F_DATAELEMENTGROUP_DELETE\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_ADD\",\"F_RELATIONSHIP_ADD\",\"F_ORGUNITGROUP_PRIVATE_ADD\",\"F_DATAELEMENTGROUP_PUBLIC_ADD\",\"F_USER_GROUPS_READ_ONLY_ADD_MEMBERS\",\"F_LOCALE_DELETE\",\"F_PREDICTOR_RUN\",\"F_DATAELEMENT_DELETE\",\"F_OPTIONGROUP_DELETE\",\"F_LEGEND_SET_PRIVATE_ADD\",\"F_PROGRAMSTAGE_DELETE\",\"F_ATTRIBUTE_PUBLIC_ADD\",\"F_TRACKED_ENTITY_FORM_DELETE\",\"F_USERROLE_DELETE\",\"F_DOCUMENT_DELETE\",\"F_ORGUNITGROUPSET_DELETE\",\"M_dhis-web-translations\",\"M_dhis-web-sms\",\"F_SCHEDULING_CASE_AGGREGATE_QUERY_BUILDER\",\"F_PROGRAM_DELETE\",\"F_VALIDATIONRULE_DELETE\",\"F_PROGRAMDATAELEMENT_ADD\",\"M_dhis-web-mobile\",\"F_ACTIVITY_PLAN\",\"F_RELATIONSHIPTYPE_PUBLIC_ADD\",\"F_PREDICTOR_ADD\",\"F_SQLVIEW_PRIVATE_ADD\",\"F_EXPORT_DATA\",\"F_OAUTH2_CLIENT_MANAGE\",\"F_EVENT_VISUALIZATION_PUBLIC_ADD\",\"F_ORGUNITGROUP_PUBLIC_ADD\",\"F_APPROVE_DATA_LOWER_LEVELS\",\"M_Social_Media_Video\",\"F_OPTIONSET_PUBLIC_ADD\",\"F_EVENTCHART_EXTERNAL\",\"M_dhis-web-dataentry\",\"F_PROGRAM_TRACKING_SEARCH\",\"M_dhis-web-maintenance-dataset\",\"F_USERROLE_LIST\",\"M_dhis-web-import-export\",\"M_dhis-web-caseentry\",\"F_USERROLE_PUBLIC_ADD\",\"M_dhis-web-importexport\",\"M_InterpretationsTest\",\"F_ORGUNITGROUPSET_PUBLIC_ADD\",\"F_SQLVIEW_EXTERNAL\",\"F_REPORT_DELETE\",\"F_DASHBOARD_PUBLIC_ADD\",\"F_CONSTANT_DELETE\",\"M_dhis-web-maintenance-user\",\"F_PREDICTOR_DELETE\",\"M_dhis-web-data-visualizer\",\"F_DATASET_PRIVATE_ADD\",\"F_EVENTREPORT_PUBLIC_ADD\",\"F_PROGRAMSTAGE_SECTION_DELETE\",\"F_TRACKED_ENTITY_UPDATE\",\"F_CATEGORY_OPTION_GROUP_SET_PUBLIC_ADD\",\"F_TRACKED_ENTITY_INSTANCE_DASHBOARD\",\"F_METADATA_MANAGE\",\"F_ANALYTICSTABLEHOOK_DELETE\",\"F_UNCOMPLETE_EVENT\",\"M_dhis-web-sms-configuration\",\"M_dhis-web-interpretation\",\"F_LEGEND_DELETE\",\"M_Custom_Js_Css\",\"F_PROGRAM_INDICATOR_MANAGEMENT\",\"F_ANONYMOUS_DATA_ENTRY\",\"F_MAP_PUBLIC_ADD\",\"F_PROGRAM_VALIDATION\",\"F_SCHEDULING_ADMIN\",\"F_TRACKED_ENTITY_COMMENT_DELETE\",\"F_DATAELEMENT_MINMAX_DELETE\",\"F_MOBILE_SETTINGS\",\"F_PREDICTORGROUP_ADD\",\"F_REPORT_PRIVATE_ADD\",\"F_VALIDATIONRULEGROUP_PRIVATE_ADD\",\"F_PUSH_ANALYSIS_DELETE\",\"F_REPLICATE_USER\",\"F_DATAVALUE_ADD\",\"M_dhis-web-maintenance-organisationunit\",\"F_INSERT_CUSTOM_JS_CSS\",\"F_DATAELEMENTGROUPSET_DELETE\",\"F_SQLVIEW_DELETE\",\"F_ENROLLMENT_CASCADE_DELETE\",\"F_PROGRAMDATAELEMENT_DELETE\",\"F_TRACKED_ENTITY_INSTANCE_LIST\",\"F_INDICATORTYPE_ADD\",\"F_LEGEND_SET_DELETE\",\"F_VIEW_EVENT_ANALYTICS\",\"F_PROGRAMSTAGE_SECTION_MANAGEMENT\",\"F_IMPORT_EVENTS\",\"F_PROGRAM_INSTANCE_DELETE\",\"F_INDICATOR_PRIVATE_ADD\",\"F_TRACKED_ENTITY_INSTANCE_HISTORY\",\"F_FRED_CREATE\",\"F_EVENTCHART_PUBLIC_ADD\",\"F_PUSH_ANALYSIS_ADD\",\"M_dhis-web-event-visualizer\",\"F_USER_ADD\",\"F_EXTERNAL_MAP_LAYER_DELETE\",\"F_SYSTEM_SETTING\",\"F_ANALYTICSTABLEHOOK_ADD\",\"F_ATTRIBUTE_PRIVATE_ADD\",\"F_DOCUMENT_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_DELETE\",\"M_Easy_Visualization\",\"F_VISUALIZATION_PUBLIC_ADD\",\"F_DATAELEMENT_MINMAX_ADD\",\"M_dhis-web-data-quality\",\"M_dhis-web-pivot\",\"F_EVENTREPORT_EXTERNAL\",\"F_PROGRAM_RULE_UPDATE\",\"F_DATAELEMENT_PUBLIC_ADD\",\"M_dhis-web-validationrule\",\"F_CONSTANT_MANAGEMENT\",\"F_RUN_VALIDATION\",\"F_MANAGE_TICKETS\",\"F_GENERATE_BENEFICIARY_TABULAR_REPORT\",\"F_OPTIONGROUP_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_DELETE\",\"M_User_Administration\",\"M_dhis-web-settings\",\"F_IMPORT_DATA\",\"F_VIEW_DATABROWSER\",\"F_PERFORM_ANALYTICS_EXPLAIN\",\"F_MOBILE_DELETE_SMS\",\"F_OPTIONSET_MANAGEMENT\",\"F_SEND_MESSAGE\",\"F_PROGRAMSTAGE_ADD\",\"M_dhis-web-maps\",\"F_MINMAX_DATAELEMENT_DELETE\",\"F_ATTRIBUTE_DELETE\",\"F_OPTIONSET_DELETE\",\"F_PROGRAM_TRACKING_LIST\",\"M_dhis-web-dashboard\",\"M_dhis-web-data-administration\",\"F_ACCEPT_DATA_LOWER_LEVELS\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_DELETE\",\"F_OPTIONGROUPSET_PUBLIC_ADD\",\"M_dhis-web-capture\",\"F_PROGRAM_INDICATOR_GROUP_PUBLIC_ADD\",\"F_CATEGORY_DELETE\",\"F_COLOR_SET_DELETE\",\"M_dhis-web-app-management\",\"F_INDICATORTYPE_DELETE\",\"F_NAME_BASED_DATA_ENTRY\",\"F_INDICATORGROUP_PRIVATE_ADD\",\"F_FRED_DELETE\",\"F_VALIDATIONCRITERIA_DELETE\",\"F_PROGRAM_STAGE_INSTANCE_SEARCH\"],\"dataSets\":[\"Nyh6laLdBEJ\",\"j38YW1Am7he\",\"aLpVgfXiz0f\",\"YFTk3VdO9av\",\"Rl58JxmKJo2\",\"eZDhcZi6FLP\",\"N4fIX1HL3TQ\",\"EDzMBk0RRji\",\"TuL8IOPzpHh\",\"ce7DSxx5H2I\",\"EKWVBc5C0ms\",\"PLq9sJluXvc\",\"rsyjyJmYD4J\",\"ULowA8V3ucd\",\"QX4ZTUbOt3a\",\"pBOMPrpg1QX\",\"OsPTWNqq26W\",\"V8MHeZHIrcP\",\"YZhd4nu3mzY\",\"Y8gAn9DfAGU\",\"vc6nF5yZsPR\",\"Lpw6GcnTrmS\",\"lyLU2wR22tC\",\"VTdjfLXXmoi\",\"SF8FDSqw30D\",\"BfMAe6Itzgt\"],\"userCredentials\":{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"externalAuth\":false,\"twoFA\":false,\"passwordLastUpdated\":\"2014-12-18T20:56:05.264\",\"cogsDimensionConstraints\":[],\"catDimensionConstraints\":[],\"previousPasswords\":[],\"lastLogin\":\"2023-03-01T08:43:30.472\",\"selfRegistered\":false,\"invitation\":false,\"disabled\":false,\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}]}}", - "{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"surname\":\"Traore\",\"firstName\":\"John\",\"employer\":\"DHIS\",\"languages\":\"English\",\"gender\":\"gender_male\",\"jobTitle\":\"Super user\",\"created\":\"2013-04-18T17:15:08.407\",\"lastUpdated\":\"2023-03-01T08:43:48.714\",\"dataViewOrganisationUnits\":[],\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userGroupAccesses\":[],\"userAccesses\":[],\"userGroups\":[{\"id\":\"Kk12LkEWtXp\"},{\"id\":\"M1Qre0247G3\"},{\"id\":\"NTC8GjJ7p8P\"},{\"id\":\"B6JNeAQ6akX\"},{\"id\":\"wl5cDMuUhmF\"},{\"id\":\"QYrzIjSfI8z\"},{\"id\":\"lFHP5lLkzVr\"},{\"id\":\"jvrEwEJ2yZn\"},{\"id\":\"vAvEltyXGbD\"},{\"id\":\"w900PX10L7O\"},{\"id\":\"GogLpGmkL0g\"},{\"id\":\"vRoAruMnNpB\"},{\"id\":\"z1gNAf2zUxZ\"},{\"id\":\"gXpmQO6eEOo\"},{\"id\":\"tH0GcNZZ1vW\"},{\"id\":\"H9XnHoWRKCg\"}],\"translations\":[],\"teiSearchOrganisationUnits\":[],\"organisationUnits\":[{\"id\":\"ImspTQPwCqd\"}],\"externalAccess\":false,\"displayName\":\"John Traore\",\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"name\":\"John Traore\",\"email\":\"dummy@dhis2.org\",\"introduction\":\"I am the super user of DHIS 2\",\"birthday\":\"1971-04-08T00:00:00.000\",\"nationality\":\"Sierra Leone\",\"education\":\"Master of super using\",\"interests\":\"Football, swimming, singing, dancing\",\"whatsApp\":\"+123123123123\",\"facebookMessenger\":\"john.traore\",\"skype\":\"john.traore\",\"telegram\":\"john.traore\",\"twitter\":\"john.traore\",\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}],\"settings\":{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false},\"programs\":[\"uy2gU8kT1jF\",\"ur1Edk5Oe2n\",\"MoUd5BTQ3lY\",\"lxAQ7Zs9VYR\",\"IpHINAT79UW\",\"kla3mAPgvCH\",\"qDkgAbB5Jlk\",\"VBqh0ynB2wv\",\"bMcwwoVnbSR\",\"q04UBOqq3rp\",\"eBAyeGv0exc\",\"M3xtLkYBlKI\",\"fDd25txQckK\",\"WSGAb5XwJ3Y\"],\"authorities\":[\"F_PROGRAM_INDICATOR_PUBLIC_ADD\",\"F_SQLVIEW_EXECUTE\",\"F_USER_VIEW\",\"F_GENERATE_MIN_MAX_VALUES\",\"F_VALIDATIONRULE_PUBLIC_ADD\",\"F_CATEGORY_PRIVATE_ADD\",\"F_INDICATORGROUPSET_PUBLIC_ADD\",\"F_DATAVALUE_DELETE\",\"F_EXTERNAL_MAP_LAYER_PRIVATE_ADD\",\"F_RELATIONSHIPTYPE_DELETE\",\"F_CATEGORY_OPTION_PRIVATE_ADD\",\"F_SINGLE_EVENT_DATA_ENTRY\",\"F_CATEGORY_OPTION_GROUP_PUBLIC_ADD\",\"F_GIS_ADMIN\",\"M_dhis-web-event-capture\",\"F_SEND_EMAIL\",\"M_dhis-web-aggregate-data-entry\",\"F_ORGUNITGROUPSET_PRIVATE_ADD\",\"F_INDICATOR_DELETE\",\"M_dhis-web-event-reports\",\"F_VIEW_UNAPPROVED_DATA\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW\",\"F_TRACKED_ENTITY_INSTANCE_CHANGE_LOCATION\",\"F_OPTIONGROUPSET_DELETE\",\"F_USERGROUP_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_PRIVATE_ADD\",\"F_DOCUMENT_EXTERNAL\",\"F_PROGRAM_TRACKING_MANAGEMENT\",\"F_TRACKED_ENTITY_ATTRIBUTE_PUBLIC_ADD\",\"F_GENERATE_PROGRAM_SUMMARY_REPORT\",\"F_PROGRAM_INDICATOR_DELETE\",\"F_MOBILE_SENDSMS\",\"F_TRACKED_ENTITY_ADD\",\"F_TRACKED_ENTITY_MANAGEMENT\",\"F_RELATIONSHIP_DELETE\",\"F_VALIDATIONRULEGROUP_PUBLIC_ADD\",\"F_REPORT_EXTERNAL\",\"F_DOCUMENT_PRIVATE_ADD\",\"M_dhis-web-reports\",\"F_TRACKED_ENTITY_DELETE\",\"F_USERGROUP_DELETE\",\"F_PROGRAM_PRIVATE_ADD\",\"F_CATEGORY_COMBO_PRIVATE_ADD\",\"F_SCHEDULING_SEND_MESSAGE\",\"F_EXTERNAL_MAP_LAYER_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_DELETE\",\"F_ORGANISATIONUNIT_MOVE\",\"M_dhis-web-usage-analytics\",\"F_COLOR_DELETE\",\"F_INDICATORGROUP_DELETE\",\"F_ORGANISATIONUNIT_DELETE\",\"F_PROGRAM_RULE_ADD\",\"M_dhis-web-light\",\"F_OPTIONGROUPSET_PRIVATE_ADD\",\"F_DATA_MART_ADMIN\",\"M_dhis-web-maintenance-mobile\",\"F_DATASET_PUBLIC_ADD\",\"F_CATEGORY_COMBO_DELETE\",\"F_SECTION_DELETE\",\"F_USER_DELETE\",\"F_INDICATORGROUPSET_PRIVATE_ADD\",\"F_PROGRAM_INDICATOR_PRIVATE_ADD\",\"F_METADATA_IMPORT\",\"M_dhis-web-maintenance-appmanager\",\"F_EXPORT_EVENTS\",\"M_dhis-web-maintenance-settings\",\"F_SQLVIEW_PUBLIC_ADD\",\"F_PERFORM_MAINTENANCE\",\"F_COLOR_SET_ADD\",\"F_PROGRAM_STAGE_INSTANCE_DELETE\",\"F_METADATA_EXPORT\",\"F_MINMAX_DATAELEMENT_ADD\",\"F_PROGRAMSTAGE_SECTION_ADD\",\"F_DATAELEMENTGROUP_PRIVATE_ADD\",\"F_VALIDATIONRULE_PRIVATE_ADD\",\"F_APPROVE_DATA\",\"M_dhis-web-mapping\",\"F_DATAELEMENT_PRIVATE_ADD\",\"F_VALIDATIONCRITERIA_ADD\",\"F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS\",\"F_IGNORE_TRACKER_REQUIRED_VALUE_VALIDATION\",\"F_PROGRAM_PUBLIC_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_DELETE\",\"F_USER_ADD_WITHIN_MANAGED_GROUP\",\"M_Web_Portal\",\"F_ORGANISATIONUNIT_ADD\",\"M_dhis-web-user\",\"F_LEGEND_SET_PUBLIC_ADD\",\"F_CONSTANT_ADD\",\"F_PREDICTORGROUP_DELETE\",\"F_TRACKED_ENTITY_COMMENT_ADD\",\"F_TRACKED_ENTITY_INSTANCE_MANAGEMENT\",\"M_dhis-web-visualizer\",\"F_INDICATOR_PUBLIC_ADD\",\"F_INDICATORGROUP_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_PRIVATE_ADD\",\"M_dhis-web-maintenance\",\"M_dhis-web-approval\",\"F_PROGRAM_RULE_MANAGEMENT\",\"F_TEI_CASCADE_DELETE\",\"F_FRED_UPDATE\",\"F_VISUALIZATION_EXTERNAL\",\"M_dhis-web-cache-cleaner\",\"F_EDIT_EXPIRED\",\"F_ACCESS_TRACKED_ENTITY_ATTRIBUTES\",\"F_PROGRAM_DASHBOARD_CONFIG_ADMIN\",\"F_EVENT_VISUALIZATION_EXTERNAL\",\"F_ORGANISATIONUNITLEVEL_UPDATE\",\"F_CATEGORY_OPTION_PUBLIC_ADD\",\"M_dhis-web-datastore\",\"F_CATEGORY_OPTION_DELETE\",\"M_Data_Table\",\"M_dhis-web-menu-management\",\"F_REPORT_PUBLIC_ADD\",\"F_VALIDATIONRULEGROUP_DELETE\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_ADD\",\"F_RELATIONSHIP_MANAGEMENT\",\"F_COLOR_ADD\",\"F_OPTIONSET_PRIVATE_ADD\",\"F_PROGRAM_RULE_DELETE\",\"F_GENERATE_STATISTICAL_PROGRAM_REPORT\",\"F_ORGUNITGROUP_DELETE\",\"F_DATAELEMENTGROUPSET_PRIVATE_ADD\",\"M_dhis-web-tracker-capture\",\"F_LOCALE_ADD\",\"F_LEGEND_ADD\",\"F_CATEGORY_OPTION_GROUP_PRIVATE_ADD\",\"F_PROGRAM_INSTANCE_MANAGEMENT\",\"M_dhis-web-reporting\",\"F_CATEGORY_PUBLIC_ADD\",\"F_SECTION_ADD\",\"F_CATEGORY_COMBO_PUBLIC_ADD\",\"M_dhis-web-maintenance-datadictionary\",\"F_DATASET_DELETE\",\"F_INDICATORGROUPSET_DELETE\",\"F_USER_DELETE_WITHIN_MANAGED_GROUP\",\"F_ADD_TRACKED_ENTITY_FORM\",\"M_dhis-web-scheduler\",\"F_OPTIONGROUP_PUBLIC_ADD\",\"F_USERROLE_PRIVATE_ADD\",\"M_dhis-web-messaging\",\"M_dhis-web-maintenance-program\",\"F_EXTERNALFILERESOURCE_ADD\",\"F_MAP_EXTERNAL\",\"M_bna_widget\",\"F_DATAELEMENTGROUPSET_PUBLIC_ADD\",\"F_DATAELEMENTGROUP_DELETE\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_ADD\",\"F_RELATIONSHIP_ADD\",\"F_ORGUNITGROUP_PRIVATE_ADD\",\"F_DATAELEMENTGROUP_PUBLIC_ADD\",\"F_USER_GROUPS_READ_ONLY_ADD_MEMBERS\",\"F_LOCALE_DELETE\",\"F_PREDICTOR_RUN\",\"F_DATAELEMENT_DELETE\",\"F_OPTIONGROUP_DELETE\",\"F_LEGEND_SET_PRIVATE_ADD\",\"F_PROGRAMSTAGE_DELETE\",\"F_ATTRIBUTE_PUBLIC_ADD\",\"F_TRACKED_ENTITY_FORM_DELETE\",\"F_USERROLE_DELETE\",\"F_DOCUMENT_DELETE\",\"F_ORGUNITGROUPSET_DELETE\",\"M_dhis-web-translations\",\"M_dhis-web-sms\",\"F_SCHEDULING_CASE_AGGREGATE_QUERY_BUILDER\",\"F_PROGRAM_DELETE\",\"F_VALIDATIONRULE_DELETE\",\"F_PROGRAMDATAELEMENT_ADD\",\"M_dhis-web-mobile\",\"F_ACTIVITY_PLAN\",\"F_RELATIONSHIPTYPE_PUBLIC_ADD\",\"F_PREDICTOR_ADD\",\"F_SQLVIEW_PRIVATE_ADD\",\"F_EXPORT_DATA\",\"F_OAUTH2_CLIENT_MANAGE\",\"F_EVENT_VISUALIZATION_PUBLIC_ADD\",\"F_ORGUNITGROUP_PUBLIC_ADD\",\"F_APPROVE_DATA_LOWER_LEVELS\",\"M_Social_Media_Video\",\"F_OPTIONSET_PUBLIC_ADD\",\"F_EVENTCHART_EXTERNAL\",\"M_dhis-web-dataentry\",\"F_PROGRAM_TRACKING_SEARCH\",\"M_dhis-web-maintenance-dataset\",\"F_USERROLE_LIST\",\"M_dhis-web-import-export\",\"M_dhis-web-caseentry\",\"F_USERROLE_PUBLIC_ADD\",\"M_dhis-web-importexport\",\"M_InterpretationsTest\",\"F_ORGUNITGROUPSET_PUBLIC_ADD\",\"F_SQLVIEW_EXTERNAL\",\"F_REPORT_DELETE\",\"F_DASHBOARD_PUBLIC_ADD\",\"F_CONSTANT_DELETE\",\"M_dhis-web-maintenance-user\",\"F_PREDICTOR_DELETE\",\"M_dhis-web-data-visualizer\",\"F_DATASET_PRIVATE_ADD\",\"F_EVENTREPORT_PUBLIC_ADD\",\"F_PROGRAMSTAGE_SECTION_DELETE\",\"F_TRACKED_ENTITY_UPDATE\",\"F_CATEGORY_OPTION_GROUP_SET_PUBLIC_ADD\",\"F_TRACKED_ENTITY_INSTANCE_DASHBOARD\",\"F_METADATA_MANAGE\",\"F_ANALYTICSTABLEHOOK_DELETE\",\"F_UNCOMPLETE_EVENT\",\"M_dhis-web-sms-configuration\",\"M_dhis-web-interpretation\",\"F_LEGEND_DELETE\",\"M_Custom_Js_Css\",\"F_PROGRAM_INDICATOR_MANAGEMENT\",\"F_ANONYMOUS_DATA_ENTRY\",\"F_MAP_PUBLIC_ADD\",\"F_PROGRAM_VALIDATION\",\"F_SCHEDULING_ADMIN\",\"F_TRACKED_ENTITY_COMMENT_DELETE\",\"F_DATAELEMENT_MINMAX_DELETE\",\"F_MOBILE_SETTINGS\",\"F_PREDICTORGROUP_ADD\",\"F_REPORT_PRIVATE_ADD\",\"F_VALIDATIONRULEGROUP_PRIVATE_ADD\",\"F_PUSH_ANALYSIS_DELETE\",\"F_REPLICATE_USER\",\"F_DATAVALUE_ADD\",\"M_dhis-web-maintenance-organisationunit\",\"F_INSERT_CUSTOM_JS_CSS\",\"F_DATAELEMENTGROUPSET_DELETE\",\"F_SQLVIEW_DELETE\",\"F_ENROLLMENT_CASCADE_DELETE\",\"F_PROGRAMDATAELEMENT_DELETE\",\"F_TRACKED_ENTITY_INSTANCE_LIST\",\"F_INDICATORTYPE_ADD\",\"F_LEGEND_SET_DELETE\",\"F_VIEW_EVENT_ANALYTICS\",\"F_PROGRAMSTAGE_SECTION_MANAGEMENT\",\"F_IMPORT_EVENTS\",\"F_PROGRAM_INSTANCE_DELETE\",\"F_INDICATOR_PRIVATE_ADD\",\"F_TRACKED_ENTITY_INSTANCE_HISTORY\",\"F_FRED_CREATE\",\"F_EVENTCHART_PUBLIC_ADD\",\"F_PUSH_ANALYSIS_ADD\",\"M_dhis-web-event-visualizer\",\"F_USER_ADD\",\"F_EXTERNAL_MAP_LAYER_DELETE\",\"F_SYSTEM_SETTING\",\"F_ANALYTICSTABLEHOOK_ADD\",\"F_ATTRIBUTE_PRIVATE_ADD\",\"F_DOCUMENT_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_DELETE\",\"M_Easy_Visualization\",\"F_VISUALIZATION_PUBLIC_ADD\",\"F_DATAELEMENT_MINMAX_ADD\",\"M_dhis-web-data-quality\",\"M_dhis-web-pivot\",\"F_EVENTREPORT_EXTERNAL\",\"F_PROGRAM_RULE_UPDATE\",\"F_DATAELEMENT_PUBLIC_ADD\",\"M_dhis-web-validationrule\",\"F_CONSTANT_MANAGEMENT\",\"F_RUN_VALIDATION\",\"F_MANAGE_TICKETS\",\"F_GENERATE_BENEFICIARY_TABULAR_REPORT\",\"F_OPTIONGROUP_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_DELETE\",\"M_User_Administration\",\"M_dhis-web-settings\",\"F_IMPORT_DATA\",\"F_VIEW_DATABROWSER\",\"F_PERFORM_ANALYTICS_EXPLAIN\",\"F_MOBILE_DELETE_SMS\",\"F_OPTIONSET_MANAGEMENT\",\"F_SEND_MESSAGE\",\"F_PROGRAMSTAGE_ADD\",\"M_dhis-web-maps\",\"F_MINMAX_DATAELEMENT_DELETE\",\"F_ATTRIBUTE_DELETE\",\"F_OPTIONSET_DELETE\",\"F_PROGRAM_TRACKING_LIST\",\"M_dhis-web-dashboard\",\"M_dhis-web-data-administration\",\"F_ACCEPT_DATA_LOWER_LEVELS\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_DELETE\",\"F_OPTIONGROUPSET_PUBLIC_ADD\",\"M_dhis-web-capture\",\"F_PROGRAM_INDICATOR_GROUP_PUBLIC_ADD\",\"F_CATEGORY_DELETE\",\"F_COLOR_SET_DELETE\",\"M_dhis-web-app-management\",\"F_INDICATORTYPE_DELETE\",\"F_NAME_BASED_DATA_ENTRY\",\"F_INDICATORGROUP_PRIVATE_ADD\",\"F_FRED_DELETE\",\"F_VALIDATIONCRITERIA_DELETE\",\"F_PROGRAM_STAGE_INSTANCE_SEARCH\"],\"dataSets\":[\"Nyh6laLdBEJ\",\"j38YW1Am7he\",\"aLpVgfXiz0f\",\"YFTk3VdO9av\",\"Rl58JxmKJo2\",\"eZDhcZi6FLP\",\"N4fIX1HL3TQ\",\"EDzMBk0RRji\",\"TuL8IOPzpHh\",\"ce7DSxx5H2I\",\"EKWVBc5C0ms\",\"PLq9sJluXvc\",\"rsyjyJmYD4J\",\"ULowA8V3ucd\",\"QX4ZTUbOt3a\",\"pBOMPrpg1QX\",\"OsPTWNqq26W\",\"V8MHeZHIrcP\",\"YZhd4nu3mzY\",\"Y8gAn9DfAGU\",\"vc6nF5yZsPR\",\"Lpw6GcnTrmS\",\"lyLU2wR22tC\",\"VTdjfLXXmoi\",\"SF8FDSqw30D\",\"BfMAe6Itzgt\"],\"userCredentials\":{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"externalAuth\":false,\"twoFA\":false,\"passwordLastUpdated\":\"2014-12-18T20:56:05.264\",\"cogsDimensionConstraints\":[],\"catDimensionConstraints\":[],\"previousPasswords\":[],\"lastLogin\":\"2023-03-01T08:43:48.711\",\"selfRegistered\":false,\"invitation\":false,\"disabled\":false,\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}]}}", - "{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"surname\":\"Traore\",\"firstName\":\"John\",\"employer\":\"DHIS\",\"languages\":\"English\",\"gender\":\"gender_male\",\"jobTitle\":\"Super user\",\"created\":\"2013-04-18T17:15:08.407\",\"lastUpdated\":\"2023-03-01T08:44:02.429\",\"dataViewOrganisationUnits\":[],\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userGroupAccesses\":[],\"userAccesses\":[],\"userGroups\":[{\"id\":\"Kk12LkEWtXp\"},{\"id\":\"M1Qre0247G3\"},{\"id\":\"NTC8GjJ7p8P\"},{\"id\":\"B6JNeAQ6akX\"},{\"id\":\"wl5cDMuUhmF\"},{\"id\":\"QYrzIjSfI8z\"},{\"id\":\"lFHP5lLkzVr\"},{\"id\":\"jvrEwEJ2yZn\"},{\"id\":\"vAvEltyXGbD\"},{\"id\":\"w900PX10L7O\"},{\"id\":\"GogLpGmkL0g\"},{\"id\":\"vRoAruMnNpB\"},{\"id\":\"z1gNAf2zUxZ\"},{\"id\":\"gXpmQO6eEOo\"},{\"id\":\"tH0GcNZZ1vW\"},{\"id\":\"H9XnHoWRKCg\"}],\"translations\":[],\"teiSearchOrganisationUnits\":[],\"organisationUnits\":[{\"id\":\"ImspTQPwCqd\"}],\"externalAccess\":false,\"displayName\":\"John Traore\",\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"name\":\"John Traore\",\"email\":\"dummy@dhis2.org\",\"introduction\":\"I am the super user of DHIS 2\",\"birthday\":\"1971-04-08T00:00:00.000\",\"nationality\":\"Sierra Leone\",\"education\":\"Master of super using\",\"interests\":\"Football, swimming, singing, dancing\",\"whatsApp\":\"+123123123123\",\"facebookMessenger\":\"john.traore\",\"skype\":\"john.traore\",\"telegram\":\"john.traore\",\"twitter\":\"john.traore\",\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}],\"settings\":{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false},\"programs\":[\"uy2gU8kT1jF\",\"ur1Edk5Oe2n\",\"MoUd5BTQ3lY\",\"lxAQ7Zs9VYR\",\"IpHINAT79UW\",\"kla3mAPgvCH\",\"qDkgAbB5Jlk\",\"VBqh0ynB2wv\",\"bMcwwoVnbSR\",\"q04UBOqq3rp\",\"eBAyeGv0exc\",\"M3xtLkYBlKI\",\"fDd25txQckK\",\"WSGAb5XwJ3Y\"],\"authorities\":[\"F_PROGRAM_INDICATOR_PUBLIC_ADD\",\"F_SQLVIEW_EXECUTE\",\"F_USER_VIEW\",\"F_GENERATE_MIN_MAX_VALUES\",\"F_VALIDATIONRULE_PUBLIC_ADD\",\"F_CATEGORY_PRIVATE_ADD\",\"F_INDICATORGROUPSET_PUBLIC_ADD\",\"F_DATAVALUE_DELETE\",\"F_EXTERNAL_MAP_LAYER_PRIVATE_ADD\",\"F_RELATIONSHIPTYPE_DELETE\",\"F_CATEGORY_OPTION_PRIVATE_ADD\",\"F_SINGLE_EVENT_DATA_ENTRY\",\"F_CATEGORY_OPTION_GROUP_PUBLIC_ADD\",\"F_GIS_ADMIN\",\"M_dhis-web-event-capture\",\"F_SEND_EMAIL\",\"M_dhis-web-aggregate-data-entry\",\"F_ORGUNITGROUPSET_PRIVATE_ADD\",\"F_INDICATOR_DELETE\",\"M_dhis-web-event-reports\",\"F_VIEW_UNAPPROVED_DATA\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW\",\"F_TRACKED_ENTITY_INSTANCE_CHANGE_LOCATION\",\"F_OPTIONGROUPSET_DELETE\",\"F_USERGROUP_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_PRIVATE_ADD\",\"F_DOCUMENT_EXTERNAL\",\"F_PROGRAM_TRACKING_MANAGEMENT\",\"F_TRACKED_ENTITY_ATTRIBUTE_PUBLIC_ADD\",\"F_GENERATE_PROGRAM_SUMMARY_REPORT\",\"F_PROGRAM_INDICATOR_DELETE\",\"F_MOBILE_SENDSMS\",\"F_TRACKED_ENTITY_ADD\",\"F_TRACKED_ENTITY_MANAGEMENT\",\"F_RELATIONSHIP_DELETE\",\"F_VALIDATIONRULEGROUP_PUBLIC_ADD\",\"F_REPORT_EXTERNAL\",\"F_DOCUMENT_PRIVATE_ADD\",\"M_dhis-web-reports\",\"F_TRACKED_ENTITY_DELETE\",\"F_USERGROUP_DELETE\",\"F_PROGRAM_PRIVATE_ADD\",\"F_CATEGORY_COMBO_PRIVATE_ADD\",\"F_SCHEDULING_SEND_MESSAGE\",\"F_EXTERNAL_MAP_LAYER_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_DELETE\",\"F_ORGANISATIONUNIT_MOVE\",\"M_dhis-web-usage-analytics\",\"F_COLOR_DELETE\",\"F_INDICATORGROUP_DELETE\",\"F_ORGANISATIONUNIT_DELETE\",\"F_PROGRAM_RULE_ADD\",\"M_dhis-web-light\",\"F_OPTIONGROUPSET_PRIVATE_ADD\",\"F_DATA_MART_ADMIN\",\"M_dhis-web-maintenance-mobile\",\"F_DATASET_PUBLIC_ADD\",\"F_CATEGORY_COMBO_DELETE\",\"F_SECTION_DELETE\",\"F_USER_DELETE\",\"F_INDICATORGROUPSET_PRIVATE_ADD\",\"F_PROGRAM_INDICATOR_PRIVATE_ADD\",\"F_METADATA_IMPORT\",\"M_dhis-web-maintenance-appmanager\",\"F_EXPORT_EVENTS\",\"M_dhis-web-maintenance-settings\",\"F_SQLVIEW_PUBLIC_ADD\",\"F_PERFORM_MAINTENANCE\",\"F_COLOR_SET_ADD\",\"F_PROGRAM_STAGE_INSTANCE_DELETE\",\"F_METADATA_EXPORT\",\"F_MINMAX_DATAELEMENT_ADD\",\"F_PROGRAMSTAGE_SECTION_ADD\",\"F_DATAELEMENTGROUP_PRIVATE_ADD\",\"F_VALIDATIONRULE_PRIVATE_ADD\",\"F_APPROVE_DATA\",\"M_dhis-web-mapping\",\"F_DATAELEMENT_PRIVATE_ADD\",\"F_VALIDATIONCRITERIA_ADD\",\"F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS\",\"F_IGNORE_TRACKER_REQUIRED_VALUE_VALIDATION\",\"F_PROGRAM_PUBLIC_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_DELETE\",\"F_USER_ADD_WITHIN_MANAGED_GROUP\",\"M_Web_Portal\",\"F_ORGANISATIONUNIT_ADD\",\"M_dhis-web-user\",\"F_LEGEND_SET_PUBLIC_ADD\",\"F_CONSTANT_ADD\",\"F_PREDICTORGROUP_DELETE\",\"F_TRACKED_ENTITY_COMMENT_ADD\",\"F_TRACKED_ENTITY_INSTANCE_MANAGEMENT\",\"M_dhis-web-visualizer\",\"F_INDICATOR_PUBLIC_ADD\",\"F_INDICATORGROUP_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_PRIVATE_ADD\",\"M_dhis-web-maintenance\",\"M_dhis-web-approval\",\"F_PROGRAM_RULE_MANAGEMENT\",\"F_TEI_CASCADE_DELETE\",\"F_FRED_UPDATE\",\"F_VISUALIZATION_EXTERNAL\",\"M_dhis-web-cache-cleaner\",\"F_EDIT_EXPIRED\",\"F_ACCESS_TRACKED_ENTITY_ATTRIBUTES\",\"F_PROGRAM_DASHBOARD_CONFIG_ADMIN\",\"F_EVENT_VISUALIZATION_EXTERNAL\",\"F_ORGANISATIONUNITLEVEL_UPDATE\",\"F_CATEGORY_OPTION_PUBLIC_ADD\",\"M_dhis-web-datastore\",\"F_CATEGORY_OPTION_DELETE\",\"M_Data_Table\",\"M_dhis-web-menu-management\",\"F_REPORT_PUBLIC_ADD\",\"F_VALIDATIONRULEGROUP_DELETE\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_ADD\",\"F_RELATIONSHIP_MANAGEMENT\",\"F_COLOR_ADD\",\"F_OPTIONSET_PRIVATE_ADD\",\"F_PROGRAM_RULE_DELETE\",\"F_GENERATE_STATISTICAL_PROGRAM_REPORT\",\"F_ORGUNITGROUP_DELETE\",\"F_DATAELEMENTGROUPSET_PRIVATE_ADD\",\"M_dhis-web-tracker-capture\",\"F_LOCALE_ADD\",\"F_LEGEND_ADD\",\"F_CATEGORY_OPTION_GROUP_PRIVATE_ADD\",\"F_PROGRAM_INSTANCE_MANAGEMENT\",\"M_dhis-web-reporting\",\"F_CATEGORY_PUBLIC_ADD\",\"F_SECTION_ADD\",\"F_CATEGORY_COMBO_PUBLIC_ADD\",\"M_dhis-web-maintenance-datadictionary\",\"F_DATASET_DELETE\",\"F_INDICATORGROUPSET_DELETE\",\"F_USER_DELETE_WITHIN_MANAGED_GROUP\",\"F_ADD_TRACKED_ENTITY_FORM\",\"M_dhis-web-scheduler\",\"F_OPTIONGROUP_PUBLIC_ADD\",\"F_USERROLE_PRIVATE_ADD\",\"M_dhis-web-messaging\",\"M_dhis-web-maintenance-program\",\"F_EXTERNALFILERESOURCE_ADD\",\"F_MAP_EXTERNAL\",\"M_bna_widget\",\"F_DATAELEMENTGROUPSET_PUBLIC_ADD\",\"F_DATAELEMENTGROUP_DELETE\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_ADD\",\"F_RELATIONSHIP_ADD\",\"F_ORGUNITGROUP_PRIVATE_ADD\",\"F_DATAELEMENTGROUP_PUBLIC_ADD\",\"F_USER_GROUPS_READ_ONLY_ADD_MEMBERS\",\"F_LOCALE_DELETE\",\"F_PREDICTOR_RUN\",\"F_DATAELEMENT_DELETE\",\"F_OPTIONGROUP_DELETE\",\"F_LEGEND_SET_PRIVATE_ADD\",\"F_PROGRAMSTAGE_DELETE\",\"F_ATTRIBUTE_PUBLIC_ADD\",\"F_TRACKED_ENTITY_FORM_DELETE\",\"F_USERROLE_DELETE\",\"F_DOCUMENT_DELETE\",\"F_ORGUNITGROUPSET_DELETE\",\"M_dhis-web-translations\",\"M_dhis-web-sms\",\"F_SCHEDULING_CASE_AGGREGATE_QUERY_BUILDER\",\"F_PROGRAM_DELETE\",\"F_VALIDATIONRULE_DELETE\",\"F_PROGRAMDATAELEMENT_ADD\",\"M_dhis-web-mobile\",\"F_ACTIVITY_PLAN\",\"F_RELATIONSHIPTYPE_PUBLIC_ADD\",\"F_PREDICTOR_ADD\",\"F_SQLVIEW_PRIVATE_ADD\",\"F_EXPORT_DATA\",\"F_OAUTH2_CLIENT_MANAGE\",\"F_EVENT_VISUALIZATION_PUBLIC_ADD\",\"F_ORGUNITGROUP_PUBLIC_ADD\",\"F_APPROVE_DATA_LOWER_LEVELS\",\"M_Social_Media_Video\",\"F_OPTIONSET_PUBLIC_ADD\",\"F_EVENTCHART_EXTERNAL\",\"M_dhis-web-dataentry\",\"F_PROGRAM_TRACKING_SEARCH\",\"M_dhis-web-maintenance-dataset\",\"F_USERROLE_LIST\",\"M_dhis-web-import-export\",\"M_dhis-web-caseentry\",\"F_USERROLE_PUBLIC_ADD\",\"M_dhis-web-importexport\",\"M_InterpretationsTest\",\"F_ORGUNITGROUPSET_PUBLIC_ADD\",\"F_SQLVIEW_EXTERNAL\",\"F_REPORT_DELETE\",\"F_DASHBOARD_PUBLIC_ADD\",\"F_CONSTANT_DELETE\",\"M_dhis-web-maintenance-user\",\"F_PREDICTOR_DELETE\",\"M_dhis-web-data-visualizer\",\"F_DATASET_PRIVATE_ADD\",\"F_EVENTREPORT_PUBLIC_ADD\",\"F_PROGRAMSTAGE_SECTION_DELETE\",\"F_TRACKED_ENTITY_UPDATE\",\"F_CATEGORY_OPTION_GROUP_SET_PUBLIC_ADD\",\"F_TRACKED_ENTITY_INSTANCE_DASHBOARD\",\"F_METADATA_MANAGE\",\"F_ANALYTICSTABLEHOOK_DELETE\",\"F_UNCOMPLETE_EVENT\",\"M_dhis-web-sms-configuration\",\"M_dhis-web-interpretation\",\"F_LEGEND_DELETE\",\"M_Custom_Js_Css\",\"F_PROGRAM_INDICATOR_MANAGEMENT\",\"F_ANONYMOUS_DATA_ENTRY\",\"F_MAP_PUBLIC_ADD\",\"F_PROGRAM_VALIDATION\",\"F_SCHEDULING_ADMIN\",\"F_TRACKED_ENTITY_COMMENT_DELETE\",\"F_DATAELEMENT_MINMAX_DELETE\",\"F_MOBILE_SETTINGS\",\"F_PREDICTORGROUP_ADD\",\"F_REPORT_PRIVATE_ADD\",\"F_VALIDATIONRULEGROUP_PRIVATE_ADD\",\"F_PUSH_ANALYSIS_DELETE\",\"F_REPLICATE_USER\",\"F_DATAVALUE_ADD\",\"M_dhis-web-maintenance-organisationunit\",\"F_INSERT_CUSTOM_JS_CSS\",\"F_DATAELEMENTGROUPSET_DELETE\",\"F_SQLVIEW_DELETE\",\"F_ENROLLMENT_CASCADE_DELETE\",\"F_PROGRAMDATAELEMENT_DELETE\",\"F_TRACKED_ENTITY_INSTANCE_LIST\",\"F_INDICATORTYPE_ADD\",\"F_LEGEND_SET_DELETE\",\"F_VIEW_EVENT_ANALYTICS\",\"F_PROGRAMSTAGE_SECTION_MANAGEMENT\",\"F_IMPORT_EVENTS\",\"F_PROGRAM_INSTANCE_DELETE\",\"F_INDICATOR_PRIVATE_ADD\",\"F_TRACKED_ENTITY_INSTANCE_HISTORY\",\"F_FRED_CREATE\",\"F_EVENTCHART_PUBLIC_ADD\",\"F_PUSH_ANALYSIS_ADD\",\"M_dhis-web-event-visualizer\",\"F_USER_ADD\",\"F_EXTERNAL_MAP_LAYER_DELETE\",\"F_SYSTEM_SETTING\",\"F_ANALYTICSTABLEHOOK_ADD\",\"F_ATTRIBUTE_PRIVATE_ADD\",\"F_DOCUMENT_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_DELETE\",\"M_Easy_Visualization\",\"F_VISUALIZATION_PUBLIC_ADD\",\"F_DATAELEMENT_MINMAX_ADD\",\"M_dhis-web-data-quality\",\"M_dhis-web-pivot\",\"F_EVENTREPORT_EXTERNAL\",\"F_PROGRAM_RULE_UPDATE\",\"F_DATAELEMENT_PUBLIC_ADD\",\"M_dhis-web-validationrule\",\"F_CONSTANT_MANAGEMENT\",\"F_RUN_VALIDATION\",\"F_MANAGE_TICKETS\",\"F_GENERATE_BENEFICIARY_TABULAR_REPORT\",\"F_OPTIONGROUP_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_DELETE\",\"M_User_Administration\",\"M_dhis-web-settings\",\"F_IMPORT_DATA\",\"F_VIEW_DATABROWSER\",\"F_PERFORM_ANALYTICS_EXPLAIN\",\"F_MOBILE_DELETE_SMS\",\"F_OPTIONSET_MANAGEMENT\",\"F_SEND_MESSAGE\",\"F_PROGRAMSTAGE_ADD\",\"M_dhis-web-maps\",\"F_MINMAX_DATAELEMENT_DELETE\",\"F_ATTRIBUTE_DELETE\",\"F_OPTIONSET_DELETE\",\"F_PROGRAM_TRACKING_LIST\",\"M_dhis-web-dashboard\",\"M_dhis-web-data-administration\",\"F_ACCEPT_DATA_LOWER_LEVELS\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_DELETE\",\"F_OPTIONGROUPSET_PUBLIC_ADD\",\"M_dhis-web-capture\",\"F_PROGRAM_INDICATOR_GROUP_PUBLIC_ADD\",\"F_CATEGORY_DELETE\",\"F_COLOR_SET_DELETE\",\"M_dhis-web-app-management\",\"F_INDICATORTYPE_DELETE\",\"F_NAME_BASED_DATA_ENTRY\",\"F_INDICATORGROUP_PRIVATE_ADD\",\"F_FRED_DELETE\",\"F_VALIDATIONCRITERIA_DELETE\",\"F_PROGRAM_STAGE_INSTANCE_SEARCH\"],\"dataSets\":[\"Nyh6laLdBEJ\",\"j38YW1Am7he\",\"aLpVgfXiz0f\",\"YFTk3VdO9av\",\"Rl58JxmKJo2\",\"eZDhcZi6FLP\",\"N4fIX1HL3TQ\",\"EDzMBk0RRji\",\"TuL8IOPzpHh\",\"ce7DSxx5H2I\",\"EKWVBc5C0ms\",\"PLq9sJluXvc\",\"rsyjyJmYD4J\",\"ULowA8V3ucd\",\"QX4ZTUbOt3a\",\"pBOMPrpg1QX\",\"OsPTWNqq26W\",\"V8MHeZHIrcP\",\"YZhd4nu3mzY\",\"Y8gAn9DfAGU\",\"vc6nF5yZsPR\",\"Lpw6GcnTrmS\",\"lyLU2wR22tC\",\"VTdjfLXXmoi\",\"SF8FDSqw30D\",\"BfMAe6Itzgt\"],\"userCredentials\":{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"externalAuth\":false,\"twoFA\":false,\"passwordLastUpdated\":\"2014-12-18T20:56:05.264\",\"cogsDimensionConstraints\":[],\"catDimensionConstraints\":[],\"previousPasswords\":[],\"lastLogin\":\"2023-03-01T08:44:02.427\",\"selfRegistered\":false,\"invitation\":false,\"disabled\":false,\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}]}}", - "{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"surname\":\"Traore\",\"firstName\":\"John\",\"employer\":\"DHIS\",\"languages\":\"English\",\"gender\":\"gender_male\",\"jobTitle\":\"Super user\",\"created\":\"2013-04-18T17:15:08.407\",\"lastUpdated\":\"2023-03-01T08:44:11.598\",\"dataViewOrganisationUnits\":[],\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userGroupAccesses\":[],\"userAccesses\":[],\"userGroups\":[{\"id\":\"Kk12LkEWtXp\"},{\"id\":\"M1Qre0247G3\"},{\"id\":\"NTC8GjJ7p8P\"},{\"id\":\"B6JNeAQ6akX\"},{\"id\":\"wl5cDMuUhmF\"},{\"id\":\"QYrzIjSfI8z\"},{\"id\":\"lFHP5lLkzVr\"},{\"id\":\"jvrEwEJ2yZn\"},{\"id\":\"vAvEltyXGbD\"},{\"id\":\"w900PX10L7O\"},{\"id\":\"GogLpGmkL0g\"},{\"id\":\"vRoAruMnNpB\"},{\"id\":\"z1gNAf2zUxZ\"},{\"id\":\"gXpmQO6eEOo\"},{\"id\":\"tH0GcNZZ1vW\"},{\"id\":\"H9XnHoWRKCg\"}],\"translations\":[],\"teiSearchOrganisationUnits\":[],\"organisationUnits\":[{\"id\":\"ImspTQPwCqd\"}],\"externalAccess\":false,\"displayName\":\"John Traore\",\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"name\":\"John Traore\",\"email\":\"dummy@dhis2.org\",\"introduction\":\"I am the super user of DHIS 2\",\"birthday\":\"1971-04-08T00:00:00.000\",\"nationality\":\"Sierra Leone\",\"education\":\"Master of super using\",\"interests\":\"Football, swimming, singing, dancing\",\"whatsApp\":\"+123123123123\",\"facebookMessenger\":\"john.traore\",\"skype\":\"john.traore\",\"telegram\":\"john.traore\",\"twitter\":\"john.traore\",\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}],\"settings\":{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false},\"programs\":[\"uy2gU8kT1jF\",\"ur1Edk5Oe2n\",\"MoUd5BTQ3lY\",\"lxAQ7Zs9VYR\",\"IpHINAT79UW\",\"kla3mAPgvCH\",\"qDkgAbB5Jlk\",\"VBqh0ynB2wv\",\"bMcwwoVnbSR\",\"q04UBOqq3rp\",\"eBAyeGv0exc\",\"M3xtLkYBlKI\",\"fDd25txQckK\",\"WSGAb5XwJ3Y\"],\"authorities\":[\"F_PROGRAM_INDICATOR_PUBLIC_ADD\",\"F_SQLVIEW_EXECUTE\",\"F_USER_VIEW\",\"F_GENERATE_MIN_MAX_VALUES\",\"F_VALIDATIONRULE_PUBLIC_ADD\",\"F_CATEGORY_PRIVATE_ADD\",\"F_INDICATORGROUPSET_PUBLIC_ADD\",\"F_DATAVALUE_DELETE\",\"F_EXTERNAL_MAP_LAYER_PRIVATE_ADD\",\"F_RELATIONSHIPTYPE_DELETE\",\"F_CATEGORY_OPTION_PRIVATE_ADD\",\"F_SINGLE_EVENT_DATA_ENTRY\",\"F_CATEGORY_OPTION_GROUP_PUBLIC_ADD\",\"F_GIS_ADMIN\",\"M_dhis-web-event-capture\",\"F_SEND_EMAIL\",\"M_dhis-web-aggregate-data-entry\",\"F_ORGUNITGROUPSET_PRIVATE_ADD\",\"F_INDICATOR_DELETE\",\"M_dhis-web-event-reports\",\"F_VIEW_UNAPPROVED_DATA\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW\",\"F_TRACKED_ENTITY_INSTANCE_CHANGE_LOCATION\",\"F_OPTIONGROUPSET_DELETE\",\"F_USERGROUP_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_PRIVATE_ADD\",\"F_DOCUMENT_EXTERNAL\",\"F_PROGRAM_TRACKING_MANAGEMENT\",\"F_TRACKED_ENTITY_ATTRIBUTE_PUBLIC_ADD\",\"F_GENERATE_PROGRAM_SUMMARY_REPORT\",\"F_PROGRAM_INDICATOR_DELETE\",\"F_MOBILE_SENDSMS\",\"F_TRACKED_ENTITY_ADD\",\"F_TRACKED_ENTITY_MANAGEMENT\",\"F_RELATIONSHIP_DELETE\",\"F_VALIDATIONRULEGROUP_PUBLIC_ADD\",\"F_REPORT_EXTERNAL\",\"F_DOCUMENT_PRIVATE_ADD\",\"M_dhis-web-reports\",\"F_TRACKED_ENTITY_DELETE\",\"F_USERGROUP_DELETE\",\"F_PROGRAM_PRIVATE_ADD\",\"F_CATEGORY_COMBO_PRIVATE_ADD\",\"F_SCHEDULING_SEND_MESSAGE\",\"F_EXTERNAL_MAP_LAYER_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_DELETE\",\"F_ORGANISATIONUNIT_MOVE\",\"M_dhis-web-usage-analytics\",\"F_COLOR_DELETE\",\"F_INDICATORGROUP_DELETE\",\"F_ORGANISATIONUNIT_DELETE\",\"F_PROGRAM_RULE_ADD\",\"M_dhis-web-light\",\"F_OPTIONGROUPSET_PRIVATE_ADD\",\"F_DATA_MART_ADMIN\",\"M_dhis-web-maintenance-mobile\",\"F_DATASET_PUBLIC_ADD\",\"F_CATEGORY_COMBO_DELETE\",\"F_SECTION_DELETE\",\"F_USER_DELETE\",\"F_INDICATORGROUPSET_PRIVATE_ADD\",\"F_PROGRAM_INDICATOR_PRIVATE_ADD\",\"F_METADATA_IMPORT\",\"M_dhis-web-maintenance-appmanager\",\"F_EXPORT_EVENTS\",\"M_dhis-web-maintenance-settings\",\"F_SQLVIEW_PUBLIC_ADD\",\"F_PERFORM_MAINTENANCE\",\"F_COLOR_SET_ADD\",\"F_PROGRAM_STAGE_INSTANCE_DELETE\",\"F_METADATA_EXPORT\",\"F_MINMAX_DATAELEMENT_ADD\",\"F_PROGRAMSTAGE_SECTION_ADD\",\"F_DATAELEMENTGROUP_PRIVATE_ADD\",\"F_VALIDATIONRULE_PRIVATE_ADD\",\"F_APPROVE_DATA\",\"M_dhis-web-mapping\",\"F_DATAELEMENT_PRIVATE_ADD\",\"F_VALIDATIONCRITERIA_ADD\",\"F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS\",\"F_IGNORE_TRACKER_REQUIRED_VALUE_VALIDATION\",\"F_PROGRAM_PUBLIC_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_DELETE\",\"F_USER_ADD_WITHIN_MANAGED_GROUP\",\"M_Web_Portal\",\"F_ORGANISATIONUNIT_ADD\",\"M_dhis-web-user\",\"F_LEGEND_SET_PUBLIC_ADD\",\"F_CONSTANT_ADD\",\"F_PREDICTORGROUP_DELETE\",\"F_TRACKED_ENTITY_COMMENT_ADD\",\"F_TRACKED_ENTITY_INSTANCE_MANAGEMENT\",\"M_dhis-web-visualizer\",\"F_INDICATOR_PUBLIC_ADD\",\"F_INDICATORGROUP_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_PRIVATE_ADD\",\"M_dhis-web-maintenance\",\"M_dhis-web-approval\",\"F_PROGRAM_RULE_MANAGEMENT\",\"F_TEI_CASCADE_DELETE\",\"F_FRED_UPDATE\",\"F_VISUALIZATION_EXTERNAL\",\"M_dhis-web-cache-cleaner\",\"F_EDIT_EXPIRED\",\"F_ACCESS_TRACKED_ENTITY_ATTRIBUTES\",\"F_PROGRAM_DASHBOARD_CONFIG_ADMIN\",\"F_EVENT_VISUALIZATION_EXTERNAL\",\"F_ORGANISATIONUNITLEVEL_UPDATE\",\"F_CATEGORY_OPTION_PUBLIC_ADD\",\"M_dhis-web-datastore\",\"F_CATEGORY_OPTION_DELETE\",\"M_Data_Table\",\"M_dhis-web-menu-management\",\"F_REPORT_PUBLIC_ADD\",\"F_VALIDATIONRULEGROUP_DELETE\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_ADD\",\"F_RELATIONSHIP_MANAGEMENT\",\"F_COLOR_ADD\",\"F_OPTIONSET_PRIVATE_ADD\",\"F_PROGRAM_RULE_DELETE\",\"F_GENERATE_STATISTICAL_PROGRAM_REPORT\",\"F_ORGUNITGROUP_DELETE\",\"F_DATAELEMENTGROUPSET_PRIVATE_ADD\",\"M_dhis-web-tracker-capture\",\"F_LOCALE_ADD\",\"F_LEGEND_ADD\",\"F_CATEGORY_OPTION_GROUP_PRIVATE_ADD\",\"F_PROGRAM_INSTANCE_MANAGEMENT\",\"M_dhis-web-reporting\",\"F_CATEGORY_PUBLIC_ADD\",\"F_SECTION_ADD\",\"F_CATEGORY_COMBO_PUBLIC_ADD\",\"M_dhis-web-maintenance-datadictionary\",\"F_DATASET_DELETE\",\"F_INDICATORGROUPSET_DELETE\",\"F_USER_DELETE_WITHIN_MANAGED_GROUP\",\"F_ADD_TRACKED_ENTITY_FORM\",\"M_dhis-web-scheduler\",\"F_OPTIONGROUP_PUBLIC_ADD\",\"F_USERROLE_PRIVATE_ADD\",\"M_dhis-web-messaging\",\"M_dhis-web-maintenance-program\",\"F_EXTERNALFILERESOURCE_ADD\",\"F_MAP_EXTERNAL\",\"M_bna_widget\",\"F_DATAELEMENTGROUPSET_PUBLIC_ADD\",\"F_DATAELEMENTGROUP_DELETE\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_ADD\",\"F_RELATIONSHIP_ADD\",\"F_ORGUNITGROUP_PRIVATE_ADD\",\"F_DATAELEMENTGROUP_PUBLIC_ADD\",\"F_USER_GROUPS_READ_ONLY_ADD_MEMBERS\",\"F_LOCALE_DELETE\",\"F_PREDICTOR_RUN\",\"F_DATAELEMENT_DELETE\",\"F_OPTIONGROUP_DELETE\",\"F_LEGEND_SET_PRIVATE_ADD\",\"F_PROGRAMSTAGE_DELETE\",\"F_ATTRIBUTE_PUBLIC_ADD\",\"F_TRACKED_ENTITY_FORM_DELETE\",\"F_USERROLE_DELETE\",\"F_DOCUMENT_DELETE\",\"F_ORGUNITGROUPSET_DELETE\",\"M_dhis-web-translations\",\"M_dhis-web-sms\",\"F_SCHEDULING_CASE_AGGREGATE_QUERY_BUILDER\",\"F_PROGRAM_DELETE\",\"F_VALIDATIONRULE_DELETE\",\"F_PROGRAMDATAELEMENT_ADD\",\"M_dhis-web-mobile\",\"F_ACTIVITY_PLAN\",\"F_RELATIONSHIPTYPE_PUBLIC_ADD\",\"F_PREDICTOR_ADD\",\"F_SQLVIEW_PRIVATE_ADD\",\"F_EXPORT_DATA\",\"F_OAUTH2_CLIENT_MANAGE\",\"F_EVENT_VISUALIZATION_PUBLIC_ADD\",\"F_ORGUNITGROUP_PUBLIC_ADD\",\"F_APPROVE_DATA_LOWER_LEVELS\",\"M_Social_Media_Video\",\"F_OPTIONSET_PUBLIC_ADD\",\"F_EVENTCHART_EXTERNAL\",\"M_dhis-web-dataentry\",\"F_PROGRAM_TRACKING_SEARCH\",\"M_dhis-web-maintenance-dataset\",\"F_USERROLE_LIST\",\"M_dhis-web-import-export\",\"M_dhis-web-caseentry\",\"F_USERROLE_PUBLIC_ADD\",\"M_dhis-web-importexport\",\"M_InterpretationsTest\",\"F_ORGUNITGROUPSET_PUBLIC_ADD\",\"F_SQLVIEW_EXTERNAL\",\"F_REPORT_DELETE\",\"F_DASHBOARD_PUBLIC_ADD\",\"F_CONSTANT_DELETE\",\"M_dhis-web-maintenance-user\",\"F_PREDICTOR_DELETE\",\"M_dhis-web-data-visualizer\",\"F_DATASET_PRIVATE_ADD\",\"F_EVENTREPORT_PUBLIC_ADD\",\"F_PROGRAMSTAGE_SECTION_DELETE\",\"F_TRACKED_ENTITY_UPDATE\",\"F_CATEGORY_OPTION_GROUP_SET_PUBLIC_ADD\",\"F_TRACKED_ENTITY_INSTANCE_DASHBOARD\",\"F_METADATA_MANAGE\",\"F_ANALYTICSTABLEHOOK_DELETE\",\"F_UNCOMPLETE_EVENT\",\"M_dhis-web-sms-configuration\",\"M_dhis-web-interpretation\",\"F_LEGEND_DELETE\",\"M_Custom_Js_Css\",\"F_PROGRAM_INDICATOR_MANAGEMENT\",\"F_ANONYMOUS_DATA_ENTRY\",\"F_MAP_PUBLIC_ADD\",\"F_PROGRAM_VALIDATION\",\"F_SCHEDULING_ADMIN\",\"F_TRACKED_ENTITY_COMMENT_DELETE\",\"F_DATAELEMENT_MINMAX_DELETE\",\"F_MOBILE_SETTINGS\",\"F_PREDICTORGROUP_ADD\",\"F_REPORT_PRIVATE_ADD\",\"F_VALIDATIONRULEGROUP_PRIVATE_ADD\",\"F_PUSH_ANALYSIS_DELETE\",\"F_REPLICATE_USER\",\"F_DATAVALUE_ADD\",\"M_dhis-web-maintenance-organisationunit\",\"F_INSERT_CUSTOM_JS_CSS\",\"F_DATAELEMENTGROUPSET_DELETE\",\"F_SQLVIEW_DELETE\",\"F_ENROLLMENT_CASCADE_DELETE\",\"F_PROGRAMDATAELEMENT_DELETE\",\"F_TRACKED_ENTITY_INSTANCE_LIST\",\"F_INDICATORTYPE_ADD\",\"F_LEGEND_SET_DELETE\",\"F_VIEW_EVENT_ANALYTICS\",\"F_PROGRAMSTAGE_SECTION_MANAGEMENT\",\"F_IMPORT_EVENTS\",\"F_PROGRAM_INSTANCE_DELETE\",\"F_INDICATOR_PRIVATE_ADD\",\"F_TRACKED_ENTITY_INSTANCE_HISTORY\",\"F_FRED_CREATE\",\"F_EVENTCHART_PUBLIC_ADD\",\"F_PUSH_ANALYSIS_ADD\",\"M_dhis-web-event-visualizer\",\"F_USER_ADD\",\"F_EXTERNAL_MAP_LAYER_DELETE\",\"F_SYSTEM_SETTING\",\"F_ANALYTICSTABLEHOOK_ADD\",\"F_ATTRIBUTE_PRIVATE_ADD\",\"F_DOCUMENT_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_DELETE\",\"M_Easy_Visualization\",\"F_VISUALIZATION_PUBLIC_ADD\",\"F_DATAELEMENT_MINMAX_ADD\",\"M_dhis-web-data-quality\",\"M_dhis-web-pivot\",\"F_EVENTREPORT_EXTERNAL\",\"F_PROGRAM_RULE_UPDATE\",\"F_DATAELEMENT_PUBLIC_ADD\",\"M_dhis-web-validationrule\",\"F_CONSTANT_MANAGEMENT\",\"F_RUN_VALIDATION\",\"F_MANAGE_TICKETS\",\"F_GENERATE_BENEFICIARY_TABULAR_REPORT\",\"F_OPTIONGROUP_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_DELETE\",\"M_User_Administration\",\"M_dhis-web-settings\",\"F_IMPORT_DATA\",\"F_VIEW_DATABROWSER\",\"F_PERFORM_ANALYTICS_EXPLAIN\",\"F_MOBILE_DELETE_SMS\",\"F_OPTIONSET_MANAGEMENT\",\"F_SEND_MESSAGE\",\"F_PROGRAMSTAGE_ADD\",\"M_dhis-web-maps\",\"F_MINMAX_DATAELEMENT_DELETE\",\"F_ATTRIBUTE_DELETE\",\"F_OPTIONSET_DELETE\",\"F_PROGRAM_TRACKING_LIST\",\"M_dhis-web-dashboard\",\"M_dhis-web-data-administration\",\"F_ACCEPT_DATA_LOWER_LEVELS\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_DELETE\",\"F_OPTIONGROUPSET_PUBLIC_ADD\",\"M_dhis-web-capture\",\"F_PROGRAM_INDICATOR_GROUP_PUBLIC_ADD\",\"F_CATEGORY_DELETE\",\"F_COLOR_SET_DELETE\",\"M_dhis-web-app-management\",\"F_INDICATORTYPE_DELETE\",\"F_NAME_BASED_DATA_ENTRY\",\"F_INDICATORGROUP_PRIVATE_ADD\",\"F_FRED_DELETE\",\"F_VALIDATIONCRITERIA_DELETE\",\"F_PROGRAM_STAGE_INSTANCE_SEARCH\"],\"dataSets\":[\"Nyh6laLdBEJ\",\"j38YW1Am7he\",\"aLpVgfXiz0f\",\"YFTk3VdO9av\",\"Rl58JxmKJo2\",\"eZDhcZi6FLP\",\"N4fIX1HL3TQ\",\"EDzMBk0RRji\",\"TuL8IOPzpHh\",\"ce7DSxx5H2I\",\"EKWVBc5C0ms\",\"PLq9sJluXvc\",\"rsyjyJmYD4J\",\"ULowA8V3ucd\",\"QX4ZTUbOt3a\",\"pBOMPrpg1QX\",\"OsPTWNqq26W\",\"V8MHeZHIrcP\",\"YZhd4nu3mzY\",\"Y8gAn9DfAGU\",\"vc6nF5yZsPR\",\"Lpw6GcnTrmS\",\"lyLU2wR22tC\",\"VTdjfLXXmoi\",\"SF8FDSqw30D\",\"BfMAe6Itzgt\"],\"userCredentials\":{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"externalAuth\":false,\"twoFA\":false,\"passwordLastUpdated\":\"2014-12-18T20:56:05.264\",\"cogsDimensionConstraints\":[],\"catDimensionConstraints\":[],\"previousPasswords\":[],\"lastLogin\":\"2023-03-01T08:44:11.597\",\"selfRegistered\":false,\"invitation\":false,\"disabled\":false,\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}]}}", - "{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"surname\":\"Traore\",\"firstName\":\"John\",\"employer\":\"DHIS\",\"languages\":\"English\",\"gender\":\"gender_male\",\"jobTitle\":\"Super user\",\"created\":\"2013-04-18T17:15:08.407\",\"lastUpdated\":\"2023-03-01T08:44:26.785\",\"dataViewOrganisationUnits\":[],\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userGroupAccesses\":[],\"userAccesses\":[],\"userGroups\":[{\"id\":\"Kk12LkEWtXp\"},{\"id\":\"M1Qre0247G3\"},{\"id\":\"NTC8GjJ7p8P\"},{\"id\":\"B6JNeAQ6akX\"},{\"id\":\"wl5cDMuUhmF\"},{\"id\":\"QYrzIjSfI8z\"},{\"id\":\"lFHP5lLkzVr\"},{\"id\":\"jvrEwEJ2yZn\"},{\"id\":\"vAvEltyXGbD\"},{\"id\":\"w900PX10L7O\"},{\"id\":\"GogLpGmkL0g\"},{\"id\":\"vRoAruMnNpB\"},{\"id\":\"z1gNAf2zUxZ\"},{\"id\":\"gXpmQO6eEOo\"},{\"id\":\"tH0GcNZZ1vW\"},{\"id\":\"H9XnHoWRKCg\"}],\"translations\":[],\"teiSearchOrganisationUnits\":[],\"organisationUnits\":[{\"id\":\"ImspTQPwCqd\"}],\"externalAccess\":false,\"displayName\":\"John Traore\",\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"name\":\"John Traore\",\"email\":\"dummy@dhis2.org\",\"introduction\":\"I am the super user of DHIS 2\",\"birthday\":\"1971-04-08T00:00:00.000\",\"nationality\":\"Sierra Leone\",\"education\":\"Master of super using\",\"interests\":\"Football, swimming, singing, dancing\",\"whatsApp\":\"+123123123123\",\"facebookMessenger\":\"john.traore\",\"skype\":\"john.traore\",\"telegram\":\"john.traore\",\"twitter\":\"john.traore\",\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}],\"settings\":{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false},\"programs\":[\"uy2gU8kT1jF\",\"ur1Edk5Oe2n\",\"MoUd5BTQ3lY\",\"lxAQ7Zs9VYR\",\"IpHINAT79UW\",\"kla3mAPgvCH\",\"qDkgAbB5Jlk\",\"VBqh0ynB2wv\",\"bMcwwoVnbSR\",\"q04UBOqq3rp\",\"eBAyeGv0exc\",\"M3xtLkYBlKI\",\"fDd25txQckK\",\"WSGAb5XwJ3Y\"],\"authorities\":[\"F_PROGRAM_INDICATOR_PUBLIC_ADD\",\"F_SQLVIEW_EXECUTE\",\"F_USER_VIEW\",\"F_GENERATE_MIN_MAX_VALUES\",\"F_VALIDATIONRULE_PUBLIC_ADD\",\"F_CATEGORY_PRIVATE_ADD\",\"F_INDICATORGROUPSET_PUBLIC_ADD\",\"F_DATAVALUE_DELETE\",\"F_EXTERNAL_MAP_LAYER_PRIVATE_ADD\",\"F_RELATIONSHIPTYPE_DELETE\",\"F_CATEGORY_OPTION_PRIVATE_ADD\",\"F_SINGLE_EVENT_DATA_ENTRY\",\"F_CATEGORY_OPTION_GROUP_PUBLIC_ADD\",\"F_GIS_ADMIN\",\"M_dhis-web-event-capture\",\"F_SEND_EMAIL\",\"M_dhis-web-aggregate-data-entry\",\"F_ORGUNITGROUPSET_PRIVATE_ADD\",\"F_INDICATOR_DELETE\",\"M_dhis-web-event-reports\",\"F_VIEW_UNAPPROVED_DATA\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW\",\"F_TRACKED_ENTITY_INSTANCE_CHANGE_LOCATION\",\"F_OPTIONGROUPSET_DELETE\",\"F_USERGROUP_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_PRIVATE_ADD\",\"F_DOCUMENT_EXTERNAL\",\"F_PROGRAM_TRACKING_MANAGEMENT\",\"F_TRACKED_ENTITY_ATTRIBUTE_PUBLIC_ADD\",\"F_GENERATE_PROGRAM_SUMMARY_REPORT\",\"F_PROGRAM_INDICATOR_DELETE\",\"F_MOBILE_SENDSMS\",\"F_TRACKED_ENTITY_ADD\",\"F_TRACKED_ENTITY_MANAGEMENT\",\"F_RELATIONSHIP_DELETE\",\"F_VALIDATIONRULEGROUP_PUBLIC_ADD\",\"F_REPORT_EXTERNAL\",\"F_DOCUMENT_PRIVATE_ADD\",\"M_dhis-web-reports\",\"F_TRACKED_ENTITY_DELETE\",\"F_USERGROUP_DELETE\",\"F_PROGRAM_PRIVATE_ADD\",\"F_CATEGORY_COMBO_PRIVATE_ADD\",\"F_SCHEDULING_SEND_MESSAGE\",\"F_EXTERNAL_MAP_LAYER_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_DELETE\",\"F_ORGANISATIONUNIT_MOVE\",\"M_dhis-web-usage-analytics\",\"F_COLOR_DELETE\",\"F_INDICATORGROUP_DELETE\",\"F_ORGANISATIONUNIT_DELETE\",\"F_PROGRAM_RULE_ADD\",\"M_dhis-web-light\",\"F_OPTIONGROUPSET_PRIVATE_ADD\",\"F_DATA_MART_ADMIN\",\"M_dhis-web-maintenance-mobile\",\"F_DATASET_PUBLIC_ADD\",\"F_CATEGORY_COMBO_DELETE\",\"F_SECTION_DELETE\",\"F_USER_DELETE\",\"F_INDICATORGROUPSET_PRIVATE_ADD\",\"F_PROGRAM_INDICATOR_PRIVATE_ADD\",\"F_METADATA_IMPORT\",\"M_dhis-web-maintenance-appmanager\",\"F_EXPORT_EVENTS\",\"M_dhis-web-maintenance-settings\",\"F_SQLVIEW_PUBLIC_ADD\",\"F_PERFORM_MAINTENANCE\",\"F_COLOR_SET_ADD\",\"F_PROGRAM_STAGE_INSTANCE_DELETE\",\"F_METADATA_EXPORT\",\"F_MINMAX_DATAELEMENT_ADD\",\"F_PROGRAMSTAGE_SECTION_ADD\",\"F_DATAELEMENTGROUP_PRIVATE_ADD\",\"F_VALIDATIONRULE_PRIVATE_ADD\",\"F_APPROVE_DATA\",\"M_dhis-web-mapping\",\"F_DATAELEMENT_PRIVATE_ADD\",\"F_VALIDATIONCRITERIA_ADD\",\"F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS\",\"F_IGNORE_TRACKER_REQUIRED_VALUE_VALIDATION\",\"F_PROGRAM_PUBLIC_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_DELETE\",\"F_USER_ADD_WITHIN_MANAGED_GROUP\",\"M_Web_Portal\",\"F_ORGANISATIONUNIT_ADD\",\"M_dhis-web-user\",\"F_LEGEND_SET_PUBLIC_ADD\",\"F_CONSTANT_ADD\",\"F_PREDICTORGROUP_DELETE\",\"F_TRACKED_ENTITY_COMMENT_ADD\",\"F_TRACKED_ENTITY_INSTANCE_MANAGEMENT\",\"M_dhis-web-visualizer\",\"F_INDICATOR_PUBLIC_ADD\",\"F_INDICATORGROUP_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_PRIVATE_ADD\",\"M_dhis-web-maintenance\",\"M_dhis-web-approval\",\"F_PROGRAM_RULE_MANAGEMENT\",\"F_TEI_CASCADE_DELETE\",\"F_FRED_UPDATE\",\"F_VISUALIZATION_EXTERNAL\",\"M_dhis-web-cache-cleaner\",\"F_EDIT_EXPIRED\",\"F_ACCESS_TRACKED_ENTITY_ATTRIBUTES\",\"F_PROGRAM_DASHBOARD_CONFIG_ADMIN\",\"F_EVENT_VISUALIZATION_EXTERNAL\",\"F_ORGANISATIONUNITLEVEL_UPDATE\",\"F_CATEGORY_OPTION_PUBLIC_ADD\",\"M_dhis-web-datastore\",\"F_CATEGORY_OPTION_DELETE\",\"M_Data_Table\",\"M_dhis-web-menu-management\",\"F_REPORT_PUBLIC_ADD\",\"F_VALIDATIONRULEGROUP_DELETE\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_ADD\",\"F_RELATIONSHIP_MANAGEMENT\",\"F_COLOR_ADD\",\"F_OPTIONSET_PRIVATE_ADD\",\"F_PROGRAM_RULE_DELETE\",\"F_GENERATE_STATISTICAL_PROGRAM_REPORT\",\"F_ORGUNITGROUP_DELETE\",\"F_DATAELEMENTGROUPSET_PRIVATE_ADD\",\"M_dhis-web-tracker-capture\",\"F_LOCALE_ADD\",\"F_LEGEND_ADD\",\"F_CATEGORY_OPTION_GROUP_PRIVATE_ADD\",\"F_PROGRAM_INSTANCE_MANAGEMENT\",\"M_dhis-web-reporting\",\"F_CATEGORY_PUBLIC_ADD\",\"F_SECTION_ADD\",\"F_CATEGORY_COMBO_PUBLIC_ADD\",\"M_dhis-web-maintenance-datadictionary\",\"F_DATASET_DELETE\",\"F_INDICATORGROUPSET_DELETE\",\"F_USER_DELETE_WITHIN_MANAGED_GROUP\",\"F_ADD_TRACKED_ENTITY_FORM\",\"M_dhis-web-scheduler\",\"F_OPTIONGROUP_PUBLIC_ADD\",\"F_USERROLE_PRIVATE_ADD\",\"M_dhis-web-messaging\",\"M_dhis-web-maintenance-program\",\"F_EXTERNALFILERESOURCE_ADD\",\"F_MAP_EXTERNAL\",\"M_bna_widget\",\"F_DATAELEMENTGROUPSET_PUBLIC_ADD\",\"F_DATAELEMENTGROUP_DELETE\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_ADD\",\"F_RELATIONSHIP_ADD\",\"F_ORGUNITGROUP_PRIVATE_ADD\",\"F_DATAELEMENTGROUP_PUBLIC_ADD\",\"F_USER_GROUPS_READ_ONLY_ADD_MEMBERS\",\"F_LOCALE_DELETE\",\"F_PREDICTOR_RUN\",\"F_DATAELEMENT_DELETE\",\"F_OPTIONGROUP_DELETE\",\"F_LEGEND_SET_PRIVATE_ADD\",\"F_PROGRAMSTAGE_DELETE\",\"F_ATTRIBUTE_PUBLIC_ADD\",\"F_TRACKED_ENTITY_FORM_DELETE\",\"F_USERROLE_DELETE\",\"F_DOCUMENT_DELETE\",\"F_ORGUNITGROUPSET_DELETE\",\"M_dhis-web-translations\",\"M_dhis-web-sms\",\"F_SCHEDULING_CASE_AGGREGATE_QUERY_BUILDER\",\"F_PROGRAM_DELETE\",\"F_VALIDATIONRULE_DELETE\",\"F_PROGRAMDATAELEMENT_ADD\",\"M_dhis-web-mobile\",\"F_ACTIVITY_PLAN\",\"F_RELATIONSHIPTYPE_PUBLIC_ADD\",\"F_PREDICTOR_ADD\",\"F_SQLVIEW_PRIVATE_ADD\",\"F_EXPORT_DATA\",\"F_OAUTH2_CLIENT_MANAGE\",\"F_EVENT_VISUALIZATION_PUBLIC_ADD\",\"F_ORGUNITGROUP_PUBLIC_ADD\",\"F_APPROVE_DATA_LOWER_LEVELS\",\"M_Social_Media_Video\",\"F_OPTIONSET_PUBLIC_ADD\",\"F_EVENTCHART_EXTERNAL\",\"M_dhis-web-dataentry\",\"F_PROGRAM_TRACKING_SEARCH\",\"M_dhis-web-maintenance-dataset\",\"F_USERROLE_LIST\",\"M_dhis-web-import-export\",\"M_dhis-web-caseentry\",\"F_USERROLE_PUBLIC_ADD\",\"M_dhis-web-importexport\",\"M_InterpretationsTest\",\"F_ORGUNITGROUPSET_PUBLIC_ADD\",\"F_SQLVIEW_EXTERNAL\",\"F_REPORT_DELETE\",\"F_DASHBOARD_PUBLIC_ADD\",\"F_CONSTANT_DELETE\",\"M_dhis-web-maintenance-user\",\"F_PREDICTOR_DELETE\",\"M_dhis-web-data-visualizer\",\"F_DATASET_PRIVATE_ADD\",\"F_EVENTREPORT_PUBLIC_ADD\",\"F_PROGRAMSTAGE_SECTION_DELETE\",\"F_TRACKED_ENTITY_UPDATE\",\"F_CATEGORY_OPTION_GROUP_SET_PUBLIC_ADD\",\"F_TRACKED_ENTITY_INSTANCE_DASHBOARD\",\"F_METADATA_MANAGE\",\"F_ANALYTICSTABLEHOOK_DELETE\",\"F_UNCOMPLETE_EVENT\",\"M_dhis-web-sms-configuration\",\"M_dhis-web-interpretation\",\"F_LEGEND_DELETE\",\"M_Custom_Js_Css\",\"F_PROGRAM_INDICATOR_MANAGEMENT\",\"F_ANONYMOUS_DATA_ENTRY\",\"F_MAP_PUBLIC_ADD\",\"F_PROGRAM_VALIDATION\",\"F_SCHEDULING_ADMIN\",\"F_TRACKED_ENTITY_COMMENT_DELETE\",\"F_DATAELEMENT_MINMAX_DELETE\",\"F_MOBILE_SETTINGS\",\"F_PREDICTORGROUP_ADD\",\"F_REPORT_PRIVATE_ADD\",\"F_VALIDATIONRULEGROUP_PRIVATE_ADD\",\"F_PUSH_ANALYSIS_DELETE\",\"F_REPLICATE_USER\",\"F_DATAVALUE_ADD\",\"M_dhis-web-maintenance-organisationunit\",\"F_INSERT_CUSTOM_JS_CSS\",\"F_DATAELEMENTGROUPSET_DELETE\",\"F_SQLVIEW_DELETE\",\"F_ENROLLMENT_CASCADE_DELETE\",\"F_PROGRAMDATAELEMENT_DELETE\",\"F_TRACKED_ENTITY_INSTANCE_LIST\",\"F_INDICATORTYPE_ADD\",\"F_LEGEND_SET_DELETE\",\"F_VIEW_EVENT_ANALYTICS\",\"F_PROGRAMSTAGE_SECTION_MANAGEMENT\",\"F_IMPORT_EVENTS\",\"F_PROGRAM_INSTANCE_DELETE\",\"F_INDICATOR_PRIVATE_ADD\",\"F_TRACKED_ENTITY_INSTANCE_HISTORY\",\"F_FRED_CREATE\",\"F_EVENTCHART_PUBLIC_ADD\",\"F_PUSH_ANALYSIS_ADD\",\"M_dhis-web-event-visualizer\",\"F_USER_ADD\",\"F_EXTERNAL_MAP_LAYER_DELETE\",\"F_SYSTEM_SETTING\",\"F_ANALYTICSTABLEHOOK_ADD\",\"F_ATTRIBUTE_PRIVATE_ADD\",\"F_DOCUMENT_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_DELETE\",\"M_Easy_Visualization\",\"F_VISUALIZATION_PUBLIC_ADD\",\"F_DATAELEMENT_MINMAX_ADD\",\"M_dhis-web-data-quality\",\"M_dhis-web-pivot\",\"F_EVENTREPORT_EXTERNAL\",\"F_PROGRAM_RULE_UPDATE\",\"F_DATAELEMENT_PUBLIC_ADD\",\"M_dhis-web-validationrule\",\"F_CONSTANT_MANAGEMENT\",\"F_RUN_VALIDATION\",\"F_MANAGE_TICKETS\",\"F_GENERATE_BENEFICIARY_TABULAR_REPORT\",\"F_OPTIONGROUP_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_DELETE\",\"M_User_Administration\",\"M_dhis-web-settings\",\"F_IMPORT_DATA\",\"F_VIEW_DATABROWSER\",\"F_PERFORM_ANALYTICS_EXPLAIN\",\"F_MOBILE_DELETE_SMS\",\"F_OPTIONSET_MANAGEMENT\",\"F_SEND_MESSAGE\",\"F_PROGRAMSTAGE_ADD\",\"M_dhis-web-maps\",\"F_MINMAX_DATAELEMENT_DELETE\",\"F_ATTRIBUTE_DELETE\",\"F_OPTIONSET_DELETE\",\"F_PROGRAM_TRACKING_LIST\",\"M_dhis-web-dashboard\",\"M_dhis-web-data-administration\",\"F_ACCEPT_DATA_LOWER_LEVELS\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_DELETE\",\"F_OPTIONGROUPSET_PUBLIC_ADD\",\"M_dhis-web-capture\",\"F_PROGRAM_INDICATOR_GROUP_PUBLIC_ADD\",\"F_CATEGORY_DELETE\",\"F_COLOR_SET_DELETE\",\"M_dhis-web-app-management\",\"F_INDICATORTYPE_DELETE\",\"F_NAME_BASED_DATA_ENTRY\",\"F_INDICATORGROUP_PRIVATE_ADD\",\"F_FRED_DELETE\",\"F_VALIDATIONCRITERIA_DELETE\",\"F_PROGRAM_STAGE_INSTANCE_SEARCH\"],\"dataSets\":[\"Nyh6laLdBEJ\",\"j38YW1Am7he\",\"aLpVgfXiz0f\",\"YFTk3VdO9av\",\"Rl58JxmKJo2\",\"eZDhcZi6FLP\",\"N4fIX1HL3TQ\",\"EDzMBk0RRji\",\"TuL8IOPzpHh\",\"ce7DSxx5H2I\",\"EKWVBc5C0ms\",\"PLq9sJluXvc\",\"rsyjyJmYD4J\",\"ULowA8V3ucd\",\"QX4ZTUbOt3a\",\"pBOMPrpg1QX\",\"OsPTWNqq26W\",\"V8MHeZHIrcP\",\"YZhd4nu3mzY\",\"Y8gAn9DfAGU\",\"vc6nF5yZsPR\",\"Lpw6GcnTrmS\",\"lyLU2wR22tC\",\"VTdjfLXXmoi\",\"SF8FDSqw30D\",\"BfMAe6Itzgt\"],\"userCredentials\":{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"externalAuth\":false,\"twoFA\":false,\"passwordLastUpdated\":\"2014-12-18T20:56:05.264\",\"cogsDimensionConstraints\":[],\"catDimensionConstraints\":[],\"previousPasswords\":[],\"lastLogin\":\"2023-03-01T08:44:26.783\",\"selfRegistered\":false,\"invitation\":false,\"disabled\":false,\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}]}}", - "{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"surname\":\"Traore\",\"firstName\":\"John\",\"employer\":\"DHIS\",\"languages\":\"English\",\"gender\":\"gender_male\",\"jobTitle\":\"Super user\",\"created\":\"2013-04-18T17:15:08.407\",\"lastUpdated\":\"2023-03-01T08:44:39.438\",\"dataViewOrganisationUnits\":[],\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userGroupAccesses\":[],\"userAccesses\":[],\"userGroups\":[{\"id\":\"Kk12LkEWtXp\"},{\"id\":\"M1Qre0247G3\"},{\"id\":\"NTC8GjJ7p8P\"},{\"id\":\"B6JNeAQ6akX\"},{\"id\":\"wl5cDMuUhmF\"},{\"id\":\"QYrzIjSfI8z\"},{\"id\":\"lFHP5lLkzVr\"},{\"id\":\"jvrEwEJ2yZn\"},{\"id\":\"vAvEltyXGbD\"},{\"id\":\"w900PX10L7O\"},{\"id\":\"GogLpGmkL0g\"},{\"id\":\"vRoAruMnNpB\"},{\"id\":\"z1gNAf2zUxZ\"},{\"id\":\"gXpmQO6eEOo\"},{\"id\":\"tH0GcNZZ1vW\"},{\"id\":\"H9XnHoWRKCg\"}],\"translations\":[],\"teiSearchOrganisationUnits\":[],\"organisationUnits\":[{\"id\":\"ImspTQPwCqd\"}],\"externalAccess\":false,\"displayName\":\"John Traore\",\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"name\":\"John Traore\",\"email\":\"dummy@dhis2.org\",\"introduction\":\"I am the super user of DHIS 2\",\"birthday\":\"1971-04-08T00:00:00.000\",\"nationality\":\"Sierra Leone\",\"education\":\"Master of super using\",\"interests\":\"Football, swimming, singing, dancing\",\"whatsApp\":\"+123123123123\",\"facebookMessenger\":\"john.traore\",\"skype\":\"john.traore\",\"telegram\":\"john.traore\",\"twitter\":\"john.traore\",\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}],\"settings\":{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false},\"programs\":[\"uy2gU8kT1jF\",\"ur1Edk5Oe2n\",\"MoUd5BTQ3lY\",\"lxAQ7Zs9VYR\",\"IpHINAT79UW\",\"kla3mAPgvCH\",\"qDkgAbB5Jlk\",\"VBqh0ynB2wv\",\"bMcwwoVnbSR\",\"q04UBOqq3rp\",\"eBAyeGv0exc\",\"M3xtLkYBlKI\",\"fDd25txQckK\",\"WSGAb5XwJ3Y\"],\"authorities\":[\"F_PROGRAM_INDICATOR_PUBLIC_ADD\",\"F_SQLVIEW_EXECUTE\",\"F_USER_VIEW\",\"F_GENERATE_MIN_MAX_VALUES\",\"F_VALIDATIONRULE_PUBLIC_ADD\",\"F_CATEGORY_PRIVATE_ADD\",\"F_INDICATORGROUPSET_PUBLIC_ADD\",\"F_DATAVALUE_DELETE\",\"F_EXTERNAL_MAP_LAYER_PRIVATE_ADD\",\"F_RELATIONSHIPTYPE_DELETE\",\"F_CATEGORY_OPTION_PRIVATE_ADD\",\"F_SINGLE_EVENT_DATA_ENTRY\",\"F_CATEGORY_OPTION_GROUP_PUBLIC_ADD\",\"F_GIS_ADMIN\",\"M_dhis-web-event-capture\",\"F_SEND_EMAIL\",\"M_dhis-web-aggregate-data-entry\",\"F_ORGUNITGROUPSET_PRIVATE_ADD\",\"F_INDICATOR_DELETE\",\"M_dhis-web-event-reports\",\"F_VIEW_UNAPPROVED_DATA\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW\",\"F_TRACKED_ENTITY_INSTANCE_CHANGE_LOCATION\",\"F_OPTIONGROUPSET_DELETE\",\"F_USERGROUP_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_PRIVATE_ADD\",\"F_DOCUMENT_EXTERNAL\",\"F_PROGRAM_TRACKING_MANAGEMENT\",\"F_TRACKED_ENTITY_ATTRIBUTE_PUBLIC_ADD\",\"F_GENERATE_PROGRAM_SUMMARY_REPORT\",\"F_PROGRAM_INDICATOR_DELETE\",\"F_MOBILE_SENDSMS\",\"F_TRACKED_ENTITY_ADD\",\"F_TRACKED_ENTITY_MANAGEMENT\",\"F_RELATIONSHIP_DELETE\",\"F_VALIDATIONRULEGROUP_PUBLIC_ADD\",\"F_REPORT_EXTERNAL\",\"F_DOCUMENT_PRIVATE_ADD\",\"M_dhis-web-reports\",\"F_TRACKED_ENTITY_DELETE\",\"F_USERGROUP_DELETE\",\"F_PROGRAM_PRIVATE_ADD\",\"F_CATEGORY_COMBO_PRIVATE_ADD\",\"F_SCHEDULING_SEND_MESSAGE\",\"F_EXTERNAL_MAP_LAYER_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_DELETE\",\"F_ORGANISATIONUNIT_MOVE\",\"M_dhis-web-usage-analytics\",\"F_COLOR_DELETE\",\"F_INDICATORGROUP_DELETE\",\"F_ORGANISATIONUNIT_DELETE\",\"F_PROGRAM_RULE_ADD\",\"M_dhis-web-light\",\"F_OPTIONGROUPSET_PRIVATE_ADD\",\"F_DATA_MART_ADMIN\",\"M_dhis-web-maintenance-mobile\",\"F_DATASET_PUBLIC_ADD\",\"F_CATEGORY_COMBO_DELETE\",\"F_SECTION_DELETE\",\"F_USER_DELETE\",\"F_INDICATORGROUPSET_PRIVATE_ADD\",\"F_PROGRAM_INDICATOR_PRIVATE_ADD\",\"F_METADATA_IMPORT\",\"M_dhis-web-maintenance-appmanager\",\"F_EXPORT_EVENTS\",\"M_dhis-web-maintenance-settings\",\"F_SQLVIEW_PUBLIC_ADD\",\"F_PERFORM_MAINTENANCE\",\"F_COLOR_SET_ADD\",\"F_PROGRAM_STAGE_INSTANCE_DELETE\",\"F_METADATA_EXPORT\",\"F_MINMAX_DATAELEMENT_ADD\",\"F_PROGRAMSTAGE_SECTION_ADD\",\"F_DATAELEMENTGROUP_PRIVATE_ADD\",\"F_VALIDATIONRULE_PRIVATE_ADD\",\"F_APPROVE_DATA\",\"M_dhis-web-mapping\",\"F_DATAELEMENT_PRIVATE_ADD\",\"F_VALIDATIONCRITERIA_ADD\",\"F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS\",\"F_IGNORE_TRACKER_REQUIRED_VALUE_VALIDATION\",\"F_PROGRAM_PUBLIC_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_DELETE\",\"F_USER_ADD_WITHIN_MANAGED_GROUP\",\"M_Web_Portal\",\"F_ORGANISATIONUNIT_ADD\",\"M_dhis-web-user\",\"F_LEGEND_SET_PUBLIC_ADD\",\"F_CONSTANT_ADD\",\"F_PREDICTORGROUP_DELETE\",\"F_TRACKED_ENTITY_COMMENT_ADD\",\"F_TRACKED_ENTITY_INSTANCE_MANAGEMENT\",\"M_dhis-web-visualizer\",\"F_INDICATOR_PUBLIC_ADD\",\"F_INDICATORGROUP_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_PRIVATE_ADD\",\"M_dhis-web-maintenance\",\"M_dhis-web-approval\",\"F_PROGRAM_RULE_MANAGEMENT\",\"F_TEI_CASCADE_DELETE\",\"F_FRED_UPDATE\",\"F_VISUALIZATION_EXTERNAL\",\"M_dhis-web-cache-cleaner\",\"F_EDIT_EXPIRED\",\"F_ACCESS_TRACKED_ENTITY_ATTRIBUTES\",\"F_PROGRAM_DASHBOARD_CONFIG_ADMIN\",\"F_EVENT_VISUALIZATION_EXTERNAL\",\"F_ORGANISATIONUNITLEVEL_UPDATE\",\"F_CATEGORY_OPTION_PUBLIC_ADD\",\"M_dhis-web-datastore\",\"F_CATEGORY_OPTION_DELETE\",\"M_Data_Table\",\"M_dhis-web-menu-management\",\"F_REPORT_PUBLIC_ADD\",\"F_VALIDATIONRULEGROUP_DELETE\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_ADD\",\"F_RELATIONSHIP_MANAGEMENT\",\"F_COLOR_ADD\",\"F_OPTIONSET_PRIVATE_ADD\",\"F_PROGRAM_RULE_DELETE\",\"F_GENERATE_STATISTICAL_PROGRAM_REPORT\",\"F_ORGUNITGROUP_DELETE\",\"F_DATAELEMENTGROUPSET_PRIVATE_ADD\",\"M_dhis-web-tracker-capture\",\"F_LOCALE_ADD\",\"F_LEGEND_ADD\",\"F_CATEGORY_OPTION_GROUP_PRIVATE_ADD\",\"F_PROGRAM_INSTANCE_MANAGEMENT\",\"M_dhis-web-reporting\",\"F_CATEGORY_PUBLIC_ADD\",\"F_SECTION_ADD\",\"F_CATEGORY_COMBO_PUBLIC_ADD\",\"M_dhis-web-maintenance-datadictionary\",\"F_DATASET_DELETE\",\"F_INDICATORGROUPSET_DELETE\",\"F_USER_DELETE_WITHIN_MANAGED_GROUP\",\"F_ADD_TRACKED_ENTITY_FORM\",\"M_dhis-web-scheduler\",\"F_OPTIONGROUP_PUBLIC_ADD\",\"F_USERROLE_PRIVATE_ADD\",\"M_dhis-web-messaging\",\"M_dhis-web-maintenance-program\",\"F_EXTERNALFILERESOURCE_ADD\",\"F_MAP_EXTERNAL\",\"M_bna_widget\",\"F_DATAELEMENTGROUPSET_PUBLIC_ADD\",\"F_DATAELEMENTGROUP_DELETE\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_ADD\",\"F_RELATIONSHIP_ADD\",\"F_ORGUNITGROUP_PRIVATE_ADD\",\"F_DATAELEMENTGROUP_PUBLIC_ADD\",\"F_USER_GROUPS_READ_ONLY_ADD_MEMBERS\",\"F_LOCALE_DELETE\",\"F_PREDICTOR_RUN\",\"F_DATAELEMENT_DELETE\",\"F_OPTIONGROUP_DELETE\",\"F_LEGEND_SET_PRIVATE_ADD\",\"F_PROGRAMSTAGE_DELETE\",\"F_ATTRIBUTE_PUBLIC_ADD\",\"F_TRACKED_ENTITY_FORM_DELETE\",\"F_USERROLE_DELETE\",\"F_DOCUMENT_DELETE\",\"F_ORGUNITGROUPSET_DELETE\",\"M_dhis-web-translations\",\"M_dhis-web-sms\",\"F_SCHEDULING_CASE_AGGREGATE_QUERY_BUILDER\",\"F_PROGRAM_DELETE\",\"F_VALIDATIONRULE_DELETE\",\"F_PROGRAMDATAELEMENT_ADD\",\"M_dhis-web-mobile\",\"F_ACTIVITY_PLAN\",\"F_RELATIONSHIPTYPE_PUBLIC_ADD\",\"F_PREDICTOR_ADD\",\"F_SQLVIEW_PRIVATE_ADD\",\"F_EXPORT_DATA\",\"F_OAUTH2_CLIENT_MANAGE\",\"F_EVENT_VISUALIZATION_PUBLIC_ADD\",\"F_ORGUNITGROUP_PUBLIC_ADD\",\"F_APPROVE_DATA_LOWER_LEVELS\",\"M_Social_Media_Video\",\"F_OPTIONSET_PUBLIC_ADD\",\"F_EVENTCHART_EXTERNAL\",\"M_dhis-web-dataentry\",\"F_PROGRAM_TRACKING_SEARCH\",\"M_dhis-web-maintenance-dataset\",\"F_USERROLE_LIST\",\"M_dhis-web-import-export\",\"M_dhis-web-caseentry\",\"F_USERROLE_PUBLIC_ADD\",\"M_dhis-web-importexport\",\"M_InterpretationsTest\",\"F_ORGUNITGROUPSET_PUBLIC_ADD\",\"F_SQLVIEW_EXTERNAL\",\"F_REPORT_DELETE\",\"F_DASHBOARD_PUBLIC_ADD\",\"F_CONSTANT_DELETE\",\"M_dhis-web-maintenance-user\",\"F_PREDICTOR_DELETE\",\"M_dhis-web-data-visualizer\",\"F_DATASET_PRIVATE_ADD\",\"F_EVENTREPORT_PUBLIC_ADD\",\"F_PROGRAMSTAGE_SECTION_DELETE\",\"F_TRACKED_ENTITY_UPDATE\",\"F_CATEGORY_OPTION_GROUP_SET_PUBLIC_ADD\",\"F_TRACKED_ENTITY_INSTANCE_DASHBOARD\",\"F_METADATA_MANAGE\",\"F_ANALYTICSTABLEHOOK_DELETE\",\"F_UNCOMPLETE_EVENT\",\"M_dhis-web-sms-configuration\",\"M_dhis-web-interpretation\",\"F_LEGEND_DELETE\",\"M_Custom_Js_Css\",\"F_PROGRAM_INDICATOR_MANAGEMENT\",\"F_ANONYMOUS_DATA_ENTRY\",\"F_MAP_PUBLIC_ADD\",\"F_PROGRAM_VALIDATION\",\"F_SCHEDULING_ADMIN\",\"F_TRACKED_ENTITY_COMMENT_DELETE\",\"F_DATAELEMENT_MINMAX_DELETE\",\"F_MOBILE_SETTINGS\",\"F_PREDICTORGROUP_ADD\",\"F_REPORT_PRIVATE_ADD\",\"F_VALIDATIONRULEGROUP_PRIVATE_ADD\",\"F_PUSH_ANALYSIS_DELETE\",\"F_REPLICATE_USER\",\"F_DATAVALUE_ADD\",\"M_dhis-web-maintenance-organisationunit\",\"F_INSERT_CUSTOM_JS_CSS\",\"F_DATAELEMENTGROUPSET_DELETE\",\"F_SQLVIEW_DELETE\",\"F_ENROLLMENT_CASCADE_DELETE\",\"F_PROGRAMDATAELEMENT_DELETE\",\"F_TRACKED_ENTITY_INSTANCE_LIST\",\"F_INDICATORTYPE_ADD\",\"F_LEGEND_SET_DELETE\",\"F_VIEW_EVENT_ANALYTICS\",\"F_PROGRAMSTAGE_SECTION_MANAGEMENT\",\"F_IMPORT_EVENTS\",\"F_PROGRAM_INSTANCE_DELETE\",\"F_INDICATOR_PRIVATE_ADD\",\"F_TRACKED_ENTITY_INSTANCE_HISTORY\",\"F_FRED_CREATE\",\"F_EVENTCHART_PUBLIC_ADD\",\"F_PUSH_ANALYSIS_ADD\",\"M_dhis-web-event-visualizer\",\"F_USER_ADD\",\"F_EXTERNAL_MAP_LAYER_DELETE\",\"F_SYSTEM_SETTING\",\"F_ANALYTICSTABLEHOOK_ADD\",\"F_ATTRIBUTE_PRIVATE_ADD\",\"F_DOCUMENT_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_DELETE\",\"M_Easy_Visualization\",\"F_VISUALIZATION_PUBLIC_ADD\",\"F_DATAELEMENT_MINMAX_ADD\",\"M_dhis-web-data-quality\",\"M_dhis-web-pivot\",\"F_EVENTREPORT_EXTERNAL\",\"F_PROGRAM_RULE_UPDATE\",\"F_DATAELEMENT_PUBLIC_ADD\",\"M_dhis-web-validationrule\",\"F_CONSTANT_MANAGEMENT\",\"F_RUN_VALIDATION\",\"F_MANAGE_TICKETS\",\"F_GENERATE_BENEFICIARY_TABULAR_REPORT\",\"F_OPTIONGROUP_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_DELETE\",\"M_User_Administration\",\"M_dhis-web-settings\",\"F_IMPORT_DATA\",\"F_VIEW_DATABROWSER\",\"F_PERFORM_ANALYTICS_EXPLAIN\",\"F_MOBILE_DELETE_SMS\",\"F_OPTIONSET_MANAGEMENT\",\"F_SEND_MESSAGE\",\"F_PROGRAMSTAGE_ADD\",\"M_dhis-web-maps\",\"F_MINMAX_DATAELEMENT_DELETE\",\"F_ATTRIBUTE_DELETE\",\"F_OPTIONSET_DELETE\",\"F_PROGRAM_TRACKING_LIST\",\"M_dhis-web-dashboard\",\"M_dhis-web-data-administration\",\"F_ACCEPT_DATA_LOWER_LEVELS\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_DELETE\",\"F_OPTIONGROUPSET_PUBLIC_ADD\",\"M_dhis-web-capture\",\"F_PROGRAM_INDICATOR_GROUP_PUBLIC_ADD\",\"F_CATEGORY_DELETE\",\"F_COLOR_SET_DELETE\",\"M_dhis-web-app-management\",\"F_INDICATORTYPE_DELETE\",\"F_NAME_BASED_DATA_ENTRY\",\"F_INDICATORGROUP_PRIVATE_ADD\",\"F_FRED_DELETE\",\"F_VALIDATIONCRITERIA_DELETE\",\"F_PROGRAM_STAGE_INSTANCE_SEARCH\"],\"dataSets\":[\"Nyh6laLdBEJ\",\"j38YW1Am7he\",\"aLpVgfXiz0f\",\"YFTk3VdO9av\",\"Rl58JxmKJo2\",\"eZDhcZi6FLP\",\"N4fIX1HL3TQ\",\"EDzMBk0RRji\",\"TuL8IOPzpHh\",\"ce7DSxx5H2I\",\"EKWVBc5C0ms\",\"PLq9sJluXvc\",\"rsyjyJmYD4J\",\"ULowA8V3ucd\",\"QX4ZTUbOt3a\",\"pBOMPrpg1QX\",\"OsPTWNqq26W\",\"V8MHeZHIrcP\",\"YZhd4nu3mzY\",\"Y8gAn9DfAGU\",\"vc6nF5yZsPR\",\"Lpw6GcnTrmS\",\"lyLU2wR22tC\",\"VTdjfLXXmoi\",\"SF8FDSqw30D\",\"BfMAe6Itzgt\"],\"userCredentials\":{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"externalAuth\":false,\"twoFA\":false,\"passwordLastUpdated\":\"2014-12-18T20:56:05.264\",\"cogsDimensionConstraints\":[],\"catDimensionConstraints\":[],\"previousPasswords\":[],\"lastLogin\":\"2023-03-01T08:44:39.437\",\"selfRegistered\":false,\"invitation\":false,\"disabled\":false,\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}]}}", - "{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"surname\":\"Traore\",\"firstName\":\"John\",\"employer\":\"DHIS\",\"languages\":\"English\",\"gender\":\"gender_male\",\"jobTitle\":\"Super user\",\"created\":\"2013-04-18T17:15:08.407\",\"lastUpdated\":\"2023-03-01T08:44:51.840\",\"dataViewOrganisationUnits\":[],\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userGroupAccesses\":[],\"userAccesses\":[],\"userGroups\":[{\"id\":\"Kk12LkEWtXp\"},{\"id\":\"M1Qre0247G3\"},{\"id\":\"NTC8GjJ7p8P\"},{\"id\":\"B6JNeAQ6akX\"},{\"id\":\"wl5cDMuUhmF\"},{\"id\":\"QYrzIjSfI8z\"},{\"id\":\"lFHP5lLkzVr\"},{\"id\":\"jvrEwEJ2yZn\"},{\"id\":\"vAvEltyXGbD\"},{\"id\":\"w900PX10L7O\"},{\"id\":\"GogLpGmkL0g\"},{\"id\":\"vRoAruMnNpB\"},{\"id\":\"z1gNAf2zUxZ\"},{\"id\":\"gXpmQO6eEOo\"},{\"id\":\"tH0GcNZZ1vW\"},{\"id\":\"H9XnHoWRKCg\"}],\"translations\":[],\"teiSearchOrganisationUnits\":[],\"organisationUnits\":[{\"id\":\"ImspTQPwCqd\"}],\"externalAccess\":false,\"displayName\":\"John Traore\",\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"name\":\"John Traore\",\"email\":\"dummy@dhis2.org\",\"introduction\":\"I am the super user of DHIS 2\",\"birthday\":\"1971-04-08T00:00:00.000\",\"nationality\":\"Sierra Leone\",\"education\":\"Master of super using\",\"interests\":\"Football, swimming, singing, dancing\",\"whatsApp\":\"+123123123123\",\"facebookMessenger\":\"john.traore\",\"skype\":\"john.traore\",\"telegram\":\"john.traore\",\"twitter\":\"john.traore\",\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}],\"settings\":{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false},\"programs\":[\"uy2gU8kT1jF\",\"ur1Edk5Oe2n\",\"MoUd5BTQ3lY\",\"lxAQ7Zs9VYR\",\"IpHINAT79UW\",\"kla3mAPgvCH\",\"qDkgAbB5Jlk\",\"VBqh0ynB2wv\",\"bMcwwoVnbSR\",\"q04UBOqq3rp\",\"eBAyeGv0exc\",\"M3xtLkYBlKI\",\"fDd25txQckK\",\"WSGAb5XwJ3Y\"],\"authorities\":[\"F_PROGRAM_INDICATOR_PUBLIC_ADD\",\"F_SQLVIEW_EXECUTE\",\"F_USER_VIEW\",\"F_GENERATE_MIN_MAX_VALUES\",\"F_VALIDATIONRULE_PUBLIC_ADD\",\"F_CATEGORY_PRIVATE_ADD\",\"F_INDICATORGROUPSET_PUBLIC_ADD\",\"F_DATAVALUE_DELETE\",\"F_EXTERNAL_MAP_LAYER_PRIVATE_ADD\",\"F_RELATIONSHIPTYPE_DELETE\",\"F_CATEGORY_OPTION_PRIVATE_ADD\",\"F_SINGLE_EVENT_DATA_ENTRY\",\"F_CATEGORY_OPTION_GROUP_PUBLIC_ADD\",\"F_GIS_ADMIN\",\"M_dhis-web-event-capture\",\"F_SEND_EMAIL\",\"M_dhis-web-aggregate-data-entry\",\"F_ORGUNITGROUPSET_PRIVATE_ADD\",\"F_INDICATOR_DELETE\",\"M_dhis-web-event-reports\",\"F_VIEW_UNAPPROVED_DATA\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW\",\"F_TRACKED_ENTITY_INSTANCE_CHANGE_LOCATION\",\"F_OPTIONGROUPSET_DELETE\",\"F_USERGROUP_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_PRIVATE_ADD\",\"F_DOCUMENT_EXTERNAL\",\"F_PROGRAM_TRACKING_MANAGEMENT\",\"F_TRACKED_ENTITY_ATTRIBUTE_PUBLIC_ADD\",\"F_GENERATE_PROGRAM_SUMMARY_REPORT\",\"F_PROGRAM_INDICATOR_DELETE\",\"F_MOBILE_SENDSMS\",\"F_TRACKED_ENTITY_ADD\",\"F_TRACKED_ENTITY_MANAGEMENT\",\"F_RELATIONSHIP_DELETE\",\"F_VALIDATIONRULEGROUP_PUBLIC_ADD\",\"F_REPORT_EXTERNAL\",\"F_DOCUMENT_PRIVATE_ADD\",\"M_dhis-web-reports\",\"F_TRACKED_ENTITY_DELETE\",\"F_USERGROUP_DELETE\",\"F_PROGRAM_PRIVATE_ADD\",\"F_CATEGORY_COMBO_PRIVATE_ADD\",\"F_SCHEDULING_SEND_MESSAGE\",\"F_EXTERNAL_MAP_LAYER_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_DELETE\",\"F_ORGANISATIONUNIT_MOVE\",\"M_dhis-web-usage-analytics\",\"F_COLOR_DELETE\",\"F_INDICATORGROUP_DELETE\",\"F_ORGANISATIONUNIT_DELETE\",\"F_PROGRAM_RULE_ADD\",\"M_dhis-web-light\",\"F_OPTIONGROUPSET_PRIVATE_ADD\",\"F_DATA_MART_ADMIN\",\"M_dhis-web-maintenance-mobile\",\"F_DATASET_PUBLIC_ADD\",\"F_CATEGORY_COMBO_DELETE\",\"F_SECTION_DELETE\",\"F_USER_DELETE\",\"F_INDICATORGROUPSET_PRIVATE_ADD\",\"F_PROGRAM_INDICATOR_PRIVATE_ADD\",\"F_METADATA_IMPORT\",\"M_dhis-web-maintenance-appmanager\",\"F_EXPORT_EVENTS\",\"M_dhis-web-maintenance-settings\",\"F_SQLVIEW_PUBLIC_ADD\",\"F_PERFORM_MAINTENANCE\",\"F_COLOR_SET_ADD\",\"F_PROGRAM_STAGE_INSTANCE_DELETE\",\"F_METADATA_EXPORT\",\"F_MINMAX_DATAELEMENT_ADD\",\"F_PROGRAMSTAGE_SECTION_ADD\",\"F_DATAELEMENTGROUP_PRIVATE_ADD\",\"F_VALIDATIONRULE_PRIVATE_ADD\",\"F_APPROVE_DATA\",\"M_dhis-web-mapping\",\"F_DATAELEMENT_PRIVATE_ADD\",\"F_VALIDATIONCRITERIA_ADD\",\"F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS\",\"F_IGNORE_TRACKER_REQUIRED_VALUE_VALIDATION\",\"F_PROGRAM_PUBLIC_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_DELETE\",\"F_USER_ADD_WITHIN_MANAGED_GROUP\",\"M_Web_Portal\",\"F_ORGANISATIONUNIT_ADD\",\"M_dhis-web-user\",\"F_LEGEND_SET_PUBLIC_ADD\",\"F_CONSTANT_ADD\",\"F_PREDICTORGROUP_DELETE\",\"F_TRACKED_ENTITY_COMMENT_ADD\",\"F_TRACKED_ENTITY_INSTANCE_MANAGEMENT\",\"M_dhis-web-visualizer\",\"F_INDICATOR_PUBLIC_ADD\",\"F_INDICATORGROUP_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_PRIVATE_ADD\",\"M_dhis-web-maintenance\",\"M_dhis-web-approval\",\"F_PROGRAM_RULE_MANAGEMENT\",\"F_TEI_CASCADE_DELETE\",\"F_FRED_UPDATE\",\"F_VISUALIZATION_EXTERNAL\",\"M_dhis-web-cache-cleaner\",\"F_EDIT_EXPIRED\",\"F_ACCESS_TRACKED_ENTITY_ATTRIBUTES\",\"F_PROGRAM_DASHBOARD_CONFIG_ADMIN\",\"F_EVENT_VISUALIZATION_EXTERNAL\",\"F_ORGANISATIONUNITLEVEL_UPDATE\",\"F_CATEGORY_OPTION_PUBLIC_ADD\",\"M_dhis-web-datastore\",\"F_CATEGORY_OPTION_DELETE\",\"M_Data_Table\",\"M_dhis-web-menu-management\",\"F_REPORT_PUBLIC_ADD\",\"F_VALIDATIONRULEGROUP_DELETE\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_ADD\",\"F_RELATIONSHIP_MANAGEMENT\",\"F_COLOR_ADD\",\"F_OPTIONSET_PRIVATE_ADD\",\"F_PROGRAM_RULE_DELETE\",\"F_GENERATE_STATISTICAL_PROGRAM_REPORT\",\"F_ORGUNITGROUP_DELETE\",\"F_DATAELEMENTGROUPSET_PRIVATE_ADD\",\"M_dhis-web-tracker-capture\",\"F_LOCALE_ADD\",\"F_LEGEND_ADD\",\"F_CATEGORY_OPTION_GROUP_PRIVATE_ADD\",\"F_PROGRAM_INSTANCE_MANAGEMENT\",\"M_dhis-web-reporting\",\"F_CATEGORY_PUBLIC_ADD\",\"F_SECTION_ADD\",\"F_CATEGORY_COMBO_PUBLIC_ADD\",\"M_dhis-web-maintenance-datadictionary\",\"F_DATASET_DELETE\",\"F_INDICATORGROUPSET_DELETE\",\"F_USER_DELETE_WITHIN_MANAGED_GROUP\",\"F_ADD_TRACKED_ENTITY_FORM\",\"M_dhis-web-scheduler\",\"F_OPTIONGROUP_PUBLIC_ADD\",\"F_USERROLE_PRIVATE_ADD\",\"M_dhis-web-messaging\",\"M_dhis-web-maintenance-program\",\"F_EXTERNALFILERESOURCE_ADD\",\"F_MAP_EXTERNAL\",\"M_bna_widget\",\"F_DATAELEMENTGROUPSET_PUBLIC_ADD\",\"F_DATAELEMENTGROUP_DELETE\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_ADD\",\"F_RELATIONSHIP_ADD\",\"F_ORGUNITGROUP_PRIVATE_ADD\",\"F_DATAELEMENTGROUP_PUBLIC_ADD\",\"F_USER_GROUPS_READ_ONLY_ADD_MEMBERS\",\"F_LOCALE_DELETE\",\"F_PREDICTOR_RUN\",\"F_DATAELEMENT_DELETE\",\"F_OPTIONGROUP_DELETE\",\"F_LEGEND_SET_PRIVATE_ADD\",\"F_PROGRAMSTAGE_DELETE\",\"F_ATTRIBUTE_PUBLIC_ADD\",\"F_TRACKED_ENTITY_FORM_DELETE\",\"F_USERROLE_DELETE\",\"F_DOCUMENT_DELETE\",\"F_ORGUNITGROUPSET_DELETE\",\"M_dhis-web-translations\",\"M_dhis-web-sms\",\"F_SCHEDULING_CASE_AGGREGATE_QUERY_BUILDER\",\"F_PROGRAM_DELETE\",\"F_VALIDATIONRULE_DELETE\",\"F_PROGRAMDATAELEMENT_ADD\",\"M_dhis-web-mobile\",\"F_ACTIVITY_PLAN\",\"F_RELATIONSHIPTYPE_PUBLIC_ADD\",\"F_PREDICTOR_ADD\",\"F_SQLVIEW_PRIVATE_ADD\",\"F_EXPORT_DATA\",\"F_OAUTH2_CLIENT_MANAGE\",\"F_EVENT_VISUALIZATION_PUBLIC_ADD\",\"F_ORGUNITGROUP_PUBLIC_ADD\",\"F_APPROVE_DATA_LOWER_LEVELS\",\"M_Social_Media_Video\",\"F_OPTIONSET_PUBLIC_ADD\",\"F_EVENTCHART_EXTERNAL\",\"M_dhis-web-dataentry\",\"F_PROGRAM_TRACKING_SEARCH\",\"M_dhis-web-maintenance-dataset\",\"F_USERROLE_LIST\",\"M_dhis-web-import-export\",\"M_dhis-web-caseentry\",\"F_USERROLE_PUBLIC_ADD\",\"M_dhis-web-importexport\",\"M_InterpretationsTest\",\"F_ORGUNITGROUPSET_PUBLIC_ADD\",\"F_SQLVIEW_EXTERNAL\",\"F_REPORT_DELETE\",\"F_DASHBOARD_PUBLIC_ADD\",\"F_CONSTANT_DELETE\",\"M_dhis-web-maintenance-user\",\"F_PREDICTOR_DELETE\",\"M_dhis-web-data-visualizer\",\"F_DATASET_PRIVATE_ADD\",\"F_EVENTREPORT_PUBLIC_ADD\",\"F_PROGRAMSTAGE_SECTION_DELETE\",\"F_TRACKED_ENTITY_UPDATE\",\"F_CATEGORY_OPTION_GROUP_SET_PUBLIC_ADD\",\"F_TRACKED_ENTITY_INSTANCE_DASHBOARD\",\"F_METADATA_MANAGE\",\"F_ANALYTICSTABLEHOOK_DELETE\",\"F_UNCOMPLETE_EVENT\",\"M_dhis-web-sms-configuration\",\"M_dhis-web-interpretation\",\"F_LEGEND_DELETE\",\"M_Custom_Js_Css\",\"F_PROGRAM_INDICATOR_MANAGEMENT\",\"F_ANONYMOUS_DATA_ENTRY\",\"F_MAP_PUBLIC_ADD\",\"F_PROGRAM_VALIDATION\",\"F_SCHEDULING_ADMIN\",\"F_TRACKED_ENTITY_COMMENT_DELETE\",\"F_DATAELEMENT_MINMAX_DELETE\",\"F_MOBILE_SETTINGS\",\"F_PREDICTORGROUP_ADD\",\"F_REPORT_PRIVATE_ADD\",\"F_VALIDATIONRULEGROUP_PRIVATE_ADD\",\"F_PUSH_ANALYSIS_DELETE\",\"F_REPLICATE_USER\",\"F_DATAVALUE_ADD\",\"M_dhis-web-maintenance-organisationunit\",\"F_INSERT_CUSTOM_JS_CSS\",\"F_DATAELEMENTGROUPSET_DELETE\",\"F_SQLVIEW_DELETE\",\"F_ENROLLMENT_CASCADE_DELETE\",\"F_PROGRAMDATAELEMENT_DELETE\",\"F_TRACKED_ENTITY_INSTANCE_LIST\",\"F_INDICATORTYPE_ADD\",\"F_LEGEND_SET_DELETE\",\"F_VIEW_EVENT_ANALYTICS\",\"F_PROGRAMSTAGE_SECTION_MANAGEMENT\",\"F_IMPORT_EVENTS\",\"F_PROGRAM_INSTANCE_DELETE\",\"F_INDICATOR_PRIVATE_ADD\",\"F_TRACKED_ENTITY_INSTANCE_HISTORY\",\"F_FRED_CREATE\",\"F_EVENTCHART_PUBLIC_ADD\",\"F_PUSH_ANALYSIS_ADD\",\"M_dhis-web-event-visualizer\",\"F_USER_ADD\",\"F_EXTERNAL_MAP_LAYER_DELETE\",\"F_SYSTEM_SETTING\",\"F_ANALYTICSTABLEHOOK_ADD\",\"F_ATTRIBUTE_PRIVATE_ADD\",\"F_DOCUMENT_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_DELETE\",\"M_Easy_Visualization\",\"F_VISUALIZATION_PUBLIC_ADD\",\"F_DATAELEMENT_MINMAX_ADD\",\"M_dhis-web-data-quality\",\"M_dhis-web-pivot\",\"F_EVENTREPORT_EXTERNAL\",\"F_PROGRAM_RULE_UPDATE\",\"F_DATAELEMENT_PUBLIC_ADD\",\"M_dhis-web-validationrule\",\"F_CONSTANT_MANAGEMENT\",\"F_RUN_VALIDATION\",\"F_MANAGE_TICKETS\",\"F_GENERATE_BENEFICIARY_TABULAR_REPORT\",\"F_OPTIONGROUP_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_DELETE\",\"M_User_Administration\",\"M_dhis-web-settings\",\"F_IMPORT_DATA\",\"F_VIEW_DATABROWSER\",\"F_PERFORM_ANALYTICS_EXPLAIN\",\"F_MOBILE_DELETE_SMS\",\"F_OPTIONSET_MANAGEMENT\",\"F_SEND_MESSAGE\",\"F_PROGRAMSTAGE_ADD\",\"M_dhis-web-maps\",\"F_MINMAX_DATAELEMENT_DELETE\",\"F_ATTRIBUTE_DELETE\",\"F_OPTIONSET_DELETE\",\"F_PROGRAM_TRACKING_LIST\",\"M_dhis-web-dashboard\",\"M_dhis-web-data-administration\",\"F_ACCEPT_DATA_LOWER_LEVELS\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_DELETE\",\"F_OPTIONGROUPSET_PUBLIC_ADD\",\"M_dhis-web-capture\",\"F_PROGRAM_INDICATOR_GROUP_PUBLIC_ADD\",\"F_CATEGORY_DELETE\",\"F_COLOR_SET_DELETE\",\"M_dhis-web-app-management\",\"F_INDICATORTYPE_DELETE\",\"F_NAME_BASED_DATA_ENTRY\",\"F_INDICATORGROUP_PRIVATE_ADD\",\"F_FRED_DELETE\",\"F_VALIDATIONCRITERIA_DELETE\",\"F_PROGRAM_STAGE_INSTANCE_SEARCH\"],\"dataSets\":[\"Nyh6laLdBEJ\",\"j38YW1Am7he\",\"aLpVgfXiz0f\",\"YFTk3VdO9av\",\"Rl58JxmKJo2\",\"eZDhcZi6FLP\",\"N4fIX1HL3TQ\",\"EDzMBk0RRji\",\"TuL8IOPzpHh\",\"ce7DSxx5H2I\",\"EKWVBc5C0ms\",\"PLq9sJluXvc\",\"rsyjyJmYD4J\",\"ULowA8V3ucd\",\"QX4ZTUbOt3a\",\"pBOMPrpg1QX\",\"OsPTWNqq26W\",\"V8MHeZHIrcP\",\"YZhd4nu3mzY\",\"Y8gAn9DfAGU\",\"vc6nF5yZsPR\",\"Lpw6GcnTrmS\",\"lyLU2wR22tC\",\"VTdjfLXXmoi\",\"SF8FDSqw30D\",\"BfMAe6Itzgt\"],\"userCredentials\":{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"externalAuth\":false,\"twoFA\":false,\"passwordLastUpdated\":\"2014-12-18T20:56:05.264\",\"cogsDimensionConstraints\":[],\"catDimensionConstraints\":[],\"previousPasswords\":[],\"lastLogin\":\"2023-03-01T08:44:51.837\",\"selfRegistered\":false,\"invitation\":false,\"disabled\":false,\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}]}}", - "{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"surname\":\"Traore\",\"firstName\":\"John\",\"employer\":\"DHIS\",\"languages\":\"English\",\"gender\":\"gender_male\",\"jobTitle\":\"Super user\",\"created\":\"2013-04-18T17:15:08.407\",\"lastUpdated\":\"2023-03-01T08:45:02.307\",\"dataViewOrganisationUnits\":[],\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userGroupAccesses\":[],\"userAccesses\":[],\"userGroups\":[{\"id\":\"Kk12LkEWtXp\"},{\"id\":\"M1Qre0247G3\"},{\"id\":\"NTC8GjJ7p8P\"},{\"id\":\"B6JNeAQ6akX\"},{\"id\":\"wl5cDMuUhmF\"},{\"id\":\"QYrzIjSfI8z\"},{\"id\":\"lFHP5lLkzVr\"},{\"id\":\"jvrEwEJ2yZn\"},{\"id\":\"vAvEltyXGbD\"},{\"id\":\"w900PX10L7O\"},{\"id\":\"GogLpGmkL0g\"},{\"id\":\"vRoAruMnNpB\"},{\"id\":\"z1gNAf2zUxZ\"},{\"id\":\"gXpmQO6eEOo\"},{\"id\":\"tH0GcNZZ1vW\"},{\"id\":\"H9XnHoWRKCg\"}],\"translations\":[],\"teiSearchOrganisationUnits\":[],\"organisationUnits\":[{\"id\":\"ImspTQPwCqd\"}],\"externalAccess\":false,\"displayName\":\"John Traore\",\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"name\":\"John Traore\",\"email\":\"dummy@dhis2.org\",\"introduction\":\"I am the super user of DHIS 2\",\"birthday\":\"1971-04-08T00:00:00.000\",\"nationality\":\"Sierra Leone\",\"education\":\"Master of super using\",\"interests\":\"Football, swimming, singing, dancing\",\"whatsApp\":\"+123123123123\",\"facebookMessenger\":\"john.traore\",\"skype\":\"john.traore\",\"telegram\":\"john.traore\",\"twitter\":\"john.traore\",\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}],\"settings\":{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false},\"programs\":[\"uy2gU8kT1jF\",\"ur1Edk5Oe2n\",\"MoUd5BTQ3lY\",\"lxAQ7Zs9VYR\",\"IpHINAT79UW\",\"kla3mAPgvCH\",\"qDkgAbB5Jlk\",\"VBqh0ynB2wv\",\"bMcwwoVnbSR\",\"q04UBOqq3rp\",\"eBAyeGv0exc\",\"M3xtLkYBlKI\",\"fDd25txQckK\",\"WSGAb5XwJ3Y\"],\"authorities\":[\"F_PROGRAM_INDICATOR_PUBLIC_ADD\",\"F_SQLVIEW_EXECUTE\",\"F_USER_VIEW\",\"F_GENERATE_MIN_MAX_VALUES\",\"F_VALIDATIONRULE_PUBLIC_ADD\",\"F_CATEGORY_PRIVATE_ADD\",\"F_INDICATORGROUPSET_PUBLIC_ADD\",\"F_DATAVALUE_DELETE\",\"F_EXTERNAL_MAP_LAYER_PRIVATE_ADD\",\"F_RELATIONSHIPTYPE_DELETE\",\"F_CATEGORY_OPTION_PRIVATE_ADD\",\"F_SINGLE_EVENT_DATA_ENTRY\",\"F_CATEGORY_OPTION_GROUP_PUBLIC_ADD\",\"F_GIS_ADMIN\",\"M_dhis-web-event-capture\",\"F_SEND_EMAIL\",\"M_dhis-web-aggregate-data-entry\",\"F_ORGUNITGROUPSET_PRIVATE_ADD\",\"F_INDICATOR_DELETE\",\"M_dhis-web-event-reports\",\"F_VIEW_UNAPPROVED_DATA\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW\",\"F_TRACKED_ENTITY_INSTANCE_CHANGE_LOCATION\",\"F_OPTIONGROUPSET_DELETE\",\"F_USERGROUP_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_PRIVATE_ADD\",\"F_DOCUMENT_EXTERNAL\",\"F_PROGRAM_TRACKING_MANAGEMENT\",\"F_TRACKED_ENTITY_ATTRIBUTE_PUBLIC_ADD\",\"F_GENERATE_PROGRAM_SUMMARY_REPORT\",\"F_PROGRAM_INDICATOR_DELETE\",\"F_MOBILE_SENDSMS\",\"F_TRACKED_ENTITY_ADD\",\"F_TRACKED_ENTITY_MANAGEMENT\",\"F_RELATIONSHIP_DELETE\",\"F_VALIDATIONRULEGROUP_PUBLIC_ADD\",\"F_REPORT_EXTERNAL\",\"F_DOCUMENT_PRIVATE_ADD\",\"M_dhis-web-reports\",\"F_TRACKED_ENTITY_DELETE\",\"F_USERGROUP_DELETE\",\"F_PROGRAM_PRIVATE_ADD\",\"F_CATEGORY_COMBO_PRIVATE_ADD\",\"F_SCHEDULING_SEND_MESSAGE\",\"F_EXTERNAL_MAP_LAYER_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_DELETE\",\"F_ORGANISATIONUNIT_MOVE\",\"M_dhis-web-usage-analytics\",\"F_COLOR_DELETE\",\"F_INDICATORGROUP_DELETE\",\"F_ORGANISATIONUNIT_DELETE\",\"F_PROGRAM_RULE_ADD\",\"M_dhis-web-light\",\"F_OPTIONGROUPSET_PRIVATE_ADD\",\"F_DATA_MART_ADMIN\",\"M_dhis-web-maintenance-mobile\",\"F_DATASET_PUBLIC_ADD\",\"F_CATEGORY_COMBO_DELETE\",\"F_SECTION_DELETE\",\"F_USER_DELETE\",\"F_INDICATORGROUPSET_PRIVATE_ADD\",\"F_PROGRAM_INDICATOR_PRIVATE_ADD\",\"F_METADATA_IMPORT\",\"M_dhis-web-maintenance-appmanager\",\"F_EXPORT_EVENTS\",\"M_dhis-web-maintenance-settings\",\"F_SQLVIEW_PUBLIC_ADD\",\"F_PERFORM_MAINTENANCE\",\"F_COLOR_SET_ADD\",\"F_PROGRAM_STAGE_INSTANCE_DELETE\",\"F_METADATA_EXPORT\",\"F_MINMAX_DATAELEMENT_ADD\",\"F_PROGRAMSTAGE_SECTION_ADD\",\"F_DATAELEMENTGROUP_PRIVATE_ADD\",\"F_VALIDATIONRULE_PRIVATE_ADD\",\"F_APPROVE_DATA\",\"M_dhis-web-mapping\",\"F_DATAELEMENT_PRIVATE_ADD\",\"F_VALIDATIONCRITERIA_ADD\",\"F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS\",\"F_IGNORE_TRACKER_REQUIRED_VALUE_VALIDATION\",\"F_PROGRAM_PUBLIC_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_DELETE\",\"F_USER_ADD_WITHIN_MANAGED_GROUP\",\"M_Web_Portal\",\"F_ORGANISATIONUNIT_ADD\",\"M_dhis-web-user\",\"F_LEGEND_SET_PUBLIC_ADD\",\"F_CONSTANT_ADD\",\"F_PREDICTORGROUP_DELETE\",\"F_TRACKED_ENTITY_COMMENT_ADD\",\"F_TRACKED_ENTITY_INSTANCE_MANAGEMENT\",\"M_dhis-web-visualizer\",\"F_INDICATOR_PUBLIC_ADD\",\"F_INDICATORGROUP_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_PRIVATE_ADD\",\"M_dhis-web-maintenance\",\"M_dhis-web-approval\",\"F_PROGRAM_RULE_MANAGEMENT\",\"F_TEI_CASCADE_DELETE\",\"F_FRED_UPDATE\",\"F_VISUALIZATION_EXTERNAL\",\"M_dhis-web-cache-cleaner\",\"F_EDIT_EXPIRED\",\"F_ACCESS_TRACKED_ENTITY_ATTRIBUTES\",\"F_PROGRAM_DASHBOARD_CONFIG_ADMIN\",\"F_EVENT_VISUALIZATION_EXTERNAL\",\"F_ORGANISATIONUNITLEVEL_UPDATE\",\"F_CATEGORY_OPTION_PUBLIC_ADD\",\"M_dhis-web-datastore\",\"F_CATEGORY_OPTION_DELETE\",\"M_Data_Table\",\"M_dhis-web-menu-management\",\"F_REPORT_PUBLIC_ADD\",\"F_VALIDATIONRULEGROUP_DELETE\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_ADD\",\"F_RELATIONSHIP_MANAGEMENT\",\"F_COLOR_ADD\",\"F_OPTIONSET_PRIVATE_ADD\",\"F_PROGRAM_RULE_DELETE\",\"F_GENERATE_STATISTICAL_PROGRAM_REPORT\",\"F_ORGUNITGROUP_DELETE\",\"F_DATAELEMENTGROUPSET_PRIVATE_ADD\",\"M_dhis-web-tracker-capture\",\"F_LOCALE_ADD\",\"F_LEGEND_ADD\",\"F_CATEGORY_OPTION_GROUP_PRIVATE_ADD\",\"F_PROGRAM_INSTANCE_MANAGEMENT\",\"M_dhis-web-reporting\",\"F_CATEGORY_PUBLIC_ADD\",\"F_SECTION_ADD\",\"F_CATEGORY_COMBO_PUBLIC_ADD\",\"M_dhis-web-maintenance-datadictionary\",\"F_DATASET_DELETE\",\"F_INDICATORGROUPSET_DELETE\",\"F_USER_DELETE_WITHIN_MANAGED_GROUP\",\"F_ADD_TRACKED_ENTITY_FORM\",\"M_dhis-web-scheduler\",\"F_OPTIONGROUP_PUBLIC_ADD\",\"F_USERROLE_PRIVATE_ADD\",\"M_dhis-web-messaging\",\"M_dhis-web-maintenance-program\",\"F_EXTERNALFILERESOURCE_ADD\",\"F_MAP_EXTERNAL\",\"M_bna_widget\",\"F_DATAELEMENTGROUPSET_PUBLIC_ADD\",\"F_DATAELEMENTGROUP_DELETE\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_ADD\",\"F_RELATIONSHIP_ADD\",\"F_ORGUNITGROUP_PRIVATE_ADD\",\"F_DATAELEMENTGROUP_PUBLIC_ADD\",\"F_USER_GROUPS_READ_ONLY_ADD_MEMBERS\",\"F_LOCALE_DELETE\",\"F_PREDICTOR_RUN\",\"F_DATAELEMENT_DELETE\",\"F_OPTIONGROUP_DELETE\",\"F_LEGEND_SET_PRIVATE_ADD\",\"F_PROGRAMSTAGE_DELETE\",\"F_ATTRIBUTE_PUBLIC_ADD\",\"F_TRACKED_ENTITY_FORM_DELETE\",\"F_USERROLE_DELETE\",\"F_DOCUMENT_DELETE\",\"F_ORGUNITGROUPSET_DELETE\",\"M_dhis-web-translations\",\"M_dhis-web-sms\",\"F_SCHEDULING_CASE_AGGREGATE_QUERY_BUILDER\",\"F_PROGRAM_DELETE\",\"F_VALIDATIONRULE_DELETE\",\"F_PROGRAMDATAELEMENT_ADD\",\"M_dhis-web-mobile\",\"F_ACTIVITY_PLAN\",\"F_RELATIONSHIPTYPE_PUBLIC_ADD\",\"F_PREDICTOR_ADD\",\"F_SQLVIEW_PRIVATE_ADD\",\"F_EXPORT_DATA\",\"F_OAUTH2_CLIENT_MANAGE\",\"F_EVENT_VISUALIZATION_PUBLIC_ADD\",\"F_ORGUNITGROUP_PUBLIC_ADD\",\"F_APPROVE_DATA_LOWER_LEVELS\",\"M_Social_Media_Video\",\"F_OPTIONSET_PUBLIC_ADD\",\"F_EVENTCHART_EXTERNAL\",\"M_dhis-web-dataentry\",\"F_PROGRAM_TRACKING_SEARCH\",\"M_dhis-web-maintenance-dataset\",\"F_USERROLE_LIST\",\"M_dhis-web-import-export\",\"M_dhis-web-caseentry\",\"F_USERROLE_PUBLIC_ADD\",\"M_dhis-web-importexport\",\"M_InterpretationsTest\",\"F_ORGUNITGROUPSET_PUBLIC_ADD\",\"F_SQLVIEW_EXTERNAL\",\"F_REPORT_DELETE\",\"F_DASHBOARD_PUBLIC_ADD\",\"F_CONSTANT_DELETE\",\"M_dhis-web-maintenance-user\",\"F_PREDICTOR_DELETE\",\"M_dhis-web-data-visualizer\",\"F_DATASET_PRIVATE_ADD\",\"F_EVENTREPORT_PUBLIC_ADD\",\"F_PROGRAMSTAGE_SECTION_DELETE\",\"F_TRACKED_ENTITY_UPDATE\",\"F_CATEGORY_OPTION_GROUP_SET_PUBLIC_ADD\",\"F_TRACKED_ENTITY_INSTANCE_DASHBOARD\",\"F_METADATA_MANAGE\",\"F_ANALYTICSTABLEHOOK_DELETE\",\"F_UNCOMPLETE_EVENT\",\"M_dhis-web-sms-configuration\",\"M_dhis-web-interpretation\",\"F_LEGEND_DELETE\",\"M_Custom_Js_Css\",\"F_PROGRAM_INDICATOR_MANAGEMENT\",\"F_ANONYMOUS_DATA_ENTRY\",\"F_MAP_PUBLIC_ADD\",\"F_PROGRAM_VALIDATION\",\"F_SCHEDULING_ADMIN\",\"F_TRACKED_ENTITY_COMMENT_DELETE\",\"F_DATAELEMENT_MINMAX_DELETE\",\"F_MOBILE_SETTINGS\",\"F_PREDICTORGROUP_ADD\",\"F_REPORT_PRIVATE_ADD\",\"F_VALIDATIONRULEGROUP_PRIVATE_ADD\",\"F_PUSH_ANALYSIS_DELETE\",\"F_REPLICATE_USER\",\"F_DATAVALUE_ADD\",\"M_dhis-web-maintenance-organisationunit\",\"F_INSERT_CUSTOM_JS_CSS\",\"F_DATAELEMENTGROUPSET_DELETE\",\"F_SQLVIEW_DELETE\",\"F_ENROLLMENT_CASCADE_DELETE\",\"F_PROGRAMDATAELEMENT_DELETE\",\"F_TRACKED_ENTITY_INSTANCE_LIST\",\"F_INDICATORTYPE_ADD\",\"F_LEGEND_SET_DELETE\",\"F_VIEW_EVENT_ANALYTICS\",\"F_PROGRAMSTAGE_SECTION_MANAGEMENT\",\"F_IMPORT_EVENTS\",\"F_PROGRAM_INSTANCE_DELETE\",\"F_INDICATOR_PRIVATE_ADD\",\"F_TRACKED_ENTITY_INSTANCE_HISTORY\",\"F_FRED_CREATE\",\"F_EVENTCHART_PUBLIC_ADD\",\"F_PUSH_ANALYSIS_ADD\",\"M_dhis-web-event-visualizer\",\"F_USER_ADD\",\"F_EXTERNAL_MAP_LAYER_DELETE\",\"F_SYSTEM_SETTING\",\"F_ANALYTICSTABLEHOOK_ADD\",\"F_ATTRIBUTE_PRIVATE_ADD\",\"F_DOCUMENT_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_DELETE\",\"M_Easy_Visualization\",\"F_VISUALIZATION_PUBLIC_ADD\",\"F_DATAELEMENT_MINMAX_ADD\",\"M_dhis-web-data-quality\",\"M_dhis-web-pivot\",\"F_EVENTREPORT_EXTERNAL\",\"F_PROGRAM_RULE_UPDATE\",\"F_DATAELEMENT_PUBLIC_ADD\",\"M_dhis-web-validationrule\",\"F_CONSTANT_MANAGEMENT\",\"F_RUN_VALIDATION\",\"F_MANAGE_TICKETS\",\"F_GENERATE_BENEFICIARY_TABULAR_REPORT\",\"F_OPTIONGROUP_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_DELETE\",\"M_User_Administration\",\"M_dhis-web-settings\",\"F_IMPORT_DATA\",\"F_VIEW_DATABROWSER\",\"F_PERFORM_ANALYTICS_EXPLAIN\",\"F_MOBILE_DELETE_SMS\",\"F_OPTIONSET_MANAGEMENT\",\"F_SEND_MESSAGE\",\"F_PROGRAMSTAGE_ADD\",\"M_dhis-web-maps\",\"F_MINMAX_DATAELEMENT_DELETE\",\"F_ATTRIBUTE_DELETE\",\"F_OPTIONSET_DELETE\",\"F_PROGRAM_TRACKING_LIST\",\"M_dhis-web-dashboard\",\"M_dhis-web-data-administration\",\"F_ACCEPT_DATA_LOWER_LEVELS\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_DELETE\",\"F_OPTIONGROUPSET_PUBLIC_ADD\",\"M_dhis-web-capture\",\"F_PROGRAM_INDICATOR_GROUP_PUBLIC_ADD\",\"F_CATEGORY_DELETE\",\"F_COLOR_SET_DELETE\",\"M_dhis-web-app-management\",\"F_INDICATORTYPE_DELETE\",\"F_NAME_BASED_DATA_ENTRY\",\"F_INDICATORGROUP_PRIVATE_ADD\",\"F_FRED_DELETE\",\"F_VALIDATIONCRITERIA_DELETE\",\"F_PROGRAM_STAGE_INSTANCE_SEARCH\"],\"dataSets\":[\"Nyh6laLdBEJ\",\"j38YW1Am7he\",\"aLpVgfXiz0f\",\"YFTk3VdO9av\",\"Rl58JxmKJo2\",\"eZDhcZi6FLP\",\"N4fIX1HL3TQ\",\"EDzMBk0RRji\",\"TuL8IOPzpHh\",\"ce7DSxx5H2I\",\"EKWVBc5C0ms\",\"PLq9sJluXvc\",\"rsyjyJmYD4J\",\"ULowA8V3ucd\",\"QX4ZTUbOt3a\",\"pBOMPrpg1QX\",\"OsPTWNqq26W\",\"V8MHeZHIrcP\",\"YZhd4nu3mzY\",\"Y8gAn9DfAGU\",\"vc6nF5yZsPR\",\"Lpw6GcnTrmS\",\"lyLU2wR22tC\",\"VTdjfLXXmoi\",\"SF8FDSqw30D\",\"BfMAe6Itzgt\"],\"userCredentials\":{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"externalAuth\":false,\"twoFA\":false,\"passwordLastUpdated\":\"2014-12-18T20:56:05.264\",\"cogsDimensionConstraints\":[],\"catDimensionConstraints\":[],\"previousPasswords\":[],\"lastLogin\":\"2023-03-01T08:45:02.305\",\"selfRegistered\":false,\"invitation\":false,\"disabled\":false,\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}]}}", - "{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"surname\":\"Traore\",\"firstName\":\"John\",\"employer\":\"DHIS\",\"languages\":\"English\",\"gender\":\"gender_male\",\"jobTitle\":\"Super user\",\"created\":\"2013-04-18T17:15:08.407\",\"lastUpdated\":\"2023-03-01T08:45:39.922\",\"dataViewOrganisationUnits\":[],\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userGroupAccesses\":[],\"userAccesses\":[],\"userGroups\":[{\"id\":\"Kk12LkEWtXp\"},{\"id\":\"M1Qre0247G3\"},{\"id\":\"NTC8GjJ7p8P\"},{\"id\":\"B6JNeAQ6akX\"},{\"id\":\"wl5cDMuUhmF\"},{\"id\":\"QYrzIjSfI8z\"},{\"id\":\"lFHP5lLkzVr\"},{\"id\":\"jvrEwEJ2yZn\"},{\"id\":\"vAvEltyXGbD\"},{\"id\":\"w900PX10L7O\"},{\"id\":\"GogLpGmkL0g\"},{\"id\":\"vRoAruMnNpB\"},{\"id\":\"z1gNAf2zUxZ\"},{\"id\":\"gXpmQO6eEOo\"},{\"id\":\"tH0GcNZZ1vW\"},{\"id\":\"H9XnHoWRKCg\"}],\"translations\":[],\"teiSearchOrganisationUnits\":[],\"organisationUnits\":[{\"id\":\"ImspTQPwCqd\"}],\"externalAccess\":false,\"displayName\":\"John Traore\",\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"name\":\"John Traore\",\"email\":\"dummy@dhis2.org\",\"introduction\":\"I am the super user of DHIS 2\",\"birthday\":\"1971-04-08T00:00:00.000\",\"nationality\":\"Sierra Leone\",\"education\":\"Master of super using\",\"interests\":\"Football, swimming, singing, dancing\",\"whatsApp\":\"+123123123123\",\"facebookMessenger\":\"john.traore\",\"skype\":\"john.traore\",\"telegram\":\"john.traore\",\"twitter\":\"john.traore\",\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}],\"settings\":{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false},\"programs\":[\"uy2gU8kT1jF\",\"ur1Edk5Oe2n\",\"MoUd5BTQ3lY\",\"lxAQ7Zs9VYR\",\"IpHINAT79UW\",\"kla3mAPgvCH\",\"qDkgAbB5Jlk\",\"VBqh0ynB2wv\",\"bMcwwoVnbSR\",\"q04UBOqq3rp\",\"eBAyeGv0exc\",\"M3xtLkYBlKI\",\"fDd25txQckK\",\"WSGAb5XwJ3Y\"],\"authorities\":[\"F_PROGRAM_INDICATOR_PUBLIC_ADD\",\"F_SQLVIEW_EXECUTE\",\"F_USER_VIEW\",\"F_GENERATE_MIN_MAX_VALUES\",\"F_VALIDATIONRULE_PUBLIC_ADD\",\"F_CATEGORY_PRIVATE_ADD\",\"F_INDICATORGROUPSET_PUBLIC_ADD\",\"F_DATAVALUE_DELETE\",\"F_EXTERNAL_MAP_LAYER_PRIVATE_ADD\",\"F_RELATIONSHIPTYPE_DELETE\",\"F_CATEGORY_OPTION_PRIVATE_ADD\",\"F_SINGLE_EVENT_DATA_ENTRY\",\"F_CATEGORY_OPTION_GROUP_PUBLIC_ADD\",\"F_GIS_ADMIN\",\"M_dhis-web-event-capture\",\"F_SEND_EMAIL\",\"M_dhis-web-aggregate-data-entry\",\"F_ORGUNITGROUPSET_PRIVATE_ADD\",\"F_INDICATOR_DELETE\",\"M_dhis-web-event-reports\",\"F_VIEW_UNAPPROVED_DATA\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW\",\"F_TRACKED_ENTITY_INSTANCE_CHANGE_LOCATION\",\"F_OPTIONGROUPSET_DELETE\",\"F_USERGROUP_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_PRIVATE_ADD\",\"F_DOCUMENT_EXTERNAL\",\"F_PROGRAM_TRACKING_MANAGEMENT\",\"F_TRACKED_ENTITY_ATTRIBUTE_PUBLIC_ADD\",\"F_GENERATE_PROGRAM_SUMMARY_REPORT\",\"F_PROGRAM_INDICATOR_DELETE\",\"F_MOBILE_SENDSMS\",\"F_TRACKED_ENTITY_ADD\",\"F_TRACKED_ENTITY_MANAGEMENT\",\"F_RELATIONSHIP_DELETE\",\"F_VALIDATIONRULEGROUP_PUBLIC_ADD\",\"F_REPORT_EXTERNAL\",\"F_DOCUMENT_PRIVATE_ADD\",\"M_dhis-web-reports\",\"F_TRACKED_ENTITY_DELETE\",\"F_USERGROUP_DELETE\",\"F_PROGRAM_PRIVATE_ADD\",\"F_CATEGORY_COMBO_PRIVATE_ADD\",\"F_SCHEDULING_SEND_MESSAGE\",\"F_EXTERNAL_MAP_LAYER_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_DELETE\",\"F_ORGANISATIONUNIT_MOVE\",\"M_dhis-web-usage-analytics\",\"F_COLOR_DELETE\",\"F_INDICATORGROUP_DELETE\",\"F_ORGANISATIONUNIT_DELETE\",\"F_PROGRAM_RULE_ADD\",\"M_dhis-web-light\",\"F_OPTIONGROUPSET_PRIVATE_ADD\",\"F_DATA_MART_ADMIN\",\"M_dhis-web-maintenance-mobile\",\"F_DATASET_PUBLIC_ADD\",\"F_CATEGORY_COMBO_DELETE\",\"F_SECTION_DELETE\",\"F_USER_DELETE\",\"F_INDICATORGROUPSET_PRIVATE_ADD\",\"F_PROGRAM_INDICATOR_PRIVATE_ADD\",\"F_METADATA_IMPORT\",\"M_dhis-web-maintenance-appmanager\",\"F_EXPORT_EVENTS\",\"M_dhis-web-maintenance-settings\",\"F_SQLVIEW_PUBLIC_ADD\",\"F_PERFORM_MAINTENANCE\",\"F_COLOR_SET_ADD\",\"F_PROGRAM_STAGE_INSTANCE_DELETE\",\"F_METADATA_EXPORT\",\"F_MINMAX_DATAELEMENT_ADD\",\"F_PROGRAMSTAGE_SECTION_ADD\",\"F_DATAELEMENTGROUP_PRIVATE_ADD\",\"F_VALIDATIONRULE_PRIVATE_ADD\",\"F_APPROVE_DATA\",\"M_dhis-web-mapping\",\"F_DATAELEMENT_PRIVATE_ADD\",\"F_VALIDATIONCRITERIA_ADD\",\"F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS\",\"F_IGNORE_TRACKER_REQUIRED_VALUE_VALIDATION\",\"F_PROGRAM_PUBLIC_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_DELETE\",\"F_USER_ADD_WITHIN_MANAGED_GROUP\",\"M_Web_Portal\",\"F_ORGANISATIONUNIT_ADD\",\"M_dhis-web-user\",\"F_LEGEND_SET_PUBLIC_ADD\",\"F_CONSTANT_ADD\",\"F_PREDICTORGROUP_DELETE\",\"F_TRACKED_ENTITY_COMMENT_ADD\",\"F_TRACKED_ENTITY_INSTANCE_MANAGEMENT\",\"M_dhis-web-visualizer\",\"F_INDICATOR_PUBLIC_ADD\",\"F_INDICATORGROUP_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_PRIVATE_ADD\",\"M_dhis-web-maintenance\",\"M_dhis-web-approval\",\"F_PROGRAM_RULE_MANAGEMENT\",\"F_TEI_CASCADE_DELETE\",\"F_FRED_UPDATE\",\"F_VISUALIZATION_EXTERNAL\",\"M_dhis-web-cache-cleaner\",\"F_EDIT_EXPIRED\",\"F_ACCESS_TRACKED_ENTITY_ATTRIBUTES\",\"F_PROGRAM_DASHBOARD_CONFIG_ADMIN\",\"F_EVENT_VISUALIZATION_EXTERNAL\",\"F_ORGANISATIONUNITLEVEL_UPDATE\",\"F_CATEGORY_OPTION_PUBLIC_ADD\",\"M_dhis-web-datastore\",\"F_CATEGORY_OPTION_DELETE\",\"M_Data_Table\",\"M_dhis-web-menu-management\",\"F_REPORT_PUBLIC_ADD\",\"F_VALIDATIONRULEGROUP_DELETE\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_ADD\",\"F_RELATIONSHIP_MANAGEMENT\",\"F_COLOR_ADD\",\"F_OPTIONSET_PRIVATE_ADD\",\"F_PROGRAM_RULE_DELETE\",\"F_GENERATE_STATISTICAL_PROGRAM_REPORT\",\"F_ORGUNITGROUP_DELETE\",\"F_DATAELEMENTGROUPSET_PRIVATE_ADD\",\"M_dhis-web-tracker-capture\",\"F_LOCALE_ADD\",\"F_LEGEND_ADD\",\"F_CATEGORY_OPTION_GROUP_PRIVATE_ADD\",\"F_PROGRAM_INSTANCE_MANAGEMENT\",\"M_dhis-web-reporting\",\"F_CATEGORY_PUBLIC_ADD\",\"F_SECTION_ADD\",\"F_CATEGORY_COMBO_PUBLIC_ADD\",\"M_dhis-web-maintenance-datadictionary\",\"F_DATASET_DELETE\",\"F_INDICATORGROUPSET_DELETE\",\"F_USER_DELETE_WITHIN_MANAGED_GROUP\",\"F_ADD_TRACKED_ENTITY_FORM\",\"M_dhis-web-scheduler\",\"F_OPTIONGROUP_PUBLIC_ADD\",\"F_USERROLE_PRIVATE_ADD\",\"M_dhis-web-messaging\",\"M_dhis-web-maintenance-program\",\"F_EXTERNALFILERESOURCE_ADD\",\"F_MAP_EXTERNAL\",\"M_bna_widget\",\"F_DATAELEMENTGROUPSET_PUBLIC_ADD\",\"F_DATAELEMENTGROUP_DELETE\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_ADD\",\"F_RELATIONSHIP_ADD\",\"F_ORGUNITGROUP_PRIVATE_ADD\",\"F_DATAELEMENTGROUP_PUBLIC_ADD\",\"F_USER_GROUPS_READ_ONLY_ADD_MEMBERS\",\"F_LOCALE_DELETE\",\"F_PREDICTOR_RUN\",\"F_DATAELEMENT_DELETE\",\"F_OPTIONGROUP_DELETE\",\"F_LEGEND_SET_PRIVATE_ADD\",\"F_PROGRAMSTAGE_DELETE\",\"F_ATTRIBUTE_PUBLIC_ADD\",\"F_TRACKED_ENTITY_FORM_DELETE\",\"F_USERROLE_DELETE\",\"F_DOCUMENT_DELETE\",\"F_ORGUNITGROUPSET_DELETE\",\"M_dhis-web-translations\",\"M_dhis-web-sms\",\"F_SCHEDULING_CASE_AGGREGATE_QUERY_BUILDER\",\"F_PROGRAM_DELETE\",\"F_VALIDATIONRULE_DELETE\",\"F_PROGRAMDATAELEMENT_ADD\",\"M_dhis-web-mobile\",\"F_ACTIVITY_PLAN\",\"F_RELATIONSHIPTYPE_PUBLIC_ADD\",\"F_PREDICTOR_ADD\",\"F_SQLVIEW_PRIVATE_ADD\",\"F_EXPORT_DATA\",\"F_OAUTH2_CLIENT_MANAGE\",\"F_EVENT_VISUALIZATION_PUBLIC_ADD\",\"F_ORGUNITGROUP_PUBLIC_ADD\",\"F_APPROVE_DATA_LOWER_LEVELS\",\"M_Social_Media_Video\",\"F_OPTIONSET_PUBLIC_ADD\",\"F_EVENTCHART_EXTERNAL\",\"M_dhis-web-dataentry\",\"F_PROGRAM_TRACKING_SEARCH\",\"M_dhis-web-maintenance-dataset\",\"F_USERROLE_LIST\",\"M_dhis-web-import-export\",\"M_dhis-web-caseentry\",\"F_USERROLE_PUBLIC_ADD\",\"M_dhis-web-importexport\",\"M_InterpretationsTest\",\"F_ORGUNITGROUPSET_PUBLIC_ADD\",\"F_SQLVIEW_EXTERNAL\",\"F_REPORT_DELETE\",\"F_DASHBOARD_PUBLIC_ADD\",\"F_CONSTANT_DELETE\",\"M_dhis-web-maintenance-user\",\"F_PREDICTOR_DELETE\",\"M_dhis-web-data-visualizer\",\"F_DATASET_PRIVATE_ADD\",\"F_EVENTREPORT_PUBLIC_ADD\",\"F_PROGRAMSTAGE_SECTION_DELETE\",\"F_TRACKED_ENTITY_UPDATE\",\"F_CATEGORY_OPTION_GROUP_SET_PUBLIC_ADD\",\"F_TRACKED_ENTITY_INSTANCE_DASHBOARD\",\"F_METADATA_MANAGE\",\"F_ANALYTICSTABLEHOOK_DELETE\",\"F_UNCOMPLETE_EVENT\",\"M_dhis-web-sms-configuration\",\"M_dhis-web-interpretation\",\"F_LEGEND_DELETE\",\"M_Custom_Js_Css\",\"F_PROGRAM_INDICATOR_MANAGEMENT\",\"F_ANONYMOUS_DATA_ENTRY\",\"F_MAP_PUBLIC_ADD\",\"F_PROGRAM_VALIDATION\",\"F_SCHEDULING_ADMIN\",\"F_TRACKED_ENTITY_COMMENT_DELETE\",\"F_DATAELEMENT_MINMAX_DELETE\",\"F_MOBILE_SETTINGS\",\"F_PREDICTORGROUP_ADD\",\"F_REPORT_PRIVATE_ADD\",\"F_VALIDATIONRULEGROUP_PRIVATE_ADD\",\"F_PUSH_ANALYSIS_DELETE\",\"F_REPLICATE_USER\",\"F_DATAVALUE_ADD\",\"M_dhis-web-maintenance-organisationunit\",\"F_INSERT_CUSTOM_JS_CSS\",\"F_DATAELEMENTGROUPSET_DELETE\",\"F_SQLVIEW_DELETE\",\"F_ENROLLMENT_CASCADE_DELETE\",\"F_PROGRAMDATAELEMENT_DELETE\",\"F_TRACKED_ENTITY_INSTANCE_LIST\",\"F_INDICATORTYPE_ADD\",\"F_LEGEND_SET_DELETE\",\"F_VIEW_EVENT_ANALYTICS\",\"F_PROGRAMSTAGE_SECTION_MANAGEMENT\",\"F_IMPORT_EVENTS\",\"F_PROGRAM_INSTANCE_DELETE\",\"F_INDICATOR_PRIVATE_ADD\",\"F_TRACKED_ENTITY_INSTANCE_HISTORY\",\"F_FRED_CREATE\",\"F_EVENTCHART_PUBLIC_ADD\",\"F_PUSH_ANALYSIS_ADD\",\"M_dhis-web-event-visualizer\",\"F_USER_ADD\",\"F_EXTERNAL_MAP_LAYER_DELETE\",\"F_SYSTEM_SETTING\",\"F_ANALYTICSTABLEHOOK_ADD\",\"F_ATTRIBUTE_PRIVATE_ADD\",\"F_DOCUMENT_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_DELETE\",\"M_Easy_Visualization\",\"F_VISUALIZATION_PUBLIC_ADD\",\"F_DATAELEMENT_MINMAX_ADD\",\"M_dhis-web-data-quality\",\"M_dhis-web-pivot\",\"F_EVENTREPORT_EXTERNAL\",\"F_PROGRAM_RULE_UPDATE\",\"F_DATAELEMENT_PUBLIC_ADD\",\"M_dhis-web-validationrule\",\"F_CONSTANT_MANAGEMENT\",\"F_RUN_VALIDATION\",\"F_MANAGE_TICKETS\",\"F_GENERATE_BENEFICIARY_TABULAR_REPORT\",\"F_OPTIONGROUP_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_DELETE\",\"M_User_Administration\",\"M_dhis-web-settings\",\"F_IMPORT_DATA\",\"F_VIEW_DATABROWSER\",\"F_PERFORM_ANALYTICS_EXPLAIN\",\"F_MOBILE_DELETE_SMS\",\"F_OPTIONSET_MANAGEMENT\",\"F_SEND_MESSAGE\",\"F_PROGRAMSTAGE_ADD\",\"M_dhis-web-maps\",\"F_MINMAX_DATAELEMENT_DELETE\",\"F_ATTRIBUTE_DELETE\",\"F_OPTIONSET_DELETE\",\"F_PROGRAM_TRACKING_LIST\",\"M_dhis-web-dashboard\",\"M_dhis-web-data-administration\",\"F_ACCEPT_DATA_LOWER_LEVELS\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_DELETE\",\"F_OPTIONGROUPSET_PUBLIC_ADD\",\"M_dhis-web-capture\",\"F_PROGRAM_INDICATOR_GROUP_PUBLIC_ADD\",\"F_CATEGORY_DELETE\",\"F_COLOR_SET_DELETE\",\"M_dhis-web-app-management\",\"F_INDICATORTYPE_DELETE\",\"F_NAME_BASED_DATA_ENTRY\",\"F_INDICATORGROUP_PRIVATE_ADD\",\"F_FRED_DELETE\",\"F_VALIDATIONCRITERIA_DELETE\",\"F_PROGRAM_STAGE_INSTANCE_SEARCH\"],\"dataSets\":[\"Nyh6laLdBEJ\",\"j38YW1Am7he\",\"aLpVgfXiz0f\",\"YFTk3VdO9av\",\"Rl58JxmKJo2\",\"eZDhcZi6FLP\",\"N4fIX1HL3TQ\",\"EDzMBk0RRji\",\"TuL8IOPzpHh\",\"ce7DSxx5H2I\",\"EKWVBc5C0ms\",\"PLq9sJluXvc\",\"rsyjyJmYD4J\",\"ULowA8V3ucd\",\"QX4ZTUbOt3a\",\"pBOMPrpg1QX\",\"OsPTWNqq26W\",\"V8MHeZHIrcP\",\"YZhd4nu3mzY\",\"Y8gAn9DfAGU\",\"vc6nF5yZsPR\",\"Lpw6GcnTrmS\",\"lyLU2wR22tC\",\"VTdjfLXXmoi\",\"SF8FDSqw30D\",\"BfMAe6Itzgt\"],\"userCredentials\":{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"externalAuth\":false,\"twoFA\":false,\"passwordLastUpdated\":\"2014-12-18T20:56:05.264\",\"cogsDimensionConstraints\":[],\"catDimensionConstraints\":[],\"previousPasswords\":[],\"lastLogin\":\"2023-03-01T08:45:39.920\",\"selfRegistered\":false,\"invitation\":false,\"disabled\":false,\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}]}}", - "{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"surname\":\"Traore\",\"firstName\":\"John\",\"employer\":\"DHIS\",\"languages\":\"English\",\"gender\":\"gender_male\",\"jobTitle\":\"Super user\",\"created\":\"2013-04-18T17:15:08.407\",\"lastUpdated\":\"2023-03-01T08:45:59.773\",\"dataViewOrganisationUnits\":[],\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userGroupAccesses\":[],\"userAccesses\":[],\"userGroups\":[{\"id\":\"Kk12LkEWtXp\"},{\"id\":\"M1Qre0247G3\"},{\"id\":\"NTC8GjJ7p8P\"},{\"id\":\"B6JNeAQ6akX\"},{\"id\":\"wl5cDMuUhmF\"},{\"id\":\"QYrzIjSfI8z\"},{\"id\":\"lFHP5lLkzVr\"},{\"id\":\"jvrEwEJ2yZn\"},{\"id\":\"vAvEltyXGbD\"},{\"id\":\"w900PX10L7O\"},{\"id\":\"GogLpGmkL0g\"},{\"id\":\"vRoAruMnNpB\"},{\"id\":\"z1gNAf2zUxZ\"},{\"id\":\"gXpmQO6eEOo\"},{\"id\":\"tH0GcNZZ1vW\"},{\"id\":\"H9XnHoWRKCg\"}],\"translations\":[],\"teiSearchOrganisationUnits\":[],\"organisationUnits\":[{\"id\":\"ImspTQPwCqd\"}],\"externalAccess\":false,\"displayName\":\"John Traore\",\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"name\":\"John Traore\",\"email\":\"dummy@dhis2.org\",\"introduction\":\"I am the super user of DHIS 2\",\"birthday\":\"1971-04-08T00:00:00.000\",\"nationality\":\"Sierra Leone\",\"education\":\"Master of super using\",\"interests\":\"Football, swimming, singing, dancing\",\"whatsApp\":\"+123123123123\",\"facebookMessenger\":\"john.traore\",\"skype\":\"john.traore\",\"telegram\":\"john.traore\",\"twitter\":\"john.traore\",\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}],\"settings\":{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false},\"programs\":[\"uy2gU8kT1jF\",\"ur1Edk5Oe2n\",\"MoUd5BTQ3lY\",\"lxAQ7Zs9VYR\",\"IpHINAT79UW\",\"kla3mAPgvCH\",\"qDkgAbB5Jlk\",\"VBqh0ynB2wv\",\"bMcwwoVnbSR\",\"q04UBOqq3rp\",\"eBAyeGv0exc\",\"M3xtLkYBlKI\",\"fDd25txQckK\",\"WSGAb5XwJ3Y\"],\"authorities\":[\"F_PROGRAM_INDICATOR_PUBLIC_ADD\",\"F_SQLVIEW_EXECUTE\",\"F_USER_VIEW\",\"F_GENERATE_MIN_MAX_VALUES\",\"F_VALIDATIONRULE_PUBLIC_ADD\",\"F_CATEGORY_PRIVATE_ADD\",\"F_INDICATORGROUPSET_PUBLIC_ADD\",\"F_DATAVALUE_DELETE\",\"F_EXTERNAL_MAP_LAYER_PRIVATE_ADD\",\"F_RELATIONSHIPTYPE_DELETE\",\"F_CATEGORY_OPTION_PRIVATE_ADD\",\"F_SINGLE_EVENT_DATA_ENTRY\",\"F_CATEGORY_OPTION_GROUP_PUBLIC_ADD\",\"F_GIS_ADMIN\",\"M_dhis-web-event-capture\",\"F_SEND_EMAIL\",\"M_dhis-web-aggregate-data-entry\",\"F_ORGUNITGROUPSET_PRIVATE_ADD\",\"F_INDICATOR_DELETE\",\"M_dhis-web-event-reports\",\"F_VIEW_UNAPPROVED_DATA\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW\",\"F_TRACKED_ENTITY_INSTANCE_CHANGE_LOCATION\",\"F_OPTIONGROUPSET_DELETE\",\"F_USERGROUP_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_PRIVATE_ADD\",\"F_DOCUMENT_EXTERNAL\",\"F_PROGRAM_TRACKING_MANAGEMENT\",\"F_TRACKED_ENTITY_ATTRIBUTE_PUBLIC_ADD\",\"F_GENERATE_PROGRAM_SUMMARY_REPORT\",\"F_PROGRAM_INDICATOR_DELETE\",\"F_MOBILE_SENDSMS\",\"F_TRACKED_ENTITY_ADD\",\"F_TRACKED_ENTITY_MANAGEMENT\",\"F_RELATIONSHIP_DELETE\",\"F_VALIDATIONRULEGROUP_PUBLIC_ADD\",\"F_REPORT_EXTERNAL\",\"F_DOCUMENT_PRIVATE_ADD\",\"M_dhis-web-reports\",\"F_TRACKED_ENTITY_DELETE\",\"F_USERGROUP_DELETE\",\"F_PROGRAM_PRIVATE_ADD\",\"F_CATEGORY_COMBO_PRIVATE_ADD\",\"F_SCHEDULING_SEND_MESSAGE\",\"F_EXTERNAL_MAP_LAYER_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_DELETE\",\"F_ORGANISATIONUNIT_MOVE\",\"M_dhis-web-usage-analytics\",\"F_COLOR_DELETE\",\"F_INDICATORGROUP_DELETE\",\"F_ORGANISATIONUNIT_DELETE\",\"F_PROGRAM_RULE_ADD\",\"M_dhis-web-light\",\"F_OPTIONGROUPSET_PRIVATE_ADD\",\"F_DATA_MART_ADMIN\",\"M_dhis-web-maintenance-mobile\",\"F_DATASET_PUBLIC_ADD\",\"F_CATEGORY_COMBO_DELETE\",\"F_SECTION_DELETE\",\"F_USER_DELETE\",\"F_INDICATORGROUPSET_PRIVATE_ADD\",\"F_PROGRAM_INDICATOR_PRIVATE_ADD\",\"F_METADATA_IMPORT\",\"M_dhis-web-maintenance-appmanager\",\"F_EXPORT_EVENTS\",\"M_dhis-web-maintenance-settings\",\"F_SQLVIEW_PUBLIC_ADD\",\"F_PERFORM_MAINTENANCE\",\"F_COLOR_SET_ADD\",\"F_PROGRAM_STAGE_INSTANCE_DELETE\",\"F_METADATA_EXPORT\",\"F_MINMAX_DATAELEMENT_ADD\",\"F_PROGRAMSTAGE_SECTION_ADD\",\"F_DATAELEMENTGROUP_PRIVATE_ADD\",\"F_VALIDATIONRULE_PRIVATE_ADD\",\"F_APPROVE_DATA\",\"M_dhis-web-mapping\",\"F_DATAELEMENT_PRIVATE_ADD\",\"F_VALIDATIONCRITERIA_ADD\",\"F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS\",\"F_IGNORE_TRACKER_REQUIRED_VALUE_VALIDATION\",\"F_PROGRAM_PUBLIC_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_DELETE\",\"F_USER_ADD_WITHIN_MANAGED_GROUP\",\"M_Web_Portal\",\"F_ORGANISATIONUNIT_ADD\",\"M_dhis-web-user\",\"F_LEGEND_SET_PUBLIC_ADD\",\"F_CONSTANT_ADD\",\"F_PREDICTORGROUP_DELETE\",\"F_TRACKED_ENTITY_COMMENT_ADD\",\"F_TRACKED_ENTITY_INSTANCE_MANAGEMENT\",\"M_dhis-web-visualizer\",\"F_INDICATOR_PUBLIC_ADD\",\"F_INDICATORGROUP_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_PRIVATE_ADD\",\"M_dhis-web-maintenance\",\"M_dhis-web-approval\",\"F_PROGRAM_RULE_MANAGEMENT\",\"F_TEI_CASCADE_DELETE\",\"F_FRED_UPDATE\",\"F_VISUALIZATION_EXTERNAL\",\"M_dhis-web-cache-cleaner\",\"F_EDIT_EXPIRED\",\"F_ACCESS_TRACKED_ENTITY_ATTRIBUTES\",\"F_PROGRAM_DASHBOARD_CONFIG_ADMIN\",\"F_EVENT_VISUALIZATION_EXTERNAL\",\"F_ORGANISATIONUNITLEVEL_UPDATE\",\"F_CATEGORY_OPTION_PUBLIC_ADD\",\"M_dhis-web-datastore\",\"F_CATEGORY_OPTION_DELETE\",\"M_Data_Table\",\"M_dhis-web-menu-management\",\"F_REPORT_PUBLIC_ADD\",\"F_VALIDATIONRULEGROUP_DELETE\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_ADD\",\"F_RELATIONSHIP_MANAGEMENT\",\"F_COLOR_ADD\",\"F_OPTIONSET_PRIVATE_ADD\",\"F_PROGRAM_RULE_DELETE\",\"F_GENERATE_STATISTICAL_PROGRAM_REPORT\",\"F_ORGUNITGROUP_DELETE\",\"F_DATAELEMENTGROUPSET_PRIVATE_ADD\",\"M_dhis-web-tracker-capture\",\"F_LOCALE_ADD\",\"F_LEGEND_ADD\",\"F_CATEGORY_OPTION_GROUP_PRIVATE_ADD\",\"F_PROGRAM_INSTANCE_MANAGEMENT\",\"M_dhis-web-reporting\",\"F_CATEGORY_PUBLIC_ADD\",\"F_SECTION_ADD\",\"F_CATEGORY_COMBO_PUBLIC_ADD\",\"M_dhis-web-maintenance-datadictionary\",\"F_DATASET_DELETE\",\"F_INDICATORGROUPSET_DELETE\",\"F_USER_DELETE_WITHIN_MANAGED_GROUP\",\"F_ADD_TRACKED_ENTITY_FORM\",\"M_dhis-web-scheduler\",\"F_OPTIONGROUP_PUBLIC_ADD\",\"F_USERROLE_PRIVATE_ADD\",\"M_dhis-web-messaging\",\"M_dhis-web-maintenance-program\",\"F_EXTERNALFILERESOURCE_ADD\",\"F_MAP_EXTERNAL\",\"M_bna_widget\",\"F_DATAELEMENTGROUPSET_PUBLIC_ADD\",\"F_DATAELEMENTGROUP_DELETE\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_ADD\",\"F_RELATIONSHIP_ADD\",\"F_ORGUNITGROUP_PRIVATE_ADD\",\"F_DATAELEMENTGROUP_PUBLIC_ADD\",\"F_USER_GROUPS_READ_ONLY_ADD_MEMBERS\",\"F_LOCALE_DELETE\",\"F_PREDICTOR_RUN\",\"F_DATAELEMENT_DELETE\",\"F_OPTIONGROUP_DELETE\",\"F_LEGEND_SET_PRIVATE_ADD\",\"F_PROGRAMSTAGE_DELETE\",\"F_ATTRIBUTE_PUBLIC_ADD\",\"F_TRACKED_ENTITY_FORM_DELETE\",\"F_USERROLE_DELETE\",\"F_DOCUMENT_DELETE\",\"F_ORGUNITGROUPSET_DELETE\",\"M_dhis-web-translations\",\"M_dhis-web-sms\",\"F_SCHEDULING_CASE_AGGREGATE_QUERY_BUILDER\",\"F_PROGRAM_DELETE\",\"F_VALIDATIONRULE_DELETE\",\"F_PROGRAMDATAELEMENT_ADD\",\"M_dhis-web-mobile\",\"F_ACTIVITY_PLAN\",\"F_RELATIONSHIPTYPE_PUBLIC_ADD\",\"F_PREDICTOR_ADD\",\"F_SQLVIEW_PRIVATE_ADD\",\"F_EXPORT_DATA\",\"F_OAUTH2_CLIENT_MANAGE\",\"F_EVENT_VISUALIZATION_PUBLIC_ADD\",\"F_ORGUNITGROUP_PUBLIC_ADD\",\"F_APPROVE_DATA_LOWER_LEVELS\",\"M_Social_Media_Video\",\"F_OPTIONSET_PUBLIC_ADD\",\"F_EVENTCHART_EXTERNAL\",\"M_dhis-web-dataentry\",\"F_PROGRAM_TRACKING_SEARCH\",\"M_dhis-web-maintenance-dataset\",\"F_USERROLE_LIST\",\"M_dhis-web-import-export\",\"M_dhis-web-caseentry\",\"F_USERROLE_PUBLIC_ADD\",\"M_dhis-web-importexport\",\"M_InterpretationsTest\",\"F_ORGUNITGROUPSET_PUBLIC_ADD\",\"F_SQLVIEW_EXTERNAL\",\"F_REPORT_DELETE\",\"F_DASHBOARD_PUBLIC_ADD\",\"F_CONSTANT_DELETE\",\"M_dhis-web-maintenance-user\",\"F_PREDICTOR_DELETE\",\"M_dhis-web-data-visualizer\",\"F_DATASET_PRIVATE_ADD\",\"F_EVENTREPORT_PUBLIC_ADD\",\"F_PROGRAMSTAGE_SECTION_DELETE\",\"F_TRACKED_ENTITY_UPDATE\",\"F_CATEGORY_OPTION_GROUP_SET_PUBLIC_ADD\",\"F_TRACKED_ENTITY_INSTANCE_DASHBOARD\",\"F_METADATA_MANAGE\",\"F_ANALYTICSTABLEHOOK_DELETE\",\"F_UNCOMPLETE_EVENT\",\"M_dhis-web-sms-configuration\",\"M_dhis-web-interpretation\",\"F_LEGEND_DELETE\",\"M_Custom_Js_Css\",\"F_PROGRAM_INDICATOR_MANAGEMENT\",\"F_ANONYMOUS_DATA_ENTRY\",\"F_MAP_PUBLIC_ADD\",\"F_PROGRAM_VALIDATION\",\"F_SCHEDULING_ADMIN\",\"F_TRACKED_ENTITY_COMMENT_DELETE\",\"F_DATAELEMENT_MINMAX_DELETE\",\"F_MOBILE_SETTINGS\",\"F_PREDICTORGROUP_ADD\",\"F_REPORT_PRIVATE_ADD\",\"F_VALIDATIONRULEGROUP_PRIVATE_ADD\",\"F_PUSH_ANALYSIS_DELETE\",\"F_REPLICATE_USER\",\"F_DATAVALUE_ADD\",\"M_dhis-web-maintenance-organisationunit\",\"F_INSERT_CUSTOM_JS_CSS\",\"F_DATAELEMENTGROUPSET_DELETE\",\"F_SQLVIEW_DELETE\",\"F_ENROLLMENT_CASCADE_DELETE\",\"F_PROGRAMDATAELEMENT_DELETE\",\"F_TRACKED_ENTITY_INSTANCE_LIST\",\"F_INDICATORTYPE_ADD\",\"F_LEGEND_SET_DELETE\",\"F_VIEW_EVENT_ANALYTICS\",\"F_PROGRAMSTAGE_SECTION_MANAGEMENT\",\"F_IMPORT_EVENTS\",\"F_PROGRAM_INSTANCE_DELETE\",\"F_INDICATOR_PRIVATE_ADD\",\"F_TRACKED_ENTITY_INSTANCE_HISTORY\",\"F_FRED_CREATE\",\"F_EVENTCHART_PUBLIC_ADD\",\"F_PUSH_ANALYSIS_ADD\",\"M_dhis-web-event-visualizer\",\"F_USER_ADD\",\"F_EXTERNAL_MAP_LAYER_DELETE\",\"F_SYSTEM_SETTING\",\"F_ANALYTICSTABLEHOOK_ADD\",\"F_ATTRIBUTE_PRIVATE_ADD\",\"F_DOCUMENT_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_DELETE\",\"M_Easy_Visualization\",\"F_VISUALIZATION_PUBLIC_ADD\",\"F_DATAELEMENT_MINMAX_ADD\",\"M_dhis-web-data-quality\",\"M_dhis-web-pivot\",\"F_EVENTREPORT_EXTERNAL\",\"F_PROGRAM_RULE_UPDATE\",\"F_DATAELEMENT_PUBLIC_ADD\",\"M_dhis-web-validationrule\",\"F_CONSTANT_MANAGEMENT\",\"F_RUN_VALIDATION\",\"F_MANAGE_TICKETS\",\"F_GENERATE_BENEFICIARY_TABULAR_REPORT\",\"F_OPTIONGROUP_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_DELETE\",\"M_User_Administration\",\"M_dhis-web-settings\",\"F_IMPORT_DATA\",\"F_VIEW_DATABROWSER\",\"F_PERFORM_ANALYTICS_EXPLAIN\",\"F_MOBILE_DELETE_SMS\",\"F_OPTIONSET_MANAGEMENT\",\"F_SEND_MESSAGE\",\"F_PROGRAMSTAGE_ADD\",\"M_dhis-web-maps\",\"F_MINMAX_DATAELEMENT_DELETE\",\"F_ATTRIBUTE_DELETE\",\"F_OPTIONSET_DELETE\",\"F_PROGRAM_TRACKING_LIST\",\"M_dhis-web-dashboard\",\"M_dhis-web-data-administration\",\"F_ACCEPT_DATA_LOWER_LEVELS\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_DELETE\",\"F_OPTIONGROUPSET_PUBLIC_ADD\",\"M_dhis-web-capture\",\"F_PROGRAM_INDICATOR_GROUP_PUBLIC_ADD\",\"F_CATEGORY_DELETE\",\"F_COLOR_SET_DELETE\",\"M_dhis-web-app-management\",\"F_INDICATORTYPE_DELETE\",\"F_NAME_BASED_DATA_ENTRY\",\"F_INDICATORGROUP_PRIVATE_ADD\",\"F_FRED_DELETE\",\"F_VALIDATIONCRITERIA_DELETE\",\"F_PROGRAM_STAGE_INSTANCE_SEARCH\"],\"dataSets\":[\"Nyh6laLdBEJ\",\"j38YW1Am7he\",\"aLpVgfXiz0f\",\"YFTk3VdO9av\",\"Rl58JxmKJo2\",\"eZDhcZi6FLP\",\"N4fIX1HL3TQ\",\"EDzMBk0RRji\",\"TuL8IOPzpHh\",\"ce7DSxx5H2I\",\"EKWVBc5C0ms\",\"PLq9sJluXvc\",\"rsyjyJmYD4J\",\"ULowA8V3ucd\",\"QX4ZTUbOt3a\",\"pBOMPrpg1QX\",\"OsPTWNqq26W\",\"V8MHeZHIrcP\",\"YZhd4nu3mzY\",\"Y8gAn9DfAGU\",\"vc6nF5yZsPR\",\"Lpw6GcnTrmS\",\"lyLU2wR22tC\",\"VTdjfLXXmoi\",\"SF8FDSqw30D\",\"BfMAe6Itzgt\"],\"userCredentials\":{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"externalAuth\":false,\"twoFA\":false,\"passwordLastUpdated\":\"2014-12-18T20:56:05.264\",\"cogsDimensionConstraints\":[],\"catDimensionConstraints\":[],\"previousPasswords\":[],\"lastLogin\":\"2023-03-01T08:45:59.771\",\"selfRegistered\":false,\"invitation\":false,\"disabled\":false,\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}]}}", - "{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"surname\":\"Traore\",\"firstName\":\"John\",\"employer\":\"DHIS\",\"languages\":\"English\",\"gender\":\"gender_male\",\"jobTitle\":\"Super user\",\"created\":\"2013-04-18T17:15:08.407\",\"lastUpdated\":\"2023-03-01T08:46:09.541\",\"dataViewOrganisationUnits\":[],\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userGroupAccesses\":[],\"userAccesses\":[],\"userGroups\":[{\"id\":\"Kk12LkEWtXp\"},{\"id\":\"M1Qre0247G3\"},{\"id\":\"NTC8GjJ7p8P\"},{\"id\":\"B6JNeAQ6akX\"},{\"id\":\"wl5cDMuUhmF\"},{\"id\":\"QYrzIjSfI8z\"},{\"id\":\"lFHP5lLkzVr\"},{\"id\":\"jvrEwEJ2yZn\"},{\"id\":\"vAvEltyXGbD\"},{\"id\":\"w900PX10L7O\"},{\"id\":\"GogLpGmkL0g\"},{\"id\":\"vRoAruMnNpB\"},{\"id\":\"z1gNAf2zUxZ\"},{\"id\":\"gXpmQO6eEOo\"},{\"id\":\"tH0GcNZZ1vW\"},{\"id\":\"H9XnHoWRKCg\"}],\"translations\":[],\"teiSearchOrganisationUnits\":[],\"organisationUnits\":[{\"id\":\"ImspTQPwCqd\"}],\"externalAccess\":false,\"displayName\":\"John Traore\",\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"name\":\"John Traore\",\"email\":\"dummy@dhis2.org\",\"introduction\":\"I am the super user of DHIS 2\",\"birthday\":\"1971-04-08T00:00:00.000\",\"nationality\":\"Sierra Leone\",\"education\":\"Master of super using\",\"interests\":\"Football, swimming, singing, dancing\",\"whatsApp\":\"+123123123123\",\"facebookMessenger\":\"john.traore\",\"skype\":\"john.traore\",\"telegram\":\"john.traore\",\"twitter\":\"john.traore\",\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}],\"settings\":{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false},\"programs\":[\"uy2gU8kT1jF\",\"ur1Edk5Oe2n\",\"MoUd5BTQ3lY\",\"lxAQ7Zs9VYR\",\"IpHINAT79UW\",\"kla3mAPgvCH\",\"qDkgAbB5Jlk\",\"VBqh0ynB2wv\",\"bMcwwoVnbSR\",\"q04UBOqq3rp\",\"eBAyeGv0exc\",\"M3xtLkYBlKI\",\"fDd25txQckK\",\"WSGAb5XwJ3Y\"],\"authorities\":[\"F_PROGRAM_INDICATOR_PUBLIC_ADD\",\"F_SQLVIEW_EXECUTE\",\"F_USER_VIEW\",\"F_GENERATE_MIN_MAX_VALUES\",\"F_VALIDATIONRULE_PUBLIC_ADD\",\"F_CATEGORY_PRIVATE_ADD\",\"F_INDICATORGROUPSET_PUBLIC_ADD\",\"F_DATAVALUE_DELETE\",\"F_EXTERNAL_MAP_LAYER_PRIVATE_ADD\",\"F_RELATIONSHIPTYPE_DELETE\",\"F_CATEGORY_OPTION_PRIVATE_ADD\",\"F_SINGLE_EVENT_DATA_ENTRY\",\"F_CATEGORY_OPTION_GROUP_PUBLIC_ADD\",\"F_GIS_ADMIN\",\"M_dhis-web-event-capture\",\"F_SEND_EMAIL\",\"M_dhis-web-aggregate-data-entry\",\"F_ORGUNITGROUPSET_PRIVATE_ADD\",\"F_INDICATOR_DELETE\",\"M_dhis-web-event-reports\",\"F_VIEW_UNAPPROVED_DATA\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW\",\"F_TRACKED_ENTITY_INSTANCE_CHANGE_LOCATION\",\"F_OPTIONGROUPSET_DELETE\",\"F_USERGROUP_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_PRIVATE_ADD\",\"F_DOCUMENT_EXTERNAL\",\"F_PROGRAM_TRACKING_MANAGEMENT\",\"F_TRACKED_ENTITY_ATTRIBUTE_PUBLIC_ADD\",\"F_GENERATE_PROGRAM_SUMMARY_REPORT\",\"F_PROGRAM_INDICATOR_DELETE\",\"F_MOBILE_SENDSMS\",\"F_TRACKED_ENTITY_ADD\",\"F_TRACKED_ENTITY_MANAGEMENT\",\"F_RELATIONSHIP_DELETE\",\"F_VALIDATIONRULEGROUP_PUBLIC_ADD\",\"F_REPORT_EXTERNAL\",\"F_DOCUMENT_PRIVATE_ADD\",\"M_dhis-web-reports\",\"F_TRACKED_ENTITY_DELETE\",\"F_USERGROUP_DELETE\",\"F_PROGRAM_PRIVATE_ADD\",\"F_CATEGORY_COMBO_PRIVATE_ADD\",\"F_SCHEDULING_SEND_MESSAGE\",\"F_EXTERNAL_MAP_LAYER_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_DELETE\",\"F_ORGANISATIONUNIT_MOVE\",\"M_dhis-web-usage-analytics\",\"F_COLOR_DELETE\",\"F_INDICATORGROUP_DELETE\",\"F_ORGANISATIONUNIT_DELETE\",\"F_PROGRAM_RULE_ADD\",\"M_dhis-web-light\",\"F_OPTIONGROUPSET_PRIVATE_ADD\",\"F_DATA_MART_ADMIN\",\"M_dhis-web-maintenance-mobile\",\"F_DATASET_PUBLIC_ADD\",\"F_CATEGORY_COMBO_DELETE\",\"F_SECTION_DELETE\",\"F_USER_DELETE\",\"F_INDICATORGROUPSET_PRIVATE_ADD\",\"F_PROGRAM_INDICATOR_PRIVATE_ADD\",\"F_METADATA_IMPORT\",\"M_dhis-web-maintenance-appmanager\",\"F_EXPORT_EVENTS\",\"M_dhis-web-maintenance-settings\",\"F_SQLVIEW_PUBLIC_ADD\",\"F_PERFORM_MAINTENANCE\",\"F_COLOR_SET_ADD\",\"F_PROGRAM_STAGE_INSTANCE_DELETE\",\"F_METADATA_EXPORT\",\"F_MINMAX_DATAELEMENT_ADD\",\"F_PROGRAMSTAGE_SECTION_ADD\",\"F_DATAELEMENTGROUP_PRIVATE_ADD\",\"F_VALIDATIONRULE_PRIVATE_ADD\",\"F_APPROVE_DATA\",\"M_dhis-web-mapping\",\"F_DATAELEMENT_PRIVATE_ADD\",\"F_VALIDATIONCRITERIA_ADD\",\"F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS\",\"F_IGNORE_TRACKER_REQUIRED_VALUE_VALIDATION\",\"F_PROGRAM_PUBLIC_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_DELETE\",\"F_USER_ADD_WITHIN_MANAGED_GROUP\",\"M_Web_Portal\",\"F_ORGANISATIONUNIT_ADD\",\"M_dhis-web-user\",\"F_LEGEND_SET_PUBLIC_ADD\",\"F_CONSTANT_ADD\",\"F_PREDICTORGROUP_DELETE\",\"F_TRACKED_ENTITY_COMMENT_ADD\",\"F_TRACKED_ENTITY_INSTANCE_MANAGEMENT\",\"M_dhis-web-visualizer\",\"F_INDICATOR_PUBLIC_ADD\",\"F_INDICATORGROUP_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_PRIVATE_ADD\",\"M_dhis-web-maintenance\",\"M_dhis-web-approval\",\"F_PROGRAM_RULE_MANAGEMENT\",\"F_TEI_CASCADE_DELETE\",\"F_FRED_UPDATE\",\"F_VISUALIZATION_EXTERNAL\",\"M_dhis-web-cache-cleaner\",\"F_EDIT_EXPIRED\",\"F_ACCESS_TRACKED_ENTITY_ATTRIBUTES\",\"F_PROGRAM_DASHBOARD_CONFIG_ADMIN\",\"F_EVENT_VISUALIZATION_EXTERNAL\",\"F_ORGANISATIONUNITLEVEL_UPDATE\",\"F_CATEGORY_OPTION_PUBLIC_ADD\",\"M_dhis-web-datastore\",\"F_CATEGORY_OPTION_DELETE\",\"M_Data_Table\",\"M_dhis-web-menu-management\",\"F_REPORT_PUBLIC_ADD\",\"F_VALIDATIONRULEGROUP_DELETE\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_ADD\",\"F_RELATIONSHIP_MANAGEMENT\",\"F_COLOR_ADD\",\"F_OPTIONSET_PRIVATE_ADD\",\"F_PROGRAM_RULE_DELETE\",\"F_GENERATE_STATISTICAL_PROGRAM_REPORT\",\"F_ORGUNITGROUP_DELETE\",\"F_DATAELEMENTGROUPSET_PRIVATE_ADD\",\"M_dhis-web-tracker-capture\",\"F_LOCALE_ADD\",\"F_LEGEND_ADD\",\"F_CATEGORY_OPTION_GROUP_PRIVATE_ADD\",\"F_PROGRAM_INSTANCE_MANAGEMENT\",\"M_dhis-web-reporting\",\"F_CATEGORY_PUBLIC_ADD\",\"F_SECTION_ADD\",\"F_CATEGORY_COMBO_PUBLIC_ADD\",\"M_dhis-web-maintenance-datadictionary\",\"F_DATASET_DELETE\",\"F_INDICATORGROUPSET_DELETE\",\"F_USER_DELETE_WITHIN_MANAGED_GROUP\",\"F_ADD_TRACKED_ENTITY_FORM\",\"M_dhis-web-scheduler\",\"F_OPTIONGROUP_PUBLIC_ADD\",\"F_USERROLE_PRIVATE_ADD\",\"M_dhis-web-messaging\",\"M_dhis-web-maintenance-program\",\"F_EXTERNALFILERESOURCE_ADD\",\"F_MAP_EXTERNAL\",\"M_bna_widget\",\"F_DATAELEMENTGROUPSET_PUBLIC_ADD\",\"F_DATAELEMENTGROUP_DELETE\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_ADD\",\"F_RELATIONSHIP_ADD\",\"F_ORGUNITGROUP_PRIVATE_ADD\",\"F_DATAELEMENTGROUP_PUBLIC_ADD\",\"F_USER_GROUPS_READ_ONLY_ADD_MEMBERS\",\"F_LOCALE_DELETE\",\"F_PREDICTOR_RUN\",\"F_DATAELEMENT_DELETE\",\"F_OPTIONGROUP_DELETE\",\"F_LEGEND_SET_PRIVATE_ADD\",\"F_PROGRAMSTAGE_DELETE\",\"F_ATTRIBUTE_PUBLIC_ADD\",\"F_TRACKED_ENTITY_FORM_DELETE\",\"F_USERROLE_DELETE\",\"F_DOCUMENT_DELETE\",\"F_ORGUNITGROUPSET_DELETE\",\"M_dhis-web-translations\",\"M_dhis-web-sms\",\"F_SCHEDULING_CASE_AGGREGATE_QUERY_BUILDER\",\"F_PROGRAM_DELETE\",\"F_VALIDATIONRULE_DELETE\",\"F_PROGRAMDATAELEMENT_ADD\",\"M_dhis-web-mobile\",\"F_ACTIVITY_PLAN\",\"F_RELATIONSHIPTYPE_PUBLIC_ADD\",\"F_PREDICTOR_ADD\",\"F_SQLVIEW_PRIVATE_ADD\",\"F_EXPORT_DATA\",\"F_OAUTH2_CLIENT_MANAGE\",\"F_EVENT_VISUALIZATION_PUBLIC_ADD\",\"F_ORGUNITGROUP_PUBLIC_ADD\",\"F_APPROVE_DATA_LOWER_LEVELS\",\"M_Social_Media_Video\",\"F_OPTIONSET_PUBLIC_ADD\",\"F_EVENTCHART_EXTERNAL\",\"M_dhis-web-dataentry\",\"F_PROGRAM_TRACKING_SEARCH\",\"M_dhis-web-maintenance-dataset\",\"F_USERROLE_LIST\",\"M_dhis-web-import-export\",\"M_dhis-web-caseentry\",\"F_USERROLE_PUBLIC_ADD\",\"M_dhis-web-importexport\",\"M_InterpretationsTest\",\"F_ORGUNITGROUPSET_PUBLIC_ADD\",\"F_SQLVIEW_EXTERNAL\",\"F_REPORT_DELETE\",\"F_DASHBOARD_PUBLIC_ADD\",\"F_CONSTANT_DELETE\",\"M_dhis-web-maintenance-user\",\"F_PREDICTOR_DELETE\",\"M_dhis-web-data-visualizer\",\"F_DATASET_PRIVATE_ADD\",\"F_EVENTREPORT_PUBLIC_ADD\",\"F_PROGRAMSTAGE_SECTION_DELETE\",\"F_TRACKED_ENTITY_UPDATE\",\"F_CATEGORY_OPTION_GROUP_SET_PUBLIC_ADD\",\"F_TRACKED_ENTITY_INSTANCE_DASHBOARD\",\"F_METADATA_MANAGE\",\"F_ANALYTICSTABLEHOOK_DELETE\",\"F_UNCOMPLETE_EVENT\",\"M_dhis-web-sms-configuration\",\"M_dhis-web-interpretation\",\"F_LEGEND_DELETE\",\"M_Custom_Js_Css\",\"F_PROGRAM_INDICATOR_MANAGEMENT\",\"F_ANONYMOUS_DATA_ENTRY\",\"F_MAP_PUBLIC_ADD\",\"F_PROGRAM_VALIDATION\",\"F_SCHEDULING_ADMIN\",\"F_TRACKED_ENTITY_COMMENT_DELETE\",\"F_DATAELEMENT_MINMAX_DELETE\",\"F_MOBILE_SETTINGS\",\"F_PREDICTORGROUP_ADD\",\"F_REPORT_PRIVATE_ADD\",\"F_VALIDATIONRULEGROUP_PRIVATE_ADD\",\"F_PUSH_ANALYSIS_DELETE\",\"F_REPLICATE_USER\",\"F_DATAVALUE_ADD\",\"M_dhis-web-maintenance-organisationunit\",\"F_INSERT_CUSTOM_JS_CSS\",\"F_DATAELEMENTGROUPSET_DELETE\",\"F_SQLVIEW_DELETE\",\"F_ENROLLMENT_CASCADE_DELETE\",\"F_PROGRAMDATAELEMENT_DELETE\",\"F_TRACKED_ENTITY_INSTANCE_LIST\",\"F_INDICATORTYPE_ADD\",\"F_LEGEND_SET_DELETE\",\"F_VIEW_EVENT_ANALYTICS\",\"F_PROGRAMSTAGE_SECTION_MANAGEMENT\",\"F_IMPORT_EVENTS\",\"F_PROGRAM_INSTANCE_DELETE\",\"F_INDICATOR_PRIVATE_ADD\",\"F_TRACKED_ENTITY_INSTANCE_HISTORY\",\"F_FRED_CREATE\",\"F_EVENTCHART_PUBLIC_ADD\",\"F_PUSH_ANALYSIS_ADD\",\"M_dhis-web-event-visualizer\",\"F_USER_ADD\",\"F_EXTERNAL_MAP_LAYER_DELETE\",\"F_SYSTEM_SETTING\",\"F_ANALYTICSTABLEHOOK_ADD\",\"F_ATTRIBUTE_PRIVATE_ADD\",\"F_DOCUMENT_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_DELETE\",\"M_Easy_Visualization\",\"F_VISUALIZATION_PUBLIC_ADD\",\"F_DATAELEMENT_MINMAX_ADD\",\"M_dhis-web-data-quality\",\"M_dhis-web-pivot\",\"F_EVENTREPORT_EXTERNAL\",\"F_PROGRAM_RULE_UPDATE\",\"F_DATAELEMENT_PUBLIC_ADD\",\"M_dhis-web-validationrule\",\"F_CONSTANT_MANAGEMENT\",\"F_RUN_VALIDATION\",\"F_MANAGE_TICKETS\",\"F_GENERATE_BENEFICIARY_TABULAR_REPORT\",\"F_OPTIONGROUP_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_DELETE\",\"M_User_Administration\",\"M_dhis-web-settings\",\"F_IMPORT_DATA\",\"F_VIEW_DATABROWSER\",\"F_PERFORM_ANALYTICS_EXPLAIN\",\"F_MOBILE_DELETE_SMS\",\"F_OPTIONSET_MANAGEMENT\",\"F_SEND_MESSAGE\",\"F_PROGRAMSTAGE_ADD\",\"M_dhis-web-maps\",\"F_MINMAX_DATAELEMENT_DELETE\",\"F_ATTRIBUTE_DELETE\",\"F_OPTIONSET_DELETE\",\"F_PROGRAM_TRACKING_LIST\",\"M_dhis-web-dashboard\",\"M_dhis-web-data-administration\",\"F_ACCEPT_DATA_LOWER_LEVELS\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_DELETE\",\"F_OPTIONGROUPSET_PUBLIC_ADD\",\"M_dhis-web-capture\",\"F_PROGRAM_INDICATOR_GROUP_PUBLIC_ADD\",\"F_CATEGORY_DELETE\",\"F_COLOR_SET_DELETE\",\"M_dhis-web-app-management\",\"F_INDICATORTYPE_DELETE\",\"F_NAME_BASED_DATA_ENTRY\",\"F_INDICATORGROUP_PRIVATE_ADD\",\"F_FRED_DELETE\",\"F_VALIDATIONCRITERIA_DELETE\",\"F_PROGRAM_STAGE_INSTANCE_SEARCH\"],\"dataSets\":[\"Nyh6laLdBEJ\",\"j38YW1Am7he\",\"aLpVgfXiz0f\",\"YFTk3VdO9av\",\"Rl58JxmKJo2\",\"eZDhcZi6FLP\",\"N4fIX1HL3TQ\",\"EDzMBk0RRji\",\"TuL8IOPzpHh\",\"ce7DSxx5H2I\",\"EKWVBc5C0ms\",\"PLq9sJluXvc\",\"rsyjyJmYD4J\",\"ULowA8V3ucd\",\"QX4ZTUbOt3a\",\"pBOMPrpg1QX\",\"OsPTWNqq26W\",\"V8MHeZHIrcP\",\"YZhd4nu3mzY\",\"Y8gAn9DfAGU\",\"vc6nF5yZsPR\",\"Lpw6GcnTrmS\",\"lyLU2wR22tC\",\"VTdjfLXXmoi\",\"SF8FDSqw30D\",\"BfMAe6Itzgt\"],\"userCredentials\":{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"externalAuth\":false,\"twoFA\":false,\"passwordLastUpdated\":\"2014-12-18T20:56:05.264\",\"cogsDimensionConstraints\":[],\"catDimensionConstraints\":[],\"previousPasswords\":[],\"lastLogin\":\"2023-03-01T08:46:09.540\",\"selfRegistered\":false,\"invitation\":false,\"disabled\":false,\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}]}}", - "{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"surname\":\"Traore\",\"firstName\":\"John\",\"employer\":\"DHIS\",\"languages\":\"English\",\"gender\":\"gender_male\",\"jobTitle\":\"Super user\",\"created\":\"2013-04-18T17:15:08.407\",\"lastUpdated\":\"2023-03-01T08:46:21.922\",\"dataViewOrganisationUnits\":[],\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userGroupAccesses\":[],\"userAccesses\":[],\"userGroups\":[{\"id\":\"Kk12LkEWtXp\"},{\"id\":\"M1Qre0247G3\"},{\"id\":\"NTC8GjJ7p8P\"},{\"id\":\"B6JNeAQ6akX\"},{\"id\":\"wl5cDMuUhmF\"},{\"id\":\"QYrzIjSfI8z\"},{\"id\":\"lFHP5lLkzVr\"},{\"id\":\"jvrEwEJ2yZn\"},{\"id\":\"vAvEltyXGbD\"},{\"id\":\"w900PX10L7O\"},{\"id\":\"GogLpGmkL0g\"},{\"id\":\"vRoAruMnNpB\"},{\"id\":\"z1gNAf2zUxZ\"},{\"id\":\"gXpmQO6eEOo\"},{\"id\":\"tH0GcNZZ1vW\"},{\"id\":\"H9XnHoWRKCg\"}],\"translations\":[],\"teiSearchOrganisationUnits\":[],\"organisationUnits\":[{\"id\":\"ImspTQPwCqd\"}],\"externalAccess\":false,\"displayName\":\"John Traore\",\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"name\":\"John Traore\",\"email\":\"dummy@dhis2.org\",\"introduction\":\"I am the super user of DHIS 2\",\"birthday\":\"1971-04-08T00:00:00.000\",\"nationality\":\"Sierra Leone\",\"education\":\"Master of super using\",\"interests\":\"Football, swimming, singing, dancing\",\"whatsApp\":\"+123123123123\",\"facebookMessenger\":\"john.traore\",\"skype\":\"john.traore\",\"telegram\":\"john.traore\",\"twitter\":\"john.traore\",\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}],\"settings\":{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false},\"programs\":[\"uy2gU8kT1jF\",\"ur1Edk5Oe2n\",\"MoUd5BTQ3lY\",\"lxAQ7Zs9VYR\",\"IpHINAT79UW\",\"kla3mAPgvCH\",\"qDkgAbB5Jlk\",\"VBqh0ynB2wv\",\"bMcwwoVnbSR\",\"q04UBOqq3rp\",\"eBAyeGv0exc\",\"M3xtLkYBlKI\",\"fDd25txQckK\",\"WSGAb5XwJ3Y\"],\"authorities\":[\"F_PROGRAM_INDICATOR_PUBLIC_ADD\",\"F_SQLVIEW_EXECUTE\",\"F_USER_VIEW\",\"F_GENERATE_MIN_MAX_VALUES\",\"F_VALIDATIONRULE_PUBLIC_ADD\",\"F_CATEGORY_PRIVATE_ADD\",\"F_INDICATORGROUPSET_PUBLIC_ADD\",\"F_DATAVALUE_DELETE\",\"F_EXTERNAL_MAP_LAYER_PRIVATE_ADD\",\"F_RELATIONSHIPTYPE_DELETE\",\"F_CATEGORY_OPTION_PRIVATE_ADD\",\"F_SINGLE_EVENT_DATA_ENTRY\",\"F_CATEGORY_OPTION_GROUP_PUBLIC_ADD\",\"F_GIS_ADMIN\",\"M_dhis-web-event-capture\",\"F_SEND_EMAIL\",\"M_dhis-web-aggregate-data-entry\",\"F_ORGUNITGROUPSET_PRIVATE_ADD\",\"F_INDICATOR_DELETE\",\"M_dhis-web-event-reports\",\"F_VIEW_UNAPPROVED_DATA\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW\",\"F_TRACKED_ENTITY_INSTANCE_CHANGE_LOCATION\",\"F_OPTIONGROUPSET_DELETE\",\"F_USERGROUP_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_PRIVATE_ADD\",\"F_DOCUMENT_EXTERNAL\",\"F_PROGRAM_TRACKING_MANAGEMENT\",\"F_TRACKED_ENTITY_ATTRIBUTE_PUBLIC_ADD\",\"F_GENERATE_PROGRAM_SUMMARY_REPORT\",\"F_PROGRAM_INDICATOR_DELETE\",\"F_MOBILE_SENDSMS\",\"F_TRACKED_ENTITY_ADD\",\"F_TRACKED_ENTITY_MANAGEMENT\",\"F_RELATIONSHIP_DELETE\",\"F_VALIDATIONRULEGROUP_PUBLIC_ADD\",\"F_REPORT_EXTERNAL\",\"F_DOCUMENT_PRIVATE_ADD\",\"M_dhis-web-reports\",\"F_TRACKED_ENTITY_DELETE\",\"F_USERGROUP_DELETE\",\"F_PROGRAM_PRIVATE_ADD\",\"F_CATEGORY_COMBO_PRIVATE_ADD\",\"F_SCHEDULING_SEND_MESSAGE\",\"F_EXTERNAL_MAP_LAYER_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_DELETE\",\"F_ORGANISATIONUNIT_MOVE\",\"M_dhis-web-usage-analytics\",\"F_COLOR_DELETE\",\"F_INDICATORGROUP_DELETE\",\"F_ORGANISATIONUNIT_DELETE\",\"F_PROGRAM_RULE_ADD\",\"M_dhis-web-light\",\"F_OPTIONGROUPSET_PRIVATE_ADD\",\"F_DATA_MART_ADMIN\",\"M_dhis-web-maintenance-mobile\",\"F_DATASET_PUBLIC_ADD\",\"F_CATEGORY_COMBO_DELETE\",\"F_SECTION_DELETE\",\"F_USER_DELETE\",\"F_INDICATORGROUPSET_PRIVATE_ADD\",\"F_PROGRAM_INDICATOR_PRIVATE_ADD\",\"F_METADATA_IMPORT\",\"M_dhis-web-maintenance-appmanager\",\"F_EXPORT_EVENTS\",\"M_dhis-web-maintenance-settings\",\"F_SQLVIEW_PUBLIC_ADD\",\"F_PERFORM_MAINTENANCE\",\"F_COLOR_SET_ADD\",\"F_PROGRAM_STAGE_INSTANCE_DELETE\",\"F_METADATA_EXPORT\",\"F_MINMAX_DATAELEMENT_ADD\",\"F_PROGRAMSTAGE_SECTION_ADD\",\"F_DATAELEMENTGROUP_PRIVATE_ADD\",\"F_VALIDATIONRULE_PRIVATE_ADD\",\"F_APPROVE_DATA\",\"M_dhis-web-mapping\",\"F_DATAELEMENT_PRIVATE_ADD\",\"F_VALIDATIONCRITERIA_ADD\",\"F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS\",\"F_IGNORE_TRACKER_REQUIRED_VALUE_VALIDATION\",\"F_PROGRAM_PUBLIC_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_DELETE\",\"F_USER_ADD_WITHIN_MANAGED_GROUP\",\"M_Web_Portal\",\"F_ORGANISATIONUNIT_ADD\",\"M_dhis-web-user\",\"F_LEGEND_SET_PUBLIC_ADD\",\"F_CONSTANT_ADD\",\"F_PREDICTORGROUP_DELETE\",\"F_TRACKED_ENTITY_COMMENT_ADD\",\"F_TRACKED_ENTITY_INSTANCE_MANAGEMENT\",\"M_dhis-web-visualizer\",\"F_INDICATOR_PUBLIC_ADD\",\"F_INDICATORGROUP_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_PRIVATE_ADD\",\"M_dhis-web-maintenance\",\"M_dhis-web-approval\",\"F_PROGRAM_RULE_MANAGEMENT\",\"F_TEI_CASCADE_DELETE\",\"F_FRED_UPDATE\",\"F_VISUALIZATION_EXTERNAL\",\"M_dhis-web-cache-cleaner\",\"F_EDIT_EXPIRED\",\"F_ACCESS_TRACKED_ENTITY_ATTRIBUTES\",\"F_PROGRAM_DASHBOARD_CONFIG_ADMIN\",\"F_EVENT_VISUALIZATION_EXTERNAL\",\"F_ORGANISATIONUNITLEVEL_UPDATE\",\"F_CATEGORY_OPTION_PUBLIC_ADD\",\"M_dhis-web-datastore\",\"F_CATEGORY_OPTION_DELETE\",\"M_Data_Table\",\"M_dhis-web-menu-management\",\"F_REPORT_PUBLIC_ADD\",\"F_VALIDATIONRULEGROUP_DELETE\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_ADD\",\"F_RELATIONSHIP_MANAGEMENT\",\"F_COLOR_ADD\",\"F_OPTIONSET_PRIVATE_ADD\",\"F_PROGRAM_RULE_DELETE\",\"F_GENERATE_STATISTICAL_PROGRAM_REPORT\",\"F_ORGUNITGROUP_DELETE\",\"F_DATAELEMENTGROUPSET_PRIVATE_ADD\",\"M_dhis-web-tracker-capture\",\"F_LOCALE_ADD\",\"F_LEGEND_ADD\",\"F_CATEGORY_OPTION_GROUP_PRIVATE_ADD\",\"F_PROGRAM_INSTANCE_MANAGEMENT\",\"M_dhis-web-reporting\",\"F_CATEGORY_PUBLIC_ADD\",\"F_SECTION_ADD\",\"F_CATEGORY_COMBO_PUBLIC_ADD\",\"M_dhis-web-maintenance-datadictionary\",\"F_DATASET_DELETE\",\"F_INDICATORGROUPSET_DELETE\",\"F_USER_DELETE_WITHIN_MANAGED_GROUP\",\"F_ADD_TRACKED_ENTITY_FORM\",\"M_dhis-web-scheduler\",\"F_OPTIONGROUP_PUBLIC_ADD\",\"F_USERROLE_PRIVATE_ADD\",\"M_dhis-web-messaging\",\"M_dhis-web-maintenance-program\",\"F_EXTERNALFILERESOURCE_ADD\",\"F_MAP_EXTERNAL\",\"M_bna_widget\",\"F_DATAELEMENTGROUPSET_PUBLIC_ADD\",\"F_DATAELEMENTGROUP_DELETE\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_ADD\",\"F_RELATIONSHIP_ADD\",\"F_ORGUNITGROUP_PRIVATE_ADD\",\"F_DATAELEMENTGROUP_PUBLIC_ADD\",\"F_USER_GROUPS_READ_ONLY_ADD_MEMBERS\",\"F_LOCALE_DELETE\",\"F_PREDICTOR_RUN\",\"F_DATAELEMENT_DELETE\",\"F_OPTIONGROUP_DELETE\",\"F_LEGEND_SET_PRIVATE_ADD\",\"F_PROGRAMSTAGE_DELETE\",\"F_ATTRIBUTE_PUBLIC_ADD\",\"F_TRACKED_ENTITY_FORM_DELETE\",\"F_USERROLE_DELETE\",\"F_DOCUMENT_DELETE\",\"F_ORGUNITGROUPSET_DELETE\",\"M_dhis-web-translations\",\"M_dhis-web-sms\",\"F_SCHEDULING_CASE_AGGREGATE_QUERY_BUILDER\",\"F_PROGRAM_DELETE\",\"F_VALIDATIONRULE_DELETE\",\"F_PROGRAMDATAELEMENT_ADD\",\"M_dhis-web-mobile\",\"F_ACTIVITY_PLAN\",\"F_RELATIONSHIPTYPE_PUBLIC_ADD\",\"F_PREDICTOR_ADD\",\"F_SQLVIEW_PRIVATE_ADD\",\"F_EXPORT_DATA\",\"F_OAUTH2_CLIENT_MANAGE\",\"F_EVENT_VISUALIZATION_PUBLIC_ADD\",\"F_ORGUNITGROUP_PUBLIC_ADD\",\"F_APPROVE_DATA_LOWER_LEVELS\",\"M_Social_Media_Video\",\"F_OPTIONSET_PUBLIC_ADD\",\"F_EVENTCHART_EXTERNAL\",\"M_dhis-web-dataentry\",\"F_PROGRAM_TRACKING_SEARCH\",\"M_dhis-web-maintenance-dataset\",\"F_USERROLE_LIST\",\"M_dhis-web-import-export\",\"M_dhis-web-caseentry\",\"F_USERROLE_PUBLIC_ADD\",\"M_dhis-web-importexport\",\"M_InterpretationsTest\",\"F_ORGUNITGROUPSET_PUBLIC_ADD\",\"F_SQLVIEW_EXTERNAL\",\"F_REPORT_DELETE\",\"F_DASHBOARD_PUBLIC_ADD\",\"F_CONSTANT_DELETE\",\"M_dhis-web-maintenance-user\",\"F_PREDICTOR_DELETE\",\"M_dhis-web-data-visualizer\",\"F_DATASET_PRIVATE_ADD\",\"F_EVENTREPORT_PUBLIC_ADD\",\"F_PROGRAMSTAGE_SECTION_DELETE\",\"F_TRACKED_ENTITY_UPDATE\",\"F_CATEGORY_OPTION_GROUP_SET_PUBLIC_ADD\",\"F_TRACKED_ENTITY_INSTANCE_DASHBOARD\",\"F_METADATA_MANAGE\",\"F_ANALYTICSTABLEHOOK_DELETE\",\"F_UNCOMPLETE_EVENT\",\"M_dhis-web-sms-configuration\",\"M_dhis-web-interpretation\",\"F_LEGEND_DELETE\",\"M_Custom_Js_Css\",\"F_PROGRAM_INDICATOR_MANAGEMENT\",\"F_ANONYMOUS_DATA_ENTRY\",\"F_MAP_PUBLIC_ADD\",\"F_PROGRAM_VALIDATION\",\"F_SCHEDULING_ADMIN\",\"F_TRACKED_ENTITY_COMMENT_DELETE\",\"F_DATAELEMENT_MINMAX_DELETE\",\"F_MOBILE_SETTINGS\",\"F_PREDICTORGROUP_ADD\",\"F_REPORT_PRIVATE_ADD\",\"F_VALIDATIONRULEGROUP_PRIVATE_ADD\",\"F_PUSH_ANALYSIS_DELETE\",\"F_REPLICATE_USER\",\"F_DATAVALUE_ADD\",\"M_dhis-web-maintenance-organisationunit\",\"F_INSERT_CUSTOM_JS_CSS\",\"F_DATAELEMENTGROUPSET_DELETE\",\"F_SQLVIEW_DELETE\",\"F_ENROLLMENT_CASCADE_DELETE\",\"F_PROGRAMDATAELEMENT_DELETE\",\"F_TRACKED_ENTITY_INSTANCE_LIST\",\"F_INDICATORTYPE_ADD\",\"F_LEGEND_SET_DELETE\",\"F_VIEW_EVENT_ANALYTICS\",\"F_PROGRAMSTAGE_SECTION_MANAGEMENT\",\"F_IMPORT_EVENTS\",\"F_PROGRAM_INSTANCE_DELETE\",\"F_INDICATOR_PRIVATE_ADD\",\"F_TRACKED_ENTITY_INSTANCE_HISTORY\",\"F_FRED_CREATE\",\"F_EVENTCHART_PUBLIC_ADD\",\"F_PUSH_ANALYSIS_ADD\",\"M_dhis-web-event-visualizer\",\"F_USER_ADD\",\"F_EXTERNAL_MAP_LAYER_DELETE\",\"F_SYSTEM_SETTING\",\"F_ANALYTICSTABLEHOOK_ADD\",\"F_ATTRIBUTE_PRIVATE_ADD\",\"F_DOCUMENT_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_DELETE\",\"M_Easy_Visualization\",\"F_VISUALIZATION_PUBLIC_ADD\",\"F_DATAELEMENT_MINMAX_ADD\",\"M_dhis-web-data-quality\",\"M_dhis-web-pivot\",\"F_EVENTREPORT_EXTERNAL\",\"F_PROGRAM_RULE_UPDATE\",\"F_DATAELEMENT_PUBLIC_ADD\",\"M_dhis-web-validationrule\",\"F_CONSTANT_MANAGEMENT\",\"F_RUN_VALIDATION\",\"F_MANAGE_TICKETS\",\"F_GENERATE_BENEFICIARY_TABULAR_REPORT\",\"F_OPTIONGROUP_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_DELETE\",\"M_User_Administration\",\"M_dhis-web-settings\",\"F_IMPORT_DATA\",\"F_VIEW_DATABROWSER\",\"F_PERFORM_ANALYTICS_EXPLAIN\",\"F_MOBILE_DELETE_SMS\",\"F_OPTIONSET_MANAGEMENT\",\"F_SEND_MESSAGE\",\"F_PROGRAMSTAGE_ADD\",\"M_dhis-web-maps\",\"F_MINMAX_DATAELEMENT_DELETE\",\"F_ATTRIBUTE_DELETE\",\"F_OPTIONSET_DELETE\",\"F_PROGRAM_TRACKING_LIST\",\"M_dhis-web-dashboard\",\"M_dhis-web-data-administration\",\"F_ACCEPT_DATA_LOWER_LEVELS\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_DELETE\",\"F_OPTIONGROUPSET_PUBLIC_ADD\",\"M_dhis-web-capture\",\"F_PROGRAM_INDICATOR_GROUP_PUBLIC_ADD\",\"F_CATEGORY_DELETE\",\"F_COLOR_SET_DELETE\",\"M_dhis-web-app-management\",\"F_INDICATORTYPE_DELETE\",\"F_NAME_BASED_DATA_ENTRY\",\"F_INDICATORGROUP_PRIVATE_ADD\",\"F_FRED_DELETE\",\"F_VALIDATIONCRITERIA_DELETE\",\"F_PROGRAM_STAGE_INSTANCE_SEARCH\"],\"dataSets\":[\"Nyh6laLdBEJ\",\"j38YW1Am7he\",\"aLpVgfXiz0f\",\"YFTk3VdO9av\",\"Rl58JxmKJo2\",\"eZDhcZi6FLP\",\"N4fIX1HL3TQ\",\"EDzMBk0RRji\",\"TuL8IOPzpHh\",\"ce7DSxx5H2I\",\"EKWVBc5C0ms\",\"PLq9sJluXvc\",\"rsyjyJmYD4J\",\"ULowA8V3ucd\",\"QX4ZTUbOt3a\",\"pBOMPrpg1QX\",\"OsPTWNqq26W\",\"V8MHeZHIrcP\",\"YZhd4nu3mzY\",\"Y8gAn9DfAGU\",\"vc6nF5yZsPR\",\"Lpw6GcnTrmS\",\"lyLU2wR22tC\",\"VTdjfLXXmoi\",\"SF8FDSqw30D\",\"BfMAe6Itzgt\"],\"userCredentials\":{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"externalAuth\":false,\"twoFA\":false,\"passwordLastUpdated\":\"2014-12-18T20:56:05.264\",\"cogsDimensionConstraints\":[],\"catDimensionConstraints\":[],\"previousPasswords\":[],\"lastLogin\":\"2023-03-01T08:46:21.919\",\"selfRegistered\":false,\"invitation\":false,\"disabled\":false,\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}]}}", - "{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"surname\":\"Traore\",\"firstName\":\"John\",\"employer\":\"DHIS\",\"languages\":\"English\",\"gender\":\"gender_male\",\"jobTitle\":\"Super user\",\"created\":\"2013-04-18T17:15:08.407\",\"lastUpdated\":\"2023-03-01T08:46:33.743\",\"dataViewOrganisationUnits\":[],\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userGroupAccesses\":[],\"userAccesses\":[],\"userGroups\":[{\"id\":\"Kk12LkEWtXp\"},{\"id\":\"M1Qre0247G3\"},{\"id\":\"NTC8GjJ7p8P\"},{\"id\":\"B6JNeAQ6akX\"},{\"id\":\"wl5cDMuUhmF\"},{\"id\":\"QYrzIjSfI8z\"},{\"id\":\"lFHP5lLkzVr\"},{\"id\":\"jvrEwEJ2yZn\"},{\"id\":\"vAvEltyXGbD\"},{\"id\":\"w900PX10L7O\"},{\"id\":\"GogLpGmkL0g\"},{\"id\":\"vRoAruMnNpB\"},{\"id\":\"z1gNAf2zUxZ\"},{\"id\":\"gXpmQO6eEOo\"},{\"id\":\"tH0GcNZZ1vW\"},{\"id\":\"H9XnHoWRKCg\"}],\"translations\":[],\"teiSearchOrganisationUnits\":[],\"organisationUnits\":[{\"id\":\"ImspTQPwCqd\"}],\"externalAccess\":false,\"displayName\":\"John Traore\",\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"name\":\"John Traore\",\"email\":\"dummy@dhis2.org\",\"introduction\":\"I am the super user of DHIS 2\",\"birthday\":\"1971-04-08T00:00:00.000\",\"nationality\":\"Sierra Leone\",\"education\":\"Master of super using\",\"interests\":\"Football, swimming, singing, dancing\",\"whatsApp\":\"+123123123123\",\"facebookMessenger\":\"john.traore\",\"skype\":\"john.traore\",\"telegram\":\"john.traore\",\"twitter\":\"john.traore\",\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}],\"settings\":{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false},\"programs\":[\"uy2gU8kT1jF\",\"ur1Edk5Oe2n\",\"MoUd5BTQ3lY\",\"lxAQ7Zs9VYR\",\"IpHINAT79UW\",\"kla3mAPgvCH\",\"qDkgAbB5Jlk\",\"VBqh0ynB2wv\",\"bMcwwoVnbSR\",\"q04UBOqq3rp\",\"eBAyeGv0exc\",\"M3xtLkYBlKI\",\"fDd25txQckK\",\"WSGAb5XwJ3Y\"],\"authorities\":[\"F_PROGRAM_INDICATOR_PUBLIC_ADD\",\"F_SQLVIEW_EXECUTE\",\"F_USER_VIEW\",\"F_GENERATE_MIN_MAX_VALUES\",\"F_VALIDATIONRULE_PUBLIC_ADD\",\"F_CATEGORY_PRIVATE_ADD\",\"F_INDICATORGROUPSET_PUBLIC_ADD\",\"F_DATAVALUE_DELETE\",\"F_EXTERNAL_MAP_LAYER_PRIVATE_ADD\",\"F_RELATIONSHIPTYPE_DELETE\",\"F_CATEGORY_OPTION_PRIVATE_ADD\",\"F_SINGLE_EVENT_DATA_ENTRY\",\"F_CATEGORY_OPTION_GROUP_PUBLIC_ADD\",\"F_GIS_ADMIN\",\"M_dhis-web-event-capture\",\"F_SEND_EMAIL\",\"M_dhis-web-aggregate-data-entry\",\"F_ORGUNITGROUPSET_PRIVATE_ADD\",\"F_INDICATOR_DELETE\",\"M_dhis-web-event-reports\",\"F_VIEW_UNAPPROVED_DATA\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW\",\"F_TRACKED_ENTITY_INSTANCE_CHANGE_LOCATION\",\"F_OPTIONGROUPSET_DELETE\",\"F_USERGROUP_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_PRIVATE_ADD\",\"F_DOCUMENT_EXTERNAL\",\"F_PROGRAM_TRACKING_MANAGEMENT\",\"F_TRACKED_ENTITY_ATTRIBUTE_PUBLIC_ADD\",\"F_GENERATE_PROGRAM_SUMMARY_REPORT\",\"F_PROGRAM_INDICATOR_DELETE\",\"F_MOBILE_SENDSMS\",\"F_TRACKED_ENTITY_ADD\",\"F_TRACKED_ENTITY_MANAGEMENT\",\"F_RELATIONSHIP_DELETE\",\"F_VALIDATIONRULEGROUP_PUBLIC_ADD\",\"F_REPORT_EXTERNAL\",\"F_DOCUMENT_PRIVATE_ADD\",\"M_dhis-web-reports\",\"F_TRACKED_ENTITY_DELETE\",\"F_USERGROUP_DELETE\",\"F_PROGRAM_PRIVATE_ADD\",\"F_CATEGORY_COMBO_PRIVATE_ADD\",\"F_SCHEDULING_SEND_MESSAGE\",\"F_EXTERNAL_MAP_LAYER_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_DELETE\",\"F_ORGANISATIONUNIT_MOVE\",\"M_dhis-web-usage-analytics\",\"F_COLOR_DELETE\",\"F_INDICATORGROUP_DELETE\",\"F_ORGANISATIONUNIT_DELETE\",\"F_PROGRAM_RULE_ADD\",\"M_dhis-web-light\",\"F_OPTIONGROUPSET_PRIVATE_ADD\",\"F_DATA_MART_ADMIN\",\"M_dhis-web-maintenance-mobile\",\"F_DATASET_PUBLIC_ADD\",\"F_CATEGORY_COMBO_DELETE\",\"F_SECTION_DELETE\",\"F_USER_DELETE\",\"F_INDICATORGROUPSET_PRIVATE_ADD\",\"F_PROGRAM_INDICATOR_PRIVATE_ADD\",\"F_METADATA_IMPORT\",\"M_dhis-web-maintenance-appmanager\",\"F_EXPORT_EVENTS\",\"M_dhis-web-maintenance-settings\",\"F_SQLVIEW_PUBLIC_ADD\",\"F_PERFORM_MAINTENANCE\",\"F_COLOR_SET_ADD\",\"F_PROGRAM_STAGE_INSTANCE_DELETE\",\"F_METADATA_EXPORT\",\"F_MINMAX_DATAELEMENT_ADD\",\"F_PROGRAMSTAGE_SECTION_ADD\",\"F_DATAELEMENTGROUP_PRIVATE_ADD\",\"F_VALIDATIONRULE_PRIVATE_ADD\",\"F_APPROVE_DATA\",\"M_dhis-web-mapping\",\"F_DATAELEMENT_PRIVATE_ADD\",\"F_VALIDATIONCRITERIA_ADD\",\"F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS\",\"F_IGNORE_TRACKER_REQUIRED_VALUE_VALIDATION\",\"F_PROGRAM_PUBLIC_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_DELETE\",\"F_USER_ADD_WITHIN_MANAGED_GROUP\",\"M_Web_Portal\",\"F_ORGANISATIONUNIT_ADD\",\"M_dhis-web-user\",\"F_LEGEND_SET_PUBLIC_ADD\",\"F_CONSTANT_ADD\",\"F_PREDICTORGROUP_DELETE\",\"F_TRACKED_ENTITY_COMMENT_ADD\",\"F_TRACKED_ENTITY_INSTANCE_MANAGEMENT\",\"M_dhis-web-visualizer\",\"F_INDICATOR_PUBLIC_ADD\",\"F_INDICATORGROUP_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_PRIVATE_ADD\",\"M_dhis-web-maintenance\",\"M_dhis-web-approval\",\"F_PROGRAM_RULE_MANAGEMENT\",\"F_TEI_CASCADE_DELETE\",\"F_FRED_UPDATE\",\"F_VISUALIZATION_EXTERNAL\",\"M_dhis-web-cache-cleaner\",\"F_EDIT_EXPIRED\",\"F_ACCESS_TRACKED_ENTITY_ATTRIBUTES\",\"F_PROGRAM_DASHBOARD_CONFIG_ADMIN\",\"F_EVENT_VISUALIZATION_EXTERNAL\",\"F_ORGANISATIONUNITLEVEL_UPDATE\",\"F_CATEGORY_OPTION_PUBLIC_ADD\",\"M_dhis-web-datastore\",\"F_CATEGORY_OPTION_DELETE\",\"M_Data_Table\",\"M_dhis-web-menu-management\",\"F_REPORT_PUBLIC_ADD\",\"F_VALIDATIONRULEGROUP_DELETE\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_ADD\",\"F_RELATIONSHIP_MANAGEMENT\",\"F_COLOR_ADD\",\"F_OPTIONSET_PRIVATE_ADD\",\"F_PROGRAM_RULE_DELETE\",\"F_GENERATE_STATISTICAL_PROGRAM_REPORT\",\"F_ORGUNITGROUP_DELETE\",\"F_DATAELEMENTGROUPSET_PRIVATE_ADD\",\"M_dhis-web-tracker-capture\",\"F_LOCALE_ADD\",\"F_LEGEND_ADD\",\"F_CATEGORY_OPTION_GROUP_PRIVATE_ADD\",\"F_PROGRAM_INSTANCE_MANAGEMENT\",\"M_dhis-web-reporting\",\"F_CATEGORY_PUBLIC_ADD\",\"F_SECTION_ADD\",\"F_CATEGORY_COMBO_PUBLIC_ADD\",\"M_dhis-web-maintenance-datadictionary\",\"F_DATASET_DELETE\",\"F_INDICATORGROUPSET_DELETE\",\"F_USER_DELETE_WITHIN_MANAGED_GROUP\",\"F_ADD_TRACKED_ENTITY_FORM\",\"M_dhis-web-scheduler\",\"F_OPTIONGROUP_PUBLIC_ADD\",\"F_USERROLE_PRIVATE_ADD\",\"M_dhis-web-messaging\",\"M_dhis-web-maintenance-program\",\"F_EXTERNALFILERESOURCE_ADD\",\"F_MAP_EXTERNAL\",\"M_bna_widget\",\"F_DATAELEMENTGROUPSET_PUBLIC_ADD\",\"F_DATAELEMENTGROUP_DELETE\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_ADD\",\"F_RELATIONSHIP_ADD\",\"F_ORGUNITGROUP_PRIVATE_ADD\",\"F_DATAELEMENTGROUP_PUBLIC_ADD\",\"F_USER_GROUPS_READ_ONLY_ADD_MEMBERS\",\"F_LOCALE_DELETE\",\"F_PREDICTOR_RUN\",\"F_DATAELEMENT_DELETE\",\"F_OPTIONGROUP_DELETE\",\"F_LEGEND_SET_PRIVATE_ADD\",\"F_PROGRAMSTAGE_DELETE\",\"F_ATTRIBUTE_PUBLIC_ADD\",\"F_TRACKED_ENTITY_FORM_DELETE\",\"F_USERROLE_DELETE\",\"F_DOCUMENT_DELETE\",\"F_ORGUNITGROUPSET_DELETE\",\"M_dhis-web-translations\",\"M_dhis-web-sms\",\"F_SCHEDULING_CASE_AGGREGATE_QUERY_BUILDER\",\"F_PROGRAM_DELETE\",\"F_VALIDATIONRULE_DELETE\",\"F_PROGRAMDATAELEMENT_ADD\",\"M_dhis-web-mobile\",\"F_ACTIVITY_PLAN\",\"F_RELATIONSHIPTYPE_PUBLIC_ADD\",\"F_PREDICTOR_ADD\",\"F_SQLVIEW_PRIVATE_ADD\",\"F_EXPORT_DATA\",\"F_OAUTH2_CLIENT_MANAGE\",\"F_EVENT_VISUALIZATION_PUBLIC_ADD\",\"F_ORGUNITGROUP_PUBLIC_ADD\",\"F_APPROVE_DATA_LOWER_LEVELS\",\"M_Social_Media_Video\",\"F_OPTIONSET_PUBLIC_ADD\",\"F_EVENTCHART_EXTERNAL\",\"M_dhis-web-dataentry\",\"F_PROGRAM_TRACKING_SEARCH\",\"M_dhis-web-maintenance-dataset\",\"F_USERROLE_LIST\",\"M_dhis-web-import-export\",\"M_dhis-web-caseentry\",\"F_USERROLE_PUBLIC_ADD\",\"M_dhis-web-importexport\",\"M_InterpretationsTest\",\"F_ORGUNITGROUPSET_PUBLIC_ADD\",\"F_SQLVIEW_EXTERNAL\",\"F_REPORT_DELETE\",\"F_DASHBOARD_PUBLIC_ADD\",\"F_CONSTANT_DELETE\",\"M_dhis-web-maintenance-user\",\"F_PREDICTOR_DELETE\",\"M_dhis-web-data-visualizer\",\"F_DATASET_PRIVATE_ADD\",\"F_EVENTREPORT_PUBLIC_ADD\",\"F_PROGRAMSTAGE_SECTION_DELETE\",\"F_TRACKED_ENTITY_UPDATE\",\"F_CATEGORY_OPTION_GROUP_SET_PUBLIC_ADD\",\"F_TRACKED_ENTITY_INSTANCE_DASHBOARD\",\"F_METADATA_MANAGE\",\"F_ANALYTICSTABLEHOOK_DELETE\",\"F_UNCOMPLETE_EVENT\",\"M_dhis-web-sms-configuration\",\"M_dhis-web-interpretation\",\"F_LEGEND_DELETE\",\"M_Custom_Js_Css\",\"F_PROGRAM_INDICATOR_MANAGEMENT\",\"F_ANONYMOUS_DATA_ENTRY\",\"F_MAP_PUBLIC_ADD\",\"F_PROGRAM_VALIDATION\",\"F_SCHEDULING_ADMIN\",\"F_TRACKED_ENTITY_COMMENT_DELETE\",\"F_DATAELEMENT_MINMAX_DELETE\",\"F_MOBILE_SETTINGS\",\"F_PREDICTORGROUP_ADD\",\"F_REPORT_PRIVATE_ADD\",\"F_VALIDATIONRULEGROUP_PRIVATE_ADD\",\"F_PUSH_ANALYSIS_DELETE\",\"F_REPLICATE_USER\",\"F_DATAVALUE_ADD\",\"M_dhis-web-maintenance-organisationunit\",\"F_INSERT_CUSTOM_JS_CSS\",\"F_DATAELEMENTGROUPSET_DELETE\",\"F_SQLVIEW_DELETE\",\"F_ENROLLMENT_CASCADE_DELETE\",\"F_PROGRAMDATAELEMENT_DELETE\",\"F_TRACKED_ENTITY_INSTANCE_LIST\",\"F_INDICATORTYPE_ADD\",\"F_LEGEND_SET_DELETE\",\"F_VIEW_EVENT_ANALYTICS\",\"F_PROGRAMSTAGE_SECTION_MANAGEMENT\",\"F_IMPORT_EVENTS\",\"F_PROGRAM_INSTANCE_DELETE\",\"F_INDICATOR_PRIVATE_ADD\",\"F_TRACKED_ENTITY_INSTANCE_HISTORY\",\"F_FRED_CREATE\",\"F_EVENTCHART_PUBLIC_ADD\",\"F_PUSH_ANALYSIS_ADD\",\"M_dhis-web-event-visualizer\",\"F_USER_ADD\",\"F_EXTERNAL_MAP_LAYER_DELETE\",\"F_SYSTEM_SETTING\",\"F_ANALYTICSTABLEHOOK_ADD\",\"F_ATTRIBUTE_PRIVATE_ADD\",\"F_DOCUMENT_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_DELETE\",\"M_Easy_Visualization\",\"F_VISUALIZATION_PUBLIC_ADD\",\"F_DATAELEMENT_MINMAX_ADD\",\"M_dhis-web-data-quality\",\"M_dhis-web-pivot\",\"F_EVENTREPORT_EXTERNAL\",\"F_PROGRAM_RULE_UPDATE\",\"F_DATAELEMENT_PUBLIC_ADD\",\"M_dhis-web-validationrule\",\"F_CONSTANT_MANAGEMENT\",\"F_RUN_VALIDATION\",\"F_MANAGE_TICKETS\",\"F_GENERATE_BENEFICIARY_TABULAR_REPORT\",\"F_OPTIONGROUP_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_DELETE\",\"M_User_Administration\",\"M_dhis-web-settings\",\"F_IMPORT_DATA\",\"F_VIEW_DATABROWSER\",\"F_PERFORM_ANALYTICS_EXPLAIN\",\"F_MOBILE_DELETE_SMS\",\"F_OPTIONSET_MANAGEMENT\",\"F_SEND_MESSAGE\",\"F_PROGRAMSTAGE_ADD\",\"M_dhis-web-maps\",\"F_MINMAX_DATAELEMENT_DELETE\",\"F_ATTRIBUTE_DELETE\",\"F_OPTIONSET_DELETE\",\"F_PROGRAM_TRACKING_LIST\",\"M_dhis-web-dashboard\",\"M_dhis-web-data-administration\",\"F_ACCEPT_DATA_LOWER_LEVELS\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_DELETE\",\"F_OPTIONGROUPSET_PUBLIC_ADD\",\"M_dhis-web-capture\",\"F_PROGRAM_INDICATOR_GROUP_PUBLIC_ADD\",\"F_CATEGORY_DELETE\",\"F_COLOR_SET_DELETE\",\"M_dhis-web-app-management\",\"F_INDICATORTYPE_DELETE\",\"F_NAME_BASED_DATA_ENTRY\",\"F_INDICATORGROUP_PRIVATE_ADD\",\"F_FRED_DELETE\",\"F_VALIDATIONCRITERIA_DELETE\",\"F_PROGRAM_STAGE_INSTANCE_SEARCH\"],\"dataSets\":[\"Nyh6laLdBEJ\",\"j38YW1Am7he\",\"aLpVgfXiz0f\",\"YFTk3VdO9av\",\"Rl58JxmKJo2\",\"eZDhcZi6FLP\",\"N4fIX1HL3TQ\",\"EDzMBk0RRji\",\"TuL8IOPzpHh\",\"ce7DSxx5H2I\",\"EKWVBc5C0ms\",\"PLq9sJluXvc\",\"rsyjyJmYD4J\",\"ULowA8V3ucd\",\"QX4ZTUbOt3a\",\"pBOMPrpg1QX\",\"OsPTWNqq26W\",\"V8MHeZHIrcP\",\"YZhd4nu3mzY\",\"Y8gAn9DfAGU\",\"vc6nF5yZsPR\",\"Lpw6GcnTrmS\",\"lyLU2wR22tC\",\"VTdjfLXXmoi\",\"SF8FDSqw30D\",\"BfMAe6Itzgt\"],\"userCredentials\":{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"externalAuth\":false,\"twoFA\":false,\"passwordLastUpdated\":\"2014-12-18T20:56:05.264\",\"cogsDimensionConstraints\":[],\"catDimensionConstraints\":[],\"previousPasswords\":[],\"lastLogin\":\"2023-03-01T08:46:33.741\",\"selfRegistered\":false,\"invitation\":false,\"disabled\":false,\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}]}}", - "{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"surname\":\"Traore\",\"firstName\":\"John\",\"employer\":\"DHIS\",\"languages\":\"English\",\"gender\":\"gender_male\",\"jobTitle\":\"Super user\",\"created\":\"2013-04-18T17:15:08.407\",\"lastUpdated\":\"2023-03-01T08:46:43.800\",\"dataViewOrganisationUnits\":[],\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userGroupAccesses\":[],\"userAccesses\":[],\"userGroups\":[{\"id\":\"Kk12LkEWtXp\"},{\"id\":\"M1Qre0247G3\"},{\"id\":\"NTC8GjJ7p8P\"},{\"id\":\"B6JNeAQ6akX\"},{\"id\":\"wl5cDMuUhmF\"},{\"id\":\"QYrzIjSfI8z\"},{\"id\":\"lFHP5lLkzVr\"},{\"id\":\"jvrEwEJ2yZn\"},{\"id\":\"vAvEltyXGbD\"},{\"id\":\"w900PX10L7O\"},{\"id\":\"GogLpGmkL0g\"},{\"id\":\"vRoAruMnNpB\"},{\"id\":\"z1gNAf2zUxZ\"},{\"id\":\"gXpmQO6eEOo\"},{\"id\":\"tH0GcNZZ1vW\"},{\"id\":\"H9XnHoWRKCg\"}],\"translations\":[],\"teiSearchOrganisationUnits\":[],\"organisationUnits\":[{\"id\":\"ImspTQPwCqd\"}],\"externalAccess\":false,\"displayName\":\"John Traore\",\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"name\":\"John Traore\",\"email\":\"dummy@dhis2.org\",\"introduction\":\"I am the super user of DHIS 2\",\"birthday\":\"1971-04-08T00:00:00.000\",\"nationality\":\"Sierra Leone\",\"education\":\"Master of super using\",\"interests\":\"Football, swimming, singing, dancing\",\"whatsApp\":\"+123123123123\",\"facebookMessenger\":\"john.traore\",\"skype\":\"john.traore\",\"telegram\":\"john.traore\",\"twitter\":\"john.traore\",\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}],\"settings\":{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false},\"programs\":[\"uy2gU8kT1jF\",\"ur1Edk5Oe2n\",\"MoUd5BTQ3lY\",\"lxAQ7Zs9VYR\",\"IpHINAT79UW\",\"kla3mAPgvCH\",\"qDkgAbB5Jlk\",\"VBqh0ynB2wv\",\"bMcwwoVnbSR\",\"q04UBOqq3rp\",\"eBAyeGv0exc\",\"M3xtLkYBlKI\",\"fDd25txQckK\",\"WSGAb5XwJ3Y\"],\"authorities\":[\"F_PROGRAM_INDICATOR_PUBLIC_ADD\",\"F_SQLVIEW_EXECUTE\",\"F_USER_VIEW\",\"F_GENERATE_MIN_MAX_VALUES\",\"F_VALIDATIONRULE_PUBLIC_ADD\",\"F_CATEGORY_PRIVATE_ADD\",\"F_INDICATORGROUPSET_PUBLIC_ADD\",\"F_DATAVALUE_DELETE\",\"F_EXTERNAL_MAP_LAYER_PRIVATE_ADD\",\"F_RELATIONSHIPTYPE_DELETE\",\"F_CATEGORY_OPTION_PRIVATE_ADD\",\"F_SINGLE_EVENT_DATA_ENTRY\",\"F_CATEGORY_OPTION_GROUP_PUBLIC_ADD\",\"F_GIS_ADMIN\",\"M_dhis-web-event-capture\",\"F_SEND_EMAIL\",\"M_dhis-web-aggregate-data-entry\",\"F_ORGUNITGROUPSET_PRIVATE_ADD\",\"F_INDICATOR_DELETE\",\"M_dhis-web-event-reports\",\"F_VIEW_UNAPPROVED_DATA\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW\",\"F_TRACKED_ENTITY_INSTANCE_CHANGE_LOCATION\",\"F_OPTIONGROUPSET_DELETE\",\"F_USERGROUP_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_PRIVATE_ADD\",\"F_DOCUMENT_EXTERNAL\",\"F_PROGRAM_TRACKING_MANAGEMENT\",\"F_TRACKED_ENTITY_ATTRIBUTE_PUBLIC_ADD\",\"F_GENERATE_PROGRAM_SUMMARY_REPORT\",\"F_PROGRAM_INDICATOR_DELETE\",\"F_MOBILE_SENDSMS\",\"F_TRACKED_ENTITY_ADD\",\"F_TRACKED_ENTITY_MANAGEMENT\",\"F_RELATIONSHIP_DELETE\",\"F_VALIDATIONRULEGROUP_PUBLIC_ADD\",\"F_REPORT_EXTERNAL\",\"F_DOCUMENT_PRIVATE_ADD\",\"M_dhis-web-reports\",\"F_TRACKED_ENTITY_DELETE\",\"F_USERGROUP_DELETE\",\"F_PROGRAM_PRIVATE_ADD\",\"F_CATEGORY_COMBO_PRIVATE_ADD\",\"F_SCHEDULING_SEND_MESSAGE\",\"F_EXTERNAL_MAP_LAYER_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_DELETE\",\"F_ORGANISATIONUNIT_MOVE\",\"M_dhis-web-usage-analytics\",\"F_COLOR_DELETE\",\"F_INDICATORGROUP_DELETE\",\"F_ORGANISATIONUNIT_DELETE\",\"F_PROGRAM_RULE_ADD\",\"M_dhis-web-light\",\"F_OPTIONGROUPSET_PRIVATE_ADD\",\"F_DATA_MART_ADMIN\",\"M_dhis-web-maintenance-mobile\",\"F_DATASET_PUBLIC_ADD\",\"F_CATEGORY_COMBO_DELETE\",\"F_SECTION_DELETE\",\"F_USER_DELETE\",\"F_INDICATORGROUPSET_PRIVATE_ADD\",\"F_PROGRAM_INDICATOR_PRIVATE_ADD\",\"F_METADATA_IMPORT\",\"M_dhis-web-maintenance-appmanager\",\"F_EXPORT_EVENTS\",\"M_dhis-web-maintenance-settings\",\"F_SQLVIEW_PUBLIC_ADD\",\"F_PERFORM_MAINTENANCE\",\"F_COLOR_SET_ADD\",\"F_PROGRAM_STAGE_INSTANCE_DELETE\",\"F_METADATA_EXPORT\",\"F_MINMAX_DATAELEMENT_ADD\",\"F_PROGRAMSTAGE_SECTION_ADD\",\"F_DATAELEMENTGROUP_PRIVATE_ADD\",\"F_VALIDATIONRULE_PRIVATE_ADD\",\"F_APPROVE_DATA\",\"M_dhis-web-mapping\",\"F_DATAELEMENT_PRIVATE_ADD\",\"F_VALIDATIONCRITERIA_ADD\",\"F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS\",\"F_IGNORE_TRACKER_REQUIRED_VALUE_VALIDATION\",\"F_PROGRAM_PUBLIC_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_DELETE\",\"F_USER_ADD_WITHIN_MANAGED_GROUP\",\"M_Web_Portal\",\"F_ORGANISATIONUNIT_ADD\",\"M_dhis-web-user\",\"F_LEGEND_SET_PUBLIC_ADD\",\"F_CONSTANT_ADD\",\"F_PREDICTORGROUP_DELETE\",\"F_TRACKED_ENTITY_COMMENT_ADD\",\"F_TRACKED_ENTITY_INSTANCE_MANAGEMENT\",\"M_dhis-web-visualizer\",\"F_INDICATOR_PUBLIC_ADD\",\"F_INDICATORGROUP_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_PRIVATE_ADD\",\"M_dhis-web-maintenance\",\"M_dhis-web-approval\",\"F_PROGRAM_RULE_MANAGEMENT\",\"F_TEI_CASCADE_DELETE\",\"F_FRED_UPDATE\",\"F_VISUALIZATION_EXTERNAL\",\"M_dhis-web-cache-cleaner\",\"F_EDIT_EXPIRED\",\"F_ACCESS_TRACKED_ENTITY_ATTRIBUTES\",\"F_PROGRAM_DASHBOARD_CONFIG_ADMIN\",\"F_EVENT_VISUALIZATION_EXTERNAL\",\"F_ORGANISATIONUNITLEVEL_UPDATE\",\"F_CATEGORY_OPTION_PUBLIC_ADD\",\"M_dhis-web-datastore\",\"F_CATEGORY_OPTION_DELETE\",\"M_Data_Table\",\"M_dhis-web-menu-management\",\"F_REPORT_PUBLIC_ADD\",\"F_VALIDATIONRULEGROUP_DELETE\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_ADD\",\"F_RELATIONSHIP_MANAGEMENT\",\"F_COLOR_ADD\",\"F_OPTIONSET_PRIVATE_ADD\",\"F_PROGRAM_RULE_DELETE\",\"F_GENERATE_STATISTICAL_PROGRAM_REPORT\",\"F_ORGUNITGROUP_DELETE\",\"F_DATAELEMENTGROUPSET_PRIVATE_ADD\",\"M_dhis-web-tracker-capture\",\"F_LOCALE_ADD\",\"F_LEGEND_ADD\",\"F_CATEGORY_OPTION_GROUP_PRIVATE_ADD\",\"F_PROGRAM_INSTANCE_MANAGEMENT\",\"M_dhis-web-reporting\",\"F_CATEGORY_PUBLIC_ADD\",\"F_SECTION_ADD\",\"F_CATEGORY_COMBO_PUBLIC_ADD\",\"M_dhis-web-maintenance-datadictionary\",\"F_DATASET_DELETE\",\"F_INDICATORGROUPSET_DELETE\",\"F_USER_DELETE_WITHIN_MANAGED_GROUP\",\"F_ADD_TRACKED_ENTITY_FORM\",\"M_dhis-web-scheduler\",\"F_OPTIONGROUP_PUBLIC_ADD\",\"F_USERROLE_PRIVATE_ADD\",\"M_dhis-web-messaging\",\"M_dhis-web-maintenance-program\",\"F_EXTERNALFILERESOURCE_ADD\",\"F_MAP_EXTERNAL\",\"M_bna_widget\",\"F_DATAELEMENTGROUPSET_PUBLIC_ADD\",\"F_DATAELEMENTGROUP_DELETE\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_ADD\",\"F_RELATIONSHIP_ADD\",\"F_ORGUNITGROUP_PRIVATE_ADD\",\"F_DATAELEMENTGROUP_PUBLIC_ADD\",\"F_USER_GROUPS_READ_ONLY_ADD_MEMBERS\",\"F_LOCALE_DELETE\",\"F_PREDICTOR_RUN\",\"F_DATAELEMENT_DELETE\",\"F_OPTIONGROUP_DELETE\",\"F_LEGEND_SET_PRIVATE_ADD\",\"F_PROGRAMSTAGE_DELETE\",\"F_ATTRIBUTE_PUBLIC_ADD\",\"F_TRACKED_ENTITY_FORM_DELETE\",\"F_USERROLE_DELETE\",\"F_DOCUMENT_DELETE\",\"F_ORGUNITGROUPSET_DELETE\",\"M_dhis-web-translations\",\"M_dhis-web-sms\",\"F_SCHEDULING_CASE_AGGREGATE_QUERY_BUILDER\",\"F_PROGRAM_DELETE\",\"F_VALIDATIONRULE_DELETE\",\"F_PROGRAMDATAELEMENT_ADD\",\"M_dhis-web-mobile\",\"F_ACTIVITY_PLAN\",\"F_RELATIONSHIPTYPE_PUBLIC_ADD\",\"F_PREDICTOR_ADD\",\"F_SQLVIEW_PRIVATE_ADD\",\"F_EXPORT_DATA\",\"F_OAUTH2_CLIENT_MANAGE\",\"F_EVENT_VISUALIZATION_PUBLIC_ADD\",\"F_ORGUNITGROUP_PUBLIC_ADD\",\"F_APPROVE_DATA_LOWER_LEVELS\",\"M_Social_Media_Video\",\"F_OPTIONSET_PUBLIC_ADD\",\"F_EVENTCHART_EXTERNAL\",\"M_dhis-web-dataentry\",\"F_PROGRAM_TRACKING_SEARCH\",\"M_dhis-web-maintenance-dataset\",\"F_USERROLE_LIST\",\"M_dhis-web-import-export\",\"M_dhis-web-caseentry\",\"F_USERROLE_PUBLIC_ADD\",\"M_dhis-web-importexport\",\"M_InterpretationsTest\",\"F_ORGUNITGROUPSET_PUBLIC_ADD\",\"F_SQLVIEW_EXTERNAL\",\"F_REPORT_DELETE\",\"F_DASHBOARD_PUBLIC_ADD\",\"F_CONSTANT_DELETE\",\"M_dhis-web-maintenance-user\",\"F_PREDICTOR_DELETE\",\"M_dhis-web-data-visualizer\",\"F_DATASET_PRIVATE_ADD\",\"F_EVENTREPORT_PUBLIC_ADD\",\"F_PROGRAMSTAGE_SECTION_DELETE\",\"F_TRACKED_ENTITY_UPDATE\",\"F_CATEGORY_OPTION_GROUP_SET_PUBLIC_ADD\",\"F_TRACKED_ENTITY_INSTANCE_DASHBOARD\",\"F_METADATA_MANAGE\",\"F_ANALYTICSTABLEHOOK_DELETE\",\"F_UNCOMPLETE_EVENT\",\"M_dhis-web-sms-configuration\",\"M_dhis-web-interpretation\",\"F_LEGEND_DELETE\",\"M_Custom_Js_Css\",\"F_PROGRAM_INDICATOR_MANAGEMENT\",\"F_ANONYMOUS_DATA_ENTRY\",\"F_MAP_PUBLIC_ADD\",\"F_PROGRAM_VALIDATION\",\"F_SCHEDULING_ADMIN\",\"F_TRACKED_ENTITY_COMMENT_DELETE\",\"F_DATAELEMENT_MINMAX_DELETE\",\"F_MOBILE_SETTINGS\",\"F_PREDICTORGROUP_ADD\",\"F_REPORT_PRIVATE_ADD\",\"F_VALIDATIONRULEGROUP_PRIVATE_ADD\",\"F_PUSH_ANALYSIS_DELETE\",\"F_REPLICATE_USER\",\"F_DATAVALUE_ADD\",\"M_dhis-web-maintenance-organisationunit\",\"F_INSERT_CUSTOM_JS_CSS\",\"F_DATAELEMENTGROUPSET_DELETE\",\"F_SQLVIEW_DELETE\",\"F_ENROLLMENT_CASCADE_DELETE\",\"F_PROGRAMDATAELEMENT_DELETE\",\"F_TRACKED_ENTITY_INSTANCE_LIST\",\"F_INDICATORTYPE_ADD\",\"F_LEGEND_SET_DELETE\",\"F_VIEW_EVENT_ANALYTICS\",\"F_PROGRAMSTAGE_SECTION_MANAGEMENT\",\"F_IMPORT_EVENTS\",\"F_PROGRAM_INSTANCE_DELETE\",\"F_INDICATOR_PRIVATE_ADD\",\"F_TRACKED_ENTITY_INSTANCE_HISTORY\",\"F_FRED_CREATE\",\"F_EVENTCHART_PUBLIC_ADD\",\"F_PUSH_ANALYSIS_ADD\",\"M_dhis-web-event-visualizer\",\"F_USER_ADD\",\"F_EXTERNAL_MAP_LAYER_DELETE\",\"F_SYSTEM_SETTING\",\"F_ANALYTICSTABLEHOOK_ADD\",\"F_ATTRIBUTE_PRIVATE_ADD\",\"F_DOCUMENT_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_DELETE\",\"M_Easy_Visualization\",\"F_VISUALIZATION_PUBLIC_ADD\",\"F_DATAELEMENT_MINMAX_ADD\",\"M_dhis-web-data-quality\",\"M_dhis-web-pivot\",\"F_EVENTREPORT_EXTERNAL\",\"F_PROGRAM_RULE_UPDATE\",\"F_DATAELEMENT_PUBLIC_ADD\",\"M_dhis-web-validationrule\",\"F_CONSTANT_MANAGEMENT\",\"F_RUN_VALIDATION\",\"F_MANAGE_TICKETS\",\"F_GENERATE_BENEFICIARY_TABULAR_REPORT\",\"F_OPTIONGROUP_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_DELETE\",\"M_User_Administration\",\"M_dhis-web-settings\",\"F_IMPORT_DATA\",\"F_VIEW_DATABROWSER\",\"F_PERFORM_ANALYTICS_EXPLAIN\",\"F_MOBILE_DELETE_SMS\",\"F_OPTIONSET_MANAGEMENT\",\"F_SEND_MESSAGE\",\"F_PROGRAMSTAGE_ADD\",\"M_dhis-web-maps\",\"F_MINMAX_DATAELEMENT_DELETE\",\"F_ATTRIBUTE_DELETE\",\"F_OPTIONSET_DELETE\",\"F_PROGRAM_TRACKING_LIST\",\"M_dhis-web-dashboard\",\"M_dhis-web-data-administration\",\"F_ACCEPT_DATA_LOWER_LEVELS\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_DELETE\",\"F_OPTIONGROUPSET_PUBLIC_ADD\",\"M_dhis-web-capture\",\"F_PROGRAM_INDICATOR_GROUP_PUBLIC_ADD\",\"F_CATEGORY_DELETE\",\"F_COLOR_SET_DELETE\",\"M_dhis-web-app-management\",\"F_INDICATORTYPE_DELETE\",\"F_NAME_BASED_DATA_ENTRY\",\"F_INDICATORGROUP_PRIVATE_ADD\",\"F_FRED_DELETE\",\"F_VALIDATIONCRITERIA_DELETE\",\"F_PROGRAM_STAGE_INSTANCE_SEARCH\"],\"dataSets\":[\"Nyh6laLdBEJ\",\"j38YW1Am7he\",\"aLpVgfXiz0f\",\"YFTk3VdO9av\",\"Rl58JxmKJo2\",\"eZDhcZi6FLP\",\"N4fIX1HL3TQ\",\"EDzMBk0RRji\",\"TuL8IOPzpHh\",\"ce7DSxx5H2I\",\"EKWVBc5C0ms\",\"PLq9sJluXvc\",\"rsyjyJmYD4J\",\"ULowA8V3ucd\",\"QX4ZTUbOt3a\",\"pBOMPrpg1QX\",\"OsPTWNqq26W\",\"V8MHeZHIrcP\",\"YZhd4nu3mzY\",\"Y8gAn9DfAGU\",\"vc6nF5yZsPR\",\"Lpw6GcnTrmS\",\"lyLU2wR22tC\",\"VTdjfLXXmoi\",\"SF8FDSqw30D\",\"BfMAe6Itzgt\"],\"userCredentials\":{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"externalAuth\":false,\"twoFA\":false,\"passwordLastUpdated\":\"2014-12-18T20:56:05.264\",\"cogsDimensionConstraints\":[],\"catDimensionConstraints\":[],\"previousPasswords\":[],\"lastLogin\":\"2023-03-01T08:46:43.799\",\"selfRegistered\":false,\"invitation\":false,\"disabled\":false,\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}]}}", - "{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"surname\":\"Traore\",\"firstName\":\"John\",\"employer\":\"DHIS\",\"languages\":\"English\",\"gender\":\"gender_male\",\"jobTitle\":\"Super user\",\"created\":\"2013-04-18T17:15:08.407\",\"lastUpdated\":\"2023-03-01T08:46:55.670\",\"dataViewOrganisationUnits\":[],\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userGroupAccesses\":[],\"userAccesses\":[],\"userGroups\":[{\"id\":\"Kk12LkEWtXp\"},{\"id\":\"M1Qre0247G3\"},{\"id\":\"NTC8GjJ7p8P\"},{\"id\":\"B6JNeAQ6akX\"},{\"id\":\"wl5cDMuUhmF\"},{\"id\":\"QYrzIjSfI8z\"},{\"id\":\"lFHP5lLkzVr\"},{\"id\":\"jvrEwEJ2yZn\"},{\"id\":\"vAvEltyXGbD\"},{\"id\":\"w900PX10L7O\"},{\"id\":\"GogLpGmkL0g\"},{\"id\":\"vRoAruMnNpB\"},{\"id\":\"z1gNAf2zUxZ\"},{\"id\":\"gXpmQO6eEOo\"},{\"id\":\"tH0GcNZZ1vW\"},{\"id\":\"H9XnHoWRKCg\"}],\"translations\":[],\"teiSearchOrganisationUnits\":[],\"organisationUnits\":[{\"id\":\"ImspTQPwCqd\"}],\"externalAccess\":false,\"displayName\":\"John Traore\",\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"name\":\"John Traore\",\"email\":\"dummy@dhis2.org\",\"introduction\":\"I am the super user of DHIS 2\",\"birthday\":\"1971-04-08T00:00:00.000\",\"nationality\":\"Sierra Leone\",\"education\":\"Master of super using\",\"interests\":\"Football, swimming, singing, dancing\",\"whatsApp\":\"+123123123123\",\"facebookMessenger\":\"john.traore\",\"skype\":\"john.traore\",\"telegram\":\"john.traore\",\"twitter\":\"john.traore\",\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}],\"settings\":{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false},\"programs\":[\"uy2gU8kT1jF\",\"ur1Edk5Oe2n\",\"MoUd5BTQ3lY\",\"lxAQ7Zs9VYR\",\"IpHINAT79UW\",\"kla3mAPgvCH\",\"qDkgAbB5Jlk\",\"VBqh0ynB2wv\",\"bMcwwoVnbSR\",\"q04UBOqq3rp\",\"eBAyeGv0exc\",\"M3xtLkYBlKI\",\"fDd25txQckK\",\"WSGAb5XwJ3Y\"],\"authorities\":[\"F_PROGRAM_INDICATOR_PUBLIC_ADD\",\"F_SQLVIEW_EXECUTE\",\"F_USER_VIEW\",\"F_GENERATE_MIN_MAX_VALUES\",\"F_VALIDATIONRULE_PUBLIC_ADD\",\"F_CATEGORY_PRIVATE_ADD\",\"F_INDICATORGROUPSET_PUBLIC_ADD\",\"F_DATAVALUE_DELETE\",\"F_EXTERNAL_MAP_LAYER_PRIVATE_ADD\",\"F_RELATIONSHIPTYPE_DELETE\",\"F_CATEGORY_OPTION_PRIVATE_ADD\",\"F_SINGLE_EVENT_DATA_ENTRY\",\"F_CATEGORY_OPTION_GROUP_PUBLIC_ADD\",\"F_GIS_ADMIN\",\"M_dhis-web-event-capture\",\"F_SEND_EMAIL\",\"M_dhis-web-aggregate-data-entry\",\"F_ORGUNITGROUPSET_PRIVATE_ADD\",\"F_INDICATOR_DELETE\",\"M_dhis-web-event-reports\",\"F_VIEW_UNAPPROVED_DATA\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW\",\"F_TRACKED_ENTITY_INSTANCE_CHANGE_LOCATION\",\"F_OPTIONGROUPSET_DELETE\",\"F_USERGROUP_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_PRIVATE_ADD\",\"F_DOCUMENT_EXTERNAL\",\"F_PROGRAM_TRACKING_MANAGEMENT\",\"F_TRACKED_ENTITY_ATTRIBUTE_PUBLIC_ADD\",\"F_GENERATE_PROGRAM_SUMMARY_REPORT\",\"F_PROGRAM_INDICATOR_DELETE\",\"F_MOBILE_SENDSMS\",\"F_TRACKED_ENTITY_ADD\",\"F_TRACKED_ENTITY_MANAGEMENT\",\"F_RELATIONSHIP_DELETE\",\"F_VALIDATIONRULEGROUP_PUBLIC_ADD\",\"F_REPORT_EXTERNAL\",\"F_DOCUMENT_PRIVATE_ADD\",\"M_dhis-web-reports\",\"F_TRACKED_ENTITY_DELETE\",\"F_USERGROUP_DELETE\",\"F_PROGRAM_PRIVATE_ADD\",\"F_CATEGORY_COMBO_PRIVATE_ADD\",\"F_SCHEDULING_SEND_MESSAGE\",\"F_EXTERNAL_MAP_LAYER_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_DELETE\",\"F_ORGANISATIONUNIT_MOVE\",\"M_dhis-web-usage-analytics\",\"F_COLOR_DELETE\",\"F_INDICATORGROUP_DELETE\",\"F_ORGANISATIONUNIT_DELETE\",\"F_PROGRAM_RULE_ADD\",\"M_dhis-web-light\",\"F_OPTIONGROUPSET_PRIVATE_ADD\",\"F_DATA_MART_ADMIN\",\"M_dhis-web-maintenance-mobile\",\"F_DATASET_PUBLIC_ADD\",\"F_CATEGORY_COMBO_DELETE\",\"F_SECTION_DELETE\",\"F_USER_DELETE\",\"F_INDICATORGROUPSET_PRIVATE_ADD\",\"F_PROGRAM_INDICATOR_PRIVATE_ADD\",\"F_METADATA_IMPORT\",\"M_dhis-web-maintenance-appmanager\",\"F_EXPORT_EVENTS\",\"M_dhis-web-maintenance-settings\",\"F_SQLVIEW_PUBLIC_ADD\",\"F_PERFORM_MAINTENANCE\",\"F_COLOR_SET_ADD\",\"F_PROGRAM_STAGE_INSTANCE_DELETE\",\"F_METADATA_EXPORT\",\"F_MINMAX_DATAELEMENT_ADD\",\"F_PROGRAMSTAGE_SECTION_ADD\",\"F_DATAELEMENTGROUP_PRIVATE_ADD\",\"F_VALIDATIONRULE_PRIVATE_ADD\",\"F_APPROVE_DATA\",\"M_dhis-web-mapping\",\"F_DATAELEMENT_PRIVATE_ADD\",\"F_VALIDATIONCRITERIA_ADD\",\"F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS\",\"F_IGNORE_TRACKER_REQUIRED_VALUE_VALIDATION\",\"F_PROGRAM_PUBLIC_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_DELETE\",\"F_USER_ADD_WITHIN_MANAGED_GROUP\",\"M_Web_Portal\",\"F_ORGANISATIONUNIT_ADD\",\"M_dhis-web-user\",\"F_LEGEND_SET_PUBLIC_ADD\",\"F_CONSTANT_ADD\",\"F_PREDICTORGROUP_DELETE\",\"F_TRACKED_ENTITY_COMMENT_ADD\",\"F_TRACKED_ENTITY_INSTANCE_MANAGEMENT\",\"M_dhis-web-visualizer\",\"F_INDICATOR_PUBLIC_ADD\",\"F_INDICATORGROUP_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_PRIVATE_ADD\",\"M_dhis-web-maintenance\",\"M_dhis-web-approval\",\"F_PROGRAM_RULE_MANAGEMENT\",\"F_TEI_CASCADE_DELETE\",\"F_FRED_UPDATE\",\"F_VISUALIZATION_EXTERNAL\",\"M_dhis-web-cache-cleaner\",\"F_EDIT_EXPIRED\",\"F_ACCESS_TRACKED_ENTITY_ATTRIBUTES\",\"F_PROGRAM_DASHBOARD_CONFIG_ADMIN\",\"F_EVENT_VISUALIZATION_EXTERNAL\",\"F_ORGANISATIONUNITLEVEL_UPDATE\",\"F_CATEGORY_OPTION_PUBLIC_ADD\",\"M_dhis-web-datastore\",\"F_CATEGORY_OPTION_DELETE\",\"M_Data_Table\",\"M_dhis-web-menu-management\",\"F_REPORT_PUBLIC_ADD\",\"F_VALIDATIONRULEGROUP_DELETE\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_ADD\",\"F_RELATIONSHIP_MANAGEMENT\",\"F_COLOR_ADD\",\"F_OPTIONSET_PRIVATE_ADD\",\"F_PROGRAM_RULE_DELETE\",\"F_GENERATE_STATISTICAL_PROGRAM_REPORT\",\"F_ORGUNITGROUP_DELETE\",\"F_DATAELEMENTGROUPSET_PRIVATE_ADD\",\"M_dhis-web-tracker-capture\",\"F_LOCALE_ADD\",\"F_LEGEND_ADD\",\"F_CATEGORY_OPTION_GROUP_PRIVATE_ADD\",\"F_PROGRAM_INSTANCE_MANAGEMENT\",\"M_dhis-web-reporting\",\"F_CATEGORY_PUBLIC_ADD\",\"F_SECTION_ADD\",\"F_CATEGORY_COMBO_PUBLIC_ADD\",\"M_dhis-web-maintenance-datadictionary\",\"F_DATASET_DELETE\",\"F_INDICATORGROUPSET_DELETE\",\"F_USER_DELETE_WITHIN_MANAGED_GROUP\",\"F_ADD_TRACKED_ENTITY_FORM\",\"M_dhis-web-scheduler\",\"F_OPTIONGROUP_PUBLIC_ADD\",\"F_USERROLE_PRIVATE_ADD\",\"M_dhis-web-messaging\",\"M_dhis-web-maintenance-program\",\"F_EXTERNALFILERESOURCE_ADD\",\"F_MAP_EXTERNAL\",\"M_bna_widget\",\"F_DATAELEMENTGROUPSET_PUBLIC_ADD\",\"F_DATAELEMENTGROUP_DELETE\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_ADD\",\"F_RELATIONSHIP_ADD\",\"F_ORGUNITGROUP_PRIVATE_ADD\",\"F_DATAELEMENTGROUP_PUBLIC_ADD\",\"F_USER_GROUPS_READ_ONLY_ADD_MEMBERS\",\"F_LOCALE_DELETE\",\"F_PREDICTOR_RUN\",\"F_DATAELEMENT_DELETE\",\"F_OPTIONGROUP_DELETE\",\"F_LEGEND_SET_PRIVATE_ADD\",\"F_PROGRAMSTAGE_DELETE\",\"F_ATTRIBUTE_PUBLIC_ADD\",\"F_TRACKED_ENTITY_FORM_DELETE\",\"F_USERROLE_DELETE\",\"F_DOCUMENT_DELETE\",\"F_ORGUNITGROUPSET_DELETE\",\"M_dhis-web-translations\",\"M_dhis-web-sms\",\"F_SCHEDULING_CASE_AGGREGATE_QUERY_BUILDER\",\"F_PROGRAM_DELETE\",\"F_VALIDATIONRULE_DELETE\",\"F_PROGRAMDATAELEMENT_ADD\",\"M_dhis-web-mobile\",\"F_ACTIVITY_PLAN\",\"F_RELATIONSHIPTYPE_PUBLIC_ADD\",\"F_PREDICTOR_ADD\",\"F_SQLVIEW_PRIVATE_ADD\",\"F_EXPORT_DATA\",\"F_OAUTH2_CLIENT_MANAGE\",\"F_EVENT_VISUALIZATION_PUBLIC_ADD\",\"F_ORGUNITGROUP_PUBLIC_ADD\",\"F_APPROVE_DATA_LOWER_LEVELS\",\"M_Social_Media_Video\",\"F_OPTIONSET_PUBLIC_ADD\",\"F_EVENTCHART_EXTERNAL\",\"M_dhis-web-dataentry\",\"F_PROGRAM_TRACKING_SEARCH\",\"M_dhis-web-maintenance-dataset\",\"F_USERROLE_LIST\",\"M_dhis-web-import-export\",\"M_dhis-web-caseentry\",\"F_USERROLE_PUBLIC_ADD\",\"M_dhis-web-importexport\",\"M_InterpretationsTest\",\"F_ORGUNITGROUPSET_PUBLIC_ADD\",\"F_SQLVIEW_EXTERNAL\",\"F_REPORT_DELETE\",\"F_DASHBOARD_PUBLIC_ADD\",\"F_CONSTANT_DELETE\",\"M_dhis-web-maintenance-user\",\"F_PREDICTOR_DELETE\",\"M_dhis-web-data-visualizer\",\"F_DATASET_PRIVATE_ADD\",\"F_EVENTREPORT_PUBLIC_ADD\",\"F_PROGRAMSTAGE_SECTION_DELETE\",\"F_TRACKED_ENTITY_UPDATE\",\"F_CATEGORY_OPTION_GROUP_SET_PUBLIC_ADD\",\"F_TRACKED_ENTITY_INSTANCE_DASHBOARD\",\"F_METADATA_MANAGE\",\"F_ANALYTICSTABLEHOOK_DELETE\",\"F_UNCOMPLETE_EVENT\",\"M_dhis-web-sms-configuration\",\"M_dhis-web-interpretation\",\"F_LEGEND_DELETE\",\"M_Custom_Js_Css\",\"F_PROGRAM_INDICATOR_MANAGEMENT\",\"F_ANONYMOUS_DATA_ENTRY\",\"F_MAP_PUBLIC_ADD\",\"F_PROGRAM_VALIDATION\",\"F_SCHEDULING_ADMIN\",\"F_TRACKED_ENTITY_COMMENT_DELETE\",\"F_DATAELEMENT_MINMAX_DELETE\",\"F_MOBILE_SETTINGS\",\"F_PREDICTORGROUP_ADD\",\"F_REPORT_PRIVATE_ADD\",\"F_VALIDATIONRULEGROUP_PRIVATE_ADD\",\"F_PUSH_ANALYSIS_DELETE\",\"F_REPLICATE_USER\",\"F_DATAVALUE_ADD\",\"M_dhis-web-maintenance-organisationunit\",\"F_INSERT_CUSTOM_JS_CSS\",\"F_DATAELEMENTGROUPSET_DELETE\",\"F_SQLVIEW_DELETE\",\"F_ENROLLMENT_CASCADE_DELETE\",\"F_PROGRAMDATAELEMENT_DELETE\",\"F_TRACKED_ENTITY_INSTANCE_LIST\",\"F_INDICATORTYPE_ADD\",\"F_LEGEND_SET_DELETE\",\"F_VIEW_EVENT_ANALYTICS\",\"F_PROGRAMSTAGE_SECTION_MANAGEMENT\",\"F_IMPORT_EVENTS\",\"F_PROGRAM_INSTANCE_DELETE\",\"F_INDICATOR_PRIVATE_ADD\",\"F_TRACKED_ENTITY_INSTANCE_HISTORY\",\"F_FRED_CREATE\",\"F_EVENTCHART_PUBLIC_ADD\",\"F_PUSH_ANALYSIS_ADD\",\"M_dhis-web-event-visualizer\",\"F_USER_ADD\",\"F_EXTERNAL_MAP_LAYER_DELETE\",\"F_SYSTEM_SETTING\",\"F_ANALYTICSTABLEHOOK_ADD\",\"F_ATTRIBUTE_PRIVATE_ADD\",\"F_DOCUMENT_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_DELETE\",\"M_Easy_Visualization\",\"F_VISUALIZATION_PUBLIC_ADD\",\"F_DATAELEMENT_MINMAX_ADD\",\"M_dhis-web-data-quality\",\"M_dhis-web-pivot\",\"F_EVENTREPORT_EXTERNAL\",\"F_PROGRAM_RULE_UPDATE\",\"F_DATAELEMENT_PUBLIC_ADD\",\"M_dhis-web-validationrule\",\"F_CONSTANT_MANAGEMENT\",\"F_RUN_VALIDATION\",\"F_MANAGE_TICKETS\",\"F_GENERATE_BENEFICIARY_TABULAR_REPORT\",\"F_OPTIONGROUP_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_DELETE\",\"M_User_Administration\",\"M_dhis-web-settings\",\"F_IMPORT_DATA\",\"F_VIEW_DATABROWSER\",\"F_PERFORM_ANALYTICS_EXPLAIN\",\"F_MOBILE_DELETE_SMS\",\"F_OPTIONSET_MANAGEMENT\",\"F_SEND_MESSAGE\",\"F_PROGRAMSTAGE_ADD\",\"M_dhis-web-maps\",\"F_MINMAX_DATAELEMENT_DELETE\",\"F_ATTRIBUTE_DELETE\",\"F_OPTIONSET_DELETE\",\"F_PROGRAM_TRACKING_LIST\",\"M_dhis-web-dashboard\",\"M_dhis-web-data-administration\",\"F_ACCEPT_DATA_LOWER_LEVELS\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_DELETE\",\"F_OPTIONGROUPSET_PUBLIC_ADD\",\"M_dhis-web-capture\",\"F_PROGRAM_INDICATOR_GROUP_PUBLIC_ADD\",\"F_CATEGORY_DELETE\",\"F_COLOR_SET_DELETE\",\"M_dhis-web-app-management\",\"F_INDICATORTYPE_DELETE\",\"F_NAME_BASED_DATA_ENTRY\",\"F_INDICATORGROUP_PRIVATE_ADD\",\"F_FRED_DELETE\",\"F_VALIDATIONCRITERIA_DELETE\",\"F_PROGRAM_STAGE_INSTANCE_SEARCH\"],\"dataSets\":[\"Nyh6laLdBEJ\",\"j38YW1Am7he\",\"aLpVgfXiz0f\",\"YFTk3VdO9av\",\"Rl58JxmKJo2\",\"eZDhcZi6FLP\",\"N4fIX1HL3TQ\",\"EDzMBk0RRji\",\"TuL8IOPzpHh\",\"ce7DSxx5H2I\",\"EKWVBc5C0ms\",\"PLq9sJluXvc\",\"rsyjyJmYD4J\",\"ULowA8V3ucd\",\"QX4ZTUbOt3a\",\"pBOMPrpg1QX\",\"OsPTWNqq26W\",\"V8MHeZHIrcP\",\"YZhd4nu3mzY\",\"Y8gAn9DfAGU\",\"vc6nF5yZsPR\",\"Lpw6GcnTrmS\",\"lyLU2wR22tC\",\"VTdjfLXXmoi\",\"SF8FDSqw30D\",\"BfMAe6Itzgt\"],\"userCredentials\":{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"externalAuth\":false,\"twoFA\":false,\"passwordLastUpdated\":\"2014-12-18T20:56:05.264\",\"cogsDimensionConstraints\":[],\"catDimensionConstraints\":[],\"previousPasswords\":[],\"lastLogin\":\"2023-03-01T08:46:55.669\",\"selfRegistered\":false,\"invitation\":false,\"disabled\":false,\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}]}}", - "{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"surname\":\"Traore\",\"firstName\":\"John\",\"employer\":\"DHIS\",\"languages\":\"English\",\"gender\":\"gender_male\",\"jobTitle\":\"Super user\",\"created\":\"2013-04-18T17:15:08.407\",\"lastUpdated\":\"2023-03-01T08:47:06.995\",\"dataViewOrganisationUnits\":[],\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userGroupAccesses\":[],\"userAccesses\":[],\"userGroups\":[{\"id\":\"Kk12LkEWtXp\"},{\"id\":\"M1Qre0247G3\"},{\"id\":\"NTC8GjJ7p8P\"},{\"id\":\"B6JNeAQ6akX\"},{\"id\":\"wl5cDMuUhmF\"},{\"id\":\"QYrzIjSfI8z\"},{\"id\":\"lFHP5lLkzVr\"},{\"id\":\"jvrEwEJ2yZn\"},{\"id\":\"vAvEltyXGbD\"},{\"id\":\"w900PX10L7O\"},{\"id\":\"GogLpGmkL0g\"},{\"id\":\"vRoAruMnNpB\"},{\"id\":\"z1gNAf2zUxZ\"},{\"id\":\"gXpmQO6eEOo\"},{\"id\":\"tH0GcNZZ1vW\"},{\"id\":\"H9XnHoWRKCg\"}],\"translations\":[],\"teiSearchOrganisationUnits\":[],\"organisationUnits\":[{\"id\":\"ImspTQPwCqd\"}],\"externalAccess\":false,\"displayName\":\"John Traore\",\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"name\":\"John Traore\",\"email\":\"dummy@dhis2.org\",\"introduction\":\"I am the super user of DHIS 2\",\"birthday\":\"1971-04-08T00:00:00.000\",\"nationality\":\"Sierra Leone\",\"education\":\"Master of super using\",\"interests\":\"Football, swimming, singing, dancing\",\"whatsApp\":\"+123123123123\",\"facebookMessenger\":\"john.traore\",\"skype\":\"john.traore\",\"telegram\":\"john.traore\",\"twitter\":\"john.traore\",\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}],\"settings\":{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false},\"programs\":[\"uy2gU8kT1jF\",\"ur1Edk5Oe2n\",\"MoUd5BTQ3lY\",\"lxAQ7Zs9VYR\",\"IpHINAT79UW\",\"kla3mAPgvCH\",\"qDkgAbB5Jlk\",\"VBqh0ynB2wv\",\"bMcwwoVnbSR\",\"q04UBOqq3rp\",\"eBAyeGv0exc\",\"M3xtLkYBlKI\",\"fDd25txQckK\",\"WSGAb5XwJ3Y\"],\"authorities\":[\"F_PROGRAM_INDICATOR_PUBLIC_ADD\",\"F_SQLVIEW_EXECUTE\",\"F_USER_VIEW\",\"F_GENERATE_MIN_MAX_VALUES\",\"F_VALIDATIONRULE_PUBLIC_ADD\",\"F_CATEGORY_PRIVATE_ADD\",\"F_INDICATORGROUPSET_PUBLIC_ADD\",\"F_DATAVALUE_DELETE\",\"F_EXTERNAL_MAP_LAYER_PRIVATE_ADD\",\"F_RELATIONSHIPTYPE_DELETE\",\"F_CATEGORY_OPTION_PRIVATE_ADD\",\"F_SINGLE_EVENT_DATA_ENTRY\",\"F_CATEGORY_OPTION_GROUP_PUBLIC_ADD\",\"F_GIS_ADMIN\",\"M_dhis-web-event-capture\",\"F_SEND_EMAIL\",\"M_dhis-web-aggregate-data-entry\",\"F_ORGUNITGROUPSET_PRIVATE_ADD\",\"F_INDICATOR_DELETE\",\"M_dhis-web-event-reports\",\"F_VIEW_UNAPPROVED_DATA\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW\",\"F_TRACKED_ENTITY_INSTANCE_CHANGE_LOCATION\",\"F_OPTIONGROUPSET_DELETE\",\"F_USERGROUP_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_PRIVATE_ADD\",\"F_DOCUMENT_EXTERNAL\",\"F_PROGRAM_TRACKING_MANAGEMENT\",\"F_TRACKED_ENTITY_ATTRIBUTE_PUBLIC_ADD\",\"F_GENERATE_PROGRAM_SUMMARY_REPORT\",\"F_PROGRAM_INDICATOR_DELETE\",\"F_MOBILE_SENDSMS\",\"F_TRACKED_ENTITY_ADD\",\"F_TRACKED_ENTITY_MANAGEMENT\",\"F_RELATIONSHIP_DELETE\",\"F_VALIDATIONRULEGROUP_PUBLIC_ADD\",\"F_REPORT_EXTERNAL\",\"F_DOCUMENT_PRIVATE_ADD\",\"M_dhis-web-reports\",\"F_TRACKED_ENTITY_DELETE\",\"F_USERGROUP_DELETE\",\"F_PROGRAM_PRIVATE_ADD\",\"F_CATEGORY_COMBO_PRIVATE_ADD\",\"F_SCHEDULING_SEND_MESSAGE\",\"F_EXTERNAL_MAP_LAYER_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_DELETE\",\"F_ORGANISATIONUNIT_MOVE\",\"M_dhis-web-usage-analytics\",\"F_COLOR_DELETE\",\"F_INDICATORGROUP_DELETE\",\"F_ORGANISATIONUNIT_DELETE\",\"F_PROGRAM_RULE_ADD\",\"M_dhis-web-light\",\"F_OPTIONGROUPSET_PRIVATE_ADD\",\"F_DATA_MART_ADMIN\",\"M_dhis-web-maintenance-mobile\",\"F_DATASET_PUBLIC_ADD\",\"F_CATEGORY_COMBO_DELETE\",\"F_SECTION_DELETE\",\"F_USER_DELETE\",\"F_INDICATORGROUPSET_PRIVATE_ADD\",\"F_PROGRAM_INDICATOR_PRIVATE_ADD\",\"F_METADATA_IMPORT\",\"M_dhis-web-maintenance-appmanager\",\"F_EXPORT_EVENTS\",\"M_dhis-web-maintenance-settings\",\"F_SQLVIEW_PUBLIC_ADD\",\"F_PERFORM_MAINTENANCE\",\"F_COLOR_SET_ADD\",\"F_PROGRAM_STAGE_INSTANCE_DELETE\",\"F_METADATA_EXPORT\",\"F_MINMAX_DATAELEMENT_ADD\",\"F_PROGRAMSTAGE_SECTION_ADD\",\"F_DATAELEMENTGROUP_PRIVATE_ADD\",\"F_VALIDATIONRULE_PRIVATE_ADD\",\"F_APPROVE_DATA\",\"M_dhis-web-mapping\",\"F_DATAELEMENT_PRIVATE_ADD\",\"F_VALIDATIONCRITERIA_ADD\",\"F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS\",\"F_IGNORE_TRACKER_REQUIRED_VALUE_VALIDATION\",\"F_PROGRAM_PUBLIC_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_DELETE\",\"F_USER_ADD_WITHIN_MANAGED_GROUP\",\"M_Web_Portal\",\"F_ORGANISATIONUNIT_ADD\",\"M_dhis-web-user\",\"F_LEGEND_SET_PUBLIC_ADD\",\"F_CONSTANT_ADD\",\"F_PREDICTORGROUP_DELETE\",\"F_TRACKED_ENTITY_COMMENT_ADD\",\"F_TRACKED_ENTITY_INSTANCE_MANAGEMENT\",\"M_dhis-web-visualizer\",\"F_INDICATOR_PUBLIC_ADD\",\"F_INDICATORGROUP_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_PRIVATE_ADD\",\"M_dhis-web-maintenance\",\"M_dhis-web-approval\",\"F_PROGRAM_RULE_MANAGEMENT\",\"F_TEI_CASCADE_DELETE\",\"F_FRED_UPDATE\",\"F_VISUALIZATION_EXTERNAL\",\"M_dhis-web-cache-cleaner\",\"F_EDIT_EXPIRED\",\"F_ACCESS_TRACKED_ENTITY_ATTRIBUTES\",\"F_PROGRAM_DASHBOARD_CONFIG_ADMIN\",\"F_EVENT_VISUALIZATION_EXTERNAL\",\"F_ORGANISATIONUNITLEVEL_UPDATE\",\"F_CATEGORY_OPTION_PUBLIC_ADD\",\"M_dhis-web-datastore\",\"F_CATEGORY_OPTION_DELETE\",\"M_Data_Table\",\"M_dhis-web-menu-management\",\"F_REPORT_PUBLIC_ADD\",\"F_VALIDATIONRULEGROUP_DELETE\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_ADD\",\"F_RELATIONSHIP_MANAGEMENT\",\"F_COLOR_ADD\",\"F_OPTIONSET_PRIVATE_ADD\",\"F_PROGRAM_RULE_DELETE\",\"F_GENERATE_STATISTICAL_PROGRAM_REPORT\",\"F_ORGUNITGROUP_DELETE\",\"F_DATAELEMENTGROUPSET_PRIVATE_ADD\",\"M_dhis-web-tracker-capture\",\"F_LOCALE_ADD\",\"F_LEGEND_ADD\",\"F_CATEGORY_OPTION_GROUP_PRIVATE_ADD\",\"F_PROGRAM_INSTANCE_MANAGEMENT\",\"M_dhis-web-reporting\",\"F_CATEGORY_PUBLIC_ADD\",\"F_SECTION_ADD\",\"F_CATEGORY_COMBO_PUBLIC_ADD\",\"M_dhis-web-maintenance-datadictionary\",\"F_DATASET_DELETE\",\"F_INDICATORGROUPSET_DELETE\",\"F_USER_DELETE_WITHIN_MANAGED_GROUP\",\"F_ADD_TRACKED_ENTITY_FORM\",\"M_dhis-web-scheduler\",\"F_OPTIONGROUP_PUBLIC_ADD\",\"F_USERROLE_PRIVATE_ADD\",\"M_dhis-web-messaging\",\"M_dhis-web-maintenance-program\",\"F_EXTERNALFILERESOURCE_ADD\",\"F_MAP_EXTERNAL\",\"M_bna_widget\",\"F_DATAELEMENTGROUPSET_PUBLIC_ADD\",\"F_DATAELEMENTGROUP_DELETE\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_ADD\",\"F_RELATIONSHIP_ADD\",\"F_ORGUNITGROUP_PRIVATE_ADD\",\"F_DATAELEMENTGROUP_PUBLIC_ADD\",\"F_USER_GROUPS_READ_ONLY_ADD_MEMBERS\",\"F_LOCALE_DELETE\",\"F_PREDICTOR_RUN\",\"F_DATAELEMENT_DELETE\",\"F_OPTIONGROUP_DELETE\",\"F_LEGEND_SET_PRIVATE_ADD\",\"F_PROGRAMSTAGE_DELETE\",\"F_ATTRIBUTE_PUBLIC_ADD\",\"F_TRACKED_ENTITY_FORM_DELETE\",\"F_USERROLE_DELETE\",\"F_DOCUMENT_DELETE\",\"F_ORGUNITGROUPSET_DELETE\",\"M_dhis-web-translations\",\"M_dhis-web-sms\",\"F_SCHEDULING_CASE_AGGREGATE_QUERY_BUILDER\",\"F_PROGRAM_DELETE\",\"F_VALIDATIONRULE_DELETE\",\"F_PROGRAMDATAELEMENT_ADD\",\"M_dhis-web-mobile\",\"F_ACTIVITY_PLAN\",\"F_RELATIONSHIPTYPE_PUBLIC_ADD\",\"F_PREDICTOR_ADD\",\"F_SQLVIEW_PRIVATE_ADD\",\"F_EXPORT_DATA\",\"F_OAUTH2_CLIENT_MANAGE\",\"F_EVENT_VISUALIZATION_PUBLIC_ADD\",\"F_ORGUNITGROUP_PUBLIC_ADD\",\"F_APPROVE_DATA_LOWER_LEVELS\",\"M_Social_Media_Video\",\"F_OPTIONSET_PUBLIC_ADD\",\"F_EVENTCHART_EXTERNAL\",\"M_dhis-web-dataentry\",\"F_PROGRAM_TRACKING_SEARCH\",\"M_dhis-web-maintenance-dataset\",\"F_USERROLE_LIST\",\"M_dhis-web-import-export\",\"M_dhis-web-caseentry\",\"F_USERROLE_PUBLIC_ADD\",\"M_dhis-web-importexport\",\"M_InterpretationsTest\",\"F_ORGUNITGROUPSET_PUBLIC_ADD\",\"F_SQLVIEW_EXTERNAL\",\"F_REPORT_DELETE\",\"F_DASHBOARD_PUBLIC_ADD\",\"F_CONSTANT_DELETE\",\"M_dhis-web-maintenance-user\",\"F_PREDICTOR_DELETE\",\"M_dhis-web-data-visualizer\",\"F_DATASET_PRIVATE_ADD\",\"F_EVENTREPORT_PUBLIC_ADD\",\"F_PROGRAMSTAGE_SECTION_DELETE\",\"F_TRACKED_ENTITY_UPDATE\",\"F_CATEGORY_OPTION_GROUP_SET_PUBLIC_ADD\",\"F_TRACKED_ENTITY_INSTANCE_DASHBOARD\",\"F_METADATA_MANAGE\",\"F_ANALYTICSTABLEHOOK_DELETE\",\"F_UNCOMPLETE_EVENT\",\"M_dhis-web-sms-configuration\",\"M_dhis-web-interpretation\",\"F_LEGEND_DELETE\",\"M_Custom_Js_Css\",\"F_PROGRAM_INDICATOR_MANAGEMENT\",\"F_ANONYMOUS_DATA_ENTRY\",\"F_MAP_PUBLIC_ADD\",\"F_PROGRAM_VALIDATION\",\"F_SCHEDULING_ADMIN\",\"F_TRACKED_ENTITY_COMMENT_DELETE\",\"F_DATAELEMENT_MINMAX_DELETE\",\"F_MOBILE_SETTINGS\",\"F_PREDICTORGROUP_ADD\",\"F_REPORT_PRIVATE_ADD\",\"F_VALIDATIONRULEGROUP_PRIVATE_ADD\",\"F_PUSH_ANALYSIS_DELETE\",\"F_REPLICATE_USER\",\"F_DATAVALUE_ADD\",\"M_dhis-web-maintenance-organisationunit\",\"F_INSERT_CUSTOM_JS_CSS\",\"F_DATAELEMENTGROUPSET_DELETE\",\"F_SQLVIEW_DELETE\",\"F_ENROLLMENT_CASCADE_DELETE\",\"F_PROGRAMDATAELEMENT_DELETE\",\"F_TRACKED_ENTITY_INSTANCE_LIST\",\"F_INDICATORTYPE_ADD\",\"F_LEGEND_SET_DELETE\",\"F_VIEW_EVENT_ANALYTICS\",\"F_PROGRAMSTAGE_SECTION_MANAGEMENT\",\"F_IMPORT_EVENTS\",\"F_PROGRAM_INSTANCE_DELETE\",\"F_INDICATOR_PRIVATE_ADD\",\"F_TRACKED_ENTITY_INSTANCE_HISTORY\",\"F_FRED_CREATE\",\"F_EVENTCHART_PUBLIC_ADD\",\"F_PUSH_ANALYSIS_ADD\",\"M_dhis-web-event-visualizer\",\"F_USER_ADD\",\"F_EXTERNAL_MAP_LAYER_DELETE\",\"F_SYSTEM_SETTING\",\"F_ANALYTICSTABLEHOOK_ADD\",\"F_ATTRIBUTE_PRIVATE_ADD\",\"F_DOCUMENT_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_DELETE\",\"M_Easy_Visualization\",\"F_VISUALIZATION_PUBLIC_ADD\",\"F_DATAELEMENT_MINMAX_ADD\",\"M_dhis-web-data-quality\",\"M_dhis-web-pivot\",\"F_EVENTREPORT_EXTERNAL\",\"F_PROGRAM_RULE_UPDATE\",\"F_DATAELEMENT_PUBLIC_ADD\",\"M_dhis-web-validationrule\",\"F_CONSTANT_MANAGEMENT\",\"F_RUN_VALIDATION\",\"F_MANAGE_TICKETS\",\"F_GENERATE_BENEFICIARY_TABULAR_REPORT\",\"F_OPTIONGROUP_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_DELETE\",\"M_User_Administration\",\"M_dhis-web-settings\",\"F_IMPORT_DATA\",\"F_VIEW_DATABROWSER\",\"F_PERFORM_ANALYTICS_EXPLAIN\",\"F_MOBILE_DELETE_SMS\",\"F_OPTIONSET_MANAGEMENT\",\"F_SEND_MESSAGE\",\"F_PROGRAMSTAGE_ADD\",\"M_dhis-web-maps\",\"F_MINMAX_DATAELEMENT_DELETE\",\"F_ATTRIBUTE_DELETE\",\"F_OPTIONSET_DELETE\",\"F_PROGRAM_TRACKING_LIST\",\"M_dhis-web-dashboard\",\"M_dhis-web-data-administration\",\"F_ACCEPT_DATA_LOWER_LEVELS\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_DELETE\",\"F_OPTIONGROUPSET_PUBLIC_ADD\",\"M_dhis-web-capture\",\"F_PROGRAM_INDICATOR_GROUP_PUBLIC_ADD\",\"F_CATEGORY_DELETE\",\"F_COLOR_SET_DELETE\",\"M_dhis-web-app-management\",\"F_INDICATORTYPE_DELETE\",\"F_NAME_BASED_DATA_ENTRY\",\"F_INDICATORGROUP_PRIVATE_ADD\",\"F_FRED_DELETE\",\"F_VALIDATIONCRITERIA_DELETE\",\"F_PROGRAM_STAGE_INSTANCE_SEARCH\"],\"dataSets\":[\"Nyh6laLdBEJ\",\"j38YW1Am7he\",\"aLpVgfXiz0f\",\"YFTk3VdO9av\",\"Rl58JxmKJo2\",\"eZDhcZi6FLP\",\"N4fIX1HL3TQ\",\"EDzMBk0RRji\",\"TuL8IOPzpHh\",\"ce7DSxx5H2I\",\"EKWVBc5C0ms\",\"PLq9sJluXvc\",\"rsyjyJmYD4J\",\"ULowA8V3ucd\",\"QX4ZTUbOt3a\",\"pBOMPrpg1QX\",\"OsPTWNqq26W\",\"V8MHeZHIrcP\",\"YZhd4nu3mzY\",\"Y8gAn9DfAGU\",\"vc6nF5yZsPR\",\"Lpw6GcnTrmS\",\"lyLU2wR22tC\",\"VTdjfLXXmoi\",\"SF8FDSqw30D\",\"BfMAe6Itzgt\"],\"userCredentials\":{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"externalAuth\":false,\"twoFA\":false,\"passwordLastUpdated\":\"2014-12-18T20:56:05.264\",\"cogsDimensionConstraints\":[],\"catDimensionConstraints\":[],\"previousPasswords\":[],\"lastLogin\":\"2023-03-01T08:47:06.993\",\"selfRegistered\":false,\"invitation\":false,\"disabled\":false,\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}]}}", - "{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"surname\":\"Traore\",\"firstName\":\"John\",\"employer\":\"DHIS\",\"languages\":\"English\",\"gender\":\"gender_male\",\"jobTitle\":\"Super user\",\"created\":\"2013-04-18T17:15:08.407\",\"lastUpdated\":\"2023-03-01T08:47:17.082\",\"dataViewOrganisationUnits\":[],\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userGroupAccesses\":[],\"userAccesses\":[],\"userGroups\":[{\"id\":\"Kk12LkEWtXp\"},{\"id\":\"M1Qre0247G3\"},{\"id\":\"NTC8GjJ7p8P\"},{\"id\":\"B6JNeAQ6akX\"},{\"id\":\"wl5cDMuUhmF\"},{\"id\":\"QYrzIjSfI8z\"},{\"id\":\"lFHP5lLkzVr\"},{\"id\":\"jvrEwEJ2yZn\"},{\"id\":\"vAvEltyXGbD\"},{\"id\":\"w900PX10L7O\"},{\"id\":\"GogLpGmkL0g\"},{\"id\":\"vRoAruMnNpB\"},{\"id\":\"z1gNAf2zUxZ\"},{\"id\":\"gXpmQO6eEOo\"},{\"id\":\"tH0GcNZZ1vW\"},{\"id\":\"H9XnHoWRKCg\"}],\"translations\":[],\"teiSearchOrganisationUnits\":[],\"organisationUnits\":[{\"id\":\"ImspTQPwCqd\"}],\"externalAccess\":false,\"displayName\":\"John Traore\",\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"name\":\"John Traore\",\"email\":\"dummy@dhis2.org\",\"introduction\":\"I am the super user of DHIS 2\",\"birthday\":\"1971-04-08T00:00:00.000\",\"nationality\":\"Sierra Leone\",\"education\":\"Master of super using\",\"interests\":\"Football, swimming, singing, dancing\",\"whatsApp\":\"+123123123123\",\"facebookMessenger\":\"john.traore\",\"skype\":\"john.traore\",\"telegram\":\"john.traore\",\"twitter\":\"john.traore\",\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}],\"settings\":{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false},\"programs\":[\"uy2gU8kT1jF\",\"ur1Edk5Oe2n\",\"MoUd5BTQ3lY\",\"lxAQ7Zs9VYR\",\"IpHINAT79UW\",\"kla3mAPgvCH\",\"qDkgAbB5Jlk\",\"VBqh0ynB2wv\",\"bMcwwoVnbSR\",\"q04UBOqq3rp\",\"eBAyeGv0exc\",\"M3xtLkYBlKI\",\"fDd25txQckK\",\"WSGAb5XwJ3Y\"],\"authorities\":[\"F_PROGRAM_INDICATOR_PUBLIC_ADD\",\"F_SQLVIEW_EXECUTE\",\"F_USER_VIEW\",\"F_GENERATE_MIN_MAX_VALUES\",\"F_VALIDATIONRULE_PUBLIC_ADD\",\"F_CATEGORY_PRIVATE_ADD\",\"F_INDICATORGROUPSET_PUBLIC_ADD\",\"F_DATAVALUE_DELETE\",\"F_EXTERNAL_MAP_LAYER_PRIVATE_ADD\",\"F_RELATIONSHIPTYPE_DELETE\",\"F_CATEGORY_OPTION_PRIVATE_ADD\",\"F_SINGLE_EVENT_DATA_ENTRY\",\"F_CATEGORY_OPTION_GROUP_PUBLIC_ADD\",\"F_GIS_ADMIN\",\"M_dhis-web-event-capture\",\"F_SEND_EMAIL\",\"M_dhis-web-aggregate-data-entry\",\"F_ORGUNITGROUPSET_PRIVATE_ADD\",\"F_INDICATOR_DELETE\",\"M_dhis-web-event-reports\",\"F_VIEW_UNAPPROVED_DATA\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW\",\"F_TRACKED_ENTITY_INSTANCE_CHANGE_LOCATION\",\"F_OPTIONGROUPSET_DELETE\",\"F_USERGROUP_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_PRIVATE_ADD\",\"F_DOCUMENT_EXTERNAL\",\"F_PROGRAM_TRACKING_MANAGEMENT\",\"F_TRACKED_ENTITY_ATTRIBUTE_PUBLIC_ADD\",\"F_GENERATE_PROGRAM_SUMMARY_REPORT\",\"F_PROGRAM_INDICATOR_DELETE\",\"F_MOBILE_SENDSMS\",\"F_TRACKED_ENTITY_ADD\",\"F_TRACKED_ENTITY_MANAGEMENT\",\"F_RELATIONSHIP_DELETE\",\"F_VALIDATIONRULEGROUP_PUBLIC_ADD\",\"F_REPORT_EXTERNAL\",\"F_DOCUMENT_PRIVATE_ADD\",\"M_dhis-web-reports\",\"F_TRACKED_ENTITY_DELETE\",\"F_USERGROUP_DELETE\",\"F_PROGRAM_PRIVATE_ADD\",\"F_CATEGORY_COMBO_PRIVATE_ADD\",\"F_SCHEDULING_SEND_MESSAGE\",\"F_EXTERNAL_MAP_LAYER_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_DELETE\",\"F_ORGANISATIONUNIT_MOVE\",\"M_dhis-web-usage-analytics\",\"F_COLOR_DELETE\",\"F_INDICATORGROUP_DELETE\",\"F_ORGANISATIONUNIT_DELETE\",\"F_PROGRAM_RULE_ADD\",\"M_dhis-web-light\",\"F_OPTIONGROUPSET_PRIVATE_ADD\",\"F_DATA_MART_ADMIN\",\"M_dhis-web-maintenance-mobile\",\"F_DATASET_PUBLIC_ADD\",\"F_CATEGORY_COMBO_DELETE\",\"F_SECTION_DELETE\",\"F_USER_DELETE\",\"F_INDICATORGROUPSET_PRIVATE_ADD\",\"F_PROGRAM_INDICATOR_PRIVATE_ADD\",\"F_METADATA_IMPORT\",\"M_dhis-web-maintenance-appmanager\",\"F_EXPORT_EVENTS\",\"M_dhis-web-maintenance-settings\",\"F_SQLVIEW_PUBLIC_ADD\",\"F_PERFORM_MAINTENANCE\",\"F_COLOR_SET_ADD\",\"F_PROGRAM_STAGE_INSTANCE_DELETE\",\"F_METADATA_EXPORT\",\"F_MINMAX_DATAELEMENT_ADD\",\"F_PROGRAMSTAGE_SECTION_ADD\",\"F_DATAELEMENTGROUP_PRIVATE_ADD\",\"F_VALIDATIONRULE_PRIVATE_ADD\",\"F_APPROVE_DATA\",\"M_dhis-web-mapping\",\"F_DATAELEMENT_PRIVATE_ADD\",\"F_VALIDATIONCRITERIA_ADD\",\"F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS\",\"F_IGNORE_TRACKER_REQUIRED_VALUE_VALIDATION\",\"F_PROGRAM_PUBLIC_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_DELETE\",\"F_USER_ADD_WITHIN_MANAGED_GROUP\",\"M_Web_Portal\",\"F_ORGANISATIONUNIT_ADD\",\"M_dhis-web-user\",\"F_LEGEND_SET_PUBLIC_ADD\",\"F_CONSTANT_ADD\",\"F_PREDICTORGROUP_DELETE\",\"F_TRACKED_ENTITY_COMMENT_ADD\",\"F_TRACKED_ENTITY_INSTANCE_MANAGEMENT\",\"M_dhis-web-visualizer\",\"F_INDICATOR_PUBLIC_ADD\",\"F_INDICATORGROUP_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_PRIVATE_ADD\",\"M_dhis-web-maintenance\",\"M_dhis-web-approval\",\"F_PROGRAM_RULE_MANAGEMENT\",\"F_TEI_CASCADE_DELETE\",\"F_FRED_UPDATE\",\"F_VISUALIZATION_EXTERNAL\",\"M_dhis-web-cache-cleaner\",\"F_EDIT_EXPIRED\",\"F_ACCESS_TRACKED_ENTITY_ATTRIBUTES\",\"F_PROGRAM_DASHBOARD_CONFIG_ADMIN\",\"F_EVENT_VISUALIZATION_EXTERNAL\",\"F_ORGANISATIONUNITLEVEL_UPDATE\",\"F_CATEGORY_OPTION_PUBLIC_ADD\",\"M_dhis-web-datastore\",\"F_CATEGORY_OPTION_DELETE\",\"M_Data_Table\",\"M_dhis-web-menu-management\",\"F_REPORT_PUBLIC_ADD\",\"F_VALIDATIONRULEGROUP_DELETE\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_ADD\",\"F_RELATIONSHIP_MANAGEMENT\",\"F_COLOR_ADD\",\"F_OPTIONSET_PRIVATE_ADD\",\"F_PROGRAM_RULE_DELETE\",\"F_GENERATE_STATISTICAL_PROGRAM_REPORT\",\"F_ORGUNITGROUP_DELETE\",\"F_DATAELEMENTGROUPSET_PRIVATE_ADD\",\"M_dhis-web-tracker-capture\",\"F_LOCALE_ADD\",\"F_LEGEND_ADD\",\"F_CATEGORY_OPTION_GROUP_PRIVATE_ADD\",\"F_PROGRAM_INSTANCE_MANAGEMENT\",\"M_dhis-web-reporting\",\"F_CATEGORY_PUBLIC_ADD\",\"F_SECTION_ADD\",\"F_CATEGORY_COMBO_PUBLIC_ADD\",\"M_dhis-web-maintenance-datadictionary\",\"F_DATASET_DELETE\",\"F_INDICATORGROUPSET_DELETE\",\"F_USER_DELETE_WITHIN_MANAGED_GROUP\",\"F_ADD_TRACKED_ENTITY_FORM\",\"M_dhis-web-scheduler\",\"F_OPTIONGROUP_PUBLIC_ADD\",\"F_USERROLE_PRIVATE_ADD\",\"M_dhis-web-messaging\",\"M_dhis-web-maintenance-program\",\"F_EXTERNALFILERESOURCE_ADD\",\"F_MAP_EXTERNAL\",\"M_bna_widget\",\"F_DATAELEMENTGROUPSET_PUBLIC_ADD\",\"F_DATAELEMENTGROUP_DELETE\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_ADD\",\"F_RELATIONSHIP_ADD\",\"F_ORGUNITGROUP_PRIVATE_ADD\",\"F_DATAELEMENTGROUP_PUBLIC_ADD\",\"F_USER_GROUPS_READ_ONLY_ADD_MEMBERS\",\"F_LOCALE_DELETE\",\"F_PREDICTOR_RUN\",\"F_DATAELEMENT_DELETE\",\"F_OPTIONGROUP_DELETE\",\"F_LEGEND_SET_PRIVATE_ADD\",\"F_PROGRAMSTAGE_DELETE\",\"F_ATTRIBUTE_PUBLIC_ADD\",\"F_TRACKED_ENTITY_FORM_DELETE\",\"F_USERROLE_DELETE\",\"F_DOCUMENT_DELETE\",\"F_ORGUNITGROUPSET_DELETE\",\"M_dhis-web-translations\",\"M_dhis-web-sms\",\"F_SCHEDULING_CASE_AGGREGATE_QUERY_BUILDER\",\"F_PROGRAM_DELETE\",\"F_VALIDATIONRULE_DELETE\",\"F_PROGRAMDATAELEMENT_ADD\",\"M_dhis-web-mobile\",\"F_ACTIVITY_PLAN\",\"F_RELATIONSHIPTYPE_PUBLIC_ADD\",\"F_PREDICTOR_ADD\",\"F_SQLVIEW_PRIVATE_ADD\",\"F_EXPORT_DATA\",\"F_OAUTH2_CLIENT_MANAGE\",\"F_EVENT_VISUALIZATION_PUBLIC_ADD\",\"F_ORGUNITGROUP_PUBLIC_ADD\",\"F_APPROVE_DATA_LOWER_LEVELS\",\"M_Social_Media_Video\",\"F_OPTIONSET_PUBLIC_ADD\",\"F_EVENTCHART_EXTERNAL\",\"M_dhis-web-dataentry\",\"F_PROGRAM_TRACKING_SEARCH\",\"M_dhis-web-maintenance-dataset\",\"F_USERROLE_LIST\",\"M_dhis-web-import-export\",\"M_dhis-web-caseentry\",\"F_USERROLE_PUBLIC_ADD\",\"M_dhis-web-importexport\",\"M_InterpretationsTest\",\"F_ORGUNITGROUPSET_PUBLIC_ADD\",\"F_SQLVIEW_EXTERNAL\",\"F_REPORT_DELETE\",\"F_DASHBOARD_PUBLIC_ADD\",\"F_CONSTANT_DELETE\",\"M_dhis-web-maintenance-user\",\"F_PREDICTOR_DELETE\",\"M_dhis-web-data-visualizer\",\"F_DATASET_PRIVATE_ADD\",\"F_EVENTREPORT_PUBLIC_ADD\",\"F_PROGRAMSTAGE_SECTION_DELETE\",\"F_TRACKED_ENTITY_UPDATE\",\"F_CATEGORY_OPTION_GROUP_SET_PUBLIC_ADD\",\"F_TRACKED_ENTITY_INSTANCE_DASHBOARD\",\"F_METADATA_MANAGE\",\"F_ANALYTICSTABLEHOOK_DELETE\",\"F_UNCOMPLETE_EVENT\",\"M_dhis-web-sms-configuration\",\"M_dhis-web-interpretation\",\"F_LEGEND_DELETE\",\"M_Custom_Js_Css\",\"F_PROGRAM_INDICATOR_MANAGEMENT\",\"F_ANONYMOUS_DATA_ENTRY\",\"F_MAP_PUBLIC_ADD\",\"F_PROGRAM_VALIDATION\",\"F_SCHEDULING_ADMIN\",\"F_TRACKED_ENTITY_COMMENT_DELETE\",\"F_DATAELEMENT_MINMAX_DELETE\",\"F_MOBILE_SETTINGS\",\"F_PREDICTORGROUP_ADD\",\"F_REPORT_PRIVATE_ADD\",\"F_VALIDATIONRULEGROUP_PRIVATE_ADD\",\"F_PUSH_ANALYSIS_DELETE\",\"F_REPLICATE_USER\",\"F_DATAVALUE_ADD\",\"M_dhis-web-maintenance-organisationunit\",\"F_INSERT_CUSTOM_JS_CSS\",\"F_DATAELEMENTGROUPSET_DELETE\",\"F_SQLVIEW_DELETE\",\"F_ENROLLMENT_CASCADE_DELETE\",\"F_PROGRAMDATAELEMENT_DELETE\",\"F_TRACKED_ENTITY_INSTANCE_LIST\",\"F_INDICATORTYPE_ADD\",\"F_LEGEND_SET_DELETE\",\"F_VIEW_EVENT_ANALYTICS\",\"F_PROGRAMSTAGE_SECTION_MANAGEMENT\",\"F_IMPORT_EVENTS\",\"F_PROGRAM_INSTANCE_DELETE\",\"F_INDICATOR_PRIVATE_ADD\",\"F_TRACKED_ENTITY_INSTANCE_HISTORY\",\"F_FRED_CREATE\",\"F_EVENTCHART_PUBLIC_ADD\",\"F_PUSH_ANALYSIS_ADD\",\"M_dhis-web-event-visualizer\",\"F_USER_ADD\",\"F_EXTERNAL_MAP_LAYER_DELETE\",\"F_SYSTEM_SETTING\",\"F_ANALYTICSTABLEHOOK_ADD\",\"F_ATTRIBUTE_PRIVATE_ADD\",\"F_DOCUMENT_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_DELETE\",\"M_Easy_Visualization\",\"F_VISUALIZATION_PUBLIC_ADD\",\"F_DATAELEMENT_MINMAX_ADD\",\"M_dhis-web-data-quality\",\"M_dhis-web-pivot\",\"F_EVENTREPORT_EXTERNAL\",\"F_PROGRAM_RULE_UPDATE\",\"F_DATAELEMENT_PUBLIC_ADD\",\"M_dhis-web-validationrule\",\"F_CONSTANT_MANAGEMENT\",\"F_RUN_VALIDATION\",\"F_MANAGE_TICKETS\",\"F_GENERATE_BENEFICIARY_TABULAR_REPORT\",\"F_OPTIONGROUP_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_DELETE\",\"M_User_Administration\",\"M_dhis-web-settings\",\"F_IMPORT_DATA\",\"F_VIEW_DATABROWSER\",\"F_PERFORM_ANALYTICS_EXPLAIN\",\"F_MOBILE_DELETE_SMS\",\"F_OPTIONSET_MANAGEMENT\",\"F_SEND_MESSAGE\",\"F_PROGRAMSTAGE_ADD\",\"M_dhis-web-maps\",\"F_MINMAX_DATAELEMENT_DELETE\",\"F_ATTRIBUTE_DELETE\",\"F_OPTIONSET_DELETE\",\"F_PROGRAM_TRACKING_LIST\",\"M_dhis-web-dashboard\",\"M_dhis-web-data-administration\",\"F_ACCEPT_DATA_LOWER_LEVELS\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_DELETE\",\"F_OPTIONGROUPSET_PUBLIC_ADD\",\"M_dhis-web-capture\",\"F_PROGRAM_INDICATOR_GROUP_PUBLIC_ADD\",\"F_CATEGORY_DELETE\",\"F_COLOR_SET_DELETE\",\"M_dhis-web-app-management\",\"F_INDICATORTYPE_DELETE\",\"F_NAME_BASED_DATA_ENTRY\",\"F_INDICATORGROUP_PRIVATE_ADD\",\"F_FRED_DELETE\",\"F_VALIDATIONCRITERIA_DELETE\",\"F_PROGRAM_STAGE_INSTANCE_SEARCH\"],\"dataSets\":[\"Nyh6laLdBEJ\",\"j38YW1Am7he\",\"aLpVgfXiz0f\",\"YFTk3VdO9av\",\"Rl58JxmKJo2\",\"eZDhcZi6FLP\",\"N4fIX1HL3TQ\",\"EDzMBk0RRji\",\"TuL8IOPzpHh\",\"ce7DSxx5H2I\",\"EKWVBc5C0ms\",\"PLq9sJluXvc\",\"rsyjyJmYD4J\",\"ULowA8V3ucd\",\"QX4ZTUbOt3a\",\"pBOMPrpg1QX\",\"OsPTWNqq26W\",\"V8MHeZHIrcP\",\"YZhd4nu3mzY\",\"Y8gAn9DfAGU\",\"vc6nF5yZsPR\",\"Lpw6GcnTrmS\",\"lyLU2wR22tC\",\"VTdjfLXXmoi\",\"SF8FDSqw30D\",\"BfMAe6Itzgt\"],\"userCredentials\":{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"externalAuth\":false,\"twoFA\":false,\"passwordLastUpdated\":\"2014-12-18T20:56:05.264\",\"cogsDimensionConstraints\":[],\"catDimensionConstraints\":[],\"previousPasswords\":[],\"lastLogin\":\"2023-03-01T08:47:17.081\",\"selfRegistered\":false,\"invitation\":false,\"disabled\":false,\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}]}}", - "{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"surname\":\"Traore\",\"firstName\":\"John\",\"employer\":\"DHIS\",\"languages\":\"English\",\"gender\":\"gender_male\",\"jobTitle\":\"Super user\",\"created\":\"2013-04-18T17:15:08.407\",\"lastUpdated\":\"2023-03-01T08:47:27.331\",\"dataViewOrganisationUnits\":[],\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userGroupAccesses\":[],\"userAccesses\":[],\"userGroups\":[{\"id\":\"Kk12LkEWtXp\"},{\"id\":\"M1Qre0247G3\"},{\"id\":\"NTC8GjJ7p8P\"},{\"id\":\"B6JNeAQ6akX\"},{\"id\":\"wl5cDMuUhmF\"},{\"id\":\"QYrzIjSfI8z\"},{\"id\":\"lFHP5lLkzVr\"},{\"id\":\"jvrEwEJ2yZn\"},{\"id\":\"vAvEltyXGbD\"},{\"id\":\"w900PX10L7O\"},{\"id\":\"GogLpGmkL0g\"},{\"id\":\"vRoAruMnNpB\"},{\"id\":\"z1gNAf2zUxZ\"},{\"id\":\"gXpmQO6eEOo\"},{\"id\":\"tH0GcNZZ1vW\"},{\"id\":\"H9XnHoWRKCg\"}],\"translations\":[],\"teiSearchOrganisationUnits\":[],\"organisationUnits\":[{\"id\":\"ImspTQPwCqd\"}],\"externalAccess\":false,\"displayName\":\"John Traore\",\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"name\":\"John Traore\",\"email\":\"dummy@dhis2.org\",\"introduction\":\"I am the super user of DHIS 2\",\"birthday\":\"1971-04-08T00:00:00.000\",\"nationality\":\"Sierra Leone\",\"education\":\"Master of super using\",\"interests\":\"Football, swimming, singing, dancing\",\"whatsApp\":\"+123123123123\",\"facebookMessenger\":\"john.traore\",\"skype\":\"john.traore\",\"telegram\":\"john.traore\",\"twitter\":\"john.traore\",\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}],\"settings\":{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false},\"programs\":[\"uy2gU8kT1jF\",\"ur1Edk5Oe2n\",\"MoUd5BTQ3lY\",\"lxAQ7Zs9VYR\",\"IpHINAT79UW\",\"kla3mAPgvCH\",\"qDkgAbB5Jlk\",\"VBqh0ynB2wv\",\"bMcwwoVnbSR\",\"q04UBOqq3rp\",\"eBAyeGv0exc\",\"M3xtLkYBlKI\",\"fDd25txQckK\",\"WSGAb5XwJ3Y\"],\"authorities\":[\"F_PROGRAM_INDICATOR_PUBLIC_ADD\",\"F_SQLVIEW_EXECUTE\",\"F_USER_VIEW\",\"F_GENERATE_MIN_MAX_VALUES\",\"F_VALIDATIONRULE_PUBLIC_ADD\",\"F_CATEGORY_PRIVATE_ADD\",\"F_INDICATORGROUPSET_PUBLIC_ADD\",\"F_DATAVALUE_DELETE\",\"F_EXTERNAL_MAP_LAYER_PRIVATE_ADD\",\"F_RELATIONSHIPTYPE_DELETE\",\"F_CATEGORY_OPTION_PRIVATE_ADD\",\"F_SINGLE_EVENT_DATA_ENTRY\",\"F_CATEGORY_OPTION_GROUP_PUBLIC_ADD\",\"F_GIS_ADMIN\",\"M_dhis-web-event-capture\",\"F_SEND_EMAIL\",\"M_dhis-web-aggregate-data-entry\",\"F_ORGUNITGROUPSET_PRIVATE_ADD\",\"F_INDICATOR_DELETE\",\"M_dhis-web-event-reports\",\"F_VIEW_UNAPPROVED_DATA\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW\",\"F_TRACKED_ENTITY_INSTANCE_CHANGE_LOCATION\",\"F_OPTIONGROUPSET_DELETE\",\"F_USERGROUP_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_PRIVATE_ADD\",\"F_DOCUMENT_EXTERNAL\",\"F_PROGRAM_TRACKING_MANAGEMENT\",\"F_TRACKED_ENTITY_ATTRIBUTE_PUBLIC_ADD\",\"F_GENERATE_PROGRAM_SUMMARY_REPORT\",\"F_PROGRAM_INDICATOR_DELETE\",\"F_MOBILE_SENDSMS\",\"F_TRACKED_ENTITY_ADD\",\"F_TRACKED_ENTITY_MANAGEMENT\",\"F_RELATIONSHIP_DELETE\",\"F_VALIDATIONRULEGROUP_PUBLIC_ADD\",\"F_REPORT_EXTERNAL\",\"F_DOCUMENT_PRIVATE_ADD\",\"M_dhis-web-reports\",\"F_TRACKED_ENTITY_DELETE\",\"F_USERGROUP_DELETE\",\"F_PROGRAM_PRIVATE_ADD\",\"F_CATEGORY_COMBO_PRIVATE_ADD\",\"F_SCHEDULING_SEND_MESSAGE\",\"F_EXTERNAL_MAP_LAYER_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_DELETE\",\"F_ORGANISATIONUNIT_MOVE\",\"M_dhis-web-usage-analytics\",\"F_COLOR_DELETE\",\"F_INDICATORGROUP_DELETE\",\"F_ORGANISATIONUNIT_DELETE\",\"F_PROGRAM_RULE_ADD\",\"M_dhis-web-light\",\"F_OPTIONGROUPSET_PRIVATE_ADD\",\"F_DATA_MART_ADMIN\",\"M_dhis-web-maintenance-mobile\",\"F_DATASET_PUBLIC_ADD\",\"F_CATEGORY_COMBO_DELETE\",\"F_SECTION_DELETE\",\"F_USER_DELETE\",\"F_INDICATORGROUPSET_PRIVATE_ADD\",\"F_PROGRAM_INDICATOR_PRIVATE_ADD\",\"F_METADATA_IMPORT\",\"M_dhis-web-maintenance-appmanager\",\"F_EXPORT_EVENTS\",\"M_dhis-web-maintenance-settings\",\"F_SQLVIEW_PUBLIC_ADD\",\"F_PERFORM_MAINTENANCE\",\"F_COLOR_SET_ADD\",\"F_PROGRAM_STAGE_INSTANCE_DELETE\",\"F_METADATA_EXPORT\",\"F_MINMAX_DATAELEMENT_ADD\",\"F_PROGRAMSTAGE_SECTION_ADD\",\"F_DATAELEMENTGROUP_PRIVATE_ADD\",\"F_VALIDATIONRULE_PRIVATE_ADD\",\"F_APPROVE_DATA\",\"M_dhis-web-mapping\",\"F_DATAELEMENT_PRIVATE_ADD\",\"F_VALIDATIONCRITERIA_ADD\",\"F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS\",\"F_IGNORE_TRACKER_REQUIRED_VALUE_VALIDATION\",\"F_PROGRAM_PUBLIC_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_DELETE\",\"F_USER_ADD_WITHIN_MANAGED_GROUP\",\"M_Web_Portal\",\"F_ORGANISATIONUNIT_ADD\",\"M_dhis-web-user\",\"F_LEGEND_SET_PUBLIC_ADD\",\"F_CONSTANT_ADD\",\"F_PREDICTORGROUP_DELETE\",\"F_TRACKED_ENTITY_COMMENT_ADD\",\"F_TRACKED_ENTITY_INSTANCE_MANAGEMENT\",\"M_dhis-web-visualizer\",\"F_INDICATOR_PUBLIC_ADD\",\"F_INDICATORGROUP_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_PRIVATE_ADD\",\"M_dhis-web-maintenance\",\"M_dhis-web-approval\",\"F_PROGRAM_RULE_MANAGEMENT\",\"F_TEI_CASCADE_DELETE\",\"F_FRED_UPDATE\",\"F_VISUALIZATION_EXTERNAL\",\"M_dhis-web-cache-cleaner\",\"F_EDIT_EXPIRED\",\"F_ACCESS_TRACKED_ENTITY_ATTRIBUTES\",\"F_PROGRAM_DASHBOARD_CONFIG_ADMIN\",\"F_EVENT_VISUALIZATION_EXTERNAL\",\"F_ORGANISATIONUNITLEVEL_UPDATE\",\"F_CATEGORY_OPTION_PUBLIC_ADD\",\"M_dhis-web-datastore\",\"F_CATEGORY_OPTION_DELETE\",\"M_Data_Table\",\"M_dhis-web-menu-management\",\"F_REPORT_PUBLIC_ADD\",\"F_VALIDATIONRULEGROUP_DELETE\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_ADD\",\"F_RELATIONSHIP_MANAGEMENT\",\"F_COLOR_ADD\",\"F_OPTIONSET_PRIVATE_ADD\",\"F_PROGRAM_RULE_DELETE\",\"F_GENERATE_STATISTICAL_PROGRAM_REPORT\",\"F_ORGUNITGROUP_DELETE\",\"F_DATAELEMENTGROUPSET_PRIVATE_ADD\",\"M_dhis-web-tracker-capture\",\"F_LOCALE_ADD\",\"F_LEGEND_ADD\",\"F_CATEGORY_OPTION_GROUP_PRIVATE_ADD\",\"F_PROGRAM_INSTANCE_MANAGEMENT\",\"M_dhis-web-reporting\",\"F_CATEGORY_PUBLIC_ADD\",\"F_SECTION_ADD\",\"F_CATEGORY_COMBO_PUBLIC_ADD\",\"M_dhis-web-maintenance-datadictionary\",\"F_DATASET_DELETE\",\"F_INDICATORGROUPSET_DELETE\",\"F_USER_DELETE_WITHIN_MANAGED_GROUP\",\"F_ADD_TRACKED_ENTITY_FORM\",\"M_dhis-web-scheduler\",\"F_OPTIONGROUP_PUBLIC_ADD\",\"F_USERROLE_PRIVATE_ADD\",\"M_dhis-web-messaging\",\"M_dhis-web-maintenance-program\",\"F_EXTERNALFILERESOURCE_ADD\",\"F_MAP_EXTERNAL\",\"M_bna_widget\",\"F_DATAELEMENTGROUPSET_PUBLIC_ADD\",\"F_DATAELEMENTGROUP_DELETE\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_ADD\",\"F_RELATIONSHIP_ADD\",\"F_ORGUNITGROUP_PRIVATE_ADD\",\"F_DATAELEMENTGROUP_PUBLIC_ADD\",\"F_USER_GROUPS_READ_ONLY_ADD_MEMBERS\",\"F_LOCALE_DELETE\",\"F_PREDICTOR_RUN\",\"F_DATAELEMENT_DELETE\",\"F_OPTIONGROUP_DELETE\",\"F_LEGEND_SET_PRIVATE_ADD\",\"F_PROGRAMSTAGE_DELETE\",\"F_ATTRIBUTE_PUBLIC_ADD\",\"F_TRACKED_ENTITY_FORM_DELETE\",\"F_USERROLE_DELETE\",\"F_DOCUMENT_DELETE\",\"F_ORGUNITGROUPSET_DELETE\",\"M_dhis-web-translations\",\"M_dhis-web-sms\",\"F_SCHEDULING_CASE_AGGREGATE_QUERY_BUILDER\",\"F_PROGRAM_DELETE\",\"F_VALIDATIONRULE_DELETE\",\"F_PROGRAMDATAELEMENT_ADD\",\"M_dhis-web-mobile\",\"F_ACTIVITY_PLAN\",\"F_RELATIONSHIPTYPE_PUBLIC_ADD\",\"F_PREDICTOR_ADD\",\"F_SQLVIEW_PRIVATE_ADD\",\"F_EXPORT_DATA\",\"F_OAUTH2_CLIENT_MANAGE\",\"F_EVENT_VISUALIZATION_PUBLIC_ADD\",\"F_ORGUNITGROUP_PUBLIC_ADD\",\"F_APPROVE_DATA_LOWER_LEVELS\",\"M_Social_Media_Video\",\"F_OPTIONSET_PUBLIC_ADD\",\"F_EVENTCHART_EXTERNAL\",\"M_dhis-web-dataentry\",\"F_PROGRAM_TRACKING_SEARCH\",\"M_dhis-web-maintenance-dataset\",\"F_USERROLE_LIST\",\"M_dhis-web-import-export\",\"M_dhis-web-caseentry\",\"F_USERROLE_PUBLIC_ADD\",\"M_dhis-web-importexport\",\"M_InterpretationsTest\",\"F_ORGUNITGROUPSET_PUBLIC_ADD\",\"F_SQLVIEW_EXTERNAL\",\"F_REPORT_DELETE\",\"F_DASHBOARD_PUBLIC_ADD\",\"F_CONSTANT_DELETE\",\"M_dhis-web-maintenance-user\",\"F_PREDICTOR_DELETE\",\"M_dhis-web-data-visualizer\",\"F_DATASET_PRIVATE_ADD\",\"F_EVENTREPORT_PUBLIC_ADD\",\"F_PROGRAMSTAGE_SECTION_DELETE\",\"F_TRACKED_ENTITY_UPDATE\",\"F_CATEGORY_OPTION_GROUP_SET_PUBLIC_ADD\",\"F_TRACKED_ENTITY_INSTANCE_DASHBOARD\",\"F_METADATA_MANAGE\",\"F_ANALYTICSTABLEHOOK_DELETE\",\"F_UNCOMPLETE_EVENT\",\"M_dhis-web-sms-configuration\",\"M_dhis-web-interpretation\",\"F_LEGEND_DELETE\",\"M_Custom_Js_Css\",\"F_PROGRAM_INDICATOR_MANAGEMENT\",\"F_ANONYMOUS_DATA_ENTRY\",\"F_MAP_PUBLIC_ADD\",\"F_PROGRAM_VALIDATION\",\"F_SCHEDULING_ADMIN\",\"F_TRACKED_ENTITY_COMMENT_DELETE\",\"F_DATAELEMENT_MINMAX_DELETE\",\"F_MOBILE_SETTINGS\",\"F_PREDICTORGROUP_ADD\",\"F_REPORT_PRIVATE_ADD\",\"F_VALIDATIONRULEGROUP_PRIVATE_ADD\",\"F_PUSH_ANALYSIS_DELETE\",\"F_REPLICATE_USER\",\"F_DATAVALUE_ADD\",\"M_dhis-web-maintenance-organisationunit\",\"F_INSERT_CUSTOM_JS_CSS\",\"F_DATAELEMENTGROUPSET_DELETE\",\"F_SQLVIEW_DELETE\",\"F_ENROLLMENT_CASCADE_DELETE\",\"F_PROGRAMDATAELEMENT_DELETE\",\"F_TRACKED_ENTITY_INSTANCE_LIST\",\"F_INDICATORTYPE_ADD\",\"F_LEGEND_SET_DELETE\",\"F_VIEW_EVENT_ANALYTICS\",\"F_PROGRAMSTAGE_SECTION_MANAGEMENT\",\"F_IMPORT_EVENTS\",\"F_PROGRAM_INSTANCE_DELETE\",\"F_INDICATOR_PRIVATE_ADD\",\"F_TRACKED_ENTITY_INSTANCE_HISTORY\",\"F_FRED_CREATE\",\"F_EVENTCHART_PUBLIC_ADD\",\"F_PUSH_ANALYSIS_ADD\",\"M_dhis-web-event-visualizer\",\"F_USER_ADD\",\"F_EXTERNAL_MAP_LAYER_DELETE\",\"F_SYSTEM_SETTING\",\"F_ANALYTICSTABLEHOOK_ADD\",\"F_ATTRIBUTE_PRIVATE_ADD\",\"F_DOCUMENT_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_DELETE\",\"M_Easy_Visualization\",\"F_VISUALIZATION_PUBLIC_ADD\",\"F_DATAELEMENT_MINMAX_ADD\",\"M_dhis-web-data-quality\",\"M_dhis-web-pivot\",\"F_EVENTREPORT_EXTERNAL\",\"F_PROGRAM_RULE_UPDATE\",\"F_DATAELEMENT_PUBLIC_ADD\",\"M_dhis-web-validationrule\",\"F_CONSTANT_MANAGEMENT\",\"F_RUN_VALIDATION\",\"F_MANAGE_TICKETS\",\"F_GENERATE_BENEFICIARY_TABULAR_REPORT\",\"F_OPTIONGROUP_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_DELETE\",\"M_User_Administration\",\"M_dhis-web-settings\",\"F_IMPORT_DATA\",\"F_VIEW_DATABROWSER\",\"F_PERFORM_ANALYTICS_EXPLAIN\",\"F_MOBILE_DELETE_SMS\",\"F_OPTIONSET_MANAGEMENT\",\"F_SEND_MESSAGE\",\"F_PROGRAMSTAGE_ADD\",\"M_dhis-web-maps\",\"F_MINMAX_DATAELEMENT_DELETE\",\"F_ATTRIBUTE_DELETE\",\"F_OPTIONSET_DELETE\",\"F_PROGRAM_TRACKING_LIST\",\"M_dhis-web-dashboard\",\"M_dhis-web-data-administration\",\"F_ACCEPT_DATA_LOWER_LEVELS\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_DELETE\",\"F_OPTIONGROUPSET_PUBLIC_ADD\",\"M_dhis-web-capture\",\"F_PROGRAM_INDICATOR_GROUP_PUBLIC_ADD\",\"F_CATEGORY_DELETE\",\"F_COLOR_SET_DELETE\",\"M_dhis-web-app-management\",\"F_INDICATORTYPE_DELETE\",\"F_NAME_BASED_DATA_ENTRY\",\"F_INDICATORGROUP_PRIVATE_ADD\",\"F_FRED_DELETE\",\"F_VALIDATIONCRITERIA_DELETE\",\"F_PROGRAM_STAGE_INSTANCE_SEARCH\"],\"dataSets\":[\"Nyh6laLdBEJ\",\"j38YW1Am7he\",\"aLpVgfXiz0f\",\"YFTk3VdO9av\",\"Rl58JxmKJo2\",\"eZDhcZi6FLP\",\"N4fIX1HL3TQ\",\"EDzMBk0RRji\",\"TuL8IOPzpHh\",\"ce7DSxx5H2I\",\"EKWVBc5C0ms\",\"PLq9sJluXvc\",\"rsyjyJmYD4J\",\"ULowA8V3ucd\",\"QX4ZTUbOt3a\",\"pBOMPrpg1QX\",\"OsPTWNqq26W\",\"V8MHeZHIrcP\",\"YZhd4nu3mzY\",\"Y8gAn9DfAGU\",\"vc6nF5yZsPR\",\"Lpw6GcnTrmS\",\"lyLU2wR22tC\",\"VTdjfLXXmoi\",\"SF8FDSqw30D\",\"BfMAe6Itzgt\"],\"userCredentials\":{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"externalAuth\":false,\"twoFA\":false,\"passwordLastUpdated\":\"2014-12-18T20:56:05.264\",\"cogsDimensionConstraints\":[],\"catDimensionConstraints\":[],\"previousPasswords\":[],\"lastLogin\":\"2023-03-01T08:47:27.329\",\"selfRegistered\":false,\"invitation\":false,\"disabled\":false,\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}]}}", - "{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"surname\":\"Traore\",\"firstName\":\"John\",\"employer\":\"DHIS\",\"languages\":\"English\",\"gender\":\"gender_male\",\"jobTitle\":\"Super user\",\"created\":\"2013-04-18T17:15:08.407\",\"lastUpdated\":\"2023-03-01T08:47:53.971\",\"dataViewOrganisationUnits\":[],\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userGroupAccesses\":[],\"userAccesses\":[],\"userGroups\":[{\"id\":\"Kk12LkEWtXp\"},{\"id\":\"M1Qre0247G3\"},{\"id\":\"NTC8GjJ7p8P\"},{\"id\":\"B6JNeAQ6akX\"},{\"id\":\"wl5cDMuUhmF\"},{\"id\":\"QYrzIjSfI8z\"},{\"id\":\"lFHP5lLkzVr\"},{\"id\":\"jvrEwEJ2yZn\"},{\"id\":\"vAvEltyXGbD\"},{\"id\":\"w900PX10L7O\"},{\"id\":\"GogLpGmkL0g\"},{\"id\":\"vRoAruMnNpB\"},{\"id\":\"z1gNAf2zUxZ\"},{\"id\":\"gXpmQO6eEOo\"},{\"id\":\"tH0GcNZZ1vW\"},{\"id\":\"H9XnHoWRKCg\"}],\"translations\":[],\"teiSearchOrganisationUnits\":[],\"organisationUnits\":[{\"id\":\"ImspTQPwCqd\"}],\"externalAccess\":false,\"displayName\":\"John Traore\",\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"name\":\"John Traore\",\"email\":\"dummy@dhis2.org\",\"introduction\":\"I am the super user of DHIS 2\",\"birthday\":\"1971-04-08T00:00:00.000\",\"nationality\":\"Sierra Leone\",\"education\":\"Master of super using\",\"interests\":\"Football, swimming, singing, dancing\",\"whatsApp\":\"+123123123123\",\"facebookMessenger\":\"john.traore\",\"skype\":\"john.traore\",\"telegram\":\"john.traore\",\"twitter\":\"john.traore\",\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}],\"settings\":{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false},\"programs\":[\"uy2gU8kT1jF\",\"ur1Edk5Oe2n\",\"MoUd5BTQ3lY\",\"lxAQ7Zs9VYR\",\"IpHINAT79UW\",\"kla3mAPgvCH\",\"qDkgAbB5Jlk\",\"VBqh0ynB2wv\",\"bMcwwoVnbSR\",\"q04UBOqq3rp\",\"eBAyeGv0exc\",\"M3xtLkYBlKI\",\"fDd25txQckK\",\"WSGAb5XwJ3Y\"],\"authorities\":[\"F_PROGRAM_INDICATOR_PUBLIC_ADD\",\"F_SQLVIEW_EXECUTE\",\"F_USER_VIEW\",\"F_GENERATE_MIN_MAX_VALUES\",\"F_VALIDATIONRULE_PUBLIC_ADD\",\"F_CATEGORY_PRIVATE_ADD\",\"F_INDICATORGROUPSET_PUBLIC_ADD\",\"F_DATAVALUE_DELETE\",\"F_EXTERNAL_MAP_LAYER_PRIVATE_ADD\",\"F_RELATIONSHIPTYPE_DELETE\",\"F_CATEGORY_OPTION_PRIVATE_ADD\",\"F_SINGLE_EVENT_DATA_ENTRY\",\"F_CATEGORY_OPTION_GROUP_PUBLIC_ADD\",\"F_GIS_ADMIN\",\"M_dhis-web-event-capture\",\"F_SEND_EMAIL\",\"M_dhis-web-aggregate-data-entry\",\"F_ORGUNITGROUPSET_PRIVATE_ADD\",\"F_INDICATOR_DELETE\",\"M_dhis-web-event-reports\",\"F_VIEW_UNAPPROVED_DATA\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW\",\"F_TRACKED_ENTITY_INSTANCE_CHANGE_LOCATION\",\"F_OPTIONGROUPSET_DELETE\",\"F_USERGROUP_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_PRIVATE_ADD\",\"F_DOCUMENT_EXTERNAL\",\"F_PROGRAM_TRACKING_MANAGEMENT\",\"F_TRACKED_ENTITY_ATTRIBUTE_PUBLIC_ADD\",\"F_GENERATE_PROGRAM_SUMMARY_REPORT\",\"F_PROGRAM_INDICATOR_DELETE\",\"F_MOBILE_SENDSMS\",\"F_TRACKED_ENTITY_ADD\",\"F_TRACKED_ENTITY_MANAGEMENT\",\"F_RELATIONSHIP_DELETE\",\"F_VALIDATIONRULEGROUP_PUBLIC_ADD\",\"F_REPORT_EXTERNAL\",\"F_DOCUMENT_PRIVATE_ADD\",\"M_dhis-web-reports\",\"F_TRACKED_ENTITY_DELETE\",\"F_USERGROUP_DELETE\",\"F_PROGRAM_PRIVATE_ADD\",\"F_CATEGORY_COMBO_PRIVATE_ADD\",\"F_SCHEDULING_SEND_MESSAGE\",\"F_EXTERNAL_MAP_LAYER_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_DELETE\",\"F_ORGANISATIONUNIT_MOVE\",\"M_dhis-web-usage-analytics\",\"F_COLOR_DELETE\",\"F_INDICATORGROUP_DELETE\",\"F_ORGANISATIONUNIT_DELETE\",\"F_PROGRAM_RULE_ADD\",\"M_dhis-web-light\",\"F_OPTIONGROUPSET_PRIVATE_ADD\",\"F_DATA_MART_ADMIN\",\"M_dhis-web-maintenance-mobile\",\"F_DATASET_PUBLIC_ADD\",\"F_CATEGORY_COMBO_DELETE\",\"F_SECTION_DELETE\",\"F_USER_DELETE\",\"F_INDICATORGROUPSET_PRIVATE_ADD\",\"F_PROGRAM_INDICATOR_PRIVATE_ADD\",\"F_METADATA_IMPORT\",\"M_dhis-web-maintenance-appmanager\",\"F_EXPORT_EVENTS\",\"M_dhis-web-maintenance-settings\",\"F_SQLVIEW_PUBLIC_ADD\",\"F_PERFORM_MAINTENANCE\",\"F_COLOR_SET_ADD\",\"F_PROGRAM_STAGE_INSTANCE_DELETE\",\"F_METADATA_EXPORT\",\"F_MINMAX_DATAELEMENT_ADD\",\"F_PROGRAMSTAGE_SECTION_ADD\",\"F_DATAELEMENTGROUP_PRIVATE_ADD\",\"F_VALIDATIONRULE_PRIVATE_ADD\",\"F_APPROVE_DATA\",\"M_dhis-web-mapping\",\"F_DATAELEMENT_PRIVATE_ADD\",\"F_VALIDATIONCRITERIA_ADD\",\"F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS\",\"F_IGNORE_TRACKER_REQUIRED_VALUE_VALIDATION\",\"F_PROGRAM_PUBLIC_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_DELETE\",\"F_USER_ADD_WITHIN_MANAGED_GROUP\",\"M_Web_Portal\",\"F_ORGANISATIONUNIT_ADD\",\"M_dhis-web-user\",\"F_LEGEND_SET_PUBLIC_ADD\",\"F_CONSTANT_ADD\",\"F_PREDICTORGROUP_DELETE\",\"F_TRACKED_ENTITY_COMMENT_ADD\",\"F_TRACKED_ENTITY_INSTANCE_MANAGEMENT\",\"M_dhis-web-visualizer\",\"F_INDICATOR_PUBLIC_ADD\",\"F_INDICATORGROUP_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_PRIVATE_ADD\",\"M_dhis-web-maintenance\",\"M_dhis-web-approval\",\"F_PROGRAM_RULE_MANAGEMENT\",\"F_TEI_CASCADE_DELETE\",\"F_FRED_UPDATE\",\"F_VISUALIZATION_EXTERNAL\",\"M_dhis-web-cache-cleaner\",\"F_EDIT_EXPIRED\",\"F_ACCESS_TRACKED_ENTITY_ATTRIBUTES\",\"F_PROGRAM_DASHBOARD_CONFIG_ADMIN\",\"F_EVENT_VISUALIZATION_EXTERNAL\",\"F_ORGANISATIONUNITLEVEL_UPDATE\",\"F_CATEGORY_OPTION_PUBLIC_ADD\",\"M_dhis-web-datastore\",\"F_CATEGORY_OPTION_DELETE\",\"M_Data_Table\",\"M_dhis-web-menu-management\",\"F_REPORT_PUBLIC_ADD\",\"F_VALIDATIONRULEGROUP_DELETE\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_ADD\",\"F_RELATIONSHIP_MANAGEMENT\",\"F_COLOR_ADD\",\"F_OPTIONSET_PRIVATE_ADD\",\"F_PROGRAM_RULE_DELETE\",\"F_GENERATE_STATISTICAL_PROGRAM_REPORT\",\"F_ORGUNITGROUP_DELETE\",\"F_DATAELEMENTGROUPSET_PRIVATE_ADD\",\"M_dhis-web-tracker-capture\",\"F_LOCALE_ADD\",\"F_LEGEND_ADD\",\"F_CATEGORY_OPTION_GROUP_PRIVATE_ADD\",\"F_PROGRAM_INSTANCE_MANAGEMENT\",\"M_dhis-web-reporting\",\"F_CATEGORY_PUBLIC_ADD\",\"F_SECTION_ADD\",\"F_CATEGORY_COMBO_PUBLIC_ADD\",\"M_dhis-web-maintenance-datadictionary\",\"F_DATASET_DELETE\",\"F_INDICATORGROUPSET_DELETE\",\"F_USER_DELETE_WITHIN_MANAGED_GROUP\",\"F_ADD_TRACKED_ENTITY_FORM\",\"M_dhis-web-scheduler\",\"F_OPTIONGROUP_PUBLIC_ADD\",\"F_USERROLE_PRIVATE_ADD\",\"M_dhis-web-messaging\",\"M_dhis-web-maintenance-program\",\"F_EXTERNALFILERESOURCE_ADD\",\"F_MAP_EXTERNAL\",\"M_bna_widget\",\"F_DATAELEMENTGROUPSET_PUBLIC_ADD\",\"F_DATAELEMENTGROUP_DELETE\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_ADD\",\"F_RELATIONSHIP_ADD\",\"F_ORGUNITGROUP_PRIVATE_ADD\",\"F_DATAELEMENTGROUP_PUBLIC_ADD\",\"F_USER_GROUPS_READ_ONLY_ADD_MEMBERS\",\"F_LOCALE_DELETE\",\"F_PREDICTOR_RUN\",\"F_DATAELEMENT_DELETE\",\"F_OPTIONGROUP_DELETE\",\"F_LEGEND_SET_PRIVATE_ADD\",\"F_PROGRAMSTAGE_DELETE\",\"F_ATTRIBUTE_PUBLIC_ADD\",\"F_TRACKED_ENTITY_FORM_DELETE\",\"F_USERROLE_DELETE\",\"F_DOCUMENT_DELETE\",\"F_ORGUNITGROUPSET_DELETE\",\"M_dhis-web-translations\",\"M_dhis-web-sms\",\"F_SCHEDULING_CASE_AGGREGATE_QUERY_BUILDER\",\"F_PROGRAM_DELETE\",\"F_VALIDATIONRULE_DELETE\",\"F_PROGRAMDATAELEMENT_ADD\",\"M_dhis-web-mobile\",\"F_ACTIVITY_PLAN\",\"F_RELATIONSHIPTYPE_PUBLIC_ADD\",\"F_PREDICTOR_ADD\",\"F_SQLVIEW_PRIVATE_ADD\",\"F_EXPORT_DATA\",\"F_OAUTH2_CLIENT_MANAGE\",\"F_EVENT_VISUALIZATION_PUBLIC_ADD\",\"F_ORGUNITGROUP_PUBLIC_ADD\",\"F_APPROVE_DATA_LOWER_LEVELS\",\"M_Social_Media_Video\",\"F_OPTIONSET_PUBLIC_ADD\",\"F_EVENTCHART_EXTERNAL\",\"M_dhis-web-dataentry\",\"F_PROGRAM_TRACKING_SEARCH\",\"M_dhis-web-maintenance-dataset\",\"F_USERROLE_LIST\",\"M_dhis-web-import-export\",\"M_dhis-web-caseentry\",\"F_USERROLE_PUBLIC_ADD\",\"M_dhis-web-importexport\",\"M_InterpretationsTest\",\"F_ORGUNITGROUPSET_PUBLIC_ADD\",\"F_SQLVIEW_EXTERNAL\",\"F_REPORT_DELETE\",\"F_DASHBOARD_PUBLIC_ADD\",\"F_CONSTANT_DELETE\",\"M_dhis-web-maintenance-user\",\"F_PREDICTOR_DELETE\",\"M_dhis-web-data-visualizer\",\"F_DATASET_PRIVATE_ADD\",\"F_EVENTREPORT_PUBLIC_ADD\",\"F_PROGRAMSTAGE_SECTION_DELETE\",\"F_TRACKED_ENTITY_UPDATE\",\"F_CATEGORY_OPTION_GROUP_SET_PUBLIC_ADD\",\"F_TRACKED_ENTITY_INSTANCE_DASHBOARD\",\"F_METADATA_MANAGE\",\"F_ANALYTICSTABLEHOOK_DELETE\",\"F_UNCOMPLETE_EVENT\",\"M_dhis-web-sms-configuration\",\"M_dhis-web-interpretation\",\"F_LEGEND_DELETE\",\"M_Custom_Js_Css\",\"F_PROGRAM_INDICATOR_MANAGEMENT\",\"F_ANONYMOUS_DATA_ENTRY\",\"F_MAP_PUBLIC_ADD\",\"F_PROGRAM_VALIDATION\",\"F_SCHEDULING_ADMIN\",\"F_TRACKED_ENTITY_COMMENT_DELETE\",\"F_DATAELEMENT_MINMAX_DELETE\",\"F_MOBILE_SETTINGS\",\"F_PREDICTORGROUP_ADD\",\"F_REPORT_PRIVATE_ADD\",\"F_VALIDATIONRULEGROUP_PRIVATE_ADD\",\"F_PUSH_ANALYSIS_DELETE\",\"F_REPLICATE_USER\",\"F_DATAVALUE_ADD\",\"M_dhis-web-maintenance-organisationunit\",\"F_INSERT_CUSTOM_JS_CSS\",\"F_DATAELEMENTGROUPSET_DELETE\",\"F_SQLVIEW_DELETE\",\"F_ENROLLMENT_CASCADE_DELETE\",\"F_PROGRAMDATAELEMENT_DELETE\",\"F_TRACKED_ENTITY_INSTANCE_LIST\",\"F_INDICATORTYPE_ADD\",\"F_LEGEND_SET_DELETE\",\"F_VIEW_EVENT_ANALYTICS\",\"F_PROGRAMSTAGE_SECTION_MANAGEMENT\",\"F_IMPORT_EVENTS\",\"F_PROGRAM_INSTANCE_DELETE\",\"F_INDICATOR_PRIVATE_ADD\",\"F_TRACKED_ENTITY_INSTANCE_HISTORY\",\"F_FRED_CREATE\",\"F_EVENTCHART_PUBLIC_ADD\",\"F_PUSH_ANALYSIS_ADD\",\"M_dhis-web-event-visualizer\",\"F_USER_ADD\",\"F_EXTERNAL_MAP_LAYER_DELETE\",\"F_SYSTEM_SETTING\",\"F_ANALYTICSTABLEHOOK_ADD\",\"F_ATTRIBUTE_PRIVATE_ADD\",\"F_DOCUMENT_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_DELETE\",\"M_Easy_Visualization\",\"F_VISUALIZATION_PUBLIC_ADD\",\"F_DATAELEMENT_MINMAX_ADD\",\"M_dhis-web-data-quality\",\"M_dhis-web-pivot\",\"F_EVENTREPORT_EXTERNAL\",\"F_PROGRAM_RULE_UPDATE\",\"F_DATAELEMENT_PUBLIC_ADD\",\"M_dhis-web-validationrule\",\"F_CONSTANT_MANAGEMENT\",\"F_RUN_VALIDATION\",\"F_MANAGE_TICKETS\",\"F_GENERATE_BENEFICIARY_TABULAR_REPORT\",\"F_OPTIONGROUP_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_DELETE\",\"M_User_Administration\",\"M_dhis-web-settings\",\"F_IMPORT_DATA\",\"F_VIEW_DATABROWSER\",\"F_PERFORM_ANALYTICS_EXPLAIN\",\"F_MOBILE_DELETE_SMS\",\"F_OPTIONSET_MANAGEMENT\",\"F_SEND_MESSAGE\",\"F_PROGRAMSTAGE_ADD\",\"M_dhis-web-maps\",\"F_MINMAX_DATAELEMENT_DELETE\",\"F_ATTRIBUTE_DELETE\",\"F_OPTIONSET_DELETE\",\"F_PROGRAM_TRACKING_LIST\",\"M_dhis-web-dashboard\",\"M_dhis-web-data-administration\",\"F_ACCEPT_DATA_LOWER_LEVELS\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_DELETE\",\"F_OPTIONGROUPSET_PUBLIC_ADD\",\"M_dhis-web-capture\",\"F_PROGRAM_INDICATOR_GROUP_PUBLIC_ADD\",\"F_CATEGORY_DELETE\",\"F_COLOR_SET_DELETE\",\"M_dhis-web-app-management\",\"F_INDICATORTYPE_DELETE\",\"F_NAME_BASED_DATA_ENTRY\",\"F_INDICATORGROUP_PRIVATE_ADD\",\"F_FRED_DELETE\",\"F_VALIDATIONCRITERIA_DELETE\",\"F_PROGRAM_STAGE_INSTANCE_SEARCH\"],\"dataSets\":[\"Nyh6laLdBEJ\",\"j38YW1Am7he\",\"aLpVgfXiz0f\",\"YFTk3VdO9av\",\"Rl58JxmKJo2\",\"eZDhcZi6FLP\",\"N4fIX1HL3TQ\",\"EDzMBk0RRji\",\"TuL8IOPzpHh\",\"ce7DSxx5H2I\",\"EKWVBc5C0ms\",\"PLq9sJluXvc\",\"rsyjyJmYD4J\",\"ULowA8V3ucd\",\"QX4ZTUbOt3a\",\"pBOMPrpg1QX\",\"OsPTWNqq26W\",\"V8MHeZHIrcP\",\"YZhd4nu3mzY\",\"Y8gAn9DfAGU\",\"vc6nF5yZsPR\",\"Lpw6GcnTrmS\",\"lyLU2wR22tC\",\"VTdjfLXXmoi\",\"SF8FDSqw30D\",\"BfMAe6Itzgt\"],\"userCredentials\":{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"externalAuth\":false,\"twoFA\":false,\"passwordLastUpdated\":\"2014-12-18T20:56:05.264\",\"cogsDimensionConstraints\":[],\"catDimensionConstraints\":[],\"previousPasswords\":[],\"lastLogin\":\"2023-03-01T08:47:53.970\",\"selfRegistered\":false,\"invitation\":false,\"disabled\":false,\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}]}}", - "{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"surname\":\"Traore\",\"firstName\":\"John\",\"employer\":\"DHIS\",\"languages\":\"English\",\"gender\":\"gender_male\",\"jobTitle\":\"Super user\",\"created\":\"2013-04-18T17:15:08.407\",\"lastUpdated\":\"2023-03-01T08:48:03.304\",\"dataViewOrganisationUnits\":[],\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userGroupAccesses\":[],\"userAccesses\":[],\"userGroups\":[{\"id\":\"Kk12LkEWtXp\"},{\"id\":\"M1Qre0247G3\"},{\"id\":\"NTC8GjJ7p8P\"},{\"id\":\"B6JNeAQ6akX\"},{\"id\":\"wl5cDMuUhmF\"},{\"id\":\"QYrzIjSfI8z\"},{\"id\":\"lFHP5lLkzVr\"},{\"id\":\"jvrEwEJ2yZn\"},{\"id\":\"vAvEltyXGbD\"},{\"id\":\"w900PX10L7O\"},{\"id\":\"GogLpGmkL0g\"},{\"id\":\"vRoAruMnNpB\"},{\"id\":\"z1gNAf2zUxZ\"},{\"id\":\"gXpmQO6eEOo\"},{\"id\":\"tH0GcNZZ1vW\"},{\"id\":\"H9XnHoWRKCg\"}],\"translations\":[],\"teiSearchOrganisationUnits\":[],\"organisationUnits\":[{\"id\":\"ImspTQPwCqd\"}],\"externalAccess\":false,\"displayName\":\"John Traore\",\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"name\":\"John Traore\",\"email\":\"dummy@dhis2.org\",\"introduction\":\"I am the super user of DHIS 2\",\"birthday\":\"1971-04-08T00:00:00.000\",\"nationality\":\"Sierra Leone\",\"education\":\"Master of super using\",\"interests\":\"Football, swimming, singing, dancing\",\"whatsApp\":\"+123123123123\",\"facebookMessenger\":\"john.traore\",\"skype\":\"john.traore\",\"telegram\":\"john.traore\",\"twitter\":\"john.traore\",\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}],\"settings\":{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false},\"programs\":[\"uy2gU8kT1jF\",\"ur1Edk5Oe2n\",\"MoUd5BTQ3lY\",\"lxAQ7Zs9VYR\",\"IpHINAT79UW\",\"kla3mAPgvCH\",\"qDkgAbB5Jlk\",\"VBqh0ynB2wv\",\"bMcwwoVnbSR\",\"q04UBOqq3rp\",\"eBAyeGv0exc\",\"M3xtLkYBlKI\",\"fDd25txQckK\",\"WSGAb5XwJ3Y\"],\"authorities\":[\"F_PROGRAM_INDICATOR_PUBLIC_ADD\",\"F_SQLVIEW_EXECUTE\",\"F_USER_VIEW\",\"F_GENERATE_MIN_MAX_VALUES\",\"F_VALIDATIONRULE_PUBLIC_ADD\",\"F_CATEGORY_PRIVATE_ADD\",\"F_INDICATORGROUPSET_PUBLIC_ADD\",\"F_DATAVALUE_DELETE\",\"F_EXTERNAL_MAP_LAYER_PRIVATE_ADD\",\"F_RELATIONSHIPTYPE_DELETE\",\"F_CATEGORY_OPTION_PRIVATE_ADD\",\"F_SINGLE_EVENT_DATA_ENTRY\",\"F_CATEGORY_OPTION_GROUP_PUBLIC_ADD\",\"F_GIS_ADMIN\",\"M_dhis-web-event-capture\",\"F_SEND_EMAIL\",\"M_dhis-web-aggregate-data-entry\",\"F_ORGUNITGROUPSET_PRIVATE_ADD\",\"F_INDICATOR_DELETE\",\"M_dhis-web-event-reports\",\"F_VIEW_UNAPPROVED_DATA\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW\",\"F_TRACKED_ENTITY_INSTANCE_CHANGE_LOCATION\",\"F_OPTIONGROUPSET_DELETE\",\"F_USERGROUP_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_PRIVATE_ADD\",\"F_DOCUMENT_EXTERNAL\",\"F_PROGRAM_TRACKING_MANAGEMENT\",\"F_TRACKED_ENTITY_ATTRIBUTE_PUBLIC_ADD\",\"F_GENERATE_PROGRAM_SUMMARY_REPORT\",\"F_PROGRAM_INDICATOR_DELETE\",\"F_MOBILE_SENDSMS\",\"F_TRACKED_ENTITY_ADD\",\"F_TRACKED_ENTITY_MANAGEMENT\",\"F_RELATIONSHIP_DELETE\",\"F_VALIDATIONRULEGROUP_PUBLIC_ADD\",\"F_REPORT_EXTERNAL\",\"F_DOCUMENT_PRIVATE_ADD\",\"M_dhis-web-reports\",\"F_TRACKED_ENTITY_DELETE\",\"F_USERGROUP_DELETE\",\"F_PROGRAM_PRIVATE_ADD\",\"F_CATEGORY_COMBO_PRIVATE_ADD\",\"F_SCHEDULING_SEND_MESSAGE\",\"F_EXTERNAL_MAP_LAYER_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_DELETE\",\"F_ORGANISATIONUNIT_MOVE\",\"M_dhis-web-usage-analytics\",\"F_COLOR_DELETE\",\"F_INDICATORGROUP_DELETE\",\"F_ORGANISATIONUNIT_DELETE\",\"F_PROGRAM_RULE_ADD\",\"M_dhis-web-light\",\"F_OPTIONGROUPSET_PRIVATE_ADD\",\"F_DATA_MART_ADMIN\",\"M_dhis-web-maintenance-mobile\",\"F_DATASET_PUBLIC_ADD\",\"F_CATEGORY_COMBO_DELETE\",\"F_SECTION_DELETE\",\"F_USER_DELETE\",\"F_INDICATORGROUPSET_PRIVATE_ADD\",\"F_PROGRAM_INDICATOR_PRIVATE_ADD\",\"F_METADATA_IMPORT\",\"M_dhis-web-maintenance-appmanager\",\"F_EXPORT_EVENTS\",\"M_dhis-web-maintenance-settings\",\"F_SQLVIEW_PUBLIC_ADD\",\"F_PERFORM_MAINTENANCE\",\"F_COLOR_SET_ADD\",\"F_PROGRAM_STAGE_INSTANCE_DELETE\",\"F_METADATA_EXPORT\",\"F_MINMAX_DATAELEMENT_ADD\",\"F_PROGRAMSTAGE_SECTION_ADD\",\"F_DATAELEMENTGROUP_PRIVATE_ADD\",\"F_VALIDATIONRULE_PRIVATE_ADD\",\"F_APPROVE_DATA\",\"M_dhis-web-mapping\",\"F_DATAELEMENT_PRIVATE_ADD\",\"F_VALIDATIONCRITERIA_ADD\",\"F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS\",\"F_IGNORE_TRACKER_REQUIRED_VALUE_VALIDATION\",\"F_PROGRAM_PUBLIC_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_DELETE\",\"F_USER_ADD_WITHIN_MANAGED_GROUP\",\"M_Web_Portal\",\"F_ORGANISATIONUNIT_ADD\",\"M_dhis-web-user\",\"F_LEGEND_SET_PUBLIC_ADD\",\"F_CONSTANT_ADD\",\"F_PREDICTORGROUP_DELETE\",\"F_TRACKED_ENTITY_COMMENT_ADD\",\"F_TRACKED_ENTITY_INSTANCE_MANAGEMENT\",\"M_dhis-web-visualizer\",\"F_INDICATOR_PUBLIC_ADD\",\"F_INDICATORGROUP_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_PRIVATE_ADD\",\"M_dhis-web-maintenance\",\"M_dhis-web-approval\",\"F_PROGRAM_RULE_MANAGEMENT\",\"F_TEI_CASCADE_DELETE\",\"F_FRED_UPDATE\",\"F_VISUALIZATION_EXTERNAL\",\"M_dhis-web-cache-cleaner\",\"F_EDIT_EXPIRED\",\"F_ACCESS_TRACKED_ENTITY_ATTRIBUTES\",\"F_PROGRAM_DASHBOARD_CONFIG_ADMIN\",\"F_EVENT_VISUALIZATION_EXTERNAL\",\"F_ORGANISATIONUNITLEVEL_UPDATE\",\"F_CATEGORY_OPTION_PUBLIC_ADD\",\"M_dhis-web-datastore\",\"F_CATEGORY_OPTION_DELETE\",\"M_Data_Table\",\"M_dhis-web-menu-management\",\"F_REPORT_PUBLIC_ADD\",\"F_VALIDATIONRULEGROUP_DELETE\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_ADD\",\"F_RELATIONSHIP_MANAGEMENT\",\"F_COLOR_ADD\",\"F_OPTIONSET_PRIVATE_ADD\",\"F_PROGRAM_RULE_DELETE\",\"F_GENERATE_STATISTICAL_PROGRAM_REPORT\",\"F_ORGUNITGROUP_DELETE\",\"F_DATAELEMENTGROUPSET_PRIVATE_ADD\",\"M_dhis-web-tracker-capture\",\"F_LOCALE_ADD\",\"F_LEGEND_ADD\",\"F_CATEGORY_OPTION_GROUP_PRIVATE_ADD\",\"F_PROGRAM_INSTANCE_MANAGEMENT\",\"M_dhis-web-reporting\",\"F_CATEGORY_PUBLIC_ADD\",\"F_SECTION_ADD\",\"F_CATEGORY_COMBO_PUBLIC_ADD\",\"M_dhis-web-maintenance-datadictionary\",\"F_DATASET_DELETE\",\"F_INDICATORGROUPSET_DELETE\",\"F_USER_DELETE_WITHIN_MANAGED_GROUP\",\"F_ADD_TRACKED_ENTITY_FORM\",\"M_dhis-web-scheduler\",\"F_OPTIONGROUP_PUBLIC_ADD\",\"F_USERROLE_PRIVATE_ADD\",\"M_dhis-web-messaging\",\"M_dhis-web-maintenance-program\",\"F_EXTERNALFILERESOURCE_ADD\",\"F_MAP_EXTERNAL\",\"M_bna_widget\",\"F_DATAELEMENTGROUPSET_PUBLIC_ADD\",\"F_DATAELEMENTGROUP_DELETE\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_ADD\",\"F_RELATIONSHIP_ADD\",\"F_ORGUNITGROUP_PRIVATE_ADD\",\"F_DATAELEMENTGROUP_PUBLIC_ADD\",\"F_USER_GROUPS_READ_ONLY_ADD_MEMBERS\",\"F_LOCALE_DELETE\",\"F_PREDICTOR_RUN\",\"F_DATAELEMENT_DELETE\",\"F_OPTIONGROUP_DELETE\",\"F_LEGEND_SET_PRIVATE_ADD\",\"F_PROGRAMSTAGE_DELETE\",\"F_ATTRIBUTE_PUBLIC_ADD\",\"F_TRACKED_ENTITY_FORM_DELETE\",\"F_USERROLE_DELETE\",\"F_DOCUMENT_DELETE\",\"F_ORGUNITGROUPSET_DELETE\",\"M_dhis-web-translations\",\"M_dhis-web-sms\",\"F_SCHEDULING_CASE_AGGREGATE_QUERY_BUILDER\",\"F_PROGRAM_DELETE\",\"F_VALIDATIONRULE_DELETE\",\"F_PROGRAMDATAELEMENT_ADD\",\"M_dhis-web-mobile\",\"F_ACTIVITY_PLAN\",\"F_RELATIONSHIPTYPE_PUBLIC_ADD\",\"F_PREDICTOR_ADD\",\"F_SQLVIEW_PRIVATE_ADD\",\"F_EXPORT_DATA\",\"F_OAUTH2_CLIENT_MANAGE\",\"F_EVENT_VISUALIZATION_PUBLIC_ADD\",\"F_ORGUNITGROUP_PUBLIC_ADD\",\"F_APPROVE_DATA_LOWER_LEVELS\",\"M_Social_Media_Video\",\"F_OPTIONSET_PUBLIC_ADD\",\"F_EVENTCHART_EXTERNAL\",\"M_dhis-web-dataentry\",\"F_PROGRAM_TRACKING_SEARCH\",\"M_dhis-web-maintenance-dataset\",\"F_USERROLE_LIST\",\"M_dhis-web-import-export\",\"M_dhis-web-caseentry\",\"F_USERROLE_PUBLIC_ADD\",\"M_dhis-web-importexport\",\"M_InterpretationsTest\",\"F_ORGUNITGROUPSET_PUBLIC_ADD\",\"F_SQLVIEW_EXTERNAL\",\"F_REPORT_DELETE\",\"F_DASHBOARD_PUBLIC_ADD\",\"F_CONSTANT_DELETE\",\"M_dhis-web-maintenance-user\",\"F_PREDICTOR_DELETE\",\"M_dhis-web-data-visualizer\",\"F_DATASET_PRIVATE_ADD\",\"F_EVENTREPORT_PUBLIC_ADD\",\"F_PROGRAMSTAGE_SECTION_DELETE\",\"F_TRACKED_ENTITY_UPDATE\",\"F_CATEGORY_OPTION_GROUP_SET_PUBLIC_ADD\",\"F_TRACKED_ENTITY_INSTANCE_DASHBOARD\",\"F_METADATA_MANAGE\",\"F_ANALYTICSTABLEHOOK_DELETE\",\"F_UNCOMPLETE_EVENT\",\"M_dhis-web-sms-configuration\",\"M_dhis-web-interpretation\",\"F_LEGEND_DELETE\",\"M_Custom_Js_Css\",\"F_PROGRAM_INDICATOR_MANAGEMENT\",\"F_ANONYMOUS_DATA_ENTRY\",\"F_MAP_PUBLIC_ADD\",\"F_PROGRAM_VALIDATION\",\"F_SCHEDULING_ADMIN\",\"F_TRACKED_ENTITY_COMMENT_DELETE\",\"F_DATAELEMENT_MINMAX_DELETE\",\"F_MOBILE_SETTINGS\",\"F_PREDICTORGROUP_ADD\",\"F_REPORT_PRIVATE_ADD\",\"F_VALIDATIONRULEGROUP_PRIVATE_ADD\",\"F_PUSH_ANALYSIS_DELETE\",\"F_REPLICATE_USER\",\"F_DATAVALUE_ADD\",\"M_dhis-web-maintenance-organisationunit\",\"F_INSERT_CUSTOM_JS_CSS\",\"F_DATAELEMENTGROUPSET_DELETE\",\"F_SQLVIEW_DELETE\",\"F_ENROLLMENT_CASCADE_DELETE\",\"F_PROGRAMDATAELEMENT_DELETE\",\"F_TRACKED_ENTITY_INSTANCE_LIST\",\"F_INDICATORTYPE_ADD\",\"F_LEGEND_SET_DELETE\",\"F_VIEW_EVENT_ANALYTICS\",\"F_PROGRAMSTAGE_SECTION_MANAGEMENT\",\"F_IMPORT_EVENTS\",\"F_PROGRAM_INSTANCE_DELETE\",\"F_INDICATOR_PRIVATE_ADD\",\"F_TRACKED_ENTITY_INSTANCE_HISTORY\",\"F_FRED_CREATE\",\"F_EVENTCHART_PUBLIC_ADD\",\"F_PUSH_ANALYSIS_ADD\",\"M_dhis-web-event-visualizer\",\"F_USER_ADD\",\"F_EXTERNAL_MAP_LAYER_DELETE\",\"F_SYSTEM_SETTING\",\"F_ANALYTICSTABLEHOOK_ADD\",\"F_ATTRIBUTE_PRIVATE_ADD\",\"F_DOCUMENT_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_DELETE\",\"M_Easy_Visualization\",\"F_VISUALIZATION_PUBLIC_ADD\",\"F_DATAELEMENT_MINMAX_ADD\",\"M_dhis-web-data-quality\",\"M_dhis-web-pivot\",\"F_EVENTREPORT_EXTERNAL\",\"F_PROGRAM_RULE_UPDATE\",\"F_DATAELEMENT_PUBLIC_ADD\",\"M_dhis-web-validationrule\",\"F_CONSTANT_MANAGEMENT\",\"F_RUN_VALIDATION\",\"F_MANAGE_TICKETS\",\"F_GENERATE_BENEFICIARY_TABULAR_REPORT\",\"F_OPTIONGROUP_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_DELETE\",\"M_User_Administration\",\"M_dhis-web-settings\",\"F_IMPORT_DATA\",\"F_VIEW_DATABROWSER\",\"F_PERFORM_ANALYTICS_EXPLAIN\",\"F_MOBILE_DELETE_SMS\",\"F_OPTIONSET_MANAGEMENT\",\"F_SEND_MESSAGE\",\"F_PROGRAMSTAGE_ADD\",\"M_dhis-web-maps\",\"F_MINMAX_DATAELEMENT_DELETE\",\"F_ATTRIBUTE_DELETE\",\"F_OPTIONSET_DELETE\",\"F_PROGRAM_TRACKING_LIST\",\"M_dhis-web-dashboard\",\"M_dhis-web-data-administration\",\"F_ACCEPT_DATA_LOWER_LEVELS\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_DELETE\",\"F_OPTIONGROUPSET_PUBLIC_ADD\",\"M_dhis-web-capture\",\"F_PROGRAM_INDICATOR_GROUP_PUBLIC_ADD\",\"F_CATEGORY_DELETE\",\"F_COLOR_SET_DELETE\",\"M_dhis-web-app-management\",\"F_INDICATORTYPE_DELETE\",\"F_NAME_BASED_DATA_ENTRY\",\"F_INDICATORGROUP_PRIVATE_ADD\",\"F_FRED_DELETE\",\"F_VALIDATIONCRITERIA_DELETE\",\"F_PROGRAM_STAGE_INSTANCE_SEARCH\"],\"dataSets\":[\"Nyh6laLdBEJ\",\"j38YW1Am7he\",\"aLpVgfXiz0f\",\"YFTk3VdO9av\",\"Rl58JxmKJo2\",\"eZDhcZi6FLP\",\"N4fIX1HL3TQ\",\"EDzMBk0RRji\",\"TuL8IOPzpHh\",\"ce7DSxx5H2I\",\"EKWVBc5C0ms\",\"PLq9sJluXvc\",\"rsyjyJmYD4J\",\"ULowA8V3ucd\",\"QX4ZTUbOt3a\",\"pBOMPrpg1QX\",\"OsPTWNqq26W\",\"V8MHeZHIrcP\",\"YZhd4nu3mzY\",\"Y8gAn9DfAGU\",\"vc6nF5yZsPR\",\"Lpw6GcnTrmS\",\"lyLU2wR22tC\",\"VTdjfLXXmoi\",\"SF8FDSqw30D\",\"BfMAe6Itzgt\"],\"userCredentials\":{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"externalAuth\":false,\"twoFA\":false,\"passwordLastUpdated\":\"2014-12-18T20:56:05.264\",\"cogsDimensionConstraints\":[],\"catDimensionConstraints\":[],\"previousPasswords\":[],\"lastLogin\":\"2023-03-01T08:48:03.303\",\"selfRegistered\":false,\"invitation\":false,\"disabled\":false,\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}]}}", - "{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"surname\":\"Traore\",\"firstName\":\"John\",\"employer\":\"DHIS\",\"languages\":\"English\",\"gender\":\"gender_male\",\"jobTitle\":\"Super user\",\"created\":\"2013-04-18T17:15:08.407\",\"lastUpdated\":\"2023-03-01T08:48:13.299\",\"dataViewOrganisationUnits\":[],\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userGroupAccesses\":[],\"userAccesses\":[],\"userGroups\":[{\"id\":\"Kk12LkEWtXp\"},{\"id\":\"M1Qre0247G3\"},{\"id\":\"NTC8GjJ7p8P\"},{\"id\":\"B6JNeAQ6akX\"},{\"id\":\"wl5cDMuUhmF\"},{\"id\":\"QYrzIjSfI8z\"},{\"id\":\"lFHP5lLkzVr\"},{\"id\":\"jvrEwEJ2yZn\"},{\"id\":\"vAvEltyXGbD\"},{\"id\":\"w900PX10L7O\"},{\"id\":\"GogLpGmkL0g\"},{\"id\":\"vRoAruMnNpB\"},{\"id\":\"z1gNAf2zUxZ\"},{\"id\":\"gXpmQO6eEOo\"},{\"id\":\"tH0GcNZZ1vW\"},{\"id\":\"H9XnHoWRKCg\"}],\"translations\":[],\"teiSearchOrganisationUnits\":[],\"organisationUnits\":[{\"id\":\"ImspTQPwCqd\"}],\"externalAccess\":false,\"displayName\":\"John Traore\",\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"name\":\"John Traore\",\"email\":\"dummy@dhis2.org\",\"introduction\":\"I am the super user of DHIS 2\",\"birthday\":\"1971-04-08T00:00:00.000\",\"nationality\":\"Sierra Leone\",\"education\":\"Master of super using\",\"interests\":\"Football, swimming, singing, dancing\",\"whatsApp\":\"+123123123123\",\"facebookMessenger\":\"john.traore\",\"skype\":\"john.traore\",\"telegram\":\"john.traore\",\"twitter\":\"john.traore\",\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}],\"settings\":{\"keyMessageSmsNotification\":false,\"keyCurrentStyle\":\"light_blue/light_blue.css\",\"keyTrackerDashboardLayout\":\"{\\\"IpHINAT79UW\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"IpHINAT79UW\\\"},\\\"ur1Edk5Oe2n\\\":{\\\"widgets\\\":[{\\\"title\\\":\\\"enrollment\\\",\\\"view\\\":\\\"components/enrollment/enrollment.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"indicators\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"dataentry\\\",\\\"view\\\":\\\"components/dataentry/dataentry.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"report\\\",\\\"view\\\":\\\"components/report/tei-report.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"current_selections\\\",\\\"view\\\":\\\"components/selected/selected.html\\\",\\\"show\\\":false,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":0},{\\\"title\\\":\\\"feedback\\\",\\\"view\\\":\\\"components/rulebound/rulebound.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":1},{\\\"title\\\":\\\"profile\\\",\\\"view\\\":\\\"components/profile/profile.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":2},{\\\"title\\\":\\\"relationships\\\",\\\"view\\\":\\\"components/relationship/relationship.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":3},{\\\"title\\\":\\\"notes\\\",\\\"view\\\":\\\"components/notes/notes.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":4},{\\\"title\\\":\\\"messaging\\\",\\\"view\\\":\\\"components/messaging/messaging.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"smallerWidget\\\",\\\"order\\\":5},{\\\"title\\\":\\\"dataentryTabular\\\",\\\"view\\\":\\\"components/dataentry/dataentry-tabular-layout.html\\\",\\\"show\\\":true,\\\"expand\\\":true,\\\"parent\\\":\\\"biggerWidget\\\",\\\"order\\\":3}],\\\"program\\\":\\\"ur1Edk5Oe2n\\\"}}\",\"keyStyle\":\"light_blue/light_blue.css\",\"keyUiLocale\":\"en\",\"keyAnalysisDisplayProperty\":\"name\",\"keyMessageEmailNotification\":false},\"programs\":[\"uy2gU8kT1jF\",\"ur1Edk5Oe2n\",\"MoUd5BTQ3lY\",\"lxAQ7Zs9VYR\",\"IpHINAT79UW\",\"kla3mAPgvCH\",\"qDkgAbB5Jlk\",\"VBqh0ynB2wv\",\"bMcwwoVnbSR\",\"q04UBOqq3rp\",\"eBAyeGv0exc\",\"M3xtLkYBlKI\",\"fDd25txQckK\",\"WSGAb5XwJ3Y\"],\"authorities\":[\"F_PROGRAM_INDICATOR_PUBLIC_ADD\",\"F_SQLVIEW_EXECUTE\",\"F_USER_VIEW\",\"F_GENERATE_MIN_MAX_VALUES\",\"F_VALIDATIONRULE_PUBLIC_ADD\",\"F_CATEGORY_PRIVATE_ADD\",\"F_INDICATORGROUPSET_PUBLIC_ADD\",\"F_DATAVALUE_DELETE\",\"F_EXTERNAL_MAP_LAYER_PRIVATE_ADD\",\"F_RELATIONSHIPTYPE_DELETE\",\"F_CATEGORY_OPTION_PRIVATE_ADD\",\"F_SINGLE_EVENT_DATA_ENTRY\",\"F_CATEGORY_OPTION_GROUP_PUBLIC_ADD\",\"F_GIS_ADMIN\",\"M_dhis-web-event-capture\",\"F_SEND_EMAIL\",\"M_dhis-web-aggregate-data-entry\",\"F_ORGUNITGROUPSET_PRIVATE_ADD\",\"F_INDICATOR_DELETE\",\"M_dhis-web-event-reports\",\"F_VIEW_UNAPPROVED_DATA\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW\",\"F_TRACKED_ENTITY_INSTANCE_CHANGE_LOCATION\",\"F_OPTIONGROUPSET_DELETE\",\"F_USERGROUP_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_PRIVATE_ADD\",\"F_DOCUMENT_EXTERNAL\",\"F_PROGRAM_TRACKING_MANAGEMENT\",\"F_TRACKED_ENTITY_ATTRIBUTE_PUBLIC_ADD\",\"F_GENERATE_PROGRAM_SUMMARY_REPORT\",\"F_PROGRAM_INDICATOR_DELETE\",\"F_MOBILE_SENDSMS\",\"F_TRACKED_ENTITY_ADD\",\"F_TRACKED_ENTITY_MANAGEMENT\",\"F_RELATIONSHIP_DELETE\",\"F_VALIDATIONRULEGROUP_PUBLIC_ADD\",\"F_REPORT_EXTERNAL\",\"F_DOCUMENT_PRIVATE_ADD\",\"M_dhis-web-reports\",\"F_TRACKED_ENTITY_DELETE\",\"F_USERGROUP_DELETE\",\"F_PROGRAM_PRIVATE_ADD\",\"F_CATEGORY_COMBO_PRIVATE_ADD\",\"F_SCHEDULING_SEND_MESSAGE\",\"F_EXTERNAL_MAP_LAYER_PUBLIC_ADD\",\"F_PROGRAM_INDICATOR_GROUP_DELETE\",\"F_ORGANISATIONUNIT_MOVE\",\"M_dhis-web-usage-analytics\",\"F_COLOR_DELETE\",\"F_INDICATORGROUP_DELETE\",\"F_ORGANISATIONUNIT_DELETE\",\"F_PROGRAM_RULE_ADD\",\"M_dhis-web-light\",\"F_OPTIONGROUPSET_PRIVATE_ADD\",\"F_DATA_MART_ADMIN\",\"M_dhis-web-maintenance-mobile\",\"F_DATASET_PUBLIC_ADD\",\"F_CATEGORY_COMBO_DELETE\",\"F_SECTION_DELETE\",\"F_USER_DELETE\",\"F_INDICATORGROUPSET_PRIVATE_ADD\",\"F_PROGRAM_INDICATOR_PRIVATE_ADD\",\"F_METADATA_IMPORT\",\"M_dhis-web-maintenance-appmanager\",\"F_EXPORT_EVENTS\",\"M_dhis-web-maintenance-settings\",\"F_SQLVIEW_PUBLIC_ADD\",\"F_PERFORM_MAINTENANCE\",\"F_COLOR_SET_ADD\",\"F_PROGRAM_STAGE_INSTANCE_DELETE\",\"F_METADATA_EXPORT\",\"F_MINMAX_DATAELEMENT_ADD\",\"F_PROGRAMSTAGE_SECTION_ADD\",\"F_DATAELEMENTGROUP_PRIVATE_ADD\",\"F_VALIDATIONRULE_PRIVATE_ADD\",\"F_APPROVE_DATA\",\"M_dhis-web-mapping\",\"F_DATAELEMENT_PRIVATE_ADD\",\"F_VALIDATIONCRITERIA_ADD\",\"F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS\",\"F_IGNORE_TRACKER_REQUIRED_VALUE_VALIDATION\",\"F_PROGRAM_PUBLIC_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_SET_DELETE\",\"F_USER_ADD_WITHIN_MANAGED_GROUP\",\"M_Web_Portal\",\"F_ORGANISATIONUNIT_ADD\",\"M_dhis-web-user\",\"F_LEGEND_SET_PUBLIC_ADD\",\"F_CONSTANT_ADD\",\"F_PREDICTORGROUP_DELETE\",\"F_TRACKED_ENTITY_COMMENT_ADD\",\"F_TRACKED_ENTITY_INSTANCE_MANAGEMENT\",\"M_dhis-web-visualizer\",\"F_INDICATOR_PUBLIC_ADD\",\"F_INDICATORGROUP_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_PRIVATE_ADD\",\"M_dhis-web-maintenance\",\"M_dhis-web-approval\",\"F_PROGRAM_RULE_MANAGEMENT\",\"F_TEI_CASCADE_DELETE\",\"F_FRED_UPDATE\",\"F_VISUALIZATION_EXTERNAL\",\"M_dhis-web-cache-cleaner\",\"F_EDIT_EXPIRED\",\"F_ACCESS_TRACKED_ENTITY_ATTRIBUTES\",\"F_PROGRAM_DASHBOARD_CONFIG_ADMIN\",\"F_EVENT_VISUALIZATION_EXTERNAL\",\"F_ORGANISATIONUNITLEVEL_UPDATE\",\"F_CATEGORY_OPTION_PUBLIC_ADD\",\"M_dhis-web-datastore\",\"F_CATEGORY_OPTION_DELETE\",\"M_Data_Table\",\"M_dhis-web-menu-management\",\"F_REPORT_PUBLIC_ADD\",\"F_VALIDATIONRULEGROUP_DELETE\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_ADD\",\"F_RELATIONSHIP_MANAGEMENT\",\"F_COLOR_ADD\",\"F_OPTIONSET_PRIVATE_ADD\",\"F_PROGRAM_RULE_DELETE\",\"F_GENERATE_STATISTICAL_PROGRAM_REPORT\",\"F_ORGUNITGROUP_DELETE\",\"F_DATAELEMENTGROUPSET_PRIVATE_ADD\",\"M_dhis-web-tracker-capture\",\"F_LOCALE_ADD\",\"F_LEGEND_ADD\",\"F_CATEGORY_OPTION_GROUP_PRIVATE_ADD\",\"F_PROGRAM_INSTANCE_MANAGEMENT\",\"M_dhis-web-reporting\",\"F_CATEGORY_PUBLIC_ADD\",\"F_SECTION_ADD\",\"F_CATEGORY_COMBO_PUBLIC_ADD\",\"M_dhis-web-maintenance-datadictionary\",\"F_DATASET_DELETE\",\"F_INDICATORGROUPSET_DELETE\",\"F_USER_DELETE_WITHIN_MANAGED_GROUP\",\"F_ADD_TRACKED_ENTITY_FORM\",\"M_dhis-web-scheduler\",\"F_OPTIONGROUP_PUBLIC_ADD\",\"F_USERROLE_PRIVATE_ADD\",\"M_dhis-web-messaging\",\"M_dhis-web-maintenance-program\",\"F_EXTERNALFILERESOURCE_ADD\",\"F_MAP_EXTERNAL\",\"M_bna_widget\",\"F_DATAELEMENTGROUPSET_PUBLIC_ADD\",\"F_DATAELEMENTGROUP_DELETE\",\"F_USERGROUP_MANAGING_RELATIONSHIPS_ADD\",\"F_RELATIONSHIP_ADD\",\"F_ORGUNITGROUP_PRIVATE_ADD\",\"F_DATAELEMENTGROUP_PUBLIC_ADD\",\"F_USER_GROUPS_READ_ONLY_ADD_MEMBERS\",\"F_LOCALE_DELETE\",\"F_PREDICTOR_RUN\",\"F_DATAELEMENT_DELETE\",\"F_OPTIONGROUP_DELETE\",\"F_LEGEND_SET_PRIVATE_ADD\",\"F_PROGRAMSTAGE_DELETE\",\"F_ATTRIBUTE_PUBLIC_ADD\",\"F_TRACKED_ENTITY_FORM_DELETE\",\"F_USERROLE_DELETE\",\"F_DOCUMENT_DELETE\",\"F_ORGUNITGROUPSET_DELETE\",\"M_dhis-web-translations\",\"M_dhis-web-sms\",\"F_SCHEDULING_CASE_AGGREGATE_QUERY_BUILDER\",\"F_PROGRAM_DELETE\",\"F_VALIDATIONRULE_DELETE\",\"F_PROGRAMDATAELEMENT_ADD\",\"M_dhis-web-mobile\",\"F_ACTIVITY_PLAN\",\"F_RELATIONSHIPTYPE_PUBLIC_ADD\",\"F_PREDICTOR_ADD\",\"F_SQLVIEW_PRIVATE_ADD\",\"F_EXPORT_DATA\",\"F_OAUTH2_CLIENT_MANAGE\",\"F_EVENT_VISUALIZATION_PUBLIC_ADD\",\"F_ORGUNITGROUP_PUBLIC_ADD\",\"F_APPROVE_DATA_LOWER_LEVELS\",\"M_Social_Media_Video\",\"F_OPTIONSET_PUBLIC_ADD\",\"F_EVENTCHART_EXTERNAL\",\"M_dhis-web-dataentry\",\"F_PROGRAM_TRACKING_SEARCH\",\"M_dhis-web-maintenance-dataset\",\"F_USERROLE_LIST\",\"M_dhis-web-import-export\",\"M_dhis-web-caseentry\",\"F_USERROLE_PUBLIC_ADD\",\"M_dhis-web-importexport\",\"M_InterpretationsTest\",\"F_ORGUNITGROUPSET_PUBLIC_ADD\",\"F_SQLVIEW_EXTERNAL\",\"F_REPORT_DELETE\",\"F_DASHBOARD_PUBLIC_ADD\",\"F_CONSTANT_DELETE\",\"M_dhis-web-maintenance-user\",\"F_PREDICTOR_DELETE\",\"M_dhis-web-data-visualizer\",\"F_DATASET_PRIVATE_ADD\",\"F_EVENTREPORT_PUBLIC_ADD\",\"F_PROGRAMSTAGE_SECTION_DELETE\",\"F_TRACKED_ENTITY_UPDATE\",\"F_CATEGORY_OPTION_GROUP_SET_PUBLIC_ADD\",\"F_TRACKED_ENTITY_INSTANCE_DASHBOARD\",\"F_METADATA_MANAGE\",\"F_ANALYTICSTABLEHOOK_DELETE\",\"F_UNCOMPLETE_EVENT\",\"M_dhis-web-sms-configuration\",\"M_dhis-web-interpretation\",\"F_LEGEND_DELETE\",\"M_Custom_Js_Css\",\"F_PROGRAM_INDICATOR_MANAGEMENT\",\"F_ANONYMOUS_DATA_ENTRY\",\"F_MAP_PUBLIC_ADD\",\"F_PROGRAM_VALIDATION\",\"F_SCHEDULING_ADMIN\",\"F_TRACKED_ENTITY_COMMENT_DELETE\",\"F_DATAELEMENT_MINMAX_DELETE\",\"F_MOBILE_SETTINGS\",\"F_PREDICTORGROUP_ADD\",\"F_REPORT_PRIVATE_ADD\",\"F_VALIDATIONRULEGROUP_PRIVATE_ADD\",\"F_PUSH_ANALYSIS_DELETE\",\"F_REPLICATE_USER\",\"F_DATAVALUE_ADD\",\"M_dhis-web-maintenance-organisationunit\",\"F_INSERT_CUSTOM_JS_CSS\",\"F_DATAELEMENTGROUPSET_DELETE\",\"F_SQLVIEW_DELETE\",\"F_ENROLLMENT_CASCADE_DELETE\",\"F_PROGRAMDATAELEMENT_DELETE\",\"F_TRACKED_ENTITY_INSTANCE_LIST\",\"F_INDICATORTYPE_ADD\",\"F_LEGEND_SET_DELETE\",\"F_VIEW_EVENT_ANALYTICS\",\"F_PROGRAMSTAGE_SECTION_MANAGEMENT\",\"F_IMPORT_EVENTS\",\"F_PROGRAM_INSTANCE_DELETE\",\"F_INDICATOR_PRIVATE_ADD\",\"F_TRACKED_ENTITY_INSTANCE_HISTORY\",\"F_FRED_CREATE\",\"F_EVENTCHART_PUBLIC_ADD\",\"F_PUSH_ANALYSIS_ADD\",\"M_dhis-web-event-visualizer\",\"F_USER_ADD\",\"F_EXTERNAL_MAP_LAYER_DELETE\",\"F_SYSTEM_SETTING\",\"F_ANALYTICSTABLEHOOK_ADD\",\"F_ATTRIBUTE_PRIVATE_ADD\",\"F_DOCUMENT_PUBLIC_ADD\",\"F_TRACKED_ENTITY_ATTRIBUTE_DELETE\",\"M_Easy_Visualization\",\"F_VISUALIZATION_PUBLIC_ADD\",\"F_DATAELEMENT_MINMAX_ADD\",\"M_dhis-web-data-quality\",\"M_dhis-web-pivot\",\"F_EVENTREPORT_EXTERNAL\",\"F_PROGRAM_RULE_UPDATE\",\"F_DATAELEMENT_PUBLIC_ADD\",\"M_dhis-web-validationrule\",\"F_CONSTANT_MANAGEMENT\",\"F_RUN_VALIDATION\",\"F_MANAGE_TICKETS\",\"F_GENERATE_BENEFICIARY_TABULAR_REPORT\",\"F_OPTIONGROUP_PRIVATE_ADD\",\"F_CATEGORY_OPTION_GROUP_DELETE\",\"M_User_Administration\",\"M_dhis-web-settings\",\"F_IMPORT_DATA\",\"F_VIEW_DATABROWSER\",\"F_PERFORM_ANALYTICS_EXPLAIN\",\"F_MOBILE_DELETE_SMS\",\"F_OPTIONSET_MANAGEMENT\",\"F_SEND_MESSAGE\",\"F_PROGRAMSTAGE_ADD\",\"M_dhis-web-maps\",\"F_MINMAX_DATAELEMENT_DELETE\",\"F_ATTRIBUTE_DELETE\",\"F_OPTIONSET_DELETE\",\"F_PROGRAM_TRACKING_LIST\",\"M_dhis-web-dashboard\",\"M_dhis-web-data-administration\",\"F_ACCEPT_DATA_LOWER_LEVELS\",\"F_PROGRAM_TRACKED_ENTITY_ATTRIBUTE_GROUP_DELETE\",\"F_OPTIONGROUPSET_PUBLIC_ADD\",\"M_dhis-web-capture\",\"F_PROGRAM_INDICATOR_GROUP_PUBLIC_ADD\",\"F_CATEGORY_DELETE\",\"F_COLOR_SET_DELETE\",\"M_dhis-web-app-management\",\"F_INDICATORTYPE_DELETE\",\"F_NAME_BASED_DATA_ENTRY\",\"F_INDICATORGROUP_PRIVATE_ADD\",\"F_FRED_DELETE\",\"F_VALIDATIONCRITERIA_DELETE\",\"F_PROGRAM_STAGE_INSTANCE_SEARCH\"],\"dataSets\":[\"Nyh6laLdBEJ\",\"j38YW1Am7he\",\"aLpVgfXiz0f\",\"YFTk3VdO9av\",\"Rl58JxmKJo2\",\"eZDhcZi6FLP\",\"N4fIX1HL3TQ\",\"EDzMBk0RRji\",\"TuL8IOPzpHh\",\"ce7DSxx5H2I\",\"EKWVBc5C0ms\",\"PLq9sJluXvc\",\"rsyjyJmYD4J\",\"ULowA8V3ucd\",\"QX4ZTUbOt3a\",\"pBOMPrpg1QX\",\"OsPTWNqq26W\",\"V8MHeZHIrcP\",\"YZhd4nu3mzY\",\"Y8gAn9DfAGU\",\"vc6nF5yZsPR\",\"Lpw6GcnTrmS\",\"lyLU2wR22tC\",\"VTdjfLXXmoi\",\"SF8FDSqw30D\",\"BfMAe6Itzgt\"],\"userCredentials\":{\"id\":\"xE7jOejl9FI\",\"username\":\"admin\",\"externalAuth\":false,\"twoFA\":false,\"passwordLastUpdated\":\"2014-12-18T20:56:05.264\",\"cogsDimensionConstraints\":[],\"catDimensionConstraints\":[],\"previousPasswords\":[],\"lastLogin\":\"2023-03-01T08:48:13.298\",\"selfRegistered\":false,\"invitation\":false,\"disabled\":false,\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"userRoles\":[{\"id\":\"UYXOT4A7JMI\"},{\"id\":\"Ufph3mGRmMo\"},{\"id\":\"Euq3XfEIEbx\"},{\"id\":\"aNk5AyC7ydy\"},{\"id\":\"cUlTcejWree\"},{\"id\":\"TMK9CMZ2V98\"},{\"id\":\"Ql6Gew7eaX6\"},{\"id\":\"Pqoy4DLOdMK\"},{\"id\":\"DRdaVRtwmG5\"},{\"id\":\"jRWSNIHdKww\"},{\"id\":\"txB7vu1w2Pr\"},{\"id\":\"XS0dNzuZmfH\"},{\"id\":\"xJZBzAHI88H\"}]}}" - ], - "responseSize": 14548, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - }, - "responseLookup": [ - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 4, 5, 5, 5, 5, 6, 6, - 7, 7, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 11, 12, 12, 13, - 13, 14, 15, 15, 16, 16, 17, 18, 19, 19, 19, 19, 19, 20, 21, 22 - ] - }, - { - "path": "/api/40/staticContent/logo_banner", - "featureName": null, - "static": true, - "count": 63, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 404, - "responseBody": "{\"httpStatus\":\"Not Found\",\"httpStatusCode\":404,\"status\":\"ERROR\",\"message\":\"No custom file found.\"}", - "responseSize": 98, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - } -] diff --git a/cypress/fixtures/network/40/summary.json b/cypress/fixtures/network/40/summary.json deleted file mode 100644 index 2e5446889..000000000 --- a/cypress/fixtures/network/40/summary.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "count": 1037, - "totalResponseSize": 1643807, - "duplicates": 883, - "nonDeterministicResponses": 84, - "apiVersion": 40, - "fixtureFiles": [ - "static_resources.json", - "users_should_be_able_to_navigate_back_to_the_job_list.json", - "users_should_be_able_to_create_jobs_that_take_parameters.json", - "users_should_be_able_to_create_jobs_without_parameters.json", - "users_should_be_able_to_insert_cron_presets.json", - "users_should_be_able_to_navigate_to_the_documentation.json", - "users_should_be_able_to_delete_a_job.json", - "users_should_be_able_to_view_jobs.json", - "users_should_be_able_to_edit_jobs_that_take_parameters.json", - "users_should_be_able_to_edit_jobs_without_parameters.json", - "jobs_can_be_filtered.json", - "system_job_visibility_can_be_toggled.json", - "user_jobs_can_be_enabled_and_disabled.json", - "all_user_defined_jobs_should_be_listed.json", - "users_should_be_able_to_navigate_to_the_new_job_route.json", - "system_job_actions.json", - "user_job_actions.json", - "users_that_are_not_authorized_should_be_denied_access.json", - "users_should_be_able_to_view_system_jobs.json" - ] -} diff --git a/cypress/fixtures/network/40/system_job_actions.json b/cypress/fixtures/network/40/system_job_actions.json deleted file mode 100644 index 21f682936..000000000 --- a/cypress/fixtures/network/40/system_job_actions.json +++ /dev/null @@ -1,271 +0,0 @@ -[ - { - "path": "/api/40/systemSettings/helpPageLink", - "featureName": "System job actions", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"helpPageLink\":\"https://dhis2.github.io/dhis2-docs/master/en/user/html/dhis2_user_manual_en.html\"}", - "responseSize": 99, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/analytics/tableTypes", - "featureName": "System job actions", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"]", - "responseSize": 122, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/validationRuleGroups?paging=false", - "featureName": "System job actions", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"validationRuleGroups\":[{\"displayName\":\"ANC\",\"id\":\"UP1lctvalPn\"},{\"displayName\":\"Commodities\",\"id\":\"xcpl667ccfF\"},{\"displayName\":\"Critical event\",\"id\":\"xWtt9c443Lt\"},{\"displayName\":\"District stock\",\"id\":\"mEtdbIDDhix\"},{\"displayName\":\"Epidemic disease outbreak\",\"id\":\"y2yQIm79VTW\"},{\"displayName\":\"Facility Stock\",\"id\":\"SqyI8HKqI4g\"},{\"displayName\":\"Immunisation\",\"id\":\"UiOSY1iIdub\"},{\"displayName\":\"Infectious disease outbreak\",\"id\":\"WUZXEFdn1PX\"},{\"displayName\":\"Malaria\",\"id\":\"zlaSof6qLqF\"},{\"displayName\":\"Population\",\"id\":\"D3bItmtBpsW\"},{\"displayName\":\"TB\",\"id\":\"IMF6p1MqoHl\"},{\"displayName\":\"Testing\",\"id\":\"nMDkAJXsmlR\"}]}", - "responseSize": 628, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/pushAnalysis?paging=false", - "featureName": "System job actions", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"pushAnalysis\":[{\"displayName\":\"Immunization Key Indicators Monthly Report\",\"id\":\"jtcMAKhWwnc\"}]}", - "responseSize": 98, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictors?paging=false", - "featureName": "System job actions", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictors\":[{\"displayName\":\"Malaria Outbreak Threshold\",\"id\":\"tEK1OEqS4O1\"}]}", - "responseSize": 80, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations/jobTypes?fields=*&paging=false", - "featureName": "System job actions", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"jobTypes\":[{\"name\":\"Data integrity\",\"jobType\":\"DATA_INTEGRITY\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"checks\",\"fieldName\":\"Checks\",\"persisted\":false,\"collectionName\":\"checks\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/dataIntegrity\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.parameters.DataIntegrityJobParameters$DataIntegrityReportType\",\"name\":\"type\",\"fieldName\":\"Type\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"REPORT\",\"SUMMARY\",\"DETAILS\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Resource table\",\"jobType\":\"RESOURCE_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Analytics table\",\"jobType\":\"ANALYTICS_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"skipPrograms\",\"fieldName\":\"Skip programs\",\"persisted\":false,\"collectionName\":\"skipPrograms\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/programs\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipResourceTables\",\"fieldName\":\"Skip resource tables\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Continuous analytics table\",\"jobType\":\"CONTINUOUS_ANALYTICS_TABLE\",\"schedulingType\":\"FIXED_DELAY\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"fullUpdateHourOfDay\",\"fieldName\":\"Full update hour of day\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Data sync\",\"jobType\":\"DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker programs data sync\",\"jobType\":\"TRACKER_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Event programs data sync\",\"jobType\":\"EVENT_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Meta data sync\",\"jobType\":\"META_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"trackerProgramPageSize\",\"fieldName\":\"Tracker program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"eventProgramPageSize\",\"fieldName\":\"Event program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"dataValuesPageSize\",\"fieldName\":\"Data values page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Aggregate data exchange\",\"jobType\":\"AGGREGATE_DATA_EXCHANGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"dataExchangeIds\",\"fieldName\":\"Data exchange ids\",\"persisted\":false,\"collectionName\":\"dataExchangeIds\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/aggregateDataExchanges\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Send scheduled message\",\"jobType\":\"SEND_SCHEDULED_MESSAGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Program notifications\",\"jobType\":\"PROGRAM_NOTIFICATIONS\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Monitoring\",\"jobType\":\"MONITORING\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"validationRuleGroups\",\"fieldName\":\"Validation rule groups\",\"persisted\":false,\"collectionName\":\"validationRuleGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/validationRuleGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"sendNotifications\",\"fieldName\":\"Send notifications\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"persistResults\",\"fieldName\":\"Persist results\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Push analysis\",\"jobType\":\"PUSH_ANALYSIS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"pushAnalysis\",\"fieldName\":\"Push analysis\",\"persisted\":false,\"collectionName\":\"pushAnalysis\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/pushAnalysis\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker search optimization\",\"jobType\":\"TRACKER_SEARCH_OPTIMIZATION\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"attributes\",\"fieldName\":\"Attributes\",\"persisted\":false,\"collectionName\":\"attributes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/trackedEntityAttributes/indexable\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipIndexDeletion\",\"fieldName\":\"Skip index deletion\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Predictor\",\"jobType\":\"PREDICTOR\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictors\",\"fieldName\":\"Predictors\",\"persisted\":false,\"collectionName\":\"predictors\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictors\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictorGroups\",\"fieldName\":\"Predictor groups\",\"persisted\":false,\"collectionName\":\"predictorGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictorGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Disable inactive users\",\"jobType\":\"DISABLE_INACTIVE_USERS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"inactiveMonths\",\"fieldName\":\"Inactive months\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"reminderDaysBefore\",\"fieldName\":\"Reminder days before\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Test\",\"jobType\":\"TEST\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Long\",\"name\":\"waitMillis\",\"fieldName\":\"Wait millis\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"stages\",\"fieldName\":\"Stages\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtStage\",\"fieldName\":\"Fail at stage\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"items\",\"fieldName\":\"Items\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtItem\",\"fieldName\":\"Fail at item\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Long\",\"name\":\"itemDuration\",\"fieldName\":\"Item duration\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.String\",\"name\":\"failWithMessage\",\"fieldName\":\"Fail with message\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"failWithException\",\"fieldName\":\"Fail with exception\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.JobProgress$FailurePolicy\",\"name\":\"failWithPolicy\",\"fieldName\":\"Fail with policy\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"PARENT\",\"FAIL\",\"SKIP_STAGE\",\"SKIP_ITEM\",\"SKIP_ITEM_OUTLIER\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"runStagesParallel\",\"fieldName\":\"Run stages parallel\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]}]}", - "responseSize": 24994, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictorGroups?paging=false", - "featureName": "System job actions", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictorGroups\":[]}", - "responseSize": 22, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/dataIntegrity", - "featureName": "System job actions", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[{\"name\":\"orgunits_invalid_geometry\",\"displayName\":\"Organisation units with invalid geometry.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with invalid geometry.\",\"introduction\":\"DHIS2 uses the PostGIS database extension to manage the geographical information associated\\nwith organisation units. There are various reasons why geometries may be considered to be\\ninvalid including self-inclusions, self-intersections, and sliver polygons. Please see the\\nPostGIS documentation for a more in-depth discussion on this topic.\\n\\nInvalid geometry is not always a problem and may be able to be ignored, however, it has been observed in certain systems\\nthat this can lead to problems in analytics. If you are experiencing issues when generating analytics\\ntables, and see errors related to invalid geometries, you will need to either remove the invalid geometry,\\nor fix it.\",\"recommendation\":\"Update the geometry of the affected organisation units to a valid geometry. It may be possible to use the PostGIS function `ST_MakeValid` to automatically fix the problem. However, in other cases the geometry may need to be edited in a GIS tool, and then updated again in DHIS2.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OIG\"},{\"name\":\"data_elements_without_groups\",\"displayName\":\"Data elements lacking groups\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data element groups\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWG\"},{\"name\":\"orgunit_group_sets_excess_groups\",\"displayName\":\"Organisation units which belong to multiple groups in a group set.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which belong to multiple groups in a group set.\",\"introduction\":\"Organisation units should belong to exactly one group within each organisation unit group set of which they are a member. If the organisation unit belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the organisation units in the details list to exactly one group within each group set membership.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OGSEG\"},{\"name\":\"validation_rules_missing_value_strategy_null\",\"displayName\":\"All validation rule expressions should have a missing value strategy.\",\"section\":\"Validation rules\",\"severity\":\"SEVERE\",\"description\":\"All validation rule expressions should have a missing value strategy.\",\"introduction\":\"Validation rules are composed of a left and right side expression. In certain systems the missing value strategy may not be defined. This may lead to an exception during validation rule analysis. The affected validation rules should be corrected to with an appropriate missing value strategy.\",\"recommendation\":\"Using the results of the the details SQL view, identify the affected validation rules and which side of the rule the missing value strategy has not been specified. Using the maintenance app, make the appropriate corrections and save the rule.\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRMVSN\"},{\"name\":\"category_combos_being_invalid\",\"displayName\":\"Invalid Category-combos\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Lists all category-combos that are invalid\",\"recommendation\":\"Make sure the category combo is assigned to at least one category and that all categories have category options \",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCBI\"},{\"name\":\"data_elements_in_data_set_not_in_form\",\"displayName\":\"Data sets with data elements not in data entry form\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that have data elements which are neither a member of the set's data entry form nor a member of the sets section\",\"recommendation\":\"Either remove the data elements in question or make them a member of the set's form or section\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DEIDSNIF\"},{\"name\":\"categories_no_options\",\"displayName\":\"Categories with no category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with no category options\",\"introduction\":\"Categories should always have at least one category option.\",\"recommendation\":\"Any categories without category options should either be removed from the system if they are not in use. Otherwise, appropriate category options should be added to the category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CNO\"},{\"name\":\"data_elements_aggregate_no_analysis\",\"displayName\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"introduction\":\"All aggregate data elements that are captured in DHIS2 should be used to produce some type of analysis output (charts, maps, tables). This can be by using them directly in an output, or by having them contribute to an indicator calculation that is used an output.\",\"recommendation\":\"Data elements that are not routinely being reviewed in analysis, either directly or indirectly through indicators, should be reviewed to determine if they still need to be collected. If these are meant to be used in routine review, then associated outputs should be created using them. If these data elements are not going to be used for any type of information review, consideration should be made to either archive them or delete them.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANA\"},{\"name\":\"indicators_duplicated_terms\",\"displayName\":\"Indicators with the same terms.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same terms.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check attempts to identify indicators with the same formulas, regardless of the order of their their terms. Suppose you have an indicator which calculates total ANC attendance: ANC Total = ANC1 + ANC2 + ANC3 Suppose then another indicator exists in the system, which has been defined as: ANC Totals = ANC3 + ANC2 + ANC1 These two indicators are equivalent, and will produce the same result, and are thus considered to be duplicated.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Considered deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IDT\"},{\"name\":\"program_rules_no_action\",\"displayName\":\"Program rules with no action.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules with no action.\",\"introduction\":\"All program rules should have an action.\",\"recommendation\":\"Using the DHIS2 user interface, assign an action to each of the program rules which is missing one. Alternatively, if the program rule is not in use, then consider removing it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNA\"},{\"name\":\"orgunits_compulsory_group_count\",\"displayName\":\"Organisation units that are not in all compulsory orgunit group sets\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Orgunits that are not in all compulsory orgunit group sets\",\"introduction\":\"If any organisation unit groups have been marked as compulsory, each and every organisation unit should belong to exactly one group within each compulsory organisation unit group set. Assume we have created a group set called \\\"Ownership\\\" with two groups \\\"Public\\\" and \\\"Private\\\". Each and every organisation unit contained in the hierarchy must belong to either Public or Private (but not both). When organisation unit are not part of a group set, results in the analytics apps will not be correct if the organisation unit group set is used for aggregation.\",\"recommendation\":\"For each of the organisation units identified in the details query, you should assign the appropriate organisation unit group within the group set. Alternatively, if the group set should not be compulsory, you should change this attribute.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OCGC\"},{\"name\":\"orgunits_no_coordinates\",\"displayName\":\"Organisation units with no coordinates.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with no coordinates.\",\"introduction\":\"Ideally, all organisation units contained in the DHIS2 hierarchy should have a valid\\nset of coordinates. Usually for all organisation units above the facility level,\\nthese coordinates should be a polygon which provides the boundary of the organisation\\nunit. For facilities, these are usually represented as point coordinates.\\n\\nThere can obviously be exceptions to this rule. Mobile health facilities may not have\\na fixed location. Community health workers or wards below the facility level\\nmay also not have a defined or definable coordinate.\\n\\nThis check is intended to allow you to review all organisation units which do\\nnot have any coordinates and make a determination as to whether they should be updated.\",\"recommendation\":\"Where appropriate, update the geometry of each organisation unit with a valid geometry.\\nYou may need to contact the appropriate local government office to obtain a copy\\nof district boundaries, commonly referred to as \\\"shape files\\\". Another possibility\\nis to use freely available boundary files from GADM (https://gadm.org)\\n\\nIf facilities are missing coordinates, it may be possible to obtain these from\\nthe facility staff using their smart phone to get the coordinates. Images\\nfrom Google Maps can also often be used to estimate the position of a facility,\\nassuming that you have good enough resolution and local knowledge of where\\nit is located.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONC\"},{\"name\":\"data_sets_not_assigned_to_org_units\",\"displayName\":\"Data sets not assigned to organisation units\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that are not assigned to any organisation units\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DSNATOU\"},{\"name\":\"dashboards_no_items\",\"displayName\":\"Dashboards with no items.\",\"section\":\"Dashboards\",\"severity\":\"INFO\",\"description\":\"Dashboards with no items.\",\"introduction\":\"All dashboards should have content on them. Dashboards without any content do not serve any purpose, and can make it more difficult to find relevant dashboards with content.\",\"recommendation\":\"Dashboards without content that have not been modified in the last 14 days should be considered for deletion.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNI\"},{\"name\":\"orgunits_same_name_and_parent\",\"displayName\":\"Organisation units should not have the same name and parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have the same name and parent.\",\"introduction\":\"Organisation units may have exactly the same name. This may become confusing to users, particularly if the organisation unit has the same name and same parent. This can easily lead to data entry or analysis mistakes as users have no way to distinguish between the two organisation units.\",\"recommendation\":\"Rename identically named organisation units which share the same parent using the maintenance app.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OSNAP\"},{\"name\":\"indicators_not_grouped\",\"displayName\":\"Indicators not in any groups.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not in any groups.\",\"introduction\":\"All indicators should be in an indicator group. This allows users to find the indicators more easily in analysis apps and also contributes to having more complete indicators group sets. Maintenance operations can also be made more efficient by applying bulk settings (ex. sharing, filtering) to all indicators within an indicator group.\",\"recommendation\":\"Indicators that are not in a indicator group should be added to a relevant indicator group. If the indicators are not needed, they should be deleted.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"ING\"},{\"name\":\"category_option_group_sets_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option group sets should be composed of at least two category option groups.\",\"recommendation\":\"Considering removing groups with zero or one category option groups, or alternatively, add additional category option groups to the group set to make it more useful.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSS\"},{\"name\":\"org_units_without_groups\",\"displayName\":\"Organisation units lacking groups\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are not connected to at least one group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWG\"},{\"name\":\"data_elements_excess_groupset_membership\",\"displayName\":\"Data elements which belong to multiple groups in a group set.\",\"section\":\"data_elements\",\"severity\":\"SEVERE\",\"description\":\"Data elements which belong to multiple groups in a group set.\",\"introduction\":\"Data elements should belong to exactly one group within each data element group set of which they are a member. If the data element belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the data elements in the details list to exactly one data element group within each group set.\",\"issuesIdType\":\"data_elements_aggregate\",\"isSlow\":false,\"code\":\"DEEGM\"},{\"name\":\"data_element_groups_scarce\",\"displayName\":\"Data element groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Data element groups should have at least two members.\",\"introduction\":\"All data element groups should be composed of at least two data elements.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"dataElementGroups\",\"isSlow\":false,\"code\":\"DEGS\"},{\"name\":\"orgunits_not_contained_by_parent\",\"displayName\":\"Organisation units with point coordinates should be contained by their parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with point coordinates should be contained by their parent.\",\"introduction\":\"Facilities are often represented as points in the DHIS2 hierarchy. Their parent organisation units geometry should contain all facilities which have been associated with them.\",\"recommendation\":\"Often boundary files are simplified when they are uploaded into DHIS2. This process may result in\\nfacilities which are located close to the border of a given district to fall outside of the district\\nwhen the boundary is simplified. This is considered to be more of a cosmetic problem for most DHIS2\\ninstallations, but could become an issue if any geospatial analysis is attempted using the\\nboundaries and point coordinates.\\n\\nIn cases where the facility falls outside of its parent's boundary\\nyou should confirm that the coordinates are correct. If the location is close to the boundary, you\\nmay want to reconsider how the boundary files have been simplified. Otherwise, if the location of\\nthe facility is completely incorrect, it should be rectified.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONCBP\"},{\"name\":\"program_rules_message_no_template\",\"displayName\":\"Program rules actions which should send or schedule a message without a message template.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules actions which should send or schedule a message without a message template.\",\"introduction\":\"Program rule actions of type \\\"Send message\\\" or \\\"Schedule message\\\" should have an associated message template.\",\"recommendation\":\"Using the DHIS2 user interface, assign a message template to each of the program rule actions which send or schedule messages but which does not have an association with a message template.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRMNT\"},{\"name\":\"indicators_with_invalid_denominator\",\"displayName\":\"Indicators with invalid denominator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"List all indicators where the denominator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWID\"},{\"name\":\"indicator_types_duplicated\",\"displayName\":\"Indicator types with the same factor.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicator types with the same factor.\",\"introduction\":\"Indicators can be assigned a factor which is multiplied by the indicator's value. For example, if you create a percentage based indicator, you can assign the indicator a factor of 100, which would be multiplied by the actual value of the indicator calculated by DHIS2. In general, having multiple indicator types with the same factor is not recommended. It is duplicative, and may lead to confusion.\",\"recommendation\":\"Duplicated indicator types should consider to be removed from the system. Consider choosing one of the duplicated indicator types as the one to keep, and then update all indicators which share the same factor to this indicator type. The duplicated indicator types can then be removed from the system.\",\"issuesIdType\":\"indicatorTypes\",\"isSlow\":false,\"code\":\"ITD\"},{\"name\":\"options_sets_empty\",\"displayName\":\"Empty option sets\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Empty option sets\",\"introduction\":\"All option sets should generally include at least two items. Empty option sets serve no purpose.\",\"recommendation\":\"Options should either be added to the option set, or the option set should be deleted.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSE\"},{\"name\":\"category_options_no_categories\",\"displayName\":\"Category options with no categories.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options with no categories.\",\"introduction\":\"All category options should belong to at least one category.\",\"recommendation\":\"Category options which are not part of any category should be removed or alternatively should be added to an appropriate category.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CONC\"},{\"name\":\"orgunits_orphaned\",\"displayName\":\"Orphaned organisation units.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"Orphaned organisation units.\",\"introduction\":\"Orphaned organisation units are those which have neither parents nor any children. This means that they have no relationship to the main organisation unit hierarchy. These may be created by faulty metadata imports or direct manipulation of the database.\",\"recommendation\":\"The orphaned organisation units should be assigned a parent or removed from the system. It is recommended to use the DHIS2 API for this task if possible. If this is not possible, then they may need to be removed through direct SQL on the DHIS2 database.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OO\"},{\"name\":\"indicators_with_identical_formulas\",\"displayName\":\"Indicators with identical formulas\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that have the identical formulas with at least one other indicator\",\"recommendation\":\"Check if the same indicator should be used everywhere and remove duplicates\",\"isSlow\":false,\"code\":\"IWIF\"},{\"name\":\"program_indicators_with_invalid_filters\",\"displayName\":\"Program indicators with invalid filter\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators with invalid filter expression\",\"recommendation\":\"Check that the expression evaluates to true/false\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIF\"},{\"name\":\"program_rules_without_condition\",\"displayName\":\"Program rules lacking a condition\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that have no condition yet\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWC\"},{\"name\":\"categories_one_default_category\",\"displayName\":\"Only one default category should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category should exist\",\"introduction\":\"There should only exist one category with name and code \\\"default\\\".\",\"recommendation\":\"Only the category with UID \\\"GLevLNI9wkl\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category or move all references to category \\\"GLevLNI9wkl\\\" and then remove the unused conflicting category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CODC\"},{\"name\":\"org_units_with_cyclic_references\",\"displayName\":\"Organisation units with cyclic references\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that have a conflicting parent hierarchy definition so that two organisation units become parent of each other or in other words they form a circular reference\",\"recommendation\":\"One of the organisation units must be setup wrongly and needs to be corrected so that a non-circular tree connects the two\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWCR\"},{\"name\":\"program_rule_variables_without_data_element\",\"displayName\":\"Program rule variables lacking a data element\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring a data element source but that is not yet linked to a data element\",\"recommendation\":\"Assign a data element to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWDE\"},{\"name\":\"org_units_violating_exclusive_group_sets\",\"displayName\":\"Organisation units with conflicting exclusive group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are members of multiple exclusive organisation unit groups\",\"recommendation\":\"Remove the organisation unit from all but one exclusive organisation unit group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUVEGS\"},{\"name\":\"program_rule_actions_without_data_object\",\"displayName\":\"Program rules with actions lacking a data object\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires either a data element or an attribute but is not connected either\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWDO\"},{\"name\":\"orgunits_openingdate_gt_closeddate\",\"displayName\":\"Organisation units which have an opening date later than the closed date.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which have an opening date later than the closed date.\",\"introduction\":\"If a closing date has been defined for an organisation unit, it should always be after the opening date (if one has been defined).\",\"recommendation\":\"Alter either the opening or closing date of all affected organisation units so that the closing date is after the opening date.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OOGC\"},{\"name\":\"categories_one_default_category_option_combo\",\"displayName\":\"Only one default category option combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option combo should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option combo with UID \\\"HllvX50cXC0\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option combo or move all references to category option combo \\\"HllvX50cXC0\\\" and then remove the unused conflicting category option combo.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CODCOC\"},{\"name\":\"category_option_group_sets_incomplete\",\"displayName\":\"Category option group sets which do not contain all category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option group sets which which do not contain all category options.\",\"introduction\":\"Category option group sets are composed of multiple category option groups, which are in turn composed of various category options. Category option group sets are often used to group related category options together for analytical purposes. Categories are also composed of category options. In general, but not always, category option group sets should contain all category options of related categories. Suppose we have the following two age categories. \\nAge coarse: <15, 15+ Age fine: <1, 1-10, 10-14,15-19,20-24,25-29,30-34,35-39,40-44,45+\\nIn many cases, related data elements may be disaggregated differently. This may be to differences in the way in which the data is collected, or as is often the case, the disaggregation has changed over time. If we wish to analyze data for two different data elements (one of which uses Age coarse and the other Age fine), we can create a category option group set consisting of two category option groups which should consist of the following category options from above. \\n<15: <15, <1, 1-10, 10-14 15+: 15+, 15-19,20-24,25-29,30-34,35-39,40-44,45+\\nSuppose that we happen to omit the category option \\\"<1\\\" from the \\\"<15\\\" category option group. This would result in potential aggregation errors in when using this category option group set in any analytical objects. The details of this metadata check would return the UID and name of the category option group set. The category and category option would also be provided. Using the previous example, we would see \\\"Age fine:{<1}\\\" in the metadata check details section, to indicate that the <1 category option which is part of the \\\"Age fine\\\" category, is missing from the category option group set.\\nThere may exist specific analytical reasons why specific category options are omitted from a category option group set. However,these should usually be special cases. This metadata check will identify cases where category option group sets appear to be incomplete, however you should carefully review any groups which appear in the details. \\nThis check may also produce a number of issues which may at first glance appear to be false positives. In some cases, category options may be added to a category by mistake. When category option group sets are created, this extraneous option may be omitted and thus appear as missing from the group set. \\nAnother observed situation is where an option like \\\"Unknown\\\" is used across unrelated categories. Suppose you have two categories \\\"Age (<15, 15+, Unknown)\\\" and \\\"Sex (Male,Female,Unknown)\\\". Similar to above, we create category option group sets like: \\n<15: <15 15+: 15+ Unknown: Unknown\\nThis metadata check will report that \\\"Male\\\" and \\\"Female\\\" are missing from the group set. This is because the same \\\"Unknown\\\" option is shared between two different, unrelated categories. It is recommended that if this situation occurs, that you create two separate \\\"Unknown\\\" category options like \\\"Unknown sex\\\" and \\\"Unknown age\\\".\",\"recommendation\":\"Using the maintenance app, assign the missing category options to an appropriate category option group within the affected category option group set.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSI\"},{\"name\":\"maps_not_viewed_one_year\",\"displayName\":\"Maps which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Maps which have not been viewed in the past 12 months\",\"introduction\":\"Maps should be regularly viewed in the system. In many cases, users may create maps for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system and being difficult to find in the Maps app.\",\"recommendation\":\"Unused maps can be removed directly using the Maps app by a user with sufficient authority. If maps are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"maps\",\"isSlow\":false,\"code\":\"MNVOY\"},{\"name\":\"indicators_exact_duplicates\",\"displayName\":\"Indicators with the same formula.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same formula.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check shows indicators which have the exact same formulas. Spaces which are present are removed prior to comparison.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Consider deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IED\"},{\"name\":\"indicators_violating_exclusive_group_sets\",\"displayName\":\"Indicators with conflicting exclusive group sets\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that are members of multiple exclusive indicator groups\",\"recommendation\":\"Remove the indicator from all but one exclusive indicator group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IVEGS\"},{\"name\":\"category_options_excess_groupset_membership\",\"displayName\":\"Category options which belong to multiple groups in a category option group set.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category options which belong to multiple groups in a category option group set.\",\"introduction\":\"Category options should belong to exactly one category option group which are part of a category option group set. If the category option belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the category option in the details list to exactly one category option group within each group set.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"COEGM\"},{\"name\":\"periods_duplicates\",\"displayName\":\"Duplicate Periods\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Lists all periods duplicates which have identical type and start date\",\"recommendation\":\"Make sure all database references are moved to one of the duplicates before deleting the unused duplicates\",\"isSlow\":false,\"code\":\"PD\"},{\"name\":\"program_rules_without_action\",\"displayName\":\"Program rules lacking an action\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that are not connected to any program rule action\",\"recommendation\":\"Connect the rule to an action or consider removing the rule\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWA\"},{\"name\":\"orgunits_multiple_roots\",\"displayName\":\"The organisation unit hierarchy should have a single root.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"The organisation unit hierarchy should have a single root.\",\"introduction\":\"Every DHIS2 system should have a single root organisation unit. This means a single organisation unit from which all other branches of the hierarchy are descendants.\",\"recommendation\":\"Once you have decided which organisation unit should be the real root of the organisation unit hierarchy, you should update the parent organisation unit. This can be done by using the DHIS2 API or my updating the value directly in the `organisationunit` table.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMR\"},{\"name\":\"validation_rules_with_invalid_left_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a left side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWILSE\"},{\"name\":\"program_rule_actions_without_stage_id\",\"displayName\":\"Program rules with actions lacking a program stage\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a program stage but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWSI\"},{\"name\":\"indicator_groups_scarce\",\"displayName\":\"Indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups should have at least two members.\",\"introduction\":\"All indicator groups should be composed of at least two indicators.\",\"recommendation\":\"Considering removing groups with zero or one groups, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"indicatorGroups\",\"isSlow\":false,\"code\":\"IGS\"},{\"name\":\"option_sets_wrong_sort_order\",\"displayName\":\"Option sets with possibly wrong sort order.\",\"section\":\"Option sets\",\"severity\":\"SEVERE\",\"description\":\"Option sets with possibly wrong sort order.\",\"introduction\":\"Option sets contain options which should be ordered sequentially. The sort_order property should always start with 1 and have a sequential sequence. If there are three options in the option set, then the sort order should be 1,2,3. \\nIn certain circumstances, options may be deleted from an option set, and the sort order may become corrupted. This may lead to a situation where it becomes impossible to update the option set from the maintenance app, and may lead to problems when attempting to using the option set in the data entry app.\",\"recommendation\":\"If it is possible to open the option set in the maintenance app, you can resort the option set, which should correct the problem. Another possible solution is to directly update the sort_order property of in the `optionset` table in the database, ensuring that a valid sequence is present for all options in the option set.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSWSO\"},{\"name\":\"periods_same_start_end_date\",\"displayName\":\"Periods with the same start and end dates\",\"section\":\"Periods\",\"severity\":\"CRITICAL\",\"description\":\"Periods with the same start and end dates\",\"introduction\":\"Different periods should not have exactly the same start and end date.\",\"recommendation\":\"All references to the duplicate periods should be removed from the system and reassigned. It is recommended to use the period with the lower periodid.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PSSED\"},{\"name\":\"program_indicators_with_invalid_expressions\",\"displayName\":\"Program indicators with invalid expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have an invalid expression\",\"recommendation\":\"Check that the expression evaluates to a number\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIE\"},{\"name\":\"program_rule_actions_without_notification\",\"displayName\":\"Program rule with actions lacking a notification template\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires a notification template but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWN\"},{\"name\":\"indicator_no_analysis\",\"displayName\":\"Indicators not used in analytical objects.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not used in analytical objects.\",\"introduction\":\"Indicators should be used to produce some type of analytical output (charts, maps, pivot tables). Note: indicators used in datasets to provide feedback during data entry are not counted as being used in analytical objects.\",\"recommendation\":\"Indicators that are not routinely being used for analysis should be reviewed to determine if they are useful and needed. If these are meant to be used for routine review, then associated outputs should be created using them. If these indicators are not going to be used for any type of information review, and are not used in data sets for feedback during data entry, consideration should be made to delete them.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"INA\"},{\"name\":\"user_groups_scarce\",\"displayName\":\"User groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"User groups should have at least two members.\",\"introduction\":\"Generally, user groups should contain two or more users.\",\"recommendation\":\"Considering removing user groups with less than two users, or alternatively, add additional users to the group to make it more useful.\",\"issuesIdType\":\"userGroups\",\"isSlow\":false,\"code\":\"UGS\"},{\"name\":\"data_elements_aggregate_with_different_period_types\",\"displayName\":\"Aggregate data elements which belong to datasets with different period types.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"SEVERE\",\"description\":\"Aggregate data elements which belong to datasets with different period types.\",\"introduction\":\"Data elements should not belong to datasets with different period types.\",\"recommendation\":\"If you need to collect data with different period types (e.g. weekly and monthly) you should use different data elements for each period type. In general, it is not recommended to collect data with different frequencies, since in general, data collected at higher frequencies (e.g. weekly) can be aggregated to data with lower frequencies (e.g yearly).\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAWDPT\"},{\"name\":\"validation_rules_without_groups\",\"displayName\":\"Validation rules lacking groups\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that are not member of at least one validation rule group\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWG\"},{\"name\":\"category_option_combos_disjoint\",\"displayName\":\"Category option combinations with disjoint associations.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with disjoint associations.\",\"introduction\":\"Under certain circumstances, category option combinations may exist in the system, but not have any direct association with category options which are associated with their category combination. This situation usually occurs when category options have been added to a category and then the category is added to a category combination. New category option combinations are created in the system at this point. If any of the category options are then removed in one of the underlying categories, a so-called disjoint category option combination may result. This is a category option combination which has no direct association with any category options in any of the categories associated with the category combination.\",\"recommendation\":\"The disjoint category option combinations should be removed from the system if possible. However, if any data is associated with the category option combination, a determination will need to be made in regards of how to deal with this data.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"COCD\"},{\"name\":\"options_sets_unused\",\"displayName\":\"Option sets which are not used\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Option sets which are not used\",\"introduction\":\"Option sets should be used for some purpose. The may be used by data elements, comments, attributes, or tracked entity attributes.\",\"recommendation\":\"Consider deleting unused option sets, or alternatively, ensure that they have been properly assigned.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSU\"},{\"name\":\"catoptioncombos_no_catcombo\",\"displayName\":\"Category options combinations with no category combination.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options combinations with no category combination.\",\"introduction\":\"All category option combinations should be associated with a category combo. In certain cases, when category combinations are deleted,the linkage between a category option combination and a category combination may become corrupted.\",\"recommendation\":\"Check if any data is associated with the category option combination in question. Likely, the data should either be deleted or migrated to a valid category option combination. Any data which is associated with any of these category option combinations will not be available through either the data entry modules or any of the analytical apps.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CNC\"},{\"name\":\"data_elements_violating_exclusive_group_sets\",\"displayName\":\"Data elements with conflicting exclusive group sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are a members of more than one exclusive data element set belonging to the same data element group set\",\"recommendation\":\"Either remove the data element from all but one exclusive group set or consider if the set really should be an exclusive group set\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEVEGS\"},{\"name\":\"categories_same_category_options\",\"displayName\":\"Categories with the same category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with the same category options\",\"introduction\":\"Categories with the exact same category options should be considered to be merged. Categories with the exact same category options may be easily confused by users in analysis. The details view will provide a list of categories which have the exact same category options. For each duplicated category a number in parentheses such as (1) will indicate which categories belong to duplicated groups.\",\"recommendation\":\"If category combinations have already been created with duplicative categories,\\nit is recommended that you do not take any action, but rather ensure\\nthat users understand that there may be two category combinations which are duplicative.\\n\\nIf you choose to merge the duplicative category combinations, you would need to \\nremap all category option combinations from the category combo which you wish to \\nremove, to the one which you wish to keep. \\n\\nIf one of the categories is not in use in any category combination, it should\\nconsider to be removed from the system.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CSCO\"},{\"name\":\"visualizations_not_viewed_one_year\",\"displayName\":\"Visualizations which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Visualizations which have not been viewed in the past 12 months\",\"introduction\":\"Visualizations should be regularly viewed in the system. In many cases, users may create charts for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to charts being difficult to find in the visualization app.\",\"recommendation\":\"Unused charts can be removed directly using the data visualization app by a user with sufficient authority. If charts are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"visualizations\",\"isSlow\":false,\"code\":\"VNVOY\"},{\"name\":\"categories_one_default_category_option\",\"displayName\":\"Only one default category option should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option with UID \\\"xYerKDKCefk\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option or move all references to category option \\\"xYerKDKCefk\\\" and then remove the unused conflicting category option.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CODCO\"},{\"name\":\"orgunits_multiple_spaces\",\"displayName\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"introduction\":\"Names and/or shortnames of organisation units should not contain multiple spaces. They are superfluous and may complicate the location of organisation units when they are searched.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the multiple spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMS\"},{\"name\":\"data_elements_aggregate_abandoned\",\"displayName\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"introduction\":\"Data elements are considered to be abandoned when they have not been edited in at least 100 days and do not have any data values associated with them. Often, these are the result of new or changed configurations that have been abandoned at some point.\",\"recommendation\":\"Data elements that have no data associated with them and which there are no plans to start using for data collection should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAA\"},{\"name\":\"data_elements_assigned_to_data_sets_with_different_period_types\",\"displayName\":\"Data elements assigned to data sets with different period type\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are assigned to at least one data set that has a different period type\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEATDSWDPT\"},{\"name\":\"data_elements_aggregate_no_groups\",\"displayName\":\"Aggregate data elements not in any data element groups.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not in any data element groups.\",\"introduction\":\"All data elements should be in a data element group. This allows users to find the data elements more easily in analysis\\n apps and also contributes to having more complete data element group sets.\\n Maintenance operations can also be made more efficient by applying\\n bulk settings (ex. sharing) to all data elements within a data element group.\",\"recommendation\":\"Data elements that are not in a data element group should be added to a relevant data element group. If the data elements are not needed, they should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANG\"},{\"name\":\"category_options_shared_within_category_combo\",\"displayName\":\"Category combinations with categories which share the same category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category combinations with categories which share the same category options.\",\"introduction\":\"As a general rule, category options should be reused where possible between categories. The exception to this rule however, is when you have a category combo with multiple categories, and within those categories, a category option is shared. As a simple example, lets say you have a category called \\\"Sex\\\" with options \\\"Male\\\"\\\", \\\"Female\\\" and \\\"Unknown\\\". There is also a second category called \\\"Age\\\" with options \\\"<15\\\", \\\"15+\\\", and \\\"Unknown\\\". A category combination called \\\"Age/Sex\\\" is then created with these two categories, which share the option \\\"Unknown\\\". This situation should be avoided, as it creates issues when analyzing data.\",\"recommendation\":\"The recommended approach to dealing with this situation is to create a new category combination, using two new categories. Using the example from the introduction, you should create two new category options called \\\"Unknown age\\\" and \\\"Unknown sex\\\". A new category combination can then be created with these new categories, which do not share category options. All data which is potentially associated with the old category combinations, would need to be reassigned to the new category option combinations. Any analytical objects which use the categories to be removed would also need to be updated.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"COSWCC\"},{\"name\":\"orgunits_null_island\",\"displayName\":\"Organisation units located within 100 km of Null Island (0,0).\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units located within 100 km of Null Island (0,0).\",\"introduction\":\"A common problem when importing coordinates is the inclusion of coordinates situated around the point of [Null Island](https://en.wikipedia.org/wiki/Null_Island). This is the point on the Earth's surface where the Prime Meridian and Equator intersect with a latitude of 0 and a longitude of 0. The point also happens to be situated currently in the middle of the ocean. This query identifies any points located within 100 km of the point having latitude and longitude equal to zero.\",\"recommendation\":\"Update the coordinates of the affected organization unit to the correct location.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONI\"},{\"name\":\"program_rule_actions_without_section\",\"displayName\":\"Program rules with actions lacking a program stage section\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a section but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWS\"},{\"name\":\"periods_3y_future\",\"displayName\":\"Periods which are more than three years in the future.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are more than three years in the future.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\nfar future. Different data entry clients may not properly validate for periods\\nwhich are in the future, and thus any periods in the future should be reviewed.\\nIn some cases, data may be valid for future dates, e.g. targets which are set for the\\nnext fiscal year.\",\"recommendation\":\"If any periods exist in the system in the future, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\\n\\nIn many cases, clients may mean to transmit\\ndata for January 2021, but due to data entry errors, January 2031 is selected. Thus,\\nany data in the far future should be investigated to ensure it does not result\\nfrom data entry errors.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"P3F\"},{\"name\":\"orgunits_trailing_spaces\",\"displayName\":\"Organisation units should not have trailing spaces.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have trailing spaces.\",\"introduction\":\"Trailing spaces in organisation units are superfluous.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the trailing spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OTS\"},{\"name\":\"validation_rule_groups_scarce\",\"displayName\":\"Validation rule should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Validation rule should have at least two members.\",\"introduction\":\"Generally validation rule groups should be composed of multiple validation rules.\",\"recommendation\":\"Considering removing groups which are empty or which have a single member. Alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"validationRuleGroups\",\"isSlow\":false,\"code\":\"VRGS\"},{\"name\":\"indicators_with_invalid_numerator\",\"displayName\":\"Indicators with invalid numerator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators where the numerator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWIN\"},{\"name\":\"categories_one_default_category_combo\",\"displayName\":\"Only one default category combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category combo should exist\",\"introduction\":\"There should only exist one category combo with name and code \\\"default\\\".\",\"recommendation\":\"Only the category combo with UID \\\"bjDvmb4bfuf\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category combo or move all references to category combo \\\"bjDvmb4bfuf\\\" and then remove the unused conflicting category combo.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CODCC\"},{\"name\":\"data_elements_without_data_sets\",\"displayName\":\"Data elements lacking data Sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data sets\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWDS\"},{\"name\":\"category_combos_unused\",\"displayName\":\"Category combinations not used by other metadata objects\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category combinations not used by other metadata objects\",\"introduction\":\"Category combinations which are unused in any datasets, data elements, programs or data approval workflows may be safe to delete. In some cases, category combinations may be created, but never actually used for anything. This may lead to situations where users and implementers are confused about which category combination should actually be used. In general, it should be safe to delete unused category combinations, except in situations where existing data has been associated with them.\",\"recommendation\":\"Check to see if any data is associated with the category combination before attempting to delete it. Category combinations which are not currently used in any metadata objects may still be valid for legacy reasons, but they should be reviewed to be sure they are still needed. Otherwise, it should be safe to remove them from the system.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCU\"},{\"name\":\"category_option_groups_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option groups should be composed of at least two category options. There can however be legitimate cases when a single category option is part of a group, especially in cases where there is a direct mapping between age bands and category options.\",\"recommendation\":\"Considering removing groups with zero or one category options, or alternatively, add additional category options to the group to make it more useful.\",\"issuesIdType\":\"categoryOptionGroups\",\"isSlow\":false,\"code\":\"COGS\"},{\"name\":\"datasets_empty\",\"displayName\":\"Datasets with no data elements.\",\"section\":\"Data sets\",\"severity\":\"WARNING\",\"description\":\"Datasets with no data elements.\",\"introduction\":\"All datasets should have data elements assigned to them.\",\"recommendation\":\"Remove empty datasets, or alternatively, assign data elements to them.\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DE\"},{\"name\":\"indicators_without_groups\",\"displayName\":\"Indicators lacking groups\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that do not have at least one group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWG\"},{\"name\":\"orgunit_groups_scarce\",\"displayName\":\"Organisation unit groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Organisation unit groups should have at least two members.\",\"introduction\":\"Generally, organisation unit groups should be composed of multiple organisation units.\",\"recommendation\":\"Considering removing groups with zero or one organisation units, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OGS\"},{\"name\":\"program_rules_without_priority\",\"displayName\":\"Program rules lacking a priority setting\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules with action type \\\"assign\\\" where the rule priority is not yet set\",\"recommendation\":\"Set a priority for the program rule(s)\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWP\"},{\"name\":\"categories_unique_category_combo\",\"displayName\":\"Different category combinations should not have the exact same combination of categories.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Different category combinations should not have the exact same combination of categories.\",\"introduction\":\"Category combinations should be a unique combination of categories. If two or more category combinations contain the exact same set of categories, this would be considered to be duplicative and potentially confusing to users.\",\"recommendation\":\"One category combo is kept, all references are updated to use this combo and other combos are removed.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CUCC\"},{\"name\":\"indicator_group_sets_scarce\",\"displayName\":\"Indicator groups sets should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups sets should have at least two members.\",\"introduction\":\"All indicator group set should be composed of at least two indicators groups.\",\"recommendation\":\"Considering removing indicator group sets with less than two indicator groups, or alternatively, add additional indicator groups to the indicator group set to make it more useful.\",\"issuesIdType\":\"indicatorGroupSets\",\"isSlow\":false,\"code\":\"IGSS\"},{\"name\":\"validation_rules_with_invalid_right_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a right side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWIRSE\"},{\"name\":\"data_elements_aggregate_aggregation_operator\",\"displayName\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"introduction\":\"Data elements which are not numeric (text, dates, etc) should have an aggregation operator set to NONE. Data elements which are able to be aggregated (numbers, integers, etc) should have an aggregation operator set to something other than NONE, most often SUM.\",\"recommendation\":\"Open the affected data elements in the Maintenance App and change their aggregation type to an appropriate type. Alternatively, these can be altered via the API.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAAO\"},{\"name\":\"org_unit_groups_without_group_sets\",\"displayName\":\"Organisation unit groups lacking group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation unit groups that aren't member of at least one organisation unit group set\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OUGWGS\"},{\"name\":\"program_rule_variables_without_attribute\",\"displayName\":\"Program rule variables lacking an attribute\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring an attribute source but that is not yet linked to an attribute\",\"recommendation\":\"Assign an attribute to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWA\"},{\"name\":\"program_indicator_groups_scarce\",\"displayName\":\"Program indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Program indicator groups should have at least two members.\",\"introduction\":\"Program indicator groups should generally be composed of two or more program indicators.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"programIndicatorGroups\",\"isSlow\":false,\"code\":\"PIGS\"},{\"name\":\"program_rules_no_expression\",\"displayName\":\"Program rules with no expression.\",\"section\":\"Program rules\",\"severity\":\"WARNING\",\"description\":\"Program rules with no expression.\",\"introduction\":\"All program rules should have an expression. Expressions are used by program rules to determine when they should be triggered. Program rules with no expression have no purpose.\",\"recommendation\":\"Using the DHIS2 user interface, assign an expression to each of the program rules which is missing one. Otherwise, if it is safe to delete the program rule with no expression, it is recommended to remove it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNE\"},{\"name\":\"data_elements_aggregate_no_data\",\"displayName\":\"Aggregate data elements with NO data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements with NO data values.\",\"introduction\":\"Data elements should generally always be associated with data values. If data elements exist in a data set which is active, but there are no data values associated with them, they may not be part of the data entry screens. Alternatively, the data element may have been added but never been associated with a dataset.\",\"recommendation\":\"Consider removing data elements with no data values.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAND\"},{\"name\":\"program_indicators_without_expression\",\"displayName\":\"Program indicators lacking an expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have no expression set yet\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWE\"},{\"name\":\"periods_distant_past\",\"displayName\":\"Periods which are in the distant past.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are in the distant past.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\ndistant past. Different data entry clients may not properly validate for periods\\nwhich are in the distant past, and thus these periods should be triaged to ensure\\nthat data has not been entered against them by mistake.\",\"recommendation\":\"If any periods exist in the system in the distant past, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PDP\"},{\"name\":\"org_units_being_orphaned\",\"displayName\":\"Orphaned organisation units\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that aren't level 1 units but that lack a parent so that they are not connected to the rest of the organisation tree\",\"recommendation\":\"Find (or create) and set the correct parent for the orphaned organisation unit(s). Eventually this is also caused by having set the wrong level.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUBO\"},{\"name\":\"cocs_wrong_cardinality\",\"displayName\":\"Category option combinations with incorrect cardinality.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with incorrect cardinality.\",\"introduction\":\"All category option combinations should have exactly the same number of category option associations as the number of categories in the category combination. If there are two categories in a category combination, then every category option combination should have exactly two category options.\\nCategory option combinations with the incorrect cardinality are usually the result of a category combination having been created, and then modified later. Suppose that two categories are used to create a category combination. Each category option combination of this category combo will have two category options. If an additional category is added to the category combination later, new category option combinations with three category options will be created and associated with this category combo. The original category option combinations would be considered to be invalid.\",\"recommendation\":\"Category option combinations which have an incorrect cardinality will be ignored by the DHIS2 analytics system and should be removed.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CWC\"},{\"name\":\"dashboards_not_viewed_one_year\",\"displayName\":\"Dashboards which have not been actively viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Dashboards which have not been actively viewed in the past 12 months\",\"introduction\":\"Dashboards should be regularly viewed in the system. In many cases, users may create dashboards for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to useful dashboards being difficult to find. This check identifies any dashboards which have not been viewed in the past year.\",\"recommendation\":\"Unused dashboards can be deleted in the entirety from the main dashboard app by clicking on the \\\"Edit\\\" button and choosing \\\"Delete\\\". Note that this process cannot be undone! Another option would be to alter the sharing of the dashboard so that it is not visible to any user.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNVOY\"}]", - "responseSize": 66022, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - } -] diff --git a/cypress/fixtures/network/40/system_job_visibility_can_be_toggled.json b/cypress/fixtures/network/40/system_job_visibility_can_be_toggled.json deleted file mode 100644 index 87ad07cfa..000000000 --- a/cypress/fixtures/network/40/system_job_visibility_can_be_toggled.json +++ /dev/null @@ -1,271 +0,0 @@ -[ - { - "path": "/api/40/systemSettings/helpPageLink", - "featureName": "System job visibility can be toggled", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"helpPageLink\":\"https://dhis2.github.io/dhis2-docs/master/en/user/html/dhis2_user_manual_en.html\"}", - "responseSize": 99, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/analytics/tableTypes", - "featureName": "System job visibility can be toggled", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"]", - "responseSize": 122, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations/jobTypes?fields=*&paging=false", - "featureName": "System job visibility can be toggled", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"jobTypes\":[{\"name\":\"Data integrity\",\"jobType\":\"DATA_INTEGRITY\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"checks\",\"fieldName\":\"Checks\",\"persisted\":false,\"collectionName\":\"checks\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/dataIntegrity\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.parameters.DataIntegrityJobParameters$DataIntegrityReportType\",\"name\":\"type\",\"fieldName\":\"Type\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"REPORT\",\"SUMMARY\",\"DETAILS\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Resource table\",\"jobType\":\"RESOURCE_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Analytics table\",\"jobType\":\"ANALYTICS_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"skipPrograms\",\"fieldName\":\"Skip programs\",\"persisted\":false,\"collectionName\":\"skipPrograms\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/programs\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipResourceTables\",\"fieldName\":\"Skip resource tables\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Continuous analytics table\",\"jobType\":\"CONTINUOUS_ANALYTICS_TABLE\",\"schedulingType\":\"FIXED_DELAY\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"fullUpdateHourOfDay\",\"fieldName\":\"Full update hour of day\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Data sync\",\"jobType\":\"DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker programs data sync\",\"jobType\":\"TRACKER_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Event programs data sync\",\"jobType\":\"EVENT_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Meta data sync\",\"jobType\":\"META_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"trackerProgramPageSize\",\"fieldName\":\"Tracker program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"eventProgramPageSize\",\"fieldName\":\"Event program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"dataValuesPageSize\",\"fieldName\":\"Data values page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Aggregate data exchange\",\"jobType\":\"AGGREGATE_DATA_EXCHANGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"dataExchangeIds\",\"fieldName\":\"Data exchange ids\",\"persisted\":false,\"collectionName\":\"dataExchangeIds\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/aggregateDataExchanges\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Send scheduled message\",\"jobType\":\"SEND_SCHEDULED_MESSAGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Program notifications\",\"jobType\":\"PROGRAM_NOTIFICATIONS\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Monitoring\",\"jobType\":\"MONITORING\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"validationRuleGroups\",\"fieldName\":\"Validation rule groups\",\"persisted\":false,\"collectionName\":\"validationRuleGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/validationRuleGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"sendNotifications\",\"fieldName\":\"Send notifications\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"persistResults\",\"fieldName\":\"Persist results\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Push analysis\",\"jobType\":\"PUSH_ANALYSIS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"pushAnalysis\",\"fieldName\":\"Push analysis\",\"persisted\":false,\"collectionName\":\"pushAnalysis\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/pushAnalysis\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker search optimization\",\"jobType\":\"TRACKER_SEARCH_OPTIMIZATION\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"attributes\",\"fieldName\":\"Attributes\",\"persisted\":false,\"collectionName\":\"attributes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/trackedEntityAttributes/indexable\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipIndexDeletion\",\"fieldName\":\"Skip index deletion\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Predictor\",\"jobType\":\"PREDICTOR\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictors\",\"fieldName\":\"Predictors\",\"persisted\":false,\"collectionName\":\"predictors\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictors\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictorGroups\",\"fieldName\":\"Predictor groups\",\"persisted\":false,\"collectionName\":\"predictorGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictorGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Disable inactive users\",\"jobType\":\"DISABLE_INACTIVE_USERS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"inactiveMonths\",\"fieldName\":\"Inactive months\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"reminderDaysBefore\",\"fieldName\":\"Reminder days before\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Test\",\"jobType\":\"TEST\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Long\",\"name\":\"waitMillis\",\"fieldName\":\"Wait millis\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"stages\",\"fieldName\":\"Stages\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtStage\",\"fieldName\":\"Fail at stage\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"items\",\"fieldName\":\"Items\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtItem\",\"fieldName\":\"Fail at item\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Long\",\"name\":\"itemDuration\",\"fieldName\":\"Item duration\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.String\",\"name\":\"failWithMessage\",\"fieldName\":\"Fail with message\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"failWithException\",\"fieldName\":\"Fail with exception\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.JobProgress$FailurePolicy\",\"name\":\"failWithPolicy\",\"fieldName\":\"Fail with policy\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"PARENT\",\"FAIL\",\"SKIP_STAGE\",\"SKIP_ITEM\",\"SKIP_ITEM_OUTLIER\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"runStagesParallel\",\"fieldName\":\"Run stages parallel\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]}]}", - "responseSize": 24994, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/validationRuleGroups?paging=false", - "featureName": "System job visibility can be toggled", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"validationRuleGroups\":[{\"displayName\":\"ANC\",\"id\":\"UP1lctvalPn\"},{\"displayName\":\"Commodities\",\"id\":\"xcpl667ccfF\"},{\"displayName\":\"Critical event\",\"id\":\"xWtt9c443Lt\"},{\"displayName\":\"District stock\",\"id\":\"mEtdbIDDhix\"},{\"displayName\":\"Epidemic disease outbreak\",\"id\":\"y2yQIm79VTW\"},{\"displayName\":\"Facility Stock\",\"id\":\"SqyI8HKqI4g\"},{\"displayName\":\"Immunisation\",\"id\":\"UiOSY1iIdub\"},{\"displayName\":\"Infectious disease outbreak\",\"id\":\"WUZXEFdn1PX\"},{\"displayName\":\"Malaria\",\"id\":\"zlaSof6qLqF\"},{\"displayName\":\"Population\",\"id\":\"D3bItmtBpsW\"},{\"displayName\":\"TB\",\"id\":\"IMF6p1MqoHl\"},{\"displayName\":\"Testing\",\"id\":\"nMDkAJXsmlR\"}]}", - "responseSize": 628, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictors?paging=false", - "featureName": "System job visibility can be toggled", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictors\":[{\"displayName\":\"Malaria Outbreak Threshold\",\"id\":\"tEK1OEqS4O1\"}]}", - "responseSize": 80, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/pushAnalysis?paging=false", - "featureName": "System job visibility can be toggled", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"pushAnalysis\":[{\"displayName\":\"Immunization Key Indicators Monthly Report\",\"id\":\"jtcMAKhWwnc\"}]}", - "responseSize": 98, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictorGroups?paging=false", - "featureName": "System job visibility can be toggled", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictorGroups\":[]}", - "responseSize": 22, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/dataIntegrity", - "featureName": "System job visibility can be toggled", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[{\"name\":\"orgunits_invalid_geometry\",\"displayName\":\"Organisation units with invalid geometry.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with invalid geometry.\",\"introduction\":\"DHIS2 uses the PostGIS database extension to manage the geographical information associated\\nwith organisation units. There are various reasons why geometries may be considered to be\\ninvalid including self-inclusions, self-intersections, and sliver polygons. Please see the\\nPostGIS documentation for a more in-depth discussion on this topic.\\n\\nInvalid geometry is not always a problem and may be able to be ignored, however, it has been observed in certain systems\\nthat this can lead to problems in analytics. If you are experiencing issues when generating analytics\\ntables, and see errors related to invalid geometries, you will need to either remove the invalid geometry,\\nor fix it.\",\"recommendation\":\"Update the geometry of the affected organisation units to a valid geometry. It may be possible to use the PostGIS function `ST_MakeValid` to automatically fix the problem. However, in other cases the geometry may need to be edited in a GIS tool, and then updated again in DHIS2.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OIG\"},{\"name\":\"data_elements_without_groups\",\"displayName\":\"Data elements lacking groups\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data element groups\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWG\"},{\"name\":\"orgunit_group_sets_excess_groups\",\"displayName\":\"Organisation units which belong to multiple groups in a group set.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which belong to multiple groups in a group set.\",\"introduction\":\"Organisation units should belong to exactly one group within each organisation unit group set of which they are a member. If the organisation unit belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the organisation units in the details list to exactly one group within each group set membership.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OGSEG\"},{\"name\":\"validation_rules_missing_value_strategy_null\",\"displayName\":\"All validation rule expressions should have a missing value strategy.\",\"section\":\"Validation rules\",\"severity\":\"SEVERE\",\"description\":\"All validation rule expressions should have a missing value strategy.\",\"introduction\":\"Validation rules are composed of a left and right side expression. In certain systems the missing value strategy may not be defined. This may lead to an exception during validation rule analysis. The affected validation rules should be corrected to with an appropriate missing value strategy.\",\"recommendation\":\"Using the results of the the details SQL view, identify the affected validation rules and which side of the rule the missing value strategy has not been specified. Using the maintenance app, make the appropriate corrections and save the rule.\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRMVSN\"},{\"name\":\"category_combos_being_invalid\",\"displayName\":\"Invalid Category-combos\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Lists all category-combos that are invalid\",\"recommendation\":\"Make sure the category combo is assigned to at least one category and that all categories have category options \",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCBI\"},{\"name\":\"data_elements_in_data_set_not_in_form\",\"displayName\":\"Data sets with data elements not in data entry form\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that have data elements which are neither a member of the set's data entry form nor a member of the sets section\",\"recommendation\":\"Either remove the data elements in question or make them a member of the set's form or section\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DEIDSNIF\"},{\"name\":\"categories_no_options\",\"displayName\":\"Categories with no category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with no category options\",\"introduction\":\"Categories should always have at least one category option.\",\"recommendation\":\"Any categories without category options should either be removed from the system if they are not in use. Otherwise, appropriate category options should be added to the category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CNO\"},{\"name\":\"data_elements_aggregate_no_analysis\",\"displayName\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"introduction\":\"All aggregate data elements that are captured in DHIS2 should be used to produce some type of analysis output (charts, maps, tables). This can be by using them directly in an output, or by having them contribute to an indicator calculation that is used an output.\",\"recommendation\":\"Data elements that are not routinely being reviewed in analysis, either directly or indirectly through indicators, should be reviewed to determine if they still need to be collected. If these are meant to be used in routine review, then associated outputs should be created using them. If these data elements are not going to be used for any type of information review, consideration should be made to either archive them or delete them.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANA\"},{\"name\":\"indicators_duplicated_terms\",\"displayName\":\"Indicators with the same terms.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same terms.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check attempts to identify indicators with the same formulas, regardless of the order of their their terms. Suppose you have an indicator which calculates total ANC attendance: ANC Total = ANC1 + ANC2 + ANC3 Suppose then another indicator exists in the system, which has been defined as: ANC Totals = ANC3 + ANC2 + ANC1 These two indicators are equivalent, and will produce the same result, and are thus considered to be duplicated.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Considered deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IDT\"},{\"name\":\"program_rules_no_action\",\"displayName\":\"Program rules with no action.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules with no action.\",\"introduction\":\"All program rules should have an action.\",\"recommendation\":\"Using the DHIS2 user interface, assign an action to each of the program rules which is missing one. Alternatively, if the program rule is not in use, then consider removing it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNA\"},{\"name\":\"orgunits_compulsory_group_count\",\"displayName\":\"Organisation units that are not in all compulsory orgunit group sets\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Orgunits that are not in all compulsory orgunit group sets\",\"introduction\":\"If any organisation unit groups have been marked as compulsory, each and every organisation unit should belong to exactly one group within each compulsory organisation unit group set. Assume we have created a group set called \\\"Ownership\\\" with two groups \\\"Public\\\" and \\\"Private\\\". Each and every organisation unit contained in the hierarchy must belong to either Public or Private (but not both). When organisation unit are not part of a group set, results in the analytics apps will not be correct if the organisation unit group set is used for aggregation.\",\"recommendation\":\"For each of the organisation units identified in the details query, you should assign the appropriate organisation unit group within the group set. Alternatively, if the group set should not be compulsory, you should change this attribute.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OCGC\"},{\"name\":\"orgunits_no_coordinates\",\"displayName\":\"Organisation units with no coordinates.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with no coordinates.\",\"introduction\":\"Ideally, all organisation units contained in the DHIS2 hierarchy should have a valid\\nset of coordinates. Usually for all organisation units above the facility level,\\nthese coordinates should be a polygon which provides the boundary of the organisation\\nunit. For facilities, these are usually represented as point coordinates.\\n\\nThere can obviously be exceptions to this rule. Mobile health facilities may not have\\na fixed location. Community health workers or wards below the facility level\\nmay also not have a defined or definable coordinate.\\n\\nThis check is intended to allow you to review all organisation units which do\\nnot have any coordinates and make a determination as to whether they should be updated.\",\"recommendation\":\"Where appropriate, update the geometry of each organisation unit with a valid geometry.\\nYou may need to contact the appropriate local government office to obtain a copy\\nof district boundaries, commonly referred to as \\\"shape files\\\". Another possibility\\nis to use freely available boundary files from GADM (https://gadm.org)\\n\\nIf facilities are missing coordinates, it may be possible to obtain these from\\nthe facility staff using their smart phone to get the coordinates. Images\\nfrom Google Maps can also often be used to estimate the position of a facility,\\nassuming that you have good enough resolution and local knowledge of where\\nit is located.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONC\"},{\"name\":\"data_sets_not_assigned_to_org_units\",\"displayName\":\"Data sets not assigned to organisation units\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that are not assigned to any organisation units\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DSNATOU\"},{\"name\":\"dashboards_no_items\",\"displayName\":\"Dashboards with no items.\",\"section\":\"Dashboards\",\"severity\":\"INFO\",\"description\":\"Dashboards with no items.\",\"introduction\":\"All dashboards should have content on them. Dashboards without any content do not serve any purpose, and can make it more difficult to find relevant dashboards with content.\",\"recommendation\":\"Dashboards without content that have not been modified in the last 14 days should be considered for deletion.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNI\"},{\"name\":\"orgunits_same_name_and_parent\",\"displayName\":\"Organisation units should not have the same name and parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have the same name and parent.\",\"introduction\":\"Organisation units may have exactly the same name. This may become confusing to users, particularly if the organisation unit has the same name and same parent. This can easily lead to data entry or analysis mistakes as users have no way to distinguish between the two organisation units.\",\"recommendation\":\"Rename identically named organisation units which share the same parent using the maintenance app.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OSNAP\"},{\"name\":\"indicators_not_grouped\",\"displayName\":\"Indicators not in any groups.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not in any groups.\",\"introduction\":\"All indicators should be in an indicator group. This allows users to find the indicators more easily in analysis apps and also contributes to having more complete indicators group sets. Maintenance operations can also be made more efficient by applying bulk settings (ex. sharing, filtering) to all indicators within an indicator group.\",\"recommendation\":\"Indicators that are not in a indicator group should be added to a relevant indicator group. If the indicators are not needed, they should be deleted.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"ING\"},{\"name\":\"category_option_group_sets_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option group sets should be composed of at least two category option groups.\",\"recommendation\":\"Considering removing groups with zero or one category option groups, or alternatively, add additional category option groups to the group set to make it more useful.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSS\"},{\"name\":\"org_units_without_groups\",\"displayName\":\"Organisation units lacking groups\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are not connected to at least one group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWG\"},{\"name\":\"data_elements_excess_groupset_membership\",\"displayName\":\"Data elements which belong to multiple groups in a group set.\",\"section\":\"data_elements\",\"severity\":\"SEVERE\",\"description\":\"Data elements which belong to multiple groups in a group set.\",\"introduction\":\"Data elements should belong to exactly one group within each data element group set of which they are a member. If the data element belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the data elements in the details list to exactly one data element group within each group set.\",\"issuesIdType\":\"data_elements_aggregate\",\"isSlow\":false,\"code\":\"DEEGM\"},{\"name\":\"data_element_groups_scarce\",\"displayName\":\"Data element groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Data element groups should have at least two members.\",\"introduction\":\"All data element groups should be composed of at least two data elements.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"dataElementGroups\",\"isSlow\":false,\"code\":\"DEGS\"},{\"name\":\"orgunits_not_contained_by_parent\",\"displayName\":\"Organisation units with point coordinates should be contained by their parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with point coordinates should be contained by their parent.\",\"introduction\":\"Facilities are often represented as points in the DHIS2 hierarchy. Their parent organisation units geometry should contain all facilities which have been associated with them.\",\"recommendation\":\"Often boundary files are simplified when they are uploaded into DHIS2. This process may result in\\nfacilities which are located close to the border of a given district to fall outside of the district\\nwhen the boundary is simplified. This is considered to be more of a cosmetic problem for most DHIS2\\ninstallations, but could become an issue if any geospatial analysis is attempted using the\\nboundaries and point coordinates.\\n\\nIn cases where the facility falls outside of its parent's boundary\\nyou should confirm that the coordinates are correct. If the location is close to the boundary, you\\nmay want to reconsider how the boundary files have been simplified. Otherwise, if the location of\\nthe facility is completely incorrect, it should be rectified.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONCBP\"},{\"name\":\"program_rules_message_no_template\",\"displayName\":\"Program rules actions which should send or schedule a message without a message template.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules actions which should send or schedule a message without a message template.\",\"introduction\":\"Program rule actions of type \\\"Send message\\\" or \\\"Schedule message\\\" should have an associated message template.\",\"recommendation\":\"Using the DHIS2 user interface, assign a message template to each of the program rule actions which send or schedule messages but which does not have an association with a message template.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRMNT\"},{\"name\":\"indicators_with_invalid_denominator\",\"displayName\":\"Indicators with invalid denominator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"List all indicators where the denominator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWID\"},{\"name\":\"indicator_types_duplicated\",\"displayName\":\"Indicator types with the same factor.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicator types with the same factor.\",\"introduction\":\"Indicators can be assigned a factor which is multiplied by the indicator's value. For example, if you create a percentage based indicator, you can assign the indicator a factor of 100, which would be multiplied by the actual value of the indicator calculated by DHIS2. In general, having multiple indicator types with the same factor is not recommended. It is duplicative, and may lead to confusion.\",\"recommendation\":\"Duplicated indicator types should consider to be removed from the system. Consider choosing one of the duplicated indicator types as the one to keep, and then update all indicators which share the same factor to this indicator type. The duplicated indicator types can then be removed from the system.\",\"issuesIdType\":\"indicatorTypes\",\"isSlow\":false,\"code\":\"ITD\"},{\"name\":\"options_sets_empty\",\"displayName\":\"Empty option sets\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Empty option sets\",\"introduction\":\"All option sets should generally include at least two items. Empty option sets serve no purpose.\",\"recommendation\":\"Options should either be added to the option set, or the option set should be deleted.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSE\"},{\"name\":\"category_options_no_categories\",\"displayName\":\"Category options with no categories.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options with no categories.\",\"introduction\":\"All category options should belong to at least one category.\",\"recommendation\":\"Category options which are not part of any category should be removed or alternatively should be added to an appropriate category.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CONC\"},{\"name\":\"orgunits_orphaned\",\"displayName\":\"Orphaned organisation units.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"Orphaned organisation units.\",\"introduction\":\"Orphaned organisation units are those which have neither parents nor any children. This means that they have no relationship to the main organisation unit hierarchy. These may be created by faulty metadata imports or direct manipulation of the database.\",\"recommendation\":\"The orphaned organisation units should be assigned a parent or removed from the system. It is recommended to use the DHIS2 API for this task if possible. If this is not possible, then they may need to be removed through direct SQL on the DHIS2 database.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OO\"},{\"name\":\"indicators_with_identical_formulas\",\"displayName\":\"Indicators with identical formulas\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that have the identical formulas with at least one other indicator\",\"recommendation\":\"Check if the same indicator should be used everywhere and remove duplicates\",\"isSlow\":false,\"code\":\"IWIF\"},{\"name\":\"program_indicators_with_invalid_filters\",\"displayName\":\"Program indicators with invalid filter\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators with invalid filter expression\",\"recommendation\":\"Check that the expression evaluates to true/false\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIF\"},{\"name\":\"program_rules_without_condition\",\"displayName\":\"Program rules lacking a condition\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that have no condition yet\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWC\"},{\"name\":\"categories_one_default_category\",\"displayName\":\"Only one default category should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category should exist\",\"introduction\":\"There should only exist one category with name and code \\\"default\\\".\",\"recommendation\":\"Only the category with UID \\\"GLevLNI9wkl\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category or move all references to category \\\"GLevLNI9wkl\\\" and then remove the unused conflicting category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CODC\"},{\"name\":\"org_units_with_cyclic_references\",\"displayName\":\"Organisation units with cyclic references\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that have a conflicting parent hierarchy definition so that two organisation units become parent of each other or in other words they form a circular reference\",\"recommendation\":\"One of the organisation units must be setup wrongly and needs to be corrected so that a non-circular tree connects the two\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWCR\"},{\"name\":\"program_rule_variables_without_data_element\",\"displayName\":\"Program rule variables lacking a data element\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring a data element source but that is not yet linked to a data element\",\"recommendation\":\"Assign a data element to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWDE\"},{\"name\":\"org_units_violating_exclusive_group_sets\",\"displayName\":\"Organisation units with conflicting exclusive group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are members of multiple exclusive organisation unit groups\",\"recommendation\":\"Remove the organisation unit from all but one exclusive organisation unit group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUVEGS\"},{\"name\":\"program_rule_actions_without_data_object\",\"displayName\":\"Program rules with actions lacking a data object\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires either a data element or an attribute but is not connected either\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWDO\"},{\"name\":\"orgunits_openingdate_gt_closeddate\",\"displayName\":\"Organisation units which have an opening date later than the closed date.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which have an opening date later than the closed date.\",\"introduction\":\"If a closing date has been defined for an organisation unit, it should always be after the opening date (if one has been defined).\",\"recommendation\":\"Alter either the opening or closing date of all affected organisation units so that the closing date is after the opening date.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OOGC\"},{\"name\":\"categories_one_default_category_option_combo\",\"displayName\":\"Only one default category option combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option combo should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option combo with UID \\\"HllvX50cXC0\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option combo or move all references to category option combo \\\"HllvX50cXC0\\\" and then remove the unused conflicting category option combo.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CODCOC\"},{\"name\":\"category_option_group_sets_incomplete\",\"displayName\":\"Category option group sets which do not contain all category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option group sets which which do not contain all category options.\",\"introduction\":\"Category option group sets are composed of multiple category option groups, which are in turn composed of various category options. Category option group sets are often used to group related category options together for analytical purposes. Categories are also composed of category options. In general, but not always, category option group sets should contain all category options of related categories. Suppose we have the following two age categories. \\nAge coarse: <15, 15+ Age fine: <1, 1-10, 10-14,15-19,20-24,25-29,30-34,35-39,40-44,45+\\nIn many cases, related data elements may be disaggregated differently. This may be to differences in the way in which the data is collected, or as is often the case, the disaggregation has changed over time. If we wish to analyze data for two different data elements (one of which uses Age coarse and the other Age fine), we can create a category option group set consisting of two category option groups which should consist of the following category options from above. \\n<15: <15, <1, 1-10, 10-14 15+: 15+, 15-19,20-24,25-29,30-34,35-39,40-44,45+\\nSuppose that we happen to omit the category option \\\"<1\\\" from the \\\"<15\\\" category option group. This would result in potential aggregation errors in when using this category option group set in any analytical objects. The details of this metadata check would return the UID and name of the category option group set. The category and category option would also be provided. Using the previous example, we would see \\\"Age fine:{<1}\\\" in the metadata check details section, to indicate that the <1 category option which is part of the \\\"Age fine\\\" category, is missing from the category option group set.\\nThere may exist specific analytical reasons why specific category options are omitted from a category option group set. However,these should usually be special cases. This metadata check will identify cases where category option group sets appear to be incomplete, however you should carefully review any groups which appear in the details. \\nThis check may also produce a number of issues which may at first glance appear to be false positives. In some cases, category options may be added to a category by mistake. When category option group sets are created, this extraneous option may be omitted and thus appear as missing from the group set. \\nAnother observed situation is where an option like \\\"Unknown\\\" is used across unrelated categories. Suppose you have two categories \\\"Age (<15, 15+, Unknown)\\\" and \\\"Sex (Male,Female,Unknown)\\\". Similar to above, we create category option group sets like: \\n<15: <15 15+: 15+ Unknown: Unknown\\nThis metadata check will report that \\\"Male\\\" and \\\"Female\\\" are missing from the group set. This is because the same \\\"Unknown\\\" option is shared between two different, unrelated categories. It is recommended that if this situation occurs, that you create two separate \\\"Unknown\\\" category options like \\\"Unknown sex\\\" and \\\"Unknown age\\\".\",\"recommendation\":\"Using the maintenance app, assign the missing category options to an appropriate category option group within the affected category option group set.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSI\"},{\"name\":\"maps_not_viewed_one_year\",\"displayName\":\"Maps which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Maps which have not been viewed in the past 12 months\",\"introduction\":\"Maps should be regularly viewed in the system. In many cases, users may create maps for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system and being difficult to find in the Maps app.\",\"recommendation\":\"Unused maps can be removed directly using the Maps app by a user with sufficient authority. If maps are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"maps\",\"isSlow\":false,\"code\":\"MNVOY\"},{\"name\":\"indicators_exact_duplicates\",\"displayName\":\"Indicators with the same formula.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same formula.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check shows indicators which have the exact same formulas. Spaces which are present are removed prior to comparison.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Consider deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IED\"},{\"name\":\"indicators_violating_exclusive_group_sets\",\"displayName\":\"Indicators with conflicting exclusive group sets\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that are members of multiple exclusive indicator groups\",\"recommendation\":\"Remove the indicator from all but one exclusive indicator group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IVEGS\"},{\"name\":\"category_options_excess_groupset_membership\",\"displayName\":\"Category options which belong to multiple groups in a category option group set.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category options which belong to multiple groups in a category option group set.\",\"introduction\":\"Category options should belong to exactly one category option group which are part of a category option group set. If the category option belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the category option in the details list to exactly one category option group within each group set.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"COEGM\"},{\"name\":\"periods_duplicates\",\"displayName\":\"Duplicate Periods\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Lists all periods duplicates which have identical type and start date\",\"recommendation\":\"Make sure all database references are moved to one of the duplicates before deleting the unused duplicates\",\"isSlow\":false,\"code\":\"PD\"},{\"name\":\"program_rules_without_action\",\"displayName\":\"Program rules lacking an action\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that are not connected to any program rule action\",\"recommendation\":\"Connect the rule to an action or consider removing the rule\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWA\"},{\"name\":\"orgunits_multiple_roots\",\"displayName\":\"The organisation unit hierarchy should have a single root.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"The organisation unit hierarchy should have a single root.\",\"introduction\":\"Every DHIS2 system should have a single root organisation unit. This means a single organisation unit from which all other branches of the hierarchy are descendants.\",\"recommendation\":\"Once you have decided which organisation unit should be the real root of the organisation unit hierarchy, you should update the parent organisation unit. This can be done by using the DHIS2 API or my updating the value directly in the `organisationunit` table.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMR\"},{\"name\":\"validation_rules_with_invalid_left_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a left side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWILSE\"},{\"name\":\"program_rule_actions_without_stage_id\",\"displayName\":\"Program rules with actions lacking a program stage\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a program stage but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWSI\"},{\"name\":\"indicator_groups_scarce\",\"displayName\":\"Indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups should have at least two members.\",\"introduction\":\"All indicator groups should be composed of at least two indicators.\",\"recommendation\":\"Considering removing groups with zero or one groups, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"indicatorGroups\",\"isSlow\":false,\"code\":\"IGS\"},{\"name\":\"option_sets_wrong_sort_order\",\"displayName\":\"Option sets with possibly wrong sort order.\",\"section\":\"Option sets\",\"severity\":\"SEVERE\",\"description\":\"Option sets with possibly wrong sort order.\",\"introduction\":\"Option sets contain options which should be ordered sequentially. The sort_order property should always start with 1 and have a sequential sequence. If there are three options in the option set, then the sort order should be 1,2,3. \\nIn certain circumstances, options may be deleted from an option set, and the sort order may become corrupted. This may lead to a situation where it becomes impossible to update the option set from the maintenance app, and may lead to problems when attempting to using the option set in the data entry app.\",\"recommendation\":\"If it is possible to open the option set in the maintenance app, you can resort the option set, which should correct the problem. Another possible solution is to directly update the sort_order property of in the `optionset` table in the database, ensuring that a valid sequence is present for all options in the option set.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSWSO\"},{\"name\":\"periods_same_start_end_date\",\"displayName\":\"Periods with the same start and end dates\",\"section\":\"Periods\",\"severity\":\"CRITICAL\",\"description\":\"Periods with the same start and end dates\",\"introduction\":\"Different periods should not have exactly the same start and end date.\",\"recommendation\":\"All references to the duplicate periods should be removed from the system and reassigned. It is recommended to use the period with the lower periodid.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PSSED\"},{\"name\":\"program_indicators_with_invalid_expressions\",\"displayName\":\"Program indicators with invalid expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have an invalid expression\",\"recommendation\":\"Check that the expression evaluates to a number\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIE\"},{\"name\":\"program_rule_actions_without_notification\",\"displayName\":\"Program rule with actions lacking a notification template\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires a notification template but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWN\"},{\"name\":\"indicator_no_analysis\",\"displayName\":\"Indicators not used in analytical objects.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not used in analytical objects.\",\"introduction\":\"Indicators should be used to produce some type of analytical output (charts, maps, pivot tables). Note: indicators used in datasets to provide feedback during data entry are not counted as being used in analytical objects.\",\"recommendation\":\"Indicators that are not routinely being used for analysis should be reviewed to determine if they are useful and needed. If these are meant to be used for routine review, then associated outputs should be created using them. If these indicators are not going to be used for any type of information review, and are not used in data sets for feedback during data entry, consideration should be made to delete them.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"INA\"},{\"name\":\"user_groups_scarce\",\"displayName\":\"User groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"User groups should have at least two members.\",\"introduction\":\"Generally, user groups should contain two or more users.\",\"recommendation\":\"Considering removing user groups with less than two users, or alternatively, add additional users to the group to make it more useful.\",\"issuesIdType\":\"userGroups\",\"isSlow\":false,\"code\":\"UGS\"},{\"name\":\"data_elements_aggregate_with_different_period_types\",\"displayName\":\"Aggregate data elements which belong to datasets with different period types.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"SEVERE\",\"description\":\"Aggregate data elements which belong to datasets with different period types.\",\"introduction\":\"Data elements should not belong to datasets with different period types.\",\"recommendation\":\"If you need to collect data with different period types (e.g. weekly and monthly) you should use different data elements for each period type. In general, it is not recommended to collect data with different frequencies, since in general, data collected at higher frequencies (e.g. weekly) can be aggregated to data with lower frequencies (e.g yearly).\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAWDPT\"},{\"name\":\"validation_rules_without_groups\",\"displayName\":\"Validation rules lacking groups\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that are not member of at least one validation rule group\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWG\"},{\"name\":\"category_option_combos_disjoint\",\"displayName\":\"Category option combinations with disjoint associations.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with disjoint associations.\",\"introduction\":\"Under certain circumstances, category option combinations may exist in the system, but not have any direct association with category options which are associated with their category combination. This situation usually occurs when category options have been added to a category and then the category is added to a category combination. New category option combinations are created in the system at this point. If any of the category options are then removed in one of the underlying categories, a so-called disjoint category option combination may result. This is a category option combination which has no direct association with any category options in any of the categories associated with the category combination.\",\"recommendation\":\"The disjoint category option combinations should be removed from the system if possible. However, if any data is associated with the category option combination, a determination will need to be made in regards of how to deal with this data.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"COCD\"},{\"name\":\"options_sets_unused\",\"displayName\":\"Option sets which are not used\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Option sets which are not used\",\"introduction\":\"Option sets should be used for some purpose. The may be used by data elements, comments, attributes, or tracked entity attributes.\",\"recommendation\":\"Consider deleting unused option sets, or alternatively, ensure that they have been properly assigned.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSU\"},{\"name\":\"catoptioncombos_no_catcombo\",\"displayName\":\"Category options combinations with no category combination.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options combinations with no category combination.\",\"introduction\":\"All category option combinations should be associated with a category combo. In certain cases, when category combinations are deleted,the linkage between a category option combination and a category combination may become corrupted.\",\"recommendation\":\"Check if any data is associated with the category option combination in question. Likely, the data should either be deleted or migrated to a valid category option combination. Any data which is associated with any of these category option combinations will not be available through either the data entry modules or any of the analytical apps.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CNC\"},{\"name\":\"data_elements_violating_exclusive_group_sets\",\"displayName\":\"Data elements with conflicting exclusive group sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are a members of more than one exclusive data element set belonging to the same data element group set\",\"recommendation\":\"Either remove the data element from all but one exclusive group set or consider if the set really should be an exclusive group set\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEVEGS\"},{\"name\":\"categories_same_category_options\",\"displayName\":\"Categories with the same category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with the same category options\",\"introduction\":\"Categories with the exact same category options should be considered to be merged. Categories with the exact same category options may be easily confused by users in analysis. The details view will provide a list of categories which have the exact same category options. For each duplicated category a number in parentheses such as (1) will indicate which categories belong to duplicated groups.\",\"recommendation\":\"If category combinations have already been created with duplicative categories,\\nit is recommended that you do not take any action, but rather ensure\\nthat users understand that there may be two category combinations which are duplicative.\\n\\nIf you choose to merge the duplicative category combinations, you would need to \\nremap all category option combinations from the category combo which you wish to \\nremove, to the one which you wish to keep. \\n\\nIf one of the categories is not in use in any category combination, it should\\nconsider to be removed from the system.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CSCO\"},{\"name\":\"visualizations_not_viewed_one_year\",\"displayName\":\"Visualizations which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Visualizations which have not been viewed in the past 12 months\",\"introduction\":\"Visualizations should be regularly viewed in the system. In many cases, users may create charts for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to charts being difficult to find in the visualization app.\",\"recommendation\":\"Unused charts can be removed directly using the data visualization app by a user with sufficient authority. If charts are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"visualizations\",\"isSlow\":false,\"code\":\"VNVOY\"},{\"name\":\"categories_one_default_category_option\",\"displayName\":\"Only one default category option should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option with UID \\\"xYerKDKCefk\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option or move all references to category option \\\"xYerKDKCefk\\\" and then remove the unused conflicting category option.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CODCO\"},{\"name\":\"orgunits_multiple_spaces\",\"displayName\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"introduction\":\"Names and/or shortnames of organisation units should not contain multiple spaces. They are superfluous and may complicate the location of organisation units when they are searched.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the multiple spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMS\"},{\"name\":\"data_elements_aggregate_abandoned\",\"displayName\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"introduction\":\"Data elements are considered to be abandoned when they have not been edited in at least 100 days and do not have any data values associated with them. Often, these are the result of new or changed configurations that have been abandoned at some point.\",\"recommendation\":\"Data elements that have no data associated with them and which there are no plans to start using for data collection should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAA\"},{\"name\":\"data_elements_assigned_to_data_sets_with_different_period_types\",\"displayName\":\"Data elements assigned to data sets with different period type\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are assigned to at least one data set that has a different period type\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEATDSWDPT\"},{\"name\":\"data_elements_aggregate_no_groups\",\"displayName\":\"Aggregate data elements not in any data element groups.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not in any data element groups.\",\"introduction\":\"All data elements should be in a data element group. This allows users to find the data elements more easily in analysis\\n apps and also contributes to having more complete data element group sets.\\n Maintenance operations can also be made more efficient by applying\\n bulk settings (ex. sharing) to all data elements within a data element group.\",\"recommendation\":\"Data elements that are not in a data element group should be added to a relevant data element group. If the data elements are not needed, they should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANG\"},{\"name\":\"category_options_shared_within_category_combo\",\"displayName\":\"Category combinations with categories which share the same category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category combinations with categories which share the same category options.\",\"introduction\":\"As a general rule, category options should be reused where possible between categories. The exception to this rule however, is when you have a category combo with multiple categories, and within those categories, a category option is shared. As a simple example, lets say you have a category called \\\"Sex\\\" with options \\\"Male\\\"\\\", \\\"Female\\\" and \\\"Unknown\\\". There is also a second category called \\\"Age\\\" with options \\\"<15\\\", \\\"15+\\\", and \\\"Unknown\\\". A category combination called \\\"Age/Sex\\\" is then created with these two categories, which share the option \\\"Unknown\\\". This situation should be avoided, as it creates issues when analyzing data.\",\"recommendation\":\"The recommended approach to dealing with this situation is to create a new category combination, using two new categories. Using the example from the introduction, you should create two new category options called \\\"Unknown age\\\" and \\\"Unknown sex\\\". A new category combination can then be created with these new categories, which do not share category options. All data which is potentially associated with the old category combinations, would need to be reassigned to the new category option combinations. Any analytical objects which use the categories to be removed would also need to be updated.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"COSWCC\"},{\"name\":\"orgunits_null_island\",\"displayName\":\"Organisation units located within 100 km of Null Island (0,0).\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units located within 100 km of Null Island (0,0).\",\"introduction\":\"A common problem when importing coordinates is the inclusion of coordinates situated around the point of [Null Island](https://en.wikipedia.org/wiki/Null_Island). This is the point on the Earth's surface where the Prime Meridian and Equator intersect with a latitude of 0 and a longitude of 0. The point also happens to be situated currently in the middle of the ocean. This query identifies any points located within 100 km of the point having latitude and longitude equal to zero.\",\"recommendation\":\"Update the coordinates of the affected organization unit to the correct location.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONI\"},{\"name\":\"program_rule_actions_without_section\",\"displayName\":\"Program rules with actions lacking a program stage section\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a section but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWS\"},{\"name\":\"periods_3y_future\",\"displayName\":\"Periods which are more than three years in the future.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are more than three years in the future.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\nfar future. Different data entry clients may not properly validate for periods\\nwhich are in the future, and thus any periods in the future should be reviewed.\\nIn some cases, data may be valid for future dates, e.g. targets which are set for the\\nnext fiscal year.\",\"recommendation\":\"If any periods exist in the system in the future, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\\n\\nIn many cases, clients may mean to transmit\\ndata for January 2021, but due to data entry errors, January 2031 is selected. Thus,\\nany data in the far future should be investigated to ensure it does not result\\nfrom data entry errors.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"P3F\"},{\"name\":\"orgunits_trailing_spaces\",\"displayName\":\"Organisation units should not have trailing spaces.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have trailing spaces.\",\"introduction\":\"Trailing spaces in organisation units are superfluous.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the trailing spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OTS\"},{\"name\":\"validation_rule_groups_scarce\",\"displayName\":\"Validation rule should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Validation rule should have at least two members.\",\"introduction\":\"Generally validation rule groups should be composed of multiple validation rules.\",\"recommendation\":\"Considering removing groups which are empty or which have a single member. Alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"validationRuleGroups\",\"isSlow\":false,\"code\":\"VRGS\"},{\"name\":\"indicators_with_invalid_numerator\",\"displayName\":\"Indicators with invalid numerator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators where the numerator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWIN\"},{\"name\":\"categories_one_default_category_combo\",\"displayName\":\"Only one default category combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category combo should exist\",\"introduction\":\"There should only exist one category combo with name and code \\\"default\\\".\",\"recommendation\":\"Only the category combo with UID \\\"bjDvmb4bfuf\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category combo or move all references to category combo \\\"bjDvmb4bfuf\\\" and then remove the unused conflicting category combo.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CODCC\"},{\"name\":\"data_elements_without_data_sets\",\"displayName\":\"Data elements lacking data Sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data sets\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWDS\"},{\"name\":\"category_combos_unused\",\"displayName\":\"Category combinations not used by other metadata objects\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category combinations not used by other metadata objects\",\"introduction\":\"Category combinations which are unused in any datasets, data elements, programs or data approval workflows may be safe to delete. In some cases, category combinations may be created, but never actually used for anything. This may lead to situations where users and implementers are confused about which category combination should actually be used. In general, it should be safe to delete unused category combinations, except in situations where existing data has been associated with them.\",\"recommendation\":\"Check to see if any data is associated with the category combination before attempting to delete it. Category combinations which are not currently used in any metadata objects may still be valid for legacy reasons, but they should be reviewed to be sure they are still needed. Otherwise, it should be safe to remove them from the system.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCU\"},{\"name\":\"category_option_groups_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option groups should be composed of at least two category options. There can however be legitimate cases when a single category option is part of a group, especially in cases where there is a direct mapping between age bands and category options.\",\"recommendation\":\"Considering removing groups with zero or one category options, or alternatively, add additional category options to the group to make it more useful.\",\"issuesIdType\":\"categoryOptionGroups\",\"isSlow\":false,\"code\":\"COGS\"},{\"name\":\"datasets_empty\",\"displayName\":\"Datasets with no data elements.\",\"section\":\"Data sets\",\"severity\":\"WARNING\",\"description\":\"Datasets with no data elements.\",\"introduction\":\"All datasets should have data elements assigned to them.\",\"recommendation\":\"Remove empty datasets, or alternatively, assign data elements to them.\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DE\"},{\"name\":\"indicators_without_groups\",\"displayName\":\"Indicators lacking groups\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that do not have at least one group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWG\"},{\"name\":\"orgunit_groups_scarce\",\"displayName\":\"Organisation unit groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Organisation unit groups should have at least two members.\",\"introduction\":\"Generally, organisation unit groups should be composed of multiple organisation units.\",\"recommendation\":\"Considering removing groups with zero or one organisation units, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OGS\"},{\"name\":\"program_rules_without_priority\",\"displayName\":\"Program rules lacking a priority setting\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules with action type \\\"assign\\\" where the rule priority is not yet set\",\"recommendation\":\"Set a priority for the program rule(s)\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWP\"},{\"name\":\"categories_unique_category_combo\",\"displayName\":\"Different category combinations should not have the exact same combination of categories.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Different category combinations should not have the exact same combination of categories.\",\"introduction\":\"Category combinations should be a unique combination of categories. If two or more category combinations contain the exact same set of categories, this would be considered to be duplicative and potentially confusing to users.\",\"recommendation\":\"One category combo is kept, all references are updated to use this combo and other combos are removed.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CUCC\"},{\"name\":\"indicator_group_sets_scarce\",\"displayName\":\"Indicator groups sets should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups sets should have at least two members.\",\"introduction\":\"All indicator group set should be composed of at least two indicators groups.\",\"recommendation\":\"Considering removing indicator group sets with less than two indicator groups, or alternatively, add additional indicator groups to the indicator group set to make it more useful.\",\"issuesIdType\":\"indicatorGroupSets\",\"isSlow\":false,\"code\":\"IGSS\"},{\"name\":\"validation_rules_with_invalid_right_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a right side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWIRSE\"},{\"name\":\"data_elements_aggregate_aggregation_operator\",\"displayName\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"introduction\":\"Data elements which are not numeric (text, dates, etc) should have an aggregation operator set to NONE. Data elements which are able to be aggregated (numbers, integers, etc) should have an aggregation operator set to something other than NONE, most often SUM.\",\"recommendation\":\"Open the affected data elements in the Maintenance App and change their aggregation type to an appropriate type. Alternatively, these can be altered via the API.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAAO\"},{\"name\":\"org_unit_groups_without_group_sets\",\"displayName\":\"Organisation unit groups lacking group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation unit groups that aren't member of at least one organisation unit group set\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OUGWGS\"},{\"name\":\"program_rule_variables_without_attribute\",\"displayName\":\"Program rule variables lacking an attribute\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring an attribute source but that is not yet linked to an attribute\",\"recommendation\":\"Assign an attribute to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWA\"},{\"name\":\"program_indicator_groups_scarce\",\"displayName\":\"Program indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Program indicator groups should have at least two members.\",\"introduction\":\"Program indicator groups should generally be composed of two or more program indicators.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"programIndicatorGroups\",\"isSlow\":false,\"code\":\"PIGS\"},{\"name\":\"program_rules_no_expression\",\"displayName\":\"Program rules with no expression.\",\"section\":\"Program rules\",\"severity\":\"WARNING\",\"description\":\"Program rules with no expression.\",\"introduction\":\"All program rules should have an expression. Expressions are used by program rules to determine when they should be triggered. Program rules with no expression have no purpose.\",\"recommendation\":\"Using the DHIS2 user interface, assign an expression to each of the program rules which is missing one. Otherwise, if it is safe to delete the program rule with no expression, it is recommended to remove it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNE\"},{\"name\":\"data_elements_aggregate_no_data\",\"displayName\":\"Aggregate data elements with NO data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements with NO data values.\",\"introduction\":\"Data elements should generally always be associated with data values. If data elements exist in a data set which is active, but there are no data values associated with them, they may not be part of the data entry screens. Alternatively, the data element may have been added but never been associated with a dataset.\",\"recommendation\":\"Consider removing data elements with no data values.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAND\"},{\"name\":\"program_indicators_without_expression\",\"displayName\":\"Program indicators lacking an expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have no expression set yet\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWE\"},{\"name\":\"periods_distant_past\",\"displayName\":\"Periods which are in the distant past.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are in the distant past.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\ndistant past. Different data entry clients may not properly validate for periods\\nwhich are in the distant past, and thus these periods should be triaged to ensure\\nthat data has not been entered against them by mistake.\",\"recommendation\":\"If any periods exist in the system in the distant past, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PDP\"},{\"name\":\"org_units_being_orphaned\",\"displayName\":\"Orphaned organisation units\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that aren't level 1 units but that lack a parent so that they are not connected to the rest of the organisation tree\",\"recommendation\":\"Find (or create) and set the correct parent for the orphaned organisation unit(s). Eventually this is also caused by having set the wrong level.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUBO\"},{\"name\":\"cocs_wrong_cardinality\",\"displayName\":\"Category option combinations with incorrect cardinality.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with incorrect cardinality.\",\"introduction\":\"All category option combinations should have exactly the same number of category option associations as the number of categories in the category combination. If there are two categories in a category combination, then every category option combination should have exactly two category options.\\nCategory option combinations with the incorrect cardinality are usually the result of a category combination having been created, and then modified later. Suppose that two categories are used to create a category combination. Each category option combination of this category combo will have two category options. If an additional category is added to the category combination later, new category option combinations with three category options will be created and associated with this category combo. The original category option combinations would be considered to be invalid.\",\"recommendation\":\"Category option combinations which have an incorrect cardinality will be ignored by the DHIS2 analytics system and should be removed.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CWC\"},{\"name\":\"dashboards_not_viewed_one_year\",\"displayName\":\"Dashboards which have not been actively viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Dashboards which have not been actively viewed in the past 12 months\",\"introduction\":\"Dashboards should be regularly viewed in the system. In many cases, users may create dashboards for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to useful dashboards being difficult to find. This check identifies any dashboards which have not been viewed in the past year.\",\"recommendation\":\"Unused dashboards can be deleted in the entirety from the main dashboard app by clicking on the \\\"Edit\\\" button and choosing \\\"Delete\\\". Note that this process cannot be undone! Another option would be to alter the sharing of the dashboard so that it is not visible to any user.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNVOY\"}]", - "responseSize": 66022, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - } -] diff --git a/cypress/fixtures/network/40/user_job_actions.json b/cypress/fixtures/network/40/user_job_actions.json deleted file mode 100644 index f02a53265..000000000 --- a/cypress/fixtures/network/40/user_job_actions.json +++ /dev/null @@ -1,340 +0,0 @@ -[ - { - "path": "/api/40/systemSettings/helpPageLink", - "featureName": "User job actions", - "static": false, - "count": 5, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"helpPageLink\":\"https://dhis2.github.io/dhis2-docs/master/en/user/html/dhis2_user_manual_en.html\"}", - "responseSize": 99, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/analytics/tableTypes", - "featureName": "User job actions", - "static": false, - "count": 5, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"]", - "responseSize": 122, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/pushAnalysis?paging=false", - "featureName": "User job actions", - "static": false, - "count": 5, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"pushAnalysis\":[{\"displayName\":\"Immunization Key Indicators Monthly Report\",\"id\":\"jtcMAKhWwnc\"}]}", - "responseSize": 98, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictorGroups?paging=false", - "featureName": "User job actions", - "static": false, - "count": 5, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictorGroups\":[]}", - "responseSize": 22, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/validationRuleGroups?paging=false", - "featureName": "User job actions", - "static": false, - "count": 5, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"validationRuleGroups\":[{\"displayName\":\"ANC\",\"id\":\"UP1lctvalPn\"},{\"displayName\":\"Commodities\",\"id\":\"xcpl667ccfF\"},{\"displayName\":\"Critical event\",\"id\":\"xWtt9c443Lt\"},{\"displayName\":\"District stock\",\"id\":\"mEtdbIDDhix\"},{\"displayName\":\"Epidemic disease outbreak\",\"id\":\"y2yQIm79VTW\"},{\"displayName\":\"Facility Stock\",\"id\":\"SqyI8HKqI4g\"},{\"displayName\":\"Immunisation\",\"id\":\"UiOSY1iIdub\"},{\"displayName\":\"Infectious disease outbreak\",\"id\":\"WUZXEFdn1PX\"},{\"displayName\":\"Malaria\",\"id\":\"zlaSof6qLqF\"},{\"displayName\":\"Population\",\"id\":\"D3bItmtBpsW\"},{\"displayName\":\"TB\",\"id\":\"IMF6p1MqoHl\"},{\"displayName\":\"Testing\",\"id\":\"nMDkAJXsmlR\"}]}", - "responseSize": 628, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictors?paging=false", - "featureName": "User job actions", - "static": false, - "count": 5, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictors\":[{\"displayName\":\"Malaria Outbreak Threshold\",\"id\":\"tEK1OEqS4O1\"}]}", - "responseSize": 80, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations/jobTypes?fields=*&paging=false", - "featureName": "User job actions", - "static": false, - "count": 5, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"jobTypes\":[{\"name\":\"Data integrity\",\"jobType\":\"DATA_INTEGRITY\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"checks\",\"fieldName\":\"Checks\",\"persisted\":false,\"collectionName\":\"checks\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/dataIntegrity\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.parameters.DataIntegrityJobParameters$DataIntegrityReportType\",\"name\":\"type\",\"fieldName\":\"Type\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"REPORT\",\"SUMMARY\",\"DETAILS\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Resource table\",\"jobType\":\"RESOURCE_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Analytics table\",\"jobType\":\"ANALYTICS_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"skipPrograms\",\"fieldName\":\"Skip programs\",\"persisted\":false,\"collectionName\":\"skipPrograms\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/programs\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipResourceTables\",\"fieldName\":\"Skip resource tables\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Continuous analytics table\",\"jobType\":\"CONTINUOUS_ANALYTICS_TABLE\",\"schedulingType\":\"FIXED_DELAY\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"fullUpdateHourOfDay\",\"fieldName\":\"Full update hour of day\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Data sync\",\"jobType\":\"DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker programs data sync\",\"jobType\":\"TRACKER_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Event programs data sync\",\"jobType\":\"EVENT_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Meta data sync\",\"jobType\":\"META_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"trackerProgramPageSize\",\"fieldName\":\"Tracker program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"eventProgramPageSize\",\"fieldName\":\"Event program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"dataValuesPageSize\",\"fieldName\":\"Data values page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Aggregate data exchange\",\"jobType\":\"AGGREGATE_DATA_EXCHANGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"dataExchangeIds\",\"fieldName\":\"Data exchange ids\",\"persisted\":false,\"collectionName\":\"dataExchangeIds\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/aggregateDataExchanges\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Send scheduled message\",\"jobType\":\"SEND_SCHEDULED_MESSAGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Program notifications\",\"jobType\":\"PROGRAM_NOTIFICATIONS\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Monitoring\",\"jobType\":\"MONITORING\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"validationRuleGroups\",\"fieldName\":\"Validation rule groups\",\"persisted\":false,\"collectionName\":\"validationRuleGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/validationRuleGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"sendNotifications\",\"fieldName\":\"Send notifications\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"persistResults\",\"fieldName\":\"Persist results\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Push analysis\",\"jobType\":\"PUSH_ANALYSIS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"pushAnalysis\",\"fieldName\":\"Push analysis\",\"persisted\":false,\"collectionName\":\"pushAnalysis\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/pushAnalysis\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker search optimization\",\"jobType\":\"TRACKER_SEARCH_OPTIMIZATION\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"attributes\",\"fieldName\":\"Attributes\",\"persisted\":false,\"collectionName\":\"attributes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/trackedEntityAttributes/indexable\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipIndexDeletion\",\"fieldName\":\"Skip index deletion\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Predictor\",\"jobType\":\"PREDICTOR\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictors\",\"fieldName\":\"Predictors\",\"persisted\":false,\"collectionName\":\"predictors\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictors\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictorGroups\",\"fieldName\":\"Predictor groups\",\"persisted\":false,\"collectionName\":\"predictorGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictorGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Disable inactive users\",\"jobType\":\"DISABLE_INACTIVE_USERS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"inactiveMonths\",\"fieldName\":\"Inactive months\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"reminderDaysBefore\",\"fieldName\":\"Reminder days before\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Test\",\"jobType\":\"TEST\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Long\",\"name\":\"waitMillis\",\"fieldName\":\"Wait millis\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"stages\",\"fieldName\":\"Stages\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtStage\",\"fieldName\":\"Fail at stage\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"items\",\"fieldName\":\"Items\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtItem\",\"fieldName\":\"Fail at item\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Long\",\"name\":\"itemDuration\",\"fieldName\":\"Item duration\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.String\",\"name\":\"failWithMessage\",\"fieldName\":\"Fail with message\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"failWithException\",\"fieldName\":\"Fail with exception\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.JobProgress$FailurePolicy\",\"name\":\"failWithPolicy\",\"fieldName\":\"Fail with policy\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"PARENT\",\"FAIL\",\"SKIP_STAGE\",\"SKIP_ITEM\",\"SKIP_ITEM_OUTLIER\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"runStagesParallel\",\"fieldName\":\"Run stages parallel\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]}]}", - "responseSize": 24994, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/dataIntegrity", - "featureName": "User job actions", - "static": false, - "count": 5, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[{\"name\":\"orgunits_invalid_geometry\",\"displayName\":\"Organisation units with invalid geometry.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with invalid geometry.\",\"introduction\":\"DHIS2 uses the PostGIS database extension to manage the geographical information associated\\nwith organisation units. There are various reasons why geometries may be considered to be\\ninvalid including self-inclusions, self-intersections, and sliver polygons. Please see the\\nPostGIS documentation for a more in-depth discussion on this topic.\\n\\nInvalid geometry is not always a problem and may be able to be ignored, however, it has been observed in certain systems\\nthat this can lead to problems in analytics. If you are experiencing issues when generating analytics\\ntables, and see errors related to invalid geometries, you will need to either remove the invalid geometry,\\nor fix it.\",\"recommendation\":\"Update the geometry of the affected organisation units to a valid geometry. It may be possible to use the PostGIS function `ST_MakeValid` to automatically fix the problem. However, in other cases the geometry may need to be edited in a GIS tool, and then updated again in DHIS2.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OIG\"},{\"name\":\"data_elements_without_groups\",\"displayName\":\"Data elements lacking groups\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data element groups\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWG\"},{\"name\":\"orgunit_group_sets_excess_groups\",\"displayName\":\"Organisation units which belong to multiple groups in a group set.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which belong to multiple groups in a group set.\",\"introduction\":\"Organisation units should belong to exactly one group within each organisation unit group set of which they are a member. If the organisation unit belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the organisation units in the details list to exactly one group within each group set membership.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OGSEG\"},{\"name\":\"validation_rules_missing_value_strategy_null\",\"displayName\":\"All validation rule expressions should have a missing value strategy.\",\"section\":\"Validation rules\",\"severity\":\"SEVERE\",\"description\":\"All validation rule expressions should have a missing value strategy.\",\"introduction\":\"Validation rules are composed of a left and right side expression. In certain systems the missing value strategy may not be defined. This may lead to an exception during validation rule analysis. The affected validation rules should be corrected to with an appropriate missing value strategy.\",\"recommendation\":\"Using the results of the the details SQL view, identify the affected validation rules and which side of the rule the missing value strategy has not been specified. Using the maintenance app, make the appropriate corrections and save the rule.\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRMVSN\"},{\"name\":\"category_combos_being_invalid\",\"displayName\":\"Invalid Category-combos\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Lists all category-combos that are invalid\",\"recommendation\":\"Make sure the category combo is assigned to at least one category and that all categories have category options \",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCBI\"},{\"name\":\"data_elements_in_data_set_not_in_form\",\"displayName\":\"Data sets with data elements not in data entry form\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that have data elements which are neither a member of the set's data entry form nor a member of the sets section\",\"recommendation\":\"Either remove the data elements in question or make them a member of the set's form or section\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DEIDSNIF\"},{\"name\":\"categories_no_options\",\"displayName\":\"Categories with no category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with no category options\",\"introduction\":\"Categories should always have at least one category option.\",\"recommendation\":\"Any categories without category options should either be removed from the system if they are not in use. Otherwise, appropriate category options should be added to the category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CNO\"},{\"name\":\"data_elements_aggregate_no_analysis\",\"displayName\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"introduction\":\"All aggregate data elements that are captured in DHIS2 should be used to produce some type of analysis output (charts, maps, tables). This can be by using them directly in an output, or by having them contribute to an indicator calculation that is used an output.\",\"recommendation\":\"Data elements that are not routinely being reviewed in analysis, either directly or indirectly through indicators, should be reviewed to determine if they still need to be collected. If these are meant to be used in routine review, then associated outputs should be created using them. If these data elements are not going to be used for any type of information review, consideration should be made to either archive them or delete them.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANA\"},{\"name\":\"indicators_duplicated_terms\",\"displayName\":\"Indicators with the same terms.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same terms.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check attempts to identify indicators with the same formulas, regardless of the order of their their terms. Suppose you have an indicator which calculates total ANC attendance: ANC Total = ANC1 + ANC2 + ANC3 Suppose then another indicator exists in the system, which has been defined as: ANC Totals = ANC3 + ANC2 + ANC1 These two indicators are equivalent, and will produce the same result, and are thus considered to be duplicated.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Considered deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IDT\"},{\"name\":\"program_rules_no_action\",\"displayName\":\"Program rules with no action.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules with no action.\",\"introduction\":\"All program rules should have an action.\",\"recommendation\":\"Using the DHIS2 user interface, assign an action to each of the program rules which is missing one. Alternatively, if the program rule is not in use, then consider removing it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNA\"},{\"name\":\"orgunits_compulsory_group_count\",\"displayName\":\"Organisation units that are not in all compulsory orgunit group sets\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Orgunits that are not in all compulsory orgunit group sets\",\"introduction\":\"If any organisation unit groups have been marked as compulsory, each and every organisation unit should belong to exactly one group within each compulsory organisation unit group set. Assume we have created a group set called \\\"Ownership\\\" with two groups \\\"Public\\\" and \\\"Private\\\". Each and every organisation unit contained in the hierarchy must belong to either Public or Private (but not both). When organisation unit are not part of a group set, results in the analytics apps will not be correct if the organisation unit group set is used for aggregation.\",\"recommendation\":\"For each of the organisation units identified in the details query, you should assign the appropriate organisation unit group within the group set. Alternatively, if the group set should not be compulsory, you should change this attribute.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OCGC\"},{\"name\":\"orgunits_no_coordinates\",\"displayName\":\"Organisation units with no coordinates.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with no coordinates.\",\"introduction\":\"Ideally, all organisation units contained in the DHIS2 hierarchy should have a valid\\nset of coordinates. Usually for all organisation units above the facility level,\\nthese coordinates should be a polygon which provides the boundary of the organisation\\nunit. For facilities, these are usually represented as point coordinates.\\n\\nThere can obviously be exceptions to this rule. Mobile health facilities may not have\\na fixed location. Community health workers or wards below the facility level\\nmay also not have a defined or definable coordinate.\\n\\nThis check is intended to allow you to review all organisation units which do\\nnot have any coordinates and make a determination as to whether they should be updated.\",\"recommendation\":\"Where appropriate, update the geometry of each organisation unit with a valid geometry.\\nYou may need to contact the appropriate local government office to obtain a copy\\nof district boundaries, commonly referred to as \\\"shape files\\\". Another possibility\\nis to use freely available boundary files from GADM (https://gadm.org)\\n\\nIf facilities are missing coordinates, it may be possible to obtain these from\\nthe facility staff using their smart phone to get the coordinates. Images\\nfrom Google Maps can also often be used to estimate the position of a facility,\\nassuming that you have good enough resolution and local knowledge of where\\nit is located.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONC\"},{\"name\":\"data_sets_not_assigned_to_org_units\",\"displayName\":\"Data sets not assigned to organisation units\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that are not assigned to any organisation units\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DSNATOU\"},{\"name\":\"dashboards_no_items\",\"displayName\":\"Dashboards with no items.\",\"section\":\"Dashboards\",\"severity\":\"INFO\",\"description\":\"Dashboards with no items.\",\"introduction\":\"All dashboards should have content on them. Dashboards without any content do not serve any purpose, and can make it more difficult to find relevant dashboards with content.\",\"recommendation\":\"Dashboards without content that have not been modified in the last 14 days should be considered for deletion.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNI\"},{\"name\":\"orgunits_same_name_and_parent\",\"displayName\":\"Organisation units should not have the same name and parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have the same name and parent.\",\"introduction\":\"Organisation units may have exactly the same name. This may become confusing to users, particularly if the organisation unit has the same name and same parent. This can easily lead to data entry or analysis mistakes as users have no way to distinguish between the two organisation units.\",\"recommendation\":\"Rename identically named organisation units which share the same parent using the maintenance app.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OSNAP\"},{\"name\":\"indicators_not_grouped\",\"displayName\":\"Indicators not in any groups.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not in any groups.\",\"introduction\":\"All indicators should be in an indicator group. This allows users to find the indicators more easily in analysis apps and also contributes to having more complete indicators group sets. Maintenance operations can also be made more efficient by applying bulk settings (ex. sharing, filtering) to all indicators within an indicator group.\",\"recommendation\":\"Indicators that are not in a indicator group should be added to a relevant indicator group. If the indicators are not needed, they should be deleted.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"ING\"},{\"name\":\"category_option_group_sets_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option group sets should be composed of at least two category option groups.\",\"recommendation\":\"Considering removing groups with zero or one category option groups, or alternatively, add additional category option groups to the group set to make it more useful.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSS\"},{\"name\":\"org_units_without_groups\",\"displayName\":\"Organisation units lacking groups\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are not connected to at least one group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWG\"},{\"name\":\"data_elements_excess_groupset_membership\",\"displayName\":\"Data elements which belong to multiple groups in a group set.\",\"section\":\"data_elements\",\"severity\":\"SEVERE\",\"description\":\"Data elements which belong to multiple groups in a group set.\",\"introduction\":\"Data elements should belong to exactly one group within each data element group set of which they are a member. If the data element belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the data elements in the details list to exactly one data element group within each group set.\",\"issuesIdType\":\"data_elements_aggregate\",\"isSlow\":false,\"code\":\"DEEGM\"},{\"name\":\"data_element_groups_scarce\",\"displayName\":\"Data element groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Data element groups should have at least two members.\",\"introduction\":\"All data element groups should be composed of at least two data elements.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"dataElementGroups\",\"isSlow\":false,\"code\":\"DEGS\"},{\"name\":\"orgunits_not_contained_by_parent\",\"displayName\":\"Organisation units with point coordinates should be contained by their parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with point coordinates should be contained by their parent.\",\"introduction\":\"Facilities are often represented as points in the DHIS2 hierarchy. Their parent organisation units geometry should contain all facilities which have been associated with them.\",\"recommendation\":\"Often boundary files are simplified when they are uploaded into DHIS2. This process may result in\\nfacilities which are located close to the border of a given district to fall outside of the district\\nwhen the boundary is simplified. This is considered to be more of a cosmetic problem for most DHIS2\\ninstallations, but could become an issue if any geospatial analysis is attempted using the\\nboundaries and point coordinates.\\n\\nIn cases where the facility falls outside of its parent's boundary\\nyou should confirm that the coordinates are correct. If the location is close to the boundary, you\\nmay want to reconsider how the boundary files have been simplified. Otherwise, if the location of\\nthe facility is completely incorrect, it should be rectified.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONCBP\"},{\"name\":\"program_rules_message_no_template\",\"displayName\":\"Program rules actions which should send or schedule a message without a message template.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules actions which should send or schedule a message without a message template.\",\"introduction\":\"Program rule actions of type \\\"Send message\\\" or \\\"Schedule message\\\" should have an associated message template.\",\"recommendation\":\"Using the DHIS2 user interface, assign a message template to each of the program rule actions which send or schedule messages but which does not have an association with a message template.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRMNT\"},{\"name\":\"indicators_with_invalid_denominator\",\"displayName\":\"Indicators with invalid denominator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"List all indicators where the denominator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWID\"},{\"name\":\"indicator_types_duplicated\",\"displayName\":\"Indicator types with the same factor.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicator types with the same factor.\",\"introduction\":\"Indicators can be assigned a factor which is multiplied by the indicator's value. For example, if you create a percentage based indicator, you can assign the indicator a factor of 100, which would be multiplied by the actual value of the indicator calculated by DHIS2. In general, having multiple indicator types with the same factor is not recommended. It is duplicative, and may lead to confusion.\",\"recommendation\":\"Duplicated indicator types should consider to be removed from the system. Consider choosing one of the duplicated indicator types as the one to keep, and then update all indicators which share the same factor to this indicator type. The duplicated indicator types can then be removed from the system.\",\"issuesIdType\":\"indicatorTypes\",\"isSlow\":false,\"code\":\"ITD\"},{\"name\":\"options_sets_empty\",\"displayName\":\"Empty option sets\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Empty option sets\",\"introduction\":\"All option sets should generally include at least two items. Empty option sets serve no purpose.\",\"recommendation\":\"Options should either be added to the option set, or the option set should be deleted.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSE\"},{\"name\":\"category_options_no_categories\",\"displayName\":\"Category options with no categories.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options with no categories.\",\"introduction\":\"All category options should belong to at least one category.\",\"recommendation\":\"Category options which are not part of any category should be removed or alternatively should be added to an appropriate category.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CONC\"},{\"name\":\"orgunits_orphaned\",\"displayName\":\"Orphaned organisation units.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"Orphaned organisation units.\",\"introduction\":\"Orphaned organisation units are those which have neither parents nor any children. This means that they have no relationship to the main organisation unit hierarchy. These may be created by faulty metadata imports or direct manipulation of the database.\",\"recommendation\":\"The orphaned organisation units should be assigned a parent or removed from the system. It is recommended to use the DHIS2 API for this task if possible. If this is not possible, then they may need to be removed through direct SQL on the DHIS2 database.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OO\"},{\"name\":\"indicators_with_identical_formulas\",\"displayName\":\"Indicators with identical formulas\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that have the identical formulas with at least one other indicator\",\"recommendation\":\"Check if the same indicator should be used everywhere and remove duplicates\",\"isSlow\":false,\"code\":\"IWIF\"},{\"name\":\"program_indicators_with_invalid_filters\",\"displayName\":\"Program indicators with invalid filter\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators with invalid filter expression\",\"recommendation\":\"Check that the expression evaluates to true/false\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIF\"},{\"name\":\"program_rules_without_condition\",\"displayName\":\"Program rules lacking a condition\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that have no condition yet\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWC\"},{\"name\":\"categories_one_default_category\",\"displayName\":\"Only one default category should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category should exist\",\"introduction\":\"There should only exist one category with name and code \\\"default\\\".\",\"recommendation\":\"Only the category with UID \\\"GLevLNI9wkl\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category or move all references to category \\\"GLevLNI9wkl\\\" and then remove the unused conflicting category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CODC\"},{\"name\":\"org_units_with_cyclic_references\",\"displayName\":\"Organisation units with cyclic references\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that have a conflicting parent hierarchy definition so that two organisation units become parent of each other or in other words they form a circular reference\",\"recommendation\":\"One of the organisation units must be setup wrongly and needs to be corrected so that a non-circular tree connects the two\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWCR\"},{\"name\":\"program_rule_variables_without_data_element\",\"displayName\":\"Program rule variables lacking a data element\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring a data element source but that is not yet linked to a data element\",\"recommendation\":\"Assign a data element to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWDE\"},{\"name\":\"org_units_violating_exclusive_group_sets\",\"displayName\":\"Organisation units with conflicting exclusive group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are members of multiple exclusive organisation unit groups\",\"recommendation\":\"Remove the organisation unit from all but one exclusive organisation unit group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUVEGS\"},{\"name\":\"program_rule_actions_without_data_object\",\"displayName\":\"Program rules with actions lacking a data object\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires either a data element or an attribute but is not connected either\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWDO\"},{\"name\":\"orgunits_openingdate_gt_closeddate\",\"displayName\":\"Organisation units which have an opening date later than the closed date.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which have an opening date later than the closed date.\",\"introduction\":\"If a closing date has been defined for an organisation unit, it should always be after the opening date (if one has been defined).\",\"recommendation\":\"Alter either the opening or closing date of all affected organisation units so that the closing date is after the opening date.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OOGC\"},{\"name\":\"categories_one_default_category_option_combo\",\"displayName\":\"Only one default category option combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option combo should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option combo with UID \\\"HllvX50cXC0\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option combo or move all references to category option combo \\\"HllvX50cXC0\\\" and then remove the unused conflicting category option combo.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CODCOC\"},{\"name\":\"category_option_group_sets_incomplete\",\"displayName\":\"Category option group sets which do not contain all category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option group sets which which do not contain all category options.\",\"introduction\":\"Category option group sets are composed of multiple category option groups, which are in turn composed of various category options. Category option group sets are often used to group related category options together for analytical purposes. Categories are also composed of category options. In general, but not always, category option group sets should contain all category options of related categories. Suppose we have the following two age categories. \\nAge coarse: <15, 15+ Age fine: <1, 1-10, 10-14,15-19,20-24,25-29,30-34,35-39,40-44,45+\\nIn many cases, related data elements may be disaggregated differently. This may be to differences in the way in which the data is collected, or as is often the case, the disaggregation has changed over time. If we wish to analyze data for two different data elements (one of which uses Age coarse and the other Age fine), we can create a category option group set consisting of two category option groups which should consist of the following category options from above. \\n<15: <15, <1, 1-10, 10-14 15+: 15+, 15-19,20-24,25-29,30-34,35-39,40-44,45+\\nSuppose that we happen to omit the category option \\\"<1\\\" from the \\\"<15\\\" category option group. This would result in potential aggregation errors in when using this category option group set in any analytical objects. The details of this metadata check would return the UID and name of the category option group set. The category and category option would also be provided. Using the previous example, we would see \\\"Age fine:{<1}\\\" in the metadata check details section, to indicate that the <1 category option which is part of the \\\"Age fine\\\" category, is missing from the category option group set.\\nThere may exist specific analytical reasons why specific category options are omitted from a category option group set. However,these should usually be special cases. This metadata check will identify cases where category option group sets appear to be incomplete, however you should carefully review any groups which appear in the details. \\nThis check may also produce a number of issues which may at first glance appear to be false positives. In some cases, category options may be added to a category by mistake. When category option group sets are created, this extraneous option may be omitted and thus appear as missing from the group set. \\nAnother observed situation is where an option like \\\"Unknown\\\" is used across unrelated categories. Suppose you have two categories \\\"Age (<15, 15+, Unknown)\\\" and \\\"Sex (Male,Female,Unknown)\\\". Similar to above, we create category option group sets like: \\n<15: <15 15+: 15+ Unknown: Unknown\\nThis metadata check will report that \\\"Male\\\" and \\\"Female\\\" are missing from the group set. This is because the same \\\"Unknown\\\" option is shared between two different, unrelated categories. It is recommended that if this situation occurs, that you create two separate \\\"Unknown\\\" category options like \\\"Unknown sex\\\" and \\\"Unknown age\\\".\",\"recommendation\":\"Using the maintenance app, assign the missing category options to an appropriate category option group within the affected category option group set.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSI\"},{\"name\":\"maps_not_viewed_one_year\",\"displayName\":\"Maps which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Maps which have not been viewed in the past 12 months\",\"introduction\":\"Maps should be regularly viewed in the system. In many cases, users may create maps for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system and being difficult to find in the Maps app.\",\"recommendation\":\"Unused maps can be removed directly using the Maps app by a user with sufficient authority. If maps are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"maps\",\"isSlow\":false,\"code\":\"MNVOY\"},{\"name\":\"indicators_exact_duplicates\",\"displayName\":\"Indicators with the same formula.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same formula.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check shows indicators which have the exact same formulas. Spaces which are present are removed prior to comparison.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Consider deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IED\"},{\"name\":\"indicators_violating_exclusive_group_sets\",\"displayName\":\"Indicators with conflicting exclusive group sets\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that are members of multiple exclusive indicator groups\",\"recommendation\":\"Remove the indicator from all but one exclusive indicator group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IVEGS\"},{\"name\":\"category_options_excess_groupset_membership\",\"displayName\":\"Category options which belong to multiple groups in a category option group set.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category options which belong to multiple groups in a category option group set.\",\"introduction\":\"Category options should belong to exactly one category option group which are part of a category option group set. If the category option belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the category option in the details list to exactly one category option group within each group set.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"COEGM\"},{\"name\":\"periods_duplicates\",\"displayName\":\"Duplicate Periods\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Lists all periods duplicates which have identical type and start date\",\"recommendation\":\"Make sure all database references are moved to one of the duplicates before deleting the unused duplicates\",\"isSlow\":false,\"code\":\"PD\"},{\"name\":\"program_rules_without_action\",\"displayName\":\"Program rules lacking an action\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that are not connected to any program rule action\",\"recommendation\":\"Connect the rule to an action or consider removing the rule\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWA\"},{\"name\":\"orgunits_multiple_roots\",\"displayName\":\"The organisation unit hierarchy should have a single root.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"The organisation unit hierarchy should have a single root.\",\"introduction\":\"Every DHIS2 system should have a single root organisation unit. This means a single organisation unit from which all other branches of the hierarchy are descendants.\",\"recommendation\":\"Once you have decided which organisation unit should be the real root of the organisation unit hierarchy, you should update the parent organisation unit. This can be done by using the DHIS2 API or my updating the value directly in the `organisationunit` table.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMR\"},{\"name\":\"validation_rules_with_invalid_left_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a left side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWILSE\"},{\"name\":\"program_rule_actions_without_stage_id\",\"displayName\":\"Program rules with actions lacking a program stage\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a program stage but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWSI\"},{\"name\":\"indicator_groups_scarce\",\"displayName\":\"Indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups should have at least two members.\",\"introduction\":\"All indicator groups should be composed of at least two indicators.\",\"recommendation\":\"Considering removing groups with zero or one groups, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"indicatorGroups\",\"isSlow\":false,\"code\":\"IGS\"},{\"name\":\"option_sets_wrong_sort_order\",\"displayName\":\"Option sets with possibly wrong sort order.\",\"section\":\"Option sets\",\"severity\":\"SEVERE\",\"description\":\"Option sets with possibly wrong sort order.\",\"introduction\":\"Option sets contain options which should be ordered sequentially. The sort_order property should always start with 1 and have a sequential sequence. If there are three options in the option set, then the sort order should be 1,2,3. \\nIn certain circumstances, options may be deleted from an option set, and the sort order may become corrupted. This may lead to a situation where it becomes impossible to update the option set from the maintenance app, and may lead to problems when attempting to using the option set in the data entry app.\",\"recommendation\":\"If it is possible to open the option set in the maintenance app, you can resort the option set, which should correct the problem. Another possible solution is to directly update the sort_order property of in the `optionset` table in the database, ensuring that a valid sequence is present for all options in the option set.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSWSO\"},{\"name\":\"periods_same_start_end_date\",\"displayName\":\"Periods with the same start and end dates\",\"section\":\"Periods\",\"severity\":\"CRITICAL\",\"description\":\"Periods with the same start and end dates\",\"introduction\":\"Different periods should not have exactly the same start and end date.\",\"recommendation\":\"All references to the duplicate periods should be removed from the system and reassigned. It is recommended to use the period with the lower periodid.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PSSED\"},{\"name\":\"program_indicators_with_invalid_expressions\",\"displayName\":\"Program indicators with invalid expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have an invalid expression\",\"recommendation\":\"Check that the expression evaluates to a number\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIE\"},{\"name\":\"program_rule_actions_without_notification\",\"displayName\":\"Program rule with actions lacking a notification template\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires a notification template but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWN\"},{\"name\":\"indicator_no_analysis\",\"displayName\":\"Indicators not used in analytical objects.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not used in analytical objects.\",\"introduction\":\"Indicators should be used to produce some type of analytical output (charts, maps, pivot tables). Note: indicators used in datasets to provide feedback during data entry are not counted as being used in analytical objects.\",\"recommendation\":\"Indicators that are not routinely being used for analysis should be reviewed to determine if they are useful and needed. If these are meant to be used for routine review, then associated outputs should be created using them. If these indicators are not going to be used for any type of information review, and are not used in data sets for feedback during data entry, consideration should be made to delete them.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"INA\"},{\"name\":\"user_groups_scarce\",\"displayName\":\"User groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"User groups should have at least two members.\",\"introduction\":\"Generally, user groups should contain two or more users.\",\"recommendation\":\"Considering removing user groups with less than two users, or alternatively, add additional users to the group to make it more useful.\",\"issuesIdType\":\"userGroups\",\"isSlow\":false,\"code\":\"UGS\"},{\"name\":\"data_elements_aggregate_with_different_period_types\",\"displayName\":\"Aggregate data elements which belong to datasets with different period types.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"SEVERE\",\"description\":\"Aggregate data elements which belong to datasets with different period types.\",\"introduction\":\"Data elements should not belong to datasets with different period types.\",\"recommendation\":\"If you need to collect data with different period types (e.g. weekly and monthly) you should use different data elements for each period type. In general, it is not recommended to collect data with different frequencies, since in general, data collected at higher frequencies (e.g. weekly) can be aggregated to data with lower frequencies (e.g yearly).\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAWDPT\"},{\"name\":\"validation_rules_without_groups\",\"displayName\":\"Validation rules lacking groups\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that are not member of at least one validation rule group\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWG\"},{\"name\":\"category_option_combos_disjoint\",\"displayName\":\"Category option combinations with disjoint associations.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with disjoint associations.\",\"introduction\":\"Under certain circumstances, category option combinations may exist in the system, but not have any direct association with category options which are associated with their category combination. This situation usually occurs when category options have been added to a category and then the category is added to a category combination. New category option combinations are created in the system at this point. If any of the category options are then removed in one of the underlying categories, a so-called disjoint category option combination may result. This is a category option combination which has no direct association with any category options in any of the categories associated with the category combination.\",\"recommendation\":\"The disjoint category option combinations should be removed from the system if possible. However, if any data is associated with the category option combination, a determination will need to be made in regards of how to deal with this data.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"COCD\"},{\"name\":\"options_sets_unused\",\"displayName\":\"Option sets which are not used\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Option sets which are not used\",\"introduction\":\"Option sets should be used for some purpose. The may be used by data elements, comments, attributes, or tracked entity attributes.\",\"recommendation\":\"Consider deleting unused option sets, or alternatively, ensure that they have been properly assigned.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSU\"},{\"name\":\"catoptioncombos_no_catcombo\",\"displayName\":\"Category options combinations with no category combination.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options combinations with no category combination.\",\"introduction\":\"All category option combinations should be associated with a category combo. In certain cases, when category combinations are deleted,the linkage between a category option combination and a category combination may become corrupted.\",\"recommendation\":\"Check if any data is associated with the category option combination in question. Likely, the data should either be deleted or migrated to a valid category option combination. Any data which is associated with any of these category option combinations will not be available through either the data entry modules or any of the analytical apps.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CNC\"},{\"name\":\"data_elements_violating_exclusive_group_sets\",\"displayName\":\"Data elements with conflicting exclusive group sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are a members of more than one exclusive data element set belonging to the same data element group set\",\"recommendation\":\"Either remove the data element from all but one exclusive group set or consider if the set really should be an exclusive group set\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEVEGS\"},{\"name\":\"categories_same_category_options\",\"displayName\":\"Categories with the same category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with the same category options\",\"introduction\":\"Categories with the exact same category options should be considered to be merged. Categories with the exact same category options may be easily confused by users in analysis. The details view will provide a list of categories which have the exact same category options. For each duplicated category a number in parentheses such as (1) will indicate which categories belong to duplicated groups.\",\"recommendation\":\"If category combinations have already been created with duplicative categories,\\nit is recommended that you do not take any action, but rather ensure\\nthat users understand that there may be two category combinations which are duplicative.\\n\\nIf you choose to merge the duplicative category combinations, you would need to \\nremap all category option combinations from the category combo which you wish to \\nremove, to the one which you wish to keep. \\n\\nIf one of the categories is not in use in any category combination, it should\\nconsider to be removed from the system.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CSCO\"},{\"name\":\"visualizations_not_viewed_one_year\",\"displayName\":\"Visualizations which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Visualizations which have not been viewed in the past 12 months\",\"introduction\":\"Visualizations should be regularly viewed in the system. In many cases, users may create charts for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to charts being difficult to find in the visualization app.\",\"recommendation\":\"Unused charts can be removed directly using the data visualization app by a user with sufficient authority. If charts are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"visualizations\",\"isSlow\":false,\"code\":\"VNVOY\"},{\"name\":\"categories_one_default_category_option\",\"displayName\":\"Only one default category option should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option with UID \\\"xYerKDKCefk\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option or move all references to category option \\\"xYerKDKCefk\\\" and then remove the unused conflicting category option.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CODCO\"},{\"name\":\"orgunits_multiple_spaces\",\"displayName\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"introduction\":\"Names and/or shortnames of organisation units should not contain multiple spaces. They are superfluous and may complicate the location of organisation units when they are searched.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the multiple spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMS\"},{\"name\":\"data_elements_aggregate_abandoned\",\"displayName\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"introduction\":\"Data elements are considered to be abandoned when they have not been edited in at least 100 days and do not have any data values associated with them. Often, these are the result of new or changed configurations that have been abandoned at some point.\",\"recommendation\":\"Data elements that have no data associated with them and which there are no plans to start using for data collection should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAA\"},{\"name\":\"data_elements_assigned_to_data_sets_with_different_period_types\",\"displayName\":\"Data elements assigned to data sets with different period type\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are assigned to at least one data set that has a different period type\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEATDSWDPT\"},{\"name\":\"data_elements_aggregate_no_groups\",\"displayName\":\"Aggregate data elements not in any data element groups.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not in any data element groups.\",\"introduction\":\"All data elements should be in a data element group. This allows users to find the data elements more easily in analysis\\n apps and also contributes to having more complete data element group sets.\\n Maintenance operations can also be made more efficient by applying\\n bulk settings (ex. sharing) to all data elements within a data element group.\",\"recommendation\":\"Data elements that are not in a data element group should be added to a relevant data element group. If the data elements are not needed, they should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANG\"},{\"name\":\"category_options_shared_within_category_combo\",\"displayName\":\"Category combinations with categories which share the same category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category combinations with categories which share the same category options.\",\"introduction\":\"As a general rule, category options should be reused where possible between categories. The exception to this rule however, is when you have a category combo with multiple categories, and within those categories, a category option is shared. As a simple example, lets say you have a category called \\\"Sex\\\" with options \\\"Male\\\"\\\", \\\"Female\\\" and \\\"Unknown\\\". There is also a second category called \\\"Age\\\" with options \\\"<15\\\", \\\"15+\\\", and \\\"Unknown\\\". A category combination called \\\"Age/Sex\\\" is then created with these two categories, which share the option \\\"Unknown\\\". This situation should be avoided, as it creates issues when analyzing data.\",\"recommendation\":\"The recommended approach to dealing with this situation is to create a new category combination, using two new categories. Using the example from the introduction, you should create two new category options called \\\"Unknown age\\\" and \\\"Unknown sex\\\". A new category combination can then be created with these new categories, which do not share category options. All data which is potentially associated with the old category combinations, would need to be reassigned to the new category option combinations. Any analytical objects which use the categories to be removed would also need to be updated.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"COSWCC\"},{\"name\":\"orgunits_null_island\",\"displayName\":\"Organisation units located within 100 km of Null Island (0,0).\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units located within 100 km of Null Island (0,0).\",\"introduction\":\"A common problem when importing coordinates is the inclusion of coordinates situated around the point of [Null Island](https://en.wikipedia.org/wiki/Null_Island). This is the point on the Earth's surface where the Prime Meridian and Equator intersect with a latitude of 0 and a longitude of 0. The point also happens to be situated currently in the middle of the ocean. This query identifies any points located within 100 km of the point having latitude and longitude equal to zero.\",\"recommendation\":\"Update the coordinates of the affected organization unit to the correct location.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONI\"},{\"name\":\"program_rule_actions_without_section\",\"displayName\":\"Program rules with actions lacking a program stage section\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a section but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWS\"},{\"name\":\"periods_3y_future\",\"displayName\":\"Periods which are more than three years in the future.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are more than three years in the future.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\nfar future. Different data entry clients may not properly validate for periods\\nwhich are in the future, and thus any periods in the future should be reviewed.\\nIn some cases, data may be valid for future dates, e.g. targets which are set for the\\nnext fiscal year.\",\"recommendation\":\"If any periods exist in the system in the future, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\\n\\nIn many cases, clients may mean to transmit\\ndata for January 2021, but due to data entry errors, January 2031 is selected. Thus,\\nany data in the far future should be investigated to ensure it does not result\\nfrom data entry errors.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"P3F\"},{\"name\":\"orgunits_trailing_spaces\",\"displayName\":\"Organisation units should not have trailing spaces.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have trailing spaces.\",\"introduction\":\"Trailing spaces in organisation units are superfluous.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the trailing spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OTS\"},{\"name\":\"validation_rule_groups_scarce\",\"displayName\":\"Validation rule should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Validation rule should have at least two members.\",\"introduction\":\"Generally validation rule groups should be composed of multiple validation rules.\",\"recommendation\":\"Considering removing groups which are empty or which have a single member. Alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"validationRuleGroups\",\"isSlow\":false,\"code\":\"VRGS\"},{\"name\":\"indicators_with_invalid_numerator\",\"displayName\":\"Indicators with invalid numerator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators where the numerator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWIN\"},{\"name\":\"categories_one_default_category_combo\",\"displayName\":\"Only one default category combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category combo should exist\",\"introduction\":\"There should only exist one category combo with name and code \\\"default\\\".\",\"recommendation\":\"Only the category combo with UID \\\"bjDvmb4bfuf\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category combo or move all references to category combo \\\"bjDvmb4bfuf\\\" and then remove the unused conflicting category combo.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CODCC\"},{\"name\":\"data_elements_without_data_sets\",\"displayName\":\"Data elements lacking data Sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data sets\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWDS\"},{\"name\":\"category_combos_unused\",\"displayName\":\"Category combinations not used by other metadata objects\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category combinations not used by other metadata objects\",\"introduction\":\"Category combinations which are unused in any datasets, data elements, programs or data approval workflows may be safe to delete. In some cases, category combinations may be created, but never actually used for anything. This may lead to situations where users and implementers are confused about which category combination should actually be used. In general, it should be safe to delete unused category combinations, except in situations where existing data has been associated with them.\",\"recommendation\":\"Check to see if any data is associated with the category combination before attempting to delete it. Category combinations which are not currently used in any metadata objects may still be valid for legacy reasons, but they should be reviewed to be sure they are still needed. Otherwise, it should be safe to remove them from the system.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCU\"},{\"name\":\"category_option_groups_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option groups should be composed of at least two category options. There can however be legitimate cases when a single category option is part of a group, especially in cases where there is a direct mapping between age bands and category options.\",\"recommendation\":\"Considering removing groups with zero or one category options, or alternatively, add additional category options to the group to make it more useful.\",\"issuesIdType\":\"categoryOptionGroups\",\"isSlow\":false,\"code\":\"COGS\"},{\"name\":\"datasets_empty\",\"displayName\":\"Datasets with no data elements.\",\"section\":\"Data sets\",\"severity\":\"WARNING\",\"description\":\"Datasets with no data elements.\",\"introduction\":\"All datasets should have data elements assigned to them.\",\"recommendation\":\"Remove empty datasets, or alternatively, assign data elements to them.\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DE\"},{\"name\":\"indicators_without_groups\",\"displayName\":\"Indicators lacking groups\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that do not have at least one group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWG\"},{\"name\":\"orgunit_groups_scarce\",\"displayName\":\"Organisation unit groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Organisation unit groups should have at least two members.\",\"introduction\":\"Generally, organisation unit groups should be composed of multiple organisation units.\",\"recommendation\":\"Considering removing groups with zero or one organisation units, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OGS\"},{\"name\":\"program_rules_without_priority\",\"displayName\":\"Program rules lacking a priority setting\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules with action type \\\"assign\\\" where the rule priority is not yet set\",\"recommendation\":\"Set a priority for the program rule(s)\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWP\"},{\"name\":\"categories_unique_category_combo\",\"displayName\":\"Different category combinations should not have the exact same combination of categories.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Different category combinations should not have the exact same combination of categories.\",\"introduction\":\"Category combinations should be a unique combination of categories. If two or more category combinations contain the exact same set of categories, this would be considered to be duplicative and potentially confusing to users.\",\"recommendation\":\"One category combo is kept, all references are updated to use this combo and other combos are removed.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CUCC\"},{\"name\":\"indicator_group_sets_scarce\",\"displayName\":\"Indicator groups sets should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups sets should have at least two members.\",\"introduction\":\"All indicator group set should be composed of at least two indicators groups.\",\"recommendation\":\"Considering removing indicator group sets with less than two indicator groups, or alternatively, add additional indicator groups to the indicator group set to make it more useful.\",\"issuesIdType\":\"indicatorGroupSets\",\"isSlow\":false,\"code\":\"IGSS\"},{\"name\":\"validation_rules_with_invalid_right_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a right side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWIRSE\"},{\"name\":\"data_elements_aggregate_aggregation_operator\",\"displayName\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"introduction\":\"Data elements which are not numeric (text, dates, etc) should have an aggregation operator set to NONE. Data elements which are able to be aggregated (numbers, integers, etc) should have an aggregation operator set to something other than NONE, most often SUM.\",\"recommendation\":\"Open the affected data elements in the Maintenance App and change their aggregation type to an appropriate type. Alternatively, these can be altered via the API.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAAO\"},{\"name\":\"org_unit_groups_without_group_sets\",\"displayName\":\"Organisation unit groups lacking group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation unit groups that aren't member of at least one organisation unit group set\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OUGWGS\"},{\"name\":\"program_rule_variables_without_attribute\",\"displayName\":\"Program rule variables lacking an attribute\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring an attribute source but that is not yet linked to an attribute\",\"recommendation\":\"Assign an attribute to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWA\"},{\"name\":\"program_indicator_groups_scarce\",\"displayName\":\"Program indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Program indicator groups should have at least two members.\",\"introduction\":\"Program indicator groups should generally be composed of two or more program indicators.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"programIndicatorGroups\",\"isSlow\":false,\"code\":\"PIGS\"},{\"name\":\"program_rules_no_expression\",\"displayName\":\"Program rules with no expression.\",\"section\":\"Program rules\",\"severity\":\"WARNING\",\"description\":\"Program rules with no expression.\",\"introduction\":\"All program rules should have an expression. Expressions are used by program rules to determine when they should be triggered. Program rules with no expression have no purpose.\",\"recommendation\":\"Using the DHIS2 user interface, assign an expression to each of the program rules which is missing one. Otherwise, if it is safe to delete the program rule with no expression, it is recommended to remove it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNE\"},{\"name\":\"data_elements_aggregate_no_data\",\"displayName\":\"Aggregate data elements with NO data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements with NO data values.\",\"introduction\":\"Data elements should generally always be associated with data values. If data elements exist in a data set which is active, but there are no data values associated with them, they may not be part of the data entry screens. Alternatively, the data element may have been added but never been associated with a dataset.\",\"recommendation\":\"Consider removing data elements with no data values.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAND\"},{\"name\":\"program_indicators_without_expression\",\"displayName\":\"Program indicators lacking an expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have no expression set yet\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWE\"},{\"name\":\"periods_distant_past\",\"displayName\":\"Periods which are in the distant past.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are in the distant past.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\ndistant past. Different data entry clients may not properly validate for periods\\nwhich are in the distant past, and thus these periods should be triaged to ensure\\nthat data has not been entered against them by mistake.\",\"recommendation\":\"If any periods exist in the system in the distant past, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PDP\"},{\"name\":\"org_units_being_orphaned\",\"displayName\":\"Orphaned organisation units\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that aren't level 1 units but that lack a parent so that they are not connected to the rest of the organisation tree\",\"recommendation\":\"Find (or create) and set the correct parent for the orphaned organisation unit(s). Eventually this is also caused by having set the wrong level.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUBO\"},{\"name\":\"cocs_wrong_cardinality\",\"displayName\":\"Category option combinations with incorrect cardinality.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with incorrect cardinality.\",\"introduction\":\"All category option combinations should have exactly the same number of category option associations as the number of categories in the category combination. If there are two categories in a category combination, then every category option combination should have exactly two category options.\\nCategory option combinations with the incorrect cardinality are usually the result of a category combination having been created, and then modified later. Suppose that two categories are used to create a category combination. Each category option combination of this category combo will have two category options. If an additional category is added to the category combination later, new category option combinations with three category options will be created and associated with this category combo. The original category option combinations would be considered to be invalid.\",\"recommendation\":\"Category option combinations which have an incorrect cardinality will be ignored by the DHIS2 analytics system and should be removed.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CWC\"},{\"name\":\"dashboards_not_viewed_one_year\",\"displayName\":\"Dashboards which have not been actively viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Dashboards which have not been actively viewed in the past 12 months\",\"introduction\":\"Dashboards should be regularly viewed in the system. In many cases, users may create dashboards for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to useful dashboards being difficult to find. This check identifies any dashboards which have not been viewed in the past year.\",\"recommendation\":\"Unused dashboards can be deleted in the entirety from the main dashboard app by clicking on the \\\"Edit\\\" button and choosing \\\"Delete\\\". Note that this process cannot be undone! Another option would be to alter the sharing of the dashboard so that it is not visible to any user.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNVOY\"}]", - "responseSize": 66022, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations/lnWRZN67iDU/execute", - "featureName": "User job actions", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "POST", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "content-length": "0", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 404, - "responseBody": "{\"httpStatus\":\"Not Found\",\"httpStatusCode\":404,\"status\":\"ERROR\",\"message\":\"Object not found for uid: lnWRZN67iDU\"}", - "responseSize": 114, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations/lnWRZN67iDU", - "featureName": "User job actions", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "DELETE", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 404, - "responseBody": "{\"httpStatus\":\"Not Found\",\"httpStatusCode\":404,\"status\":\"ERROR\",\"message\":\"JobConfiguration with id lnWRZN67iDU could not be found.\",\"errorCode\":\"E1005\"}", - "responseSize": 153, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - } -] diff --git a/cypress/fixtures/network/40/user_jobs_can_be_enabled_and_disabled.json b/cypress/fixtures/network/40/user_jobs_can_be_enabled_and_disabled.json deleted file mode 100644 index 4d503c42c..000000000 --- a/cypress/fixtures/network/40/user_jobs_can_be_enabled_and_disabled.json +++ /dev/null @@ -1,271 +0,0 @@ -[ - { - "path": "/api/40/systemSettings/helpPageLink", - "featureName": "User jobs can be enabled and disabled", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"helpPageLink\":\"https://dhis2.github.io/dhis2-docs/master/en/user/html/dhis2_user_manual_en.html\"}", - "responseSize": 99, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/analytics/tableTypes", - "featureName": "User jobs can be enabled and disabled", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"]", - "responseSize": 122, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations/jobTypes?fields=*&paging=false", - "featureName": "User jobs can be enabled and disabled", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"jobTypes\":[{\"name\":\"Data integrity\",\"jobType\":\"DATA_INTEGRITY\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"checks\",\"fieldName\":\"Checks\",\"persisted\":false,\"collectionName\":\"checks\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/dataIntegrity\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.parameters.DataIntegrityJobParameters$DataIntegrityReportType\",\"name\":\"type\",\"fieldName\":\"Type\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"REPORT\",\"SUMMARY\",\"DETAILS\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Resource table\",\"jobType\":\"RESOURCE_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Analytics table\",\"jobType\":\"ANALYTICS_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"skipPrograms\",\"fieldName\":\"Skip programs\",\"persisted\":false,\"collectionName\":\"skipPrograms\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/programs\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipResourceTables\",\"fieldName\":\"Skip resource tables\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Continuous analytics table\",\"jobType\":\"CONTINUOUS_ANALYTICS_TABLE\",\"schedulingType\":\"FIXED_DELAY\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"fullUpdateHourOfDay\",\"fieldName\":\"Full update hour of day\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Data sync\",\"jobType\":\"DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker programs data sync\",\"jobType\":\"TRACKER_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Event programs data sync\",\"jobType\":\"EVENT_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Meta data sync\",\"jobType\":\"META_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"trackerProgramPageSize\",\"fieldName\":\"Tracker program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"eventProgramPageSize\",\"fieldName\":\"Event program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"dataValuesPageSize\",\"fieldName\":\"Data values page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Aggregate data exchange\",\"jobType\":\"AGGREGATE_DATA_EXCHANGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"dataExchangeIds\",\"fieldName\":\"Data exchange ids\",\"persisted\":false,\"collectionName\":\"dataExchangeIds\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/aggregateDataExchanges\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Send scheduled message\",\"jobType\":\"SEND_SCHEDULED_MESSAGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Program notifications\",\"jobType\":\"PROGRAM_NOTIFICATIONS\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Monitoring\",\"jobType\":\"MONITORING\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"validationRuleGroups\",\"fieldName\":\"Validation rule groups\",\"persisted\":false,\"collectionName\":\"validationRuleGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/validationRuleGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"sendNotifications\",\"fieldName\":\"Send notifications\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"persistResults\",\"fieldName\":\"Persist results\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Push analysis\",\"jobType\":\"PUSH_ANALYSIS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"pushAnalysis\",\"fieldName\":\"Push analysis\",\"persisted\":false,\"collectionName\":\"pushAnalysis\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/pushAnalysis\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker search optimization\",\"jobType\":\"TRACKER_SEARCH_OPTIMIZATION\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"attributes\",\"fieldName\":\"Attributes\",\"persisted\":false,\"collectionName\":\"attributes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/trackedEntityAttributes/indexable\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipIndexDeletion\",\"fieldName\":\"Skip index deletion\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Predictor\",\"jobType\":\"PREDICTOR\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictors\",\"fieldName\":\"Predictors\",\"persisted\":false,\"collectionName\":\"predictors\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictors\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictorGroups\",\"fieldName\":\"Predictor groups\",\"persisted\":false,\"collectionName\":\"predictorGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictorGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Disable inactive users\",\"jobType\":\"DISABLE_INACTIVE_USERS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"inactiveMonths\",\"fieldName\":\"Inactive months\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"reminderDaysBefore\",\"fieldName\":\"Reminder days before\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Test\",\"jobType\":\"TEST\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Long\",\"name\":\"waitMillis\",\"fieldName\":\"Wait millis\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"stages\",\"fieldName\":\"Stages\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtStage\",\"fieldName\":\"Fail at stage\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"items\",\"fieldName\":\"Items\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtItem\",\"fieldName\":\"Fail at item\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Long\",\"name\":\"itemDuration\",\"fieldName\":\"Item duration\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.String\",\"name\":\"failWithMessage\",\"fieldName\":\"Fail with message\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"failWithException\",\"fieldName\":\"Fail with exception\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.JobProgress$FailurePolicy\",\"name\":\"failWithPolicy\",\"fieldName\":\"Fail with policy\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"PARENT\",\"FAIL\",\"SKIP_STAGE\",\"SKIP_ITEM\",\"SKIP_ITEM_OUTLIER\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"runStagesParallel\",\"fieldName\":\"Run stages parallel\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]}]}", - "responseSize": 24994, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/validationRuleGroups?paging=false", - "featureName": "User jobs can be enabled and disabled", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"validationRuleGroups\":[{\"displayName\":\"ANC\",\"id\":\"UP1lctvalPn\"},{\"displayName\":\"Commodities\",\"id\":\"xcpl667ccfF\"},{\"displayName\":\"Critical event\",\"id\":\"xWtt9c443Lt\"},{\"displayName\":\"District stock\",\"id\":\"mEtdbIDDhix\"},{\"displayName\":\"Epidemic disease outbreak\",\"id\":\"y2yQIm79VTW\"},{\"displayName\":\"Facility Stock\",\"id\":\"SqyI8HKqI4g\"},{\"displayName\":\"Immunisation\",\"id\":\"UiOSY1iIdub\"},{\"displayName\":\"Infectious disease outbreak\",\"id\":\"WUZXEFdn1PX\"},{\"displayName\":\"Malaria\",\"id\":\"zlaSof6qLqF\"},{\"displayName\":\"Population\",\"id\":\"D3bItmtBpsW\"},{\"displayName\":\"TB\",\"id\":\"IMF6p1MqoHl\"},{\"displayName\":\"Testing\",\"id\":\"nMDkAJXsmlR\"}]}", - "responseSize": 628, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/pushAnalysis?paging=false", - "featureName": "User jobs can be enabled and disabled", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"pushAnalysis\":[{\"displayName\":\"Immunization Key Indicators Monthly Report\",\"id\":\"jtcMAKhWwnc\"}]}", - "responseSize": 98, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictors?paging=false", - "featureName": "User jobs can be enabled and disabled", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictors\":[{\"displayName\":\"Malaria Outbreak Threshold\",\"id\":\"tEK1OEqS4O1\"}]}", - "responseSize": 80, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictorGroups?paging=false", - "featureName": "User jobs can be enabled and disabled", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictorGroups\":[]}", - "responseSize": 22, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/dataIntegrity", - "featureName": "User jobs can be enabled and disabled", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[{\"name\":\"orgunits_invalid_geometry\",\"displayName\":\"Organisation units with invalid geometry.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with invalid geometry.\",\"introduction\":\"DHIS2 uses the PostGIS database extension to manage the geographical information associated\\nwith organisation units. There are various reasons why geometries may be considered to be\\ninvalid including self-inclusions, self-intersections, and sliver polygons. Please see the\\nPostGIS documentation for a more in-depth discussion on this topic.\\n\\nInvalid geometry is not always a problem and may be able to be ignored, however, it has been observed in certain systems\\nthat this can lead to problems in analytics. If you are experiencing issues when generating analytics\\ntables, and see errors related to invalid geometries, you will need to either remove the invalid geometry,\\nor fix it.\",\"recommendation\":\"Update the geometry of the affected organisation units to a valid geometry. It may be possible to use the PostGIS function `ST_MakeValid` to automatically fix the problem. However, in other cases the geometry may need to be edited in a GIS tool, and then updated again in DHIS2.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OIG\"},{\"name\":\"data_elements_without_groups\",\"displayName\":\"Data elements lacking groups\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data element groups\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWG\"},{\"name\":\"orgunit_group_sets_excess_groups\",\"displayName\":\"Organisation units which belong to multiple groups in a group set.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which belong to multiple groups in a group set.\",\"introduction\":\"Organisation units should belong to exactly one group within each organisation unit group set of which they are a member. If the organisation unit belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the organisation units in the details list to exactly one group within each group set membership.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OGSEG\"},{\"name\":\"validation_rules_missing_value_strategy_null\",\"displayName\":\"All validation rule expressions should have a missing value strategy.\",\"section\":\"Validation rules\",\"severity\":\"SEVERE\",\"description\":\"All validation rule expressions should have a missing value strategy.\",\"introduction\":\"Validation rules are composed of a left and right side expression. In certain systems the missing value strategy may not be defined. This may lead to an exception during validation rule analysis. The affected validation rules should be corrected to with an appropriate missing value strategy.\",\"recommendation\":\"Using the results of the the details SQL view, identify the affected validation rules and which side of the rule the missing value strategy has not been specified. Using the maintenance app, make the appropriate corrections and save the rule.\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRMVSN\"},{\"name\":\"category_combos_being_invalid\",\"displayName\":\"Invalid Category-combos\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Lists all category-combos that are invalid\",\"recommendation\":\"Make sure the category combo is assigned to at least one category and that all categories have category options \",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCBI\"},{\"name\":\"data_elements_in_data_set_not_in_form\",\"displayName\":\"Data sets with data elements not in data entry form\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that have data elements which are neither a member of the set's data entry form nor a member of the sets section\",\"recommendation\":\"Either remove the data elements in question or make them a member of the set's form or section\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DEIDSNIF\"},{\"name\":\"categories_no_options\",\"displayName\":\"Categories with no category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with no category options\",\"introduction\":\"Categories should always have at least one category option.\",\"recommendation\":\"Any categories without category options should either be removed from the system if they are not in use. Otherwise, appropriate category options should be added to the category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CNO\"},{\"name\":\"data_elements_aggregate_no_analysis\",\"displayName\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"introduction\":\"All aggregate data elements that are captured in DHIS2 should be used to produce some type of analysis output (charts, maps, tables). This can be by using them directly in an output, or by having them contribute to an indicator calculation that is used an output.\",\"recommendation\":\"Data elements that are not routinely being reviewed in analysis, either directly or indirectly through indicators, should be reviewed to determine if they still need to be collected. If these are meant to be used in routine review, then associated outputs should be created using them. If these data elements are not going to be used for any type of information review, consideration should be made to either archive them or delete them.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANA\"},{\"name\":\"indicators_duplicated_terms\",\"displayName\":\"Indicators with the same terms.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same terms.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check attempts to identify indicators with the same formulas, regardless of the order of their their terms. Suppose you have an indicator which calculates total ANC attendance: ANC Total = ANC1 + ANC2 + ANC3 Suppose then another indicator exists in the system, which has been defined as: ANC Totals = ANC3 + ANC2 + ANC1 These two indicators are equivalent, and will produce the same result, and are thus considered to be duplicated.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Considered deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IDT\"},{\"name\":\"program_rules_no_action\",\"displayName\":\"Program rules with no action.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules with no action.\",\"introduction\":\"All program rules should have an action.\",\"recommendation\":\"Using the DHIS2 user interface, assign an action to each of the program rules which is missing one. Alternatively, if the program rule is not in use, then consider removing it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNA\"},{\"name\":\"orgunits_compulsory_group_count\",\"displayName\":\"Organisation units that are not in all compulsory orgunit group sets\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Orgunits that are not in all compulsory orgunit group sets\",\"introduction\":\"If any organisation unit groups have been marked as compulsory, each and every organisation unit should belong to exactly one group within each compulsory organisation unit group set. Assume we have created a group set called \\\"Ownership\\\" with two groups \\\"Public\\\" and \\\"Private\\\". Each and every organisation unit contained in the hierarchy must belong to either Public or Private (but not both). When organisation unit are not part of a group set, results in the analytics apps will not be correct if the organisation unit group set is used for aggregation.\",\"recommendation\":\"For each of the organisation units identified in the details query, you should assign the appropriate organisation unit group within the group set. Alternatively, if the group set should not be compulsory, you should change this attribute.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OCGC\"},{\"name\":\"orgunits_no_coordinates\",\"displayName\":\"Organisation units with no coordinates.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with no coordinates.\",\"introduction\":\"Ideally, all organisation units contained in the DHIS2 hierarchy should have a valid\\nset of coordinates. Usually for all organisation units above the facility level,\\nthese coordinates should be a polygon which provides the boundary of the organisation\\nunit. For facilities, these are usually represented as point coordinates.\\n\\nThere can obviously be exceptions to this rule. Mobile health facilities may not have\\na fixed location. Community health workers or wards below the facility level\\nmay also not have a defined or definable coordinate.\\n\\nThis check is intended to allow you to review all organisation units which do\\nnot have any coordinates and make a determination as to whether they should be updated.\",\"recommendation\":\"Where appropriate, update the geometry of each organisation unit with a valid geometry.\\nYou may need to contact the appropriate local government office to obtain a copy\\nof district boundaries, commonly referred to as \\\"shape files\\\". Another possibility\\nis to use freely available boundary files from GADM (https://gadm.org)\\n\\nIf facilities are missing coordinates, it may be possible to obtain these from\\nthe facility staff using their smart phone to get the coordinates. Images\\nfrom Google Maps can also often be used to estimate the position of a facility,\\nassuming that you have good enough resolution and local knowledge of where\\nit is located.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONC\"},{\"name\":\"data_sets_not_assigned_to_org_units\",\"displayName\":\"Data sets not assigned to organisation units\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that are not assigned to any organisation units\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DSNATOU\"},{\"name\":\"dashboards_no_items\",\"displayName\":\"Dashboards with no items.\",\"section\":\"Dashboards\",\"severity\":\"INFO\",\"description\":\"Dashboards with no items.\",\"introduction\":\"All dashboards should have content on them. Dashboards without any content do not serve any purpose, and can make it more difficult to find relevant dashboards with content.\",\"recommendation\":\"Dashboards without content that have not been modified in the last 14 days should be considered for deletion.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNI\"},{\"name\":\"orgunits_same_name_and_parent\",\"displayName\":\"Organisation units should not have the same name and parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have the same name and parent.\",\"introduction\":\"Organisation units may have exactly the same name. This may become confusing to users, particularly if the organisation unit has the same name and same parent. This can easily lead to data entry or analysis mistakes as users have no way to distinguish between the two organisation units.\",\"recommendation\":\"Rename identically named organisation units which share the same parent using the maintenance app.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OSNAP\"},{\"name\":\"indicators_not_grouped\",\"displayName\":\"Indicators not in any groups.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not in any groups.\",\"introduction\":\"All indicators should be in an indicator group. This allows users to find the indicators more easily in analysis apps and also contributes to having more complete indicators group sets. Maintenance operations can also be made more efficient by applying bulk settings (ex. sharing, filtering) to all indicators within an indicator group.\",\"recommendation\":\"Indicators that are not in a indicator group should be added to a relevant indicator group. If the indicators are not needed, they should be deleted.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"ING\"},{\"name\":\"category_option_group_sets_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option group sets should be composed of at least two category option groups.\",\"recommendation\":\"Considering removing groups with zero or one category option groups, or alternatively, add additional category option groups to the group set to make it more useful.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSS\"},{\"name\":\"org_units_without_groups\",\"displayName\":\"Organisation units lacking groups\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are not connected to at least one group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWG\"},{\"name\":\"data_elements_excess_groupset_membership\",\"displayName\":\"Data elements which belong to multiple groups in a group set.\",\"section\":\"data_elements\",\"severity\":\"SEVERE\",\"description\":\"Data elements which belong to multiple groups in a group set.\",\"introduction\":\"Data elements should belong to exactly one group within each data element group set of which they are a member. If the data element belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the data elements in the details list to exactly one data element group within each group set.\",\"issuesIdType\":\"data_elements_aggregate\",\"isSlow\":false,\"code\":\"DEEGM\"},{\"name\":\"data_element_groups_scarce\",\"displayName\":\"Data element groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Data element groups should have at least two members.\",\"introduction\":\"All data element groups should be composed of at least two data elements.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"dataElementGroups\",\"isSlow\":false,\"code\":\"DEGS\"},{\"name\":\"orgunits_not_contained_by_parent\",\"displayName\":\"Organisation units with point coordinates should be contained by their parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with point coordinates should be contained by their parent.\",\"introduction\":\"Facilities are often represented as points in the DHIS2 hierarchy. Their parent organisation units geometry should contain all facilities which have been associated with them.\",\"recommendation\":\"Often boundary files are simplified when they are uploaded into DHIS2. This process may result in\\nfacilities which are located close to the border of a given district to fall outside of the district\\nwhen the boundary is simplified. This is considered to be more of a cosmetic problem for most DHIS2\\ninstallations, but could become an issue if any geospatial analysis is attempted using the\\nboundaries and point coordinates.\\n\\nIn cases where the facility falls outside of its parent's boundary\\nyou should confirm that the coordinates are correct. If the location is close to the boundary, you\\nmay want to reconsider how the boundary files have been simplified. Otherwise, if the location of\\nthe facility is completely incorrect, it should be rectified.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONCBP\"},{\"name\":\"program_rules_message_no_template\",\"displayName\":\"Program rules actions which should send or schedule a message without a message template.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules actions which should send or schedule a message without a message template.\",\"introduction\":\"Program rule actions of type \\\"Send message\\\" or \\\"Schedule message\\\" should have an associated message template.\",\"recommendation\":\"Using the DHIS2 user interface, assign a message template to each of the program rule actions which send or schedule messages but which does not have an association with a message template.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRMNT\"},{\"name\":\"indicators_with_invalid_denominator\",\"displayName\":\"Indicators with invalid denominator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"List all indicators where the denominator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWID\"},{\"name\":\"indicator_types_duplicated\",\"displayName\":\"Indicator types with the same factor.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicator types with the same factor.\",\"introduction\":\"Indicators can be assigned a factor which is multiplied by the indicator's value. For example, if you create a percentage based indicator, you can assign the indicator a factor of 100, which would be multiplied by the actual value of the indicator calculated by DHIS2. In general, having multiple indicator types with the same factor is not recommended. It is duplicative, and may lead to confusion.\",\"recommendation\":\"Duplicated indicator types should consider to be removed from the system. Consider choosing one of the duplicated indicator types as the one to keep, and then update all indicators which share the same factor to this indicator type. The duplicated indicator types can then be removed from the system.\",\"issuesIdType\":\"indicatorTypes\",\"isSlow\":false,\"code\":\"ITD\"},{\"name\":\"options_sets_empty\",\"displayName\":\"Empty option sets\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Empty option sets\",\"introduction\":\"All option sets should generally include at least two items. Empty option sets serve no purpose.\",\"recommendation\":\"Options should either be added to the option set, or the option set should be deleted.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSE\"},{\"name\":\"category_options_no_categories\",\"displayName\":\"Category options with no categories.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options with no categories.\",\"introduction\":\"All category options should belong to at least one category.\",\"recommendation\":\"Category options which are not part of any category should be removed or alternatively should be added to an appropriate category.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CONC\"},{\"name\":\"orgunits_orphaned\",\"displayName\":\"Orphaned organisation units.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"Orphaned organisation units.\",\"introduction\":\"Orphaned organisation units are those which have neither parents nor any children. This means that they have no relationship to the main organisation unit hierarchy. These may be created by faulty metadata imports or direct manipulation of the database.\",\"recommendation\":\"The orphaned organisation units should be assigned a parent or removed from the system. It is recommended to use the DHIS2 API for this task if possible. If this is not possible, then they may need to be removed through direct SQL on the DHIS2 database.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OO\"},{\"name\":\"indicators_with_identical_formulas\",\"displayName\":\"Indicators with identical formulas\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that have the identical formulas with at least one other indicator\",\"recommendation\":\"Check if the same indicator should be used everywhere and remove duplicates\",\"isSlow\":false,\"code\":\"IWIF\"},{\"name\":\"program_indicators_with_invalid_filters\",\"displayName\":\"Program indicators with invalid filter\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators with invalid filter expression\",\"recommendation\":\"Check that the expression evaluates to true/false\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIF\"},{\"name\":\"program_rules_without_condition\",\"displayName\":\"Program rules lacking a condition\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that have no condition yet\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWC\"},{\"name\":\"categories_one_default_category\",\"displayName\":\"Only one default category should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category should exist\",\"introduction\":\"There should only exist one category with name and code \\\"default\\\".\",\"recommendation\":\"Only the category with UID \\\"GLevLNI9wkl\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category or move all references to category \\\"GLevLNI9wkl\\\" and then remove the unused conflicting category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CODC\"},{\"name\":\"org_units_with_cyclic_references\",\"displayName\":\"Organisation units with cyclic references\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that have a conflicting parent hierarchy definition so that two organisation units become parent of each other or in other words they form a circular reference\",\"recommendation\":\"One of the organisation units must be setup wrongly and needs to be corrected so that a non-circular tree connects the two\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWCR\"},{\"name\":\"program_rule_variables_without_data_element\",\"displayName\":\"Program rule variables lacking a data element\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring a data element source but that is not yet linked to a data element\",\"recommendation\":\"Assign a data element to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWDE\"},{\"name\":\"org_units_violating_exclusive_group_sets\",\"displayName\":\"Organisation units with conflicting exclusive group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are members of multiple exclusive organisation unit groups\",\"recommendation\":\"Remove the organisation unit from all but one exclusive organisation unit group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUVEGS\"},{\"name\":\"program_rule_actions_without_data_object\",\"displayName\":\"Program rules with actions lacking a data object\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires either a data element or an attribute but is not connected either\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWDO\"},{\"name\":\"orgunits_openingdate_gt_closeddate\",\"displayName\":\"Organisation units which have an opening date later than the closed date.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which have an opening date later than the closed date.\",\"introduction\":\"If a closing date has been defined for an organisation unit, it should always be after the opening date (if one has been defined).\",\"recommendation\":\"Alter either the opening or closing date of all affected organisation units so that the closing date is after the opening date.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OOGC\"},{\"name\":\"categories_one_default_category_option_combo\",\"displayName\":\"Only one default category option combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option combo should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option combo with UID \\\"HllvX50cXC0\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option combo or move all references to category option combo \\\"HllvX50cXC0\\\" and then remove the unused conflicting category option combo.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CODCOC\"},{\"name\":\"category_option_group_sets_incomplete\",\"displayName\":\"Category option group sets which do not contain all category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option group sets which which do not contain all category options.\",\"introduction\":\"Category option group sets are composed of multiple category option groups, which are in turn composed of various category options. Category option group sets are often used to group related category options together for analytical purposes. Categories are also composed of category options. In general, but not always, category option group sets should contain all category options of related categories. Suppose we have the following two age categories. \\nAge coarse: <15, 15+ Age fine: <1, 1-10, 10-14,15-19,20-24,25-29,30-34,35-39,40-44,45+\\nIn many cases, related data elements may be disaggregated differently. This may be to differences in the way in which the data is collected, or as is often the case, the disaggregation has changed over time. If we wish to analyze data for two different data elements (one of which uses Age coarse and the other Age fine), we can create a category option group set consisting of two category option groups which should consist of the following category options from above. \\n<15: <15, <1, 1-10, 10-14 15+: 15+, 15-19,20-24,25-29,30-34,35-39,40-44,45+\\nSuppose that we happen to omit the category option \\\"<1\\\" from the \\\"<15\\\" category option group. This would result in potential aggregation errors in when using this category option group set in any analytical objects. The details of this metadata check would return the UID and name of the category option group set. The category and category option would also be provided. Using the previous example, we would see \\\"Age fine:{<1}\\\" in the metadata check details section, to indicate that the <1 category option which is part of the \\\"Age fine\\\" category, is missing from the category option group set.\\nThere may exist specific analytical reasons why specific category options are omitted from a category option group set. However,these should usually be special cases. This metadata check will identify cases where category option group sets appear to be incomplete, however you should carefully review any groups which appear in the details. \\nThis check may also produce a number of issues which may at first glance appear to be false positives. In some cases, category options may be added to a category by mistake. When category option group sets are created, this extraneous option may be omitted and thus appear as missing from the group set. \\nAnother observed situation is where an option like \\\"Unknown\\\" is used across unrelated categories. Suppose you have two categories \\\"Age (<15, 15+, Unknown)\\\" and \\\"Sex (Male,Female,Unknown)\\\". Similar to above, we create category option group sets like: \\n<15: <15 15+: 15+ Unknown: Unknown\\nThis metadata check will report that \\\"Male\\\" and \\\"Female\\\" are missing from the group set. This is because the same \\\"Unknown\\\" option is shared between two different, unrelated categories. It is recommended that if this situation occurs, that you create two separate \\\"Unknown\\\" category options like \\\"Unknown sex\\\" and \\\"Unknown age\\\".\",\"recommendation\":\"Using the maintenance app, assign the missing category options to an appropriate category option group within the affected category option group set.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSI\"},{\"name\":\"maps_not_viewed_one_year\",\"displayName\":\"Maps which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Maps which have not been viewed in the past 12 months\",\"introduction\":\"Maps should be regularly viewed in the system. In many cases, users may create maps for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system and being difficult to find in the Maps app.\",\"recommendation\":\"Unused maps can be removed directly using the Maps app by a user with sufficient authority. If maps are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"maps\",\"isSlow\":false,\"code\":\"MNVOY\"},{\"name\":\"indicators_exact_duplicates\",\"displayName\":\"Indicators with the same formula.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same formula.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check shows indicators which have the exact same formulas. Spaces which are present are removed prior to comparison.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Consider deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IED\"},{\"name\":\"indicators_violating_exclusive_group_sets\",\"displayName\":\"Indicators with conflicting exclusive group sets\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that are members of multiple exclusive indicator groups\",\"recommendation\":\"Remove the indicator from all but one exclusive indicator group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IVEGS\"},{\"name\":\"category_options_excess_groupset_membership\",\"displayName\":\"Category options which belong to multiple groups in a category option group set.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category options which belong to multiple groups in a category option group set.\",\"introduction\":\"Category options should belong to exactly one category option group which are part of a category option group set. If the category option belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the category option in the details list to exactly one category option group within each group set.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"COEGM\"},{\"name\":\"periods_duplicates\",\"displayName\":\"Duplicate Periods\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Lists all periods duplicates which have identical type and start date\",\"recommendation\":\"Make sure all database references are moved to one of the duplicates before deleting the unused duplicates\",\"isSlow\":false,\"code\":\"PD\"},{\"name\":\"program_rules_without_action\",\"displayName\":\"Program rules lacking an action\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that are not connected to any program rule action\",\"recommendation\":\"Connect the rule to an action or consider removing the rule\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWA\"},{\"name\":\"orgunits_multiple_roots\",\"displayName\":\"The organisation unit hierarchy should have a single root.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"The organisation unit hierarchy should have a single root.\",\"introduction\":\"Every DHIS2 system should have a single root organisation unit. This means a single organisation unit from which all other branches of the hierarchy are descendants.\",\"recommendation\":\"Once you have decided which organisation unit should be the real root of the organisation unit hierarchy, you should update the parent organisation unit. This can be done by using the DHIS2 API or my updating the value directly in the `organisationunit` table.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMR\"},{\"name\":\"validation_rules_with_invalid_left_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a left side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWILSE\"},{\"name\":\"program_rule_actions_without_stage_id\",\"displayName\":\"Program rules with actions lacking a program stage\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a program stage but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWSI\"},{\"name\":\"indicator_groups_scarce\",\"displayName\":\"Indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups should have at least two members.\",\"introduction\":\"All indicator groups should be composed of at least two indicators.\",\"recommendation\":\"Considering removing groups with zero or one groups, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"indicatorGroups\",\"isSlow\":false,\"code\":\"IGS\"},{\"name\":\"option_sets_wrong_sort_order\",\"displayName\":\"Option sets with possibly wrong sort order.\",\"section\":\"Option sets\",\"severity\":\"SEVERE\",\"description\":\"Option sets with possibly wrong sort order.\",\"introduction\":\"Option sets contain options which should be ordered sequentially. The sort_order property should always start with 1 and have a sequential sequence. If there are three options in the option set, then the sort order should be 1,2,3. \\nIn certain circumstances, options may be deleted from an option set, and the sort order may become corrupted. This may lead to a situation where it becomes impossible to update the option set from the maintenance app, and may lead to problems when attempting to using the option set in the data entry app.\",\"recommendation\":\"If it is possible to open the option set in the maintenance app, you can resort the option set, which should correct the problem. Another possible solution is to directly update the sort_order property of in the `optionset` table in the database, ensuring that a valid sequence is present for all options in the option set.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSWSO\"},{\"name\":\"periods_same_start_end_date\",\"displayName\":\"Periods with the same start and end dates\",\"section\":\"Periods\",\"severity\":\"CRITICAL\",\"description\":\"Periods with the same start and end dates\",\"introduction\":\"Different periods should not have exactly the same start and end date.\",\"recommendation\":\"All references to the duplicate periods should be removed from the system and reassigned. It is recommended to use the period with the lower periodid.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PSSED\"},{\"name\":\"program_indicators_with_invalid_expressions\",\"displayName\":\"Program indicators with invalid expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have an invalid expression\",\"recommendation\":\"Check that the expression evaluates to a number\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIE\"},{\"name\":\"program_rule_actions_without_notification\",\"displayName\":\"Program rule with actions lacking a notification template\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires a notification template but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWN\"},{\"name\":\"indicator_no_analysis\",\"displayName\":\"Indicators not used in analytical objects.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not used in analytical objects.\",\"introduction\":\"Indicators should be used to produce some type of analytical output (charts, maps, pivot tables). Note: indicators used in datasets to provide feedback during data entry are not counted as being used in analytical objects.\",\"recommendation\":\"Indicators that are not routinely being used for analysis should be reviewed to determine if they are useful and needed. If these are meant to be used for routine review, then associated outputs should be created using them. If these indicators are not going to be used for any type of information review, and are not used in data sets for feedback during data entry, consideration should be made to delete them.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"INA\"},{\"name\":\"user_groups_scarce\",\"displayName\":\"User groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"User groups should have at least two members.\",\"introduction\":\"Generally, user groups should contain two or more users.\",\"recommendation\":\"Considering removing user groups with less than two users, or alternatively, add additional users to the group to make it more useful.\",\"issuesIdType\":\"userGroups\",\"isSlow\":false,\"code\":\"UGS\"},{\"name\":\"data_elements_aggregate_with_different_period_types\",\"displayName\":\"Aggregate data elements which belong to datasets with different period types.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"SEVERE\",\"description\":\"Aggregate data elements which belong to datasets with different period types.\",\"introduction\":\"Data elements should not belong to datasets with different period types.\",\"recommendation\":\"If you need to collect data with different period types (e.g. weekly and monthly) you should use different data elements for each period type. In general, it is not recommended to collect data with different frequencies, since in general, data collected at higher frequencies (e.g. weekly) can be aggregated to data with lower frequencies (e.g yearly).\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAWDPT\"},{\"name\":\"validation_rules_without_groups\",\"displayName\":\"Validation rules lacking groups\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that are not member of at least one validation rule group\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWG\"},{\"name\":\"category_option_combos_disjoint\",\"displayName\":\"Category option combinations with disjoint associations.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with disjoint associations.\",\"introduction\":\"Under certain circumstances, category option combinations may exist in the system, but not have any direct association with category options which are associated with their category combination. This situation usually occurs when category options have been added to a category and then the category is added to a category combination. New category option combinations are created in the system at this point. If any of the category options are then removed in one of the underlying categories, a so-called disjoint category option combination may result. This is a category option combination which has no direct association with any category options in any of the categories associated with the category combination.\",\"recommendation\":\"The disjoint category option combinations should be removed from the system if possible. However, if any data is associated with the category option combination, a determination will need to be made in regards of how to deal with this data.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"COCD\"},{\"name\":\"options_sets_unused\",\"displayName\":\"Option sets which are not used\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Option sets which are not used\",\"introduction\":\"Option sets should be used for some purpose. The may be used by data elements, comments, attributes, or tracked entity attributes.\",\"recommendation\":\"Consider deleting unused option sets, or alternatively, ensure that they have been properly assigned.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSU\"},{\"name\":\"catoptioncombos_no_catcombo\",\"displayName\":\"Category options combinations with no category combination.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options combinations with no category combination.\",\"introduction\":\"All category option combinations should be associated with a category combo. In certain cases, when category combinations are deleted,the linkage between a category option combination and a category combination may become corrupted.\",\"recommendation\":\"Check if any data is associated with the category option combination in question. Likely, the data should either be deleted or migrated to a valid category option combination. Any data which is associated with any of these category option combinations will not be available through either the data entry modules or any of the analytical apps.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CNC\"},{\"name\":\"data_elements_violating_exclusive_group_sets\",\"displayName\":\"Data elements with conflicting exclusive group sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are a members of more than one exclusive data element set belonging to the same data element group set\",\"recommendation\":\"Either remove the data element from all but one exclusive group set or consider if the set really should be an exclusive group set\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEVEGS\"},{\"name\":\"categories_same_category_options\",\"displayName\":\"Categories with the same category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with the same category options\",\"introduction\":\"Categories with the exact same category options should be considered to be merged. Categories with the exact same category options may be easily confused by users in analysis. The details view will provide a list of categories which have the exact same category options. For each duplicated category a number in parentheses such as (1) will indicate which categories belong to duplicated groups.\",\"recommendation\":\"If category combinations have already been created with duplicative categories,\\nit is recommended that you do not take any action, but rather ensure\\nthat users understand that there may be two category combinations which are duplicative.\\n\\nIf you choose to merge the duplicative category combinations, you would need to \\nremap all category option combinations from the category combo which you wish to \\nremove, to the one which you wish to keep. \\n\\nIf one of the categories is not in use in any category combination, it should\\nconsider to be removed from the system.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CSCO\"},{\"name\":\"visualizations_not_viewed_one_year\",\"displayName\":\"Visualizations which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Visualizations which have not been viewed in the past 12 months\",\"introduction\":\"Visualizations should be regularly viewed in the system. In many cases, users may create charts for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to charts being difficult to find in the visualization app.\",\"recommendation\":\"Unused charts can be removed directly using the data visualization app by a user with sufficient authority. If charts are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"visualizations\",\"isSlow\":false,\"code\":\"VNVOY\"},{\"name\":\"categories_one_default_category_option\",\"displayName\":\"Only one default category option should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option with UID \\\"xYerKDKCefk\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option or move all references to category option \\\"xYerKDKCefk\\\" and then remove the unused conflicting category option.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CODCO\"},{\"name\":\"orgunits_multiple_spaces\",\"displayName\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"introduction\":\"Names and/or shortnames of organisation units should not contain multiple spaces. They are superfluous and may complicate the location of organisation units when they are searched.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the multiple spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMS\"},{\"name\":\"data_elements_aggregate_abandoned\",\"displayName\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"introduction\":\"Data elements are considered to be abandoned when they have not been edited in at least 100 days and do not have any data values associated with them. Often, these are the result of new or changed configurations that have been abandoned at some point.\",\"recommendation\":\"Data elements that have no data associated with them and which there are no plans to start using for data collection should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAA\"},{\"name\":\"data_elements_assigned_to_data_sets_with_different_period_types\",\"displayName\":\"Data elements assigned to data sets with different period type\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are assigned to at least one data set that has a different period type\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEATDSWDPT\"},{\"name\":\"data_elements_aggregate_no_groups\",\"displayName\":\"Aggregate data elements not in any data element groups.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not in any data element groups.\",\"introduction\":\"All data elements should be in a data element group. This allows users to find the data elements more easily in analysis\\n apps and also contributes to having more complete data element group sets.\\n Maintenance operations can also be made more efficient by applying\\n bulk settings (ex. sharing) to all data elements within a data element group.\",\"recommendation\":\"Data elements that are not in a data element group should be added to a relevant data element group. If the data elements are not needed, they should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANG\"},{\"name\":\"category_options_shared_within_category_combo\",\"displayName\":\"Category combinations with categories which share the same category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category combinations with categories which share the same category options.\",\"introduction\":\"As a general rule, category options should be reused where possible between categories. The exception to this rule however, is when you have a category combo with multiple categories, and within those categories, a category option is shared. As a simple example, lets say you have a category called \\\"Sex\\\" with options \\\"Male\\\"\\\", \\\"Female\\\" and \\\"Unknown\\\". There is also a second category called \\\"Age\\\" with options \\\"<15\\\", \\\"15+\\\", and \\\"Unknown\\\". A category combination called \\\"Age/Sex\\\" is then created with these two categories, which share the option \\\"Unknown\\\". This situation should be avoided, as it creates issues when analyzing data.\",\"recommendation\":\"The recommended approach to dealing with this situation is to create a new category combination, using two new categories. Using the example from the introduction, you should create two new category options called \\\"Unknown age\\\" and \\\"Unknown sex\\\". A new category combination can then be created with these new categories, which do not share category options. All data which is potentially associated with the old category combinations, would need to be reassigned to the new category option combinations. Any analytical objects which use the categories to be removed would also need to be updated.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"COSWCC\"},{\"name\":\"orgunits_null_island\",\"displayName\":\"Organisation units located within 100 km of Null Island (0,0).\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units located within 100 km of Null Island (0,0).\",\"introduction\":\"A common problem when importing coordinates is the inclusion of coordinates situated around the point of [Null Island](https://en.wikipedia.org/wiki/Null_Island). This is the point on the Earth's surface where the Prime Meridian and Equator intersect with a latitude of 0 and a longitude of 0. The point also happens to be situated currently in the middle of the ocean. This query identifies any points located within 100 km of the point having latitude and longitude equal to zero.\",\"recommendation\":\"Update the coordinates of the affected organization unit to the correct location.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONI\"},{\"name\":\"program_rule_actions_without_section\",\"displayName\":\"Program rules with actions lacking a program stage section\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a section but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWS\"},{\"name\":\"periods_3y_future\",\"displayName\":\"Periods which are more than three years in the future.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are more than three years in the future.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\nfar future. Different data entry clients may not properly validate for periods\\nwhich are in the future, and thus any periods in the future should be reviewed.\\nIn some cases, data may be valid for future dates, e.g. targets which are set for the\\nnext fiscal year.\",\"recommendation\":\"If any periods exist in the system in the future, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\\n\\nIn many cases, clients may mean to transmit\\ndata for January 2021, but due to data entry errors, January 2031 is selected. Thus,\\nany data in the far future should be investigated to ensure it does not result\\nfrom data entry errors.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"P3F\"},{\"name\":\"orgunits_trailing_spaces\",\"displayName\":\"Organisation units should not have trailing spaces.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have trailing spaces.\",\"introduction\":\"Trailing spaces in organisation units are superfluous.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the trailing spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OTS\"},{\"name\":\"validation_rule_groups_scarce\",\"displayName\":\"Validation rule should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Validation rule should have at least two members.\",\"introduction\":\"Generally validation rule groups should be composed of multiple validation rules.\",\"recommendation\":\"Considering removing groups which are empty or which have a single member. Alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"validationRuleGroups\",\"isSlow\":false,\"code\":\"VRGS\"},{\"name\":\"indicators_with_invalid_numerator\",\"displayName\":\"Indicators with invalid numerator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators where the numerator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWIN\"},{\"name\":\"categories_one_default_category_combo\",\"displayName\":\"Only one default category combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category combo should exist\",\"introduction\":\"There should only exist one category combo with name and code \\\"default\\\".\",\"recommendation\":\"Only the category combo with UID \\\"bjDvmb4bfuf\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category combo or move all references to category combo \\\"bjDvmb4bfuf\\\" and then remove the unused conflicting category combo.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CODCC\"},{\"name\":\"data_elements_without_data_sets\",\"displayName\":\"Data elements lacking data Sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data sets\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWDS\"},{\"name\":\"category_combos_unused\",\"displayName\":\"Category combinations not used by other metadata objects\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category combinations not used by other metadata objects\",\"introduction\":\"Category combinations which are unused in any datasets, data elements, programs or data approval workflows may be safe to delete. In some cases, category combinations may be created, but never actually used for anything. This may lead to situations where users and implementers are confused about which category combination should actually be used. In general, it should be safe to delete unused category combinations, except in situations where existing data has been associated with them.\",\"recommendation\":\"Check to see if any data is associated with the category combination before attempting to delete it. Category combinations which are not currently used in any metadata objects may still be valid for legacy reasons, but they should be reviewed to be sure they are still needed. Otherwise, it should be safe to remove them from the system.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCU\"},{\"name\":\"category_option_groups_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option groups should be composed of at least two category options. There can however be legitimate cases when a single category option is part of a group, especially in cases where there is a direct mapping between age bands and category options.\",\"recommendation\":\"Considering removing groups with zero or one category options, or alternatively, add additional category options to the group to make it more useful.\",\"issuesIdType\":\"categoryOptionGroups\",\"isSlow\":false,\"code\":\"COGS\"},{\"name\":\"datasets_empty\",\"displayName\":\"Datasets with no data elements.\",\"section\":\"Data sets\",\"severity\":\"WARNING\",\"description\":\"Datasets with no data elements.\",\"introduction\":\"All datasets should have data elements assigned to them.\",\"recommendation\":\"Remove empty datasets, or alternatively, assign data elements to them.\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DE\"},{\"name\":\"indicators_without_groups\",\"displayName\":\"Indicators lacking groups\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that do not have at least one group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWG\"},{\"name\":\"orgunit_groups_scarce\",\"displayName\":\"Organisation unit groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Organisation unit groups should have at least two members.\",\"introduction\":\"Generally, organisation unit groups should be composed of multiple organisation units.\",\"recommendation\":\"Considering removing groups with zero or one organisation units, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OGS\"},{\"name\":\"program_rules_without_priority\",\"displayName\":\"Program rules lacking a priority setting\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules with action type \\\"assign\\\" where the rule priority is not yet set\",\"recommendation\":\"Set a priority for the program rule(s)\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWP\"},{\"name\":\"categories_unique_category_combo\",\"displayName\":\"Different category combinations should not have the exact same combination of categories.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Different category combinations should not have the exact same combination of categories.\",\"introduction\":\"Category combinations should be a unique combination of categories. If two or more category combinations contain the exact same set of categories, this would be considered to be duplicative and potentially confusing to users.\",\"recommendation\":\"One category combo is kept, all references are updated to use this combo and other combos are removed.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CUCC\"},{\"name\":\"indicator_group_sets_scarce\",\"displayName\":\"Indicator groups sets should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups sets should have at least two members.\",\"introduction\":\"All indicator group set should be composed of at least two indicators groups.\",\"recommendation\":\"Considering removing indicator group sets with less than two indicator groups, or alternatively, add additional indicator groups to the indicator group set to make it more useful.\",\"issuesIdType\":\"indicatorGroupSets\",\"isSlow\":false,\"code\":\"IGSS\"},{\"name\":\"validation_rules_with_invalid_right_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a right side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWIRSE\"},{\"name\":\"data_elements_aggregate_aggregation_operator\",\"displayName\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"introduction\":\"Data elements which are not numeric (text, dates, etc) should have an aggregation operator set to NONE. Data elements which are able to be aggregated (numbers, integers, etc) should have an aggregation operator set to something other than NONE, most often SUM.\",\"recommendation\":\"Open the affected data elements in the Maintenance App and change their aggregation type to an appropriate type. Alternatively, these can be altered via the API.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAAO\"},{\"name\":\"org_unit_groups_without_group_sets\",\"displayName\":\"Organisation unit groups lacking group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation unit groups that aren't member of at least one organisation unit group set\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OUGWGS\"},{\"name\":\"program_rule_variables_without_attribute\",\"displayName\":\"Program rule variables lacking an attribute\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring an attribute source but that is not yet linked to an attribute\",\"recommendation\":\"Assign an attribute to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWA\"},{\"name\":\"program_indicator_groups_scarce\",\"displayName\":\"Program indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Program indicator groups should have at least two members.\",\"introduction\":\"Program indicator groups should generally be composed of two or more program indicators.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"programIndicatorGroups\",\"isSlow\":false,\"code\":\"PIGS\"},{\"name\":\"program_rules_no_expression\",\"displayName\":\"Program rules with no expression.\",\"section\":\"Program rules\",\"severity\":\"WARNING\",\"description\":\"Program rules with no expression.\",\"introduction\":\"All program rules should have an expression. Expressions are used by program rules to determine when they should be triggered. Program rules with no expression have no purpose.\",\"recommendation\":\"Using the DHIS2 user interface, assign an expression to each of the program rules which is missing one. Otherwise, if it is safe to delete the program rule with no expression, it is recommended to remove it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNE\"},{\"name\":\"data_elements_aggregate_no_data\",\"displayName\":\"Aggregate data elements with NO data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements with NO data values.\",\"introduction\":\"Data elements should generally always be associated with data values. If data elements exist in a data set which is active, but there are no data values associated with them, they may not be part of the data entry screens. Alternatively, the data element may have been added but never been associated with a dataset.\",\"recommendation\":\"Consider removing data elements with no data values.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAND\"},{\"name\":\"program_indicators_without_expression\",\"displayName\":\"Program indicators lacking an expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have no expression set yet\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWE\"},{\"name\":\"periods_distant_past\",\"displayName\":\"Periods which are in the distant past.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are in the distant past.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\ndistant past. Different data entry clients may not properly validate for periods\\nwhich are in the distant past, and thus these periods should be triaged to ensure\\nthat data has not been entered against them by mistake.\",\"recommendation\":\"If any periods exist in the system in the distant past, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PDP\"},{\"name\":\"org_units_being_orphaned\",\"displayName\":\"Orphaned organisation units\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that aren't level 1 units but that lack a parent so that they are not connected to the rest of the organisation tree\",\"recommendation\":\"Find (or create) and set the correct parent for the orphaned organisation unit(s). Eventually this is also caused by having set the wrong level.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUBO\"},{\"name\":\"cocs_wrong_cardinality\",\"displayName\":\"Category option combinations with incorrect cardinality.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with incorrect cardinality.\",\"introduction\":\"All category option combinations should have exactly the same number of category option associations as the number of categories in the category combination. If there are two categories in a category combination, then every category option combination should have exactly two category options.\\nCategory option combinations with the incorrect cardinality are usually the result of a category combination having been created, and then modified later. Suppose that two categories are used to create a category combination. Each category option combination of this category combo will have two category options. If an additional category is added to the category combination later, new category option combinations with three category options will be created and associated with this category combo. The original category option combinations would be considered to be invalid.\",\"recommendation\":\"Category option combinations which have an incorrect cardinality will be ignored by the DHIS2 analytics system and should be removed.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CWC\"},{\"name\":\"dashboards_not_viewed_one_year\",\"displayName\":\"Dashboards which have not been actively viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Dashboards which have not been actively viewed in the past 12 months\",\"introduction\":\"Dashboards should be regularly viewed in the system. In many cases, users may create dashboards for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to useful dashboards being difficult to find. This check identifies any dashboards which have not been viewed in the past year.\",\"recommendation\":\"Unused dashboards can be deleted in the entirety from the main dashboard app by clicking on the \\\"Edit\\\" button and choosing \\\"Delete\\\". Note that this process cannot be undone! Another option would be to alter the sharing of the dashboard so that it is not visible to any user.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNVOY\"}]", - "responseSize": 66022, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - } -] diff --git a/cypress/fixtures/network/40/users_should_be_able_to_create_jobs_that_take_parameters.json b/cypress/fixtures/network/40/users_should_be_able_to_create_jobs_that_take_parameters.json deleted file mode 100644 index 5851843bf..000000000 --- a/cypress/fixtures/network/40/users_should_be_able_to_create_jobs_that_take_parameters.json +++ /dev/null @@ -1,305 +0,0 @@ -[ - { - "path": "/api/40/systemSettings/helpPageLink", - "featureName": "Users should be able to create jobs that take parameters", - "static": false, - "count": 9, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"helpPageLink\":\"https://dhis2.github.io/dhis2-docs/master/en/user/html/dhis2_user_manual_en.html\"}", - "responseSize": 99, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/validationRuleGroups?paging=false", - "featureName": "Users should be able to create jobs that take parameters", - "static": false, - "count": 9, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"validationRuleGroups\":[{\"displayName\":\"ANC\",\"id\":\"UP1lctvalPn\"},{\"displayName\":\"Commodities\",\"id\":\"xcpl667ccfF\"},{\"displayName\":\"Critical event\",\"id\":\"xWtt9c443Lt\"},{\"displayName\":\"District stock\",\"id\":\"mEtdbIDDhix\"},{\"displayName\":\"Epidemic disease outbreak\",\"id\":\"y2yQIm79VTW\"},{\"displayName\":\"Facility Stock\",\"id\":\"SqyI8HKqI4g\"},{\"displayName\":\"Immunisation\",\"id\":\"UiOSY1iIdub\"},{\"displayName\":\"Infectious disease outbreak\",\"id\":\"WUZXEFdn1PX\"},{\"displayName\":\"Malaria\",\"id\":\"zlaSof6qLqF\"},{\"displayName\":\"Population\",\"id\":\"D3bItmtBpsW\"},{\"displayName\":\"TB\",\"id\":\"IMF6p1MqoHl\"},{\"displayName\":\"Testing\",\"id\":\"nMDkAJXsmlR\"}]}", - "responseSize": 628, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations?fields=*&paging=false", - "featureName": "Users should be able to create jobs that take parameters", - "static": false, - "count": 18, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"jobConfigurations\":[{\"href\":\"/40/jobConfigurations/sHMedQF7VYa\",\"name\":\"Credentials expiry alert\",\"created\":\"2017-12-08T12:45:18.351\",\"lastUpdated\":\"2023-02-28T15:24:55.737\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"CREDENTIALS_EXPIRY_ALERT\",\"cronExpression\":\"0 0 2 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.668\",\"lastRuntimeExecution\":\"00:00:00.062\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Credentials expiry alert\",\"favorite\":false,\"id\":\"sHMedQF7VYa\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/YvAwAmrqAtN\",\"name\":\"Dataset notification\",\"created\":\"2017-12-08T12:45:18.355\",\"lastUpdated\":\"2023-02-28T15:24:55.810\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"DATA_SET_NOTIFICATION\",\"cronExpression\":\"0 0 2 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.668\",\"lastRuntimeExecution\":\"00:00:00.137\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Dataset notification\",\"favorite\":false,\"id\":\"YvAwAmrqAtN\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/BFa3jDsbtdO\",\"name\":\"Data statistics\",\"created\":\"2017-12-08T12:45:18.337\",\"lastUpdated\":\"2023-02-28T15:24:55.877\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"DATA_STATISTICS\",\"cronExpression\":\"0 0 2 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.668\",\"lastRuntimeExecution\":\"00:00:00.207\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Data statistics\",\"favorite\":false,\"id\":\"BFa3jDsbtdO\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/pd6O228pqr0\",\"name\":\"File resource clean up\",\"created\":\"2017-12-08T12:45:18.317\",\"lastUpdated\":\"2023-02-28T15:24:55.839\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"FILE_RESOURCE_CLEANUP\",\"cronExpression\":\"0 0 2 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.669\",\"lastRuntimeExecution\":\"00:00:00.169\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"File resource clean up\",\"favorite\":false,\"id\":\"pd6O228pqr0\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/uwWCT2BMmlq\",\"name\":\"Remove expired or used reserved values\",\"created\":\"2021-06-10T12:37:25.034\",\"lastUpdated\":\"2023-02-28T15:24:55.923\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"REMOVE_USED_OR_EXPIRED_RESERVED_VALUES\",\"cronExpression\":\"0 0 2 ? * *\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.668\",\"lastRuntimeExecution\":\"00:00:00.253\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Remove expired or used reserved values\",\"favorite\":false,\"id\":\"uwWCT2BMmlq\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/vt21671bgno\",\"name\":\"System version update check notification\",\"created\":\"2021-12-21T12:31:00.047\",\"lastUpdated\":\"2023-02-28T16:33:40.425\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"SYSTEM_VERSION_UPDATE_CHECK\",\"cronExpression\":\"44 8 3 ? * *\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T03:08:44.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T16:33:39.585\",\"lastRuntimeExecution\":\"00:00:00.838\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"System version update check notification\",\"favorite\":false,\"id\":\"vt21671bgno\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/fUWM1At1TUx\",\"name\":\"User account expiry alert\",\"created\":\"2021-09-01T07:24:20.394\",\"lastUpdated\":\"2023-02-28T15:24:55.747\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"ACCOUNT_EXPIRY_ALERT\",\"cronExpression\":\"0 0 2 ? * *\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.669\",\"lastRuntimeExecution\":\"00:00:00.071\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"User account expiry alert\",\"favorite\":false,\"id\":\"fUWM1At1TUx\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/Js3vHn2AVuG\",\"name\":\"Validation result notification\",\"created\":\"2017-12-08T12:45:18.346\",\"lastUpdated\":\"2023-02-27T16:37:17.320\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"VALIDATION_RESULTS_NOTIFICATION\",\"cronExpression\":\"0 0 7 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-02-28T07:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-27T14:55:13.329\",\"lastRuntimeExecution\":\"00:00:00.022\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Validation result notification\",\"favorite\":false,\"id\":\"Js3vHn2AVuG\",\"attributeValues\":[]}]}", - "responseSize": 6953, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/analytics/tableTypes", - "featureName": "Users should be able to create jobs that take parameters", - "static": false, - "count": 9, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"]", - "responseSize": 122, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations/jobTypes?fields=*&paging=false", - "featureName": "Users should be able to create jobs that take parameters", - "static": false, - "count": 9, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"jobTypes\":[{\"name\":\"Data integrity\",\"jobType\":\"DATA_INTEGRITY\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"checks\",\"fieldName\":\"Checks\",\"persisted\":false,\"collectionName\":\"checks\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/dataIntegrity\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.parameters.DataIntegrityJobParameters$DataIntegrityReportType\",\"name\":\"type\",\"fieldName\":\"Type\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"REPORT\",\"SUMMARY\",\"DETAILS\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Resource table\",\"jobType\":\"RESOURCE_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Analytics table\",\"jobType\":\"ANALYTICS_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"skipPrograms\",\"fieldName\":\"Skip programs\",\"persisted\":false,\"collectionName\":\"skipPrograms\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/programs\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipResourceTables\",\"fieldName\":\"Skip resource tables\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Continuous analytics table\",\"jobType\":\"CONTINUOUS_ANALYTICS_TABLE\",\"schedulingType\":\"FIXED_DELAY\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"fullUpdateHourOfDay\",\"fieldName\":\"Full update hour of day\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Data sync\",\"jobType\":\"DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker programs data sync\",\"jobType\":\"TRACKER_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Event programs data sync\",\"jobType\":\"EVENT_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Meta data sync\",\"jobType\":\"META_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"trackerProgramPageSize\",\"fieldName\":\"Tracker program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"eventProgramPageSize\",\"fieldName\":\"Event program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"dataValuesPageSize\",\"fieldName\":\"Data values page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Aggregate data exchange\",\"jobType\":\"AGGREGATE_DATA_EXCHANGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"dataExchangeIds\",\"fieldName\":\"Data exchange ids\",\"persisted\":false,\"collectionName\":\"dataExchangeIds\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/aggregateDataExchanges\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Send scheduled message\",\"jobType\":\"SEND_SCHEDULED_MESSAGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Program notifications\",\"jobType\":\"PROGRAM_NOTIFICATIONS\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Monitoring\",\"jobType\":\"MONITORING\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"validationRuleGroups\",\"fieldName\":\"Validation rule groups\",\"persisted\":false,\"collectionName\":\"validationRuleGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/validationRuleGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"sendNotifications\",\"fieldName\":\"Send notifications\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"persistResults\",\"fieldName\":\"Persist results\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Push analysis\",\"jobType\":\"PUSH_ANALYSIS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"pushAnalysis\",\"fieldName\":\"Push analysis\",\"persisted\":false,\"collectionName\":\"pushAnalysis\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/pushAnalysis\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker search optimization\",\"jobType\":\"TRACKER_SEARCH_OPTIMIZATION\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"attributes\",\"fieldName\":\"Attributes\",\"persisted\":false,\"collectionName\":\"attributes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/trackedEntityAttributes/indexable\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipIndexDeletion\",\"fieldName\":\"Skip index deletion\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Predictor\",\"jobType\":\"PREDICTOR\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictors\",\"fieldName\":\"Predictors\",\"persisted\":false,\"collectionName\":\"predictors\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictors\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictorGroups\",\"fieldName\":\"Predictor groups\",\"persisted\":false,\"collectionName\":\"predictorGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictorGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Disable inactive users\",\"jobType\":\"DISABLE_INACTIVE_USERS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"inactiveMonths\",\"fieldName\":\"Inactive months\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"reminderDaysBefore\",\"fieldName\":\"Reminder days before\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Test\",\"jobType\":\"TEST\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Long\",\"name\":\"waitMillis\",\"fieldName\":\"Wait millis\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"stages\",\"fieldName\":\"Stages\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtStage\",\"fieldName\":\"Fail at stage\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"items\",\"fieldName\":\"Items\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtItem\",\"fieldName\":\"Fail at item\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Long\",\"name\":\"itemDuration\",\"fieldName\":\"Item duration\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.String\",\"name\":\"failWithMessage\",\"fieldName\":\"Fail with message\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"failWithException\",\"fieldName\":\"Fail with exception\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.JobProgress$FailurePolicy\",\"name\":\"failWithPolicy\",\"fieldName\":\"Fail with policy\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"PARENT\",\"FAIL\",\"SKIP_STAGE\",\"SKIP_ITEM\",\"SKIP_ITEM_OUTLIER\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"runStagesParallel\",\"fieldName\":\"Run stages parallel\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]}]}", - "responseSize": 24994, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictors?paging=false", - "featureName": "Users should be able to create jobs that take parameters", - "static": false, - "count": 9, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictors\":[{\"displayName\":\"Malaria Outbreak Threshold\",\"id\":\"tEK1OEqS4O1\"}]}", - "responseSize": 80, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/pushAnalysis?paging=false", - "featureName": "Users should be able to create jobs that take parameters", - "static": false, - "count": 9, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"pushAnalysis\":[{\"displayName\":\"Immunization Key Indicators Monthly Report\",\"id\":\"jtcMAKhWwnc\"}]}", - "responseSize": 98, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictorGroups?paging=false", - "featureName": "Users should be able to create jobs that take parameters", - "static": false, - "count": 9, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictorGroups\":[]}", - "responseSize": 22, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/dataIntegrity", - "featureName": "Users should be able to create jobs that take parameters", - "static": false, - "count": 9, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[{\"name\":\"orgunits_invalid_geometry\",\"displayName\":\"Organisation units with invalid geometry.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with invalid geometry.\",\"introduction\":\"DHIS2 uses the PostGIS database extension to manage the geographical information associated\\nwith organisation units. There are various reasons why geometries may be considered to be\\ninvalid including self-inclusions, self-intersections, and sliver polygons. Please see the\\nPostGIS documentation for a more in-depth discussion on this topic.\\n\\nInvalid geometry is not always a problem and may be able to be ignored, however, it has been observed in certain systems\\nthat this can lead to problems in analytics. If you are experiencing issues when generating analytics\\ntables, and see errors related to invalid geometries, you will need to either remove the invalid geometry,\\nor fix it.\",\"recommendation\":\"Update the geometry of the affected organisation units to a valid geometry. It may be possible to use the PostGIS function `ST_MakeValid` to automatically fix the problem. However, in other cases the geometry may need to be edited in a GIS tool, and then updated again in DHIS2.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OIG\"},{\"name\":\"data_elements_without_groups\",\"displayName\":\"Data elements lacking groups\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data element groups\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWG\"},{\"name\":\"orgunit_group_sets_excess_groups\",\"displayName\":\"Organisation units which belong to multiple groups in a group set.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which belong to multiple groups in a group set.\",\"introduction\":\"Organisation units should belong to exactly one group within each organisation unit group set of which they are a member. If the organisation unit belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the organisation units in the details list to exactly one group within each group set membership.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OGSEG\"},{\"name\":\"validation_rules_missing_value_strategy_null\",\"displayName\":\"All validation rule expressions should have a missing value strategy.\",\"section\":\"Validation rules\",\"severity\":\"SEVERE\",\"description\":\"All validation rule expressions should have a missing value strategy.\",\"introduction\":\"Validation rules are composed of a left and right side expression. In certain systems the missing value strategy may not be defined. This may lead to an exception during validation rule analysis. The affected validation rules should be corrected to with an appropriate missing value strategy.\",\"recommendation\":\"Using the results of the the details SQL view, identify the affected validation rules and which side of the rule the missing value strategy has not been specified. Using the maintenance app, make the appropriate corrections and save the rule.\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRMVSN\"},{\"name\":\"category_combos_being_invalid\",\"displayName\":\"Invalid Category-combos\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Lists all category-combos that are invalid\",\"recommendation\":\"Make sure the category combo is assigned to at least one category and that all categories have category options \",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCBI\"},{\"name\":\"data_elements_in_data_set_not_in_form\",\"displayName\":\"Data sets with data elements not in data entry form\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that have data elements which are neither a member of the set's data entry form nor a member of the sets section\",\"recommendation\":\"Either remove the data elements in question or make them a member of the set's form or section\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DEIDSNIF\"},{\"name\":\"categories_no_options\",\"displayName\":\"Categories with no category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with no category options\",\"introduction\":\"Categories should always have at least one category option.\",\"recommendation\":\"Any categories without category options should either be removed from the system if they are not in use. Otherwise, appropriate category options should be added to the category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CNO\"},{\"name\":\"data_elements_aggregate_no_analysis\",\"displayName\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"introduction\":\"All aggregate data elements that are captured in DHIS2 should be used to produce some type of analysis output (charts, maps, tables). This can be by using them directly in an output, or by having them contribute to an indicator calculation that is used an output.\",\"recommendation\":\"Data elements that are not routinely being reviewed in analysis, either directly or indirectly through indicators, should be reviewed to determine if they still need to be collected. If these are meant to be used in routine review, then associated outputs should be created using them. If these data elements are not going to be used for any type of information review, consideration should be made to either archive them or delete them.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANA\"},{\"name\":\"indicators_duplicated_terms\",\"displayName\":\"Indicators with the same terms.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same terms.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check attempts to identify indicators with the same formulas, regardless of the order of their their terms. Suppose you have an indicator which calculates total ANC attendance: ANC Total = ANC1 + ANC2 + ANC3 Suppose then another indicator exists in the system, which has been defined as: ANC Totals = ANC3 + ANC2 + ANC1 These two indicators are equivalent, and will produce the same result, and are thus considered to be duplicated.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Considered deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IDT\"},{\"name\":\"program_rules_no_action\",\"displayName\":\"Program rules with no action.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules with no action.\",\"introduction\":\"All program rules should have an action.\",\"recommendation\":\"Using the DHIS2 user interface, assign an action to each of the program rules which is missing one. Alternatively, if the program rule is not in use, then consider removing it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNA\"},{\"name\":\"orgunits_compulsory_group_count\",\"displayName\":\"Organisation units that are not in all compulsory orgunit group sets\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Orgunits that are not in all compulsory orgunit group sets\",\"introduction\":\"If any organisation unit groups have been marked as compulsory, each and every organisation unit should belong to exactly one group within each compulsory organisation unit group set. Assume we have created a group set called \\\"Ownership\\\" with two groups \\\"Public\\\" and \\\"Private\\\". Each and every organisation unit contained in the hierarchy must belong to either Public or Private (but not both). When organisation unit are not part of a group set, results in the analytics apps will not be correct if the organisation unit group set is used for aggregation.\",\"recommendation\":\"For each of the organisation units identified in the details query, you should assign the appropriate organisation unit group within the group set. Alternatively, if the group set should not be compulsory, you should change this attribute.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OCGC\"},{\"name\":\"orgunits_no_coordinates\",\"displayName\":\"Organisation units with no coordinates.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with no coordinates.\",\"introduction\":\"Ideally, all organisation units contained in the DHIS2 hierarchy should have a valid\\nset of coordinates. Usually for all organisation units above the facility level,\\nthese coordinates should be a polygon which provides the boundary of the organisation\\nunit. For facilities, these are usually represented as point coordinates.\\n\\nThere can obviously be exceptions to this rule. Mobile health facilities may not have\\na fixed location. Community health workers or wards below the facility level\\nmay also not have a defined or definable coordinate.\\n\\nThis check is intended to allow you to review all organisation units which do\\nnot have any coordinates and make a determination as to whether they should be updated.\",\"recommendation\":\"Where appropriate, update the geometry of each organisation unit with a valid geometry.\\nYou may need to contact the appropriate local government office to obtain a copy\\nof district boundaries, commonly referred to as \\\"shape files\\\". Another possibility\\nis to use freely available boundary files from GADM (https://gadm.org)\\n\\nIf facilities are missing coordinates, it may be possible to obtain these from\\nthe facility staff using their smart phone to get the coordinates. Images\\nfrom Google Maps can also often be used to estimate the position of a facility,\\nassuming that you have good enough resolution and local knowledge of where\\nit is located.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONC\"},{\"name\":\"data_sets_not_assigned_to_org_units\",\"displayName\":\"Data sets not assigned to organisation units\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that are not assigned to any organisation units\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DSNATOU\"},{\"name\":\"dashboards_no_items\",\"displayName\":\"Dashboards with no items.\",\"section\":\"Dashboards\",\"severity\":\"INFO\",\"description\":\"Dashboards with no items.\",\"introduction\":\"All dashboards should have content on them. Dashboards without any content do not serve any purpose, and can make it more difficult to find relevant dashboards with content.\",\"recommendation\":\"Dashboards without content that have not been modified in the last 14 days should be considered for deletion.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNI\"},{\"name\":\"orgunits_same_name_and_parent\",\"displayName\":\"Organisation units should not have the same name and parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have the same name and parent.\",\"introduction\":\"Organisation units may have exactly the same name. This may become confusing to users, particularly if the organisation unit has the same name and same parent. This can easily lead to data entry or analysis mistakes as users have no way to distinguish between the two organisation units.\",\"recommendation\":\"Rename identically named organisation units which share the same parent using the maintenance app.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OSNAP\"},{\"name\":\"indicators_not_grouped\",\"displayName\":\"Indicators not in any groups.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not in any groups.\",\"introduction\":\"All indicators should be in an indicator group. This allows users to find the indicators more easily in analysis apps and also contributes to having more complete indicators group sets. Maintenance operations can also be made more efficient by applying bulk settings (ex. sharing, filtering) to all indicators within an indicator group.\",\"recommendation\":\"Indicators that are not in a indicator group should be added to a relevant indicator group. If the indicators are not needed, they should be deleted.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"ING\"},{\"name\":\"category_option_group_sets_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option group sets should be composed of at least two category option groups.\",\"recommendation\":\"Considering removing groups with zero or one category option groups, or alternatively, add additional category option groups to the group set to make it more useful.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSS\"},{\"name\":\"org_units_without_groups\",\"displayName\":\"Organisation units lacking groups\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are not connected to at least one group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWG\"},{\"name\":\"data_elements_excess_groupset_membership\",\"displayName\":\"Data elements which belong to multiple groups in a group set.\",\"section\":\"data_elements\",\"severity\":\"SEVERE\",\"description\":\"Data elements which belong to multiple groups in a group set.\",\"introduction\":\"Data elements should belong to exactly one group within each data element group set of which they are a member. If the data element belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the data elements in the details list to exactly one data element group within each group set.\",\"issuesIdType\":\"data_elements_aggregate\",\"isSlow\":false,\"code\":\"DEEGM\"},{\"name\":\"data_element_groups_scarce\",\"displayName\":\"Data element groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Data element groups should have at least two members.\",\"introduction\":\"All data element groups should be composed of at least two data elements.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"dataElementGroups\",\"isSlow\":false,\"code\":\"DEGS\"},{\"name\":\"orgunits_not_contained_by_parent\",\"displayName\":\"Organisation units with point coordinates should be contained by their parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with point coordinates should be contained by their parent.\",\"introduction\":\"Facilities are often represented as points in the DHIS2 hierarchy. Their parent organisation units geometry should contain all facilities which have been associated with them.\",\"recommendation\":\"Often boundary files are simplified when they are uploaded into DHIS2. This process may result in\\nfacilities which are located close to the border of a given district to fall outside of the district\\nwhen the boundary is simplified. This is considered to be more of a cosmetic problem for most DHIS2\\ninstallations, but could become an issue if any geospatial analysis is attempted using the\\nboundaries and point coordinates.\\n\\nIn cases where the facility falls outside of its parent's boundary\\nyou should confirm that the coordinates are correct. If the location is close to the boundary, you\\nmay want to reconsider how the boundary files have been simplified. Otherwise, if the location of\\nthe facility is completely incorrect, it should be rectified.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONCBP\"},{\"name\":\"program_rules_message_no_template\",\"displayName\":\"Program rules actions which should send or schedule a message without a message template.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules actions which should send or schedule a message without a message template.\",\"introduction\":\"Program rule actions of type \\\"Send message\\\" or \\\"Schedule message\\\" should have an associated message template.\",\"recommendation\":\"Using the DHIS2 user interface, assign a message template to each of the program rule actions which send or schedule messages but which does not have an association with a message template.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRMNT\"},{\"name\":\"indicators_with_invalid_denominator\",\"displayName\":\"Indicators with invalid denominator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"List all indicators where the denominator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWID\"},{\"name\":\"indicator_types_duplicated\",\"displayName\":\"Indicator types with the same factor.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicator types with the same factor.\",\"introduction\":\"Indicators can be assigned a factor which is multiplied by the indicator's value. For example, if you create a percentage based indicator, you can assign the indicator a factor of 100, which would be multiplied by the actual value of the indicator calculated by DHIS2. In general, having multiple indicator types with the same factor is not recommended. It is duplicative, and may lead to confusion.\",\"recommendation\":\"Duplicated indicator types should consider to be removed from the system. Consider choosing one of the duplicated indicator types as the one to keep, and then update all indicators which share the same factor to this indicator type. The duplicated indicator types can then be removed from the system.\",\"issuesIdType\":\"indicatorTypes\",\"isSlow\":false,\"code\":\"ITD\"},{\"name\":\"options_sets_empty\",\"displayName\":\"Empty option sets\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Empty option sets\",\"introduction\":\"All option sets should generally include at least two items. Empty option sets serve no purpose.\",\"recommendation\":\"Options should either be added to the option set, or the option set should be deleted.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSE\"},{\"name\":\"category_options_no_categories\",\"displayName\":\"Category options with no categories.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options with no categories.\",\"introduction\":\"All category options should belong to at least one category.\",\"recommendation\":\"Category options which are not part of any category should be removed or alternatively should be added to an appropriate category.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CONC\"},{\"name\":\"orgunits_orphaned\",\"displayName\":\"Orphaned organisation units.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"Orphaned organisation units.\",\"introduction\":\"Orphaned organisation units are those which have neither parents nor any children. This means that they have no relationship to the main organisation unit hierarchy. These may be created by faulty metadata imports or direct manipulation of the database.\",\"recommendation\":\"The orphaned organisation units should be assigned a parent or removed from the system. It is recommended to use the DHIS2 API for this task if possible. If this is not possible, then they may need to be removed through direct SQL on the DHIS2 database.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OO\"},{\"name\":\"indicators_with_identical_formulas\",\"displayName\":\"Indicators with identical formulas\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that have the identical formulas with at least one other indicator\",\"recommendation\":\"Check if the same indicator should be used everywhere and remove duplicates\",\"isSlow\":false,\"code\":\"IWIF\"},{\"name\":\"program_indicators_with_invalid_filters\",\"displayName\":\"Program indicators with invalid filter\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators with invalid filter expression\",\"recommendation\":\"Check that the expression evaluates to true/false\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIF\"},{\"name\":\"program_rules_without_condition\",\"displayName\":\"Program rules lacking a condition\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that have no condition yet\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWC\"},{\"name\":\"categories_one_default_category\",\"displayName\":\"Only one default category should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category should exist\",\"introduction\":\"There should only exist one category with name and code \\\"default\\\".\",\"recommendation\":\"Only the category with UID \\\"GLevLNI9wkl\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category or move all references to category \\\"GLevLNI9wkl\\\" and then remove the unused conflicting category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CODC\"},{\"name\":\"org_units_with_cyclic_references\",\"displayName\":\"Organisation units with cyclic references\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that have a conflicting parent hierarchy definition so that two organisation units become parent of each other or in other words they form a circular reference\",\"recommendation\":\"One of the organisation units must be setup wrongly and needs to be corrected so that a non-circular tree connects the two\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWCR\"},{\"name\":\"program_rule_variables_without_data_element\",\"displayName\":\"Program rule variables lacking a data element\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring a data element source but that is not yet linked to a data element\",\"recommendation\":\"Assign a data element to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWDE\"},{\"name\":\"org_units_violating_exclusive_group_sets\",\"displayName\":\"Organisation units with conflicting exclusive group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are members of multiple exclusive organisation unit groups\",\"recommendation\":\"Remove the organisation unit from all but one exclusive organisation unit group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUVEGS\"},{\"name\":\"program_rule_actions_without_data_object\",\"displayName\":\"Program rules with actions lacking a data object\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires either a data element or an attribute but is not connected either\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWDO\"},{\"name\":\"orgunits_openingdate_gt_closeddate\",\"displayName\":\"Organisation units which have an opening date later than the closed date.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which have an opening date later than the closed date.\",\"introduction\":\"If a closing date has been defined for an organisation unit, it should always be after the opening date (if one has been defined).\",\"recommendation\":\"Alter either the opening or closing date of all affected organisation units so that the closing date is after the opening date.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OOGC\"},{\"name\":\"categories_one_default_category_option_combo\",\"displayName\":\"Only one default category option combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option combo should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option combo with UID \\\"HllvX50cXC0\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option combo or move all references to category option combo \\\"HllvX50cXC0\\\" and then remove the unused conflicting category option combo.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CODCOC\"},{\"name\":\"category_option_group_sets_incomplete\",\"displayName\":\"Category option group sets which do not contain all category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option group sets which which do not contain all category options.\",\"introduction\":\"Category option group sets are composed of multiple category option groups, which are in turn composed of various category options. Category option group sets are often used to group related category options together for analytical purposes. Categories are also composed of category options. In general, but not always, category option group sets should contain all category options of related categories. Suppose we have the following two age categories. \\nAge coarse: <15, 15+ Age fine: <1, 1-10, 10-14,15-19,20-24,25-29,30-34,35-39,40-44,45+\\nIn many cases, related data elements may be disaggregated differently. This may be to differences in the way in which the data is collected, or as is often the case, the disaggregation has changed over time. If we wish to analyze data for two different data elements (one of which uses Age coarse and the other Age fine), we can create a category option group set consisting of two category option groups which should consist of the following category options from above. \\n<15: <15, <1, 1-10, 10-14 15+: 15+, 15-19,20-24,25-29,30-34,35-39,40-44,45+\\nSuppose that we happen to omit the category option \\\"<1\\\" from the \\\"<15\\\" category option group. This would result in potential aggregation errors in when using this category option group set in any analytical objects. The details of this metadata check would return the UID and name of the category option group set. The category and category option would also be provided. Using the previous example, we would see \\\"Age fine:{<1}\\\" in the metadata check details section, to indicate that the <1 category option which is part of the \\\"Age fine\\\" category, is missing from the category option group set.\\nThere may exist specific analytical reasons why specific category options are omitted from a category option group set. However,these should usually be special cases. This metadata check will identify cases where category option group sets appear to be incomplete, however you should carefully review any groups which appear in the details. \\nThis check may also produce a number of issues which may at first glance appear to be false positives. In some cases, category options may be added to a category by mistake. When category option group sets are created, this extraneous option may be omitted and thus appear as missing from the group set. \\nAnother observed situation is where an option like \\\"Unknown\\\" is used across unrelated categories. Suppose you have two categories \\\"Age (<15, 15+, Unknown)\\\" and \\\"Sex (Male,Female,Unknown)\\\". Similar to above, we create category option group sets like: \\n<15: <15 15+: 15+ Unknown: Unknown\\nThis metadata check will report that \\\"Male\\\" and \\\"Female\\\" are missing from the group set. This is because the same \\\"Unknown\\\" option is shared between two different, unrelated categories. It is recommended that if this situation occurs, that you create two separate \\\"Unknown\\\" category options like \\\"Unknown sex\\\" and \\\"Unknown age\\\".\",\"recommendation\":\"Using the maintenance app, assign the missing category options to an appropriate category option group within the affected category option group set.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSI\"},{\"name\":\"maps_not_viewed_one_year\",\"displayName\":\"Maps which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Maps which have not been viewed in the past 12 months\",\"introduction\":\"Maps should be regularly viewed in the system. In many cases, users may create maps for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system and being difficult to find in the Maps app.\",\"recommendation\":\"Unused maps can be removed directly using the Maps app by a user with sufficient authority. If maps are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"maps\",\"isSlow\":false,\"code\":\"MNVOY\"},{\"name\":\"indicators_exact_duplicates\",\"displayName\":\"Indicators with the same formula.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same formula.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check shows indicators which have the exact same formulas. Spaces which are present are removed prior to comparison.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Consider deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IED\"},{\"name\":\"indicators_violating_exclusive_group_sets\",\"displayName\":\"Indicators with conflicting exclusive group sets\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that are members of multiple exclusive indicator groups\",\"recommendation\":\"Remove the indicator from all but one exclusive indicator group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IVEGS\"},{\"name\":\"category_options_excess_groupset_membership\",\"displayName\":\"Category options which belong to multiple groups in a category option group set.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category options which belong to multiple groups in a category option group set.\",\"introduction\":\"Category options should belong to exactly one category option group which are part of a category option group set. If the category option belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the category option in the details list to exactly one category option group within each group set.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"COEGM\"},{\"name\":\"periods_duplicates\",\"displayName\":\"Duplicate Periods\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Lists all periods duplicates which have identical type and start date\",\"recommendation\":\"Make sure all database references are moved to one of the duplicates before deleting the unused duplicates\",\"isSlow\":false,\"code\":\"PD\"},{\"name\":\"program_rules_without_action\",\"displayName\":\"Program rules lacking an action\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that are not connected to any program rule action\",\"recommendation\":\"Connect the rule to an action or consider removing the rule\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWA\"},{\"name\":\"orgunits_multiple_roots\",\"displayName\":\"The organisation unit hierarchy should have a single root.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"The organisation unit hierarchy should have a single root.\",\"introduction\":\"Every DHIS2 system should have a single root organisation unit. This means a single organisation unit from which all other branches of the hierarchy are descendants.\",\"recommendation\":\"Once you have decided which organisation unit should be the real root of the organisation unit hierarchy, you should update the parent organisation unit. This can be done by using the DHIS2 API or my updating the value directly in the `organisationunit` table.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMR\"},{\"name\":\"validation_rules_with_invalid_left_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a left side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWILSE\"},{\"name\":\"program_rule_actions_without_stage_id\",\"displayName\":\"Program rules with actions lacking a program stage\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a program stage but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWSI\"},{\"name\":\"indicator_groups_scarce\",\"displayName\":\"Indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups should have at least two members.\",\"introduction\":\"All indicator groups should be composed of at least two indicators.\",\"recommendation\":\"Considering removing groups with zero or one groups, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"indicatorGroups\",\"isSlow\":false,\"code\":\"IGS\"},{\"name\":\"option_sets_wrong_sort_order\",\"displayName\":\"Option sets with possibly wrong sort order.\",\"section\":\"Option sets\",\"severity\":\"SEVERE\",\"description\":\"Option sets with possibly wrong sort order.\",\"introduction\":\"Option sets contain options which should be ordered sequentially. The sort_order property should always start with 1 and have a sequential sequence. If there are three options in the option set, then the sort order should be 1,2,3. \\nIn certain circumstances, options may be deleted from an option set, and the sort order may become corrupted. This may lead to a situation where it becomes impossible to update the option set from the maintenance app, and may lead to problems when attempting to using the option set in the data entry app.\",\"recommendation\":\"If it is possible to open the option set in the maintenance app, you can resort the option set, which should correct the problem. Another possible solution is to directly update the sort_order property of in the `optionset` table in the database, ensuring that a valid sequence is present for all options in the option set.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSWSO\"},{\"name\":\"periods_same_start_end_date\",\"displayName\":\"Periods with the same start and end dates\",\"section\":\"Periods\",\"severity\":\"CRITICAL\",\"description\":\"Periods with the same start and end dates\",\"introduction\":\"Different periods should not have exactly the same start and end date.\",\"recommendation\":\"All references to the duplicate periods should be removed from the system and reassigned. It is recommended to use the period with the lower periodid.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PSSED\"},{\"name\":\"program_indicators_with_invalid_expressions\",\"displayName\":\"Program indicators with invalid expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have an invalid expression\",\"recommendation\":\"Check that the expression evaluates to a number\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIE\"},{\"name\":\"program_rule_actions_without_notification\",\"displayName\":\"Program rule with actions lacking a notification template\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires a notification template but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWN\"},{\"name\":\"indicator_no_analysis\",\"displayName\":\"Indicators not used in analytical objects.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not used in analytical objects.\",\"introduction\":\"Indicators should be used to produce some type of analytical output (charts, maps, pivot tables). Note: indicators used in datasets to provide feedback during data entry are not counted as being used in analytical objects.\",\"recommendation\":\"Indicators that are not routinely being used for analysis should be reviewed to determine if they are useful and needed. If these are meant to be used for routine review, then associated outputs should be created using them. If these indicators are not going to be used for any type of information review, and are not used in data sets for feedback during data entry, consideration should be made to delete them.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"INA\"},{\"name\":\"user_groups_scarce\",\"displayName\":\"User groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"User groups should have at least two members.\",\"introduction\":\"Generally, user groups should contain two or more users.\",\"recommendation\":\"Considering removing user groups with less than two users, or alternatively, add additional users to the group to make it more useful.\",\"issuesIdType\":\"userGroups\",\"isSlow\":false,\"code\":\"UGS\"},{\"name\":\"data_elements_aggregate_with_different_period_types\",\"displayName\":\"Aggregate data elements which belong to datasets with different period types.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"SEVERE\",\"description\":\"Aggregate data elements which belong to datasets with different period types.\",\"introduction\":\"Data elements should not belong to datasets with different period types.\",\"recommendation\":\"If you need to collect data with different period types (e.g. weekly and monthly) you should use different data elements for each period type. In general, it is not recommended to collect data with different frequencies, since in general, data collected at higher frequencies (e.g. weekly) can be aggregated to data with lower frequencies (e.g yearly).\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAWDPT\"},{\"name\":\"validation_rules_without_groups\",\"displayName\":\"Validation rules lacking groups\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that are not member of at least one validation rule group\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWG\"},{\"name\":\"category_option_combos_disjoint\",\"displayName\":\"Category option combinations with disjoint associations.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with disjoint associations.\",\"introduction\":\"Under certain circumstances, category option combinations may exist in the system, but not have any direct association with category options which are associated with their category combination. This situation usually occurs when category options have been added to a category and then the category is added to a category combination. New category option combinations are created in the system at this point. If any of the category options are then removed in one of the underlying categories, a so-called disjoint category option combination may result. This is a category option combination which has no direct association with any category options in any of the categories associated with the category combination.\",\"recommendation\":\"The disjoint category option combinations should be removed from the system if possible. However, if any data is associated with the category option combination, a determination will need to be made in regards of how to deal with this data.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"COCD\"},{\"name\":\"options_sets_unused\",\"displayName\":\"Option sets which are not used\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Option sets which are not used\",\"introduction\":\"Option sets should be used for some purpose. The may be used by data elements, comments, attributes, or tracked entity attributes.\",\"recommendation\":\"Consider deleting unused option sets, or alternatively, ensure that they have been properly assigned.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSU\"},{\"name\":\"catoptioncombos_no_catcombo\",\"displayName\":\"Category options combinations with no category combination.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options combinations with no category combination.\",\"introduction\":\"All category option combinations should be associated with a category combo. In certain cases, when category combinations are deleted,the linkage between a category option combination and a category combination may become corrupted.\",\"recommendation\":\"Check if any data is associated with the category option combination in question. Likely, the data should either be deleted or migrated to a valid category option combination. Any data which is associated with any of these category option combinations will not be available through either the data entry modules or any of the analytical apps.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CNC\"},{\"name\":\"data_elements_violating_exclusive_group_sets\",\"displayName\":\"Data elements with conflicting exclusive group sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are a members of more than one exclusive data element set belonging to the same data element group set\",\"recommendation\":\"Either remove the data element from all but one exclusive group set or consider if the set really should be an exclusive group set\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEVEGS\"},{\"name\":\"categories_same_category_options\",\"displayName\":\"Categories with the same category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with the same category options\",\"introduction\":\"Categories with the exact same category options should be considered to be merged. Categories with the exact same category options may be easily confused by users in analysis. The details view will provide a list of categories which have the exact same category options. For each duplicated category a number in parentheses such as (1) will indicate which categories belong to duplicated groups.\",\"recommendation\":\"If category combinations have already been created with duplicative categories,\\nit is recommended that you do not take any action, but rather ensure\\nthat users understand that there may be two category combinations which are duplicative.\\n\\nIf you choose to merge the duplicative category combinations, you would need to \\nremap all category option combinations from the category combo which you wish to \\nremove, to the one which you wish to keep. \\n\\nIf one of the categories is not in use in any category combination, it should\\nconsider to be removed from the system.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CSCO\"},{\"name\":\"visualizations_not_viewed_one_year\",\"displayName\":\"Visualizations which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Visualizations which have not been viewed in the past 12 months\",\"introduction\":\"Visualizations should be regularly viewed in the system. In many cases, users may create charts for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to charts being difficult to find in the visualization app.\",\"recommendation\":\"Unused charts can be removed directly using the data visualization app by a user with sufficient authority. If charts are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"visualizations\",\"isSlow\":false,\"code\":\"VNVOY\"},{\"name\":\"categories_one_default_category_option\",\"displayName\":\"Only one default category option should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option with UID \\\"xYerKDKCefk\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option or move all references to category option \\\"xYerKDKCefk\\\" and then remove the unused conflicting category option.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CODCO\"},{\"name\":\"orgunits_multiple_spaces\",\"displayName\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"introduction\":\"Names and/or shortnames of organisation units should not contain multiple spaces. They are superfluous and may complicate the location of organisation units when they are searched.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the multiple spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMS\"},{\"name\":\"data_elements_aggregate_abandoned\",\"displayName\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"introduction\":\"Data elements are considered to be abandoned when they have not been edited in at least 100 days and do not have any data values associated with them. Often, these are the result of new or changed configurations that have been abandoned at some point.\",\"recommendation\":\"Data elements that have no data associated with them and which there are no plans to start using for data collection should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAA\"},{\"name\":\"data_elements_assigned_to_data_sets_with_different_period_types\",\"displayName\":\"Data elements assigned to data sets with different period type\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are assigned to at least one data set that has a different period type\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEATDSWDPT\"},{\"name\":\"data_elements_aggregate_no_groups\",\"displayName\":\"Aggregate data elements not in any data element groups.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not in any data element groups.\",\"introduction\":\"All data elements should be in a data element group. This allows users to find the data elements more easily in analysis\\n apps and also contributes to having more complete data element group sets.\\n Maintenance operations can also be made more efficient by applying\\n bulk settings (ex. sharing) to all data elements within a data element group.\",\"recommendation\":\"Data elements that are not in a data element group should be added to a relevant data element group. If the data elements are not needed, they should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANG\"},{\"name\":\"category_options_shared_within_category_combo\",\"displayName\":\"Category combinations with categories which share the same category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category combinations with categories which share the same category options.\",\"introduction\":\"As a general rule, category options should be reused where possible between categories. The exception to this rule however, is when you have a category combo with multiple categories, and within those categories, a category option is shared. As a simple example, lets say you have a category called \\\"Sex\\\" with options \\\"Male\\\"\\\", \\\"Female\\\" and \\\"Unknown\\\". There is also a second category called \\\"Age\\\" with options \\\"<15\\\", \\\"15+\\\", and \\\"Unknown\\\". A category combination called \\\"Age/Sex\\\" is then created with these two categories, which share the option \\\"Unknown\\\". This situation should be avoided, as it creates issues when analyzing data.\",\"recommendation\":\"The recommended approach to dealing with this situation is to create a new category combination, using two new categories. Using the example from the introduction, you should create two new category options called \\\"Unknown age\\\" and \\\"Unknown sex\\\". A new category combination can then be created with these new categories, which do not share category options. All data which is potentially associated with the old category combinations, would need to be reassigned to the new category option combinations. Any analytical objects which use the categories to be removed would also need to be updated.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"COSWCC\"},{\"name\":\"orgunits_null_island\",\"displayName\":\"Organisation units located within 100 km of Null Island (0,0).\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units located within 100 km of Null Island (0,0).\",\"introduction\":\"A common problem when importing coordinates is the inclusion of coordinates situated around the point of [Null Island](https://en.wikipedia.org/wiki/Null_Island). This is the point on the Earth's surface where the Prime Meridian and Equator intersect with a latitude of 0 and a longitude of 0. The point also happens to be situated currently in the middle of the ocean. This query identifies any points located within 100 km of the point having latitude and longitude equal to zero.\",\"recommendation\":\"Update the coordinates of the affected organization unit to the correct location.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONI\"},{\"name\":\"program_rule_actions_without_section\",\"displayName\":\"Program rules with actions lacking a program stage section\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a section but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWS\"},{\"name\":\"periods_3y_future\",\"displayName\":\"Periods which are more than three years in the future.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are more than three years in the future.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\nfar future. Different data entry clients may not properly validate for periods\\nwhich are in the future, and thus any periods in the future should be reviewed.\\nIn some cases, data may be valid for future dates, e.g. targets which are set for the\\nnext fiscal year.\",\"recommendation\":\"If any periods exist in the system in the future, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\\n\\nIn many cases, clients may mean to transmit\\ndata for January 2021, but due to data entry errors, January 2031 is selected. Thus,\\nany data in the far future should be investigated to ensure it does not result\\nfrom data entry errors.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"P3F\"},{\"name\":\"orgunits_trailing_spaces\",\"displayName\":\"Organisation units should not have trailing spaces.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have trailing spaces.\",\"introduction\":\"Trailing spaces in organisation units are superfluous.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the trailing spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OTS\"},{\"name\":\"validation_rule_groups_scarce\",\"displayName\":\"Validation rule should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Validation rule should have at least two members.\",\"introduction\":\"Generally validation rule groups should be composed of multiple validation rules.\",\"recommendation\":\"Considering removing groups which are empty or which have a single member. Alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"validationRuleGroups\",\"isSlow\":false,\"code\":\"VRGS\"},{\"name\":\"indicators_with_invalid_numerator\",\"displayName\":\"Indicators with invalid numerator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators where the numerator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWIN\"},{\"name\":\"categories_one_default_category_combo\",\"displayName\":\"Only one default category combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category combo should exist\",\"introduction\":\"There should only exist one category combo with name and code \\\"default\\\".\",\"recommendation\":\"Only the category combo with UID \\\"bjDvmb4bfuf\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category combo or move all references to category combo \\\"bjDvmb4bfuf\\\" and then remove the unused conflicting category combo.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CODCC\"},{\"name\":\"data_elements_without_data_sets\",\"displayName\":\"Data elements lacking data Sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data sets\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWDS\"},{\"name\":\"category_combos_unused\",\"displayName\":\"Category combinations not used by other metadata objects\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category combinations not used by other metadata objects\",\"introduction\":\"Category combinations which are unused in any datasets, data elements, programs or data approval workflows may be safe to delete. In some cases, category combinations may be created, but never actually used for anything. This may lead to situations where users and implementers are confused about which category combination should actually be used. In general, it should be safe to delete unused category combinations, except in situations where existing data has been associated with them.\",\"recommendation\":\"Check to see if any data is associated with the category combination before attempting to delete it. Category combinations which are not currently used in any metadata objects may still be valid for legacy reasons, but they should be reviewed to be sure they are still needed. Otherwise, it should be safe to remove them from the system.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCU\"},{\"name\":\"category_option_groups_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option groups should be composed of at least two category options. There can however be legitimate cases when a single category option is part of a group, especially in cases where there is a direct mapping between age bands and category options.\",\"recommendation\":\"Considering removing groups with zero or one category options, or alternatively, add additional category options to the group to make it more useful.\",\"issuesIdType\":\"categoryOptionGroups\",\"isSlow\":false,\"code\":\"COGS\"},{\"name\":\"datasets_empty\",\"displayName\":\"Datasets with no data elements.\",\"section\":\"Data sets\",\"severity\":\"WARNING\",\"description\":\"Datasets with no data elements.\",\"introduction\":\"All datasets should have data elements assigned to them.\",\"recommendation\":\"Remove empty datasets, or alternatively, assign data elements to them.\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DE\"},{\"name\":\"indicators_without_groups\",\"displayName\":\"Indicators lacking groups\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that do not have at least one group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWG\"},{\"name\":\"orgunit_groups_scarce\",\"displayName\":\"Organisation unit groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Organisation unit groups should have at least two members.\",\"introduction\":\"Generally, organisation unit groups should be composed of multiple organisation units.\",\"recommendation\":\"Considering removing groups with zero or one organisation units, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OGS\"},{\"name\":\"program_rules_without_priority\",\"displayName\":\"Program rules lacking a priority setting\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules with action type \\\"assign\\\" where the rule priority is not yet set\",\"recommendation\":\"Set a priority for the program rule(s)\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWP\"},{\"name\":\"categories_unique_category_combo\",\"displayName\":\"Different category combinations should not have the exact same combination of categories.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Different category combinations should not have the exact same combination of categories.\",\"introduction\":\"Category combinations should be a unique combination of categories. If two or more category combinations contain the exact same set of categories, this would be considered to be duplicative and potentially confusing to users.\",\"recommendation\":\"One category combo is kept, all references are updated to use this combo and other combos are removed.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CUCC\"},{\"name\":\"indicator_group_sets_scarce\",\"displayName\":\"Indicator groups sets should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups sets should have at least two members.\",\"introduction\":\"All indicator group set should be composed of at least two indicators groups.\",\"recommendation\":\"Considering removing indicator group sets with less than two indicator groups, or alternatively, add additional indicator groups to the indicator group set to make it more useful.\",\"issuesIdType\":\"indicatorGroupSets\",\"isSlow\":false,\"code\":\"IGSS\"},{\"name\":\"validation_rules_with_invalid_right_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a right side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWIRSE\"},{\"name\":\"data_elements_aggregate_aggregation_operator\",\"displayName\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"introduction\":\"Data elements which are not numeric (text, dates, etc) should have an aggregation operator set to NONE. Data elements which are able to be aggregated (numbers, integers, etc) should have an aggregation operator set to something other than NONE, most often SUM.\",\"recommendation\":\"Open the affected data elements in the Maintenance App and change their aggregation type to an appropriate type. Alternatively, these can be altered via the API.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAAO\"},{\"name\":\"org_unit_groups_without_group_sets\",\"displayName\":\"Organisation unit groups lacking group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation unit groups that aren't member of at least one organisation unit group set\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OUGWGS\"},{\"name\":\"program_rule_variables_without_attribute\",\"displayName\":\"Program rule variables lacking an attribute\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring an attribute source but that is not yet linked to an attribute\",\"recommendation\":\"Assign an attribute to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWA\"},{\"name\":\"program_indicator_groups_scarce\",\"displayName\":\"Program indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Program indicator groups should have at least two members.\",\"introduction\":\"Program indicator groups should generally be composed of two or more program indicators.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"programIndicatorGroups\",\"isSlow\":false,\"code\":\"PIGS\"},{\"name\":\"program_rules_no_expression\",\"displayName\":\"Program rules with no expression.\",\"section\":\"Program rules\",\"severity\":\"WARNING\",\"description\":\"Program rules with no expression.\",\"introduction\":\"All program rules should have an expression. Expressions are used by program rules to determine when they should be triggered. Program rules with no expression have no purpose.\",\"recommendation\":\"Using the DHIS2 user interface, assign an expression to each of the program rules which is missing one. Otherwise, if it is safe to delete the program rule with no expression, it is recommended to remove it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNE\"},{\"name\":\"data_elements_aggregate_no_data\",\"displayName\":\"Aggregate data elements with NO data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements with NO data values.\",\"introduction\":\"Data elements should generally always be associated with data values. If data elements exist in a data set which is active, but there are no data values associated with them, they may not be part of the data entry screens. Alternatively, the data element may have been added but never been associated with a dataset.\",\"recommendation\":\"Consider removing data elements with no data values.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAND\"},{\"name\":\"program_indicators_without_expression\",\"displayName\":\"Program indicators lacking an expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have no expression set yet\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWE\"},{\"name\":\"periods_distant_past\",\"displayName\":\"Periods which are in the distant past.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are in the distant past.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\ndistant past. Different data entry clients may not properly validate for periods\\nwhich are in the distant past, and thus these periods should be triaged to ensure\\nthat data has not been entered against them by mistake.\",\"recommendation\":\"If any periods exist in the system in the distant past, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PDP\"},{\"name\":\"org_units_being_orphaned\",\"displayName\":\"Orphaned organisation units\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that aren't level 1 units but that lack a parent so that they are not connected to the rest of the organisation tree\",\"recommendation\":\"Find (or create) and set the correct parent for the orphaned organisation unit(s). Eventually this is also caused by having set the wrong level.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUBO\"},{\"name\":\"cocs_wrong_cardinality\",\"displayName\":\"Category option combinations with incorrect cardinality.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with incorrect cardinality.\",\"introduction\":\"All category option combinations should have exactly the same number of category option associations as the number of categories in the category combination. If there are two categories in a category combination, then every category option combination should have exactly two category options.\\nCategory option combinations with the incorrect cardinality are usually the result of a category combination having been created, and then modified later. Suppose that two categories are used to create a category combination. Each category option combination of this category combo will have two category options. If an additional category is added to the category combination later, new category option combinations with three category options will be created and associated with this category combo. The original category option combinations would be considered to be invalid.\",\"recommendation\":\"Category option combinations which have an incorrect cardinality will be ignored by the DHIS2 analytics system and should be removed.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CWC\"},{\"name\":\"dashboards_not_viewed_one_year\",\"displayName\":\"Dashboards which have not been actively viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Dashboards which have not been actively viewed in the past 12 months\",\"introduction\":\"Dashboards should be regularly viewed in the system. In many cases, users may create dashboards for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to useful dashboards being difficult to find. This check identifies any dashboards which have not been viewed in the past year.\",\"recommendation\":\"Unused dashboards can be deleted in the entirety from the main dashboard app by clicking on the \\\"Edit\\\" button and choosing \\\"Delete\\\". Note that this process cannot be undone! Another option would be to alter the sharing of the dashboard so that it is not visible to any user.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNVOY\"}]", - "responseSize": 66022, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - } -] diff --git a/cypress/fixtures/network/40/users_should_be_able_to_create_jobs_without_parameters.json b/cypress/fixtures/network/40/users_should_be_able_to_create_jobs_without_parameters.json deleted file mode 100644 index ef519d277..000000000 --- a/cypress/fixtures/network/40/users_should_be_able_to_create_jobs_without_parameters.json +++ /dev/null @@ -1,305 +0,0 @@ -[ - { - "path": "/api/40/systemSettings/helpPageLink", - "featureName": "Users should be able to create jobs without parameters", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"helpPageLink\":\"https://dhis2.github.io/dhis2-docs/master/en/user/html/dhis2_user_manual_en.html\"}", - "responseSize": 99, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/validationRuleGroups?paging=false", - "featureName": "Users should be able to create jobs without parameters", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"validationRuleGroups\":[{\"displayName\":\"ANC\",\"id\":\"UP1lctvalPn\"},{\"displayName\":\"Commodities\",\"id\":\"xcpl667ccfF\"},{\"displayName\":\"Critical event\",\"id\":\"xWtt9c443Lt\"},{\"displayName\":\"District stock\",\"id\":\"mEtdbIDDhix\"},{\"displayName\":\"Epidemic disease outbreak\",\"id\":\"y2yQIm79VTW\"},{\"displayName\":\"Facility Stock\",\"id\":\"SqyI8HKqI4g\"},{\"displayName\":\"Immunisation\",\"id\":\"UiOSY1iIdub\"},{\"displayName\":\"Infectious disease outbreak\",\"id\":\"WUZXEFdn1PX\"},{\"displayName\":\"Malaria\",\"id\":\"zlaSof6qLqF\"},{\"displayName\":\"Population\",\"id\":\"D3bItmtBpsW\"},{\"displayName\":\"TB\",\"id\":\"IMF6p1MqoHl\"},{\"displayName\":\"Testing\",\"id\":\"nMDkAJXsmlR\"}]}", - "responseSize": 628, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations/jobTypes?fields=*&paging=false", - "featureName": "Users should be able to create jobs without parameters", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"jobTypes\":[{\"name\":\"Data integrity\",\"jobType\":\"DATA_INTEGRITY\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"checks\",\"fieldName\":\"Checks\",\"persisted\":false,\"collectionName\":\"checks\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/dataIntegrity\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.parameters.DataIntegrityJobParameters$DataIntegrityReportType\",\"name\":\"type\",\"fieldName\":\"Type\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"REPORT\",\"SUMMARY\",\"DETAILS\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Resource table\",\"jobType\":\"RESOURCE_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Analytics table\",\"jobType\":\"ANALYTICS_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"skipPrograms\",\"fieldName\":\"Skip programs\",\"persisted\":false,\"collectionName\":\"skipPrograms\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/programs\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipResourceTables\",\"fieldName\":\"Skip resource tables\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Continuous analytics table\",\"jobType\":\"CONTINUOUS_ANALYTICS_TABLE\",\"schedulingType\":\"FIXED_DELAY\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"fullUpdateHourOfDay\",\"fieldName\":\"Full update hour of day\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Data sync\",\"jobType\":\"DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker programs data sync\",\"jobType\":\"TRACKER_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Event programs data sync\",\"jobType\":\"EVENT_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Meta data sync\",\"jobType\":\"META_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"trackerProgramPageSize\",\"fieldName\":\"Tracker program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"eventProgramPageSize\",\"fieldName\":\"Event program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"dataValuesPageSize\",\"fieldName\":\"Data values page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Aggregate data exchange\",\"jobType\":\"AGGREGATE_DATA_EXCHANGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"dataExchangeIds\",\"fieldName\":\"Data exchange ids\",\"persisted\":false,\"collectionName\":\"dataExchangeIds\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/aggregateDataExchanges\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Send scheduled message\",\"jobType\":\"SEND_SCHEDULED_MESSAGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Program notifications\",\"jobType\":\"PROGRAM_NOTIFICATIONS\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Monitoring\",\"jobType\":\"MONITORING\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"validationRuleGroups\",\"fieldName\":\"Validation rule groups\",\"persisted\":false,\"collectionName\":\"validationRuleGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/validationRuleGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"sendNotifications\",\"fieldName\":\"Send notifications\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"persistResults\",\"fieldName\":\"Persist results\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Push analysis\",\"jobType\":\"PUSH_ANALYSIS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"pushAnalysis\",\"fieldName\":\"Push analysis\",\"persisted\":false,\"collectionName\":\"pushAnalysis\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/pushAnalysis\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker search optimization\",\"jobType\":\"TRACKER_SEARCH_OPTIMIZATION\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"attributes\",\"fieldName\":\"Attributes\",\"persisted\":false,\"collectionName\":\"attributes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/trackedEntityAttributes/indexable\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipIndexDeletion\",\"fieldName\":\"Skip index deletion\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Predictor\",\"jobType\":\"PREDICTOR\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictors\",\"fieldName\":\"Predictors\",\"persisted\":false,\"collectionName\":\"predictors\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictors\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictorGroups\",\"fieldName\":\"Predictor groups\",\"persisted\":false,\"collectionName\":\"predictorGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictorGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Disable inactive users\",\"jobType\":\"DISABLE_INACTIVE_USERS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"inactiveMonths\",\"fieldName\":\"Inactive months\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"reminderDaysBefore\",\"fieldName\":\"Reminder days before\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Test\",\"jobType\":\"TEST\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Long\",\"name\":\"waitMillis\",\"fieldName\":\"Wait millis\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"stages\",\"fieldName\":\"Stages\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtStage\",\"fieldName\":\"Fail at stage\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"items\",\"fieldName\":\"Items\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtItem\",\"fieldName\":\"Fail at item\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Long\",\"name\":\"itemDuration\",\"fieldName\":\"Item duration\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.String\",\"name\":\"failWithMessage\",\"fieldName\":\"Fail with message\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"failWithException\",\"fieldName\":\"Fail with exception\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.JobProgress$FailurePolicy\",\"name\":\"failWithPolicy\",\"fieldName\":\"Fail with policy\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"PARENT\",\"FAIL\",\"SKIP_STAGE\",\"SKIP_ITEM\",\"SKIP_ITEM_OUTLIER\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"runStagesParallel\",\"fieldName\":\"Run stages parallel\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]}]}", - "responseSize": 24994, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/analytics/tableTypes", - "featureName": "Users should be able to create jobs without parameters", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"]", - "responseSize": 122, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations?fields=*&paging=false", - "featureName": "Users should be able to create jobs without parameters", - "static": false, - "count": 8, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"jobConfigurations\":[{\"href\":\"/40/jobConfigurations/sHMedQF7VYa\",\"name\":\"Credentials expiry alert\",\"created\":\"2017-12-08T12:45:18.351\",\"lastUpdated\":\"2023-02-28T15:24:55.737\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"CREDENTIALS_EXPIRY_ALERT\",\"cronExpression\":\"0 0 2 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.668\",\"lastRuntimeExecution\":\"00:00:00.062\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Credentials expiry alert\",\"favorite\":false,\"id\":\"sHMedQF7VYa\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/YvAwAmrqAtN\",\"name\":\"Dataset notification\",\"created\":\"2017-12-08T12:45:18.355\",\"lastUpdated\":\"2023-02-28T15:24:55.810\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"DATA_SET_NOTIFICATION\",\"cronExpression\":\"0 0 2 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.668\",\"lastRuntimeExecution\":\"00:00:00.137\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Dataset notification\",\"favorite\":false,\"id\":\"YvAwAmrqAtN\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/BFa3jDsbtdO\",\"name\":\"Data statistics\",\"created\":\"2017-12-08T12:45:18.337\",\"lastUpdated\":\"2023-02-28T15:24:55.877\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"DATA_STATISTICS\",\"cronExpression\":\"0 0 2 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.668\",\"lastRuntimeExecution\":\"00:00:00.207\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Data statistics\",\"favorite\":false,\"id\":\"BFa3jDsbtdO\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/pd6O228pqr0\",\"name\":\"File resource clean up\",\"created\":\"2017-12-08T12:45:18.317\",\"lastUpdated\":\"2023-02-28T15:24:55.839\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"FILE_RESOURCE_CLEANUP\",\"cronExpression\":\"0 0 2 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.669\",\"lastRuntimeExecution\":\"00:00:00.169\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"File resource clean up\",\"favorite\":false,\"id\":\"pd6O228pqr0\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/uwWCT2BMmlq\",\"name\":\"Remove expired or used reserved values\",\"created\":\"2021-06-10T12:37:25.034\",\"lastUpdated\":\"2023-02-28T15:24:55.923\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"REMOVE_USED_OR_EXPIRED_RESERVED_VALUES\",\"cronExpression\":\"0 0 2 ? * *\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.668\",\"lastRuntimeExecution\":\"00:00:00.253\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Remove expired or used reserved values\",\"favorite\":false,\"id\":\"uwWCT2BMmlq\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/vt21671bgno\",\"name\":\"System version update check notification\",\"created\":\"2021-12-21T12:31:00.047\",\"lastUpdated\":\"2023-02-28T16:33:40.425\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"SYSTEM_VERSION_UPDATE_CHECK\",\"cronExpression\":\"44 8 3 ? * *\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T03:08:44.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T16:33:39.585\",\"lastRuntimeExecution\":\"00:00:00.838\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"System version update check notification\",\"favorite\":false,\"id\":\"vt21671bgno\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/fUWM1At1TUx\",\"name\":\"User account expiry alert\",\"created\":\"2021-09-01T07:24:20.394\",\"lastUpdated\":\"2023-02-28T15:24:55.747\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"ACCOUNT_EXPIRY_ALERT\",\"cronExpression\":\"0 0 2 ? * *\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.669\",\"lastRuntimeExecution\":\"00:00:00.071\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"User account expiry alert\",\"favorite\":false,\"id\":\"fUWM1At1TUx\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/Js3vHn2AVuG\",\"name\":\"Validation result notification\",\"created\":\"2017-12-08T12:45:18.346\",\"lastUpdated\":\"2023-02-27T16:37:17.320\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"VALIDATION_RESULTS_NOTIFICATION\",\"cronExpression\":\"0 0 7 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-02-28T07:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-27T14:55:13.329\",\"lastRuntimeExecution\":\"00:00:00.022\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Validation result notification\",\"favorite\":false,\"id\":\"Js3vHn2AVuG\",\"attributeValues\":[]}]}", - "responseSize": 6953, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/pushAnalysis?paging=false", - "featureName": "Users should be able to create jobs without parameters", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"pushAnalysis\":[{\"displayName\":\"Immunization Key Indicators Monthly Report\",\"id\":\"jtcMAKhWwnc\"}]}", - "responseSize": 98, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictors?paging=false", - "featureName": "Users should be able to create jobs without parameters", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictors\":[{\"displayName\":\"Malaria Outbreak Threshold\",\"id\":\"tEK1OEqS4O1\"}]}", - "responseSize": 80, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictorGroups?paging=false", - "featureName": "Users should be able to create jobs without parameters", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictorGroups\":[]}", - "responseSize": 22, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/dataIntegrity", - "featureName": "Users should be able to create jobs without parameters", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[{\"name\":\"orgunits_invalid_geometry\",\"displayName\":\"Organisation units with invalid geometry.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with invalid geometry.\",\"introduction\":\"DHIS2 uses the PostGIS database extension to manage the geographical information associated\\nwith organisation units. There are various reasons why geometries may be considered to be\\ninvalid including self-inclusions, self-intersections, and sliver polygons. Please see the\\nPostGIS documentation for a more in-depth discussion on this topic.\\n\\nInvalid geometry is not always a problem and may be able to be ignored, however, it has been observed in certain systems\\nthat this can lead to problems in analytics. If you are experiencing issues when generating analytics\\ntables, and see errors related to invalid geometries, you will need to either remove the invalid geometry,\\nor fix it.\",\"recommendation\":\"Update the geometry of the affected organisation units to a valid geometry. It may be possible to use the PostGIS function `ST_MakeValid` to automatically fix the problem. However, in other cases the geometry may need to be edited in a GIS tool, and then updated again in DHIS2.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OIG\"},{\"name\":\"data_elements_without_groups\",\"displayName\":\"Data elements lacking groups\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data element groups\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWG\"},{\"name\":\"orgunit_group_sets_excess_groups\",\"displayName\":\"Organisation units which belong to multiple groups in a group set.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which belong to multiple groups in a group set.\",\"introduction\":\"Organisation units should belong to exactly one group within each organisation unit group set of which they are a member. If the organisation unit belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the organisation units in the details list to exactly one group within each group set membership.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OGSEG\"},{\"name\":\"validation_rules_missing_value_strategy_null\",\"displayName\":\"All validation rule expressions should have a missing value strategy.\",\"section\":\"Validation rules\",\"severity\":\"SEVERE\",\"description\":\"All validation rule expressions should have a missing value strategy.\",\"introduction\":\"Validation rules are composed of a left and right side expression. In certain systems the missing value strategy may not be defined. This may lead to an exception during validation rule analysis. The affected validation rules should be corrected to with an appropriate missing value strategy.\",\"recommendation\":\"Using the results of the the details SQL view, identify the affected validation rules and which side of the rule the missing value strategy has not been specified. Using the maintenance app, make the appropriate corrections and save the rule.\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRMVSN\"},{\"name\":\"category_combos_being_invalid\",\"displayName\":\"Invalid Category-combos\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Lists all category-combos that are invalid\",\"recommendation\":\"Make sure the category combo is assigned to at least one category and that all categories have category options \",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCBI\"},{\"name\":\"data_elements_in_data_set_not_in_form\",\"displayName\":\"Data sets with data elements not in data entry form\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that have data elements which are neither a member of the set's data entry form nor a member of the sets section\",\"recommendation\":\"Either remove the data elements in question or make them a member of the set's form or section\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DEIDSNIF\"},{\"name\":\"categories_no_options\",\"displayName\":\"Categories with no category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with no category options\",\"introduction\":\"Categories should always have at least one category option.\",\"recommendation\":\"Any categories without category options should either be removed from the system if they are not in use. Otherwise, appropriate category options should be added to the category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CNO\"},{\"name\":\"data_elements_aggregate_no_analysis\",\"displayName\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"introduction\":\"All aggregate data elements that are captured in DHIS2 should be used to produce some type of analysis output (charts, maps, tables). This can be by using them directly in an output, or by having them contribute to an indicator calculation that is used an output.\",\"recommendation\":\"Data elements that are not routinely being reviewed in analysis, either directly or indirectly through indicators, should be reviewed to determine if they still need to be collected. If these are meant to be used in routine review, then associated outputs should be created using them. If these data elements are not going to be used for any type of information review, consideration should be made to either archive them or delete them.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANA\"},{\"name\":\"indicators_duplicated_terms\",\"displayName\":\"Indicators with the same terms.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same terms.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check attempts to identify indicators with the same formulas, regardless of the order of their their terms. Suppose you have an indicator which calculates total ANC attendance: ANC Total = ANC1 + ANC2 + ANC3 Suppose then another indicator exists in the system, which has been defined as: ANC Totals = ANC3 + ANC2 + ANC1 These two indicators are equivalent, and will produce the same result, and are thus considered to be duplicated.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Considered deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IDT\"},{\"name\":\"program_rules_no_action\",\"displayName\":\"Program rules with no action.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules with no action.\",\"introduction\":\"All program rules should have an action.\",\"recommendation\":\"Using the DHIS2 user interface, assign an action to each of the program rules which is missing one. Alternatively, if the program rule is not in use, then consider removing it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNA\"},{\"name\":\"orgunits_compulsory_group_count\",\"displayName\":\"Organisation units that are not in all compulsory orgunit group sets\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Orgunits that are not in all compulsory orgunit group sets\",\"introduction\":\"If any organisation unit groups have been marked as compulsory, each and every organisation unit should belong to exactly one group within each compulsory organisation unit group set. Assume we have created a group set called \\\"Ownership\\\" with two groups \\\"Public\\\" and \\\"Private\\\". Each and every organisation unit contained in the hierarchy must belong to either Public or Private (but not both). When organisation unit are not part of a group set, results in the analytics apps will not be correct if the organisation unit group set is used for aggregation.\",\"recommendation\":\"For each of the organisation units identified in the details query, you should assign the appropriate organisation unit group within the group set. Alternatively, if the group set should not be compulsory, you should change this attribute.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OCGC\"},{\"name\":\"orgunits_no_coordinates\",\"displayName\":\"Organisation units with no coordinates.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with no coordinates.\",\"introduction\":\"Ideally, all organisation units contained in the DHIS2 hierarchy should have a valid\\nset of coordinates. Usually for all organisation units above the facility level,\\nthese coordinates should be a polygon which provides the boundary of the organisation\\nunit. For facilities, these are usually represented as point coordinates.\\n\\nThere can obviously be exceptions to this rule. Mobile health facilities may not have\\na fixed location. Community health workers or wards below the facility level\\nmay also not have a defined or definable coordinate.\\n\\nThis check is intended to allow you to review all organisation units which do\\nnot have any coordinates and make a determination as to whether they should be updated.\",\"recommendation\":\"Where appropriate, update the geometry of each organisation unit with a valid geometry.\\nYou may need to contact the appropriate local government office to obtain a copy\\nof district boundaries, commonly referred to as \\\"shape files\\\". Another possibility\\nis to use freely available boundary files from GADM (https://gadm.org)\\n\\nIf facilities are missing coordinates, it may be possible to obtain these from\\nthe facility staff using their smart phone to get the coordinates. Images\\nfrom Google Maps can also often be used to estimate the position of a facility,\\nassuming that you have good enough resolution and local knowledge of where\\nit is located.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONC\"},{\"name\":\"data_sets_not_assigned_to_org_units\",\"displayName\":\"Data sets not assigned to organisation units\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that are not assigned to any organisation units\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DSNATOU\"},{\"name\":\"dashboards_no_items\",\"displayName\":\"Dashboards with no items.\",\"section\":\"Dashboards\",\"severity\":\"INFO\",\"description\":\"Dashboards with no items.\",\"introduction\":\"All dashboards should have content on them. Dashboards without any content do not serve any purpose, and can make it more difficult to find relevant dashboards with content.\",\"recommendation\":\"Dashboards without content that have not been modified in the last 14 days should be considered for deletion.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNI\"},{\"name\":\"orgunits_same_name_and_parent\",\"displayName\":\"Organisation units should not have the same name and parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have the same name and parent.\",\"introduction\":\"Organisation units may have exactly the same name. This may become confusing to users, particularly if the organisation unit has the same name and same parent. This can easily lead to data entry or analysis mistakes as users have no way to distinguish between the two organisation units.\",\"recommendation\":\"Rename identically named organisation units which share the same parent using the maintenance app.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OSNAP\"},{\"name\":\"indicators_not_grouped\",\"displayName\":\"Indicators not in any groups.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not in any groups.\",\"introduction\":\"All indicators should be in an indicator group. This allows users to find the indicators more easily in analysis apps and also contributes to having more complete indicators group sets. Maintenance operations can also be made more efficient by applying bulk settings (ex. sharing, filtering) to all indicators within an indicator group.\",\"recommendation\":\"Indicators that are not in a indicator group should be added to a relevant indicator group. If the indicators are not needed, they should be deleted.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"ING\"},{\"name\":\"category_option_group_sets_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option group sets should be composed of at least two category option groups.\",\"recommendation\":\"Considering removing groups with zero or one category option groups, or alternatively, add additional category option groups to the group set to make it more useful.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSS\"},{\"name\":\"org_units_without_groups\",\"displayName\":\"Organisation units lacking groups\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are not connected to at least one group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWG\"},{\"name\":\"data_elements_excess_groupset_membership\",\"displayName\":\"Data elements which belong to multiple groups in a group set.\",\"section\":\"data_elements\",\"severity\":\"SEVERE\",\"description\":\"Data elements which belong to multiple groups in a group set.\",\"introduction\":\"Data elements should belong to exactly one group within each data element group set of which they are a member. If the data element belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the data elements in the details list to exactly one data element group within each group set.\",\"issuesIdType\":\"data_elements_aggregate\",\"isSlow\":false,\"code\":\"DEEGM\"},{\"name\":\"data_element_groups_scarce\",\"displayName\":\"Data element groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Data element groups should have at least two members.\",\"introduction\":\"All data element groups should be composed of at least two data elements.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"dataElementGroups\",\"isSlow\":false,\"code\":\"DEGS\"},{\"name\":\"orgunits_not_contained_by_parent\",\"displayName\":\"Organisation units with point coordinates should be contained by their parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with point coordinates should be contained by their parent.\",\"introduction\":\"Facilities are often represented as points in the DHIS2 hierarchy. Their parent organisation units geometry should contain all facilities which have been associated with them.\",\"recommendation\":\"Often boundary files are simplified when they are uploaded into DHIS2. This process may result in\\nfacilities which are located close to the border of a given district to fall outside of the district\\nwhen the boundary is simplified. This is considered to be more of a cosmetic problem for most DHIS2\\ninstallations, but could become an issue if any geospatial analysis is attempted using the\\nboundaries and point coordinates.\\n\\nIn cases where the facility falls outside of its parent's boundary\\nyou should confirm that the coordinates are correct. If the location is close to the boundary, you\\nmay want to reconsider how the boundary files have been simplified. Otherwise, if the location of\\nthe facility is completely incorrect, it should be rectified.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONCBP\"},{\"name\":\"program_rules_message_no_template\",\"displayName\":\"Program rules actions which should send or schedule a message without a message template.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules actions which should send or schedule a message without a message template.\",\"introduction\":\"Program rule actions of type \\\"Send message\\\" or \\\"Schedule message\\\" should have an associated message template.\",\"recommendation\":\"Using the DHIS2 user interface, assign a message template to each of the program rule actions which send or schedule messages but which does not have an association with a message template.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRMNT\"},{\"name\":\"indicators_with_invalid_denominator\",\"displayName\":\"Indicators with invalid denominator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"List all indicators where the denominator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWID\"},{\"name\":\"indicator_types_duplicated\",\"displayName\":\"Indicator types with the same factor.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicator types with the same factor.\",\"introduction\":\"Indicators can be assigned a factor which is multiplied by the indicator's value. For example, if you create a percentage based indicator, you can assign the indicator a factor of 100, which would be multiplied by the actual value of the indicator calculated by DHIS2. In general, having multiple indicator types with the same factor is not recommended. It is duplicative, and may lead to confusion.\",\"recommendation\":\"Duplicated indicator types should consider to be removed from the system. Consider choosing one of the duplicated indicator types as the one to keep, and then update all indicators which share the same factor to this indicator type. The duplicated indicator types can then be removed from the system.\",\"issuesIdType\":\"indicatorTypes\",\"isSlow\":false,\"code\":\"ITD\"},{\"name\":\"options_sets_empty\",\"displayName\":\"Empty option sets\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Empty option sets\",\"introduction\":\"All option sets should generally include at least two items. Empty option sets serve no purpose.\",\"recommendation\":\"Options should either be added to the option set, or the option set should be deleted.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSE\"},{\"name\":\"category_options_no_categories\",\"displayName\":\"Category options with no categories.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options with no categories.\",\"introduction\":\"All category options should belong to at least one category.\",\"recommendation\":\"Category options which are not part of any category should be removed or alternatively should be added to an appropriate category.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CONC\"},{\"name\":\"orgunits_orphaned\",\"displayName\":\"Orphaned organisation units.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"Orphaned organisation units.\",\"introduction\":\"Orphaned organisation units are those which have neither parents nor any children. This means that they have no relationship to the main organisation unit hierarchy. These may be created by faulty metadata imports or direct manipulation of the database.\",\"recommendation\":\"The orphaned organisation units should be assigned a parent or removed from the system. It is recommended to use the DHIS2 API for this task if possible. If this is not possible, then they may need to be removed through direct SQL on the DHIS2 database.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OO\"},{\"name\":\"indicators_with_identical_formulas\",\"displayName\":\"Indicators with identical formulas\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that have the identical formulas with at least one other indicator\",\"recommendation\":\"Check if the same indicator should be used everywhere and remove duplicates\",\"isSlow\":false,\"code\":\"IWIF\"},{\"name\":\"program_indicators_with_invalid_filters\",\"displayName\":\"Program indicators with invalid filter\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators with invalid filter expression\",\"recommendation\":\"Check that the expression evaluates to true/false\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIF\"},{\"name\":\"program_rules_without_condition\",\"displayName\":\"Program rules lacking a condition\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that have no condition yet\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWC\"},{\"name\":\"categories_one_default_category\",\"displayName\":\"Only one default category should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category should exist\",\"introduction\":\"There should only exist one category with name and code \\\"default\\\".\",\"recommendation\":\"Only the category with UID \\\"GLevLNI9wkl\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category or move all references to category \\\"GLevLNI9wkl\\\" and then remove the unused conflicting category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CODC\"},{\"name\":\"org_units_with_cyclic_references\",\"displayName\":\"Organisation units with cyclic references\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that have a conflicting parent hierarchy definition so that two organisation units become parent of each other or in other words they form a circular reference\",\"recommendation\":\"One of the organisation units must be setup wrongly and needs to be corrected so that a non-circular tree connects the two\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWCR\"},{\"name\":\"program_rule_variables_without_data_element\",\"displayName\":\"Program rule variables lacking a data element\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring a data element source but that is not yet linked to a data element\",\"recommendation\":\"Assign a data element to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWDE\"},{\"name\":\"org_units_violating_exclusive_group_sets\",\"displayName\":\"Organisation units with conflicting exclusive group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are members of multiple exclusive organisation unit groups\",\"recommendation\":\"Remove the organisation unit from all but one exclusive organisation unit group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUVEGS\"},{\"name\":\"program_rule_actions_without_data_object\",\"displayName\":\"Program rules with actions lacking a data object\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires either a data element or an attribute but is not connected either\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWDO\"},{\"name\":\"orgunits_openingdate_gt_closeddate\",\"displayName\":\"Organisation units which have an opening date later than the closed date.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which have an opening date later than the closed date.\",\"introduction\":\"If a closing date has been defined for an organisation unit, it should always be after the opening date (if one has been defined).\",\"recommendation\":\"Alter either the opening or closing date of all affected organisation units so that the closing date is after the opening date.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OOGC\"},{\"name\":\"categories_one_default_category_option_combo\",\"displayName\":\"Only one default category option combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option combo should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option combo with UID \\\"HllvX50cXC0\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option combo or move all references to category option combo \\\"HllvX50cXC0\\\" and then remove the unused conflicting category option combo.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CODCOC\"},{\"name\":\"category_option_group_sets_incomplete\",\"displayName\":\"Category option group sets which do not contain all category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option group sets which which do not contain all category options.\",\"introduction\":\"Category option group sets are composed of multiple category option groups, which are in turn composed of various category options. Category option group sets are often used to group related category options together for analytical purposes. Categories are also composed of category options. In general, but not always, category option group sets should contain all category options of related categories. Suppose we have the following two age categories. \\nAge coarse: <15, 15+ Age fine: <1, 1-10, 10-14,15-19,20-24,25-29,30-34,35-39,40-44,45+\\nIn many cases, related data elements may be disaggregated differently. This may be to differences in the way in which the data is collected, or as is often the case, the disaggregation has changed over time. If we wish to analyze data for two different data elements (one of which uses Age coarse and the other Age fine), we can create a category option group set consisting of two category option groups which should consist of the following category options from above. \\n<15: <15, <1, 1-10, 10-14 15+: 15+, 15-19,20-24,25-29,30-34,35-39,40-44,45+\\nSuppose that we happen to omit the category option \\\"<1\\\" from the \\\"<15\\\" category option group. This would result in potential aggregation errors in when using this category option group set in any analytical objects. The details of this metadata check would return the UID and name of the category option group set. The category and category option would also be provided. Using the previous example, we would see \\\"Age fine:{<1}\\\" in the metadata check details section, to indicate that the <1 category option which is part of the \\\"Age fine\\\" category, is missing from the category option group set.\\nThere may exist specific analytical reasons why specific category options are omitted from a category option group set. However,these should usually be special cases. This metadata check will identify cases where category option group sets appear to be incomplete, however you should carefully review any groups which appear in the details. \\nThis check may also produce a number of issues which may at first glance appear to be false positives. In some cases, category options may be added to a category by mistake. When category option group sets are created, this extraneous option may be omitted and thus appear as missing from the group set. \\nAnother observed situation is where an option like \\\"Unknown\\\" is used across unrelated categories. Suppose you have two categories \\\"Age (<15, 15+, Unknown)\\\" and \\\"Sex (Male,Female,Unknown)\\\". Similar to above, we create category option group sets like: \\n<15: <15 15+: 15+ Unknown: Unknown\\nThis metadata check will report that \\\"Male\\\" and \\\"Female\\\" are missing from the group set. This is because the same \\\"Unknown\\\" option is shared between two different, unrelated categories. It is recommended that if this situation occurs, that you create two separate \\\"Unknown\\\" category options like \\\"Unknown sex\\\" and \\\"Unknown age\\\".\",\"recommendation\":\"Using the maintenance app, assign the missing category options to an appropriate category option group within the affected category option group set.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSI\"},{\"name\":\"maps_not_viewed_one_year\",\"displayName\":\"Maps which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Maps which have not been viewed in the past 12 months\",\"introduction\":\"Maps should be regularly viewed in the system. In many cases, users may create maps for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system and being difficult to find in the Maps app.\",\"recommendation\":\"Unused maps can be removed directly using the Maps app by a user with sufficient authority. If maps are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"maps\",\"isSlow\":false,\"code\":\"MNVOY\"},{\"name\":\"indicators_exact_duplicates\",\"displayName\":\"Indicators with the same formula.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same formula.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check shows indicators which have the exact same formulas. Spaces which are present are removed prior to comparison.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Consider deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IED\"},{\"name\":\"indicators_violating_exclusive_group_sets\",\"displayName\":\"Indicators with conflicting exclusive group sets\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that are members of multiple exclusive indicator groups\",\"recommendation\":\"Remove the indicator from all but one exclusive indicator group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IVEGS\"},{\"name\":\"category_options_excess_groupset_membership\",\"displayName\":\"Category options which belong to multiple groups in a category option group set.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category options which belong to multiple groups in a category option group set.\",\"introduction\":\"Category options should belong to exactly one category option group which are part of a category option group set. If the category option belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the category option in the details list to exactly one category option group within each group set.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"COEGM\"},{\"name\":\"periods_duplicates\",\"displayName\":\"Duplicate Periods\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Lists all periods duplicates which have identical type and start date\",\"recommendation\":\"Make sure all database references are moved to one of the duplicates before deleting the unused duplicates\",\"isSlow\":false,\"code\":\"PD\"},{\"name\":\"program_rules_without_action\",\"displayName\":\"Program rules lacking an action\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that are not connected to any program rule action\",\"recommendation\":\"Connect the rule to an action or consider removing the rule\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWA\"},{\"name\":\"orgunits_multiple_roots\",\"displayName\":\"The organisation unit hierarchy should have a single root.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"The organisation unit hierarchy should have a single root.\",\"introduction\":\"Every DHIS2 system should have a single root organisation unit. This means a single organisation unit from which all other branches of the hierarchy are descendants.\",\"recommendation\":\"Once you have decided which organisation unit should be the real root of the organisation unit hierarchy, you should update the parent organisation unit. This can be done by using the DHIS2 API or my updating the value directly in the `organisationunit` table.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMR\"},{\"name\":\"validation_rules_with_invalid_left_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a left side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWILSE\"},{\"name\":\"program_rule_actions_without_stage_id\",\"displayName\":\"Program rules with actions lacking a program stage\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a program stage but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWSI\"},{\"name\":\"indicator_groups_scarce\",\"displayName\":\"Indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups should have at least two members.\",\"introduction\":\"All indicator groups should be composed of at least two indicators.\",\"recommendation\":\"Considering removing groups with zero or one groups, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"indicatorGroups\",\"isSlow\":false,\"code\":\"IGS\"},{\"name\":\"option_sets_wrong_sort_order\",\"displayName\":\"Option sets with possibly wrong sort order.\",\"section\":\"Option sets\",\"severity\":\"SEVERE\",\"description\":\"Option sets with possibly wrong sort order.\",\"introduction\":\"Option sets contain options which should be ordered sequentially. The sort_order property should always start with 1 and have a sequential sequence. If there are three options in the option set, then the sort order should be 1,2,3. \\nIn certain circumstances, options may be deleted from an option set, and the sort order may become corrupted. This may lead to a situation where it becomes impossible to update the option set from the maintenance app, and may lead to problems when attempting to using the option set in the data entry app.\",\"recommendation\":\"If it is possible to open the option set in the maintenance app, you can resort the option set, which should correct the problem. Another possible solution is to directly update the sort_order property of in the `optionset` table in the database, ensuring that a valid sequence is present for all options in the option set.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSWSO\"},{\"name\":\"periods_same_start_end_date\",\"displayName\":\"Periods with the same start and end dates\",\"section\":\"Periods\",\"severity\":\"CRITICAL\",\"description\":\"Periods with the same start and end dates\",\"introduction\":\"Different periods should not have exactly the same start and end date.\",\"recommendation\":\"All references to the duplicate periods should be removed from the system and reassigned. It is recommended to use the period with the lower periodid.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PSSED\"},{\"name\":\"program_indicators_with_invalid_expressions\",\"displayName\":\"Program indicators with invalid expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have an invalid expression\",\"recommendation\":\"Check that the expression evaluates to a number\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIE\"},{\"name\":\"program_rule_actions_without_notification\",\"displayName\":\"Program rule with actions lacking a notification template\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires a notification template but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWN\"},{\"name\":\"indicator_no_analysis\",\"displayName\":\"Indicators not used in analytical objects.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not used in analytical objects.\",\"introduction\":\"Indicators should be used to produce some type of analytical output (charts, maps, pivot tables). Note: indicators used in datasets to provide feedback during data entry are not counted as being used in analytical objects.\",\"recommendation\":\"Indicators that are not routinely being used for analysis should be reviewed to determine if they are useful and needed. If these are meant to be used for routine review, then associated outputs should be created using them. If these indicators are not going to be used for any type of information review, and are not used in data sets for feedback during data entry, consideration should be made to delete them.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"INA\"},{\"name\":\"user_groups_scarce\",\"displayName\":\"User groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"User groups should have at least two members.\",\"introduction\":\"Generally, user groups should contain two or more users.\",\"recommendation\":\"Considering removing user groups with less than two users, or alternatively, add additional users to the group to make it more useful.\",\"issuesIdType\":\"userGroups\",\"isSlow\":false,\"code\":\"UGS\"},{\"name\":\"data_elements_aggregate_with_different_period_types\",\"displayName\":\"Aggregate data elements which belong to datasets with different period types.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"SEVERE\",\"description\":\"Aggregate data elements which belong to datasets with different period types.\",\"introduction\":\"Data elements should not belong to datasets with different period types.\",\"recommendation\":\"If you need to collect data with different period types (e.g. weekly and monthly) you should use different data elements for each period type. In general, it is not recommended to collect data with different frequencies, since in general, data collected at higher frequencies (e.g. weekly) can be aggregated to data with lower frequencies (e.g yearly).\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAWDPT\"},{\"name\":\"validation_rules_without_groups\",\"displayName\":\"Validation rules lacking groups\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that are not member of at least one validation rule group\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWG\"},{\"name\":\"category_option_combos_disjoint\",\"displayName\":\"Category option combinations with disjoint associations.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with disjoint associations.\",\"introduction\":\"Under certain circumstances, category option combinations may exist in the system, but not have any direct association with category options which are associated with their category combination. This situation usually occurs when category options have been added to a category and then the category is added to a category combination. New category option combinations are created in the system at this point. If any of the category options are then removed in one of the underlying categories, a so-called disjoint category option combination may result. This is a category option combination which has no direct association with any category options in any of the categories associated with the category combination.\",\"recommendation\":\"The disjoint category option combinations should be removed from the system if possible. However, if any data is associated with the category option combination, a determination will need to be made in regards of how to deal with this data.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"COCD\"},{\"name\":\"options_sets_unused\",\"displayName\":\"Option sets which are not used\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Option sets which are not used\",\"introduction\":\"Option sets should be used for some purpose. The may be used by data elements, comments, attributes, or tracked entity attributes.\",\"recommendation\":\"Consider deleting unused option sets, or alternatively, ensure that they have been properly assigned.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSU\"},{\"name\":\"catoptioncombos_no_catcombo\",\"displayName\":\"Category options combinations with no category combination.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options combinations with no category combination.\",\"introduction\":\"All category option combinations should be associated with a category combo. In certain cases, when category combinations are deleted,the linkage between a category option combination and a category combination may become corrupted.\",\"recommendation\":\"Check if any data is associated with the category option combination in question. Likely, the data should either be deleted or migrated to a valid category option combination. Any data which is associated with any of these category option combinations will not be available through either the data entry modules or any of the analytical apps.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CNC\"},{\"name\":\"data_elements_violating_exclusive_group_sets\",\"displayName\":\"Data elements with conflicting exclusive group sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are a members of more than one exclusive data element set belonging to the same data element group set\",\"recommendation\":\"Either remove the data element from all but one exclusive group set or consider if the set really should be an exclusive group set\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEVEGS\"},{\"name\":\"categories_same_category_options\",\"displayName\":\"Categories with the same category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with the same category options\",\"introduction\":\"Categories with the exact same category options should be considered to be merged. Categories with the exact same category options may be easily confused by users in analysis. The details view will provide a list of categories which have the exact same category options. For each duplicated category a number in parentheses such as (1) will indicate which categories belong to duplicated groups.\",\"recommendation\":\"If category combinations have already been created with duplicative categories,\\nit is recommended that you do not take any action, but rather ensure\\nthat users understand that there may be two category combinations which are duplicative.\\n\\nIf you choose to merge the duplicative category combinations, you would need to \\nremap all category option combinations from the category combo which you wish to \\nremove, to the one which you wish to keep. \\n\\nIf one of the categories is not in use in any category combination, it should\\nconsider to be removed from the system.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CSCO\"},{\"name\":\"visualizations_not_viewed_one_year\",\"displayName\":\"Visualizations which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Visualizations which have not been viewed in the past 12 months\",\"introduction\":\"Visualizations should be regularly viewed in the system. In many cases, users may create charts for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to charts being difficult to find in the visualization app.\",\"recommendation\":\"Unused charts can be removed directly using the data visualization app by a user with sufficient authority. If charts are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"visualizations\",\"isSlow\":false,\"code\":\"VNVOY\"},{\"name\":\"categories_one_default_category_option\",\"displayName\":\"Only one default category option should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option with UID \\\"xYerKDKCefk\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option or move all references to category option \\\"xYerKDKCefk\\\" and then remove the unused conflicting category option.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CODCO\"},{\"name\":\"orgunits_multiple_spaces\",\"displayName\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"introduction\":\"Names and/or shortnames of organisation units should not contain multiple spaces. They are superfluous and may complicate the location of organisation units when they are searched.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the multiple spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMS\"},{\"name\":\"data_elements_aggregate_abandoned\",\"displayName\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"introduction\":\"Data elements are considered to be abandoned when they have not been edited in at least 100 days and do not have any data values associated with them. Often, these are the result of new or changed configurations that have been abandoned at some point.\",\"recommendation\":\"Data elements that have no data associated with them and which there are no plans to start using for data collection should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAA\"},{\"name\":\"data_elements_assigned_to_data_sets_with_different_period_types\",\"displayName\":\"Data elements assigned to data sets with different period type\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are assigned to at least one data set that has a different period type\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEATDSWDPT\"},{\"name\":\"data_elements_aggregate_no_groups\",\"displayName\":\"Aggregate data elements not in any data element groups.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not in any data element groups.\",\"introduction\":\"All data elements should be in a data element group. This allows users to find the data elements more easily in analysis\\n apps and also contributes to having more complete data element group sets.\\n Maintenance operations can also be made more efficient by applying\\n bulk settings (ex. sharing) to all data elements within a data element group.\",\"recommendation\":\"Data elements that are not in a data element group should be added to a relevant data element group. If the data elements are not needed, they should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANG\"},{\"name\":\"category_options_shared_within_category_combo\",\"displayName\":\"Category combinations with categories which share the same category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category combinations with categories which share the same category options.\",\"introduction\":\"As a general rule, category options should be reused where possible between categories. The exception to this rule however, is when you have a category combo with multiple categories, and within those categories, a category option is shared. As a simple example, lets say you have a category called \\\"Sex\\\" with options \\\"Male\\\"\\\", \\\"Female\\\" and \\\"Unknown\\\". There is also a second category called \\\"Age\\\" with options \\\"<15\\\", \\\"15+\\\", and \\\"Unknown\\\". A category combination called \\\"Age/Sex\\\" is then created with these two categories, which share the option \\\"Unknown\\\". This situation should be avoided, as it creates issues when analyzing data.\",\"recommendation\":\"The recommended approach to dealing with this situation is to create a new category combination, using two new categories. Using the example from the introduction, you should create two new category options called \\\"Unknown age\\\" and \\\"Unknown sex\\\". A new category combination can then be created with these new categories, which do not share category options. All data which is potentially associated with the old category combinations, would need to be reassigned to the new category option combinations. Any analytical objects which use the categories to be removed would also need to be updated.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"COSWCC\"},{\"name\":\"orgunits_null_island\",\"displayName\":\"Organisation units located within 100 km of Null Island (0,0).\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units located within 100 km of Null Island (0,0).\",\"introduction\":\"A common problem when importing coordinates is the inclusion of coordinates situated around the point of [Null Island](https://en.wikipedia.org/wiki/Null_Island). This is the point on the Earth's surface where the Prime Meridian and Equator intersect with a latitude of 0 and a longitude of 0. The point also happens to be situated currently in the middle of the ocean. This query identifies any points located within 100 km of the point having latitude and longitude equal to zero.\",\"recommendation\":\"Update the coordinates of the affected organization unit to the correct location.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONI\"},{\"name\":\"program_rule_actions_without_section\",\"displayName\":\"Program rules with actions lacking a program stage section\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a section but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWS\"},{\"name\":\"periods_3y_future\",\"displayName\":\"Periods which are more than three years in the future.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are more than three years in the future.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\nfar future. Different data entry clients may not properly validate for periods\\nwhich are in the future, and thus any periods in the future should be reviewed.\\nIn some cases, data may be valid for future dates, e.g. targets which are set for the\\nnext fiscal year.\",\"recommendation\":\"If any periods exist in the system in the future, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\\n\\nIn many cases, clients may mean to transmit\\ndata for January 2021, but due to data entry errors, January 2031 is selected. Thus,\\nany data in the far future should be investigated to ensure it does not result\\nfrom data entry errors.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"P3F\"},{\"name\":\"orgunits_trailing_spaces\",\"displayName\":\"Organisation units should not have trailing spaces.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have trailing spaces.\",\"introduction\":\"Trailing spaces in organisation units are superfluous.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the trailing spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OTS\"},{\"name\":\"validation_rule_groups_scarce\",\"displayName\":\"Validation rule should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Validation rule should have at least two members.\",\"introduction\":\"Generally validation rule groups should be composed of multiple validation rules.\",\"recommendation\":\"Considering removing groups which are empty or which have a single member. Alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"validationRuleGroups\",\"isSlow\":false,\"code\":\"VRGS\"},{\"name\":\"indicators_with_invalid_numerator\",\"displayName\":\"Indicators with invalid numerator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators where the numerator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWIN\"},{\"name\":\"categories_one_default_category_combo\",\"displayName\":\"Only one default category combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category combo should exist\",\"introduction\":\"There should only exist one category combo with name and code \\\"default\\\".\",\"recommendation\":\"Only the category combo with UID \\\"bjDvmb4bfuf\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category combo or move all references to category combo \\\"bjDvmb4bfuf\\\" and then remove the unused conflicting category combo.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CODCC\"},{\"name\":\"data_elements_without_data_sets\",\"displayName\":\"Data elements lacking data Sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data sets\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWDS\"},{\"name\":\"category_combos_unused\",\"displayName\":\"Category combinations not used by other metadata objects\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category combinations not used by other metadata objects\",\"introduction\":\"Category combinations which are unused in any datasets, data elements, programs or data approval workflows may be safe to delete. In some cases, category combinations may be created, but never actually used for anything. This may lead to situations where users and implementers are confused about which category combination should actually be used. In general, it should be safe to delete unused category combinations, except in situations where existing data has been associated with them.\",\"recommendation\":\"Check to see if any data is associated with the category combination before attempting to delete it. Category combinations which are not currently used in any metadata objects may still be valid for legacy reasons, but they should be reviewed to be sure they are still needed. Otherwise, it should be safe to remove them from the system.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCU\"},{\"name\":\"category_option_groups_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option groups should be composed of at least two category options. There can however be legitimate cases when a single category option is part of a group, especially in cases where there is a direct mapping between age bands and category options.\",\"recommendation\":\"Considering removing groups with zero or one category options, or alternatively, add additional category options to the group to make it more useful.\",\"issuesIdType\":\"categoryOptionGroups\",\"isSlow\":false,\"code\":\"COGS\"},{\"name\":\"datasets_empty\",\"displayName\":\"Datasets with no data elements.\",\"section\":\"Data sets\",\"severity\":\"WARNING\",\"description\":\"Datasets with no data elements.\",\"introduction\":\"All datasets should have data elements assigned to them.\",\"recommendation\":\"Remove empty datasets, or alternatively, assign data elements to them.\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DE\"},{\"name\":\"indicators_without_groups\",\"displayName\":\"Indicators lacking groups\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that do not have at least one group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWG\"},{\"name\":\"orgunit_groups_scarce\",\"displayName\":\"Organisation unit groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Organisation unit groups should have at least two members.\",\"introduction\":\"Generally, organisation unit groups should be composed of multiple organisation units.\",\"recommendation\":\"Considering removing groups with zero or one organisation units, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OGS\"},{\"name\":\"program_rules_without_priority\",\"displayName\":\"Program rules lacking a priority setting\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules with action type \\\"assign\\\" where the rule priority is not yet set\",\"recommendation\":\"Set a priority for the program rule(s)\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWP\"},{\"name\":\"categories_unique_category_combo\",\"displayName\":\"Different category combinations should not have the exact same combination of categories.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Different category combinations should not have the exact same combination of categories.\",\"introduction\":\"Category combinations should be a unique combination of categories. If two or more category combinations contain the exact same set of categories, this would be considered to be duplicative and potentially confusing to users.\",\"recommendation\":\"One category combo is kept, all references are updated to use this combo and other combos are removed.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CUCC\"},{\"name\":\"indicator_group_sets_scarce\",\"displayName\":\"Indicator groups sets should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups sets should have at least two members.\",\"introduction\":\"All indicator group set should be composed of at least two indicators groups.\",\"recommendation\":\"Considering removing indicator group sets with less than two indicator groups, or alternatively, add additional indicator groups to the indicator group set to make it more useful.\",\"issuesIdType\":\"indicatorGroupSets\",\"isSlow\":false,\"code\":\"IGSS\"},{\"name\":\"validation_rules_with_invalid_right_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a right side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWIRSE\"},{\"name\":\"data_elements_aggregate_aggregation_operator\",\"displayName\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"introduction\":\"Data elements which are not numeric (text, dates, etc) should have an aggregation operator set to NONE. Data elements which are able to be aggregated (numbers, integers, etc) should have an aggregation operator set to something other than NONE, most often SUM.\",\"recommendation\":\"Open the affected data elements in the Maintenance App and change their aggregation type to an appropriate type. Alternatively, these can be altered via the API.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAAO\"},{\"name\":\"org_unit_groups_without_group_sets\",\"displayName\":\"Organisation unit groups lacking group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation unit groups that aren't member of at least one organisation unit group set\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OUGWGS\"},{\"name\":\"program_rule_variables_without_attribute\",\"displayName\":\"Program rule variables lacking an attribute\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring an attribute source but that is not yet linked to an attribute\",\"recommendation\":\"Assign an attribute to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWA\"},{\"name\":\"program_indicator_groups_scarce\",\"displayName\":\"Program indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Program indicator groups should have at least two members.\",\"introduction\":\"Program indicator groups should generally be composed of two or more program indicators.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"programIndicatorGroups\",\"isSlow\":false,\"code\":\"PIGS\"},{\"name\":\"program_rules_no_expression\",\"displayName\":\"Program rules with no expression.\",\"section\":\"Program rules\",\"severity\":\"WARNING\",\"description\":\"Program rules with no expression.\",\"introduction\":\"All program rules should have an expression. Expressions are used by program rules to determine when they should be triggered. Program rules with no expression have no purpose.\",\"recommendation\":\"Using the DHIS2 user interface, assign an expression to each of the program rules which is missing one. Otherwise, if it is safe to delete the program rule with no expression, it is recommended to remove it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNE\"},{\"name\":\"data_elements_aggregate_no_data\",\"displayName\":\"Aggregate data elements with NO data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements with NO data values.\",\"introduction\":\"Data elements should generally always be associated with data values. If data elements exist in a data set which is active, but there are no data values associated with them, they may not be part of the data entry screens. Alternatively, the data element may have been added but never been associated with a dataset.\",\"recommendation\":\"Consider removing data elements with no data values.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAND\"},{\"name\":\"program_indicators_without_expression\",\"displayName\":\"Program indicators lacking an expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have no expression set yet\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWE\"},{\"name\":\"periods_distant_past\",\"displayName\":\"Periods which are in the distant past.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are in the distant past.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\ndistant past. Different data entry clients may not properly validate for periods\\nwhich are in the distant past, and thus these periods should be triaged to ensure\\nthat data has not been entered against them by mistake.\",\"recommendation\":\"If any periods exist in the system in the distant past, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PDP\"},{\"name\":\"org_units_being_orphaned\",\"displayName\":\"Orphaned organisation units\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that aren't level 1 units but that lack a parent so that they are not connected to the rest of the organisation tree\",\"recommendation\":\"Find (or create) and set the correct parent for the orphaned organisation unit(s). Eventually this is also caused by having set the wrong level.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUBO\"},{\"name\":\"cocs_wrong_cardinality\",\"displayName\":\"Category option combinations with incorrect cardinality.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with incorrect cardinality.\",\"introduction\":\"All category option combinations should have exactly the same number of category option associations as the number of categories in the category combination. If there are two categories in a category combination, then every category option combination should have exactly two category options.\\nCategory option combinations with the incorrect cardinality are usually the result of a category combination having been created, and then modified later. Suppose that two categories are used to create a category combination. Each category option combination of this category combo will have two category options. If an additional category is added to the category combination later, new category option combinations with three category options will be created and associated with this category combo. The original category option combinations would be considered to be invalid.\",\"recommendation\":\"Category option combinations which have an incorrect cardinality will be ignored by the DHIS2 analytics system and should be removed.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CWC\"},{\"name\":\"dashboards_not_viewed_one_year\",\"displayName\":\"Dashboards which have not been actively viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Dashboards which have not been actively viewed in the past 12 months\",\"introduction\":\"Dashboards should be regularly viewed in the system. In many cases, users may create dashboards for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to useful dashboards being difficult to find. This check identifies any dashboards which have not been viewed in the past year.\",\"recommendation\":\"Unused dashboards can be deleted in the entirety from the main dashboard app by clicking on the \\\"Edit\\\" button and choosing \\\"Delete\\\". Note that this process cannot be undone! Another option would be to alter the sharing of the dashboard so that it is not visible to any user.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNVOY\"}]", - "responseSize": 66022, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - } -] diff --git a/cypress/fixtures/network/40/users_should_be_able_to_delete_a_job.json b/cypress/fixtures/network/40/users_should_be_able_to_delete_a_job.json deleted file mode 100644 index 107221567..000000000 --- a/cypress/fixtures/network/40/users_should_be_able_to_delete_a_job.json +++ /dev/null @@ -1,305 +0,0 @@ -[ - { - "path": "/api/40/systemSettings/helpPageLink", - "featureName": "Users should be able to delete a job", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"helpPageLink\":\"https://dhis2.github.io/dhis2-docs/master/en/user/html/dhis2_user_manual_en.html\"}", - "responseSize": 99, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/validationRuleGroups?paging=false", - "featureName": "Users should be able to delete a job", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"validationRuleGroups\":[{\"displayName\":\"ANC\",\"id\":\"UP1lctvalPn\"},{\"displayName\":\"Commodities\",\"id\":\"xcpl667ccfF\"},{\"displayName\":\"Critical event\",\"id\":\"xWtt9c443Lt\"},{\"displayName\":\"District stock\",\"id\":\"mEtdbIDDhix\"},{\"displayName\":\"Epidemic disease outbreak\",\"id\":\"y2yQIm79VTW\"},{\"displayName\":\"Facility Stock\",\"id\":\"SqyI8HKqI4g\"},{\"displayName\":\"Immunisation\",\"id\":\"UiOSY1iIdub\"},{\"displayName\":\"Infectious disease outbreak\",\"id\":\"WUZXEFdn1PX\"},{\"displayName\":\"Malaria\",\"id\":\"zlaSof6qLqF\"},{\"displayName\":\"Population\",\"id\":\"D3bItmtBpsW\"},{\"displayName\":\"TB\",\"id\":\"IMF6p1MqoHl\"},{\"displayName\":\"Testing\",\"id\":\"nMDkAJXsmlR\"}]}", - "responseSize": 628, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictorGroups?paging=false", - "featureName": "Users should be able to delete a job", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictorGroups\":[]}", - "responseSize": 22, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/analytics/tableTypes", - "featureName": "Users should be able to delete a job", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"]", - "responseSize": 122, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictors?paging=false", - "featureName": "Users should be able to delete a job", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictors\":[{\"displayName\":\"Malaria Outbreak Threshold\",\"id\":\"tEK1OEqS4O1\"}]}", - "responseSize": 80, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations/jobTypes?fields=*&paging=false", - "featureName": "Users should be able to delete a job", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"jobTypes\":[{\"name\":\"Data integrity\",\"jobType\":\"DATA_INTEGRITY\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"checks\",\"fieldName\":\"Checks\",\"persisted\":false,\"collectionName\":\"checks\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/dataIntegrity\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.parameters.DataIntegrityJobParameters$DataIntegrityReportType\",\"name\":\"type\",\"fieldName\":\"Type\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"REPORT\",\"SUMMARY\",\"DETAILS\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Resource table\",\"jobType\":\"RESOURCE_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Analytics table\",\"jobType\":\"ANALYTICS_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"skipPrograms\",\"fieldName\":\"Skip programs\",\"persisted\":false,\"collectionName\":\"skipPrograms\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/programs\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipResourceTables\",\"fieldName\":\"Skip resource tables\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Continuous analytics table\",\"jobType\":\"CONTINUOUS_ANALYTICS_TABLE\",\"schedulingType\":\"FIXED_DELAY\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"fullUpdateHourOfDay\",\"fieldName\":\"Full update hour of day\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Data sync\",\"jobType\":\"DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker programs data sync\",\"jobType\":\"TRACKER_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Event programs data sync\",\"jobType\":\"EVENT_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Meta data sync\",\"jobType\":\"META_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"trackerProgramPageSize\",\"fieldName\":\"Tracker program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"eventProgramPageSize\",\"fieldName\":\"Event program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"dataValuesPageSize\",\"fieldName\":\"Data values page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Aggregate data exchange\",\"jobType\":\"AGGREGATE_DATA_EXCHANGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"dataExchangeIds\",\"fieldName\":\"Data exchange ids\",\"persisted\":false,\"collectionName\":\"dataExchangeIds\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/aggregateDataExchanges\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Send scheduled message\",\"jobType\":\"SEND_SCHEDULED_MESSAGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Program notifications\",\"jobType\":\"PROGRAM_NOTIFICATIONS\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Monitoring\",\"jobType\":\"MONITORING\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"validationRuleGroups\",\"fieldName\":\"Validation rule groups\",\"persisted\":false,\"collectionName\":\"validationRuleGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/validationRuleGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"sendNotifications\",\"fieldName\":\"Send notifications\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"persistResults\",\"fieldName\":\"Persist results\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Push analysis\",\"jobType\":\"PUSH_ANALYSIS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"pushAnalysis\",\"fieldName\":\"Push analysis\",\"persisted\":false,\"collectionName\":\"pushAnalysis\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/pushAnalysis\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker search optimization\",\"jobType\":\"TRACKER_SEARCH_OPTIMIZATION\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"attributes\",\"fieldName\":\"Attributes\",\"persisted\":false,\"collectionName\":\"attributes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/trackedEntityAttributes/indexable\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipIndexDeletion\",\"fieldName\":\"Skip index deletion\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Predictor\",\"jobType\":\"PREDICTOR\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictors\",\"fieldName\":\"Predictors\",\"persisted\":false,\"collectionName\":\"predictors\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictors\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictorGroups\",\"fieldName\":\"Predictor groups\",\"persisted\":false,\"collectionName\":\"predictorGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictorGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Disable inactive users\",\"jobType\":\"DISABLE_INACTIVE_USERS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"inactiveMonths\",\"fieldName\":\"Inactive months\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"reminderDaysBefore\",\"fieldName\":\"Reminder days before\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Test\",\"jobType\":\"TEST\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Long\",\"name\":\"waitMillis\",\"fieldName\":\"Wait millis\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"stages\",\"fieldName\":\"Stages\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtStage\",\"fieldName\":\"Fail at stage\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"items\",\"fieldName\":\"Items\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtItem\",\"fieldName\":\"Fail at item\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Long\",\"name\":\"itemDuration\",\"fieldName\":\"Item duration\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.String\",\"name\":\"failWithMessage\",\"fieldName\":\"Fail with message\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"failWithException\",\"fieldName\":\"Fail with exception\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.JobProgress$FailurePolicy\",\"name\":\"failWithPolicy\",\"fieldName\":\"Fail with policy\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"PARENT\",\"FAIL\",\"SKIP_STAGE\",\"SKIP_ITEM\",\"SKIP_ITEM_OUTLIER\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"runStagesParallel\",\"fieldName\":\"Run stages parallel\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]}]}", - "responseSize": 24994, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/pushAnalysis?paging=false", - "featureName": "Users should be able to delete a job", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"pushAnalysis\":[{\"displayName\":\"Immunization Key Indicators Monthly Report\",\"id\":\"jtcMAKhWwnc\"}]}", - "responseSize": 98, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/dataIntegrity", - "featureName": "Users should be able to delete a job", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[{\"name\":\"orgunits_invalid_geometry\",\"displayName\":\"Organisation units with invalid geometry.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with invalid geometry.\",\"introduction\":\"DHIS2 uses the PostGIS database extension to manage the geographical information associated\\nwith organisation units. There are various reasons why geometries may be considered to be\\ninvalid including self-inclusions, self-intersections, and sliver polygons. Please see the\\nPostGIS documentation for a more in-depth discussion on this topic.\\n\\nInvalid geometry is not always a problem and may be able to be ignored, however, it has been observed in certain systems\\nthat this can lead to problems in analytics. If you are experiencing issues when generating analytics\\ntables, and see errors related to invalid geometries, you will need to either remove the invalid geometry,\\nor fix it.\",\"recommendation\":\"Update the geometry of the affected organisation units to a valid geometry. It may be possible to use the PostGIS function `ST_MakeValid` to automatically fix the problem. However, in other cases the geometry may need to be edited in a GIS tool, and then updated again in DHIS2.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OIG\"},{\"name\":\"data_elements_without_groups\",\"displayName\":\"Data elements lacking groups\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data element groups\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWG\"},{\"name\":\"orgunit_group_sets_excess_groups\",\"displayName\":\"Organisation units which belong to multiple groups in a group set.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which belong to multiple groups in a group set.\",\"introduction\":\"Organisation units should belong to exactly one group within each organisation unit group set of which they are a member. If the organisation unit belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the organisation units in the details list to exactly one group within each group set membership.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OGSEG\"},{\"name\":\"validation_rules_missing_value_strategy_null\",\"displayName\":\"All validation rule expressions should have a missing value strategy.\",\"section\":\"Validation rules\",\"severity\":\"SEVERE\",\"description\":\"All validation rule expressions should have a missing value strategy.\",\"introduction\":\"Validation rules are composed of a left and right side expression. In certain systems the missing value strategy may not be defined. This may lead to an exception during validation rule analysis. The affected validation rules should be corrected to with an appropriate missing value strategy.\",\"recommendation\":\"Using the results of the the details SQL view, identify the affected validation rules and which side of the rule the missing value strategy has not been specified. Using the maintenance app, make the appropriate corrections and save the rule.\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRMVSN\"},{\"name\":\"category_combos_being_invalid\",\"displayName\":\"Invalid Category-combos\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Lists all category-combos that are invalid\",\"recommendation\":\"Make sure the category combo is assigned to at least one category and that all categories have category options \",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCBI\"},{\"name\":\"data_elements_in_data_set_not_in_form\",\"displayName\":\"Data sets with data elements not in data entry form\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that have data elements which are neither a member of the set's data entry form nor a member of the sets section\",\"recommendation\":\"Either remove the data elements in question or make them a member of the set's form or section\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DEIDSNIF\"},{\"name\":\"categories_no_options\",\"displayName\":\"Categories with no category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with no category options\",\"introduction\":\"Categories should always have at least one category option.\",\"recommendation\":\"Any categories without category options should either be removed from the system if they are not in use. Otherwise, appropriate category options should be added to the category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CNO\"},{\"name\":\"data_elements_aggregate_no_analysis\",\"displayName\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"introduction\":\"All aggregate data elements that are captured in DHIS2 should be used to produce some type of analysis output (charts, maps, tables). This can be by using them directly in an output, or by having them contribute to an indicator calculation that is used an output.\",\"recommendation\":\"Data elements that are not routinely being reviewed in analysis, either directly or indirectly through indicators, should be reviewed to determine if they still need to be collected. If these are meant to be used in routine review, then associated outputs should be created using them. If these data elements are not going to be used for any type of information review, consideration should be made to either archive them or delete them.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANA\"},{\"name\":\"indicators_duplicated_terms\",\"displayName\":\"Indicators with the same terms.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same terms.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check attempts to identify indicators with the same formulas, regardless of the order of their their terms. Suppose you have an indicator which calculates total ANC attendance: ANC Total = ANC1 + ANC2 + ANC3 Suppose then another indicator exists in the system, which has been defined as: ANC Totals = ANC3 + ANC2 + ANC1 These two indicators are equivalent, and will produce the same result, and are thus considered to be duplicated.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Considered deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IDT\"},{\"name\":\"program_rules_no_action\",\"displayName\":\"Program rules with no action.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules with no action.\",\"introduction\":\"All program rules should have an action.\",\"recommendation\":\"Using the DHIS2 user interface, assign an action to each of the program rules which is missing one. Alternatively, if the program rule is not in use, then consider removing it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNA\"},{\"name\":\"orgunits_compulsory_group_count\",\"displayName\":\"Organisation units that are not in all compulsory orgunit group sets\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Orgunits that are not in all compulsory orgunit group sets\",\"introduction\":\"If any organisation unit groups have been marked as compulsory, each and every organisation unit should belong to exactly one group within each compulsory organisation unit group set. Assume we have created a group set called \\\"Ownership\\\" with two groups \\\"Public\\\" and \\\"Private\\\". Each and every organisation unit contained in the hierarchy must belong to either Public or Private (but not both). When organisation unit are not part of a group set, results in the analytics apps will not be correct if the organisation unit group set is used for aggregation.\",\"recommendation\":\"For each of the organisation units identified in the details query, you should assign the appropriate organisation unit group within the group set. Alternatively, if the group set should not be compulsory, you should change this attribute.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OCGC\"},{\"name\":\"orgunits_no_coordinates\",\"displayName\":\"Organisation units with no coordinates.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with no coordinates.\",\"introduction\":\"Ideally, all organisation units contained in the DHIS2 hierarchy should have a valid\\nset of coordinates. Usually for all organisation units above the facility level,\\nthese coordinates should be a polygon which provides the boundary of the organisation\\nunit. For facilities, these are usually represented as point coordinates.\\n\\nThere can obviously be exceptions to this rule. Mobile health facilities may not have\\na fixed location. Community health workers or wards below the facility level\\nmay also not have a defined or definable coordinate.\\n\\nThis check is intended to allow you to review all organisation units which do\\nnot have any coordinates and make a determination as to whether they should be updated.\",\"recommendation\":\"Where appropriate, update the geometry of each organisation unit with a valid geometry.\\nYou may need to contact the appropriate local government office to obtain a copy\\nof district boundaries, commonly referred to as \\\"shape files\\\". Another possibility\\nis to use freely available boundary files from GADM (https://gadm.org)\\n\\nIf facilities are missing coordinates, it may be possible to obtain these from\\nthe facility staff using their smart phone to get the coordinates. Images\\nfrom Google Maps can also often be used to estimate the position of a facility,\\nassuming that you have good enough resolution and local knowledge of where\\nit is located.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONC\"},{\"name\":\"data_sets_not_assigned_to_org_units\",\"displayName\":\"Data sets not assigned to organisation units\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that are not assigned to any organisation units\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DSNATOU\"},{\"name\":\"dashboards_no_items\",\"displayName\":\"Dashboards with no items.\",\"section\":\"Dashboards\",\"severity\":\"INFO\",\"description\":\"Dashboards with no items.\",\"introduction\":\"All dashboards should have content on them. Dashboards without any content do not serve any purpose, and can make it more difficult to find relevant dashboards with content.\",\"recommendation\":\"Dashboards without content that have not been modified in the last 14 days should be considered for deletion.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNI\"},{\"name\":\"orgunits_same_name_and_parent\",\"displayName\":\"Organisation units should not have the same name and parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have the same name and parent.\",\"introduction\":\"Organisation units may have exactly the same name. This may become confusing to users, particularly if the organisation unit has the same name and same parent. This can easily lead to data entry or analysis mistakes as users have no way to distinguish between the two organisation units.\",\"recommendation\":\"Rename identically named organisation units which share the same parent using the maintenance app.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OSNAP\"},{\"name\":\"indicators_not_grouped\",\"displayName\":\"Indicators not in any groups.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not in any groups.\",\"introduction\":\"All indicators should be in an indicator group. This allows users to find the indicators more easily in analysis apps and also contributes to having more complete indicators group sets. Maintenance operations can also be made more efficient by applying bulk settings (ex. sharing, filtering) to all indicators within an indicator group.\",\"recommendation\":\"Indicators that are not in a indicator group should be added to a relevant indicator group. If the indicators are not needed, they should be deleted.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"ING\"},{\"name\":\"category_option_group_sets_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option group sets should be composed of at least two category option groups.\",\"recommendation\":\"Considering removing groups with zero or one category option groups, or alternatively, add additional category option groups to the group set to make it more useful.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSS\"},{\"name\":\"org_units_without_groups\",\"displayName\":\"Organisation units lacking groups\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are not connected to at least one group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWG\"},{\"name\":\"data_elements_excess_groupset_membership\",\"displayName\":\"Data elements which belong to multiple groups in a group set.\",\"section\":\"data_elements\",\"severity\":\"SEVERE\",\"description\":\"Data elements which belong to multiple groups in a group set.\",\"introduction\":\"Data elements should belong to exactly one group within each data element group set of which they are a member. If the data element belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the data elements in the details list to exactly one data element group within each group set.\",\"issuesIdType\":\"data_elements_aggregate\",\"isSlow\":false,\"code\":\"DEEGM\"},{\"name\":\"data_element_groups_scarce\",\"displayName\":\"Data element groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Data element groups should have at least two members.\",\"introduction\":\"All data element groups should be composed of at least two data elements.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"dataElementGroups\",\"isSlow\":false,\"code\":\"DEGS\"},{\"name\":\"orgunits_not_contained_by_parent\",\"displayName\":\"Organisation units with point coordinates should be contained by their parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with point coordinates should be contained by their parent.\",\"introduction\":\"Facilities are often represented as points in the DHIS2 hierarchy. Their parent organisation units geometry should contain all facilities which have been associated with them.\",\"recommendation\":\"Often boundary files are simplified when they are uploaded into DHIS2. This process may result in\\nfacilities which are located close to the border of a given district to fall outside of the district\\nwhen the boundary is simplified. This is considered to be more of a cosmetic problem for most DHIS2\\ninstallations, but could become an issue if any geospatial analysis is attempted using the\\nboundaries and point coordinates.\\n\\nIn cases where the facility falls outside of its parent's boundary\\nyou should confirm that the coordinates are correct. If the location is close to the boundary, you\\nmay want to reconsider how the boundary files have been simplified. Otherwise, if the location of\\nthe facility is completely incorrect, it should be rectified.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONCBP\"},{\"name\":\"program_rules_message_no_template\",\"displayName\":\"Program rules actions which should send or schedule a message without a message template.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules actions which should send or schedule a message without a message template.\",\"introduction\":\"Program rule actions of type \\\"Send message\\\" or \\\"Schedule message\\\" should have an associated message template.\",\"recommendation\":\"Using the DHIS2 user interface, assign a message template to each of the program rule actions which send or schedule messages but which does not have an association with a message template.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRMNT\"},{\"name\":\"indicators_with_invalid_denominator\",\"displayName\":\"Indicators with invalid denominator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"List all indicators where the denominator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWID\"},{\"name\":\"indicator_types_duplicated\",\"displayName\":\"Indicator types with the same factor.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicator types with the same factor.\",\"introduction\":\"Indicators can be assigned a factor which is multiplied by the indicator's value. For example, if you create a percentage based indicator, you can assign the indicator a factor of 100, which would be multiplied by the actual value of the indicator calculated by DHIS2. In general, having multiple indicator types with the same factor is not recommended. It is duplicative, and may lead to confusion.\",\"recommendation\":\"Duplicated indicator types should consider to be removed from the system. Consider choosing one of the duplicated indicator types as the one to keep, and then update all indicators which share the same factor to this indicator type. The duplicated indicator types can then be removed from the system.\",\"issuesIdType\":\"indicatorTypes\",\"isSlow\":false,\"code\":\"ITD\"},{\"name\":\"options_sets_empty\",\"displayName\":\"Empty option sets\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Empty option sets\",\"introduction\":\"All option sets should generally include at least two items. Empty option sets serve no purpose.\",\"recommendation\":\"Options should either be added to the option set, or the option set should be deleted.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSE\"},{\"name\":\"category_options_no_categories\",\"displayName\":\"Category options with no categories.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options with no categories.\",\"introduction\":\"All category options should belong to at least one category.\",\"recommendation\":\"Category options which are not part of any category should be removed or alternatively should be added to an appropriate category.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CONC\"},{\"name\":\"orgunits_orphaned\",\"displayName\":\"Orphaned organisation units.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"Orphaned organisation units.\",\"introduction\":\"Orphaned organisation units are those which have neither parents nor any children. This means that they have no relationship to the main organisation unit hierarchy. These may be created by faulty metadata imports or direct manipulation of the database.\",\"recommendation\":\"The orphaned organisation units should be assigned a parent or removed from the system. It is recommended to use the DHIS2 API for this task if possible. If this is not possible, then they may need to be removed through direct SQL on the DHIS2 database.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OO\"},{\"name\":\"indicators_with_identical_formulas\",\"displayName\":\"Indicators with identical formulas\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that have the identical formulas with at least one other indicator\",\"recommendation\":\"Check if the same indicator should be used everywhere and remove duplicates\",\"isSlow\":false,\"code\":\"IWIF\"},{\"name\":\"program_indicators_with_invalid_filters\",\"displayName\":\"Program indicators with invalid filter\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators with invalid filter expression\",\"recommendation\":\"Check that the expression evaluates to true/false\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIF\"},{\"name\":\"program_rules_without_condition\",\"displayName\":\"Program rules lacking a condition\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that have no condition yet\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWC\"},{\"name\":\"categories_one_default_category\",\"displayName\":\"Only one default category should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category should exist\",\"introduction\":\"There should only exist one category with name and code \\\"default\\\".\",\"recommendation\":\"Only the category with UID \\\"GLevLNI9wkl\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category or move all references to category \\\"GLevLNI9wkl\\\" and then remove the unused conflicting category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CODC\"},{\"name\":\"org_units_with_cyclic_references\",\"displayName\":\"Organisation units with cyclic references\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that have a conflicting parent hierarchy definition so that two organisation units become parent of each other or in other words they form a circular reference\",\"recommendation\":\"One of the organisation units must be setup wrongly and needs to be corrected so that a non-circular tree connects the two\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWCR\"},{\"name\":\"program_rule_variables_without_data_element\",\"displayName\":\"Program rule variables lacking a data element\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring a data element source but that is not yet linked to a data element\",\"recommendation\":\"Assign a data element to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWDE\"},{\"name\":\"org_units_violating_exclusive_group_sets\",\"displayName\":\"Organisation units with conflicting exclusive group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are members of multiple exclusive organisation unit groups\",\"recommendation\":\"Remove the organisation unit from all but one exclusive organisation unit group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUVEGS\"},{\"name\":\"program_rule_actions_without_data_object\",\"displayName\":\"Program rules with actions lacking a data object\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires either a data element or an attribute but is not connected either\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWDO\"},{\"name\":\"orgunits_openingdate_gt_closeddate\",\"displayName\":\"Organisation units which have an opening date later than the closed date.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which have an opening date later than the closed date.\",\"introduction\":\"If a closing date has been defined for an organisation unit, it should always be after the opening date (if one has been defined).\",\"recommendation\":\"Alter either the opening or closing date of all affected organisation units so that the closing date is after the opening date.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OOGC\"},{\"name\":\"categories_one_default_category_option_combo\",\"displayName\":\"Only one default category option combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option combo should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option combo with UID \\\"HllvX50cXC0\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option combo or move all references to category option combo \\\"HllvX50cXC0\\\" and then remove the unused conflicting category option combo.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CODCOC\"},{\"name\":\"category_option_group_sets_incomplete\",\"displayName\":\"Category option group sets which do not contain all category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option group sets which which do not contain all category options.\",\"introduction\":\"Category option group sets are composed of multiple category option groups, which are in turn composed of various category options. Category option group sets are often used to group related category options together for analytical purposes. Categories are also composed of category options. In general, but not always, category option group sets should contain all category options of related categories. Suppose we have the following two age categories. \\nAge coarse: <15, 15+ Age fine: <1, 1-10, 10-14,15-19,20-24,25-29,30-34,35-39,40-44,45+\\nIn many cases, related data elements may be disaggregated differently. This may be to differences in the way in which the data is collected, or as is often the case, the disaggregation has changed over time. If we wish to analyze data for two different data elements (one of which uses Age coarse and the other Age fine), we can create a category option group set consisting of two category option groups which should consist of the following category options from above. \\n<15: <15, <1, 1-10, 10-14 15+: 15+, 15-19,20-24,25-29,30-34,35-39,40-44,45+\\nSuppose that we happen to omit the category option \\\"<1\\\" from the \\\"<15\\\" category option group. This would result in potential aggregation errors in when using this category option group set in any analytical objects. The details of this metadata check would return the UID and name of the category option group set. The category and category option would also be provided. Using the previous example, we would see \\\"Age fine:{<1}\\\" in the metadata check details section, to indicate that the <1 category option which is part of the \\\"Age fine\\\" category, is missing from the category option group set.\\nThere may exist specific analytical reasons why specific category options are omitted from a category option group set. However,these should usually be special cases. This metadata check will identify cases where category option group sets appear to be incomplete, however you should carefully review any groups which appear in the details. \\nThis check may also produce a number of issues which may at first glance appear to be false positives. In some cases, category options may be added to a category by mistake. When category option group sets are created, this extraneous option may be omitted and thus appear as missing from the group set. \\nAnother observed situation is where an option like \\\"Unknown\\\" is used across unrelated categories. Suppose you have two categories \\\"Age (<15, 15+, Unknown)\\\" and \\\"Sex (Male,Female,Unknown)\\\". Similar to above, we create category option group sets like: \\n<15: <15 15+: 15+ Unknown: Unknown\\nThis metadata check will report that \\\"Male\\\" and \\\"Female\\\" are missing from the group set. This is because the same \\\"Unknown\\\" option is shared between two different, unrelated categories. It is recommended that if this situation occurs, that you create two separate \\\"Unknown\\\" category options like \\\"Unknown sex\\\" and \\\"Unknown age\\\".\",\"recommendation\":\"Using the maintenance app, assign the missing category options to an appropriate category option group within the affected category option group set.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSI\"},{\"name\":\"maps_not_viewed_one_year\",\"displayName\":\"Maps which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Maps which have not been viewed in the past 12 months\",\"introduction\":\"Maps should be regularly viewed in the system. In many cases, users may create maps for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system and being difficult to find in the Maps app.\",\"recommendation\":\"Unused maps can be removed directly using the Maps app by a user with sufficient authority. If maps are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"maps\",\"isSlow\":false,\"code\":\"MNVOY\"},{\"name\":\"indicators_exact_duplicates\",\"displayName\":\"Indicators with the same formula.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same formula.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check shows indicators which have the exact same formulas. Spaces which are present are removed prior to comparison.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Consider deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IED\"},{\"name\":\"indicators_violating_exclusive_group_sets\",\"displayName\":\"Indicators with conflicting exclusive group sets\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that are members of multiple exclusive indicator groups\",\"recommendation\":\"Remove the indicator from all but one exclusive indicator group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IVEGS\"},{\"name\":\"category_options_excess_groupset_membership\",\"displayName\":\"Category options which belong to multiple groups in a category option group set.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category options which belong to multiple groups in a category option group set.\",\"introduction\":\"Category options should belong to exactly one category option group which are part of a category option group set. If the category option belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the category option in the details list to exactly one category option group within each group set.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"COEGM\"},{\"name\":\"periods_duplicates\",\"displayName\":\"Duplicate Periods\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Lists all periods duplicates which have identical type and start date\",\"recommendation\":\"Make sure all database references are moved to one of the duplicates before deleting the unused duplicates\",\"isSlow\":false,\"code\":\"PD\"},{\"name\":\"program_rules_without_action\",\"displayName\":\"Program rules lacking an action\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that are not connected to any program rule action\",\"recommendation\":\"Connect the rule to an action or consider removing the rule\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWA\"},{\"name\":\"orgunits_multiple_roots\",\"displayName\":\"The organisation unit hierarchy should have a single root.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"The organisation unit hierarchy should have a single root.\",\"introduction\":\"Every DHIS2 system should have a single root organisation unit. This means a single organisation unit from which all other branches of the hierarchy are descendants.\",\"recommendation\":\"Once you have decided which organisation unit should be the real root of the organisation unit hierarchy, you should update the parent organisation unit. This can be done by using the DHIS2 API or my updating the value directly in the `organisationunit` table.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMR\"},{\"name\":\"validation_rules_with_invalid_left_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a left side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWILSE\"},{\"name\":\"program_rule_actions_without_stage_id\",\"displayName\":\"Program rules with actions lacking a program stage\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a program stage but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWSI\"},{\"name\":\"indicator_groups_scarce\",\"displayName\":\"Indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups should have at least two members.\",\"introduction\":\"All indicator groups should be composed of at least two indicators.\",\"recommendation\":\"Considering removing groups with zero or one groups, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"indicatorGroups\",\"isSlow\":false,\"code\":\"IGS\"},{\"name\":\"option_sets_wrong_sort_order\",\"displayName\":\"Option sets with possibly wrong sort order.\",\"section\":\"Option sets\",\"severity\":\"SEVERE\",\"description\":\"Option sets with possibly wrong sort order.\",\"introduction\":\"Option sets contain options which should be ordered sequentially. The sort_order property should always start with 1 and have a sequential sequence. If there are three options in the option set, then the sort order should be 1,2,3. \\nIn certain circumstances, options may be deleted from an option set, and the sort order may become corrupted. This may lead to a situation where it becomes impossible to update the option set from the maintenance app, and may lead to problems when attempting to using the option set in the data entry app.\",\"recommendation\":\"If it is possible to open the option set in the maintenance app, you can resort the option set, which should correct the problem. Another possible solution is to directly update the sort_order property of in the `optionset` table in the database, ensuring that a valid sequence is present for all options in the option set.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSWSO\"},{\"name\":\"periods_same_start_end_date\",\"displayName\":\"Periods with the same start and end dates\",\"section\":\"Periods\",\"severity\":\"CRITICAL\",\"description\":\"Periods with the same start and end dates\",\"introduction\":\"Different periods should not have exactly the same start and end date.\",\"recommendation\":\"All references to the duplicate periods should be removed from the system and reassigned. It is recommended to use the period with the lower periodid.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PSSED\"},{\"name\":\"program_indicators_with_invalid_expressions\",\"displayName\":\"Program indicators with invalid expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have an invalid expression\",\"recommendation\":\"Check that the expression evaluates to a number\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIE\"},{\"name\":\"program_rule_actions_without_notification\",\"displayName\":\"Program rule with actions lacking a notification template\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires a notification template but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWN\"},{\"name\":\"indicator_no_analysis\",\"displayName\":\"Indicators not used in analytical objects.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not used in analytical objects.\",\"introduction\":\"Indicators should be used to produce some type of analytical output (charts, maps, pivot tables). Note: indicators used in datasets to provide feedback during data entry are not counted as being used in analytical objects.\",\"recommendation\":\"Indicators that are not routinely being used for analysis should be reviewed to determine if they are useful and needed. If these are meant to be used for routine review, then associated outputs should be created using them. If these indicators are not going to be used for any type of information review, and are not used in data sets for feedback during data entry, consideration should be made to delete them.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"INA\"},{\"name\":\"user_groups_scarce\",\"displayName\":\"User groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"User groups should have at least two members.\",\"introduction\":\"Generally, user groups should contain two or more users.\",\"recommendation\":\"Considering removing user groups with less than two users, or alternatively, add additional users to the group to make it more useful.\",\"issuesIdType\":\"userGroups\",\"isSlow\":false,\"code\":\"UGS\"},{\"name\":\"data_elements_aggregate_with_different_period_types\",\"displayName\":\"Aggregate data elements which belong to datasets with different period types.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"SEVERE\",\"description\":\"Aggregate data elements which belong to datasets with different period types.\",\"introduction\":\"Data elements should not belong to datasets with different period types.\",\"recommendation\":\"If you need to collect data with different period types (e.g. weekly and monthly) you should use different data elements for each period type. In general, it is not recommended to collect data with different frequencies, since in general, data collected at higher frequencies (e.g. weekly) can be aggregated to data with lower frequencies (e.g yearly).\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAWDPT\"},{\"name\":\"validation_rules_without_groups\",\"displayName\":\"Validation rules lacking groups\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that are not member of at least one validation rule group\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWG\"},{\"name\":\"category_option_combos_disjoint\",\"displayName\":\"Category option combinations with disjoint associations.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with disjoint associations.\",\"introduction\":\"Under certain circumstances, category option combinations may exist in the system, but not have any direct association with category options which are associated with their category combination. This situation usually occurs when category options have been added to a category and then the category is added to a category combination. New category option combinations are created in the system at this point. If any of the category options are then removed in one of the underlying categories, a so-called disjoint category option combination may result. This is a category option combination which has no direct association with any category options in any of the categories associated with the category combination.\",\"recommendation\":\"The disjoint category option combinations should be removed from the system if possible. However, if any data is associated with the category option combination, a determination will need to be made in regards of how to deal with this data.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"COCD\"},{\"name\":\"options_sets_unused\",\"displayName\":\"Option sets which are not used\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Option sets which are not used\",\"introduction\":\"Option sets should be used for some purpose. The may be used by data elements, comments, attributes, or tracked entity attributes.\",\"recommendation\":\"Consider deleting unused option sets, or alternatively, ensure that they have been properly assigned.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSU\"},{\"name\":\"catoptioncombos_no_catcombo\",\"displayName\":\"Category options combinations with no category combination.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options combinations with no category combination.\",\"introduction\":\"All category option combinations should be associated with a category combo. In certain cases, when category combinations are deleted,the linkage between a category option combination and a category combination may become corrupted.\",\"recommendation\":\"Check if any data is associated with the category option combination in question. Likely, the data should either be deleted or migrated to a valid category option combination. Any data which is associated with any of these category option combinations will not be available through either the data entry modules or any of the analytical apps.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CNC\"},{\"name\":\"data_elements_violating_exclusive_group_sets\",\"displayName\":\"Data elements with conflicting exclusive group sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are a members of more than one exclusive data element set belonging to the same data element group set\",\"recommendation\":\"Either remove the data element from all but one exclusive group set or consider if the set really should be an exclusive group set\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEVEGS\"},{\"name\":\"categories_same_category_options\",\"displayName\":\"Categories with the same category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with the same category options\",\"introduction\":\"Categories with the exact same category options should be considered to be merged. Categories with the exact same category options may be easily confused by users in analysis. The details view will provide a list of categories which have the exact same category options. For each duplicated category a number in parentheses such as (1) will indicate which categories belong to duplicated groups.\",\"recommendation\":\"If category combinations have already been created with duplicative categories,\\nit is recommended that you do not take any action, but rather ensure\\nthat users understand that there may be two category combinations which are duplicative.\\n\\nIf you choose to merge the duplicative category combinations, you would need to \\nremap all category option combinations from the category combo which you wish to \\nremove, to the one which you wish to keep. \\n\\nIf one of the categories is not in use in any category combination, it should\\nconsider to be removed from the system.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CSCO\"},{\"name\":\"visualizations_not_viewed_one_year\",\"displayName\":\"Visualizations which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Visualizations which have not been viewed in the past 12 months\",\"introduction\":\"Visualizations should be regularly viewed in the system. In many cases, users may create charts for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to charts being difficult to find in the visualization app.\",\"recommendation\":\"Unused charts can be removed directly using the data visualization app by a user with sufficient authority. If charts are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"visualizations\",\"isSlow\":false,\"code\":\"VNVOY\"},{\"name\":\"categories_one_default_category_option\",\"displayName\":\"Only one default category option should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option with UID \\\"xYerKDKCefk\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option or move all references to category option \\\"xYerKDKCefk\\\" and then remove the unused conflicting category option.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CODCO\"},{\"name\":\"orgunits_multiple_spaces\",\"displayName\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"introduction\":\"Names and/or shortnames of organisation units should not contain multiple spaces. They are superfluous and may complicate the location of organisation units when they are searched.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the multiple spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMS\"},{\"name\":\"data_elements_aggregate_abandoned\",\"displayName\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"introduction\":\"Data elements are considered to be abandoned when they have not been edited in at least 100 days and do not have any data values associated with them. Often, these are the result of new or changed configurations that have been abandoned at some point.\",\"recommendation\":\"Data elements that have no data associated with them and which there are no plans to start using for data collection should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAA\"},{\"name\":\"data_elements_assigned_to_data_sets_with_different_period_types\",\"displayName\":\"Data elements assigned to data sets with different period type\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are assigned to at least one data set that has a different period type\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEATDSWDPT\"},{\"name\":\"data_elements_aggregate_no_groups\",\"displayName\":\"Aggregate data elements not in any data element groups.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not in any data element groups.\",\"introduction\":\"All data elements should be in a data element group. This allows users to find the data elements more easily in analysis\\n apps and also contributes to having more complete data element group sets.\\n Maintenance operations can also be made more efficient by applying\\n bulk settings (ex. sharing) to all data elements within a data element group.\",\"recommendation\":\"Data elements that are not in a data element group should be added to a relevant data element group. If the data elements are not needed, they should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANG\"},{\"name\":\"category_options_shared_within_category_combo\",\"displayName\":\"Category combinations with categories which share the same category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category combinations with categories which share the same category options.\",\"introduction\":\"As a general rule, category options should be reused where possible between categories. The exception to this rule however, is when you have a category combo with multiple categories, and within those categories, a category option is shared. As a simple example, lets say you have a category called \\\"Sex\\\" with options \\\"Male\\\"\\\", \\\"Female\\\" and \\\"Unknown\\\". There is also a second category called \\\"Age\\\" with options \\\"<15\\\", \\\"15+\\\", and \\\"Unknown\\\". A category combination called \\\"Age/Sex\\\" is then created with these two categories, which share the option \\\"Unknown\\\". This situation should be avoided, as it creates issues when analyzing data.\",\"recommendation\":\"The recommended approach to dealing with this situation is to create a new category combination, using two new categories. Using the example from the introduction, you should create two new category options called \\\"Unknown age\\\" and \\\"Unknown sex\\\". A new category combination can then be created with these new categories, which do not share category options. All data which is potentially associated with the old category combinations, would need to be reassigned to the new category option combinations. Any analytical objects which use the categories to be removed would also need to be updated.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"COSWCC\"},{\"name\":\"orgunits_null_island\",\"displayName\":\"Organisation units located within 100 km of Null Island (0,0).\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units located within 100 km of Null Island (0,0).\",\"introduction\":\"A common problem when importing coordinates is the inclusion of coordinates situated around the point of [Null Island](https://en.wikipedia.org/wiki/Null_Island). This is the point on the Earth's surface where the Prime Meridian and Equator intersect with a latitude of 0 and a longitude of 0. The point also happens to be situated currently in the middle of the ocean. This query identifies any points located within 100 km of the point having latitude and longitude equal to zero.\",\"recommendation\":\"Update the coordinates of the affected organization unit to the correct location.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONI\"},{\"name\":\"program_rule_actions_without_section\",\"displayName\":\"Program rules with actions lacking a program stage section\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a section but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWS\"},{\"name\":\"periods_3y_future\",\"displayName\":\"Periods which are more than three years in the future.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are more than three years in the future.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\nfar future. Different data entry clients may not properly validate for periods\\nwhich are in the future, and thus any periods in the future should be reviewed.\\nIn some cases, data may be valid for future dates, e.g. targets which are set for the\\nnext fiscal year.\",\"recommendation\":\"If any periods exist in the system in the future, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\\n\\nIn many cases, clients may mean to transmit\\ndata for January 2021, but due to data entry errors, January 2031 is selected. Thus,\\nany data in the far future should be investigated to ensure it does not result\\nfrom data entry errors.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"P3F\"},{\"name\":\"orgunits_trailing_spaces\",\"displayName\":\"Organisation units should not have trailing spaces.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have trailing spaces.\",\"introduction\":\"Trailing spaces in organisation units are superfluous.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the trailing spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OTS\"},{\"name\":\"validation_rule_groups_scarce\",\"displayName\":\"Validation rule should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Validation rule should have at least two members.\",\"introduction\":\"Generally validation rule groups should be composed of multiple validation rules.\",\"recommendation\":\"Considering removing groups which are empty or which have a single member. Alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"validationRuleGroups\",\"isSlow\":false,\"code\":\"VRGS\"},{\"name\":\"indicators_with_invalid_numerator\",\"displayName\":\"Indicators with invalid numerator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators where the numerator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWIN\"},{\"name\":\"categories_one_default_category_combo\",\"displayName\":\"Only one default category combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category combo should exist\",\"introduction\":\"There should only exist one category combo with name and code \\\"default\\\".\",\"recommendation\":\"Only the category combo with UID \\\"bjDvmb4bfuf\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category combo or move all references to category combo \\\"bjDvmb4bfuf\\\" and then remove the unused conflicting category combo.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CODCC\"},{\"name\":\"data_elements_without_data_sets\",\"displayName\":\"Data elements lacking data Sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data sets\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWDS\"},{\"name\":\"category_combos_unused\",\"displayName\":\"Category combinations not used by other metadata objects\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category combinations not used by other metadata objects\",\"introduction\":\"Category combinations which are unused in any datasets, data elements, programs or data approval workflows may be safe to delete. In some cases, category combinations may be created, but never actually used for anything. This may lead to situations where users and implementers are confused about which category combination should actually be used. In general, it should be safe to delete unused category combinations, except in situations where existing data has been associated with them.\",\"recommendation\":\"Check to see if any data is associated with the category combination before attempting to delete it. Category combinations which are not currently used in any metadata objects may still be valid for legacy reasons, but they should be reviewed to be sure they are still needed. Otherwise, it should be safe to remove them from the system.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCU\"},{\"name\":\"category_option_groups_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option groups should be composed of at least two category options. There can however be legitimate cases when a single category option is part of a group, especially in cases where there is a direct mapping between age bands and category options.\",\"recommendation\":\"Considering removing groups with zero or one category options, or alternatively, add additional category options to the group to make it more useful.\",\"issuesIdType\":\"categoryOptionGroups\",\"isSlow\":false,\"code\":\"COGS\"},{\"name\":\"datasets_empty\",\"displayName\":\"Datasets with no data elements.\",\"section\":\"Data sets\",\"severity\":\"WARNING\",\"description\":\"Datasets with no data elements.\",\"introduction\":\"All datasets should have data elements assigned to them.\",\"recommendation\":\"Remove empty datasets, or alternatively, assign data elements to them.\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DE\"},{\"name\":\"indicators_without_groups\",\"displayName\":\"Indicators lacking groups\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that do not have at least one group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWG\"},{\"name\":\"orgunit_groups_scarce\",\"displayName\":\"Organisation unit groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Organisation unit groups should have at least two members.\",\"introduction\":\"Generally, organisation unit groups should be composed of multiple organisation units.\",\"recommendation\":\"Considering removing groups with zero or one organisation units, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OGS\"},{\"name\":\"program_rules_without_priority\",\"displayName\":\"Program rules lacking a priority setting\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules with action type \\\"assign\\\" where the rule priority is not yet set\",\"recommendation\":\"Set a priority for the program rule(s)\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWP\"},{\"name\":\"categories_unique_category_combo\",\"displayName\":\"Different category combinations should not have the exact same combination of categories.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Different category combinations should not have the exact same combination of categories.\",\"introduction\":\"Category combinations should be a unique combination of categories. If two or more category combinations contain the exact same set of categories, this would be considered to be duplicative and potentially confusing to users.\",\"recommendation\":\"One category combo is kept, all references are updated to use this combo and other combos are removed.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CUCC\"},{\"name\":\"indicator_group_sets_scarce\",\"displayName\":\"Indicator groups sets should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups sets should have at least two members.\",\"introduction\":\"All indicator group set should be composed of at least two indicators groups.\",\"recommendation\":\"Considering removing indicator group sets with less than two indicator groups, or alternatively, add additional indicator groups to the indicator group set to make it more useful.\",\"issuesIdType\":\"indicatorGroupSets\",\"isSlow\":false,\"code\":\"IGSS\"},{\"name\":\"validation_rules_with_invalid_right_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a right side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWIRSE\"},{\"name\":\"data_elements_aggregate_aggregation_operator\",\"displayName\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"introduction\":\"Data elements which are not numeric (text, dates, etc) should have an aggregation operator set to NONE. Data elements which are able to be aggregated (numbers, integers, etc) should have an aggregation operator set to something other than NONE, most often SUM.\",\"recommendation\":\"Open the affected data elements in the Maintenance App and change their aggregation type to an appropriate type. Alternatively, these can be altered via the API.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAAO\"},{\"name\":\"org_unit_groups_without_group_sets\",\"displayName\":\"Organisation unit groups lacking group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation unit groups that aren't member of at least one organisation unit group set\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OUGWGS\"},{\"name\":\"program_rule_variables_without_attribute\",\"displayName\":\"Program rule variables lacking an attribute\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring an attribute source but that is not yet linked to an attribute\",\"recommendation\":\"Assign an attribute to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWA\"},{\"name\":\"program_indicator_groups_scarce\",\"displayName\":\"Program indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Program indicator groups should have at least two members.\",\"introduction\":\"Program indicator groups should generally be composed of two or more program indicators.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"programIndicatorGroups\",\"isSlow\":false,\"code\":\"PIGS\"},{\"name\":\"program_rules_no_expression\",\"displayName\":\"Program rules with no expression.\",\"section\":\"Program rules\",\"severity\":\"WARNING\",\"description\":\"Program rules with no expression.\",\"introduction\":\"All program rules should have an expression. Expressions are used by program rules to determine when they should be triggered. Program rules with no expression have no purpose.\",\"recommendation\":\"Using the DHIS2 user interface, assign an expression to each of the program rules which is missing one. Otherwise, if it is safe to delete the program rule with no expression, it is recommended to remove it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNE\"},{\"name\":\"data_elements_aggregate_no_data\",\"displayName\":\"Aggregate data elements with NO data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements with NO data values.\",\"introduction\":\"Data elements should generally always be associated with data values. If data elements exist in a data set which is active, but there are no data values associated with them, they may not be part of the data entry screens. Alternatively, the data element may have been added but never been associated with a dataset.\",\"recommendation\":\"Consider removing data elements with no data values.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAND\"},{\"name\":\"program_indicators_without_expression\",\"displayName\":\"Program indicators lacking an expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have no expression set yet\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWE\"},{\"name\":\"periods_distant_past\",\"displayName\":\"Periods which are in the distant past.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are in the distant past.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\ndistant past. Different data entry clients may not properly validate for periods\\nwhich are in the distant past, and thus these periods should be triaged to ensure\\nthat data has not been entered against them by mistake.\",\"recommendation\":\"If any periods exist in the system in the distant past, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PDP\"},{\"name\":\"org_units_being_orphaned\",\"displayName\":\"Orphaned organisation units\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that aren't level 1 units but that lack a parent so that they are not connected to the rest of the organisation tree\",\"recommendation\":\"Find (or create) and set the correct parent for the orphaned organisation unit(s). Eventually this is also caused by having set the wrong level.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUBO\"},{\"name\":\"cocs_wrong_cardinality\",\"displayName\":\"Category option combinations with incorrect cardinality.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with incorrect cardinality.\",\"introduction\":\"All category option combinations should have exactly the same number of category option associations as the number of categories in the category combination. If there are two categories in a category combination, then every category option combination should have exactly two category options.\\nCategory option combinations with the incorrect cardinality are usually the result of a category combination having been created, and then modified later. Suppose that two categories are used to create a category combination. Each category option combination of this category combo will have two category options. If an additional category is added to the category combination later, new category option combinations with three category options will be created and associated with this category combo. The original category option combinations would be considered to be invalid.\",\"recommendation\":\"Category option combinations which have an incorrect cardinality will be ignored by the DHIS2 analytics system and should be removed.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CWC\"},{\"name\":\"dashboards_not_viewed_one_year\",\"displayName\":\"Dashboards which have not been actively viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Dashboards which have not been actively viewed in the past 12 months\",\"introduction\":\"Dashboards should be regularly viewed in the system. In many cases, users may create dashboards for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to useful dashboards being difficult to find. This check identifies any dashboards which have not been viewed in the past year.\",\"recommendation\":\"Unused dashboards can be deleted in the entirety from the main dashboard app by clicking on the \\\"Edit\\\" button and choosing \\\"Delete\\\". Note that this process cannot be undone! Another option would be to alter the sharing of the dashboard so that it is not visible to any user.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNVOY\"}]", - "responseSize": 66022, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations/lnWRZN67iDU", - "featureName": "Users should be able to delete a job", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "DELETE", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 404, - "responseBody": "{\"httpStatus\":\"Not Found\",\"httpStatusCode\":404,\"status\":\"ERROR\",\"message\":\"JobConfiguration with id lnWRZN67iDU could not be found.\",\"errorCode\":\"E1005\"}", - "responseSize": 153, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - } -] diff --git a/cypress/fixtures/network/40/users_should_be_able_to_edit_jobs_that_take_parameters.json b/cypress/fixtures/network/40/users_should_be_able_to_edit_jobs_that_take_parameters.json deleted file mode 100644 index 2b0ee2ade..000000000 --- a/cypress/fixtures/network/40/users_should_be_able_to_edit_jobs_that_take_parameters.json +++ /dev/null @@ -1,271 +0,0 @@ -[ - { - "path": "/api/40/systemSettings/helpPageLink", - "featureName": "Users should be able to edit jobs that take parameters", - "static": false, - "count": 9, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"helpPageLink\":\"https://dhis2.github.io/dhis2-docs/master/en/user/html/dhis2_user_manual_en.html\"}", - "responseSize": 99, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/analytics/tableTypes", - "featureName": "Users should be able to edit jobs that take parameters", - "static": false, - "count": 9, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"]", - "responseSize": 122, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictorGroups?paging=false", - "featureName": "Users should be able to edit jobs that take parameters", - "static": false, - "count": 9, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictorGroups\":[]}", - "responseSize": 22, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations/jobTypes?fields=*&paging=false", - "featureName": "Users should be able to edit jobs that take parameters", - "static": false, - "count": 9, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"jobTypes\":[{\"name\":\"Data integrity\",\"jobType\":\"DATA_INTEGRITY\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"checks\",\"fieldName\":\"Checks\",\"persisted\":false,\"collectionName\":\"checks\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/dataIntegrity\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.parameters.DataIntegrityJobParameters$DataIntegrityReportType\",\"name\":\"type\",\"fieldName\":\"Type\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"REPORT\",\"SUMMARY\",\"DETAILS\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Resource table\",\"jobType\":\"RESOURCE_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Analytics table\",\"jobType\":\"ANALYTICS_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"skipPrograms\",\"fieldName\":\"Skip programs\",\"persisted\":false,\"collectionName\":\"skipPrograms\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/programs\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipResourceTables\",\"fieldName\":\"Skip resource tables\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Continuous analytics table\",\"jobType\":\"CONTINUOUS_ANALYTICS_TABLE\",\"schedulingType\":\"FIXED_DELAY\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"fullUpdateHourOfDay\",\"fieldName\":\"Full update hour of day\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Data sync\",\"jobType\":\"DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker programs data sync\",\"jobType\":\"TRACKER_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Event programs data sync\",\"jobType\":\"EVENT_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Meta data sync\",\"jobType\":\"META_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"trackerProgramPageSize\",\"fieldName\":\"Tracker program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"eventProgramPageSize\",\"fieldName\":\"Event program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"dataValuesPageSize\",\"fieldName\":\"Data values page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Aggregate data exchange\",\"jobType\":\"AGGREGATE_DATA_EXCHANGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"dataExchangeIds\",\"fieldName\":\"Data exchange ids\",\"persisted\":false,\"collectionName\":\"dataExchangeIds\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/aggregateDataExchanges\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Send scheduled message\",\"jobType\":\"SEND_SCHEDULED_MESSAGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Program notifications\",\"jobType\":\"PROGRAM_NOTIFICATIONS\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Monitoring\",\"jobType\":\"MONITORING\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"validationRuleGroups\",\"fieldName\":\"Validation rule groups\",\"persisted\":false,\"collectionName\":\"validationRuleGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/validationRuleGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"sendNotifications\",\"fieldName\":\"Send notifications\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"persistResults\",\"fieldName\":\"Persist results\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Push analysis\",\"jobType\":\"PUSH_ANALYSIS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"pushAnalysis\",\"fieldName\":\"Push analysis\",\"persisted\":false,\"collectionName\":\"pushAnalysis\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/pushAnalysis\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker search optimization\",\"jobType\":\"TRACKER_SEARCH_OPTIMIZATION\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"attributes\",\"fieldName\":\"Attributes\",\"persisted\":false,\"collectionName\":\"attributes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/trackedEntityAttributes/indexable\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipIndexDeletion\",\"fieldName\":\"Skip index deletion\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Predictor\",\"jobType\":\"PREDICTOR\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictors\",\"fieldName\":\"Predictors\",\"persisted\":false,\"collectionName\":\"predictors\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictors\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictorGroups\",\"fieldName\":\"Predictor groups\",\"persisted\":false,\"collectionName\":\"predictorGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictorGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Disable inactive users\",\"jobType\":\"DISABLE_INACTIVE_USERS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"inactiveMonths\",\"fieldName\":\"Inactive months\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"reminderDaysBefore\",\"fieldName\":\"Reminder days before\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Test\",\"jobType\":\"TEST\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Long\",\"name\":\"waitMillis\",\"fieldName\":\"Wait millis\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"stages\",\"fieldName\":\"Stages\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtStage\",\"fieldName\":\"Fail at stage\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"items\",\"fieldName\":\"Items\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtItem\",\"fieldName\":\"Fail at item\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Long\",\"name\":\"itemDuration\",\"fieldName\":\"Item duration\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.String\",\"name\":\"failWithMessage\",\"fieldName\":\"Fail with message\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"failWithException\",\"fieldName\":\"Fail with exception\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.JobProgress$FailurePolicy\",\"name\":\"failWithPolicy\",\"fieldName\":\"Fail with policy\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"PARENT\",\"FAIL\",\"SKIP_STAGE\",\"SKIP_ITEM\",\"SKIP_ITEM_OUTLIER\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"runStagesParallel\",\"fieldName\":\"Run stages parallel\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]}]}", - "responseSize": 24994, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/validationRuleGroups?paging=false", - "featureName": "Users should be able to edit jobs that take parameters", - "static": false, - "count": 9, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"validationRuleGroups\":[{\"displayName\":\"ANC\",\"id\":\"UP1lctvalPn\"},{\"displayName\":\"Commodities\",\"id\":\"xcpl667ccfF\"},{\"displayName\":\"Critical event\",\"id\":\"xWtt9c443Lt\"},{\"displayName\":\"District stock\",\"id\":\"mEtdbIDDhix\"},{\"displayName\":\"Epidemic disease outbreak\",\"id\":\"y2yQIm79VTW\"},{\"displayName\":\"Facility Stock\",\"id\":\"SqyI8HKqI4g\"},{\"displayName\":\"Immunisation\",\"id\":\"UiOSY1iIdub\"},{\"displayName\":\"Infectious disease outbreak\",\"id\":\"WUZXEFdn1PX\"},{\"displayName\":\"Malaria\",\"id\":\"zlaSof6qLqF\"},{\"displayName\":\"Population\",\"id\":\"D3bItmtBpsW\"},{\"displayName\":\"TB\",\"id\":\"IMF6p1MqoHl\"},{\"displayName\":\"Testing\",\"id\":\"nMDkAJXsmlR\"}]}", - "responseSize": 628, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/pushAnalysis?paging=false", - "featureName": "Users should be able to edit jobs that take parameters", - "static": false, - "count": 9, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"pushAnalysis\":[{\"displayName\":\"Immunization Key Indicators Monthly Report\",\"id\":\"jtcMAKhWwnc\"}]}", - "responseSize": 98, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictors?paging=false", - "featureName": "Users should be able to edit jobs that take parameters", - "static": false, - "count": 9, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictors\":[{\"displayName\":\"Malaria Outbreak Threshold\",\"id\":\"tEK1OEqS4O1\"}]}", - "responseSize": 80, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/dataIntegrity", - "featureName": "Users should be able to edit jobs that take parameters", - "static": false, - "count": 9, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[{\"name\":\"orgunits_invalid_geometry\",\"displayName\":\"Organisation units with invalid geometry.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with invalid geometry.\",\"introduction\":\"DHIS2 uses the PostGIS database extension to manage the geographical information associated\\nwith organisation units. There are various reasons why geometries may be considered to be\\ninvalid including self-inclusions, self-intersections, and sliver polygons. Please see the\\nPostGIS documentation for a more in-depth discussion on this topic.\\n\\nInvalid geometry is not always a problem and may be able to be ignored, however, it has been observed in certain systems\\nthat this can lead to problems in analytics. If you are experiencing issues when generating analytics\\ntables, and see errors related to invalid geometries, you will need to either remove the invalid geometry,\\nor fix it.\",\"recommendation\":\"Update the geometry of the affected organisation units to a valid geometry. It may be possible to use the PostGIS function `ST_MakeValid` to automatically fix the problem. However, in other cases the geometry may need to be edited in a GIS tool, and then updated again in DHIS2.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OIG\"},{\"name\":\"data_elements_without_groups\",\"displayName\":\"Data elements lacking groups\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data element groups\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWG\"},{\"name\":\"orgunit_group_sets_excess_groups\",\"displayName\":\"Organisation units which belong to multiple groups in a group set.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which belong to multiple groups in a group set.\",\"introduction\":\"Organisation units should belong to exactly one group within each organisation unit group set of which they are a member. If the organisation unit belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the organisation units in the details list to exactly one group within each group set membership.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OGSEG\"},{\"name\":\"validation_rules_missing_value_strategy_null\",\"displayName\":\"All validation rule expressions should have a missing value strategy.\",\"section\":\"Validation rules\",\"severity\":\"SEVERE\",\"description\":\"All validation rule expressions should have a missing value strategy.\",\"introduction\":\"Validation rules are composed of a left and right side expression. In certain systems the missing value strategy may not be defined. This may lead to an exception during validation rule analysis. The affected validation rules should be corrected to with an appropriate missing value strategy.\",\"recommendation\":\"Using the results of the the details SQL view, identify the affected validation rules and which side of the rule the missing value strategy has not been specified. Using the maintenance app, make the appropriate corrections and save the rule.\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRMVSN\"},{\"name\":\"category_combos_being_invalid\",\"displayName\":\"Invalid Category-combos\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Lists all category-combos that are invalid\",\"recommendation\":\"Make sure the category combo is assigned to at least one category and that all categories have category options \",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCBI\"},{\"name\":\"data_elements_in_data_set_not_in_form\",\"displayName\":\"Data sets with data elements not in data entry form\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that have data elements which are neither a member of the set's data entry form nor a member of the sets section\",\"recommendation\":\"Either remove the data elements in question or make them a member of the set's form or section\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DEIDSNIF\"},{\"name\":\"categories_no_options\",\"displayName\":\"Categories with no category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with no category options\",\"introduction\":\"Categories should always have at least one category option.\",\"recommendation\":\"Any categories without category options should either be removed from the system if they are not in use. Otherwise, appropriate category options should be added to the category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CNO\"},{\"name\":\"data_elements_aggregate_no_analysis\",\"displayName\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"introduction\":\"All aggregate data elements that are captured in DHIS2 should be used to produce some type of analysis output (charts, maps, tables). This can be by using them directly in an output, or by having them contribute to an indicator calculation that is used an output.\",\"recommendation\":\"Data elements that are not routinely being reviewed in analysis, either directly or indirectly through indicators, should be reviewed to determine if they still need to be collected. If these are meant to be used in routine review, then associated outputs should be created using them. If these data elements are not going to be used for any type of information review, consideration should be made to either archive them or delete them.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANA\"},{\"name\":\"indicators_duplicated_terms\",\"displayName\":\"Indicators with the same terms.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same terms.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check attempts to identify indicators with the same formulas, regardless of the order of their their terms. Suppose you have an indicator which calculates total ANC attendance: ANC Total = ANC1 + ANC2 + ANC3 Suppose then another indicator exists in the system, which has been defined as: ANC Totals = ANC3 + ANC2 + ANC1 These two indicators are equivalent, and will produce the same result, and are thus considered to be duplicated.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Considered deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IDT\"},{\"name\":\"program_rules_no_action\",\"displayName\":\"Program rules with no action.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules with no action.\",\"introduction\":\"All program rules should have an action.\",\"recommendation\":\"Using the DHIS2 user interface, assign an action to each of the program rules which is missing one. Alternatively, if the program rule is not in use, then consider removing it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNA\"},{\"name\":\"orgunits_compulsory_group_count\",\"displayName\":\"Organisation units that are not in all compulsory orgunit group sets\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Orgunits that are not in all compulsory orgunit group sets\",\"introduction\":\"If any organisation unit groups have been marked as compulsory, each and every organisation unit should belong to exactly one group within each compulsory organisation unit group set. Assume we have created a group set called \\\"Ownership\\\" with two groups \\\"Public\\\" and \\\"Private\\\". Each and every organisation unit contained in the hierarchy must belong to either Public or Private (but not both). When organisation unit are not part of a group set, results in the analytics apps will not be correct if the organisation unit group set is used for aggregation.\",\"recommendation\":\"For each of the organisation units identified in the details query, you should assign the appropriate organisation unit group within the group set. Alternatively, if the group set should not be compulsory, you should change this attribute.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OCGC\"},{\"name\":\"orgunits_no_coordinates\",\"displayName\":\"Organisation units with no coordinates.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with no coordinates.\",\"introduction\":\"Ideally, all organisation units contained in the DHIS2 hierarchy should have a valid\\nset of coordinates. Usually for all organisation units above the facility level,\\nthese coordinates should be a polygon which provides the boundary of the organisation\\nunit. For facilities, these are usually represented as point coordinates.\\n\\nThere can obviously be exceptions to this rule. Mobile health facilities may not have\\na fixed location. Community health workers or wards below the facility level\\nmay also not have a defined or definable coordinate.\\n\\nThis check is intended to allow you to review all organisation units which do\\nnot have any coordinates and make a determination as to whether they should be updated.\",\"recommendation\":\"Where appropriate, update the geometry of each organisation unit with a valid geometry.\\nYou may need to contact the appropriate local government office to obtain a copy\\nof district boundaries, commonly referred to as \\\"shape files\\\". Another possibility\\nis to use freely available boundary files from GADM (https://gadm.org)\\n\\nIf facilities are missing coordinates, it may be possible to obtain these from\\nthe facility staff using their smart phone to get the coordinates. Images\\nfrom Google Maps can also often be used to estimate the position of a facility,\\nassuming that you have good enough resolution and local knowledge of where\\nit is located.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONC\"},{\"name\":\"data_sets_not_assigned_to_org_units\",\"displayName\":\"Data sets not assigned to organisation units\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that are not assigned to any organisation units\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DSNATOU\"},{\"name\":\"dashboards_no_items\",\"displayName\":\"Dashboards with no items.\",\"section\":\"Dashboards\",\"severity\":\"INFO\",\"description\":\"Dashboards with no items.\",\"introduction\":\"All dashboards should have content on them. Dashboards without any content do not serve any purpose, and can make it more difficult to find relevant dashboards with content.\",\"recommendation\":\"Dashboards without content that have not been modified in the last 14 days should be considered for deletion.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNI\"},{\"name\":\"orgunits_same_name_and_parent\",\"displayName\":\"Organisation units should not have the same name and parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have the same name and parent.\",\"introduction\":\"Organisation units may have exactly the same name. This may become confusing to users, particularly if the organisation unit has the same name and same parent. This can easily lead to data entry or analysis mistakes as users have no way to distinguish between the two organisation units.\",\"recommendation\":\"Rename identically named organisation units which share the same parent using the maintenance app.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OSNAP\"},{\"name\":\"indicators_not_grouped\",\"displayName\":\"Indicators not in any groups.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not in any groups.\",\"introduction\":\"All indicators should be in an indicator group. This allows users to find the indicators more easily in analysis apps and also contributes to having more complete indicators group sets. Maintenance operations can also be made more efficient by applying bulk settings (ex. sharing, filtering) to all indicators within an indicator group.\",\"recommendation\":\"Indicators that are not in a indicator group should be added to a relevant indicator group. If the indicators are not needed, they should be deleted.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"ING\"},{\"name\":\"category_option_group_sets_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option group sets should be composed of at least two category option groups.\",\"recommendation\":\"Considering removing groups with zero or one category option groups, or alternatively, add additional category option groups to the group set to make it more useful.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSS\"},{\"name\":\"org_units_without_groups\",\"displayName\":\"Organisation units lacking groups\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are not connected to at least one group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWG\"},{\"name\":\"data_elements_excess_groupset_membership\",\"displayName\":\"Data elements which belong to multiple groups in a group set.\",\"section\":\"data_elements\",\"severity\":\"SEVERE\",\"description\":\"Data elements which belong to multiple groups in a group set.\",\"introduction\":\"Data elements should belong to exactly one group within each data element group set of which they are a member. If the data element belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the data elements in the details list to exactly one data element group within each group set.\",\"issuesIdType\":\"data_elements_aggregate\",\"isSlow\":false,\"code\":\"DEEGM\"},{\"name\":\"data_element_groups_scarce\",\"displayName\":\"Data element groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Data element groups should have at least two members.\",\"introduction\":\"All data element groups should be composed of at least two data elements.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"dataElementGroups\",\"isSlow\":false,\"code\":\"DEGS\"},{\"name\":\"orgunits_not_contained_by_parent\",\"displayName\":\"Organisation units with point coordinates should be contained by their parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with point coordinates should be contained by their parent.\",\"introduction\":\"Facilities are often represented as points in the DHIS2 hierarchy. Their parent organisation units geometry should contain all facilities which have been associated with them.\",\"recommendation\":\"Often boundary files are simplified when they are uploaded into DHIS2. This process may result in\\nfacilities which are located close to the border of a given district to fall outside of the district\\nwhen the boundary is simplified. This is considered to be more of a cosmetic problem for most DHIS2\\ninstallations, but could become an issue if any geospatial analysis is attempted using the\\nboundaries and point coordinates.\\n\\nIn cases where the facility falls outside of its parent's boundary\\nyou should confirm that the coordinates are correct. If the location is close to the boundary, you\\nmay want to reconsider how the boundary files have been simplified. Otherwise, if the location of\\nthe facility is completely incorrect, it should be rectified.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONCBP\"},{\"name\":\"program_rules_message_no_template\",\"displayName\":\"Program rules actions which should send or schedule a message without a message template.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules actions which should send or schedule a message without a message template.\",\"introduction\":\"Program rule actions of type \\\"Send message\\\" or \\\"Schedule message\\\" should have an associated message template.\",\"recommendation\":\"Using the DHIS2 user interface, assign a message template to each of the program rule actions which send or schedule messages but which does not have an association with a message template.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRMNT\"},{\"name\":\"indicators_with_invalid_denominator\",\"displayName\":\"Indicators with invalid denominator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"List all indicators where the denominator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWID\"},{\"name\":\"indicator_types_duplicated\",\"displayName\":\"Indicator types with the same factor.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicator types with the same factor.\",\"introduction\":\"Indicators can be assigned a factor which is multiplied by the indicator's value. For example, if you create a percentage based indicator, you can assign the indicator a factor of 100, which would be multiplied by the actual value of the indicator calculated by DHIS2. In general, having multiple indicator types with the same factor is not recommended. It is duplicative, and may lead to confusion.\",\"recommendation\":\"Duplicated indicator types should consider to be removed from the system. Consider choosing one of the duplicated indicator types as the one to keep, and then update all indicators which share the same factor to this indicator type. The duplicated indicator types can then be removed from the system.\",\"issuesIdType\":\"indicatorTypes\",\"isSlow\":false,\"code\":\"ITD\"},{\"name\":\"options_sets_empty\",\"displayName\":\"Empty option sets\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Empty option sets\",\"introduction\":\"All option sets should generally include at least two items. Empty option sets serve no purpose.\",\"recommendation\":\"Options should either be added to the option set, or the option set should be deleted.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSE\"},{\"name\":\"category_options_no_categories\",\"displayName\":\"Category options with no categories.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options with no categories.\",\"introduction\":\"All category options should belong to at least one category.\",\"recommendation\":\"Category options which are not part of any category should be removed or alternatively should be added to an appropriate category.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CONC\"},{\"name\":\"orgunits_orphaned\",\"displayName\":\"Orphaned organisation units.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"Orphaned organisation units.\",\"introduction\":\"Orphaned organisation units are those which have neither parents nor any children. This means that they have no relationship to the main organisation unit hierarchy. These may be created by faulty metadata imports or direct manipulation of the database.\",\"recommendation\":\"The orphaned organisation units should be assigned a parent or removed from the system. It is recommended to use the DHIS2 API for this task if possible. If this is not possible, then they may need to be removed through direct SQL on the DHIS2 database.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OO\"},{\"name\":\"indicators_with_identical_formulas\",\"displayName\":\"Indicators with identical formulas\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that have the identical formulas with at least one other indicator\",\"recommendation\":\"Check if the same indicator should be used everywhere and remove duplicates\",\"isSlow\":false,\"code\":\"IWIF\"},{\"name\":\"program_indicators_with_invalid_filters\",\"displayName\":\"Program indicators with invalid filter\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators with invalid filter expression\",\"recommendation\":\"Check that the expression evaluates to true/false\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIF\"},{\"name\":\"program_rules_without_condition\",\"displayName\":\"Program rules lacking a condition\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that have no condition yet\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWC\"},{\"name\":\"categories_one_default_category\",\"displayName\":\"Only one default category should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category should exist\",\"introduction\":\"There should only exist one category with name and code \\\"default\\\".\",\"recommendation\":\"Only the category with UID \\\"GLevLNI9wkl\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category or move all references to category \\\"GLevLNI9wkl\\\" and then remove the unused conflicting category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CODC\"},{\"name\":\"org_units_with_cyclic_references\",\"displayName\":\"Organisation units with cyclic references\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that have a conflicting parent hierarchy definition so that two organisation units become parent of each other or in other words they form a circular reference\",\"recommendation\":\"One of the organisation units must be setup wrongly and needs to be corrected so that a non-circular tree connects the two\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWCR\"},{\"name\":\"program_rule_variables_without_data_element\",\"displayName\":\"Program rule variables lacking a data element\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring a data element source but that is not yet linked to a data element\",\"recommendation\":\"Assign a data element to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWDE\"},{\"name\":\"org_units_violating_exclusive_group_sets\",\"displayName\":\"Organisation units with conflicting exclusive group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are members of multiple exclusive organisation unit groups\",\"recommendation\":\"Remove the organisation unit from all but one exclusive organisation unit group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUVEGS\"},{\"name\":\"program_rule_actions_without_data_object\",\"displayName\":\"Program rules with actions lacking a data object\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires either a data element or an attribute but is not connected either\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWDO\"},{\"name\":\"orgunits_openingdate_gt_closeddate\",\"displayName\":\"Organisation units which have an opening date later than the closed date.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which have an opening date later than the closed date.\",\"introduction\":\"If a closing date has been defined for an organisation unit, it should always be after the opening date (if one has been defined).\",\"recommendation\":\"Alter either the opening or closing date of all affected organisation units so that the closing date is after the opening date.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OOGC\"},{\"name\":\"categories_one_default_category_option_combo\",\"displayName\":\"Only one default category option combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option combo should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option combo with UID \\\"HllvX50cXC0\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option combo or move all references to category option combo \\\"HllvX50cXC0\\\" and then remove the unused conflicting category option combo.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CODCOC\"},{\"name\":\"category_option_group_sets_incomplete\",\"displayName\":\"Category option group sets which do not contain all category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option group sets which which do not contain all category options.\",\"introduction\":\"Category option group sets are composed of multiple category option groups, which are in turn composed of various category options. Category option group sets are often used to group related category options together for analytical purposes. Categories are also composed of category options. In general, but not always, category option group sets should contain all category options of related categories. Suppose we have the following two age categories. \\nAge coarse: <15, 15+ Age fine: <1, 1-10, 10-14,15-19,20-24,25-29,30-34,35-39,40-44,45+\\nIn many cases, related data elements may be disaggregated differently. This may be to differences in the way in which the data is collected, or as is often the case, the disaggregation has changed over time. If we wish to analyze data for two different data elements (one of which uses Age coarse and the other Age fine), we can create a category option group set consisting of two category option groups which should consist of the following category options from above. \\n<15: <15, <1, 1-10, 10-14 15+: 15+, 15-19,20-24,25-29,30-34,35-39,40-44,45+\\nSuppose that we happen to omit the category option \\\"<1\\\" from the \\\"<15\\\" category option group. This would result in potential aggregation errors in when using this category option group set in any analytical objects. The details of this metadata check would return the UID and name of the category option group set. The category and category option would also be provided. Using the previous example, we would see \\\"Age fine:{<1}\\\" in the metadata check details section, to indicate that the <1 category option which is part of the \\\"Age fine\\\" category, is missing from the category option group set.\\nThere may exist specific analytical reasons why specific category options are omitted from a category option group set. However,these should usually be special cases. This metadata check will identify cases where category option group sets appear to be incomplete, however you should carefully review any groups which appear in the details. \\nThis check may also produce a number of issues which may at first glance appear to be false positives. In some cases, category options may be added to a category by mistake. When category option group sets are created, this extraneous option may be omitted and thus appear as missing from the group set. \\nAnother observed situation is where an option like \\\"Unknown\\\" is used across unrelated categories. Suppose you have two categories \\\"Age (<15, 15+, Unknown)\\\" and \\\"Sex (Male,Female,Unknown)\\\". Similar to above, we create category option group sets like: \\n<15: <15 15+: 15+ Unknown: Unknown\\nThis metadata check will report that \\\"Male\\\" and \\\"Female\\\" are missing from the group set. This is because the same \\\"Unknown\\\" option is shared between two different, unrelated categories. It is recommended that if this situation occurs, that you create two separate \\\"Unknown\\\" category options like \\\"Unknown sex\\\" and \\\"Unknown age\\\".\",\"recommendation\":\"Using the maintenance app, assign the missing category options to an appropriate category option group within the affected category option group set.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSI\"},{\"name\":\"maps_not_viewed_one_year\",\"displayName\":\"Maps which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Maps which have not been viewed in the past 12 months\",\"introduction\":\"Maps should be regularly viewed in the system. In many cases, users may create maps for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system and being difficult to find in the Maps app.\",\"recommendation\":\"Unused maps can be removed directly using the Maps app by a user with sufficient authority. If maps are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"maps\",\"isSlow\":false,\"code\":\"MNVOY\"},{\"name\":\"indicators_exact_duplicates\",\"displayName\":\"Indicators with the same formula.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same formula.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check shows indicators which have the exact same formulas. Spaces which are present are removed prior to comparison.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Consider deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IED\"},{\"name\":\"indicators_violating_exclusive_group_sets\",\"displayName\":\"Indicators with conflicting exclusive group sets\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that are members of multiple exclusive indicator groups\",\"recommendation\":\"Remove the indicator from all but one exclusive indicator group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IVEGS\"},{\"name\":\"category_options_excess_groupset_membership\",\"displayName\":\"Category options which belong to multiple groups in a category option group set.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category options which belong to multiple groups in a category option group set.\",\"introduction\":\"Category options should belong to exactly one category option group which are part of a category option group set. If the category option belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the category option in the details list to exactly one category option group within each group set.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"COEGM\"},{\"name\":\"periods_duplicates\",\"displayName\":\"Duplicate Periods\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Lists all periods duplicates which have identical type and start date\",\"recommendation\":\"Make sure all database references are moved to one of the duplicates before deleting the unused duplicates\",\"isSlow\":false,\"code\":\"PD\"},{\"name\":\"program_rules_without_action\",\"displayName\":\"Program rules lacking an action\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that are not connected to any program rule action\",\"recommendation\":\"Connect the rule to an action or consider removing the rule\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWA\"},{\"name\":\"orgunits_multiple_roots\",\"displayName\":\"The organisation unit hierarchy should have a single root.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"The organisation unit hierarchy should have a single root.\",\"introduction\":\"Every DHIS2 system should have a single root organisation unit. This means a single organisation unit from which all other branches of the hierarchy are descendants.\",\"recommendation\":\"Once you have decided which organisation unit should be the real root of the organisation unit hierarchy, you should update the parent organisation unit. This can be done by using the DHIS2 API or my updating the value directly in the `organisationunit` table.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMR\"},{\"name\":\"validation_rules_with_invalid_left_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a left side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWILSE\"},{\"name\":\"program_rule_actions_without_stage_id\",\"displayName\":\"Program rules with actions lacking a program stage\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a program stage but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWSI\"},{\"name\":\"indicator_groups_scarce\",\"displayName\":\"Indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups should have at least two members.\",\"introduction\":\"All indicator groups should be composed of at least two indicators.\",\"recommendation\":\"Considering removing groups with zero or one groups, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"indicatorGroups\",\"isSlow\":false,\"code\":\"IGS\"},{\"name\":\"option_sets_wrong_sort_order\",\"displayName\":\"Option sets with possibly wrong sort order.\",\"section\":\"Option sets\",\"severity\":\"SEVERE\",\"description\":\"Option sets with possibly wrong sort order.\",\"introduction\":\"Option sets contain options which should be ordered sequentially. The sort_order property should always start with 1 and have a sequential sequence. If there are three options in the option set, then the sort order should be 1,2,3. \\nIn certain circumstances, options may be deleted from an option set, and the sort order may become corrupted. This may lead to a situation where it becomes impossible to update the option set from the maintenance app, and may lead to problems when attempting to using the option set in the data entry app.\",\"recommendation\":\"If it is possible to open the option set in the maintenance app, you can resort the option set, which should correct the problem. Another possible solution is to directly update the sort_order property of in the `optionset` table in the database, ensuring that a valid sequence is present for all options in the option set.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSWSO\"},{\"name\":\"periods_same_start_end_date\",\"displayName\":\"Periods with the same start and end dates\",\"section\":\"Periods\",\"severity\":\"CRITICAL\",\"description\":\"Periods with the same start and end dates\",\"introduction\":\"Different periods should not have exactly the same start and end date.\",\"recommendation\":\"All references to the duplicate periods should be removed from the system and reassigned. It is recommended to use the period with the lower periodid.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PSSED\"},{\"name\":\"program_indicators_with_invalid_expressions\",\"displayName\":\"Program indicators with invalid expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have an invalid expression\",\"recommendation\":\"Check that the expression evaluates to a number\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIE\"},{\"name\":\"program_rule_actions_without_notification\",\"displayName\":\"Program rule with actions lacking a notification template\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires a notification template but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWN\"},{\"name\":\"indicator_no_analysis\",\"displayName\":\"Indicators not used in analytical objects.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not used in analytical objects.\",\"introduction\":\"Indicators should be used to produce some type of analytical output (charts, maps, pivot tables). Note: indicators used in datasets to provide feedback during data entry are not counted as being used in analytical objects.\",\"recommendation\":\"Indicators that are not routinely being used for analysis should be reviewed to determine if they are useful and needed. If these are meant to be used for routine review, then associated outputs should be created using them. If these indicators are not going to be used for any type of information review, and are not used in data sets for feedback during data entry, consideration should be made to delete them.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"INA\"},{\"name\":\"user_groups_scarce\",\"displayName\":\"User groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"User groups should have at least two members.\",\"introduction\":\"Generally, user groups should contain two or more users.\",\"recommendation\":\"Considering removing user groups with less than two users, or alternatively, add additional users to the group to make it more useful.\",\"issuesIdType\":\"userGroups\",\"isSlow\":false,\"code\":\"UGS\"},{\"name\":\"data_elements_aggregate_with_different_period_types\",\"displayName\":\"Aggregate data elements which belong to datasets with different period types.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"SEVERE\",\"description\":\"Aggregate data elements which belong to datasets with different period types.\",\"introduction\":\"Data elements should not belong to datasets with different period types.\",\"recommendation\":\"If you need to collect data with different period types (e.g. weekly and monthly) you should use different data elements for each period type. In general, it is not recommended to collect data with different frequencies, since in general, data collected at higher frequencies (e.g. weekly) can be aggregated to data with lower frequencies (e.g yearly).\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAWDPT\"},{\"name\":\"validation_rules_without_groups\",\"displayName\":\"Validation rules lacking groups\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that are not member of at least one validation rule group\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWG\"},{\"name\":\"category_option_combos_disjoint\",\"displayName\":\"Category option combinations with disjoint associations.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with disjoint associations.\",\"introduction\":\"Under certain circumstances, category option combinations may exist in the system, but not have any direct association with category options which are associated with their category combination. This situation usually occurs when category options have been added to a category and then the category is added to a category combination. New category option combinations are created in the system at this point. If any of the category options are then removed in one of the underlying categories, a so-called disjoint category option combination may result. This is a category option combination which has no direct association with any category options in any of the categories associated with the category combination.\",\"recommendation\":\"The disjoint category option combinations should be removed from the system if possible. However, if any data is associated with the category option combination, a determination will need to be made in regards of how to deal with this data.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"COCD\"},{\"name\":\"options_sets_unused\",\"displayName\":\"Option sets which are not used\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Option sets which are not used\",\"introduction\":\"Option sets should be used for some purpose. The may be used by data elements, comments, attributes, or tracked entity attributes.\",\"recommendation\":\"Consider deleting unused option sets, or alternatively, ensure that they have been properly assigned.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSU\"},{\"name\":\"catoptioncombos_no_catcombo\",\"displayName\":\"Category options combinations with no category combination.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options combinations with no category combination.\",\"introduction\":\"All category option combinations should be associated with a category combo. In certain cases, when category combinations are deleted,the linkage between a category option combination and a category combination may become corrupted.\",\"recommendation\":\"Check if any data is associated with the category option combination in question. Likely, the data should either be deleted or migrated to a valid category option combination. Any data which is associated with any of these category option combinations will not be available through either the data entry modules or any of the analytical apps.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CNC\"},{\"name\":\"data_elements_violating_exclusive_group_sets\",\"displayName\":\"Data elements with conflicting exclusive group sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are a members of more than one exclusive data element set belonging to the same data element group set\",\"recommendation\":\"Either remove the data element from all but one exclusive group set or consider if the set really should be an exclusive group set\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEVEGS\"},{\"name\":\"categories_same_category_options\",\"displayName\":\"Categories with the same category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with the same category options\",\"introduction\":\"Categories with the exact same category options should be considered to be merged. Categories with the exact same category options may be easily confused by users in analysis. The details view will provide a list of categories which have the exact same category options. For each duplicated category a number in parentheses such as (1) will indicate which categories belong to duplicated groups.\",\"recommendation\":\"If category combinations have already been created with duplicative categories,\\nit is recommended that you do not take any action, but rather ensure\\nthat users understand that there may be two category combinations which are duplicative.\\n\\nIf you choose to merge the duplicative category combinations, you would need to \\nremap all category option combinations from the category combo which you wish to \\nremove, to the one which you wish to keep. \\n\\nIf one of the categories is not in use in any category combination, it should\\nconsider to be removed from the system.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CSCO\"},{\"name\":\"visualizations_not_viewed_one_year\",\"displayName\":\"Visualizations which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Visualizations which have not been viewed in the past 12 months\",\"introduction\":\"Visualizations should be regularly viewed in the system. In many cases, users may create charts for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to charts being difficult to find in the visualization app.\",\"recommendation\":\"Unused charts can be removed directly using the data visualization app by a user with sufficient authority. If charts are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"visualizations\",\"isSlow\":false,\"code\":\"VNVOY\"},{\"name\":\"categories_one_default_category_option\",\"displayName\":\"Only one default category option should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option with UID \\\"xYerKDKCefk\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option or move all references to category option \\\"xYerKDKCefk\\\" and then remove the unused conflicting category option.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CODCO\"},{\"name\":\"orgunits_multiple_spaces\",\"displayName\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"introduction\":\"Names and/or shortnames of organisation units should not contain multiple spaces. They are superfluous and may complicate the location of organisation units when they are searched.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the multiple spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMS\"},{\"name\":\"data_elements_aggregate_abandoned\",\"displayName\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"introduction\":\"Data elements are considered to be abandoned when they have not been edited in at least 100 days and do not have any data values associated with them. Often, these are the result of new or changed configurations that have been abandoned at some point.\",\"recommendation\":\"Data elements that have no data associated with them and which there are no plans to start using for data collection should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAA\"},{\"name\":\"data_elements_assigned_to_data_sets_with_different_period_types\",\"displayName\":\"Data elements assigned to data sets with different period type\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are assigned to at least one data set that has a different period type\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEATDSWDPT\"},{\"name\":\"data_elements_aggregate_no_groups\",\"displayName\":\"Aggregate data elements not in any data element groups.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not in any data element groups.\",\"introduction\":\"All data elements should be in a data element group. This allows users to find the data elements more easily in analysis\\n apps and also contributes to having more complete data element group sets.\\n Maintenance operations can also be made more efficient by applying\\n bulk settings (ex. sharing) to all data elements within a data element group.\",\"recommendation\":\"Data elements that are not in a data element group should be added to a relevant data element group. If the data elements are not needed, they should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANG\"},{\"name\":\"category_options_shared_within_category_combo\",\"displayName\":\"Category combinations with categories which share the same category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category combinations with categories which share the same category options.\",\"introduction\":\"As a general rule, category options should be reused where possible between categories. The exception to this rule however, is when you have a category combo with multiple categories, and within those categories, a category option is shared. As a simple example, lets say you have a category called \\\"Sex\\\" with options \\\"Male\\\"\\\", \\\"Female\\\" and \\\"Unknown\\\". There is also a second category called \\\"Age\\\" with options \\\"<15\\\", \\\"15+\\\", and \\\"Unknown\\\". A category combination called \\\"Age/Sex\\\" is then created with these two categories, which share the option \\\"Unknown\\\". This situation should be avoided, as it creates issues when analyzing data.\",\"recommendation\":\"The recommended approach to dealing with this situation is to create a new category combination, using two new categories. Using the example from the introduction, you should create two new category options called \\\"Unknown age\\\" and \\\"Unknown sex\\\". A new category combination can then be created with these new categories, which do not share category options. All data which is potentially associated with the old category combinations, would need to be reassigned to the new category option combinations. Any analytical objects which use the categories to be removed would also need to be updated.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"COSWCC\"},{\"name\":\"orgunits_null_island\",\"displayName\":\"Organisation units located within 100 km of Null Island (0,0).\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units located within 100 km of Null Island (0,0).\",\"introduction\":\"A common problem when importing coordinates is the inclusion of coordinates situated around the point of [Null Island](https://en.wikipedia.org/wiki/Null_Island). This is the point on the Earth's surface where the Prime Meridian and Equator intersect with a latitude of 0 and a longitude of 0. The point also happens to be situated currently in the middle of the ocean. This query identifies any points located within 100 km of the point having latitude and longitude equal to zero.\",\"recommendation\":\"Update the coordinates of the affected organization unit to the correct location.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONI\"},{\"name\":\"program_rule_actions_without_section\",\"displayName\":\"Program rules with actions lacking a program stage section\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a section but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWS\"},{\"name\":\"periods_3y_future\",\"displayName\":\"Periods which are more than three years in the future.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are more than three years in the future.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\nfar future. Different data entry clients may not properly validate for periods\\nwhich are in the future, and thus any periods in the future should be reviewed.\\nIn some cases, data may be valid for future dates, e.g. targets which are set for the\\nnext fiscal year.\",\"recommendation\":\"If any periods exist in the system in the future, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\\n\\nIn many cases, clients may mean to transmit\\ndata for January 2021, but due to data entry errors, January 2031 is selected. Thus,\\nany data in the far future should be investigated to ensure it does not result\\nfrom data entry errors.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"P3F\"},{\"name\":\"orgunits_trailing_spaces\",\"displayName\":\"Organisation units should not have trailing spaces.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have trailing spaces.\",\"introduction\":\"Trailing spaces in organisation units are superfluous.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the trailing spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OTS\"},{\"name\":\"validation_rule_groups_scarce\",\"displayName\":\"Validation rule should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Validation rule should have at least two members.\",\"introduction\":\"Generally validation rule groups should be composed of multiple validation rules.\",\"recommendation\":\"Considering removing groups which are empty or which have a single member. Alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"validationRuleGroups\",\"isSlow\":false,\"code\":\"VRGS\"},{\"name\":\"indicators_with_invalid_numerator\",\"displayName\":\"Indicators with invalid numerator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators where the numerator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWIN\"},{\"name\":\"categories_one_default_category_combo\",\"displayName\":\"Only one default category combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category combo should exist\",\"introduction\":\"There should only exist one category combo with name and code \\\"default\\\".\",\"recommendation\":\"Only the category combo with UID \\\"bjDvmb4bfuf\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category combo or move all references to category combo \\\"bjDvmb4bfuf\\\" and then remove the unused conflicting category combo.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CODCC\"},{\"name\":\"data_elements_without_data_sets\",\"displayName\":\"Data elements lacking data Sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data sets\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWDS\"},{\"name\":\"category_combos_unused\",\"displayName\":\"Category combinations not used by other metadata objects\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category combinations not used by other metadata objects\",\"introduction\":\"Category combinations which are unused in any datasets, data elements, programs or data approval workflows may be safe to delete. In some cases, category combinations may be created, but never actually used for anything. This may lead to situations where users and implementers are confused about which category combination should actually be used. In general, it should be safe to delete unused category combinations, except in situations where existing data has been associated with them.\",\"recommendation\":\"Check to see if any data is associated with the category combination before attempting to delete it. Category combinations which are not currently used in any metadata objects may still be valid for legacy reasons, but they should be reviewed to be sure they are still needed. Otherwise, it should be safe to remove them from the system.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCU\"},{\"name\":\"category_option_groups_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option groups should be composed of at least two category options. There can however be legitimate cases when a single category option is part of a group, especially in cases where there is a direct mapping between age bands and category options.\",\"recommendation\":\"Considering removing groups with zero or one category options, or alternatively, add additional category options to the group to make it more useful.\",\"issuesIdType\":\"categoryOptionGroups\",\"isSlow\":false,\"code\":\"COGS\"},{\"name\":\"datasets_empty\",\"displayName\":\"Datasets with no data elements.\",\"section\":\"Data sets\",\"severity\":\"WARNING\",\"description\":\"Datasets with no data elements.\",\"introduction\":\"All datasets should have data elements assigned to them.\",\"recommendation\":\"Remove empty datasets, or alternatively, assign data elements to them.\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DE\"},{\"name\":\"indicators_without_groups\",\"displayName\":\"Indicators lacking groups\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that do not have at least one group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWG\"},{\"name\":\"orgunit_groups_scarce\",\"displayName\":\"Organisation unit groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Organisation unit groups should have at least two members.\",\"introduction\":\"Generally, organisation unit groups should be composed of multiple organisation units.\",\"recommendation\":\"Considering removing groups with zero or one organisation units, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OGS\"},{\"name\":\"program_rules_without_priority\",\"displayName\":\"Program rules lacking a priority setting\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules with action type \\\"assign\\\" where the rule priority is not yet set\",\"recommendation\":\"Set a priority for the program rule(s)\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWP\"},{\"name\":\"categories_unique_category_combo\",\"displayName\":\"Different category combinations should not have the exact same combination of categories.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Different category combinations should not have the exact same combination of categories.\",\"introduction\":\"Category combinations should be a unique combination of categories. If two or more category combinations contain the exact same set of categories, this would be considered to be duplicative and potentially confusing to users.\",\"recommendation\":\"One category combo is kept, all references are updated to use this combo and other combos are removed.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CUCC\"},{\"name\":\"indicator_group_sets_scarce\",\"displayName\":\"Indicator groups sets should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups sets should have at least two members.\",\"introduction\":\"All indicator group set should be composed of at least two indicators groups.\",\"recommendation\":\"Considering removing indicator group sets with less than two indicator groups, or alternatively, add additional indicator groups to the indicator group set to make it more useful.\",\"issuesIdType\":\"indicatorGroupSets\",\"isSlow\":false,\"code\":\"IGSS\"},{\"name\":\"validation_rules_with_invalid_right_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a right side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWIRSE\"},{\"name\":\"data_elements_aggregate_aggregation_operator\",\"displayName\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"introduction\":\"Data elements which are not numeric (text, dates, etc) should have an aggregation operator set to NONE. Data elements which are able to be aggregated (numbers, integers, etc) should have an aggregation operator set to something other than NONE, most often SUM.\",\"recommendation\":\"Open the affected data elements in the Maintenance App and change their aggregation type to an appropriate type. Alternatively, these can be altered via the API.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAAO\"},{\"name\":\"org_unit_groups_without_group_sets\",\"displayName\":\"Organisation unit groups lacking group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation unit groups that aren't member of at least one organisation unit group set\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OUGWGS\"},{\"name\":\"program_rule_variables_without_attribute\",\"displayName\":\"Program rule variables lacking an attribute\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring an attribute source but that is not yet linked to an attribute\",\"recommendation\":\"Assign an attribute to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWA\"},{\"name\":\"program_indicator_groups_scarce\",\"displayName\":\"Program indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Program indicator groups should have at least two members.\",\"introduction\":\"Program indicator groups should generally be composed of two or more program indicators.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"programIndicatorGroups\",\"isSlow\":false,\"code\":\"PIGS\"},{\"name\":\"program_rules_no_expression\",\"displayName\":\"Program rules with no expression.\",\"section\":\"Program rules\",\"severity\":\"WARNING\",\"description\":\"Program rules with no expression.\",\"introduction\":\"All program rules should have an expression. Expressions are used by program rules to determine when they should be triggered. Program rules with no expression have no purpose.\",\"recommendation\":\"Using the DHIS2 user interface, assign an expression to each of the program rules which is missing one. Otherwise, if it is safe to delete the program rule with no expression, it is recommended to remove it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNE\"},{\"name\":\"data_elements_aggregate_no_data\",\"displayName\":\"Aggregate data elements with NO data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements with NO data values.\",\"introduction\":\"Data elements should generally always be associated with data values. If data elements exist in a data set which is active, but there are no data values associated with them, they may not be part of the data entry screens. Alternatively, the data element may have been added but never been associated with a dataset.\",\"recommendation\":\"Consider removing data elements with no data values.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAND\"},{\"name\":\"program_indicators_without_expression\",\"displayName\":\"Program indicators lacking an expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have no expression set yet\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWE\"},{\"name\":\"periods_distant_past\",\"displayName\":\"Periods which are in the distant past.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are in the distant past.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\ndistant past. Different data entry clients may not properly validate for periods\\nwhich are in the distant past, and thus these periods should be triaged to ensure\\nthat data has not been entered against them by mistake.\",\"recommendation\":\"If any periods exist in the system in the distant past, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PDP\"},{\"name\":\"org_units_being_orphaned\",\"displayName\":\"Orphaned organisation units\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that aren't level 1 units but that lack a parent so that they are not connected to the rest of the organisation tree\",\"recommendation\":\"Find (or create) and set the correct parent for the orphaned organisation unit(s). Eventually this is also caused by having set the wrong level.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUBO\"},{\"name\":\"cocs_wrong_cardinality\",\"displayName\":\"Category option combinations with incorrect cardinality.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with incorrect cardinality.\",\"introduction\":\"All category option combinations should have exactly the same number of category option associations as the number of categories in the category combination. If there are two categories in a category combination, then every category option combination should have exactly two category options.\\nCategory option combinations with the incorrect cardinality are usually the result of a category combination having been created, and then modified later. Suppose that two categories are used to create a category combination. Each category option combination of this category combo will have two category options. If an additional category is added to the category combination later, new category option combinations with three category options will be created and associated with this category combo. The original category option combinations would be considered to be invalid.\",\"recommendation\":\"Category option combinations which have an incorrect cardinality will be ignored by the DHIS2 analytics system and should be removed.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CWC\"},{\"name\":\"dashboards_not_viewed_one_year\",\"displayName\":\"Dashboards which have not been actively viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Dashboards which have not been actively viewed in the past 12 months\",\"introduction\":\"Dashboards should be regularly viewed in the system. In many cases, users may create dashboards for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to useful dashboards being difficult to find. This check identifies any dashboards which have not been viewed in the past year.\",\"recommendation\":\"Unused dashboards can be deleted in the entirety from the main dashboard app by clicking on the \\\"Edit\\\" button and choosing \\\"Delete\\\". Note that this process cannot be undone! Another option would be to alter the sharing of the dashboard so that it is not visible to any user.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNVOY\"}]", - "responseSize": 66022, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - } -] diff --git a/cypress/fixtures/network/40/users_should_be_able_to_edit_jobs_without_parameters.json b/cypress/fixtures/network/40/users_should_be_able_to_edit_jobs_without_parameters.json deleted file mode 100644 index 8b32eae5b..000000000 --- a/cypress/fixtures/network/40/users_should_be_able_to_edit_jobs_without_parameters.json +++ /dev/null @@ -1,271 +0,0 @@ -[ - { - "path": "/api/40/systemSettings/helpPageLink", - "featureName": "Users should be able to edit jobs without parameters", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"helpPageLink\":\"https://dhis2.github.io/dhis2-docs/master/en/user/html/dhis2_user_manual_en.html\"}", - "responseSize": 99, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/analytics/tableTypes", - "featureName": "Users should be able to edit jobs without parameters", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"]", - "responseSize": 122, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations/jobTypes?fields=*&paging=false", - "featureName": "Users should be able to edit jobs without parameters", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"jobTypes\":[{\"name\":\"Data integrity\",\"jobType\":\"DATA_INTEGRITY\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"checks\",\"fieldName\":\"Checks\",\"persisted\":false,\"collectionName\":\"checks\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/dataIntegrity\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.parameters.DataIntegrityJobParameters$DataIntegrityReportType\",\"name\":\"type\",\"fieldName\":\"Type\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"REPORT\",\"SUMMARY\",\"DETAILS\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Resource table\",\"jobType\":\"RESOURCE_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Analytics table\",\"jobType\":\"ANALYTICS_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"skipPrograms\",\"fieldName\":\"Skip programs\",\"persisted\":false,\"collectionName\":\"skipPrograms\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/programs\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipResourceTables\",\"fieldName\":\"Skip resource tables\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Continuous analytics table\",\"jobType\":\"CONTINUOUS_ANALYTICS_TABLE\",\"schedulingType\":\"FIXED_DELAY\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"fullUpdateHourOfDay\",\"fieldName\":\"Full update hour of day\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Data sync\",\"jobType\":\"DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker programs data sync\",\"jobType\":\"TRACKER_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Event programs data sync\",\"jobType\":\"EVENT_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Meta data sync\",\"jobType\":\"META_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"trackerProgramPageSize\",\"fieldName\":\"Tracker program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"eventProgramPageSize\",\"fieldName\":\"Event program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"dataValuesPageSize\",\"fieldName\":\"Data values page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Aggregate data exchange\",\"jobType\":\"AGGREGATE_DATA_EXCHANGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"dataExchangeIds\",\"fieldName\":\"Data exchange ids\",\"persisted\":false,\"collectionName\":\"dataExchangeIds\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/aggregateDataExchanges\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Send scheduled message\",\"jobType\":\"SEND_SCHEDULED_MESSAGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Program notifications\",\"jobType\":\"PROGRAM_NOTIFICATIONS\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Monitoring\",\"jobType\":\"MONITORING\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"validationRuleGroups\",\"fieldName\":\"Validation rule groups\",\"persisted\":false,\"collectionName\":\"validationRuleGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/validationRuleGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"sendNotifications\",\"fieldName\":\"Send notifications\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"persistResults\",\"fieldName\":\"Persist results\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Push analysis\",\"jobType\":\"PUSH_ANALYSIS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"pushAnalysis\",\"fieldName\":\"Push analysis\",\"persisted\":false,\"collectionName\":\"pushAnalysis\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/pushAnalysis\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker search optimization\",\"jobType\":\"TRACKER_SEARCH_OPTIMIZATION\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"attributes\",\"fieldName\":\"Attributes\",\"persisted\":false,\"collectionName\":\"attributes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/trackedEntityAttributes/indexable\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipIndexDeletion\",\"fieldName\":\"Skip index deletion\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Predictor\",\"jobType\":\"PREDICTOR\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictors\",\"fieldName\":\"Predictors\",\"persisted\":false,\"collectionName\":\"predictors\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictors\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictorGroups\",\"fieldName\":\"Predictor groups\",\"persisted\":false,\"collectionName\":\"predictorGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictorGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Disable inactive users\",\"jobType\":\"DISABLE_INACTIVE_USERS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"inactiveMonths\",\"fieldName\":\"Inactive months\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"reminderDaysBefore\",\"fieldName\":\"Reminder days before\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Test\",\"jobType\":\"TEST\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Long\",\"name\":\"waitMillis\",\"fieldName\":\"Wait millis\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"stages\",\"fieldName\":\"Stages\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtStage\",\"fieldName\":\"Fail at stage\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"items\",\"fieldName\":\"Items\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtItem\",\"fieldName\":\"Fail at item\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Long\",\"name\":\"itemDuration\",\"fieldName\":\"Item duration\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.String\",\"name\":\"failWithMessage\",\"fieldName\":\"Fail with message\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"failWithException\",\"fieldName\":\"Fail with exception\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.JobProgress$FailurePolicy\",\"name\":\"failWithPolicy\",\"fieldName\":\"Fail with policy\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"PARENT\",\"FAIL\",\"SKIP_STAGE\",\"SKIP_ITEM\",\"SKIP_ITEM_OUTLIER\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"runStagesParallel\",\"fieldName\":\"Run stages parallel\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]}]}", - "responseSize": 24994, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/validationRuleGroups?paging=false", - "featureName": "Users should be able to edit jobs without parameters", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"validationRuleGroups\":[{\"displayName\":\"ANC\",\"id\":\"UP1lctvalPn\"},{\"displayName\":\"Commodities\",\"id\":\"xcpl667ccfF\"},{\"displayName\":\"Critical event\",\"id\":\"xWtt9c443Lt\"},{\"displayName\":\"District stock\",\"id\":\"mEtdbIDDhix\"},{\"displayName\":\"Epidemic disease outbreak\",\"id\":\"y2yQIm79VTW\"},{\"displayName\":\"Facility Stock\",\"id\":\"SqyI8HKqI4g\"},{\"displayName\":\"Immunisation\",\"id\":\"UiOSY1iIdub\"},{\"displayName\":\"Infectious disease outbreak\",\"id\":\"WUZXEFdn1PX\"},{\"displayName\":\"Malaria\",\"id\":\"zlaSof6qLqF\"},{\"displayName\":\"Population\",\"id\":\"D3bItmtBpsW\"},{\"displayName\":\"TB\",\"id\":\"IMF6p1MqoHl\"},{\"displayName\":\"Testing\",\"id\":\"nMDkAJXsmlR\"}]}", - "responseSize": 628, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictors?paging=false", - "featureName": "Users should be able to edit jobs without parameters", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictors\":[{\"displayName\":\"Malaria Outbreak Threshold\",\"id\":\"tEK1OEqS4O1\"}]}", - "responseSize": 80, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/pushAnalysis?paging=false", - "featureName": "Users should be able to edit jobs without parameters", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"pushAnalysis\":[{\"displayName\":\"Immunization Key Indicators Monthly Report\",\"id\":\"jtcMAKhWwnc\"}]}", - "responseSize": 98, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictorGroups?paging=false", - "featureName": "Users should be able to edit jobs without parameters", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictorGroups\":[]}", - "responseSize": 22, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/dataIntegrity", - "featureName": "Users should be able to edit jobs without parameters", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[{\"name\":\"orgunits_invalid_geometry\",\"displayName\":\"Organisation units with invalid geometry.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with invalid geometry.\",\"introduction\":\"DHIS2 uses the PostGIS database extension to manage the geographical information associated\\nwith organisation units. There are various reasons why geometries may be considered to be\\ninvalid including self-inclusions, self-intersections, and sliver polygons. Please see the\\nPostGIS documentation for a more in-depth discussion on this topic.\\n\\nInvalid geometry is not always a problem and may be able to be ignored, however, it has been observed in certain systems\\nthat this can lead to problems in analytics. If you are experiencing issues when generating analytics\\ntables, and see errors related to invalid geometries, you will need to either remove the invalid geometry,\\nor fix it.\",\"recommendation\":\"Update the geometry of the affected organisation units to a valid geometry. It may be possible to use the PostGIS function `ST_MakeValid` to automatically fix the problem. However, in other cases the geometry may need to be edited in a GIS tool, and then updated again in DHIS2.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OIG\"},{\"name\":\"data_elements_without_groups\",\"displayName\":\"Data elements lacking groups\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data element groups\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWG\"},{\"name\":\"orgunit_group_sets_excess_groups\",\"displayName\":\"Organisation units which belong to multiple groups in a group set.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which belong to multiple groups in a group set.\",\"introduction\":\"Organisation units should belong to exactly one group within each organisation unit group set of which they are a member. If the organisation unit belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the organisation units in the details list to exactly one group within each group set membership.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OGSEG\"},{\"name\":\"validation_rules_missing_value_strategy_null\",\"displayName\":\"All validation rule expressions should have a missing value strategy.\",\"section\":\"Validation rules\",\"severity\":\"SEVERE\",\"description\":\"All validation rule expressions should have a missing value strategy.\",\"introduction\":\"Validation rules are composed of a left and right side expression. In certain systems the missing value strategy may not be defined. This may lead to an exception during validation rule analysis. The affected validation rules should be corrected to with an appropriate missing value strategy.\",\"recommendation\":\"Using the results of the the details SQL view, identify the affected validation rules and which side of the rule the missing value strategy has not been specified. Using the maintenance app, make the appropriate corrections and save the rule.\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRMVSN\"},{\"name\":\"category_combos_being_invalid\",\"displayName\":\"Invalid Category-combos\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Lists all category-combos that are invalid\",\"recommendation\":\"Make sure the category combo is assigned to at least one category and that all categories have category options \",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCBI\"},{\"name\":\"data_elements_in_data_set_not_in_form\",\"displayName\":\"Data sets with data elements not in data entry form\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that have data elements which are neither a member of the set's data entry form nor a member of the sets section\",\"recommendation\":\"Either remove the data elements in question or make them a member of the set's form or section\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DEIDSNIF\"},{\"name\":\"categories_no_options\",\"displayName\":\"Categories with no category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with no category options\",\"introduction\":\"Categories should always have at least one category option.\",\"recommendation\":\"Any categories without category options should either be removed from the system if they are not in use. Otherwise, appropriate category options should be added to the category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CNO\"},{\"name\":\"data_elements_aggregate_no_analysis\",\"displayName\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"introduction\":\"All aggregate data elements that are captured in DHIS2 should be used to produce some type of analysis output (charts, maps, tables). This can be by using them directly in an output, or by having them contribute to an indicator calculation that is used an output.\",\"recommendation\":\"Data elements that are not routinely being reviewed in analysis, either directly or indirectly through indicators, should be reviewed to determine if they still need to be collected. If these are meant to be used in routine review, then associated outputs should be created using them. If these data elements are not going to be used for any type of information review, consideration should be made to either archive them or delete them.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANA\"},{\"name\":\"indicators_duplicated_terms\",\"displayName\":\"Indicators with the same terms.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same terms.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check attempts to identify indicators with the same formulas, regardless of the order of their their terms. Suppose you have an indicator which calculates total ANC attendance: ANC Total = ANC1 + ANC2 + ANC3 Suppose then another indicator exists in the system, which has been defined as: ANC Totals = ANC3 + ANC2 + ANC1 These two indicators are equivalent, and will produce the same result, and are thus considered to be duplicated.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Considered deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IDT\"},{\"name\":\"program_rules_no_action\",\"displayName\":\"Program rules with no action.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules with no action.\",\"introduction\":\"All program rules should have an action.\",\"recommendation\":\"Using the DHIS2 user interface, assign an action to each of the program rules which is missing one. Alternatively, if the program rule is not in use, then consider removing it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNA\"},{\"name\":\"orgunits_compulsory_group_count\",\"displayName\":\"Organisation units that are not in all compulsory orgunit group sets\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Orgunits that are not in all compulsory orgunit group sets\",\"introduction\":\"If any organisation unit groups have been marked as compulsory, each and every organisation unit should belong to exactly one group within each compulsory organisation unit group set. Assume we have created a group set called \\\"Ownership\\\" with two groups \\\"Public\\\" and \\\"Private\\\". Each and every organisation unit contained in the hierarchy must belong to either Public or Private (but not both). When organisation unit are not part of a group set, results in the analytics apps will not be correct if the organisation unit group set is used for aggregation.\",\"recommendation\":\"For each of the organisation units identified in the details query, you should assign the appropriate organisation unit group within the group set. Alternatively, if the group set should not be compulsory, you should change this attribute.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OCGC\"},{\"name\":\"orgunits_no_coordinates\",\"displayName\":\"Organisation units with no coordinates.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with no coordinates.\",\"introduction\":\"Ideally, all organisation units contained in the DHIS2 hierarchy should have a valid\\nset of coordinates. Usually for all organisation units above the facility level,\\nthese coordinates should be a polygon which provides the boundary of the organisation\\nunit. For facilities, these are usually represented as point coordinates.\\n\\nThere can obviously be exceptions to this rule. Mobile health facilities may not have\\na fixed location. Community health workers or wards below the facility level\\nmay also not have a defined or definable coordinate.\\n\\nThis check is intended to allow you to review all organisation units which do\\nnot have any coordinates and make a determination as to whether they should be updated.\",\"recommendation\":\"Where appropriate, update the geometry of each organisation unit with a valid geometry.\\nYou may need to contact the appropriate local government office to obtain a copy\\nof district boundaries, commonly referred to as \\\"shape files\\\". Another possibility\\nis to use freely available boundary files from GADM (https://gadm.org)\\n\\nIf facilities are missing coordinates, it may be possible to obtain these from\\nthe facility staff using their smart phone to get the coordinates. Images\\nfrom Google Maps can also often be used to estimate the position of a facility,\\nassuming that you have good enough resolution and local knowledge of where\\nit is located.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONC\"},{\"name\":\"data_sets_not_assigned_to_org_units\",\"displayName\":\"Data sets not assigned to organisation units\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that are not assigned to any organisation units\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DSNATOU\"},{\"name\":\"dashboards_no_items\",\"displayName\":\"Dashboards with no items.\",\"section\":\"Dashboards\",\"severity\":\"INFO\",\"description\":\"Dashboards with no items.\",\"introduction\":\"All dashboards should have content on them. Dashboards without any content do not serve any purpose, and can make it more difficult to find relevant dashboards with content.\",\"recommendation\":\"Dashboards without content that have not been modified in the last 14 days should be considered for deletion.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNI\"},{\"name\":\"orgunits_same_name_and_parent\",\"displayName\":\"Organisation units should not have the same name and parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have the same name and parent.\",\"introduction\":\"Organisation units may have exactly the same name. This may become confusing to users, particularly if the organisation unit has the same name and same parent. This can easily lead to data entry or analysis mistakes as users have no way to distinguish between the two organisation units.\",\"recommendation\":\"Rename identically named organisation units which share the same parent using the maintenance app.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OSNAP\"},{\"name\":\"indicators_not_grouped\",\"displayName\":\"Indicators not in any groups.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not in any groups.\",\"introduction\":\"All indicators should be in an indicator group. This allows users to find the indicators more easily in analysis apps and also contributes to having more complete indicators group sets. Maintenance operations can also be made more efficient by applying bulk settings (ex. sharing, filtering) to all indicators within an indicator group.\",\"recommendation\":\"Indicators that are not in a indicator group should be added to a relevant indicator group. If the indicators are not needed, they should be deleted.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"ING\"},{\"name\":\"category_option_group_sets_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option group sets should be composed of at least two category option groups.\",\"recommendation\":\"Considering removing groups with zero or one category option groups, or alternatively, add additional category option groups to the group set to make it more useful.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSS\"},{\"name\":\"org_units_without_groups\",\"displayName\":\"Organisation units lacking groups\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are not connected to at least one group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWG\"},{\"name\":\"data_elements_excess_groupset_membership\",\"displayName\":\"Data elements which belong to multiple groups in a group set.\",\"section\":\"data_elements\",\"severity\":\"SEVERE\",\"description\":\"Data elements which belong to multiple groups in a group set.\",\"introduction\":\"Data elements should belong to exactly one group within each data element group set of which they are a member. If the data element belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the data elements in the details list to exactly one data element group within each group set.\",\"issuesIdType\":\"data_elements_aggregate\",\"isSlow\":false,\"code\":\"DEEGM\"},{\"name\":\"data_element_groups_scarce\",\"displayName\":\"Data element groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Data element groups should have at least two members.\",\"introduction\":\"All data element groups should be composed of at least two data elements.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"dataElementGroups\",\"isSlow\":false,\"code\":\"DEGS\"},{\"name\":\"orgunits_not_contained_by_parent\",\"displayName\":\"Organisation units with point coordinates should be contained by their parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with point coordinates should be contained by their parent.\",\"introduction\":\"Facilities are often represented as points in the DHIS2 hierarchy. Their parent organisation units geometry should contain all facilities which have been associated with them.\",\"recommendation\":\"Often boundary files are simplified when they are uploaded into DHIS2. This process may result in\\nfacilities which are located close to the border of a given district to fall outside of the district\\nwhen the boundary is simplified. This is considered to be more of a cosmetic problem for most DHIS2\\ninstallations, but could become an issue if any geospatial analysis is attempted using the\\nboundaries and point coordinates.\\n\\nIn cases where the facility falls outside of its parent's boundary\\nyou should confirm that the coordinates are correct. If the location is close to the boundary, you\\nmay want to reconsider how the boundary files have been simplified. Otherwise, if the location of\\nthe facility is completely incorrect, it should be rectified.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONCBP\"},{\"name\":\"program_rules_message_no_template\",\"displayName\":\"Program rules actions which should send or schedule a message without a message template.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules actions which should send or schedule a message without a message template.\",\"introduction\":\"Program rule actions of type \\\"Send message\\\" or \\\"Schedule message\\\" should have an associated message template.\",\"recommendation\":\"Using the DHIS2 user interface, assign a message template to each of the program rule actions which send or schedule messages but which does not have an association with a message template.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRMNT\"},{\"name\":\"indicators_with_invalid_denominator\",\"displayName\":\"Indicators with invalid denominator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"List all indicators where the denominator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWID\"},{\"name\":\"indicator_types_duplicated\",\"displayName\":\"Indicator types with the same factor.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicator types with the same factor.\",\"introduction\":\"Indicators can be assigned a factor which is multiplied by the indicator's value. For example, if you create a percentage based indicator, you can assign the indicator a factor of 100, which would be multiplied by the actual value of the indicator calculated by DHIS2. In general, having multiple indicator types with the same factor is not recommended. It is duplicative, and may lead to confusion.\",\"recommendation\":\"Duplicated indicator types should consider to be removed from the system. Consider choosing one of the duplicated indicator types as the one to keep, and then update all indicators which share the same factor to this indicator type. The duplicated indicator types can then be removed from the system.\",\"issuesIdType\":\"indicatorTypes\",\"isSlow\":false,\"code\":\"ITD\"},{\"name\":\"options_sets_empty\",\"displayName\":\"Empty option sets\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Empty option sets\",\"introduction\":\"All option sets should generally include at least two items. Empty option sets serve no purpose.\",\"recommendation\":\"Options should either be added to the option set, or the option set should be deleted.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSE\"},{\"name\":\"category_options_no_categories\",\"displayName\":\"Category options with no categories.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options with no categories.\",\"introduction\":\"All category options should belong to at least one category.\",\"recommendation\":\"Category options which are not part of any category should be removed or alternatively should be added to an appropriate category.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CONC\"},{\"name\":\"orgunits_orphaned\",\"displayName\":\"Orphaned organisation units.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"Orphaned organisation units.\",\"introduction\":\"Orphaned organisation units are those which have neither parents nor any children. This means that they have no relationship to the main organisation unit hierarchy. These may be created by faulty metadata imports or direct manipulation of the database.\",\"recommendation\":\"The orphaned organisation units should be assigned a parent or removed from the system. It is recommended to use the DHIS2 API for this task if possible. If this is not possible, then they may need to be removed through direct SQL on the DHIS2 database.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OO\"},{\"name\":\"indicators_with_identical_formulas\",\"displayName\":\"Indicators with identical formulas\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that have the identical formulas with at least one other indicator\",\"recommendation\":\"Check if the same indicator should be used everywhere and remove duplicates\",\"isSlow\":false,\"code\":\"IWIF\"},{\"name\":\"program_indicators_with_invalid_filters\",\"displayName\":\"Program indicators with invalid filter\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators with invalid filter expression\",\"recommendation\":\"Check that the expression evaluates to true/false\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIF\"},{\"name\":\"program_rules_without_condition\",\"displayName\":\"Program rules lacking a condition\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that have no condition yet\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWC\"},{\"name\":\"categories_one_default_category\",\"displayName\":\"Only one default category should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category should exist\",\"introduction\":\"There should only exist one category with name and code \\\"default\\\".\",\"recommendation\":\"Only the category with UID \\\"GLevLNI9wkl\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category or move all references to category \\\"GLevLNI9wkl\\\" and then remove the unused conflicting category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CODC\"},{\"name\":\"org_units_with_cyclic_references\",\"displayName\":\"Organisation units with cyclic references\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that have a conflicting parent hierarchy definition so that two organisation units become parent of each other or in other words they form a circular reference\",\"recommendation\":\"One of the organisation units must be setup wrongly and needs to be corrected so that a non-circular tree connects the two\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWCR\"},{\"name\":\"program_rule_variables_without_data_element\",\"displayName\":\"Program rule variables lacking a data element\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring a data element source but that is not yet linked to a data element\",\"recommendation\":\"Assign a data element to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWDE\"},{\"name\":\"org_units_violating_exclusive_group_sets\",\"displayName\":\"Organisation units with conflicting exclusive group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are members of multiple exclusive organisation unit groups\",\"recommendation\":\"Remove the organisation unit from all but one exclusive organisation unit group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUVEGS\"},{\"name\":\"program_rule_actions_without_data_object\",\"displayName\":\"Program rules with actions lacking a data object\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires either a data element or an attribute but is not connected either\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWDO\"},{\"name\":\"orgunits_openingdate_gt_closeddate\",\"displayName\":\"Organisation units which have an opening date later than the closed date.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which have an opening date later than the closed date.\",\"introduction\":\"If a closing date has been defined for an organisation unit, it should always be after the opening date (if one has been defined).\",\"recommendation\":\"Alter either the opening or closing date of all affected organisation units so that the closing date is after the opening date.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OOGC\"},{\"name\":\"categories_one_default_category_option_combo\",\"displayName\":\"Only one default category option combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option combo should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option combo with UID \\\"HllvX50cXC0\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option combo or move all references to category option combo \\\"HllvX50cXC0\\\" and then remove the unused conflicting category option combo.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CODCOC\"},{\"name\":\"category_option_group_sets_incomplete\",\"displayName\":\"Category option group sets which do not contain all category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option group sets which which do not contain all category options.\",\"introduction\":\"Category option group sets are composed of multiple category option groups, which are in turn composed of various category options. Category option group sets are often used to group related category options together for analytical purposes. Categories are also composed of category options. In general, but not always, category option group sets should contain all category options of related categories. Suppose we have the following two age categories. \\nAge coarse: <15, 15+ Age fine: <1, 1-10, 10-14,15-19,20-24,25-29,30-34,35-39,40-44,45+\\nIn many cases, related data elements may be disaggregated differently. This may be to differences in the way in which the data is collected, or as is often the case, the disaggregation has changed over time. If we wish to analyze data for two different data elements (one of which uses Age coarse and the other Age fine), we can create a category option group set consisting of two category option groups which should consist of the following category options from above. \\n<15: <15, <1, 1-10, 10-14 15+: 15+, 15-19,20-24,25-29,30-34,35-39,40-44,45+\\nSuppose that we happen to omit the category option \\\"<1\\\" from the \\\"<15\\\" category option group. This would result in potential aggregation errors in when using this category option group set in any analytical objects. The details of this metadata check would return the UID and name of the category option group set. The category and category option would also be provided. Using the previous example, we would see \\\"Age fine:{<1}\\\" in the metadata check details section, to indicate that the <1 category option which is part of the \\\"Age fine\\\" category, is missing from the category option group set.\\nThere may exist specific analytical reasons why specific category options are omitted from a category option group set. However,these should usually be special cases. This metadata check will identify cases where category option group sets appear to be incomplete, however you should carefully review any groups which appear in the details. \\nThis check may also produce a number of issues which may at first glance appear to be false positives. In some cases, category options may be added to a category by mistake. When category option group sets are created, this extraneous option may be omitted and thus appear as missing from the group set. \\nAnother observed situation is where an option like \\\"Unknown\\\" is used across unrelated categories. Suppose you have two categories \\\"Age (<15, 15+, Unknown)\\\" and \\\"Sex (Male,Female,Unknown)\\\". Similar to above, we create category option group sets like: \\n<15: <15 15+: 15+ Unknown: Unknown\\nThis metadata check will report that \\\"Male\\\" and \\\"Female\\\" are missing from the group set. This is because the same \\\"Unknown\\\" option is shared between two different, unrelated categories. It is recommended that if this situation occurs, that you create two separate \\\"Unknown\\\" category options like \\\"Unknown sex\\\" and \\\"Unknown age\\\".\",\"recommendation\":\"Using the maintenance app, assign the missing category options to an appropriate category option group within the affected category option group set.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSI\"},{\"name\":\"maps_not_viewed_one_year\",\"displayName\":\"Maps which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Maps which have not been viewed in the past 12 months\",\"introduction\":\"Maps should be regularly viewed in the system. In many cases, users may create maps for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system and being difficult to find in the Maps app.\",\"recommendation\":\"Unused maps can be removed directly using the Maps app by a user with sufficient authority. If maps are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"maps\",\"isSlow\":false,\"code\":\"MNVOY\"},{\"name\":\"indicators_exact_duplicates\",\"displayName\":\"Indicators with the same formula.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same formula.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check shows indicators which have the exact same formulas. Spaces which are present are removed prior to comparison.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Consider deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IED\"},{\"name\":\"indicators_violating_exclusive_group_sets\",\"displayName\":\"Indicators with conflicting exclusive group sets\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that are members of multiple exclusive indicator groups\",\"recommendation\":\"Remove the indicator from all but one exclusive indicator group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IVEGS\"},{\"name\":\"category_options_excess_groupset_membership\",\"displayName\":\"Category options which belong to multiple groups in a category option group set.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category options which belong to multiple groups in a category option group set.\",\"introduction\":\"Category options should belong to exactly one category option group which are part of a category option group set. If the category option belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the category option in the details list to exactly one category option group within each group set.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"COEGM\"},{\"name\":\"periods_duplicates\",\"displayName\":\"Duplicate Periods\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Lists all periods duplicates which have identical type and start date\",\"recommendation\":\"Make sure all database references are moved to one of the duplicates before deleting the unused duplicates\",\"isSlow\":false,\"code\":\"PD\"},{\"name\":\"program_rules_without_action\",\"displayName\":\"Program rules lacking an action\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that are not connected to any program rule action\",\"recommendation\":\"Connect the rule to an action or consider removing the rule\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWA\"},{\"name\":\"orgunits_multiple_roots\",\"displayName\":\"The organisation unit hierarchy should have a single root.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"The organisation unit hierarchy should have a single root.\",\"introduction\":\"Every DHIS2 system should have a single root organisation unit. This means a single organisation unit from which all other branches of the hierarchy are descendants.\",\"recommendation\":\"Once you have decided which organisation unit should be the real root of the organisation unit hierarchy, you should update the parent organisation unit. This can be done by using the DHIS2 API or my updating the value directly in the `organisationunit` table.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMR\"},{\"name\":\"validation_rules_with_invalid_left_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a left side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWILSE\"},{\"name\":\"program_rule_actions_without_stage_id\",\"displayName\":\"Program rules with actions lacking a program stage\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a program stage but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWSI\"},{\"name\":\"indicator_groups_scarce\",\"displayName\":\"Indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups should have at least two members.\",\"introduction\":\"All indicator groups should be composed of at least two indicators.\",\"recommendation\":\"Considering removing groups with zero or one groups, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"indicatorGroups\",\"isSlow\":false,\"code\":\"IGS\"},{\"name\":\"option_sets_wrong_sort_order\",\"displayName\":\"Option sets with possibly wrong sort order.\",\"section\":\"Option sets\",\"severity\":\"SEVERE\",\"description\":\"Option sets with possibly wrong sort order.\",\"introduction\":\"Option sets contain options which should be ordered sequentially. The sort_order property should always start with 1 and have a sequential sequence. If there are three options in the option set, then the sort order should be 1,2,3. \\nIn certain circumstances, options may be deleted from an option set, and the sort order may become corrupted. This may lead to a situation where it becomes impossible to update the option set from the maintenance app, and may lead to problems when attempting to using the option set in the data entry app.\",\"recommendation\":\"If it is possible to open the option set in the maintenance app, you can resort the option set, which should correct the problem. Another possible solution is to directly update the sort_order property of in the `optionset` table in the database, ensuring that a valid sequence is present for all options in the option set.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSWSO\"},{\"name\":\"periods_same_start_end_date\",\"displayName\":\"Periods with the same start and end dates\",\"section\":\"Periods\",\"severity\":\"CRITICAL\",\"description\":\"Periods with the same start and end dates\",\"introduction\":\"Different periods should not have exactly the same start and end date.\",\"recommendation\":\"All references to the duplicate periods should be removed from the system and reassigned. It is recommended to use the period with the lower periodid.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PSSED\"},{\"name\":\"program_indicators_with_invalid_expressions\",\"displayName\":\"Program indicators with invalid expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have an invalid expression\",\"recommendation\":\"Check that the expression evaluates to a number\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIE\"},{\"name\":\"program_rule_actions_without_notification\",\"displayName\":\"Program rule with actions lacking a notification template\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires a notification template but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWN\"},{\"name\":\"indicator_no_analysis\",\"displayName\":\"Indicators not used in analytical objects.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not used in analytical objects.\",\"introduction\":\"Indicators should be used to produce some type of analytical output (charts, maps, pivot tables). Note: indicators used in datasets to provide feedback during data entry are not counted as being used in analytical objects.\",\"recommendation\":\"Indicators that are not routinely being used for analysis should be reviewed to determine if they are useful and needed. If these are meant to be used for routine review, then associated outputs should be created using them. If these indicators are not going to be used for any type of information review, and are not used in data sets for feedback during data entry, consideration should be made to delete them.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"INA\"},{\"name\":\"user_groups_scarce\",\"displayName\":\"User groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"User groups should have at least two members.\",\"introduction\":\"Generally, user groups should contain two or more users.\",\"recommendation\":\"Considering removing user groups with less than two users, or alternatively, add additional users to the group to make it more useful.\",\"issuesIdType\":\"userGroups\",\"isSlow\":false,\"code\":\"UGS\"},{\"name\":\"data_elements_aggregate_with_different_period_types\",\"displayName\":\"Aggregate data elements which belong to datasets with different period types.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"SEVERE\",\"description\":\"Aggregate data elements which belong to datasets with different period types.\",\"introduction\":\"Data elements should not belong to datasets with different period types.\",\"recommendation\":\"If you need to collect data with different period types (e.g. weekly and monthly) you should use different data elements for each period type. In general, it is not recommended to collect data with different frequencies, since in general, data collected at higher frequencies (e.g. weekly) can be aggregated to data with lower frequencies (e.g yearly).\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAWDPT\"},{\"name\":\"validation_rules_without_groups\",\"displayName\":\"Validation rules lacking groups\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that are not member of at least one validation rule group\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWG\"},{\"name\":\"category_option_combos_disjoint\",\"displayName\":\"Category option combinations with disjoint associations.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with disjoint associations.\",\"introduction\":\"Under certain circumstances, category option combinations may exist in the system, but not have any direct association with category options which are associated with their category combination. This situation usually occurs when category options have been added to a category and then the category is added to a category combination. New category option combinations are created in the system at this point. If any of the category options are then removed in one of the underlying categories, a so-called disjoint category option combination may result. This is a category option combination which has no direct association with any category options in any of the categories associated with the category combination.\",\"recommendation\":\"The disjoint category option combinations should be removed from the system if possible. However, if any data is associated with the category option combination, a determination will need to be made in regards of how to deal with this data.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"COCD\"},{\"name\":\"options_sets_unused\",\"displayName\":\"Option sets which are not used\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Option sets which are not used\",\"introduction\":\"Option sets should be used for some purpose. The may be used by data elements, comments, attributes, or tracked entity attributes.\",\"recommendation\":\"Consider deleting unused option sets, or alternatively, ensure that they have been properly assigned.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSU\"},{\"name\":\"catoptioncombos_no_catcombo\",\"displayName\":\"Category options combinations with no category combination.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options combinations with no category combination.\",\"introduction\":\"All category option combinations should be associated with a category combo. In certain cases, when category combinations are deleted,the linkage between a category option combination and a category combination may become corrupted.\",\"recommendation\":\"Check if any data is associated with the category option combination in question. Likely, the data should either be deleted or migrated to a valid category option combination. Any data which is associated with any of these category option combinations will not be available through either the data entry modules or any of the analytical apps.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CNC\"},{\"name\":\"data_elements_violating_exclusive_group_sets\",\"displayName\":\"Data elements with conflicting exclusive group sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are a members of more than one exclusive data element set belonging to the same data element group set\",\"recommendation\":\"Either remove the data element from all but one exclusive group set or consider if the set really should be an exclusive group set\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEVEGS\"},{\"name\":\"categories_same_category_options\",\"displayName\":\"Categories with the same category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with the same category options\",\"introduction\":\"Categories with the exact same category options should be considered to be merged. Categories with the exact same category options may be easily confused by users in analysis. The details view will provide a list of categories which have the exact same category options. For each duplicated category a number in parentheses such as (1) will indicate which categories belong to duplicated groups.\",\"recommendation\":\"If category combinations have already been created with duplicative categories,\\nit is recommended that you do not take any action, but rather ensure\\nthat users understand that there may be two category combinations which are duplicative.\\n\\nIf you choose to merge the duplicative category combinations, you would need to \\nremap all category option combinations from the category combo which you wish to \\nremove, to the one which you wish to keep. \\n\\nIf one of the categories is not in use in any category combination, it should\\nconsider to be removed from the system.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CSCO\"},{\"name\":\"visualizations_not_viewed_one_year\",\"displayName\":\"Visualizations which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Visualizations which have not been viewed in the past 12 months\",\"introduction\":\"Visualizations should be regularly viewed in the system. In many cases, users may create charts for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to charts being difficult to find in the visualization app.\",\"recommendation\":\"Unused charts can be removed directly using the data visualization app by a user with sufficient authority. If charts are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"visualizations\",\"isSlow\":false,\"code\":\"VNVOY\"},{\"name\":\"categories_one_default_category_option\",\"displayName\":\"Only one default category option should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option with UID \\\"xYerKDKCefk\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option or move all references to category option \\\"xYerKDKCefk\\\" and then remove the unused conflicting category option.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CODCO\"},{\"name\":\"orgunits_multiple_spaces\",\"displayName\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"introduction\":\"Names and/or shortnames of organisation units should not contain multiple spaces. They are superfluous and may complicate the location of organisation units when they are searched.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the multiple spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMS\"},{\"name\":\"data_elements_aggregate_abandoned\",\"displayName\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"introduction\":\"Data elements are considered to be abandoned when they have not been edited in at least 100 days and do not have any data values associated with them. Often, these are the result of new or changed configurations that have been abandoned at some point.\",\"recommendation\":\"Data elements that have no data associated with them and which there are no plans to start using for data collection should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAA\"},{\"name\":\"data_elements_assigned_to_data_sets_with_different_period_types\",\"displayName\":\"Data elements assigned to data sets with different period type\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are assigned to at least one data set that has a different period type\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEATDSWDPT\"},{\"name\":\"data_elements_aggregate_no_groups\",\"displayName\":\"Aggregate data elements not in any data element groups.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not in any data element groups.\",\"introduction\":\"All data elements should be in a data element group. This allows users to find the data elements more easily in analysis\\n apps and also contributes to having more complete data element group sets.\\n Maintenance operations can also be made more efficient by applying\\n bulk settings (ex. sharing) to all data elements within a data element group.\",\"recommendation\":\"Data elements that are not in a data element group should be added to a relevant data element group. If the data elements are not needed, they should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANG\"},{\"name\":\"category_options_shared_within_category_combo\",\"displayName\":\"Category combinations with categories which share the same category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category combinations with categories which share the same category options.\",\"introduction\":\"As a general rule, category options should be reused where possible between categories. The exception to this rule however, is when you have a category combo with multiple categories, and within those categories, a category option is shared. As a simple example, lets say you have a category called \\\"Sex\\\" with options \\\"Male\\\"\\\", \\\"Female\\\" and \\\"Unknown\\\". There is also a second category called \\\"Age\\\" with options \\\"<15\\\", \\\"15+\\\", and \\\"Unknown\\\". A category combination called \\\"Age/Sex\\\" is then created with these two categories, which share the option \\\"Unknown\\\". This situation should be avoided, as it creates issues when analyzing data.\",\"recommendation\":\"The recommended approach to dealing with this situation is to create a new category combination, using two new categories. Using the example from the introduction, you should create two new category options called \\\"Unknown age\\\" and \\\"Unknown sex\\\". A new category combination can then be created with these new categories, which do not share category options. All data which is potentially associated with the old category combinations, would need to be reassigned to the new category option combinations. Any analytical objects which use the categories to be removed would also need to be updated.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"COSWCC\"},{\"name\":\"orgunits_null_island\",\"displayName\":\"Organisation units located within 100 km of Null Island (0,0).\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units located within 100 km of Null Island (0,0).\",\"introduction\":\"A common problem when importing coordinates is the inclusion of coordinates situated around the point of [Null Island](https://en.wikipedia.org/wiki/Null_Island). This is the point on the Earth's surface where the Prime Meridian and Equator intersect with a latitude of 0 and a longitude of 0. The point also happens to be situated currently in the middle of the ocean. This query identifies any points located within 100 km of the point having latitude and longitude equal to zero.\",\"recommendation\":\"Update the coordinates of the affected organization unit to the correct location.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONI\"},{\"name\":\"program_rule_actions_without_section\",\"displayName\":\"Program rules with actions lacking a program stage section\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a section but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWS\"},{\"name\":\"periods_3y_future\",\"displayName\":\"Periods which are more than three years in the future.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are more than three years in the future.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\nfar future. Different data entry clients may not properly validate for periods\\nwhich are in the future, and thus any periods in the future should be reviewed.\\nIn some cases, data may be valid for future dates, e.g. targets which are set for the\\nnext fiscal year.\",\"recommendation\":\"If any periods exist in the system in the future, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\\n\\nIn many cases, clients may mean to transmit\\ndata for January 2021, but due to data entry errors, January 2031 is selected. Thus,\\nany data in the far future should be investigated to ensure it does not result\\nfrom data entry errors.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"P3F\"},{\"name\":\"orgunits_trailing_spaces\",\"displayName\":\"Organisation units should not have trailing spaces.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have trailing spaces.\",\"introduction\":\"Trailing spaces in organisation units are superfluous.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the trailing spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OTS\"},{\"name\":\"validation_rule_groups_scarce\",\"displayName\":\"Validation rule should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Validation rule should have at least two members.\",\"introduction\":\"Generally validation rule groups should be composed of multiple validation rules.\",\"recommendation\":\"Considering removing groups which are empty or which have a single member. Alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"validationRuleGroups\",\"isSlow\":false,\"code\":\"VRGS\"},{\"name\":\"indicators_with_invalid_numerator\",\"displayName\":\"Indicators with invalid numerator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators where the numerator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWIN\"},{\"name\":\"categories_one_default_category_combo\",\"displayName\":\"Only one default category combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category combo should exist\",\"introduction\":\"There should only exist one category combo with name and code \\\"default\\\".\",\"recommendation\":\"Only the category combo with UID \\\"bjDvmb4bfuf\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category combo or move all references to category combo \\\"bjDvmb4bfuf\\\" and then remove the unused conflicting category combo.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CODCC\"},{\"name\":\"data_elements_without_data_sets\",\"displayName\":\"Data elements lacking data Sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data sets\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWDS\"},{\"name\":\"category_combos_unused\",\"displayName\":\"Category combinations not used by other metadata objects\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category combinations not used by other metadata objects\",\"introduction\":\"Category combinations which are unused in any datasets, data elements, programs or data approval workflows may be safe to delete. In some cases, category combinations may be created, but never actually used for anything. This may lead to situations where users and implementers are confused about which category combination should actually be used. In general, it should be safe to delete unused category combinations, except in situations where existing data has been associated with them.\",\"recommendation\":\"Check to see if any data is associated with the category combination before attempting to delete it. Category combinations which are not currently used in any metadata objects may still be valid for legacy reasons, but they should be reviewed to be sure they are still needed. Otherwise, it should be safe to remove them from the system.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCU\"},{\"name\":\"category_option_groups_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option groups should be composed of at least two category options. There can however be legitimate cases when a single category option is part of a group, especially in cases where there is a direct mapping between age bands and category options.\",\"recommendation\":\"Considering removing groups with zero or one category options, or alternatively, add additional category options to the group to make it more useful.\",\"issuesIdType\":\"categoryOptionGroups\",\"isSlow\":false,\"code\":\"COGS\"},{\"name\":\"datasets_empty\",\"displayName\":\"Datasets with no data elements.\",\"section\":\"Data sets\",\"severity\":\"WARNING\",\"description\":\"Datasets with no data elements.\",\"introduction\":\"All datasets should have data elements assigned to them.\",\"recommendation\":\"Remove empty datasets, or alternatively, assign data elements to them.\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DE\"},{\"name\":\"indicators_without_groups\",\"displayName\":\"Indicators lacking groups\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that do not have at least one group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWG\"},{\"name\":\"orgunit_groups_scarce\",\"displayName\":\"Organisation unit groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Organisation unit groups should have at least two members.\",\"introduction\":\"Generally, organisation unit groups should be composed of multiple organisation units.\",\"recommendation\":\"Considering removing groups with zero or one organisation units, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OGS\"},{\"name\":\"program_rules_without_priority\",\"displayName\":\"Program rules lacking a priority setting\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules with action type \\\"assign\\\" where the rule priority is not yet set\",\"recommendation\":\"Set a priority for the program rule(s)\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWP\"},{\"name\":\"categories_unique_category_combo\",\"displayName\":\"Different category combinations should not have the exact same combination of categories.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Different category combinations should not have the exact same combination of categories.\",\"introduction\":\"Category combinations should be a unique combination of categories. If two or more category combinations contain the exact same set of categories, this would be considered to be duplicative and potentially confusing to users.\",\"recommendation\":\"One category combo is kept, all references are updated to use this combo and other combos are removed.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CUCC\"},{\"name\":\"indicator_group_sets_scarce\",\"displayName\":\"Indicator groups sets should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups sets should have at least two members.\",\"introduction\":\"All indicator group set should be composed of at least two indicators groups.\",\"recommendation\":\"Considering removing indicator group sets with less than two indicator groups, or alternatively, add additional indicator groups to the indicator group set to make it more useful.\",\"issuesIdType\":\"indicatorGroupSets\",\"isSlow\":false,\"code\":\"IGSS\"},{\"name\":\"validation_rules_with_invalid_right_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a right side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWIRSE\"},{\"name\":\"data_elements_aggregate_aggregation_operator\",\"displayName\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"introduction\":\"Data elements which are not numeric (text, dates, etc) should have an aggregation operator set to NONE. Data elements which are able to be aggregated (numbers, integers, etc) should have an aggregation operator set to something other than NONE, most often SUM.\",\"recommendation\":\"Open the affected data elements in the Maintenance App and change their aggregation type to an appropriate type. Alternatively, these can be altered via the API.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAAO\"},{\"name\":\"org_unit_groups_without_group_sets\",\"displayName\":\"Organisation unit groups lacking group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation unit groups that aren't member of at least one organisation unit group set\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OUGWGS\"},{\"name\":\"program_rule_variables_without_attribute\",\"displayName\":\"Program rule variables lacking an attribute\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring an attribute source but that is not yet linked to an attribute\",\"recommendation\":\"Assign an attribute to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWA\"},{\"name\":\"program_indicator_groups_scarce\",\"displayName\":\"Program indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Program indicator groups should have at least two members.\",\"introduction\":\"Program indicator groups should generally be composed of two or more program indicators.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"programIndicatorGroups\",\"isSlow\":false,\"code\":\"PIGS\"},{\"name\":\"program_rules_no_expression\",\"displayName\":\"Program rules with no expression.\",\"section\":\"Program rules\",\"severity\":\"WARNING\",\"description\":\"Program rules with no expression.\",\"introduction\":\"All program rules should have an expression. Expressions are used by program rules to determine when they should be triggered. Program rules with no expression have no purpose.\",\"recommendation\":\"Using the DHIS2 user interface, assign an expression to each of the program rules which is missing one. Otherwise, if it is safe to delete the program rule with no expression, it is recommended to remove it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNE\"},{\"name\":\"data_elements_aggregate_no_data\",\"displayName\":\"Aggregate data elements with NO data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements with NO data values.\",\"introduction\":\"Data elements should generally always be associated with data values. If data elements exist in a data set which is active, but there are no data values associated with them, they may not be part of the data entry screens. Alternatively, the data element may have been added but never been associated with a dataset.\",\"recommendation\":\"Consider removing data elements with no data values.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAND\"},{\"name\":\"program_indicators_without_expression\",\"displayName\":\"Program indicators lacking an expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have no expression set yet\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWE\"},{\"name\":\"periods_distant_past\",\"displayName\":\"Periods which are in the distant past.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are in the distant past.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\ndistant past. Different data entry clients may not properly validate for periods\\nwhich are in the distant past, and thus these periods should be triaged to ensure\\nthat data has not been entered against them by mistake.\",\"recommendation\":\"If any periods exist in the system in the distant past, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PDP\"},{\"name\":\"org_units_being_orphaned\",\"displayName\":\"Orphaned organisation units\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that aren't level 1 units but that lack a parent so that they are not connected to the rest of the organisation tree\",\"recommendation\":\"Find (or create) and set the correct parent for the orphaned organisation unit(s). Eventually this is also caused by having set the wrong level.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUBO\"},{\"name\":\"cocs_wrong_cardinality\",\"displayName\":\"Category option combinations with incorrect cardinality.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with incorrect cardinality.\",\"introduction\":\"All category option combinations should have exactly the same number of category option associations as the number of categories in the category combination. If there are two categories in a category combination, then every category option combination should have exactly two category options.\\nCategory option combinations with the incorrect cardinality are usually the result of a category combination having been created, and then modified later. Suppose that two categories are used to create a category combination. Each category option combination of this category combo will have two category options. If an additional category is added to the category combination later, new category option combinations with three category options will be created and associated with this category combo. The original category option combinations would be considered to be invalid.\",\"recommendation\":\"Category option combinations which have an incorrect cardinality will be ignored by the DHIS2 analytics system and should be removed.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CWC\"},{\"name\":\"dashboards_not_viewed_one_year\",\"displayName\":\"Dashboards which have not been actively viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Dashboards which have not been actively viewed in the past 12 months\",\"introduction\":\"Dashboards should be regularly viewed in the system. In many cases, users may create dashboards for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to useful dashboards being difficult to find. This check identifies any dashboards which have not been viewed in the past year.\",\"recommendation\":\"Unused dashboards can be deleted in the entirety from the main dashboard app by clicking on the \\\"Edit\\\" button and choosing \\\"Delete\\\". Note that this process cannot be undone! Another option would be to alter the sharing of the dashboard so that it is not visible to any user.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNVOY\"}]", - "responseSize": 66022, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - } -] diff --git a/cypress/fixtures/network/40/users_should_be_able_to_insert_cron_presets.json b/cypress/fixtures/network/40/users_should_be_able_to_insert_cron_presets.json deleted file mode 100644 index 399fdfc42..000000000 --- a/cypress/fixtures/network/40/users_should_be_able_to_insert_cron_presets.json +++ /dev/null @@ -1,305 +0,0 @@ -[ - { - "path": "/api/40/systemSettings/helpPageLink", - "featureName": "Users should be able to insert cron presets", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"helpPageLink\":\"https://dhis2.github.io/dhis2-docs/master/en/user/html/dhis2_user_manual_en.html\"}", - "responseSize": 99, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/analytics/tableTypes", - "featureName": "Users should be able to insert cron presets", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"]", - "responseSize": 122, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/pushAnalysis?paging=false", - "featureName": "Users should be able to insert cron presets", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"pushAnalysis\":[{\"displayName\":\"Immunization Key Indicators Monthly Report\",\"id\":\"jtcMAKhWwnc\"}]}", - "responseSize": 98, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/validationRuleGroups?paging=false", - "featureName": "Users should be able to insert cron presets", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"validationRuleGroups\":[{\"displayName\":\"ANC\",\"id\":\"UP1lctvalPn\"},{\"displayName\":\"Commodities\",\"id\":\"xcpl667ccfF\"},{\"displayName\":\"Critical event\",\"id\":\"xWtt9c443Lt\"},{\"displayName\":\"District stock\",\"id\":\"mEtdbIDDhix\"},{\"displayName\":\"Epidemic disease outbreak\",\"id\":\"y2yQIm79VTW\"},{\"displayName\":\"Facility Stock\",\"id\":\"SqyI8HKqI4g\"},{\"displayName\":\"Immunisation\",\"id\":\"UiOSY1iIdub\"},{\"displayName\":\"Infectious disease outbreak\",\"id\":\"WUZXEFdn1PX\"},{\"displayName\":\"Malaria\",\"id\":\"zlaSof6qLqF\"},{\"displayName\":\"Population\",\"id\":\"D3bItmtBpsW\"},{\"displayName\":\"TB\",\"id\":\"IMF6p1MqoHl\"},{\"displayName\":\"Testing\",\"id\":\"nMDkAJXsmlR\"}]}", - "responseSize": 628, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations?fields=*&paging=false", - "featureName": "Users should be able to insert cron presets", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"jobConfigurations\":[{\"href\":\"/40/jobConfigurations/sHMedQF7VYa\",\"name\":\"Credentials expiry alert\",\"created\":\"2017-12-08T12:45:18.351\",\"lastUpdated\":\"2023-02-28T15:24:55.737\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"CREDENTIALS_EXPIRY_ALERT\",\"cronExpression\":\"0 0 2 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.668\",\"lastRuntimeExecution\":\"00:00:00.062\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Credentials expiry alert\",\"favorite\":false,\"id\":\"sHMedQF7VYa\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/YvAwAmrqAtN\",\"name\":\"Dataset notification\",\"created\":\"2017-12-08T12:45:18.355\",\"lastUpdated\":\"2023-02-28T15:24:55.810\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"DATA_SET_NOTIFICATION\",\"cronExpression\":\"0 0 2 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.668\",\"lastRuntimeExecution\":\"00:00:00.137\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Dataset notification\",\"favorite\":false,\"id\":\"YvAwAmrqAtN\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/BFa3jDsbtdO\",\"name\":\"Data statistics\",\"created\":\"2017-12-08T12:45:18.337\",\"lastUpdated\":\"2023-02-28T15:24:55.877\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"DATA_STATISTICS\",\"cronExpression\":\"0 0 2 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.668\",\"lastRuntimeExecution\":\"00:00:00.207\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Data statistics\",\"favorite\":false,\"id\":\"BFa3jDsbtdO\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/pd6O228pqr0\",\"name\":\"File resource clean up\",\"created\":\"2017-12-08T12:45:18.317\",\"lastUpdated\":\"2023-02-28T15:24:55.839\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"FILE_RESOURCE_CLEANUP\",\"cronExpression\":\"0 0 2 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.669\",\"lastRuntimeExecution\":\"00:00:00.169\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"File resource clean up\",\"favorite\":false,\"id\":\"pd6O228pqr0\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/uwWCT2BMmlq\",\"name\":\"Remove expired or used reserved values\",\"created\":\"2021-06-10T12:37:25.034\",\"lastUpdated\":\"2023-02-28T15:24:55.923\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"REMOVE_USED_OR_EXPIRED_RESERVED_VALUES\",\"cronExpression\":\"0 0 2 ? * *\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.668\",\"lastRuntimeExecution\":\"00:00:00.253\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Remove expired or used reserved values\",\"favorite\":false,\"id\":\"uwWCT2BMmlq\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/vt21671bgno\",\"name\":\"System version update check notification\",\"created\":\"2021-12-21T12:31:00.047\",\"lastUpdated\":\"2023-02-28T16:33:40.425\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"SYSTEM_VERSION_UPDATE_CHECK\",\"cronExpression\":\"44 8 3 ? * *\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T03:08:44.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T16:33:39.585\",\"lastRuntimeExecution\":\"00:00:00.838\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"System version update check notification\",\"favorite\":false,\"id\":\"vt21671bgno\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/fUWM1At1TUx\",\"name\":\"User account expiry alert\",\"created\":\"2021-09-01T07:24:20.394\",\"lastUpdated\":\"2023-02-28T15:24:55.747\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"ACCOUNT_EXPIRY_ALERT\",\"cronExpression\":\"0 0 2 ? * *\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.669\",\"lastRuntimeExecution\":\"00:00:00.071\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"User account expiry alert\",\"favorite\":false,\"id\":\"fUWM1At1TUx\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/Js3vHn2AVuG\",\"name\":\"Validation result notification\",\"created\":\"2017-12-08T12:45:18.346\",\"lastUpdated\":\"2023-02-27T16:37:17.320\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"VALIDATION_RESULTS_NOTIFICATION\",\"cronExpression\":\"0 0 7 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-02-28T07:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-27T14:55:13.329\",\"lastRuntimeExecution\":\"00:00:00.022\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Validation result notification\",\"favorite\":false,\"id\":\"Js3vHn2AVuG\",\"attributeValues\":[]}]}", - "responseSize": 6953, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations/jobTypes?fields=*&paging=false", - "featureName": "Users should be able to insert cron presets", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"jobTypes\":[{\"name\":\"Data integrity\",\"jobType\":\"DATA_INTEGRITY\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"checks\",\"fieldName\":\"Checks\",\"persisted\":false,\"collectionName\":\"checks\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/dataIntegrity\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.parameters.DataIntegrityJobParameters$DataIntegrityReportType\",\"name\":\"type\",\"fieldName\":\"Type\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"REPORT\",\"SUMMARY\",\"DETAILS\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Resource table\",\"jobType\":\"RESOURCE_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Analytics table\",\"jobType\":\"ANALYTICS_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"skipPrograms\",\"fieldName\":\"Skip programs\",\"persisted\":false,\"collectionName\":\"skipPrograms\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/programs\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipResourceTables\",\"fieldName\":\"Skip resource tables\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Continuous analytics table\",\"jobType\":\"CONTINUOUS_ANALYTICS_TABLE\",\"schedulingType\":\"FIXED_DELAY\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"fullUpdateHourOfDay\",\"fieldName\":\"Full update hour of day\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Data sync\",\"jobType\":\"DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker programs data sync\",\"jobType\":\"TRACKER_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Event programs data sync\",\"jobType\":\"EVENT_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Meta data sync\",\"jobType\":\"META_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"trackerProgramPageSize\",\"fieldName\":\"Tracker program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"eventProgramPageSize\",\"fieldName\":\"Event program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"dataValuesPageSize\",\"fieldName\":\"Data values page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Aggregate data exchange\",\"jobType\":\"AGGREGATE_DATA_EXCHANGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"dataExchangeIds\",\"fieldName\":\"Data exchange ids\",\"persisted\":false,\"collectionName\":\"dataExchangeIds\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/aggregateDataExchanges\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Send scheduled message\",\"jobType\":\"SEND_SCHEDULED_MESSAGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Program notifications\",\"jobType\":\"PROGRAM_NOTIFICATIONS\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Monitoring\",\"jobType\":\"MONITORING\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"validationRuleGroups\",\"fieldName\":\"Validation rule groups\",\"persisted\":false,\"collectionName\":\"validationRuleGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/validationRuleGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"sendNotifications\",\"fieldName\":\"Send notifications\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"persistResults\",\"fieldName\":\"Persist results\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Push analysis\",\"jobType\":\"PUSH_ANALYSIS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"pushAnalysis\",\"fieldName\":\"Push analysis\",\"persisted\":false,\"collectionName\":\"pushAnalysis\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/pushAnalysis\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker search optimization\",\"jobType\":\"TRACKER_SEARCH_OPTIMIZATION\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"attributes\",\"fieldName\":\"Attributes\",\"persisted\":false,\"collectionName\":\"attributes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/trackedEntityAttributes/indexable\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipIndexDeletion\",\"fieldName\":\"Skip index deletion\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Predictor\",\"jobType\":\"PREDICTOR\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictors\",\"fieldName\":\"Predictors\",\"persisted\":false,\"collectionName\":\"predictors\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictors\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictorGroups\",\"fieldName\":\"Predictor groups\",\"persisted\":false,\"collectionName\":\"predictorGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictorGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Disable inactive users\",\"jobType\":\"DISABLE_INACTIVE_USERS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"inactiveMonths\",\"fieldName\":\"Inactive months\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"reminderDaysBefore\",\"fieldName\":\"Reminder days before\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Test\",\"jobType\":\"TEST\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Long\",\"name\":\"waitMillis\",\"fieldName\":\"Wait millis\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"stages\",\"fieldName\":\"Stages\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtStage\",\"fieldName\":\"Fail at stage\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"items\",\"fieldName\":\"Items\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtItem\",\"fieldName\":\"Fail at item\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Long\",\"name\":\"itemDuration\",\"fieldName\":\"Item duration\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.String\",\"name\":\"failWithMessage\",\"fieldName\":\"Fail with message\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"failWithException\",\"fieldName\":\"Fail with exception\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.JobProgress$FailurePolicy\",\"name\":\"failWithPolicy\",\"fieldName\":\"Fail with policy\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"PARENT\",\"FAIL\",\"SKIP_STAGE\",\"SKIP_ITEM\",\"SKIP_ITEM_OUTLIER\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"runStagesParallel\",\"fieldName\":\"Run stages parallel\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]}]}", - "responseSize": 24994, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictors?paging=false", - "featureName": "Users should be able to insert cron presets", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictors\":[{\"displayName\":\"Malaria Outbreak Threshold\",\"id\":\"tEK1OEqS4O1\"}]}", - "responseSize": 80, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictorGroups?paging=false", - "featureName": "Users should be able to insert cron presets", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictorGroups\":[]}", - "responseSize": 22, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/dataIntegrity", - "featureName": "Users should be able to insert cron presets", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[{\"name\":\"orgunits_invalid_geometry\",\"displayName\":\"Organisation units with invalid geometry.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with invalid geometry.\",\"introduction\":\"DHIS2 uses the PostGIS database extension to manage the geographical information associated\\nwith organisation units. There are various reasons why geometries may be considered to be\\ninvalid including self-inclusions, self-intersections, and sliver polygons. Please see the\\nPostGIS documentation for a more in-depth discussion on this topic.\\n\\nInvalid geometry is not always a problem and may be able to be ignored, however, it has been observed in certain systems\\nthat this can lead to problems in analytics. If you are experiencing issues when generating analytics\\ntables, and see errors related to invalid geometries, you will need to either remove the invalid geometry,\\nor fix it.\",\"recommendation\":\"Update the geometry of the affected organisation units to a valid geometry. It may be possible to use the PostGIS function `ST_MakeValid` to automatically fix the problem. However, in other cases the geometry may need to be edited in a GIS tool, and then updated again in DHIS2.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OIG\"},{\"name\":\"data_elements_without_groups\",\"displayName\":\"Data elements lacking groups\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data element groups\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWG\"},{\"name\":\"orgunit_group_sets_excess_groups\",\"displayName\":\"Organisation units which belong to multiple groups in a group set.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which belong to multiple groups in a group set.\",\"introduction\":\"Organisation units should belong to exactly one group within each organisation unit group set of which they are a member. If the organisation unit belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the organisation units in the details list to exactly one group within each group set membership.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OGSEG\"},{\"name\":\"validation_rules_missing_value_strategy_null\",\"displayName\":\"All validation rule expressions should have a missing value strategy.\",\"section\":\"Validation rules\",\"severity\":\"SEVERE\",\"description\":\"All validation rule expressions should have a missing value strategy.\",\"introduction\":\"Validation rules are composed of a left and right side expression. In certain systems the missing value strategy may not be defined. This may lead to an exception during validation rule analysis. The affected validation rules should be corrected to with an appropriate missing value strategy.\",\"recommendation\":\"Using the results of the the details SQL view, identify the affected validation rules and which side of the rule the missing value strategy has not been specified. Using the maintenance app, make the appropriate corrections and save the rule.\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRMVSN\"},{\"name\":\"category_combos_being_invalid\",\"displayName\":\"Invalid Category-combos\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Lists all category-combos that are invalid\",\"recommendation\":\"Make sure the category combo is assigned to at least one category and that all categories have category options \",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCBI\"},{\"name\":\"data_elements_in_data_set_not_in_form\",\"displayName\":\"Data sets with data elements not in data entry form\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that have data elements which are neither a member of the set's data entry form nor a member of the sets section\",\"recommendation\":\"Either remove the data elements in question or make them a member of the set's form or section\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DEIDSNIF\"},{\"name\":\"categories_no_options\",\"displayName\":\"Categories with no category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with no category options\",\"introduction\":\"Categories should always have at least one category option.\",\"recommendation\":\"Any categories without category options should either be removed from the system if they are not in use. Otherwise, appropriate category options should be added to the category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CNO\"},{\"name\":\"data_elements_aggregate_no_analysis\",\"displayName\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"introduction\":\"All aggregate data elements that are captured in DHIS2 should be used to produce some type of analysis output (charts, maps, tables). This can be by using them directly in an output, or by having them contribute to an indicator calculation that is used an output.\",\"recommendation\":\"Data elements that are not routinely being reviewed in analysis, either directly or indirectly through indicators, should be reviewed to determine if they still need to be collected. If these are meant to be used in routine review, then associated outputs should be created using them. If these data elements are not going to be used for any type of information review, consideration should be made to either archive them or delete them.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANA\"},{\"name\":\"indicators_duplicated_terms\",\"displayName\":\"Indicators with the same terms.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same terms.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check attempts to identify indicators with the same formulas, regardless of the order of their their terms. Suppose you have an indicator which calculates total ANC attendance: ANC Total = ANC1 + ANC2 + ANC3 Suppose then another indicator exists in the system, which has been defined as: ANC Totals = ANC3 + ANC2 + ANC1 These two indicators are equivalent, and will produce the same result, and are thus considered to be duplicated.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Considered deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IDT\"},{\"name\":\"program_rules_no_action\",\"displayName\":\"Program rules with no action.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules with no action.\",\"introduction\":\"All program rules should have an action.\",\"recommendation\":\"Using the DHIS2 user interface, assign an action to each of the program rules which is missing one. Alternatively, if the program rule is not in use, then consider removing it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNA\"},{\"name\":\"orgunits_compulsory_group_count\",\"displayName\":\"Organisation units that are not in all compulsory orgunit group sets\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Orgunits that are not in all compulsory orgunit group sets\",\"introduction\":\"If any organisation unit groups have been marked as compulsory, each and every organisation unit should belong to exactly one group within each compulsory organisation unit group set. Assume we have created a group set called \\\"Ownership\\\" with two groups \\\"Public\\\" and \\\"Private\\\". Each and every organisation unit contained in the hierarchy must belong to either Public or Private (but not both). When organisation unit are not part of a group set, results in the analytics apps will not be correct if the organisation unit group set is used for aggregation.\",\"recommendation\":\"For each of the organisation units identified in the details query, you should assign the appropriate organisation unit group within the group set. Alternatively, if the group set should not be compulsory, you should change this attribute.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OCGC\"},{\"name\":\"orgunits_no_coordinates\",\"displayName\":\"Organisation units with no coordinates.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with no coordinates.\",\"introduction\":\"Ideally, all organisation units contained in the DHIS2 hierarchy should have a valid\\nset of coordinates. Usually for all organisation units above the facility level,\\nthese coordinates should be a polygon which provides the boundary of the organisation\\nunit. For facilities, these are usually represented as point coordinates.\\n\\nThere can obviously be exceptions to this rule. Mobile health facilities may not have\\na fixed location. Community health workers or wards below the facility level\\nmay also not have a defined or definable coordinate.\\n\\nThis check is intended to allow you to review all organisation units which do\\nnot have any coordinates and make a determination as to whether they should be updated.\",\"recommendation\":\"Where appropriate, update the geometry of each organisation unit with a valid geometry.\\nYou may need to contact the appropriate local government office to obtain a copy\\nof district boundaries, commonly referred to as \\\"shape files\\\". Another possibility\\nis to use freely available boundary files from GADM (https://gadm.org)\\n\\nIf facilities are missing coordinates, it may be possible to obtain these from\\nthe facility staff using their smart phone to get the coordinates. Images\\nfrom Google Maps can also often be used to estimate the position of a facility,\\nassuming that you have good enough resolution and local knowledge of where\\nit is located.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONC\"},{\"name\":\"data_sets_not_assigned_to_org_units\",\"displayName\":\"Data sets not assigned to organisation units\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that are not assigned to any organisation units\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DSNATOU\"},{\"name\":\"dashboards_no_items\",\"displayName\":\"Dashboards with no items.\",\"section\":\"Dashboards\",\"severity\":\"INFO\",\"description\":\"Dashboards with no items.\",\"introduction\":\"All dashboards should have content on them. Dashboards without any content do not serve any purpose, and can make it more difficult to find relevant dashboards with content.\",\"recommendation\":\"Dashboards without content that have not been modified in the last 14 days should be considered for deletion.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNI\"},{\"name\":\"orgunits_same_name_and_parent\",\"displayName\":\"Organisation units should not have the same name and parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have the same name and parent.\",\"introduction\":\"Organisation units may have exactly the same name. This may become confusing to users, particularly if the organisation unit has the same name and same parent. This can easily lead to data entry or analysis mistakes as users have no way to distinguish between the two organisation units.\",\"recommendation\":\"Rename identically named organisation units which share the same parent using the maintenance app.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OSNAP\"},{\"name\":\"indicators_not_grouped\",\"displayName\":\"Indicators not in any groups.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not in any groups.\",\"introduction\":\"All indicators should be in an indicator group. This allows users to find the indicators more easily in analysis apps and also contributes to having more complete indicators group sets. Maintenance operations can also be made more efficient by applying bulk settings (ex. sharing, filtering) to all indicators within an indicator group.\",\"recommendation\":\"Indicators that are not in a indicator group should be added to a relevant indicator group. If the indicators are not needed, they should be deleted.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"ING\"},{\"name\":\"category_option_group_sets_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option group sets should be composed of at least two category option groups.\",\"recommendation\":\"Considering removing groups with zero or one category option groups, or alternatively, add additional category option groups to the group set to make it more useful.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSS\"},{\"name\":\"org_units_without_groups\",\"displayName\":\"Organisation units lacking groups\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are not connected to at least one group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWG\"},{\"name\":\"data_elements_excess_groupset_membership\",\"displayName\":\"Data elements which belong to multiple groups in a group set.\",\"section\":\"data_elements\",\"severity\":\"SEVERE\",\"description\":\"Data elements which belong to multiple groups in a group set.\",\"introduction\":\"Data elements should belong to exactly one group within each data element group set of which they are a member. If the data element belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the data elements in the details list to exactly one data element group within each group set.\",\"issuesIdType\":\"data_elements_aggregate\",\"isSlow\":false,\"code\":\"DEEGM\"},{\"name\":\"data_element_groups_scarce\",\"displayName\":\"Data element groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Data element groups should have at least two members.\",\"introduction\":\"All data element groups should be composed of at least two data elements.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"dataElementGroups\",\"isSlow\":false,\"code\":\"DEGS\"},{\"name\":\"orgunits_not_contained_by_parent\",\"displayName\":\"Organisation units with point coordinates should be contained by their parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with point coordinates should be contained by their parent.\",\"introduction\":\"Facilities are often represented as points in the DHIS2 hierarchy. Their parent organisation units geometry should contain all facilities which have been associated with them.\",\"recommendation\":\"Often boundary files are simplified when they are uploaded into DHIS2. This process may result in\\nfacilities which are located close to the border of a given district to fall outside of the district\\nwhen the boundary is simplified. This is considered to be more of a cosmetic problem for most DHIS2\\ninstallations, but could become an issue if any geospatial analysis is attempted using the\\nboundaries and point coordinates.\\n\\nIn cases where the facility falls outside of its parent's boundary\\nyou should confirm that the coordinates are correct. If the location is close to the boundary, you\\nmay want to reconsider how the boundary files have been simplified. Otherwise, if the location of\\nthe facility is completely incorrect, it should be rectified.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONCBP\"},{\"name\":\"program_rules_message_no_template\",\"displayName\":\"Program rules actions which should send or schedule a message without a message template.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules actions which should send or schedule a message without a message template.\",\"introduction\":\"Program rule actions of type \\\"Send message\\\" or \\\"Schedule message\\\" should have an associated message template.\",\"recommendation\":\"Using the DHIS2 user interface, assign a message template to each of the program rule actions which send or schedule messages but which does not have an association with a message template.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRMNT\"},{\"name\":\"indicators_with_invalid_denominator\",\"displayName\":\"Indicators with invalid denominator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"List all indicators where the denominator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWID\"},{\"name\":\"indicator_types_duplicated\",\"displayName\":\"Indicator types with the same factor.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicator types with the same factor.\",\"introduction\":\"Indicators can be assigned a factor which is multiplied by the indicator's value. For example, if you create a percentage based indicator, you can assign the indicator a factor of 100, which would be multiplied by the actual value of the indicator calculated by DHIS2. In general, having multiple indicator types with the same factor is not recommended. It is duplicative, and may lead to confusion.\",\"recommendation\":\"Duplicated indicator types should consider to be removed from the system. Consider choosing one of the duplicated indicator types as the one to keep, and then update all indicators which share the same factor to this indicator type. The duplicated indicator types can then be removed from the system.\",\"issuesIdType\":\"indicatorTypes\",\"isSlow\":false,\"code\":\"ITD\"},{\"name\":\"options_sets_empty\",\"displayName\":\"Empty option sets\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Empty option sets\",\"introduction\":\"All option sets should generally include at least two items. Empty option sets serve no purpose.\",\"recommendation\":\"Options should either be added to the option set, or the option set should be deleted.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSE\"},{\"name\":\"category_options_no_categories\",\"displayName\":\"Category options with no categories.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options with no categories.\",\"introduction\":\"All category options should belong to at least one category.\",\"recommendation\":\"Category options which are not part of any category should be removed or alternatively should be added to an appropriate category.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CONC\"},{\"name\":\"orgunits_orphaned\",\"displayName\":\"Orphaned organisation units.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"Orphaned organisation units.\",\"introduction\":\"Orphaned organisation units are those which have neither parents nor any children. This means that they have no relationship to the main organisation unit hierarchy. These may be created by faulty metadata imports or direct manipulation of the database.\",\"recommendation\":\"The orphaned organisation units should be assigned a parent or removed from the system. It is recommended to use the DHIS2 API for this task if possible. If this is not possible, then they may need to be removed through direct SQL on the DHIS2 database.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OO\"},{\"name\":\"indicators_with_identical_formulas\",\"displayName\":\"Indicators with identical formulas\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that have the identical formulas with at least one other indicator\",\"recommendation\":\"Check if the same indicator should be used everywhere and remove duplicates\",\"isSlow\":false,\"code\":\"IWIF\"},{\"name\":\"program_indicators_with_invalid_filters\",\"displayName\":\"Program indicators with invalid filter\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators with invalid filter expression\",\"recommendation\":\"Check that the expression evaluates to true/false\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIF\"},{\"name\":\"program_rules_without_condition\",\"displayName\":\"Program rules lacking a condition\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that have no condition yet\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWC\"},{\"name\":\"categories_one_default_category\",\"displayName\":\"Only one default category should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category should exist\",\"introduction\":\"There should only exist one category with name and code \\\"default\\\".\",\"recommendation\":\"Only the category with UID \\\"GLevLNI9wkl\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category or move all references to category \\\"GLevLNI9wkl\\\" and then remove the unused conflicting category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CODC\"},{\"name\":\"org_units_with_cyclic_references\",\"displayName\":\"Organisation units with cyclic references\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that have a conflicting parent hierarchy definition so that two organisation units become parent of each other or in other words they form a circular reference\",\"recommendation\":\"One of the organisation units must be setup wrongly and needs to be corrected so that a non-circular tree connects the two\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWCR\"},{\"name\":\"program_rule_variables_without_data_element\",\"displayName\":\"Program rule variables lacking a data element\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring a data element source but that is not yet linked to a data element\",\"recommendation\":\"Assign a data element to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWDE\"},{\"name\":\"org_units_violating_exclusive_group_sets\",\"displayName\":\"Organisation units with conflicting exclusive group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are members of multiple exclusive organisation unit groups\",\"recommendation\":\"Remove the organisation unit from all but one exclusive organisation unit group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUVEGS\"},{\"name\":\"program_rule_actions_without_data_object\",\"displayName\":\"Program rules with actions lacking a data object\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires either a data element or an attribute but is not connected either\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWDO\"},{\"name\":\"orgunits_openingdate_gt_closeddate\",\"displayName\":\"Organisation units which have an opening date later than the closed date.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which have an opening date later than the closed date.\",\"introduction\":\"If a closing date has been defined for an organisation unit, it should always be after the opening date (if one has been defined).\",\"recommendation\":\"Alter either the opening or closing date of all affected organisation units so that the closing date is after the opening date.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OOGC\"},{\"name\":\"categories_one_default_category_option_combo\",\"displayName\":\"Only one default category option combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option combo should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option combo with UID \\\"HllvX50cXC0\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option combo or move all references to category option combo \\\"HllvX50cXC0\\\" and then remove the unused conflicting category option combo.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CODCOC\"},{\"name\":\"category_option_group_sets_incomplete\",\"displayName\":\"Category option group sets which do not contain all category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option group sets which which do not contain all category options.\",\"introduction\":\"Category option group sets are composed of multiple category option groups, which are in turn composed of various category options. Category option group sets are often used to group related category options together for analytical purposes. Categories are also composed of category options. In general, but not always, category option group sets should contain all category options of related categories. Suppose we have the following two age categories. \\nAge coarse: <15, 15+ Age fine: <1, 1-10, 10-14,15-19,20-24,25-29,30-34,35-39,40-44,45+\\nIn many cases, related data elements may be disaggregated differently. This may be to differences in the way in which the data is collected, or as is often the case, the disaggregation has changed over time. If we wish to analyze data for two different data elements (one of which uses Age coarse and the other Age fine), we can create a category option group set consisting of two category option groups which should consist of the following category options from above. \\n<15: <15, <1, 1-10, 10-14 15+: 15+, 15-19,20-24,25-29,30-34,35-39,40-44,45+\\nSuppose that we happen to omit the category option \\\"<1\\\" from the \\\"<15\\\" category option group. This would result in potential aggregation errors in when using this category option group set in any analytical objects. The details of this metadata check would return the UID and name of the category option group set. The category and category option would also be provided. Using the previous example, we would see \\\"Age fine:{<1}\\\" in the metadata check details section, to indicate that the <1 category option which is part of the \\\"Age fine\\\" category, is missing from the category option group set.\\nThere may exist specific analytical reasons why specific category options are omitted from a category option group set. However,these should usually be special cases. This metadata check will identify cases where category option group sets appear to be incomplete, however you should carefully review any groups which appear in the details. \\nThis check may also produce a number of issues which may at first glance appear to be false positives. In some cases, category options may be added to a category by mistake. When category option group sets are created, this extraneous option may be omitted and thus appear as missing from the group set. \\nAnother observed situation is where an option like \\\"Unknown\\\" is used across unrelated categories. Suppose you have two categories \\\"Age (<15, 15+, Unknown)\\\" and \\\"Sex (Male,Female,Unknown)\\\". Similar to above, we create category option group sets like: \\n<15: <15 15+: 15+ Unknown: Unknown\\nThis metadata check will report that \\\"Male\\\" and \\\"Female\\\" are missing from the group set. This is because the same \\\"Unknown\\\" option is shared between two different, unrelated categories. It is recommended that if this situation occurs, that you create two separate \\\"Unknown\\\" category options like \\\"Unknown sex\\\" and \\\"Unknown age\\\".\",\"recommendation\":\"Using the maintenance app, assign the missing category options to an appropriate category option group within the affected category option group set.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSI\"},{\"name\":\"maps_not_viewed_one_year\",\"displayName\":\"Maps which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Maps which have not been viewed in the past 12 months\",\"introduction\":\"Maps should be regularly viewed in the system. In many cases, users may create maps for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system and being difficult to find in the Maps app.\",\"recommendation\":\"Unused maps can be removed directly using the Maps app by a user with sufficient authority. If maps are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"maps\",\"isSlow\":false,\"code\":\"MNVOY\"},{\"name\":\"indicators_exact_duplicates\",\"displayName\":\"Indicators with the same formula.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same formula.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check shows indicators which have the exact same formulas. Spaces which are present are removed prior to comparison.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Consider deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IED\"},{\"name\":\"indicators_violating_exclusive_group_sets\",\"displayName\":\"Indicators with conflicting exclusive group sets\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that are members of multiple exclusive indicator groups\",\"recommendation\":\"Remove the indicator from all but one exclusive indicator group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IVEGS\"},{\"name\":\"category_options_excess_groupset_membership\",\"displayName\":\"Category options which belong to multiple groups in a category option group set.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category options which belong to multiple groups in a category option group set.\",\"introduction\":\"Category options should belong to exactly one category option group which are part of a category option group set. If the category option belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the category option in the details list to exactly one category option group within each group set.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"COEGM\"},{\"name\":\"periods_duplicates\",\"displayName\":\"Duplicate Periods\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Lists all periods duplicates which have identical type and start date\",\"recommendation\":\"Make sure all database references are moved to one of the duplicates before deleting the unused duplicates\",\"isSlow\":false,\"code\":\"PD\"},{\"name\":\"program_rules_without_action\",\"displayName\":\"Program rules lacking an action\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that are not connected to any program rule action\",\"recommendation\":\"Connect the rule to an action or consider removing the rule\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWA\"},{\"name\":\"orgunits_multiple_roots\",\"displayName\":\"The organisation unit hierarchy should have a single root.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"The organisation unit hierarchy should have a single root.\",\"introduction\":\"Every DHIS2 system should have a single root organisation unit. This means a single organisation unit from which all other branches of the hierarchy are descendants.\",\"recommendation\":\"Once you have decided which organisation unit should be the real root of the organisation unit hierarchy, you should update the parent organisation unit. This can be done by using the DHIS2 API or my updating the value directly in the `organisationunit` table.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMR\"},{\"name\":\"validation_rules_with_invalid_left_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a left side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWILSE\"},{\"name\":\"program_rule_actions_without_stage_id\",\"displayName\":\"Program rules with actions lacking a program stage\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a program stage but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWSI\"},{\"name\":\"indicator_groups_scarce\",\"displayName\":\"Indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups should have at least two members.\",\"introduction\":\"All indicator groups should be composed of at least two indicators.\",\"recommendation\":\"Considering removing groups with zero or one groups, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"indicatorGroups\",\"isSlow\":false,\"code\":\"IGS\"},{\"name\":\"option_sets_wrong_sort_order\",\"displayName\":\"Option sets with possibly wrong sort order.\",\"section\":\"Option sets\",\"severity\":\"SEVERE\",\"description\":\"Option sets with possibly wrong sort order.\",\"introduction\":\"Option sets contain options which should be ordered sequentially. The sort_order property should always start with 1 and have a sequential sequence. If there are three options in the option set, then the sort order should be 1,2,3. \\nIn certain circumstances, options may be deleted from an option set, and the sort order may become corrupted. This may lead to a situation where it becomes impossible to update the option set from the maintenance app, and may lead to problems when attempting to using the option set in the data entry app.\",\"recommendation\":\"If it is possible to open the option set in the maintenance app, you can resort the option set, which should correct the problem. Another possible solution is to directly update the sort_order property of in the `optionset` table in the database, ensuring that a valid sequence is present for all options in the option set.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSWSO\"},{\"name\":\"periods_same_start_end_date\",\"displayName\":\"Periods with the same start and end dates\",\"section\":\"Periods\",\"severity\":\"CRITICAL\",\"description\":\"Periods with the same start and end dates\",\"introduction\":\"Different periods should not have exactly the same start and end date.\",\"recommendation\":\"All references to the duplicate periods should be removed from the system and reassigned. It is recommended to use the period with the lower periodid.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PSSED\"},{\"name\":\"program_indicators_with_invalid_expressions\",\"displayName\":\"Program indicators with invalid expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have an invalid expression\",\"recommendation\":\"Check that the expression evaluates to a number\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIE\"},{\"name\":\"program_rule_actions_without_notification\",\"displayName\":\"Program rule with actions lacking a notification template\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires a notification template but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWN\"},{\"name\":\"indicator_no_analysis\",\"displayName\":\"Indicators not used in analytical objects.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not used in analytical objects.\",\"introduction\":\"Indicators should be used to produce some type of analytical output (charts, maps, pivot tables). Note: indicators used in datasets to provide feedback during data entry are not counted as being used in analytical objects.\",\"recommendation\":\"Indicators that are not routinely being used for analysis should be reviewed to determine if they are useful and needed. If these are meant to be used for routine review, then associated outputs should be created using them. If these indicators are not going to be used for any type of information review, and are not used in data sets for feedback during data entry, consideration should be made to delete them.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"INA\"},{\"name\":\"user_groups_scarce\",\"displayName\":\"User groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"User groups should have at least two members.\",\"introduction\":\"Generally, user groups should contain two or more users.\",\"recommendation\":\"Considering removing user groups with less than two users, or alternatively, add additional users to the group to make it more useful.\",\"issuesIdType\":\"userGroups\",\"isSlow\":false,\"code\":\"UGS\"},{\"name\":\"data_elements_aggregate_with_different_period_types\",\"displayName\":\"Aggregate data elements which belong to datasets with different period types.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"SEVERE\",\"description\":\"Aggregate data elements which belong to datasets with different period types.\",\"introduction\":\"Data elements should not belong to datasets with different period types.\",\"recommendation\":\"If you need to collect data with different period types (e.g. weekly and monthly) you should use different data elements for each period type. In general, it is not recommended to collect data with different frequencies, since in general, data collected at higher frequencies (e.g. weekly) can be aggregated to data with lower frequencies (e.g yearly).\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAWDPT\"},{\"name\":\"validation_rules_without_groups\",\"displayName\":\"Validation rules lacking groups\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that are not member of at least one validation rule group\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWG\"},{\"name\":\"category_option_combos_disjoint\",\"displayName\":\"Category option combinations with disjoint associations.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with disjoint associations.\",\"introduction\":\"Under certain circumstances, category option combinations may exist in the system, but not have any direct association with category options which are associated with their category combination. This situation usually occurs when category options have been added to a category and then the category is added to a category combination. New category option combinations are created in the system at this point. If any of the category options are then removed in one of the underlying categories, a so-called disjoint category option combination may result. This is a category option combination which has no direct association with any category options in any of the categories associated with the category combination.\",\"recommendation\":\"The disjoint category option combinations should be removed from the system if possible. However, if any data is associated with the category option combination, a determination will need to be made in regards of how to deal with this data.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"COCD\"},{\"name\":\"options_sets_unused\",\"displayName\":\"Option sets which are not used\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Option sets which are not used\",\"introduction\":\"Option sets should be used for some purpose. The may be used by data elements, comments, attributes, or tracked entity attributes.\",\"recommendation\":\"Consider deleting unused option sets, or alternatively, ensure that they have been properly assigned.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSU\"},{\"name\":\"catoptioncombos_no_catcombo\",\"displayName\":\"Category options combinations with no category combination.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options combinations with no category combination.\",\"introduction\":\"All category option combinations should be associated with a category combo. In certain cases, when category combinations are deleted,the linkage between a category option combination and a category combination may become corrupted.\",\"recommendation\":\"Check if any data is associated with the category option combination in question. Likely, the data should either be deleted or migrated to a valid category option combination. Any data which is associated with any of these category option combinations will not be available through either the data entry modules or any of the analytical apps.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CNC\"},{\"name\":\"data_elements_violating_exclusive_group_sets\",\"displayName\":\"Data elements with conflicting exclusive group sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are a members of more than one exclusive data element set belonging to the same data element group set\",\"recommendation\":\"Either remove the data element from all but one exclusive group set or consider if the set really should be an exclusive group set\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEVEGS\"},{\"name\":\"categories_same_category_options\",\"displayName\":\"Categories with the same category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with the same category options\",\"introduction\":\"Categories with the exact same category options should be considered to be merged. Categories with the exact same category options may be easily confused by users in analysis. The details view will provide a list of categories which have the exact same category options. For each duplicated category a number in parentheses such as (1) will indicate which categories belong to duplicated groups.\",\"recommendation\":\"If category combinations have already been created with duplicative categories,\\nit is recommended that you do not take any action, but rather ensure\\nthat users understand that there may be two category combinations which are duplicative.\\n\\nIf you choose to merge the duplicative category combinations, you would need to \\nremap all category option combinations from the category combo which you wish to \\nremove, to the one which you wish to keep. \\n\\nIf one of the categories is not in use in any category combination, it should\\nconsider to be removed from the system.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CSCO\"},{\"name\":\"visualizations_not_viewed_one_year\",\"displayName\":\"Visualizations which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Visualizations which have not been viewed in the past 12 months\",\"introduction\":\"Visualizations should be regularly viewed in the system. In many cases, users may create charts for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to charts being difficult to find in the visualization app.\",\"recommendation\":\"Unused charts can be removed directly using the data visualization app by a user with sufficient authority. If charts are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"visualizations\",\"isSlow\":false,\"code\":\"VNVOY\"},{\"name\":\"categories_one_default_category_option\",\"displayName\":\"Only one default category option should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option with UID \\\"xYerKDKCefk\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option or move all references to category option \\\"xYerKDKCefk\\\" and then remove the unused conflicting category option.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CODCO\"},{\"name\":\"orgunits_multiple_spaces\",\"displayName\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"introduction\":\"Names and/or shortnames of organisation units should not contain multiple spaces. They are superfluous and may complicate the location of organisation units when they are searched.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the multiple spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMS\"},{\"name\":\"data_elements_aggregate_abandoned\",\"displayName\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"introduction\":\"Data elements are considered to be abandoned when they have not been edited in at least 100 days and do not have any data values associated with them. Often, these are the result of new or changed configurations that have been abandoned at some point.\",\"recommendation\":\"Data elements that have no data associated with them and which there are no plans to start using for data collection should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAA\"},{\"name\":\"data_elements_assigned_to_data_sets_with_different_period_types\",\"displayName\":\"Data elements assigned to data sets with different period type\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are assigned to at least one data set that has a different period type\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEATDSWDPT\"},{\"name\":\"data_elements_aggregate_no_groups\",\"displayName\":\"Aggregate data elements not in any data element groups.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not in any data element groups.\",\"introduction\":\"All data elements should be in a data element group. This allows users to find the data elements more easily in analysis\\n apps and also contributes to having more complete data element group sets.\\n Maintenance operations can also be made more efficient by applying\\n bulk settings (ex. sharing) to all data elements within a data element group.\",\"recommendation\":\"Data elements that are not in a data element group should be added to a relevant data element group. If the data elements are not needed, they should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANG\"},{\"name\":\"category_options_shared_within_category_combo\",\"displayName\":\"Category combinations with categories which share the same category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category combinations with categories which share the same category options.\",\"introduction\":\"As a general rule, category options should be reused where possible between categories. The exception to this rule however, is when you have a category combo with multiple categories, and within those categories, a category option is shared. As a simple example, lets say you have a category called \\\"Sex\\\" with options \\\"Male\\\"\\\", \\\"Female\\\" and \\\"Unknown\\\". There is also a second category called \\\"Age\\\" with options \\\"<15\\\", \\\"15+\\\", and \\\"Unknown\\\". A category combination called \\\"Age/Sex\\\" is then created with these two categories, which share the option \\\"Unknown\\\". This situation should be avoided, as it creates issues when analyzing data.\",\"recommendation\":\"The recommended approach to dealing with this situation is to create a new category combination, using two new categories. Using the example from the introduction, you should create two new category options called \\\"Unknown age\\\" and \\\"Unknown sex\\\". A new category combination can then be created with these new categories, which do not share category options. All data which is potentially associated with the old category combinations, would need to be reassigned to the new category option combinations. Any analytical objects which use the categories to be removed would also need to be updated.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"COSWCC\"},{\"name\":\"orgunits_null_island\",\"displayName\":\"Organisation units located within 100 km of Null Island (0,0).\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units located within 100 km of Null Island (0,0).\",\"introduction\":\"A common problem when importing coordinates is the inclusion of coordinates situated around the point of [Null Island](https://en.wikipedia.org/wiki/Null_Island). This is the point on the Earth's surface where the Prime Meridian and Equator intersect with a latitude of 0 and a longitude of 0. The point also happens to be situated currently in the middle of the ocean. This query identifies any points located within 100 km of the point having latitude and longitude equal to zero.\",\"recommendation\":\"Update the coordinates of the affected organization unit to the correct location.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONI\"},{\"name\":\"program_rule_actions_without_section\",\"displayName\":\"Program rules with actions lacking a program stage section\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a section but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWS\"},{\"name\":\"periods_3y_future\",\"displayName\":\"Periods which are more than three years in the future.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are more than three years in the future.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\nfar future. Different data entry clients may not properly validate for periods\\nwhich are in the future, and thus any periods in the future should be reviewed.\\nIn some cases, data may be valid for future dates, e.g. targets which are set for the\\nnext fiscal year.\",\"recommendation\":\"If any periods exist in the system in the future, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\\n\\nIn many cases, clients may mean to transmit\\ndata for January 2021, but due to data entry errors, January 2031 is selected. Thus,\\nany data in the far future should be investigated to ensure it does not result\\nfrom data entry errors.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"P3F\"},{\"name\":\"orgunits_trailing_spaces\",\"displayName\":\"Organisation units should not have trailing spaces.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have trailing spaces.\",\"introduction\":\"Trailing spaces in organisation units are superfluous.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the trailing spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OTS\"},{\"name\":\"validation_rule_groups_scarce\",\"displayName\":\"Validation rule should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Validation rule should have at least two members.\",\"introduction\":\"Generally validation rule groups should be composed of multiple validation rules.\",\"recommendation\":\"Considering removing groups which are empty or which have a single member. Alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"validationRuleGroups\",\"isSlow\":false,\"code\":\"VRGS\"},{\"name\":\"indicators_with_invalid_numerator\",\"displayName\":\"Indicators with invalid numerator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators where the numerator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWIN\"},{\"name\":\"categories_one_default_category_combo\",\"displayName\":\"Only one default category combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category combo should exist\",\"introduction\":\"There should only exist one category combo with name and code \\\"default\\\".\",\"recommendation\":\"Only the category combo with UID \\\"bjDvmb4bfuf\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category combo or move all references to category combo \\\"bjDvmb4bfuf\\\" and then remove the unused conflicting category combo.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CODCC\"},{\"name\":\"data_elements_without_data_sets\",\"displayName\":\"Data elements lacking data Sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data sets\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWDS\"},{\"name\":\"category_combos_unused\",\"displayName\":\"Category combinations not used by other metadata objects\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category combinations not used by other metadata objects\",\"introduction\":\"Category combinations which are unused in any datasets, data elements, programs or data approval workflows may be safe to delete. In some cases, category combinations may be created, but never actually used for anything. This may lead to situations where users and implementers are confused about which category combination should actually be used. In general, it should be safe to delete unused category combinations, except in situations where existing data has been associated with them.\",\"recommendation\":\"Check to see if any data is associated with the category combination before attempting to delete it. Category combinations which are not currently used in any metadata objects may still be valid for legacy reasons, but they should be reviewed to be sure they are still needed. Otherwise, it should be safe to remove them from the system.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCU\"},{\"name\":\"category_option_groups_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option groups should be composed of at least two category options. There can however be legitimate cases when a single category option is part of a group, especially in cases where there is a direct mapping between age bands and category options.\",\"recommendation\":\"Considering removing groups with zero or one category options, or alternatively, add additional category options to the group to make it more useful.\",\"issuesIdType\":\"categoryOptionGroups\",\"isSlow\":false,\"code\":\"COGS\"},{\"name\":\"datasets_empty\",\"displayName\":\"Datasets with no data elements.\",\"section\":\"Data sets\",\"severity\":\"WARNING\",\"description\":\"Datasets with no data elements.\",\"introduction\":\"All datasets should have data elements assigned to them.\",\"recommendation\":\"Remove empty datasets, or alternatively, assign data elements to them.\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DE\"},{\"name\":\"indicators_without_groups\",\"displayName\":\"Indicators lacking groups\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that do not have at least one group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWG\"},{\"name\":\"orgunit_groups_scarce\",\"displayName\":\"Organisation unit groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Organisation unit groups should have at least two members.\",\"introduction\":\"Generally, organisation unit groups should be composed of multiple organisation units.\",\"recommendation\":\"Considering removing groups with zero or one organisation units, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OGS\"},{\"name\":\"program_rules_without_priority\",\"displayName\":\"Program rules lacking a priority setting\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules with action type \\\"assign\\\" where the rule priority is not yet set\",\"recommendation\":\"Set a priority for the program rule(s)\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWP\"},{\"name\":\"categories_unique_category_combo\",\"displayName\":\"Different category combinations should not have the exact same combination of categories.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Different category combinations should not have the exact same combination of categories.\",\"introduction\":\"Category combinations should be a unique combination of categories. If two or more category combinations contain the exact same set of categories, this would be considered to be duplicative and potentially confusing to users.\",\"recommendation\":\"One category combo is kept, all references are updated to use this combo and other combos are removed.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CUCC\"},{\"name\":\"indicator_group_sets_scarce\",\"displayName\":\"Indicator groups sets should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups sets should have at least two members.\",\"introduction\":\"All indicator group set should be composed of at least two indicators groups.\",\"recommendation\":\"Considering removing indicator group sets with less than two indicator groups, or alternatively, add additional indicator groups to the indicator group set to make it more useful.\",\"issuesIdType\":\"indicatorGroupSets\",\"isSlow\":false,\"code\":\"IGSS\"},{\"name\":\"validation_rules_with_invalid_right_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a right side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWIRSE\"},{\"name\":\"data_elements_aggregate_aggregation_operator\",\"displayName\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"introduction\":\"Data elements which are not numeric (text, dates, etc) should have an aggregation operator set to NONE. Data elements which are able to be aggregated (numbers, integers, etc) should have an aggregation operator set to something other than NONE, most often SUM.\",\"recommendation\":\"Open the affected data elements in the Maintenance App and change their aggregation type to an appropriate type. Alternatively, these can be altered via the API.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAAO\"},{\"name\":\"org_unit_groups_without_group_sets\",\"displayName\":\"Organisation unit groups lacking group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation unit groups that aren't member of at least one organisation unit group set\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OUGWGS\"},{\"name\":\"program_rule_variables_without_attribute\",\"displayName\":\"Program rule variables lacking an attribute\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring an attribute source but that is not yet linked to an attribute\",\"recommendation\":\"Assign an attribute to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWA\"},{\"name\":\"program_indicator_groups_scarce\",\"displayName\":\"Program indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Program indicator groups should have at least two members.\",\"introduction\":\"Program indicator groups should generally be composed of two or more program indicators.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"programIndicatorGroups\",\"isSlow\":false,\"code\":\"PIGS\"},{\"name\":\"program_rules_no_expression\",\"displayName\":\"Program rules with no expression.\",\"section\":\"Program rules\",\"severity\":\"WARNING\",\"description\":\"Program rules with no expression.\",\"introduction\":\"All program rules should have an expression. Expressions are used by program rules to determine when they should be triggered. Program rules with no expression have no purpose.\",\"recommendation\":\"Using the DHIS2 user interface, assign an expression to each of the program rules which is missing one. Otherwise, if it is safe to delete the program rule with no expression, it is recommended to remove it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNE\"},{\"name\":\"data_elements_aggregate_no_data\",\"displayName\":\"Aggregate data elements with NO data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements with NO data values.\",\"introduction\":\"Data elements should generally always be associated with data values. If data elements exist in a data set which is active, but there are no data values associated with them, they may not be part of the data entry screens. Alternatively, the data element may have been added but never been associated with a dataset.\",\"recommendation\":\"Consider removing data elements with no data values.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAND\"},{\"name\":\"program_indicators_without_expression\",\"displayName\":\"Program indicators lacking an expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have no expression set yet\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWE\"},{\"name\":\"periods_distant_past\",\"displayName\":\"Periods which are in the distant past.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are in the distant past.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\ndistant past. Different data entry clients may not properly validate for periods\\nwhich are in the distant past, and thus these periods should be triaged to ensure\\nthat data has not been entered against them by mistake.\",\"recommendation\":\"If any periods exist in the system in the distant past, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PDP\"},{\"name\":\"org_units_being_orphaned\",\"displayName\":\"Orphaned organisation units\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that aren't level 1 units but that lack a parent so that they are not connected to the rest of the organisation tree\",\"recommendation\":\"Find (or create) and set the correct parent for the orphaned organisation unit(s). Eventually this is also caused by having set the wrong level.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUBO\"},{\"name\":\"cocs_wrong_cardinality\",\"displayName\":\"Category option combinations with incorrect cardinality.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with incorrect cardinality.\",\"introduction\":\"All category option combinations should have exactly the same number of category option associations as the number of categories in the category combination. If there are two categories in a category combination, then every category option combination should have exactly two category options.\\nCategory option combinations with the incorrect cardinality are usually the result of a category combination having been created, and then modified later. Suppose that two categories are used to create a category combination. Each category option combination of this category combo will have two category options. If an additional category is added to the category combination later, new category option combinations with three category options will be created and associated with this category combo. The original category option combinations would be considered to be invalid.\",\"recommendation\":\"Category option combinations which have an incorrect cardinality will be ignored by the DHIS2 analytics system and should be removed.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CWC\"},{\"name\":\"dashboards_not_viewed_one_year\",\"displayName\":\"Dashboards which have not been actively viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Dashboards which have not been actively viewed in the past 12 months\",\"introduction\":\"Dashboards should be regularly viewed in the system. In many cases, users may create dashboards for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to useful dashboards being difficult to find. This check identifies any dashboards which have not been viewed in the past year.\",\"recommendation\":\"Unused dashboards can be deleted in the entirety from the main dashboard app by clicking on the \\\"Edit\\\" button and choosing \\\"Delete\\\". Note that this process cannot be undone! Another option would be to alter the sharing of the dashboard so that it is not visible to any user.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNVOY\"}]", - "responseSize": 66022, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - } -] diff --git a/cypress/fixtures/network/40/users_should_be_able_to_navigate_back_to_the_job_list.json b/cypress/fixtures/network/40/users_should_be_able_to_navigate_back_to_the_job_list.json deleted file mode 100644 index 67a307ec1..000000000 --- a/cypress/fixtures/network/40/users_should_be_able_to_navigate_back_to_the_job_list.json +++ /dev/null @@ -1,305 +0,0 @@ -[ - { - "path": "/api/40/systemSettings/helpPageLink", - "featureName": "Users should be able to navigate back to the job list", - "static": false, - "count": 9, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"helpPageLink\":\"https://dhis2.github.io/dhis2-docs/master/en/user/html/dhis2_user_manual_en.html\"}", - "responseSize": 99, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations?fields=*&paging=false", - "featureName": "Users should be able to navigate back to the job list", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"jobConfigurations\":[{\"href\":\"/40/jobConfigurations/sHMedQF7VYa\",\"name\":\"Credentials expiry alert\",\"created\":\"2017-12-08T12:45:18.351\",\"lastUpdated\":\"2023-02-28T15:24:55.737\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"CREDENTIALS_EXPIRY_ALERT\",\"cronExpression\":\"0 0 2 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.668\",\"lastRuntimeExecution\":\"00:00:00.062\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Credentials expiry alert\",\"favorite\":false,\"id\":\"sHMedQF7VYa\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/YvAwAmrqAtN\",\"name\":\"Dataset notification\",\"created\":\"2017-12-08T12:45:18.355\",\"lastUpdated\":\"2023-02-28T15:24:55.810\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"DATA_SET_NOTIFICATION\",\"cronExpression\":\"0 0 2 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.668\",\"lastRuntimeExecution\":\"00:00:00.137\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Dataset notification\",\"favorite\":false,\"id\":\"YvAwAmrqAtN\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/BFa3jDsbtdO\",\"name\":\"Data statistics\",\"created\":\"2017-12-08T12:45:18.337\",\"lastUpdated\":\"2023-02-28T15:24:55.877\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"DATA_STATISTICS\",\"cronExpression\":\"0 0 2 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.668\",\"lastRuntimeExecution\":\"00:00:00.207\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Data statistics\",\"favorite\":false,\"id\":\"BFa3jDsbtdO\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/pd6O228pqr0\",\"name\":\"File resource clean up\",\"created\":\"2017-12-08T12:45:18.317\",\"lastUpdated\":\"2023-02-28T15:24:55.839\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"FILE_RESOURCE_CLEANUP\",\"cronExpression\":\"0 0 2 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.669\",\"lastRuntimeExecution\":\"00:00:00.169\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"File resource clean up\",\"favorite\":false,\"id\":\"pd6O228pqr0\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/uwWCT2BMmlq\",\"name\":\"Remove expired or used reserved values\",\"created\":\"2021-06-10T12:37:25.034\",\"lastUpdated\":\"2023-02-28T15:24:55.923\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"REMOVE_USED_OR_EXPIRED_RESERVED_VALUES\",\"cronExpression\":\"0 0 2 ? * *\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.668\",\"lastRuntimeExecution\":\"00:00:00.253\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Remove expired or used reserved values\",\"favorite\":false,\"id\":\"uwWCT2BMmlq\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/vt21671bgno\",\"name\":\"System version update check notification\",\"created\":\"2021-12-21T12:31:00.047\",\"lastUpdated\":\"2023-02-28T16:33:40.425\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"SYSTEM_VERSION_UPDATE_CHECK\",\"cronExpression\":\"44 8 3 ? * *\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T03:08:44.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T16:33:39.585\",\"lastRuntimeExecution\":\"00:00:00.838\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"System version update check notification\",\"favorite\":false,\"id\":\"vt21671bgno\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/fUWM1At1TUx\",\"name\":\"User account expiry alert\",\"created\":\"2021-09-01T07:24:20.394\",\"lastUpdated\":\"2023-02-28T15:24:55.747\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"ACCOUNT_EXPIRY_ALERT\",\"cronExpression\":\"0 0 2 ? * *\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.669\",\"lastRuntimeExecution\":\"00:00:00.071\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"User account expiry alert\",\"favorite\":false,\"id\":\"fUWM1At1TUx\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/Js3vHn2AVuG\",\"name\":\"Validation result notification\",\"created\":\"2017-12-08T12:45:18.346\",\"lastUpdated\":\"2023-02-27T16:37:17.320\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"VALIDATION_RESULTS_NOTIFICATION\",\"cronExpression\":\"0 0 7 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-02-28T07:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-27T14:55:13.329\",\"lastRuntimeExecution\":\"00:00:00.022\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Validation result notification\",\"favorite\":false,\"id\":\"Js3vHn2AVuG\",\"attributeValues\":[]}]}", - "responseSize": 6953, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations/jobTypes?fields=*&paging=false", - "featureName": "Users should be able to navigate back to the job list", - "static": false, - "count": 9, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"jobTypes\":[{\"name\":\"Data integrity\",\"jobType\":\"DATA_INTEGRITY\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"checks\",\"fieldName\":\"Checks\",\"persisted\":false,\"collectionName\":\"checks\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/dataIntegrity\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.parameters.DataIntegrityJobParameters$DataIntegrityReportType\",\"name\":\"type\",\"fieldName\":\"Type\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"REPORT\",\"SUMMARY\",\"DETAILS\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Resource table\",\"jobType\":\"RESOURCE_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Analytics table\",\"jobType\":\"ANALYTICS_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"skipPrograms\",\"fieldName\":\"Skip programs\",\"persisted\":false,\"collectionName\":\"skipPrograms\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/programs\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipResourceTables\",\"fieldName\":\"Skip resource tables\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Continuous analytics table\",\"jobType\":\"CONTINUOUS_ANALYTICS_TABLE\",\"schedulingType\":\"FIXED_DELAY\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"fullUpdateHourOfDay\",\"fieldName\":\"Full update hour of day\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Data sync\",\"jobType\":\"DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker programs data sync\",\"jobType\":\"TRACKER_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Event programs data sync\",\"jobType\":\"EVENT_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Meta data sync\",\"jobType\":\"META_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"trackerProgramPageSize\",\"fieldName\":\"Tracker program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"eventProgramPageSize\",\"fieldName\":\"Event program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"dataValuesPageSize\",\"fieldName\":\"Data values page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Aggregate data exchange\",\"jobType\":\"AGGREGATE_DATA_EXCHANGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"dataExchangeIds\",\"fieldName\":\"Data exchange ids\",\"persisted\":false,\"collectionName\":\"dataExchangeIds\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/aggregateDataExchanges\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Send scheduled message\",\"jobType\":\"SEND_SCHEDULED_MESSAGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Program notifications\",\"jobType\":\"PROGRAM_NOTIFICATIONS\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Monitoring\",\"jobType\":\"MONITORING\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"validationRuleGroups\",\"fieldName\":\"Validation rule groups\",\"persisted\":false,\"collectionName\":\"validationRuleGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/validationRuleGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"sendNotifications\",\"fieldName\":\"Send notifications\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"persistResults\",\"fieldName\":\"Persist results\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Push analysis\",\"jobType\":\"PUSH_ANALYSIS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"pushAnalysis\",\"fieldName\":\"Push analysis\",\"persisted\":false,\"collectionName\":\"pushAnalysis\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/pushAnalysis\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker search optimization\",\"jobType\":\"TRACKER_SEARCH_OPTIMIZATION\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"attributes\",\"fieldName\":\"Attributes\",\"persisted\":false,\"collectionName\":\"attributes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/trackedEntityAttributes/indexable\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipIndexDeletion\",\"fieldName\":\"Skip index deletion\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Predictor\",\"jobType\":\"PREDICTOR\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictors\",\"fieldName\":\"Predictors\",\"persisted\":false,\"collectionName\":\"predictors\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictors\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictorGroups\",\"fieldName\":\"Predictor groups\",\"persisted\":false,\"collectionName\":\"predictorGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictorGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Disable inactive users\",\"jobType\":\"DISABLE_INACTIVE_USERS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"inactiveMonths\",\"fieldName\":\"Inactive months\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"reminderDaysBefore\",\"fieldName\":\"Reminder days before\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Test\",\"jobType\":\"TEST\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Long\",\"name\":\"waitMillis\",\"fieldName\":\"Wait millis\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"stages\",\"fieldName\":\"Stages\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtStage\",\"fieldName\":\"Fail at stage\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"items\",\"fieldName\":\"Items\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtItem\",\"fieldName\":\"Fail at item\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Long\",\"name\":\"itemDuration\",\"fieldName\":\"Item duration\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.String\",\"name\":\"failWithMessage\",\"fieldName\":\"Fail with message\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"failWithException\",\"fieldName\":\"Fail with exception\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.JobProgress$FailurePolicy\",\"name\":\"failWithPolicy\",\"fieldName\":\"Fail with policy\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"PARENT\",\"FAIL\",\"SKIP_STAGE\",\"SKIP_ITEM\",\"SKIP_ITEM_OUTLIER\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"runStagesParallel\",\"fieldName\":\"Run stages parallel\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]}]}", - "responseSize": 24994, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/analytics/tableTypes", - "featureName": "Users should be able to navigate back to the job list", - "static": false, - "count": 9, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"]", - "responseSize": 122, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/pushAnalysis?paging=false", - "featureName": "Users should be able to navigate back to the job list", - "static": false, - "count": 9, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"pushAnalysis\":[{\"displayName\":\"Immunization Key Indicators Monthly Report\",\"id\":\"jtcMAKhWwnc\"}]}", - "responseSize": 98, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/validationRuleGroups?paging=false", - "featureName": "Users should be able to navigate back to the job list", - "static": false, - "count": 9, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"validationRuleGroups\":[{\"displayName\":\"ANC\",\"id\":\"UP1lctvalPn\"},{\"displayName\":\"Commodities\",\"id\":\"xcpl667ccfF\"},{\"displayName\":\"Critical event\",\"id\":\"xWtt9c443Lt\"},{\"displayName\":\"District stock\",\"id\":\"mEtdbIDDhix\"},{\"displayName\":\"Epidemic disease outbreak\",\"id\":\"y2yQIm79VTW\"},{\"displayName\":\"Facility Stock\",\"id\":\"SqyI8HKqI4g\"},{\"displayName\":\"Immunisation\",\"id\":\"UiOSY1iIdub\"},{\"displayName\":\"Infectious disease outbreak\",\"id\":\"WUZXEFdn1PX\"},{\"displayName\":\"Malaria\",\"id\":\"zlaSof6qLqF\"},{\"displayName\":\"Population\",\"id\":\"D3bItmtBpsW\"},{\"displayName\":\"TB\",\"id\":\"IMF6p1MqoHl\"},{\"displayName\":\"Testing\",\"id\":\"nMDkAJXsmlR\"}]}", - "responseSize": 628, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictors?paging=false", - "featureName": "Users should be able to navigate back to the job list", - "static": false, - "count": 9, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictors\":[{\"displayName\":\"Malaria Outbreak Threshold\",\"id\":\"tEK1OEqS4O1\"}]}", - "responseSize": 80, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictorGroups?paging=false", - "featureName": "Users should be able to navigate back to the job list", - "static": false, - "count": 9, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictorGroups\":[]}", - "responseSize": 22, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/dataIntegrity", - "featureName": "Users should be able to navigate back to the job list", - "static": false, - "count": 9, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[{\"name\":\"orgunits_invalid_geometry\",\"displayName\":\"Organisation units with invalid geometry.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with invalid geometry.\",\"introduction\":\"DHIS2 uses the PostGIS database extension to manage the geographical information associated\\nwith organisation units. There are various reasons why geometries may be considered to be\\ninvalid including self-inclusions, self-intersections, and sliver polygons. Please see the\\nPostGIS documentation for a more in-depth discussion on this topic.\\n\\nInvalid geometry is not always a problem and may be able to be ignored, however, it has been observed in certain systems\\nthat this can lead to problems in analytics. If you are experiencing issues when generating analytics\\ntables, and see errors related to invalid geometries, you will need to either remove the invalid geometry,\\nor fix it.\",\"recommendation\":\"Update the geometry of the affected organisation units to a valid geometry. It may be possible to use the PostGIS function `ST_MakeValid` to automatically fix the problem. However, in other cases the geometry may need to be edited in a GIS tool, and then updated again in DHIS2.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OIG\"},{\"name\":\"data_elements_without_groups\",\"displayName\":\"Data elements lacking groups\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data element groups\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWG\"},{\"name\":\"orgunit_group_sets_excess_groups\",\"displayName\":\"Organisation units which belong to multiple groups in a group set.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which belong to multiple groups in a group set.\",\"introduction\":\"Organisation units should belong to exactly one group within each organisation unit group set of which they are a member. If the organisation unit belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the organisation units in the details list to exactly one group within each group set membership.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OGSEG\"},{\"name\":\"validation_rules_missing_value_strategy_null\",\"displayName\":\"All validation rule expressions should have a missing value strategy.\",\"section\":\"Validation rules\",\"severity\":\"SEVERE\",\"description\":\"All validation rule expressions should have a missing value strategy.\",\"introduction\":\"Validation rules are composed of a left and right side expression. In certain systems the missing value strategy may not be defined. This may lead to an exception during validation rule analysis. The affected validation rules should be corrected to with an appropriate missing value strategy.\",\"recommendation\":\"Using the results of the the details SQL view, identify the affected validation rules and which side of the rule the missing value strategy has not been specified. Using the maintenance app, make the appropriate corrections and save the rule.\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRMVSN\"},{\"name\":\"category_combos_being_invalid\",\"displayName\":\"Invalid Category-combos\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Lists all category-combos that are invalid\",\"recommendation\":\"Make sure the category combo is assigned to at least one category and that all categories have category options \",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCBI\"},{\"name\":\"data_elements_in_data_set_not_in_form\",\"displayName\":\"Data sets with data elements not in data entry form\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that have data elements which are neither a member of the set's data entry form nor a member of the sets section\",\"recommendation\":\"Either remove the data elements in question or make them a member of the set's form or section\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DEIDSNIF\"},{\"name\":\"categories_no_options\",\"displayName\":\"Categories with no category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with no category options\",\"introduction\":\"Categories should always have at least one category option.\",\"recommendation\":\"Any categories without category options should either be removed from the system if they are not in use. Otherwise, appropriate category options should be added to the category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CNO\"},{\"name\":\"data_elements_aggregate_no_analysis\",\"displayName\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"introduction\":\"All aggregate data elements that are captured in DHIS2 should be used to produce some type of analysis output (charts, maps, tables). This can be by using them directly in an output, or by having them contribute to an indicator calculation that is used an output.\",\"recommendation\":\"Data elements that are not routinely being reviewed in analysis, either directly or indirectly through indicators, should be reviewed to determine if they still need to be collected. If these are meant to be used in routine review, then associated outputs should be created using them. If these data elements are not going to be used for any type of information review, consideration should be made to either archive them or delete them.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANA\"},{\"name\":\"indicators_duplicated_terms\",\"displayName\":\"Indicators with the same terms.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same terms.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check attempts to identify indicators with the same formulas, regardless of the order of their their terms. Suppose you have an indicator which calculates total ANC attendance: ANC Total = ANC1 + ANC2 + ANC3 Suppose then another indicator exists in the system, which has been defined as: ANC Totals = ANC3 + ANC2 + ANC1 These two indicators are equivalent, and will produce the same result, and are thus considered to be duplicated.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Considered deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IDT\"},{\"name\":\"program_rules_no_action\",\"displayName\":\"Program rules with no action.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules with no action.\",\"introduction\":\"All program rules should have an action.\",\"recommendation\":\"Using the DHIS2 user interface, assign an action to each of the program rules which is missing one. Alternatively, if the program rule is not in use, then consider removing it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNA\"},{\"name\":\"orgunits_compulsory_group_count\",\"displayName\":\"Organisation units that are not in all compulsory orgunit group sets\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Orgunits that are not in all compulsory orgunit group sets\",\"introduction\":\"If any organisation unit groups have been marked as compulsory, each and every organisation unit should belong to exactly one group within each compulsory organisation unit group set. Assume we have created a group set called \\\"Ownership\\\" with two groups \\\"Public\\\" and \\\"Private\\\". Each and every organisation unit contained in the hierarchy must belong to either Public or Private (but not both). When organisation unit are not part of a group set, results in the analytics apps will not be correct if the organisation unit group set is used for aggregation.\",\"recommendation\":\"For each of the organisation units identified in the details query, you should assign the appropriate organisation unit group within the group set. Alternatively, if the group set should not be compulsory, you should change this attribute.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OCGC\"},{\"name\":\"orgunits_no_coordinates\",\"displayName\":\"Organisation units with no coordinates.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with no coordinates.\",\"introduction\":\"Ideally, all organisation units contained in the DHIS2 hierarchy should have a valid\\nset of coordinates. Usually for all organisation units above the facility level,\\nthese coordinates should be a polygon which provides the boundary of the organisation\\nunit. For facilities, these are usually represented as point coordinates.\\n\\nThere can obviously be exceptions to this rule. Mobile health facilities may not have\\na fixed location. Community health workers or wards below the facility level\\nmay also not have a defined or definable coordinate.\\n\\nThis check is intended to allow you to review all organisation units which do\\nnot have any coordinates and make a determination as to whether they should be updated.\",\"recommendation\":\"Where appropriate, update the geometry of each organisation unit with a valid geometry.\\nYou may need to contact the appropriate local government office to obtain a copy\\nof district boundaries, commonly referred to as \\\"shape files\\\". Another possibility\\nis to use freely available boundary files from GADM (https://gadm.org)\\n\\nIf facilities are missing coordinates, it may be possible to obtain these from\\nthe facility staff using their smart phone to get the coordinates. Images\\nfrom Google Maps can also often be used to estimate the position of a facility,\\nassuming that you have good enough resolution and local knowledge of where\\nit is located.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONC\"},{\"name\":\"data_sets_not_assigned_to_org_units\",\"displayName\":\"Data sets not assigned to organisation units\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that are not assigned to any organisation units\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DSNATOU\"},{\"name\":\"dashboards_no_items\",\"displayName\":\"Dashboards with no items.\",\"section\":\"Dashboards\",\"severity\":\"INFO\",\"description\":\"Dashboards with no items.\",\"introduction\":\"All dashboards should have content on them. Dashboards without any content do not serve any purpose, and can make it more difficult to find relevant dashboards with content.\",\"recommendation\":\"Dashboards without content that have not been modified in the last 14 days should be considered for deletion.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNI\"},{\"name\":\"orgunits_same_name_and_parent\",\"displayName\":\"Organisation units should not have the same name and parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have the same name and parent.\",\"introduction\":\"Organisation units may have exactly the same name. This may become confusing to users, particularly if the organisation unit has the same name and same parent. This can easily lead to data entry or analysis mistakes as users have no way to distinguish between the two organisation units.\",\"recommendation\":\"Rename identically named organisation units which share the same parent using the maintenance app.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OSNAP\"},{\"name\":\"indicators_not_grouped\",\"displayName\":\"Indicators not in any groups.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not in any groups.\",\"introduction\":\"All indicators should be in an indicator group. This allows users to find the indicators more easily in analysis apps and also contributes to having more complete indicators group sets. Maintenance operations can also be made more efficient by applying bulk settings (ex. sharing, filtering) to all indicators within an indicator group.\",\"recommendation\":\"Indicators that are not in a indicator group should be added to a relevant indicator group. If the indicators are not needed, they should be deleted.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"ING\"},{\"name\":\"category_option_group_sets_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option group sets should be composed of at least two category option groups.\",\"recommendation\":\"Considering removing groups with zero or one category option groups, or alternatively, add additional category option groups to the group set to make it more useful.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSS\"},{\"name\":\"org_units_without_groups\",\"displayName\":\"Organisation units lacking groups\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are not connected to at least one group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWG\"},{\"name\":\"data_elements_excess_groupset_membership\",\"displayName\":\"Data elements which belong to multiple groups in a group set.\",\"section\":\"data_elements\",\"severity\":\"SEVERE\",\"description\":\"Data elements which belong to multiple groups in a group set.\",\"introduction\":\"Data elements should belong to exactly one group within each data element group set of which they are a member. If the data element belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the data elements in the details list to exactly one data element group within each group set.\",\"issuesIdType\":\"data_elements_aggregate\",\"isSlow\":false,\"code\":\"DEEGM\"},{\"name\":\"data_element_groups_scarce\",\"displayName\":\"Data element groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Data element groups should have at least two members.\",\"introduction\":\"All data element groups should be composed of at least two data elements.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"dataElementGroups\",\"isSlow\":false,\"code\":\"DEGS\"},{\"name\":\"orgunits_not_contained_by_parent\",\"displayName\":\"Organisation units with point coordinates should be contained by their parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with point coordinates should be contained by their parent.\",\"introduction\":\"Facilities are often represented as points in the DHIS2 hierarchy. Their parent organisation units geometry should contain all facilities which have been associated with them.\",\"recommendation\":\"Often boundary files are simplified when they are uploaded into DHIS2. This process may result in\\nfacilities which are located close to the border of a given district to fall outside of the district\\nwhen the boundary is simplified. This is considered to be more of a cosmetic problem for most DHIS2\\ninstallations, but could become an issue if any geospatial analysis is attempted using the\\nboundaries and point coordinates.\\n\\nIn cases where the facility falls outside of its parent's boundary\\nyou should confirm that the coordinates are correct. If the location is close to the boundary, you\\nmay want to reconsider how the boundary files have been simplified. Otherwise, if the location of\\nthe facility is completely incorrect, it should be rectified.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONCBP\"},{\"name\":\"program_rules_message_no_template\",\"displayName\":\"Program rules actions which should send or schedule a message without a message template.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules actions which should send or schedule a message without a message template.\",\"introduction\":\"Program rule actions of type \\\"Send message\\\" or \\\"Schedule message\\\" should have an associated message template.\",\"recommendation\":\"Using the DHIS2 user interface, assign a message template to each of the program rule actions which send or schedule messages but which does not have an association with a message template.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRMNT\"},{\"name\":\"indicators_with_invalid_denominator\",\"displayName\":\"Indicators with invalid denominator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"List all indicators where the denominator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWID\"},{\"name\":\"indicator_types_duplicated\",\"displayName\":\"Indicator types with the same factor.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicator types with the same factor.\",\"introduction\":\"Indicators can be assigned a factor which is multiplied by the indicator's value. For example, if you create a percentage based indicator, you can assign the indicator a factor of 100, which would be multiplied by the actual value of the indicator calculated by DHIS2. In general, having multiple indicator types with the same factor is not recommended. It is duplicative, and may lead to confusion.\",\"recommendation\":\"Duplicated indicator types should consider to be removed from the system. Consider choosing one of the duplicated indicator types as the one to keep, and then update all indicators which share the same factor to this indicator type. The duplicated indicator types can then be removed from the system.\",\"issuesIdType\":\"indicatorTypes\",\"isSlow\":false,\"code\":\"ITD\"},{\"name\":\"options_sets_empty\",\"displayName\":\"Empty option sets\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Empty option sets\",\"introduction\":\"All option sets should generally include at least two items. Empty option sets serve no purpose.\",\"recommendation\":\"Options should either be added to the option set, or the option set should be deleted.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSE\"},{\"name\":\"category_options_no_categories\",\"displayName\":\"Category options with no categories.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options with no categories.\",\"introduction\":\"All category options should belong to at least one category.\",\"recommendation\":\"Category options which are not part of any category should be removed or alternatively should be added to an appropriate category.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CONC\"},{\"name\":\"orgunits_orphaned\",\"displayName\":\"Orphaned organisation units.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"Orphaned organisation units.\",\"introduction\":\"Orphaned organisation units are those which have neither parents nor any children. This means that they have no relationship to the main organisation unit hierarchy. These may be created by faulty metadata imports or direct manipulation of the database.\",\"recommendation\":\"The orphaned organisation units should be assigned a parent or removed from the system. It is recommended to use the DHIS2 API for this task if possible. If this is not possible, then they may need to be removed through direct SQL on the DHIS2 database.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OO\"},{\"name\":\"indicators_with_identical_formulas\",\"displayName\":\"Indicators with identical formulas\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that have the identical formulas with at least one other indicator\",\"recommendation\":\"Check if the same indicator should be used everywhere and remove duplicates\",\"isSlow\":false,\"code\":\"IWIF\"},{\"name\":\"program_indicators_with_invalid_filters\",\"displayName\":\"Program indicators with invalid filter\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators with invalid filter expression\",\"recommendation\":\"Check that the expression evaluates to true/false\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIF\"},{\"name\":\"program_rules_without_condition\",\"displayName\":\"Program rules lacking a condition\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that have no condition yet\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWC\"},{\"name\":\"categories_one_default_category\",\"displayName\":\"Only one default category should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category should exist\",\"introduction\":\"There should only exist one category with name and code \\\"default\\\".\",\"recommendation\":\"Only the category with UID \\\"GLevLNI9wkl\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category or move all references to category \\\"GLevLNI9wkl\\\" and then remove the unused conflicting category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CODC\"},{\"name\":\"org_units_with_cyclic_references\",\"displayName\":\"Organisation units with cyclic references\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that have a conflicting parent hierarchy definition so that two organisation units become parent of each other or in other words they form a circular reference\",\"recommendation\":\"One of the organisation units must be setup wrongly and needs to be corrected so that a non-circular tree connects the two\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWCR\"},{\"name\":\"program_rule_variables_without_data_element\",\"displayName\":\"Program rule variables lacking a data element\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring a data element source but that is not yet linked to a data element\",\"recommendation\":\"Assign a data element to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWDE\"},{\"name\":\"org_units_violating_exclusive_group_sets\",\"displayName\":\"Organisation units with conflicting exclusive group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are members of multiple exclusive organisation unit groups\",\"recommendation\":\"Remove the organisation unit from all but one exclusive organisation unit group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUVEGS\"},{\"name\":\"program_rule_actions_without_data_object\",\"displayName\":\"Program rules with actions lacking a data object\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires either a data element or an attribute but is not connected either\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWDO\"},{\"name\":\"orgunits_openingdate_gt_closeddate\",\"displayName\":\"Organisation units which have an opening date later than the closed date.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which have an opening date later than the closed date.\",\"introduction\":\"If a closing date has been defined for an organisation unit, it should always be after the opening date (if one has been defined).\",\"recommendation\":\"Alter either the opening or closing date of all affected organisation units so that the closing date is after the opening date.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OOGC\"},{\"name\":\"categories_one_default_category_option_combo\",\"displayName\":\"Only one default category option combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option combo should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option combo with UID \\\"HllvX50cXC0\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option combo or move all references to category option combo \\\"HllvX50cXC0\\\" and then remove the unused conflicting category option combo.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CODCOC\"},{\"name\":\"category_option_group_sets_incomplete\",\"displayName\":\"Category option group sets which do not contain all category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option group sets which which do not contain all category options.\",\"introduction\":\"Category option group sets are composed of multiple category option groups, which are in turn composed of various category options. Category option group sets are often used to group related category options together for analytical purposes. Categories are also composed of category options. In general, but not always, category option group sets should contain all category options of related categories. Suppose we have the following two age categories. \\nAge coarse: <15, 15+ Age fine: <1, 1-10, 10-14,15-19,20-24,25-29,30-34,35-39,40-44,45+\\nIn many cases, related data elements may be disaggregated differently. This may be to differences in the way in which the data is collected, or as is often the case, the disaggregation has changed over time. If we wish to analyze data for two different data elements (one of which uses Age coarse and the other Age fine), we can create a category option group set consisting of two category option groups which should consist of the following category options from above. \\n<15: <15, <1, 1-10, 10-14 15+: 15+, 15-19,20-24,25-29,30-34,35-39,40-44,45+\\nSuppose that we happen to omit the category option \\\"<1\\\" from the \\\"<15\\\" category option group. This would result in potential aggregation errors in when using this category option group set in any analytical objects. The details of this metadata check would return the UID and name of the category option group set. The category and category option would also be provided. Using the previous example, we would see \\\"Age fine:{<1}\\\" in the metadata check details section, to indicate that the <1 category option which is part of the \\\"Age fine\\\" category, is missing from the category option group set.\\nThere may exist specific analytical reasons why specific category options are omitted from a category option group set. However,these should usually be special cases. This metadata check will identify cases where category option group sets appear to be incomplete, however you should carefully review any groups which appear in the details. \\nThis check may also produce a number of issues which may at first glance appear to be false positives. In some cases, category options may be added to a category by mistake. When category option group sets are created, this extraneous option may be omitted and thus appear as missing from the group set. \\nAnother observed situation is where an option like \\\"Unknown\\\" is used across unrelated categories. Suppose you have two categories \\\"Age (<15, 15+, Unknown)\\\" and \\\"Sex (Male,Female,Unknown)\\\". Similar to above, we create category option group sets like: \\n<15: <15 15+: 15+ Unknown: Unknown\\nThis metadata check will report that \\\"Male\\\" and \\\"Female\\\" are missing from the group set. This is because the same \\\"Unknown\\\" option is shared between two different, unrelated categories. It is recommended that if this situation occurs, that you create two separate \\\"Unknown\\\" category options like \\\"Unknown sex\\\" and \\\"Unknown age\\\".\",\"recommendation\":\"Using the maintenance app, assign the missing category options to an appropriate category option group within the affected category option group set.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSI\"},{\"name\":\"maps_not_viewed_one_year\",\"displayName\":\"Maps which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Maps which have not been viewed in the past 12 months\",\"introduction\":\"Maps should be regularly viewed in the system. In many cases, users may create maps for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system and being difficult to find in the Maps app.\",\"recommendation\":\"Unused maps can be removed directly using the Maps app by a user with sufficient authority. If maps are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"maps\",\"isSlow\":false,\"code\":\"MNVOY\"},{\"name\":\"indicators_exact_duplicates\",\"displayName\":\"Indicators with the same formula.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same formula.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check shows indicators which have the exact same formulas. Spaces which are present are removed prior to comparison.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Consider deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IED\"},{\"name\":\"indicators_violating_exclusive_group_sets\",\"displayName\":\"Indicators with conflicting exclusive group sets\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that are members of multiple exclusive indicator groups\",\"recommendation\":\"Remove the indicator from all but one exclusive indicator group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IVEGS\"},{\"name\":\"category_options_excess_groupset_membership\",\"displayName\":\"Category options which belong to multiple groups in a category option group set.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category options which belong to multiple groups in a category option group set.\",\"introduction\":\"Category options should belong to exactly one category option group which are part of a category option group set. If the category option belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the category option in the details list to exactly one category option group within each group set.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"COEGM\"},{\"name\":\"periods_duplicates\",\"displayName\":\"Duplicate Periods\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Lists all periods duplicates which have identical type and start date\",\"recommendation\":\"Make sure all database references are moved to one of the duplicates before deleting the unused duplicates\",\"isSlow\":false,\"code\":\"PD\"},{\"name\":\"program_rules_without_action\",\"displayName\":\"Program rules lacking an action\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that are not connected to any program rule action\",\"recommendation\":\"Connect the rule to an action or consider removing the rule\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWA\"},{\"name\":\"orgunits_multiple_roots\",\"displayName\":\"The organisation unit hierarchy should have a single root.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"The organisation unit hierarchy should have a single root.\",\"introduction\":\"Every DHIS2 system should have a single root organisation unit. This means a single organisation unit from which all other branches of the hierarchy are descendants.\",\"recommendation\":\"Once you have decided which organisation unit should be the real root of the organisation unit hierarchy, you should update the parent organisation unit. This can be done by using the DHIS2 API or my updating the value directly in the `organisationunit` table.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMR\"},{\"name\":\"validation_rules_with_invalid_left_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a left side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWILSE\"},{\"name\":\"program_rule_actions_without_stage_id\",\"displayName\":\"Program rules with actions lacking a program stage\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a program stage but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWSI\"},{\"name\":\"indicator_groups_scarce\",\"displayName\":\"Indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups should have at least two members.\",\"introduction\":\"All indicator groups should be composed of at least two indicators.\",\"recommendation\":\"Considering removing groups with zero or one groups, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"indicatorGroups\",\"isSlow\":false,\"code\":\"IGS\"},{\"name\":\"option_sets_wrong_sort_order\",\"displayName\":\"Option sets with possibly wrong sort order.\",\"section\":\"Option sets\",\"severity\":\"SEVERE\",\"description\":\"Option sets with possibly wrong sort order.\",\"introduction\":\"Option sets contain options which should be ordered sequentially. The sort_order property should always start with 1 and have a sequential sequence. If there are three options in the option set, then the sort order should be 1,2,3. \\nIn certain circumstances, options may be deleted from an option set, and the sort order may become corrupted. This may lead to a situation where it becomes impossible to update the option set from the maintenance app, and may lead to problems when attempting to using the option set in the data entry app.\",\"recommendation\":\"If it is possible to open the option set in the maintenance app, you can resort the option set, which should correct the problem. Another possible solution is to directly update the sort_order property of in the `optionset` table in the database, ensuring that a valid sequence is present for all options in the option set.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSWSO\"},{\"name\":\"periods_same_start_end_date\",\"displayName\":\"Periods with the same start and end dates\",\"section\":\"Periods\",\"severity\":\"CRITICAL\",\"description\":\"Periods with the same start and end dates\",\"introduction\":\"Different periods should not have exactly the same start and end date.\",\"recommendation\":\"All references to the duplicate periods should be removed from the system and reassigned. It is recommended to use the period with the lower periodid.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PSSED\"},{\"name\":\"program_indicators_with_invalid_expressions\",\"displayName\":\"Program indicators with invalid expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have an invalid expression\",\"recommendation\":\"Check that the expression evaluates to a number\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIE\"},{\"name\":\"program_rule_actions_without_notification\",\"displayName\":\"Program rule with actions lacking a notification template\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires a notification template but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWN\"},{\"name\":\"indicator_no_analysis\",\"displayName\":\"Indicators not used in analytical objects.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not used in analytical objects.\",\"introduction\":\"Indicators should be used to produce some type of analytical output (charts, maps, pivot tables). Note: indicators used in datasets to provide feedback during data entry are not counted as being used in analytical objects.\",\"recommendation\":\"Indicators that are not routinely being used for analysis should be reviewed to determine if they are useful and needed. If these are meant to be used for routine review, then associated outputs should be created using them. If these indicators are not going to be used for any type of information review, and are not used in data sets for feedback during data entry, consideration should be made to delete them.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"INA\"},{\"name\":\"user_groups_scarce\",\"displayName\":\"User groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"User groups should have at least two members.\",\"introduction\":\"Generally, user groups should contain two or more users.\",\"recommendation\":\"Considering removing user groups with less than two users, or alternatively, add additional users to the group to make it more useful.\",\"issuesIdType\":\"userGroups\",\"isSlow\":false,\"code\":\"UGS\"},{\"name\":\"data_elements_aggregate_with_different_period_types\",\"displayName\":\"Aggregate data elements which belong to datasets with different period types.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"SEVERE\",\"description\":\"Aggregate data elements which belong to datasets with different period types.\",\"introduction\":\"Data elements should not belong to datasets with different period types.\",\"recommendation\":\"If you need to collect data with different period types (e.g. weekly and monthly) you should use different data elements for each period type. In general, it is not recommended to collect data with different frequencies, since in general, data collected at higher frequencies (e.g. weekly) can be aggregated to data with lower frequencies (e.g yearly).\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAWDPT\"},{\"name\":\"validation_rules_without_groups\",\"displayName\":\"Validation rules lacking groups\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that are not member of at least one validation rule group\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWG\"},{\"name\":\"category_option_combos_disjoint\",\"displayName\":\"Category option combinations with disjoint associations.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with disjoint associations.\",\"introduction\":\"Under certain circumstances, category option combinations may exist in the system, but not have any direct association with category options which are associated with their category combination. This situation usually occurs when category options have been added to a category and then the category is added to a category combination. New category option combinations are created in the system at this point. If any of the category options are then removed in one of the underlying categories, a so-called disjoint category option combination may result. This is a category option combination which has no direct association with any category options in any of the categories associated with the category combination.\",\"recommendation\":\"The disjoint category option combinations should be removed from the system if possible. However, if any data is associated with the category option combination, a determination will need to be made in regards of how to deal with this data.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"COCD\"},{\"name\":\"options_sets_unused\",\"displayName\":\"Option sets which are not used\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Option sets which are not used\",\"introduction\":\"Option sets should be used for some purpose. The may be used by data elements, comments, attributes, or tracked entity attributes.\",\"recommendation\":\"Consider deleting unused option sets, or alternatively, ensure that they have been properly assigned.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSU\"},{\"name\":\"catoptioncombos_no_catcombo\",\"displayName\":\"Category options combinations with no category combination.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options combinations with no category combination.\",\"introduction\":\"All category option combinations should be associated with a category combo. In certain cases, when category combinations are deleted,the linkage between a category option combination and a category combination may become corrupted.\",\"recommendation\":\"Check if any data is associated with the category option combination in question. Likely, the data should either be deleted or migrated to a valid category option combination. Any data which is associated with any of these category option combinations will not be available through either the data entry modules or any of the analytical apps.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CNC\"},{\"name\":\"data_elements_violating_exclusive_group_sets\",\"displayName\":\"Data elements with conflicting exclusive group sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are a members of more than one exclusive data element set belonging to the same data element group set\",\"recommendation\":\"Either remove the data element from all but one exclusive group set or consider if the set really should be an exclusive group set\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEVEGS\"},{\"name\":\"categories_same_category_options\",\"displayName\":\"Categories with the same category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with the same category options\",\"introduction\":\"Categories with the exact same category options should be considered to be merged. Categories with the exact same category options may be easily confused by users in analysis. The details view will provide a list of categories which have the exact same category options. For each duplicated category a number in parentheses such as (1) will indicate which categories belong to duplicated groups.\",\"recommendation\":\"If category combinations have already been created with duplicative categories,\\nit is recommended that you do not take any action, but rather ensure\\nthat users understand that there may be two category combinations which are duplicative.\\n\\nIf you choose to merge the duplicative category combinations, you would need to \\nremap all category option combinations from the category combo which you wish to \\nremove, to the one which you wish to keep. \\n\\nIf one of the categories is not in use in any category combination, it should\\nconsider to be removed from the system.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CSCO\"},{\"name\":\"visualizations_not_viewed_one_year\",\"displayName\":\"Visualizations which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Visualizations which have not been viewed in the past 12 months\",\"introduction\":\"Visualizations should be regularly viewed in the system. In many cases, users may create charts for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to charts being difficult to find in the visualization app.\",\"recommendation\":\"Unused charts can be removed directly using the data visualization app by a user with sufficient authority. If charts are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"visualizations\",\"isSlow\":false,\"code\":\"VNVOY\"},{\"name\":\"categories_one_default_category_option\",\"displayName\":\"Only one default category option should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option with UID \\\"xYerKDKCefk\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option or move all references to category option \\\"xYerKDKCefk\\\" and then remove the unused conflicting category option.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CODCO\"},{\"name\":\"orgunits_multiple_spaces\",\"displayName\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"introduction\":\"Names and/or shortnames of organisation units should not contain multiple spaces. They are superfluous and may complicate the location of organisation units when they are searched.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the multiple spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMS\"},{\"name\":\"data_elements_aggregate_abandoned\",\"displayName\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"introduction\":\"Data elements are considered to be abandoned when they have not been edited in at least 100 days and do not have any data values associated with them. Often, these are the result of new or changed configurations that have been abandoned at some point.\",\"recommendation\":\"Data elements that have no data associated with them and which there are no plans to start using for data collection should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAA\"},{\"name\":\"data_elements_assigned_to_data_sets_with_different_period_types\",\"displayName\":\"Data elements assigned to data sets with different period type\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are assigned to at least one data set that has a different period type\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEATDSWDPT\"},{\"name\":\"data_elements_aggregate_no_groups\",\"displayName\":\"Aggregate data elements not in any data element groups.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not in any data element groups.\",\"introduction\":\"All data elements should be in a data element group. This allows users to find the data elements more easily in analysis\\n apps and also contributes to having more complete data element group sets.\\n Maintenance operations can also be made more efficient by applying\\n bulk settings (ex. sharing) to all data elements within a data element group.\",\"recommendation\":\"Data elements that are not in a data element group should be added to a relevant data element group. If the data elements are not needed, they should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANG\"},{\"name\":\"category_options_shared_within_category_combo\",\"displayName\":\"Category combinations with categories which share the same category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category combinations with categories which share the same category options.\",\"introduction\":\"As a general rule, category options should be reused where possible between categories. The exception to this rule however, is when you have a category combo with multiple categories, and within those categories, a category option is shared. As a simple example, lets say you have a category called \\\"Sex\\\" with options \\\"Male\\\"\\\", \\\"Female\\\" and \\\"Unknown\\\". There is also a second category called \\\"Age\\\" with options \\\"<15\\\", \\\"15+\\\", and \\\"Unknown\\\". A category combination called \\\"Age/Sex\\\" is then created with these two categories, which share the option \\\"Unknown\\\". This situation should be avoided, as it creates issues when analyzing data.\",\"recommendation\":\"The recommended approach to dealing with this situation is to create a new category combination, using two new categories. Using the example from the introduction, you should create two new category options called \\\"Unknown age\\\" and \\\"Unknown sex\\\". A new category combination can then be created with these new categories, which do not share category options. All data which is potentially associated with the old category combinations, would need to be reassigned to the new category option combinations. Any analytical objects which use the categories to be removed would also need to be updated.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"COSWCC\"},{\"name\":\"orgunits_null_island\",\"displayName\":\"Organisation units located within 100 km of Null Island (0,0).\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units located within 100 km of Null Island (0,0).\",\"introduction\":\"A common problem when importing coordinates is the inclusion of coordinates situated around the point of [Null Island](https://en.wikipedia.org/wiki/Null_Island). This is the point on the Earth's surface where the Prime Meridian and Equator intersect with a latitude of 0 and a longitude of 0. The point also happens to be situated currently in the middle of the ocean. This query identifies any points located within 100 km of the point having latitude and longitude equal to zero.\",\"recommendation\":\"Update the coordinates of the affected organization unit to the correct location.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONI\"},{\"name\":\"program_rule_actions_without_section\",\"displayName\":\"Program rules with actions lacking a program stage section\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a section but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWS\"},{\"name\":\"periods_3y_future\",\"displayName\":\"Periods which are more than three years in the future.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are more than three years in the future.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\nfar future. Different data entry clients may not properly validate for periods\\nwhich are in the future, and thus any periods in the future should be reviewed.\\nIn some cases, data may be valid for future dates, e.g. targets which are set for the\\nnext fiscal year.\",\"recommendation\":\"If any periods exist in the system in the future, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\\n\\nIn many cases, clients may mean to transmit\\ndata for January 2021, but due to data entry errors, January 2031 is selected. Thus,\\nany data in the far future should be investigated to ensure it does not result\\nfrom data entry errors.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"P3F\"},{\"name\":\"orgunits_trailing_spaces\",\"displayName\":\"Organisation units should not have trailing spaces.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have trailing spaces.\",\"introduction\":\"Trailing spaces in organisation units are superfluous.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the trailing spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OTS\"},{\"name\":\"validation_rule_groups_scarce\",\"displayName\":\"Validation rule should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Validation rule should have at least two members.\",\"introduction\":\"Generally validation rule groups should be composed of multiple validation rules.\",\"recommendation\":\"Considering removing groups which are empty or which have a single member. Alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"validationRuleGroups\",\"isSlow\":false,\"code\":\"VRGS\"},{\"name\":\"indicators_with_invalid_numerator\",\"displayName\":\"Indicators with invalid numerator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators where the numerator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWIN\"},{\"name\":\"categories_one_default_category_combo\",\"displayName\":\"Only one default category combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category combo should exist\",\"introduction\":\"There should only exist one category combo with name and code \\\"default\\\".\",\"recommendation\":\"Only the category combo with UID \\\"bjDvmb4bfuf\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category combo or move all references to category combo \\\"bjDvmb4bfuf\\\" and then remove the unused conflicting category combo.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CODCC\"},{\"name\":\"data_elements_without_data_sets\",\"displayName\":\"Data elements lacking data Sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data sets\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWDS\"},{\"name\":\"category_combos_unused\",\"displayName\":\"Category combinations not used by other metadata objects\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category combinations not used by other metadata objects\",\"introduction\":\"Category combinations which are unused in any datasets, data elements, programs or data approval workflows may be safe to delete. In some cases, category combinations may be created, but never actually used for anything. This may lead to situations where users and implementers are confused about which category combination should actually be used. In general, it should be safe to delete unused category combinations, except in situations where existing data has been associated with them.\",\"recommendation\":\"Check to see if any data is associated with the category combination before attempting to delete it. Category combinations which are not currently used in any metadata objects may still be valid for legacy reasons, but they should be reviewed to be sure they are still needed. Otherwise, it should be safe to remove them from the system.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCU\"},{\"name\":\"category_option_groups_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option groups should be composed of at least two category options. There can however be legitimate cases when a single category option is part of a group, especially in cases where there is a direct mapping between age bands and category options.\",\"recommendation\":\"Considering removing groups with zero or one category options, or alternatively, add additional category options to the group to make it more useful.\",\"issuesIdType\":\"categoryOptionGroups\",\"isSlow\":false,\"code\":\"COGS\"},{\"name\":\"datasets_empty\",\"displayName\":\"Datasets with no data elements.\",\"section\":\"Data sets\",\"severity\":\"WARNING\",\"description\":\"Datasets with no data elements.\",\"introduction\":\"All datasets should have data elements assigned to them.\",\"recommendation\":\"Remove empty datasets, or alternatively, assign data elements to them.\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DE\"},{\"name\":\"indicators_without_groups\",\"displayName\":\"Indicators lacking groups\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that do not have at least one group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWG\"},{\"name\":\"orgunit_groups_scarce\",\"displayName\":\"Organisation unit groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Organisation unit groups should have at least two members.\",\"introduction\":\"Generally, organisation unit groups should be composed of multiple organisation units.\",\"recommendation\":\"Considering removing groups with zero or one organisation units, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OGS\"},{\"name\":\"program_rules_without_priority\",\"displayName\":\"Program rules lacking a priority setting\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules with action type \\\"assign\\\" where the rule priority is not yet set\",\"recommendation\":\"Set a priority for the program rule(s)\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWP\"},{\"name\":\"categories_unique_category_combo\",\"displayName\":\"Different category combinations should not have the exact same combination of categories.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Different category combinations should not have the exact same combination of categories.\",\"introduction\":\"Category combinations should be a unique combination of categories. If two or more category combinations contain the exact same set of categories, this would be considered to be duplicative and potentially confusing to users.\",\"recommendation\":\"One category combo is kept, all references are updated to use this combo and other combos are removed.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CUCC\"},{\"name\":\"indicator_group_sets_scarce\",\"displayName\":\"Indicator groups sets should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups sets should have at least two members.\",\"introduction\":\"All indicator group set should be composed of at least two indicators groups.\",\"recommendation\":\"Considering removing indicator group sets with less than two indicator groups, or alternatively, add additional indicator groups to the indicator group set to make it more useful.\",\"issuesIdType\":\"indicatorGroupSets\",\"isSlow\":false,\"code\":\"IGSS\"},{\"name\":\"validation_rules_with_invalid_right_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a right side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWIRSE\"},{\"name\":\"data_elements_aggregate_aggregation_operator\",\"displayName\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"introduction\":\"Data elements which are not numeric (text, dates, etc) should have an aggregation operator set to NONE. Data elements which are able to be aggregated (numbers, integers, etc) should have an aggregation operator set to something other than NONE, most often SUM.\",\"recommendation\":\"Open the affected data elements in the Maintenance App and change their aggregation type to an appropriate type. Alternatively, these can be altered via the API.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAAO\"},{\"name\":\"org_unit_groups_without_group_sets\",\"displayName\":\"Organisation unit groups lacking group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation unit groups that aren't member of at least one organisation unit group set\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OUGWGS\"},{\"name\":\"program_rule_variables_without_attribute\",\"displayName\":\"Program rule variables lacking an attribute\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring an attribute source but that is not yet linked to an attribute\",\"recommendation\":\"Assign an attribute to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWA\"},{\"name\":\"program_indicator_groups_scarce\",\"displayName\":\"Program indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Program indicator groups should have at least two members.\",\"introduction\":\"Program indicator groups should generally be composed of two or more program indicators.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"programIndicatorGroups\",\"isSlow\":false,\"code\":\"PIGS\"},{\"name\":\"program_rules_no_expression\",\"displayName\":\"Program rules with no expression.\",\"section\":\"Program rules\",\"severity\":\"WARNING\",\"description\":\"Program rules with no expression.\",\"introduction\":\"All program rules should have an expression. Expressions are used by program rules to determine when they should be triggered. Program rules with no expression have no purpose.\",\"recommendation\":\"Using the DHIS2 user interface, assign an expression to each of the program rules which is missing one. Otherwise, if it is safe to delete the program rule with no expression, it is recommended to remove it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNE\"},{\"name\":\"data_elements_aggregate_no_data\",\"displayName\":\"Aggregate data elements with NO data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements with NO data values.\",\"introduction\":\"Data elements should generally always be associated with data values. If data elements exist in a data set which is active, but there are no data values associated with them, they may not be part of the data entry screens. Alternatively, the data element may have been added but never been associated with a dataset.\",\"recommendation\":\"Consider removing data elements with no data values.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAND\"},{\"name\":\"program_indicators_without_expression\",\"displayName\":\"Program indicators lacking an expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have no expression set yet\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWE\"},{\"name\":\"periods_distant_past\",\"displayName\":\"Periods which are in the distant past.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are in the distant past.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\ndistant past. Different data entry clients may not properly validate for periods\\nwhich are in the distant past, and thus these periods should be triaged to ensure\\nthat data has not been entered against them by mistake.\",\"recommendation\":\"If any periods exist in the system in the distant past, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PDP\"},{\"name\":\"org_units_being_orphaned\",\"displayName\":\"Orphaned organisation units\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that aren't level 1 units but that lack a parent so that they are not connected to the rest of the organisation tree\",\"recommendation\":\"Find (or create) and set the correct parent for the orphaned organisation unit(s). Eventually this is also caused by having set the wrong level.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUBO\"},{\"name\":\"cocs_wrong_cardinality\",\"displayName\":\"Category option combinations with incorrect cardinality.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with incorrect cardinality.\",\"introduction\":\"All category option combinations should have exactly the same number of category option associations as the number of categories in the category combination. If there are two categories in a category combination, then every category option combination should have exactly two category options.\\nCategory option combinations with the incorrect cardinality are usually the result of a category combination having been created, and then modified later. Suppose that two categories are used to create a category combination. Each category option combination of this category combo will have two category options. If an additional category is added to the category combination later, new category option combinations with three category options will be created and associated with this category combo. The original category option combinations would be considered to be invalid.\",\"recommendation\":\"Category option combinations which have an incorrect cardinality will be ignored by the DHIS2 analytics system and should be removed.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CWC\"},{\"name\":\"dashboards_not_viewed_one_year\",\"displayName\":\"Dashboards which have not been actively viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Dashboards which have not been actively viewed in the past 12 months\",\"introduction\":\"Dashboards should be regularly viewed in the system. In many cases, users may create dashboards for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to useful dashboards being difficult to find. This check identifies any dashboards which have not been viewed in the past year.\",\"recommendation\":\"Unused dashboards can be deleted in the entirety from the main dashboard app by clicking on the \\\"Edit\\\" button and choosing \\\"Delete\\\". Note that this process cannot be undone! Another option would be to alter the sharing of the dashboard so that it is not visible to any user.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNVOY\"}]", - "responseSize": 66022, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - } -] diff --git a/cypress/fixtures/network/40/users_should_be_able_to_navigate_to_the_documentation.json b/cypress/fixtures/network/40/users_should_be_able_to_navigate_to_the_documentation.json deleted file mode 100644 index 33f7b8047..000000000 --- a/cypress/fixtures/network/40/users_should_be_able_to_navigate_to_the_documentation.json +++ /dev/null @@ -1,305 +0,0 @@ -[ - { - "path": "/api/40/systemSettings/helpPageLink", - "featureName": "Users should be able to navigate to the documentation", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"helpPageLink\":\"https://dhis2.github.io/dhis2-docs/master/en/user/html/dhis2_user_manual_en.html\"}", - "responseSize": 99, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/analytics/tableTypes", - "featureName": "Users should be able to navigate to the documentation", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"]", - "responseSize": 122, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations/jobTypes?fields=*&paging=false", - "featureName": "Users should be able to navigate to the documentation", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"jobTypes\":[{\"name\":\"Data integrity\",\"jobType\":\"DATA_INTEGRITY\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"checks\",\"fieldName\":\"Checks\",\"persisted\":false,\"collectionName\":\"checks\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/dataIntegrity\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.parameters.DataIntegrityJobParameters$DataIntegrityReportType\",\"name\":\"type\",\"fieldName\":\"Type\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"REPORT\",\"SUMMARY\",\"DETAILS\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Resource table\",\"jobType\":\"RESOURCE_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Analytics table\",\"jobType\":\"ANALYTICS_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"skipPrograms\",\"fieldName\":\"Skip programs\",\"persisted\":false,\"collectionName\":\"skipPrograms\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/programs\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipResourceTables\",\"fieldName\":\"Skip resource tables\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Continuous analytics table\",\"jobType\":\"CONTINUOUS_ANALYTICS_TABLE\",\"schedulingType\":\"FIXED_DELAY\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"fullUpdateHourOfDay\",\"fieldName\":\"Full update hour of day\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Data sync\",\"jobType\":\"DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker programs data sync\",\"jobType\":\"TRACKER_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Event programs data sync\",\"jobType\":\"EVENT_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Meta data sync\",\"jobType\":\"META_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"trackerProgramPageSize\",\"fieldName\":\"Tracker program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"eventProgramPageSize\",\"fieldName\":\"Event program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"dataValuesPageSize\",\"fieldName\":\"Data values page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Aggregate data exchange\",\"jobType\":\"AGGREGATE_DATA_EXCHANGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"dataExchangeIds\",\"fieldName\":\"Data exchange ids\",\"persisted\":false,\"collectionName\":\"dataExchangeIds\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/aggregateDataExchanges\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Send scheduled message\",\"jobType\":\"SEND_SCHEDULED_MESSAGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Program notifications\",\"jobType\":\"PROGRAM_NOTIFICATIONS\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Monitoring\",\"jobType\":\"MONITORING\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"validationRuleGroups\",\"fieldName\":\"Validation rule groups\",\"persisted\":false,\"collectionName\":\"validationRuleGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/validationRuleGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"sendNotifications\",\"fieldName\":\"Send notifications\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"persistResults\",\"fieldName\":\"Persist results\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Push analysis\",\"jobType\":\"PUSH_ANALYSIS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"pushAnalysis\",\"fieldName\":\"Push analysis\",\"persisted\":false,\"collectionName\":\"pushAnalysis\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/pushAnalysis\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker search optimization\",\"jobType\":\"TRACKER_SEARCH_OPTIMIZATION\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"attributes\",\"fieldName\":\"Attributes\",\"persisted\":false,\"collectionName\":\"attributes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/trackedEntityAttributes/indexable\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipIndexDeletion\",\"fieldName\":\"Skip index deletion\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Predictor\",\"jobType\":\"PREDICTOR\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictors\",\"fieldName\":\"Predictors\",\"persisted\":false,\"collectionName\":\"predictors\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictors\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictorGroups\",\"fieldName\":\"Predictor groups\",\"persisted\":false,\"collectionName\":\"predictorGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictorGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Disable inactive users\",\"jobType\":\"DISABLE_INACTIVE_USERS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"inactiveMonths\",\"fieldName\":\"Inactive months\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"reminderDaysBefore\",\"fieldName\":\"Reminder days before\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Test\",\"jobType\":\"TEST\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Long\",\"name\":\"waitMillis\",\"fieldName\":\"Wait millis\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"stages\",\"fieldName\":\"Stages\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtStage\",\"fieldName\":\"Fail at stage\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"items\",\"fieldName\":\"Items\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtItem\",\"fieldName\":\"Fail at item\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Long\",\"name\":\"itemDuration\",\"fieldName\":\"Item duration\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.String\",\"name\":\"failWithMessage\",\"fieldName\":\"Fail with message\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"failWithException\",\"fieldName\":\"Fail with exception\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.JobProgress$FailurePolicy\",\"name\":\"failWithPolicy\",\"fieldName\":\"Fail with policy\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"PARENT\",\"FAIL\",\"SKIP_STAGE\",\"SKIP_ITEM\",\"SKIP_ITEM_OUTLIER\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"runStagesParallel\",\"fieldName\":\"Run stages parallel\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]}]}", - "responseSize": 24994, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/pushAnalysis?paging=false", - "featureName": "Users should be able to navigate to the documentation", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"pushAnalysis\":[{\"displayName\":\"Immunization Key Indicators Monthly Report\",\"id\":\"jtcMAKhWwnc\"}]}", - "responseSize": 98, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictors?paging=false", - "featureName": "Users should be able to navigate to the documentation", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictors\":[{\"displayName\":\"Malaria Outbreak Threshold\",\"id\":\"tEK1OEqS4O1\"}]}", - "responseSize": 80, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/validationRuleGroups?paging=false", - "featureName": "Users should be able to navigate to the documentation", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"validationRuleGroups\":[{\"displayName\":\"ANC\",\"id\":\"UP1lctvalPn\"},{\"displayName\":\"Commodities\",\"id\":\"xcpl667ccfF\"},{\"displayName\":\"Critical event\",\"id\":\"xWtt9c443Lt\"},{\"displayName\":\"District stock\",\"id\":\"mEtdbIDDhix\"},{\"displayName\":\"Epidemic disease outbreak\",\"id\":\"y2yQIm79VTW\"},{\"displayName\":\"Facility Stock\",\"id\":\"SqyI8HKqI4g\"},{\"displayName\":\"Immunisation\",\"id\":\"UiOSY1iIdub\"},{\"displayName\":\"Infectious disease outbreak\",\"id\":\"WUZXEFdn1PX\"},{\"displayName\":\"Malaria\",\"id\":\"zlaSof6qLqF\"},{\"displayName\":\"Population\",\"id\":\"D3bItmtBpsW\"},{\"displayName\":\"TB\",\"id\":\"IMF6p1MqoHl\"},{\"displayName\":\"Testing\",\"id\":\"nMDkAJXsmlR\"}]}", - "responseSize": 628, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations?fields=*&paging=false", - "featureName": "Users should be able to navigate to the documentation", - "static": false, - "count": 2, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"jobConfigurations\":[{\"href\":\"/40/jobConfigurations/sHMedQF7VYa\",\"name\":\"Credentials expiry alert\",\"created\":\"2017-12-08T12:45:18.351\",\"lastUpdated\":\"2023-02-28T15:24:55.737\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"CREDENTIALS_EXPIRY_ALERT\",\"cronExpression\":\"0 0 2 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.668\",\"lastRuntimeExecution\":\"00:00:00.062\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Credentials expiry alert\",\"favorite\":false,\"id\":\"sHMedQF7VYa\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/YvAwAmrqAtN\",\"name\":\"Dataset notification\",\"created\":\"2017-12-08T12:45:18.355\",\"lastUpdated\":\"2023-02-28T15:24:55.810\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"DATA_SET_NOTIFICATION\",\"cronExpression\":\"0 0 2 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.668\",\"lastRuntimeExecution\":\"00:00:00.137\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Dataset notification\",\"favorite\":false,\"id\":\"YvAwAmrqAtN\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/BFa3jDsbtdO\",\"name\":\"Data statistics\",\"created\":\"2017-12-08T12:45:18.337\",\"lastUpdated\":\"2023-02-28T15:24:55.877\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"DATA_STATISTICS\",\"cronExpression\":\"0 0 2 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.668\",\"lastRuntimeExecution\":\"00:00:00.207\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Data statistics\",\"favorite\":false,\"id\":\"BFa3jDsbtdO\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/pd6O228pqr0\",\"name\":\"File resource clean up\",\"created\":\"2017-12-08T12:45:18.317\",\"lastUpdated\":\"2023-02-28T15:24:55.839\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"FILE_RESOURCE_CLEANUP\",\"cronExpression\":\"0 0 2 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.669\",\"lastRuntimeExecution\":\"00:00:00.169\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"File resource clean up\",\"favorite\":false,\"id\":\"pd6O228pqr0\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/uwWCT2BMmlq\",\"name\":\"Remove expired or used reserved values\",\"created\":\"2021-06-10T12:37:25.034\",\"lastUpdated\":\"2023-02-28T15:24:55.923\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"REMOVE_USED_OR_EXPIRED_RESERVED_VALUES\",\"cronExpression\":\"0 0 2 ? * *\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.668\",\"lastRuntimeExecution\":\"00:00:00.253\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Remove expired or used reserved values\",\"favorite\":false,\"id\":\"uwWCT2BMmlq\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/vt21671bgno\",\"name\":\"System version update check notification\",\"created\":\"2021-12-21T12:31:00.047\",\"lastUpdated\":\"2023-02-28T16:33:40.425\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"SYSTEM_VERSION_UPDATE_CHECK\",\"cronExpression\":\"44 8 3 ? * *\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T03:08:44.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T16:33:39.585\",\"lastRuntimeExecution\":\"00:00:00.838\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"System version update check notification\",\"favorite\":false,\"id\":\"vt21671bgno\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/fUWM1At1TUx\",\"name\":\"User account expiry alert\",\"created\":\"2021-09-01T07:24:20.394\",\"lastUpdated\":\"2023-02-28T15:24:55.747\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"ACCOUNT_EXPIRY_ALERT\",\"cronExpression\":\"0 0 2 ? * *\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.669\",\"lastRuntimeExecution\":\"00:00:00.071\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"User account expiry alert\",\"favorite\":false,\"id\":\"fUWM1At1TUx\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/Js3vHn2AVuG\",\"name\":\"Validation result notification\",\"created\":\"2017-12-08T12:45:18.346\",\"lastUpdated\":\"2023-02-27T16:37:17.320\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"VALIDATION_RESULTS_NOTIFICATION\",\"cronExpression\":\"0 0 7 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-02-28T07:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-27T14:55:13.329\",\"lastRuntimeExecution\":\"00:00:00.022\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Validation result notification\",\"favorite\":false,\"id\":\"Js3vHn2AVuG\",\"attributeValues\":[]}]}", - "responseSize": 6953, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictorGroups?paging=false", - "featureName": "Users should be able to navigate to the documentation", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictorGroups\":[]}", - "responseSize": 22, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/dataIntegrity", - "featureName": "Users should be able to navigate to the documentation", - "static": false, - "count": 4, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[{\"name\":\"orgunits_invalid_geometry\",\"displayName\":\"Organisation units with invalid geometry.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with invalid geometry.\",\"introduction\":\"DHIS2 uses the PostGIS database extension to manage the geographical information associated\\nwith organisation units. There are various reasons why geometries may be considered to be\\ninvalid including self-inclusions, self-intersections, and sliver polygons. Please see the\\nPostGIS documentation for a more in-depth discussion on this topic.\\n\\nInvalid geometry is not always a problem and may be able to be ignored, however, it has been observed in certain systems\\nthat this can lead to problems in analytics. If you are experiencing issues when generating analytics\\ntables, and see errors related to invalid geometries, you will need to either remove the invalid geometry,\\nor fix it.\",\"recommendation\":\"Update the geometry of the affected organisation units to a valid geometry. It may be possible to use the PostGIS function `ST_MakeValid` to automatically fix the problem. However, in other cases the geometry may need to be edited in a GIS tool, and then updated again in DHIS2.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OIG\"},{\"name\":\"data_elements_without_groups\",\"displayName\":\"Data elements lacking groups\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data element groups\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWG\"},{\"name\":\"orgunit_group_sets_excess_groups\",\"displayName\":\"Organisation units which belong to multiple groups in a group set.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which belong to multiple groups in a group set.\",\"introduction\":\"Organisation units should belong to exactly one group within each organisation unit group set of which they are a member. If the organisation unit belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the organisation units in the details list to exactly one group within each group set membership.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OGSEG\"},{\"name\":\"validation_rules_missing_value_strategy_null\",\"displayName\":\"All validation rule expressions should have a missing value strategy.\",\"section\":\"Validation rules\",\"severity\":\"SEVERE\",\"description\":\"All validation rule expressions should have a missing value strategy.\",\"introduction\":\"Validation rules are composed of a left and right side expression. In certain systems the missing value strategy may not be defined. This may lead to an exception during validation rule analysis. The affected validation rules should be corrected to with an appropriate missing value strategy.\",\"recommendation\":\"Using the results of the the details SQL view, identify the affected validation rules and which side of the rule the missing value strategy has not been specified. Using the maintenance app, make the appropriate corrections and save the rule.\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRMVSN\"},{\"name\":\"category_combos_being_invalid\",\"displayName\":\"Invalid Category-combos\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Lists all category-combos that are invalid\",\"recommendation\":\"Make sure the category combo is assigned to at least one category and that all categories have category options \",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCBI\"},{\"name\":\"data_elements_in_data_set_not_in_form\",\"displayName\":\"Data sets with data elements not in data entry form\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that have data elements which are neither a member of the set's data entry form nor a member of the sets section\",\"recommendation\":\"Either remove the data elements in question or make them a member of the set's form or section\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DEIDSNIF\"},{\"name\":\"categories_no_options\",\"displayName\":\"Categories with no category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with no category options\",\"introduction\":\"Categories should always have at least one category option.\",\"recommendation\":\"Any categories without category options should either be removed from the system if they are not in use. Otherwise, appropriate category options should be added to the category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CNO\"},{\"name\":\"data_elements_aggregate_no_analysis\",\"displayName\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"introduction\":\"All aggregate data elements that are captured in DHIS2 should be used to produce some type of analysis output (charts, maps, tables). This can be by using them directly in an output, or by having them contribute to an indicator calculation that is used an output.\",\"recommendation\":\"Data elements that are not routinely being reviewed in analysis, either directly or indirectly through indicators, should be reviewed to determine if they still need to be collected. If these are meant to be used in routine review, then associated outputs should be created using them. If these data elements are not going to be used for any type of information review, consideration should be made to either archive them or delete them.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANA\"},{\"name\":\"indicators_duplicated_terms\",\"displayName\":\"Indicators with the same terms.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same terms.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check attempts to identify indicators with the same formulas, regardless of the order of their their terms. Suppose you have an indicator which calculates total ANC attendance: ANC Total = ANC1 + ANC2 + ANC3 Suppose then another indicator exists in the system, which has been defined as: ANC Totals = ANC3 + ANC2 + ANC1 These two indicators are equivalent, and will produce the same result, and are thus considered to be duplicated.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Considered deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IDT\"},{\"name\":\"program_rules_no_action\",\"displayName\":\"Program rules with no action.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules with no action.\",\"introduction\":\"All program rules should have an action.\",\"recommendation\":\"Using the DHIS2 user interface, assign an action to each of the program rules which is missing one. Alternatively, if the program rule is not in use, then consider removing it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNA\"},{\"name\":\"orgunits_compulsory_group_count\",\"displayName\":\"Organisation units that are not in all compulsory orgunit group sets\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Orgunits that are not in all compulsory orgunit group sets\",\"introduction\":\"If any organisation unit groups have been marked as compulsory, each and every organisation unit should belong to exactly one group within each compulsory organisation unit group set. Assume we have created a group set called \\\"Ownership\\\" with two groups \\\"Public\\\" and \\\"Private\\\". Each and every organisation unit contained in the hierarchy must belong to either Public or Private (but not both). When organisation unit are not part of a group set, results in the analytics apps will not be correct if the organisation unit group set is used for aggregation.\",\"recommendation\":\"For each of the organisation units identified in the details query, you should assign the appropriate organisation unit group within the group set. Alternatively, if the group set should not be compulsory, you should change this attribute.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OCGC\"},{\"name\":\"orgunits_no_coordinates\",\"displayName\":\"Organisation units with no coordinates.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with no coordinates.\",\"introduction\":\"Ideally, all organisation units contained in the DHIS2 hierarchy should have a valid\\nset of coordinates. Usually for all organisation units above the facility level,\\nthese coordinates should be a polygon which provides the boundary of the organisation\\nunit. For facilities, these are usually represented as point coordinates.\\n\\nThere can obviously be exceptions to this rule. Mobile health facilities may not have\\na fixed location. Community health workers or wards below the facility level\\nmay also not have a defined or definable coordinate.\\n\\nThis check is intended to allow you to review all organisation units which do\\nnot have any coordinates and make a determination as to whether they should be updated.\",\"recommendation\":\"Where appropriate, update the geometry of each organisation unit with a valid geometry.\\nYou may need to contact the appropriate local government office to obtain a copy\\nof district boundaries, commonly referred to as \\\"shape files\\\". Another possibility\\nis to use freely available boundary files from GADM (https://gadm.org)\\n\\nIf facilities are missing coordinates, it may be possible to obtain these from\\nthe facility staff using their smart phone to get the coordinates. Images\\nfrom Google Maps can also often be used to estimate the position of a facility,\\nassuming that you have good enough resolution and local knowledge of where\\nit is located.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONC\"},{\"name\":\"data_sets_not_assigned_to_org_units\",\"displayName\":\"Data sets not assigned to organisation units\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that are not assigned to any organisation units\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DSNATOU\"},{\"name\":\"dashboards_no_items\",\"displayName\":\"Dashboards with no items.\",\"section\":\"Dashboards\",\"severity\":\"INFO\",\"description\":\"Dashboards with no items.\",\"introduction\":\"All dashboards should have content on them. Dashboards without any content do not serve any purpose, and can make it more difficult to find relevant dashboards with content.\",\"recommendation\":\"Dashboards without content that have not been modified in the last 14 days should be considered for deletion.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNI\"},{\"name\":\"orgunits_same_name_and_parent\",\"displayName\":\"Organisation units should not have the same name and parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have the same name and parent.\",\"introduction\":\"Organisation units may have exactly the same name. This may become confusing to users, particularly if the organisation unit has the same name and same parent. This can easily lead to data entry or analysis mistakes as users have no way to distinguish between the two organisation units.\",\"recommendation\":\"Rename identically named organisation units which share the same parent using the maintenance app.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OSNAP\"},{\"name\":\"indicators_not_grouped\",\"displayName\":\"Indicators not in any groups.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not in any groups.\",\"introduction\":\"All indicators should be in an indicator group. This allows users to find the indicators more easily in analysis apps and also contributes to having more complete indicators group sets. Maintenance operations can also be made more efficient by applying bulk settings (ex. sharing, filtering) to all indicators within an indicator group.\",\"recommendation\":\"Indicators that are not in a indicator group should be added to a relevant indicator group. If the indicators are not needed, they should be deleted.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"ING\"},{\"name\":\"category_option_group_sets_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option group sets should be composed of at least two category option groups.\",\"recommendation\":\"Considering removing groups with zero or one category option groups, or alternatively, add additional category option groups to the group set to make it more useful.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSS\"},{\"name\":\"org_units_without_groups\",\"displayName\":\"Organisation units lacking groups\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are not connected to at least one group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWG\"},{\"name\":\"data_elements_excess_groupset_membership\",\"displayName\":\"Data elements which belong to multiple groups in a group set.\",\"section\":\"data_elements\",\"severity\":\"SEVERE\",\"description\":\"Data elements which belong to multiple groups in a group set.\",\"introduction\":\"Data elements should belong to exactly one group within each data element group set of which they are a member. If the data element belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the data elements in the details list to exactly one data element group within each group set.\",\"issuesIdType\":\"data_elements_aggregate\",\"isSlow\":false,\"code\":\"DEEGM\"},{\"name\":\"data_element_groups_scarce\",\"displayName\":\"Data element groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Data element groups should have at least two members.\",\"introduction\":\"All data element groups should be composed of at least two data elements.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"dataElementGroups\",\"isSlow\":false,\"code\":\"DEGS\"},{\"name\":\"orgunits_not_contained_by_parent\",\"displayName\":\"Organisation units with point coordinates should be contained by their parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with point coordinates should be contained by their parent.\",\"introduction\":\"Facilities are often represented as points in the DHIS2 hierarchy. Their parent organisation units geometry should contain all facilities which have been associated with them.\",\"recommendation\":\"Often boundary files are simplified when they are uploaded into DHIS2. This process may result in\\nfacilities which are located close to the border of a given district to fall outside of the district\\nwhen the boundary is simplified. This is considered to be more of a cosmetic problem for most DHIS2\\ninstallations, but could become an issue if any geospatial analysis is attempted using the\\nboundaries and point coordinates.\\n\\nIn cases where the facility falls outside of its parent's boundary\\nyou should confirm that the coordinates are correct. If the location is close to the boundary, you\\nmay want to reconsider how the boundary files have been simplified. Otherwise, if the location of\\nthe facility is completely incorrect, it should be rectified.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONCBP\"},{\"name\":\"program_rules_message_no_template\",\"displayName\":\"Program rules actions which should send or schedule a message without a message template.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules actions which should send or schedule a message without a message template.\",\"introduction\":\"Program rule actions of type \\\"Send message\\\" or \\\"Schedule message\\\" should have an associated message template.\",\"recommendation\":\"Using the DHIS2 user interface, assign a message template to each of the program rule actions which send or schedule messages but which does not have an association with a message template.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRMNT\"},{\"name\":\"indicators_with_invalid_denominator\",\"displayName\":\"Indicators with invalid denominator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"List all indicators where the denominator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWID\"},{\"name\":\"indicator_types_duplicated\",\"displayName\":\"Indicator types with the same factor.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicator types with the same factor.\",\"introduction\":\"Indicators can be assigned a factor which is multiplied by the indicator's value. For example, if you create a percentage based indicator, you can assign the indicator a factor of 100, which would be multiplied by the actual value of the indicator calculated by DHIS2. In general, having multiple indicator types with the same factor is not recommended. It is duplicative, and may lead to confusion.\",\"recommendation\":\"Duplicated indicator types should consider to be removed from the system. Consider choosing one of the duplicated indicator types as the one to keep, and then update all indicators which share the same factor to this indicator type. The duplicated indicator types can then be removed from the system.\",\"issuesIdType\":\"indicatorTypes\",\"isSlow\":false,\"code\":\"ITD\"},{\"name\":\"options_sets_empty\",\"displayName\":\"Empty option sets\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Empty option sets\",\"introduction\":\"All option sets should generally include at least two items. Empty option sets serve no purpose.\",\"recommendation\":\"Options should either be added to the option set, or the option set should be deleted.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSE\"},{\"name\":\"category_options_no_categories\",\"displayName\":\"Category options with no categories.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options with no categories.\",\"introduction\":\"All category options should belong to at least one category.\",\"recommendation\":\"Category options which are not part of any category should be removed or alternatively should be added to an appropriate category.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CONC\"},{\"name\":\"orgunits_orphaned\",\"displayName\":\"Orphaned organisation units.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"Orphaned organisation units.\",\"introduction\":\"Orphaned organisation units are those which have neither parents nor any children. This means that they have no relationship to the main organisation unit hierarchy. These may be created by faulty metadata imports or direct manipulation of the database.\",\"recommendation\":\"The orphaned organisation units should be assigned a parent or removed from the system. It is recommended to use the DHIS2 API for this task if possible. If this is not possible, then they may need to be removed through direct SQL on the DHIS2 database.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OO\"},{\"name\":\"indicators_with_identical_formulas\",\"displayName\":\"Indicators with identical formulas\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that have the identical formulas with at least one other indicator\",\"recommendation\":\"Check if the same indicator should be used everywhere and remove duplicates\",\"isSlow\":false,\"code\":\"IWIF\"},{\"name\":\"program_indicators_with_invalid_filters\",\"displayName\":\"Program indicators with invalid filter\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators with invalid filter expression\",\"recommendation\":\"Check that the expression evaluates to true/false\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIF\"},{\"name\":\"program_rules_without_condition\",\"displayName\":\"Program rules lacking a condition\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that have no condition yet\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWC\"},{\"name\":\"categories_one_default_category\",\"displayName\":\"Only one default category should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category should exist\",\"introduction\":\"There should only exist one category with name and code \\\"default\\\".\",\"recommendation\":\"Only the category with UID \\\"GLevLNI9wkl\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category or move all references to category \\\"GLevLNI9wkl\\\" and then remove the unused conflicting category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CODC\"},{\"name\":\"org_units_with_cyclic_references\",\"displayName\":\"Organisation units with cyclic references\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that have a conflicting parent hierarchy definition so that two organisation units become parent of each other or in other words they form a circular reference\",\"recommendation\":\"One of the organisation units must be setup wrongly and needs to be corrected so that a non-circular tree connects the two\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWCR\"},{\"name\":\"program_rule_variables_without_data_element\",\"displayName\":\"Program rule variables lacking a data element\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring a data element source but that is not yet linked to a data element\",\"recommendation\":\"Assign a data element to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWDE\"},{\"name\":\"org_units_violating_exclusive_group_sets\",\"displayName\":\"Organisation units with conflicting exclusive group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are members of multiple exclusive organisation unit groups\",\"recommendation\":\"Remove the organisation unit from all but one exclusive organisation unit group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUVEGS\"},{\"name\":\"program_rule_actions_without_data_object\",\"displayName\":\"Program rules with actions lacking a data object\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires either a data element or an attribute but is not connected either\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWDO\"},{\"name\":\"orgunits_openingdate_gt_closeddate\",\"displayName\":\"Organisation units which have an opening date later than the closed date.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which have an opening date later than the closed date.\",\"introduction\":\"If a closing date has been defined for an organisation unit, it should always be after the opening date (if one has been defined).\",\"recommendation\":\"Alter either the opening or closing date of all affected organisation units so that the closing date is after the opening date.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OOGC\"},{\"name\":\"categories_one_default_category_option_combo\",\"displayName\":\"Only one default category option combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option combo should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option combo with UID \\\"HllvX50cXC0\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option combo or move all references to category option combo \\\"HllvX50cXC0\\\" and then remove the unused conflicting category option combo.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CODCOC\"},{\"name\":\"category_option_group_sets_incomplete\",\"displayName\":\"Category option group sets which do not contain all category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option group sets which which do not contain all category options.\",\"introduction\":\"Category option group sets are composed of multiple category option groups, which are in turn composed of various category options. Category option group sets are often used to group related category options together for analytical purposes. Categories are also composed of category options. In general, but not always, category option group sets should contain all category options of related categories. Suppose we have the following two age categories. \\nAge coarse: <15, 15+ Age fine: <1, 1-10, 10-14,15-19,20-24,25-29,30-34,35-39,40-44,45+\\nIn many cases, related data elements may be disaggregated differently. This may be to differences in the way in which the data is collected, or as is often the case, the disaggregation has changed over time. If we wish to analyze data for two different data elements (one of which uses Age coarse and the other Age fine), we can create a category option group set consisting of two category option groups which should consist of the following category options from above. \\n<15: <15, <1, 1-10, 10-14 15+: 15+, 15-19,20-24,25-29,30-34,35-39,40-44,45+\\nSuppose that we happen to omit the category option \\\"<1\\\" from the \\\"<15\\\" category option group. This would result in potential aggregation errors in when using this category option group set in any analytical objects. The details of this metadata check would return the UID and name of the category option group set. The category and category option would also be provided. Using the previous example, we would see \\\"Age fine:{<1}\\\" in the metadata check details section, to indicate that the <1 category option which is part of the \\\"Age fine\\\" category, is missing from the category option group set.\\nThere may exist specific analytical reasons why specific category options are omitted from a category option group set. However,these should usually be special cases. This metadata check will identify cases where category option group sets appear to be incomplete, however you should carefully review any groups which appear in the details. \\nThis check may also produce a number of issues which may at first glance appear to be false positives. In some cases, category options may be added to a category by mistake. When category option group sets are created, this extraneous option may be omitted and thus appear as missing from the group set. \\nAnother observed situation is where an option like \\\"Unknown\\\" is used across unrelated categories. Suppose you have two categories \\\"Age (<15, 15+, Unknown)\\\" and \\\"Sex (Male,Female,Unknown)\\\". Similar to above, we create category option group sets like: \\n<15: <15 15+: 15+ Unknown: Unknown\\nThis metadata check will report that \\\"Male\\\" and \\\"Female\\\" are missing from the group set. This is because the same \\\"Unknown\\\" option is shared between two different, unrelated categories. It is recommended that if this situation occurs, that you create two separate \\\"Unknown\\\" category options like \\\"Unknown sex\\\" and \\\"Unknown age\\\".\",\"recommendation\":\"Using the maintenance app, assign the missing category options to an appropriate category option group within the affected category option group set.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSI\"},{\"name\":\"maps_not_viewed_one_year\",\"displayName\":\"Maps which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Maps which have not been viewed in the past 12 months\",\"introduction\":\"Maps should be regularly viewed in the system. In many cases, users may create maps for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system and being difficult to find in the Maps app.\",\"recommendation\":\"Unused maps can be removed directly using the Maps app by a user with sufficient authority. If maps are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"maps\",\"isSlow\":false,\"code\":\"MNVOY\"},{\"name\":\"indicators_exact_duplicates\",\"displayName\":\"Indicators with the same formula.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same formula.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check shows indicators which have the exact same formulas. Spaces which are present are removed prior to comparison.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Consider deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IED\"},{\"name\":\"indicators_violating_exclusive_group_sets\",\"displayName\":\"Indicators with conflicting exclusive group sets\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that are members of multiple exclusive indicator groups\",\"recommendation\":\"Remove the indicator from all but one exclusive indicator group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IVEGS\"},{\"name\":\"category_options_excess_groupset_membership\",\"displayName\":\"Category options which belong to multiple groups in a category option group set.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category options which belong to multiple groups in a category option group set.\",\"introduction\":\"Category options should belong to exactly one category option group which are part of a category option group set. If the category option belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the category option in the details list to exactly one category option group within each group set.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"COEGM\"},{\"name\":\"periods_duplicates\",\"displayName\":\"Duplicate Periods\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Lists all periods duplicates which have identical type and start date\",\"recommendation\":\"Make sure all database references are moved to one of the duplicates before deleting the unused duplicates\",\"isSlow\":false,\"code\":\"PD\"},{\"name\":\"program_rules_without_action\",\"displayName\":\"Program rules lacking an action\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that are not connected to any program rule action\",\"recommendation\":\"Connect the rule to an action or consider removing the rule\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWA\"},{\"name\":\"orgunits_multiple_roots\",\"displayName\":\"The organisation unit hierarchy should have a single root.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"The organisation unit hierarchy should have a single root.\",\"introduction\":\"Every DHIS2 system should have a single root organisation unit. This means a single organisation unit from which all other branches of the hierarchy are descendants.\",\"recommendation\":\"Once you have decided which organisation unit should be the real root of the organisation unit hierarchy, you should update the parent organisation unit. This can be done by using the DHIS2 API or my updating the value directly in the `organisationunit` table.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMR\"},{\"name\":\"validation_rules_with_invalid_left_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a left side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWILSE\"},{\"name\":\"program_rule_actions_without_stage_id\",\"displayName\":\"Program rules with actions lacking a program stage\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a program stage but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWSI\"},{\"name\":\"indicator_groups_scarce\",\"displayName\":\"Indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups should have at least two members.\",\"introduction\":\"All indicator groups should be composed of at least two indicators.\",\"recommendation\":\"Considering removing groups with zero or one groups, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"indicatorGroups\",\"isSlow\":false,\"code\":\"IGS\"},{\"name\":\"option_sets_wrong_sort_order\",\"displayName\":\"Option sets with possibly wrong sort order.\",\"section\":\"Option sets\",\"severity\":\"SEVERE\",\"description\":\"Option sets with possibly wrong sort order.\",\"introduction\":\"Option sets contain options which should be ordered sequentially. The sort_order property should always start with 1 and have a sequential sequence. If there are three options in the option set, then the sort order should be 1,2,3. \\nIn certain circumstances, options may be deleted from an option set, and the sort order may become corrupted. This may lead to a situation where it becomes impossible to update the option set from the maintenance app, and may lead to problems when attempting to using the option set in the data entry app.\",\"recommendation\":\"If it is possible to open the option set in the maintenance app, you can resort the option set, which should correct the problem. Another possible solution is to directly update the sort_order property of in the `optionset` table in the database, ensuring that a valid sequence is present for all options in the option set.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSWSO\"},{\"name\":\"periods_same_start_end_date\",\"displayName\":\"Periods with the same start and end dates\",\"section\":\"Periods\",\"severity\":\"CRITICAL\",\"description\":\"Periods with the same start and end dates\",\"introduction\":\"Different periods should not have exactly the same start and end date.\",\"recommendation\":\"All references to the duplicate periods should be removed from the system and reassigned. It is recommended to use the period with the lower periodid.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PSSED\"},{\"name\":\"program_indicators_with_invalid_expressions\",\"displayName\":\"Program indicators with invalid expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have an invalid expression\",\"recommendation\":\"Check that the expression evaluates to a number\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIE\"},{\"name\":\"program_rule_actions_without_notification\",\"displayName\":\"Program rule with actions lacking a notification template\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires a notification template but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWN\"},{\"name\":\"indicator_no_analysis\",\"displayName\":\"Indicators not used in analytical objects.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not used in analytical objects.\",\"introduction\":\"Indicators should be used to produce some type of analytical output (charts, maps, pivot tables). Note: indicators used in datasets to provide feedback during data entry are not counted as being used in analytical objects.\",\"recommendation\":\"Indicators that are not routinely being used for analysis should be reviewed to determine if they are useful and needed. If these are meant to be used for routine review, then associated outputs should be created using them. If these indicators are not going to be used for any type of information review, and are not used in data sets for feedback during data entry, consideration should be made to delete them.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"INA\"},{\"name\":\"user_groups_scarce\",\"displayName\":\"User groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"User groups should have at least two members.\",\"introduction\":\"Generally, user groups should contain two or more users.\",\"recommendation\":\"Considering removing user groups with less than two users, or alternatively, add additional users to the group to make it more useful.\",\"issuesIdType\":\"userGroups\",\"isSlow\":false,\"code\":\"UGS\"},{\"name\":\"data_elements_aggregate_with_different_period_types\",\"displayName\":\"Aggregate data elements which belong to datasets with different period types.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"SEVERE\",\"description\":\"Aggregate data elements which belong to datasets with different period types.\",\"introduction\":\"Data elements should not belong to datasets with different period types.\",\"recommendation\":\"If you need to collect data with different period types (e.g. weekly and monthly) you should use different data elements for each period type. In general, it is not recommended to collect data with different frequencies, since in general, data collected at higher frequencies (e.g. weekly) can be aggregated to data with lower frequencies (e.g yearly).\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAWDPT\"},{\"name\":\"validation_rules_without_groups\",\"displayName\":\"Validation rules lacking groups\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that are not member of at least one validation rule group\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWG\"},{\"name\":\"category_option_combos_disjoint\",\"displayName\":\"Category option combinations with disjoint associations.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with disjoint associations.\",\"introduction\":\"Under certain circumstances, category option combinations may exist in the system, but not have any direct association with category options which are associated with their category combination. This situation usually occurs when category options have been added to a category and then the category is added to a category combination. New category option combinations are created in the system at this point. If any of the category options are then removed in one of the underlying categories, a so-called disjoint category option combination may result. This is a category option combination which has no direct association with any category options in any of the categories associated with the category combination.\",\"recommendation\":\"The disjoint category option combinations should be removed from the system if possible. However, if any data is associated with the category option combination, a determination will need to be made in regards of how to deal with this data.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"COCD\"},{\"name\":\"options_sets_unused\",\"displayName\":\"Option sets which are not used\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Option sets which are not used\",\"introduction\":\"Option sets should be used for some purpose. The may be used by data elements, comments, attributes, or tracked entity attributes.\",\"recommendation\":\"Consider deleting unused option sets, or alternatively, ensure that they have been properly assigned.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSU\"},{\"name\":\"catoptioncombos_no_catcombo\",\"displayName\":\"Category options combinations with no category combination.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options combinations with no category combination.\",\"introduction\":\"All category option combinations should be associated with a category combo. In certain cases, when category combinations are deleted,the linkage between a category option combination and a category combination may become corrupted.\",\"recommendation\":\"Check if any data is associated with the category option combination in question. Likely, the data should either be deleted or migrated to a valid category option combination. Any data which is associated with any of these category option combinations will not be available through either the data entry modules or any of the analytical apps.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CNC\"},{\"name\":\"data_elements_violating_exclusive_group_sets\",\"displayName\":\"Data elements with conflicting exclusive group sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are a members of more than one exclusive data element set belonging to the same data element group set\",\"recommendation\":\"Either remove the data element from all but one exclusive group set or consider if the set really should be an exclusive group set\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEVEGS\"},{\"name\":\"categories_same_category_options\",\"displayName\":\"Categories with the same category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with the same category options\",\"introduction\":\"Categories with the exact same category options should be considered to be merged. Categories with the exact same category options may be easily confused by users in analysis. The details view will provide a list of categories which have the exact same category options. For each duplicated category a number in parentheses such as (1) will indicate which categories belong to duplicated groups.\",\"recommendation\":\"If category combinations have already been created with duplicative categories,\\nit is recommended that you do not take any action, but rather ensure\\nthat users understand that there may be two category combinations which are duplicative.\\n\\nIf you choose to merge the duplicative category combinations, you would need to \\nremap all category option combinations from the category combo which you wish to \\nremove, to the one which you wish to keep. \\n\\nIf one of the categories is not in use in any category combination, it should\\nconsider to be removed from the system.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CSCO\"},{\"name\":\"visualizations_not_viewed_one_year\",\"displayName\":\"Visualizations which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Visualizations which have not been viewed in the past 12 months\",\"introduction\":\"Visualizations should be regularly viewed in the system. In many cases, users may create charts for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to charts being difficult to find in the visualization app.\",\"recommendation\":\"Unused charts can be removed directly using the data visualization app by a user with sufficient authority. If charts are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"visualizations\",\"isSlow\":false,\"code\":\"VNVOY\"},{\"name\":\"categories_one_default_category_option\",\"displayName\":\"Only one default category option should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option with UID \\\"xYerKDKCefk\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option or move all references to category option \\\"xYerKDKCefk\\\" and then remove the unused conflicting category option.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CODCO\"},{\"name\":\"orgunits_multiple_spaces\",\"displayName\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"introduction\":\"Names and/or shortnames of organisation units should not contain multiple spaces. They are superfluous and may complicate the location of organisation units when they are searched.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the multiple spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMS\"},{\"name\":\"data_elements_aggregate_abandoned\",\"displayName\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"introduction\":\"Data elements are considered to be abandoned when they have not been edited in at least 100 days and do not have any data values associated with them. Often, these are the result of new or changed configurations that have been abandoned at some point.\",\"recommendation\":\"Data elements that have no data associated with them and which there are no plans to start using for data collection should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAA\"},{\"name\":\"data_elements_assigned_to_data_sets_with_different_period_types\",\"displayName\":\"Data elements assigned to data sets with different period type\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are assigned to at least one data set that has a different period type\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEATDSWDPT\"},{\"name\":\"data_elements_aggregate_no_groups\",\"displayName\":\"Aggregate data elements not in any data element groups.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not in any data element groups.\",\"introduction\":\"All data elements should be in a data element group. This allows users to find the data elements more easily in analysis\\n apps and also contributes to having more complete data element group sets.\\n Maintenance operations can also be made more efficient by applying\\n bulk settings (ex. sharing) to all data elements within a data element group.\",\"recommendation\":\"Data elements that are not in a data element group should be added to a relevant data element group. If the data elements are not needed, they should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANG\"},{\"name\":\"category_options_shared_within_category_combo\",\"displayName\":\"Category combinations with categories which share the same category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category combinations with categories which share the same category options.\",\"introduction\":\"As a general rule, category options should be reused where possible between categories. The exception to this rule however, is when you have a category combo with multiple categories, and within those categories, a category option is shared. As a simple example, lets say you have a category called \\\"Sex\\\" with options \\\"Male\\\"\\\", \\\"Female\\\" and \\\"Unknown\\\". There is also a second category called \\\"Age\\\" with options \\\"<15\\\", \\\"15+\\\", and \\\"Unknown\\\". A category combination called \\\"Age/Sex\\\" is then created with these two categories, which share the option \\\"Unknown\\\". This situation should be avoided, as it creates issues when analyzing data.\",\"recommendation\":\"The recommended approach to dealing with this situation is to create a new category combination, using two new categories. Using the example from the introduction, you should create two new category options called \\\"Unknown age\\\" and \\\"Unknown sex\\\". A new category combination can then be created with these new categories, which do not share category options. All data which is potentially associated with the old category combinations, would need to be reassigned to the new category option combinations. Any analytical objects which use the categories to be removed would also need to be updated.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"COSWCC\"},{\"name\":\"orgunits_null_island\",\"displayName\":\"Organisation units located within 100 km of Null Island (0,0).\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units located within 100 km of Null Island (0,0).\",\"introduction\":\"A common problem when importing coordinates is the inclusion of coordinates situated around the point of [Null Island](https://en.wikipedia.org/wiki/Null_Island). This is the point on the Earth's surface where the Prime Meridian and Equator intersect with a latitude of 0 and a longitude of 0. The point also happens to be situated currently in the middle of the ocean. This query identifies any points located within 100 km of the point having latitude and longitude equal to zero.\",\"recommendation\":\"Update the coordinates of the affected organization unit to the correct location.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONI\"},{\"name\":\"program_rule_actions_without_section\",\"displayName\":\"Program rules with actions lacking a program stage section\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a section but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWS\"},{\"name\":\"periods_3y_future\",\"displayName\":\"Periods which are more than three years in the future.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are more than three years in the future.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\nfar future. Different data entry clients may not properly validate for periods\\nwhich are in the future, and thus any periods in the future should be reviewed.\\nIn some cases, data may be valid for future dates, e.g. targets which are set for the\\nnext fiscal year.\",\"recommendation\":\"If any periods exist in the system in the future, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\\n\\nIn many cases, clients may mean to transmit\\ndata for January 2021, but due to data entry errors, January 2031 is selected. Thus,\\nany data in the far future should be investigated to ensure it does not result\\nfrom data entry errors.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"P3F\"},{\"name\":\"orgunits_trailing_spaces\",\"displayName\":\"Organisation units should not have trailing spaces.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have trailing spaces.\",\"introduction\":\"Trailing spaces in organisation units are superfluous.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the trailing spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OTS\"},{\"name\":\"validation_rule_groups_scarce\",\"displayName\":\"Validation rule should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Validation rule should have at least two members.\",\"introduction\":\"Generally validation rule groups should be composed of multiple validation rules.\",\"recommendation\":\"Considering removing groups which are empty or which have a single member. Alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"validationRuleGroups\",\"isSlow\":false,\"code\":\"VRGS\"},{\"name\":\"indicators_with_invalid_numerator\",\"displayName\":\"Indicators with invalid numerator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators where the numerator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWIN\"},{\"name\":\"categories_one_default_category_combo\",\"displayName\":\"Only one default category combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category combo should exist\",\"introduction\":\"There should only exist one category combo with name and code \\\"default\\\".\",\"recommendation\":\"Only the category combo with UID \\\"bjDvmb4bfuf\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category combo or move all references to category combo \\\"bjDvmb4bfuf\\\" and then remove the unused conflicting category combo.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CODCC\"},{\"name\":\"data_elements_without_data_sets\",\"displayName\":\"Data elements lacking data Sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data sets\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWDS\"},{\"name\":\"category_combos_unused\",\"displayName\":\"Category combinations not used by other metadata objects\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category combinations not used by other metadata objects\",\"introduction\":\"Category combinations which are unused in any datasets, data elements, programs or data approval workflows may be safe to delete. In some cases, category combinations may be created, but never actually used for anything. This may lead to situations where users and implementers are confused about which category combination should actually be used. In general, it should be safe to delete unused category combinations, except in situations where existing data has been associated with them.\",\"recommendation\":\"Check to see if any data is associated with the category combination before attempting to delete it. Category combinations which are not currently used in any metadata objects may still be valid for legacy reasons, but they should be reviewed to be sure they are still needed. Otherwise, it should be safe to remove them from the system.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCU\"},{\"name\":\"category_option_groups_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option groups should be composed of at least two category options. There can however be legitimate cases when a single category option is part of a group, especially in cases where there is a direct mapping between age bands and category options.\",\"recommendation\":\"Considering removing groups with zero or one category options, or alternatively, add additional category options to the group to make it more useful.\",\"issuesIdType\":\"categoryOptionGroups\",\"isSlow\":false,\"code\":\"COGS\"},{\"name\":\"datasets_empty\",\"displayName\":\"Datasets with no data elements.\",\"section\":\"Data sets\",\"severity\":\"WARNING\",\"description\":\"Datasets with no data elements.\",\"introduction\":\"All datasets should have data elements assigned to them.\",\"recommendation\":\"Remove empty datasets, or alternatively, assign data elements to them.\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DE\"},{\"name\":\"indicators_without_groups\",\"displayName\":\"Indicators lacking groups\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that do not have at least one group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWG\"},{\"name\":\"orgunit_groups_scarce\",\"displayName\":\"Organisation unit groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Organisation unit groups should have at least two members.\",\"introduction\":\"Generally, organisation unit groups should be composed of multiple organisation units.\",\"recommendation\":\"Considering removing groups with zero or one organisation units, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OGS\"},{\"name\":\"program_rules_without_priority\",\"displayName\":\"Program rules lacking a priority setting\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules with action type \\\"assign\\\" where the rule priority is not yet set\",\"recommendation\":\"Set a priority for the program rule(s)\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWP\"},{\"name\":\"categories_unique_category_combo\",\"displayName\":\"Different category combinations should not have the exact same combination of categories.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Different category combinations should not have the exact same combination of categories.\",\"introduction\":\"Category combinations should be a unique combination of categories. If two or more category combinations contain the exact same set of categories, this would be considered to be duplicative and potentially confusing to users.\",\"recommendation\":\"One category combo is kept, all references are updated to use this combo and other combos are removed.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CUCC\"},{\"name\":\"indicator_group_sets_scarce\",\"displayName\":\"Indicator groups sets should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups sets should have at least two members.\",\"introduction\":\"All indicator group set should be composed of at least two indicators groups.\",\"recommendation\":\"Considering removing indicator group sets with less than two indicator groups, or alternatively, add additional indicator groups to the indicator group set to make it more useful.\",\"issuesIdType\":\"indicatorGroupSets\",\"isSlow\":false,\"code\":\"IGSS\"},{\"name\":\"validation_rules_with_invalid_right_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a right side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWIRSE\"},{\"name\":\"data_elements_aggregate_aggregation_operator\",\"displayName\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"introduction\":\"Data elements which are not numeric (text, dates, etc) should have an aggregation operator set to NONE. Data elements which are able to be aggregated (numbers, integers, etc) should have an aggregation operator set to something other than NONE, most often SUM.\",\"recommendation\":\"Open the affected data elements in the Maintenance App and change their aggregation type to an appropriate type. Alternatively, these can be altered via the API.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAAO\"},{\"name\":\"org_unit_groups_without_group_sets\",\"displayName\":\"Organisation unit groups lacking group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation unit groups that aren't member of at least one organisation unit group set\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OUGWGS\"},{\"name\":\"program_rule_variables_without_attribute\",\"displayName\":\"Program rule variables lacking an attribute\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring an attribute source but that is not yet linked to an attribute\",\"recommendation\":\"Assign an attribute to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWA\"},{\"name\":\"program_indicator_groups_scarce\",\"displayName\":\"Program indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Program indicator groups should have at least two members.\",\"introduction\":\"Program indicator groups should generally be composed of two or more program indicators.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"programIndicatorGroups\",\"isSlow\":false,\"code\":\"PIGS\"},{\"name\":\"program_rules_no_expression\",\"displayName\":\"Program rules with no expression.\",\"section\":\"Program rules\",\"severity\":\"WARNING\",\"description\":\"Program rules with no expression.\",\"introduction\":\"All program rules should have an expression. Expressions are used by program rules to determine when they should be triggered. Program rules with no expression have no purpose.\",\"recommendation\":\"Using the DHIS2 user interface, assign an expression to each of the program rules which is missing one. Otherwise, if it is safe to delete the program rule with no expression, it is recommended to remove it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNE\"},{\"name\":\"data_elements_aggregate_no_data\",\"displayName\":\"Aggregate data elements with NO data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements with NO data values.\",\"introduction\":\"Data elements should generally always be associated with data values. If data elements exist in a data set which is active, but there are no data values associated with them, they may not be part of the data entry screens. Alternatively, the data element may have been added but never been associated with a dataset.\",\"recommendation\":\"Consider removing data elements with no data values.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAND\"},{\"name\":\"program_indicators_without_expression\",\"displayName\":\"Program indicators lacking an expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have no expression set yet\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWE\"},{\"name\":\"periods_distant_past\",\"displayName\":\"Periods which are in the distant past.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are in the distant past.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\ndistant past. Different data entry clients may not properly validate for periods\\nwhich are in the distant past, and thus these periods should be triaged to ensure\\nthat data has not been entered against them by mistake.\",\"recommendation\":\"If any periods exist in the system in the distant past, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PDP\"},{\"name\":\"org_units_being_orphaned\",\"displayName\":\"Orphaned organisation units\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that aren't level 1 units but that lack a parent so that they are not connected to the rest of the organisation tree\",\"recommendation\":\"Find (or create) and set the correct parent for the orphaned organisation unit(s). Eventually this is also caused by having set the wrong level.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUBO\"},{\"name\":\"cocs_wrong_cardinality\",\"displayName\":\"Category option combinations with incorrect cardinality.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with incorrect cardinality.\",\"introduction\":\"All category option combinations should have exactly the same number of category option associations as the number of categories in the category combination. If there are two categories in a category combination, then every category option combination should have exactly two category options.\\nCategory option combinations with the incorrect cardinality are usually the result of a category combination having been created, and then modified later. Suppose that two categories are used to create a category combination. Each category option combination of this category combo will have two category options. If an additional category is added to the category combination later, new category option combinations with three category options will be created and associated with this category combo. The original category option combinations would be considered to be invalid.\",\"recommendation\":\"Category option combinations which have an incorrect cardinality will be ignored by the DHIS2 analytics system and should be removed.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CWC\"},{\"name\":\"dashboards_not_viewed_one_year\",\"displayName\":\"Dashboards which have not been actively viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Dashboards which have not been actively viewed in the past 12 months\",\"introduction\":\"Dashboards should be regularly viewed in the system. In many cases, users may create dashboards for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to useful dashboards being difficult to find. This check identifies any dashboards which have not been viewed in the past year.\",\"recommendation\":\"Unused dashboards can be deleted in the entirety from the main dashboard app by clicking on the \\\"Edit\\\" button and choosing \\\"Delete\\\". Note that this process cannot be undone! Another option would be to alter the sharing of the dashboard so that it is not visible to any user.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNVOY\"}]", - "responseSize": 66022, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - } -] diff --git a/cypress/fixtures/network/40/users_should_be_able_to_navigate_to_the_new_job_route.json b/cypress/fixtures/network/40/users_should_be_able_to_navigate_to_the_new_job_route.json deleted file mode 100644 index cf9c845ed..000000000 --- a/cypress/fixtures/network/40/users_should_be_able_to_navigate_to_the_new_job_route.json +++ /dev/null @@ -1,305 +0,0 @@ -[ - { - "path": "/api/40/systemSettings/helpPageLink", - "featureName": "Users should be able to navigate to the new job route", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"helpPageLink\":\"https://dhis2.github.io/dhis2-docs/master/en/user/html/dhis2_user_manual_en.html\"}", - "responseSize": 99, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/pushAnalysis?paging=false", - "featureName": "Users should be able to navigate to the new job route", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"pushAnalysis\":[{\"displayName\":\"Immunization Key Indicators Monthly Report\",\"id\":\"jtcMAKhWwnc\"}]}", - "responseSize": 98, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations?fields=*&paging=false", - "featureName": "Users should be able to navigate to the new job route", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"jobConfigurations\":[{\"href\":\"/40/jobConfigurations/sHMedQF7VYa\",\"name\":\"Credentials expiry alert\",\"created\":\"2017-12-08T12:45:18.351\",\"lastUpdated\":\"2023-02-28T15:24:55.737\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"CREDENTIALS_EXPIRY_ALERT\",\"cronExpression\":\"0 0 2 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.668\",\"lastRuntimeExecution\":\"00:00:00.062\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Credentials expiry alert\",\"favorite\":false,\"id\":\"sHMedQF7VYa\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/YvAwAmrqAtN\",\"name\":\"Dataset notification\",\"created\":\"2017-12-08T12:45:18.355\",\"lastUpdated\":\"2023-02-28T15:24:55.810\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"DATA_SET_NOTIFICATION\",\"cronExpression\":\"0 0 2 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.668\",\"lastRuntimeExecution\":\"00:00:00.137\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Dataset notification\",\"favorite\":false,\"id\":\"YvAwAmrqAtN\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/BFa3jDsbtdO\",\"name\":\"Data statistics\",\"created\":\"2017-12-08T12:45:18.337\",\"lastUpdated\":\"2023-02-28T15:24:55.877\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"DATA_STATISTICS\",\"cronExpression\":\"0 0 2 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.668\",\"lastRuntimeExecution\":\"00:00:00.207\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Data statistics\",\"favorite\":false,\"id\":\"BFa3jDsbtdO\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/pd6O228pqr0\",\"name\":\"File resource clean up\",\"created\":\"2017-12-08T12:45:18.317\",\"lastUpdated\":\"2023-02-28T15:24:55.839\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"FILE_RESOURCE_CLEANUP\",\"cronExpression\":\"0 0 2 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.669\",\"lastRuntimeExecution\":\"00:00:00.169\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"File resource clean up\",\"favorite\":false,\"id\":\"pd6O228pqr0\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/uwWCT2BMmlq\",\"name\":\"Remove expired or used reserved values\",\"created\":\"2021-06-10T12:37:25.034\",\"lastUpdated\":\"2023-02-28T15:24:55.923\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"REMOVE_USED_OR_EXPIRED_RESERVED_VALUES\",\"cronExpression\":\"0 0 2 ? * *\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.668\",\"lastRuntimeExecution\":\"00:00:00.253\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Remove expired or used reserved values\",\"favorite\":false,\"id\":\"uwWCT2BMmlq\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/vt21671bgno\",\"name\":\"System version update check notification\",\"created\":\"2021-12-21T12:31:00.047\",\"lastUpdated\":\"2023-02-28T16:33:40.425\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"SYSTEM_VERSION_UPDATE_CHECK\",\"cronExpression\":\"44 8 3 ? * *\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T03:08:44.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T16:33:39.585\",\"lastRuntimeExecution\":\"00:00:00.838\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"System version update check notification\",\"favorite\":false,\"id\":\"vt21671bgno\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/fUWM1At1TUx\",\"name\":\"User account expiry alert\",\"created\":\"2021-09-01T07:24:20.394\",\"lastUpdated\":\"2023-02-28T15:24:55.747\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"ACCOUNT_EXPIRY_ALERT\",\"cronExpression\":\"0 0 2 ? * *\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-03-01T02:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-28T15:24:55.669\",\"lastRuntimeExecution\":\"00:00:00.071\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"User account expiry alert\",\"favorite\":false,\"id\":\"fUWM1At1TUx\",\"attributeValues\":[]},{\"href\":\"/40/jobConfigurations/Js3vHn2AVuG\",\"name\":\"Validation result notification\",\"created\":\"2017-12-08T12:45:18.346\",\"lastUpdated\":\"2023-02-27T16:37:17.320\",\"translations\":[],\"externalAccess\":false,\"userGroupAccesses\":[],\"userAccesses\":[],\"access\":{\"manage\":true,\"externalize\":false,\"write\":true,\"read\":true,\"update\":true,\"delete\":true},\"favorites\":[],\"sharing\":{\"external\":false,\"users\":{},\"userGroups\":{}},\"jobType\":\"VALIDATION_RESULTS_NOTIFICATION\",\"cronExpression\":\"0 0 7 * * ?\",\"enabled\":true,\"jobStatus\":\"SCHEDULED\",\"nextExecutionTime\":\"2023-02-28T07:00:00.000\",\"lastExecutedStatus\":\"COMPLETED\",\"lastExecuted\":\"2023-02-27T14:55:13.329\",\"lastRuntimeExecution\":\"00:00:00.022\",\"leaderOnlyJob\":true,\"configurable\":false,\"schedulingType\":\"CRON\",\"displayName\":\"Validation result notification\",\"favorite\":false,\"id\":\"Js3vHn2AVuG\",\"attributeValues\":[]}]}", - "responseSize": 6953, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/analytics/tableTypes", - "featureName": "Users should be able to navigate to the new job route", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"]", - "responseSize": 122, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations/jobTypes?fields=*&paging=false", - "featureName": "Users should be able to navigate to the new job route", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"jobTypes\":[{\"name\":\"Data integrity\",\"jobType\":\"DATA_INTEGRITY\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"checks\",\"fieldName\":\"Checks\",\"persisted\":false,\"collectionName\":\"checks\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/dataIntegrity\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.parameters.DataIntegrityJobParameters$DataIntegrityReportType\",\"name\":\"type\",\"fieldName\":\"Type\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"REPORT\",\"SUMMARY\",\"DETAILS\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Resource table\",\"jobType\":\"RESOURCE_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Analytics table\",\"jobType\":\"ANALYTICS_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"skipPrograms\",\"fieldName\":\"Skip programs\",\"persisted\":false,\"collectionName\":\"skipPrograms\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/programs\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipResourceTables\",\"fieldName\":\"Skip resource tables\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Continuous analytics table\",\"jobType\":\"CONTINUOUS_ANALYTICS_TABLE\",\"schedulingType\":\"FIXED_DELAY\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"fullUpdateHourOfDay\",\"fieldName\":\"Full update hour of day\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Data sync\",\"jobType\":\"DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker programs data sync\",\"jobType\":\"TRACKER_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Event programs data sync\",\"jobType\":\"EVENT_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Meta data sync\",\"jobType\":\"META_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"trackerProgramPageSize\",\"fieldName\":\"Tracker program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"eventProgramPageSize\",\"fieldName\":\"Event program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"dataValuesPageSize\",\"fieldName\":\"Data values page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Aggregate data exchange\",\"jobType\":\"AGGREGATE_DATA_EXCHANGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"dataExchangeIds\",\"fieldName\":\"Data exchange ids\",\"persisted\":false,\"collectionName\":\"dataExchangeIds\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/aggregateDataExchanges\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Send scheduled message\",\"jobType\":\"SEND_SCHEDULED_MESSAGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Program notifications\",\"jobType\":\"PROGRAM_NOTIFICATIONS\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Monitoring\",\"jobType\":\"MONITORING\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"validationRuleGroups\",\"fieldName\":\"Validation rule groups\",\"persisted\":false,\"collectionName\":\"validationRuleGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/validationRuleGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"sendNotifications\",\"fieldName\":\"Send notifications\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"persistResults\",\"fieldName\":\"Persist results\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Push analysis\",\"jobType\":\"PUSH_ANALYSIS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"pushAnalysis\",\"fieldName\":\"Push analysis\",\"persisted\":false,\"collectionName\":\"pushAnalysis\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/pushAnalysis\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker search optimization\",\"jobType\":\"TRACKER_SEARCH_OPTIMIZATION\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"attributes\",\"fieldName\":\"Attributes\",\"persisted\":false,\"collectionName\":\"attributes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/trackedEntityAttributes/indexable\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipIndexDeletion\",\"fieldName\":\"Skip index deletion\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Predictor\",\"jobType\":\"PREDICTOR\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictors\",\"fieldName\":\"Predictors\",\"persisted\":false,\"collectionName\":\"predictors\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictors\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictorGroups\",\"fieldName\":\"Predictor groups\",\"persisted\":false,\"collectionName\":\"predictorGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictorGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Disable inactive users\",\"jobType\":\"DISABLE_INACTIVE_USERS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"inactiveMonths\",\"fieldName\":\"Inactive months\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"reminderDaysBefore\",\"fieldName\":\"Reminder days before\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Test\",\"jobType\":\"TEST\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Long\",\"name\":\"waitMillis\",\"fieldName\":\"Wait millis\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"stages\",\"fieldName\":\"Stages\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtStage\",\"fieldName\":\"Fail at stage\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"items\",\"fieldName\":\"Items\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtItem\",\"fieldName\":\"Fail at item\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Long\",\"name\":\"itemDuration\",\"fieldName\":\"Item duration\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.String\",\"name\":\"failWithMessage\",\"fieldName\":\"Fail with message\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"failWithException\",\"fieldName\":\"Fail with exception\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.JobProgress$FailurePolicy\",\"name\":\"failWithPolicy\",\"fieldName\":\"Fail with policy\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"PARENT\",\"FAIL\",\"SKIP_STAGE\",\"SKIP_ITEM\",\"SKIP_ITEM_OUTLIER\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"runStagesParallel\",\"fieldName\":\"Run stages parallel\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]}]}", - "responseSize": 24994, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/validationRuleGroups?paging=false", - "featureName": "Users should be able to navigate to the new job route", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"validationRuleGroups\":[{\"displayName\":\"ANC\",\"id\":\"UP1lctvalPn\"},{\"displayName\":\"Commodities\",\"id\":\"xcpl667ccfF\"},{\"displayName\":\"Critical event\",\"id\":\"xWtt9c443Lt\"},{\"displayName\":\"District stock\",\"id\":\"mEtdbIDDhix\"},{\"displayName\":\"Epidemic disease outbreak\",\"id\":\"y2yQIm79VTW\"},{\"displayName\":\"Facility Stock\",\"id\":\"SqyI8HKqI4g\"},{\"displayName\":\"Immunisation\",\"id\":\"UiOSY1iIdub\"},{\"displayName\":\"Infectious disease outbreak\",\"id\":\"WUZXEFdn1PX\"},{\"displayName\":\"Malaria\",\"id\":\"zlaSof6qLqF\"},{\"displayName\":\"Population\",\"id\":\"D3bItmtBpsW\"},{\"displayName\":\"TB\",\"id\":\"IMF6p1MqoHl\"},{\"displayName\":\"Testing\",\"id\":\"nMDkAJXsmlR\"}]}", - "responseSize": 628, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictors?paging=false", - "featureName": "Users should be able to navigate to the new job route", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictors\":[{\"displayName\":\"Malaria Outbreak Threshold\",\"id\":\"tEK1OEqS4O1\"}]}", - "responseSize": 80, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictorGroups?paging=false", - "featureName": "Users should be able to navigate to the new job route", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictorGroups\":[]}", - "responseSize": 22, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/dataIntegrity", - "featureName": "Users should be able to navigate to the new job route", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[{\"name\":\"orgunits_invalid_geometry\",\"displayName\":\"Organisation units with invalid geometry.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with invalid geometry.\",\"introduction\":\"DHIS2 uses the PostGIS database extension to manage the geographical information associated\\nwith organisation units. There are various reasons why geometries may be considered to be\\ninvalid including self-inclusions, self-intersections, and sliver polygons. Please see the\\nPostGIS documentation for a more in-depth discussion on this topic.\\n\\nInvalid geometry is not always a problem and may be able to be ignored, however, it has been observed in certain systems\\nthat this can lead to problems in analytics. If you are experiencing issues when generating analytics\\ntables, and see errors related to invalid geometries, you will need to either remove the invalid geometry,\\nor fix it.\",\"recommendation\":\"Update the geometry of the affected organisation units to a valid geometry. It may be possible to use the PostGIS function `ST_MakeValid` to automatically fix the problem. However, in other cases the geometry may need to be edited in a GIS tool, and then updated again in DHIS2.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OIG\"},{\"name\":\"data_elements_without_groups\",\"displayName\":\"Data elements lacking groups\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data element groups\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWG\"},{\"name\":\"orgunit_group_sets_excess_groups\",\"displayName\":\"Organisation units which belong to multiple groups in a group set.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which belong to multiple groups in a group set.\",\"introduction\":\"Organisation units should belong to exactly one group within each organisation unit group set of which they are a member. If the organisation unit belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the organisation units in the details list to exactly one group within each group set membership.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OGSEG\"},{\"name\":\"validation_rules_missing_value_strategy_null\",\"displayName\":\"All validation rule expressions should have a missing value strategy.\",\"section\":\"Validation rules\",\"severity\":\"SEVERE\",\"description\":\"All validation rule expressions should have a missing value strategy.\",\"introduction\":\"Validation rules are composed of a left and right side expression. In certain systems the missing value strategy may not be defined. This may lead to an exception during validation rule analysis. The affected validation rules should be corrected to with an appropriate missing value strategy.\",\"recommendation\":\"Using the results of the the details SQL view, identify the affected validation rules and which side of the rule the missing value strategy has not been specified. Using the maintenance app, make the appropriate corrections and save the rule.\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRMVSN\"},{\"name\":\"category_combos_being_invalid\",\"displayName\":\"Invalid Category-combos\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Lists all category-combos that are invalid\",\"recommendation\":\"Make sure the category combo is assigned to at least one category and that all categories have category options \",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCBI\"},{\"name\":\"data_elements_in_data_set_not_in_form\",\"displayName\":\"Data sets with data elements not in data entry form\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that have data elements which are neither a member of the set's data entry form nor a member of the sets section\",\"recommendation\":\"Either remove the data elements in question or make them a member of the set's form or section\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DEIDSNIF\"},{\"name\":\"categories_no_options\",\"displayName\":\"Categories with no category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with no category options\",\"introduction\":\"Categories should always have at least one category option.\",\"recommendation\":\"Any categories without category options should either be removed from the system if they are not in use. Otherwise, appropriate category options should be added to the category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CNO\"},{\"name\":\"data_elements_aggregate_no_analysis\",\"displayName\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"introduction\":\"All aggregate data elements that are captured in DHIS2 should be used to produce some type of analysis output (charts, maps, tables). This can be by using them directly in an output, or by having them contribute to an indicator calculation that is used an output.\",\"recommendation\":\"Data elements that are not routinely being reviewed in analysis, either directly or indirectly through indicators, should be reviewed to determine if they still need to be collected. If these are meant to be used in routine review, then associated outputs should be created using them. If these data elements are not going to be used for any type of information review, consideration should be made to either archive them or delete them.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANA\"},{\"name\":\"indicators_duplicated_terms\",\"displayName\":\"Indicators with the same terms.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same terms.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check attempts to identify indicators with the same formulas, regardless of the order of their their terms. Suppose you have an indicator which calculates total ANC attendance: ANC Total = ANC1 + ANC2 + ANC3 Suppose then another indicator exists in the system, which has been defined as: ANC Totals = ANC3 + ANC2 + ANC1 These two indicators are equivalent, and will produce the same result, and are thus considered to be duplicated.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Considered deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IDT\"},{\"name\":\"program_rules_no_action\",\"displayName\":\"Program rules with no action.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules with no action.\",\"introduction\":\"All program rules should have an action.\",\"recommendation\":\"Using the DHIS2 user interface, assign an action to each of the program rules which is missing one. Alternatively, if the program rule is not in use, then consider removing it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNA\"},{\"name\":\"orgunits_compulsory_group_count\",\"displayName\":\"Organisation units that are not in all compulsory orgunit group sets\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Orgunits that are not in all compulsory orgunit group sets\",\"introduction\":\"If any organisation unit groups have been marked as compulsory, each and every organisation unit should belong to exactly one group within each compulsory organisation unit group set. Assume we have created a group set called \\\"Ownership\\\" with two groups \\\"Public\\\" and \\\"Private\\\". Each and every organisation unit contained in the hierarchy must belong to either Public or Private (but not both). When organisation unit are not part of a group set, results in the analytics apps will not be correct if the organisation unit group set is used for aggregation.\",\"recommendation\":\"For each of the organisation units identified in the details query, you should assign the appropriate organisation unit group within the group set. Alternatively, if the group set should not be compulsory, you should change this attribute.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OCGC\"},{\"name\":\"orgunits_no_coordinates\",\"displayName\":\"Organisation units with no coordinates.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with no coordinates.\",\"introduction\":\"Ideally, all organisation units contained in the DHIS2 hierarchy should have a valid\\nset of coordinates. Usually for all organisation units above the facility level,\\nthese coordinates should be a polygon which provides the boundary of the organisation\\nunit. For facilities, these are usually represented as point coordinates.\\n\\nThere can obviously be exceptions to this rule. Mobile health facilities may not have\\na fixed location. Community health workers or wards below the facility level\\nmay also not have a defined or definable coordinate.\\n\\nThis check is intended to allow you to review all organisation units which do\\nnot have any coordinates and make a determination as to whether they should be updated.\",\"recommendation\":\"Where appropriate, update the geometry of each organisation unit with a valid geometry.\\nYou may need to contact the appropriate local government office to obtain a copy\\nof district boundaries, commonly referred to as \\\"shape files\\\". Another possibility\\nis to use freely available boundary files from GADM (https://gadm.org)\\n\\nIf facilities are missing coordinates, it may be possible to obtain these from\\nthe facility staff using their smart phone to get the coordinates. Images\\nfrom Google Maps can also often be used to estimate the position of a facility,\\nassuming that you have good enough resolution and local knowledge of where\\nit is located.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONC\"},{\"name\":\"data_sets_not_assigned_to_org_units\",\"displayName\":\"Data sets not assigned to organisation units\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that are not assigned to any organisation units\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DSNATOU\"},{\"name\":\"dashboards_no_items\",\"displayName\":\"Dashboards with no items.\",\"section\":\"Dashboards\",\"severity\":\"INFO\",\"description\":\"Dashboards with no items.\",\"introduction\":\"All dashboards should have content on them. Dashboards without any content do not serve any purpose, and can make it more difficult to find relevant dashboards with content.\",\"recommendation\":\"Dashboards without content that have not been modified in the last 14 days should be considered for deletion.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNI\"},{\"name\":\"orgunits_same_name_and_parent\",\"displayName\":\"Organisation units should not have the same name and parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have the same name and parent.\",\"introduction\":\"Organisation units may have exactly the same name. This may become confusing to users, particularly if the organisation unit has the same name and same parent. This can easily lead to data entry or analysis mistakes as users have no way to distinguish between the two organisation units.\",\"recommendation\":\"Rename identically named organisation units which share the same parent using the maintenance app.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OSNAP\"},{\"name\":\"indicators_not_grouped\",\"displayName\":\"Indicators not in any groups.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not in any groups.\",\"introduction\":\"All indicators should be in an indicator group. This allows users to find the indicators more easily in analysis apps and also contributes to having more complete indicators group sets. Maintenance operations can also be made more efficient by applying bulk settings (ex. sharing, filtering) to all indicators within an indicator group.\",\"recommendation\":\"Indicators that are not in a indicator group should be added to a relevant indicator group. If the indicators are not needed, they should be deleted.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"ING\"},{\"name\":\"category_option_group_sets_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option group sets should be composed of at least two category option groups.\",\"recommendation\":\"Considering removing groups with zero or one category option groups, or alternatively, add additional category option groups to the group set to make it more useful.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSS\"},{\"name\":\"org_units_without_groups\",\"displayName\":\"Organisation units lacking groups\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are not connected to at least one group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWG\"},{\"name\":\"data_elements_excess_groupset_membership\",\"displayName\":\"Data elements which belong to multiple groups in a group set.\",\"section\":\"data_elements\",\"severity\":\"SEVERE\",\"description\":\"Data elements which belong to multiple groups in a group set.\",\"introduction\":\"Data elements should belong to exactly one group within each data element group set of which they are a member. If the data element belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the data elements in the details list to exactly one data element group within each group set.\",\"issuesIdType\":\"data_elements_aggregate\",\"isSlow\":false,\"code\":\"DEEGM\"},{\"name\":\"data_element_groups_scarce\",\"displayName\":\"Data element groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Data element groups should have at least two members.\",\"introduction\":\"All data element groups should be composed of at least two data elements.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"dataElementGroups\",\"isSlow\":false,\"code\":\"DEGS\"},{\"name\":\"orgunits_not_contained_by_parent\",\"displayName\":\"Organisation units with point coordinates should be contained by their parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with point coordinates should be contained by their parent.\",\"introduction\":\"Facilities are often represented as points in the DHIS2 hierarchy. Their parent organisation units geometry should contain all facilities which have been associated with them.\",\"recommendation\":\"Often boundary files are simplified when they are uploaded into DHIS2. This process may result in\\nfacilities which are located close to the border of a given district to fall outside of the district\\nwhen the boundary is simplified. This is considered to be more of a cosmetic problem for most DHIS2\\ninstallations, but could become an issue if any geospatial analysis is attempted using the\\nboundaries and point coordinates.\\n\\nIn cases where the facility falls outside of its parent's boundary\\nyou should confirm that the coordinates are correct. If the location is close to the boundary, you\\nmay want to reconsider how the boundary files have been simplified. Otherwise, if the location of\\nthe facility is completely incorrect, it should be rectified.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONCBP\"},{\"name\":\"program_rules_message_no_template\",\"displayName\":\"Program rules actions which should send or schedule a message without a message template.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules actions which should send or schedule a message without a message template.\",\"introduction\":\"Program rule actions of type \\\"Send message\\\" or \\\"Schedule message\\\" should have an associated message template.\",\"recommendation\":\"Using the DHIS2 user interface, assign a message template to each of the program rule actions which send or schedule messages but which does not have an association with a message template.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRMNT\"},{\"name\":\"indicators_with_invalid_denominator\",\"displayName\":\"Indicators with invalid denominator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"List all indicators where the denominator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWID\"},{\"name\":\"indicator_types_duplicated\",\"displayName\":\"Indicator types with the same factor.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicator types with the same factor.\",\"introduction\":\"Indicators can be assigned a factor which is multiplied by the indicator's value. For example, if you create a percentage based indicator, you can assign the indicator a factor of 100, which would be multiplied by the actual value of the indicator calculated by DHIS2. In general, having multiple indicator types with the same factor is not recommended. It is duplicative, and may lead to confusion.\",\"recommendation\":\"Duplicated indicator types should consider to be removed from the system. Consider choosing one of the duplicated indicator types as the one to keep, and then update all indicators which share the same factor to this indicator type. The duplicated indicator types can then be removed from the system.\",\"issuesIdType\":\"indicatorTypes\",\"isSlow\":false,\"code\":\"ITD\"},{\"name\":\"options_sets_empty\",\"displayName\":\"Empty option sets\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Empty option sets\",\"introduction\":\"All option sets should generally include at least two items. Empty option sets serve no purpose.\",\"recommendation\":\"Options should either be added to the option set, or the option set should be deleted.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSE\"},{\"name\":\"category_options_no_categories\",\"displayName\":\"Category options with no categories.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options with no categories.\",\"introduction\":\"All category options should belong to at least one category.\",\"recommendation\":\"Category options which are not part of any category should be removed or alternatively should be added to an appropriate category.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CONC\"},{\"name\":\"orgunits_orphaned\",\"displayName\":\"Orphaned organisation units.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"Orphaned organisation units.\",\"introduction\":\"Orphaned organisation units are those which have neither parents nor any children. This means that they have no relationship to the main organisation unit hierarchy. These may be created by faulty metadata imports or direct manipulation of the database.\",\"recommendation\":\"The orphaned organisation units should be assigned a parent or removed from the system. It is recommended to use the DHIS2 API for this task if possible. If this is not possible, then they may need to be removed through direct SQL on the DHIS2 database.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OO\"},{\"name\":\"indicators_with_identical_formulas\",\"displayName\":\"Indicators with identical formulas\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that have the identical formulas with at least one other indicator\",\"recommendation\":\"Check if the same indicator should be used everywhere and remove duplicates\",\"isSlow\":false,\"code\":\"IWIF\"},{\"name\":\"program_indicators_with_invalid_filters\",\"displayName\":\"Program indicators with invalid filter\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators with invalid filter expression\",\"recommendation\":\"Check that the expression evaluates to true/false\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIF\"},{\"name\":\"program_rules_without_condition\",\"displayName\":\"Program rules lacking a condition\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that have no condition yet\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWC\"},{\"name\":\"categories_one_default_category\",\"displayName\":\"Only one default category should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category should exist\",\"introduction\":\"There should only exist one category with name and code \\\"default\\\".\",\"recommendation\":\"Only the category with UID \\\"GLevLNI9wkl\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category or move all references to category \\\"GLevLNI9wkl\\\" and then remove the unused conflicting category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CODC\"},{\"name\":\"org_units_with_cyclic_references\",\"displayName\":\"Organisation units with cyclic references\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that have a conflicting parent hierarchy definition so that two organisation units become parent of each other or in other words they form a circular reference\",\"recommendation\":\"One of the organisation units must be setup wrongly and needs to be corrected so that a non-circular tree connects the two\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWCR\"},{\"name\":\"program_rule_variables_without_data_element\",\"displayName\":\"Program rule variables lacking a data element\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring a data element source but that is not yet linked to a data element\",\"recommendation\":\"Assign a data element to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWDE\"},{\"name\":\"org_units_violating_exclusive_group_sets\",\"displayName\":\"Organisation units with conflicting exclusive group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are members of multiple exclusive organisation unit groups\",\"recommendation\":\"Remove the organisation unit from all but one exclusive organisation unit group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUVEGS\"},{\"name\":\"program_rule_actions_without_data_object\",\"displayName\":\"Program rules with actions lacking a data object\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires either a data element or an attribute but is not connected either\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWDO\"},{\"name\":\"orgunits_openingdate_gt_closeddate\",\"displayName\":\"Organisation units which have an opening date later than the closed date.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which have an opening date later than the closed date.\",\"introduction\":\"If a closing date has been defined for an organisation unit, it should always be after the opening date (if one has been defined).\",\"recommendation\":\"Alter either the opening or closing date of all affected organisation units so that the closing date is after the opening date.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OOGC\"},{\"name\":\"categories_one_default_category_option_combo\",\"displayName\":\"Only one default category option combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option combo should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option combo with UID \\\"HllvX50cXC0\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option combo or move all references to category option combo \\\"HllvX50cXC0\\\" and then remove the unused conflicting category option combo.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CODCOC\"},{\"name\":\"category_option_group_sets_incomplete\",\"displayName\":\"Category option group sets which do not contain all category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option group sets which which do not contain all category options.\",\"introduction\":\"Category option group sets are composed of multiple category option groups, which are in turn composed of various category options. Category option group sets are often used to group related category options together for analytical purposes. Categories are also composed of category options. In general, but not always, category option group sets should contain all category options of related categories. Suppose we have the following two age categories. \\nAge coarse: <15, 15+ Age fine: <1, 1-10, 10-14,15-19,20-24,25-29,30-34,35-39,40-44,45+\\nIn many cases, related data elements may be disaggregated differently. This may be to differences in the way in which the data is collected, or as is often the case, the disaggregation has changed over time. If we wish to analyze data for two different data elements (one of which uses Age coarse and the other Age fine), we can create a category option group set consisting of two category option groups which should consist of the following category options from above. \\n<15: <15, <1, 1-10, 10-14 15+: 15+, 15-19,20-24,25-29,30-34,35-39,40-44,45+\\nSuppose that we happen to omit the category option \\\"<1\\\" from the \\\"<15\\\" category option group. This would result in potential aggregation errors in when using this category option group set in any analytical objects. The details of this metadata check would return the UID and name of the category option group set. The category and category option would also be provided. Using the previous example, we would see \\\"Age fine:{<1}\\\" in the metadata check details section, to indicate that the <1 category option which is part of the \\\"Age fine\\\" category, is missing from the category option group set.\\nThere may exist specific analytical reasons why specific category options are omitted from a category option group set. However,these should usually be special cases. This metadata check will identify cases where category option group sets appear to be incomplete, however you should carefully review any groups which appear in the details. \\nThis check may also produce a number of issues which may at first glance appear to be false positives. In some cases, category options may be added to a category by mistake. When category option group sets are created, this extraneous option may be omitted and thus appear as missing from the group set. \\nAnother observed situation is where an option like \\\"Unknown\\\" is used across unrelated categories. Suppose you have two categories \\\"Age (<15, 15+, Unknown)\\\" and \\\"Sex (Male,Female,Unknown)\\\". Similar to above, we create category option group sets like: \\n<15: <15 15+: 15+ Unknown: Unknown\\nThis metadata check will report that \\\"Male\\\" and \\\"Female\\\" are missing from the group set. This is because the same \\\"Unknown\\\" option is shared between two different, unrelated categories. It is recommended that if this situation occurs, that you create two separate \\\"Unknown\\\" category options like \\\"Unknown sex\\\" and \\\"Unknown age\\\".\",\"recommendation\":\"Using the maintenance app, assign the missing category options to an appropriate category option group within the affected category option group set.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSI\"},{\"name\":\"maps_not_viewed_one_year\",\"displayName\":\"Maps which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Maps which have not been viewed in the past 12 months\",\"introduction\":\"Maps should be regularly viewed in the system. In many cases, users may create maps for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system and being difficult to find in the Maps app.\",\"recommendation\":\"Unused maps can be removed directly using the Maps app by a user with sufficient authority. If maps are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"maps\",\"isSlow\":false,\"code\":\"MNVOY\"},{\"name\":\"indicators_exact_duplicates\",\"displayName\":\"Indicators with the same formula.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same formula.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check shows indicators which have the exact same formulas. Spaces which are present are removed prior to comparison.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Consider deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IED\"},{\"name\":\"indicators_violating_exclusive_group_sets\",\"displayName\":\"Indicators with conflicting exclusive group sets\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that are members of multiple exclusive indicator groups\",\"recommendation\":\"Remove the indicator from all but one exclusive indicator group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IVEGS\"},{\"name\":\"category_options_excess_groupset_membership\",\"displayName\":\"Category options which belong to multiple groups in a category option group set.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category options which belong to multiple groups in a category option group set.\",\"introduction\":\"Category options should belong to exactly one category option group which are part of a category option group set. If the category option belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the category option in the details list to exactly one category option group within each group set.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"COEGM\"},{\"name\":\"periods_duplicates\",\"displayName\":\"Duplicate Periods\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Lists all periods duplicates which have identical type and start date\",\"recommendation\":\"Make sure all database references are moved to one of the duplicates before deleting the unused duplicates\",\"isSlow\":false,\"code\":\"PD\"},{\"name\":\"program_rules_without_action\",\"displayName\":\"Program rules lacking an action\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that are not connected to any program rule action\",\"recommendation\":\"Connect the rule to an action or consider removing the rule\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWA\"},{\"name\":\"orgunits_multiple_roots\",\"displayName\":\"The organisation unit hierarchy should have a single root.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"The organisation unit hierarchy should have a single root.\",\"introduction\":\"Every DHIS2 system should have a single root organisation unit. This means a single organisation unit from which all other branches of the hierarchy are descendants.\",\"recommendation\":\"Once you have decided which organisation unit should be the real root of the organisation unit hierarchy, you should update the parent organisation unit. This can be done by using the DHIS2 API or my updating the value directly in the `organisationunit` table.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMR\"},{\"name\":\"validation_rules_with_invalid_left_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a left side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWILSE\"},{\"name\":\"program_rule_actions_without_stage_id\",\"displayName\":\"Program rules with actions lacking a program stage\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a program stage but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWSI\"},{\"name\":\"indicator_groups_scarce\",\"displayName\":\"Indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups should have at least two members.\",\"introduction\":\"All indicator groups should be composed of at least two indicators.\",\"recommendation\":\"Considering removing groups with zero or one groups, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"indicatorGroups\",\"isSlow\":false,\"code\":\"IGS\"},{\"name\":\"option_sets_wrong_sort_order\",\"displayName\":\"Option sets with possibly wrong sort order.\",\"section\":\"Option sets\",\"severity\":\"SEVERE\",\"description\":\"Option sets with possibly wrong sort order.\",\"introduction\":\"Option sets contain options which should be ordered sequentially. The sort_order property should always start with 1 and have a sequential sequence. If there are three options in the option set, then the sort order should be 1,2,3. \\nIn certain circumstances, options may be deleted from an option set, and the sort order may become corrupted. This may lead to a situation where it becomes impossible to update the option set from the maintenance app, and may lead to problems when attempting to using the option set in the data entry app.\",\"recommendation\":\"If it is possible to open the option set in the maintenance app, you can resort the option set, which should correct the problem. Another possible solution is to directly update the sort_order property of in the `optionset` table in the database, ensuring that a valid sequence is present for all options in the option set.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSWSO\"},{\"name\":\"periods_same_start_end_date\",\"displayName\":\"Periods with the same start and end dates\",\"section\":\"Periods\",\"severity\":\"CRITICAL\",\"description\":\"Periods with the same start and end dates\",\"introduction\":\"Different periods should not have exactly the same start and end date.\",\"recommendation\":\"All references to the duplicate periods should be removed from the system and reassigned. It is recommended to use the period with the lower periodid.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PSSED\"},{\"name\":\"program_indicators_with_invalid_expressions\",\"displayName\":\"Program indicators with invalid expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have an invalid expression\",\"recommendation\":\"Check that the expression evaluates to a number\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIE\"},{\"name\":\"program_rule_actions_without_notification\",\"displayName\":\"Program rule with actions lacking a notification template\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires a notification template but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWN\"},{\"name\":\"indicator_no_analysis\",\"displayName\":\"Indicators not used in analytical objects.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not used in analytical objects.\",\"introduction\":\"Indicators should be used to produce some type of analytical output (charts, maps, pivot tables). Note: indicators used in datasets to provide feedback during data entry are not counted as being used in analytical objects.\",\"recommendation\":\"Indicators that are not routinely being used for analysis should be reviewed to determine if they are useful and needed. If these are meant to be used for routine review, then associated outputs should be created using them. If these indicators are not going to be used for any type of information review, and are not used in data sets for feedback during data entry, consideration should be made to delete them.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"INA\"},{\"name\":\"user_groups_scarce\",\"displayName\":\"User groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"User groups should have at least two members.\",\"introduction\":\"Generally, user groups should contain two or more users.\",\"recommendation\":\"Considering removing user groups with less than two users, or alternatively, add additional users to the group to make it more useful.\",\"issuesIdType\":\"userGroups\",\"isSlow\":false,\"code\":\"UGS\"},{\"name\":\"data_elements_aggregate_with_different_period_types\",\"displayName\":\"Aggregate data elements which belong to datasets with different period types.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"SEVERE\",\"description\":\"Aggregate data elements which belong to datasets with different period types.\",\"introduction\":\"Data elements should not belong to datasets with different period types.\",\"recommendation\":\"If you need to collect data with different period types (e.g. weekly and monthly) you should use different data elements for each period type. In general, it is not recommended to collect data with different frequencies, since in general, data collected at higher frequencies (e.g. weekly) can be aggregated to data with lower frequencies (e.g yearly).\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAWDPT\"},{\"name\":\"validation_rules_without_groups\",\"displayName\":\"Validation rules lacking groups\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that are not member of at least one validation rule group\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWG\"},{\"name\":\"category_option_combos_disjoint\",\"displayName\":\"Category option combinations with disjoint associations.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with disjoint associations.\",\"introduction\":\"Under certain circumstances, category option combinations may exist in the system, but not have any direct association with category options which are associated with their category combination. This situation usually occurs when category options have been added to a category and then the category is added to a category combination. New category option combinations are created in the system at this point. If any of the category options are then removed in one of the underlying categories, a so-called disjoint category option combination may result. This is a category option combination which has no direct association with any category options in any of the categories associated with the category combination.\",\"recommendation\":\"The disjoint category option combinations should be removed from the system if possible. However, if any data is associated with the category option combination, a determination will need to be made in regards of how to deal with this data.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"COCD\"},{\"name\":\"options_sets_unused\",\"displayName\":\"Option sets which are not used\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Option sets which are not used\",\"introduction\":\"Option sets should be used for some purpose. The may be used by data elements, comments, attributes, or tracked entity attributes.\",\"recommendation\":\"Consider deleting unused option sets, or alternatively, ensure that they have been properly assigned.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSU\"},{\"name\":\"catoptioncombos_no_catcombo\",\"displayName\":\"Category options combinations with no category combination.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options combinations with no category combination.\",\"introduction\":\"All category option combinations should be associated with a category combo. In certain cases, when category combinations are deleted,the linkage between a category option combination and a category combination may become corrupted.\",\"recommendation\":\"Check if any data is associated with the category option combination in question. Likely, the data should either be deleted or migrated to a valid category option combination. Any data which is associated with any of these category option combinations will not be available through either the data entry modules or any of the analytical apps.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CNC\"},{\"name\":\"data_elements_violating_exclusive_group_sets\",\"displayName\":\"Data elements with conflicting exclusive group sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are a members of more than one exclusive data element set belonging to the same data element group set\",\"recommendation\":\"Either remove the data element from all but one exclusive group set or consider if the set really should be an exclusive group set\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEVEGS\"},{\"name\":\"categories_same_category_options\",\"displayName\":\"Categories with the same category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with the same category options\",\"introduction\":\"Categories with the exact same category options should be considered to be merged. Categories with the exact same category options may be easily confused by users in analysis. The details view will provide a list of categories which have the exact same category options. For each duplicated category a number in parentheses such as (1) will indicate which categories belong to duplicated groups.\",\"recommendation\":\"If category combinations have already been created with duplicative categories,\\nit is recommended that you do not take any action, but rather ensure\\nthat users understand that there may be two category combinations which are duplicative.\\n\\nIf you choose to merge the duplicative category combinations, you would need to \\nremap all category option combinations from the category combo which you wish to \\nremove, to the one which you wish to keep. \\n\\nIf one of the categories is not in use in any category combination, it should\\nconsider to be removed from the system.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CSCO\"},{\"name\":\"visualizations_not_viewed_one_year\",\"displayName\":\"Visualizations which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Visualizations which have not been viewed in the past 12 months\",\"introduction\":\"Visualizations should be regularly viewed in the system. In many cases, users may create charts for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to charts being difficult to find in the visualization app.\",\"recommendation\":\"Unused charts can be removed directly using the data visualization app by a user with sufficient authority. If charts are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"visualizations\",\"isSlow\":false,\"code\":\"VNVOY\"},{\"name\":\"categories_one_default_category_option\",\"displayName\":\"Only one default category option should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option with UID \\\"xYerKDKCefk\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option or move all references to category option \\\"xYerKDKCefk\\\" and then remove the unused conflicting category option.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CODCO\"},{\"name\":\"orgunits_multiple_spaces\",\"displayName\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"introduction\":\"Names and/or shortnames of organisation units should not contain multiple spaces. They are superfluous and may complicate the location of organisation units when they are searched.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the multiple spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMS\"},{\"name\":\"data_elements_aggregate_abandoned\",\"displayName\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"introduction\":\"Data elements are considered to be abandoned when they have not been edited in at least 100 days and do not have any data values associated with them. Often, these are the result of new or changed configurations that have been abandoned at some point.\",\"recommendation\":\"Data elements that have no data associated with them and which there are no plans to start using for data collection should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAA\"},{\"name\":\"data_elements_assigned_to_data_sets_with_different_period_types\",\"displayName\":\"Data elements assigned to data sets with different period type\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are assigned to at least one data set that has a different period type\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEATDSWDPT\"},{\"name\":\"data_elements_aggregate_no_groups\",\"displayName\":\"Aggregate data elements not in any data element groups.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not in any data element groups.\",\"introduction\":\"All data elements should be in a data element group. This allows users to find the data elements more easily in analysis\\n apps and also contributes to having more complete data element group sets.\\n Maintenance operations can also be made more efficient by applying\\n bulk settings (ex. sharing) to all data elements within a data element group.\",\"recommendation\":\"Data elements that are not in a data element group should be added to a relevant data element group. If the data elements are not needed, they should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANG\"},{\"name\":\"category_options_shared_within_category_combo\",\"displayName\":\"Category combinations with categories which share the same category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category combinations with categories which share the same category options.\",\"introduction\":\"As a general rule, category options should be reused where possible between categories. The exception to this rule however, is when you have a category combo with multiple categories, and within those categories, a category option is shared. As a simple example, lets say you have a category called \\\"Sex\\\" with options \\\"Male\\\"\\\", \\\"Female\\\" and \\\"Unknown\\\". There is also a second category called \\\"Age\\\" with options \\\"<15\\\", \\\"15+\\\", and \\\"Unknown\\\". A category combination called \\\"Age/Sex\\\" is then created with these two categories, which share the option \\\"Unknown\\\". This situation should be avoided, as it creates issues when analyzing data.\",\"recommendation\":\"The recommended approach to dealing with this situation is to create a new category combination, using two new categories. Using the example from the introduction, you should create two new category options called \\\"Unknown age\\\" and \\\"Unknown sex\\\". A new category combination can then be created with these new categories, which do not share category options. All data which is potentially associated with the old category combinations, would need to be reassigned to the new category option combinations. Any analytical objects which use the categories to be removed would also need to be updated.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"COSWCC\"},{\"name\":\"orgunits_null_island\",\"displayName\":\"Organisation units located within 100 km of Null Island (0,0).\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units located within 100 km of Null Island (0,0).\",\"introduction\":\"A common problem when importing coordinates is the inclusion of coordinates situated around the point of [Null Island](https://en.wikipedia.org/wiki/Null_Island). This is the point on the Earth's surface where the Prime Meridian and Equator intersect with a latitude of 0 and a longitude of 0. The point also happens to be situated currently in the middle of the ocean. This query identifies any points located within 100 km of the point having latitude and longitude equal to zero.\",\"recommendation\":\"Update the coordinates of the affected organization unit to the correct location.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONI\"},{\"name\":\"program_rule_actions_without_section\",\"displayName\":\"Program rules with actions lacking a program stage section\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a section but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWS\"},{\"name\":\"periods_3y_future\",\"displayName\":\"Periods which are more than three years in the future.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are more than three years in the future.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\nfar future. Different data entry clients may not properly validate for periods\\nwhich are in the future, and thus any periods in the future should be reviewed.\\nIn some cases, data may be valid for future dates, e.g. targets which are set for the\\nnext fiscal year.\",\"recommendation\":\"If any periods exist in the system in the future, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\\n\\nIn many cases, clients may mean to transmit\\ndata for January 2021, but due to data entry errors, January 2031 is selected. Thus,\\nany data in the far future should be investigated to ensure it does not result\\nfrom data entry errors.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"P3F\"},{\"name\":\"orgunits_trailing_spaces\",\"displayName\":\"Organisation units should not have trailing spaces.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have trailing spaces.\",\"introduction\":\"Trailing spaces in organisation units are superfluous.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the trailing spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OTS\"},{\"name\":\"validation_rule_groups_scarce\",\"displayName\":\"Validation rule should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Validation rule should have at least two members.\",\"introduction\":\"Generally validation rule groups should be composed of multiple validation rules.\",\"recommendation\":\"Considering removing groups which are empty or which have a single member. Alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"validationRuleGroups\",\"isSlow\":false,\"code\":\"VRGS\"},{\"name\":\"indicators_with_invalid_numerator\",\"displayName\":\"Indicators with invalid numerator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators where the numerator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWIN\"},{\"name\":\"categories_one_default_category_combo\",\"displayName\":\"Only one default category combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category combo should exist\",\"introduction\":\"There should only exist one category combo with name and code \\\"default\\\".\",\"recommendation\":\"Only the category combo with UID \\\"bjDvmb4bfuf\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category combo or move all references to category combo \\\"bjDvmb4bfuf\\\" and then remove the unused conflicting category combo.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CODCC\"},{\"name\":\"data_elements_without_data_sets\",\"displayName\":\"Data elements lacking data Sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data sets\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWDS\"},{\"name\":\"category_combos_unused\",\"displayName\":\"Category combinations not used by other metadata objects\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category combinations not used by other metadata objects\",\"introduction\":\"Category combinations which are unused in any datasets, data elements, programs or data approval workflows may be safe to delete. In some cases, category combinations may be created, but never actually used for anything. This may lead to situations where users and implementers are confused about which category combination should actually be used. In general, it should be safe to delete unused category combinations, except in situations where existing data has been associated with them.\",\"recommendation\":\"Check to see if any data is associated with the category combination before attempting to delete it. Category combinations which are not currently used in any metadata objects may still be valid for legacy reasons, but they should be reviewed to be sure they are still needed. Otherwise, it should be safe to remove them from the system.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCU\"},{\"name\":\"category_option_groups_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option groups should be composed of at least two category options. There can however be legitimate cases when a single category option is part of a group, especially in cases where there is a direct mapping between age bands and category options.\",\"recommendation\":\"Considering removing groups with zero or one category options, or alternatively, add additional category options to the group to make it more useful.\",\"issuesIdType\":\"categoryOptionGroups\",\"isSlow\":false,\"code\":\"COGS\"},{\"name\":\"datasets_empty\",\"displayName\":\"Datasets with no data elements.\",\"section\":\"Data sets\",\"severity\":\"WARNING\",\"description\":\"Datasets with no data elements.\",\"introduction\":\"All datasets should have data elements assigned to them.\",\"recommendation\":\"Remove empty datasets, or alternatively, assign data elements to them.\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DE\"},{\"name\":\"indicators_without_groups\",\"displayName\":\"Indicators lacking groups\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that do not have at least one group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWG\"},{\"name\":\"orgunit_groups_scarce\",\"displayName\":\"Organisation unit groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Organisation unit groups should have at least two members.\",\"introduction\":\"Generally, organisation unit groups should be composed of multiple organisation units.\",\"recommendation\":\"Considering removing groups with zero or one organisation units, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OGS\"},{\"name\":\"program_rules_without_priority\",\"displayName\":\"Program rules lacking a priority setting\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules with action type \\\"assign\\\" where the rule priority is not yet set\",\"recommendation\":\"Set a priority for the program rule(s)\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWP\"},{\"name\":\"categories_unique_category_combo\",\"displayName\":\"Different category combinations should not have the exact same combination of categories.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Different category combinations should not have the exact same combination of categories.\",\"introduction\":\"Category combinations should be a unique combination of categories. If two or more category combinations contain the exact same set of categories, this would be considered to be duplicative and potentially confusing to users.\",\"recommendation\":\"One category combo is kept, all references are updated to use this combo and other combos are removed.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CUCC\"},{\"name\":\"indicator_group_sets_scarce\",\"displayName\":\"Indicator groups sets should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups sets should have at least two members.\",\"introduction\":\"All indicator group set should be composed of at least two indicators groups.\",\"recommendation\":\"Considering removing indicator group sets with less than two indicator groups, or alternatively, add additional indicator groups to the indicator group set to make it more useful.\",\"issuesIdType\":\"indicatorGroupSets\",\"isSlow\":false,\"code\":\"IGSS\"},{\"name\":\"validation_rules_with_invalid_right_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a right side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWIRSE\"},{\"name\":\"data_elements_aggregate_aggregation_operator\",\"displayName\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"introduction\":\"Data elements which are not numeric (text, dates, etc) should have an aggregation operator set to NONE. Data elements which are able to be aggregated (numbers, integers, etc) should have an aggregation operator set to something other than NONE, most often SUM.\",\"recommendation\":\"Open the affected data elements in the Maintenance App and change their aggregation type to an appropriate type. Alternatively, these can be altered via the API.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAAO\"},{\"name\":\"org_unit_groups_without_group_sets\",\"displayName\":\"Organisation unit groups lacking group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation unit groups that aren't member of at least one organisation unit group set\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OUGWGS\"},{\"name\":\"program_rule_variables_without_attribute\",\"displayName\":\"Program rule variables lacking an attribute\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring an attribute source but that is not yet linked to an attribute\",\"recommendation\":\"Assign an attribute to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWA\"},{\"name\":\"program_indicator_groups_scarce\",\"displayName\":\"Program indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Program indicator groups should have at least two members.\",\"introduction\":\"Program indicator groups should generally be composed of two or more program indicators.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"programIndicatorGroups\",\"isSlow\":false,\"code\":\"PIGS\"},{\"name\":\"program_rules_no_expression\",\"displayName\":\"Program rules with no expression.\",\"section\":\"Program rules\",\"severity\":\"WARNING\",\"description\":\"Program rules with no expression.\",\"introduction\":\"All program rules should have an expression. Expressions are used by program rules to determine when they should be triggered. Program rules with no expression have no purpose.\",\"recommendation\":\"Using the DHIS2 user interface, assign an expression to each of the program rules which is missing one. Otherwise, if it is safe to delete the program rule with no expression, it is recommended to remove it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNE\"},{\"name\":\"data_elements_aggregate_no_data\",\"displayName\":\"Aggregate data elements with NO data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements with NO data values.\",\"introduction\":\"Data elements should generally always be associated with data values. If data elements exist in a data set which is active, but there are no data values associated with them, they may not be part of the data entry screens. Alternatively, the data element may have been added but never been associated with a dataset.\",\"recommendation\":\"Consider removing data elements with no data values.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAND\"},{\"name\":\"program_indicators_without_expression\",\"displayName\":\"Program indicators lacking an expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have no expression set yet\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWE\"},{\"name\":\"periods_distant_past\",\"displayName\":\"Periods which are in the distant past.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are in the distant past.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\ndistant past. Different data entry clients may not properly validate for periods\\nwhich are in the distant past, and thus these periods should be triaged to ensure\\nthat data has not been entered against them by mistake.\",\"recommendation\":\"If any periods exist in the system in the distant past, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PDP\"},{\"name\":\"org_units_being_orphaned\",\"displayName\":\"Orphaned organisation units\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that aren't level 1 units but that lack a parent so that they are not connected to the rest of the organisation tree\",\"recommendation\":\"Find (or create) and set the correct parent for the orphaned organisation unit(s). Eventually this is also caused by having set the wrong level.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUBO\"},{\"name\":\"cocs_wrong_cardinality\",\"displayName\":\"Category option combinations with incorrect cardinality.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with incorrect cardinality.\",\"introduction\":\"All category option combinations should have exactly the same number of category option associations as the number of categories in the category combination. If there are two categories in a category combination, then every category option combination should have exactly two category options.\\nCategory option combinations with the incorrect cardinality are usually the result of a category combination having been created, and then modified later. Suppose that two categories are used to create a category combination. Each category option combination of this category combo will have two category options. If an additional category is added to the category combination later, new category option combinations with three category options will be created and associated with this category combo. The original category option combinations would be considered to be invalid.\",\"recommendation\":\"Category option combinations which have an incorrect cardinality will be ignored by the DHIS2 analytics system and should be removed.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CWC\"},{\"name\":\"dashboards_not_viewed_one_year\",\"displayName\":\"Dashboards which have not been actively viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Dashboards which have not been actively viewed in the past 12 months\",\"introduction\":\"Dashboards should be regularly viewed in the system. In many cases, users may create dashboards for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to useful dashboards being difficult to find. This check identifies any dashboards which have not been viewed in the past year.\",\"recommendation\":\"Unused dashboards can be deleted in the entirety from the main dashboard app by clicking on the \\\"Edit\\\" button and choosing \\\"Delete\\\". Note that this process cannot be undone! Another option would be to alter the sharing of the dashboard so that it is not visible to any user.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNVOY\"}]", - "responseSize": 66022, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - } -] diff --git a/cypress/fixtures/network/40/users_should_be_able_to_view_jobs.json b/cypress/fixtures/network/40/users_should_be_able_to_view_jobs.json deleted file mode 100644 index 5d353465b..000000000 --- a/cypress/fixtures/network/40/users_should_be_able_to_view_jobs.json +++ /dev/null @@ -1,271 +0,0 @@ -[ - { - "path": "/api/40/systemSettings/helpPageLink", - "featureName": "Users should be able to view jobs", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"helpPageLink\":\"https://dhis2.github.io/dhis2-docs/master/en/user/html/dhis2_user_manual_en.html\"}", - "responseSize": 99, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations/jobTypes?fields=*&paging=false", - "featureName": "Users should be able to view jobs", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"jobTypes\":[{\"name\":\"Data integrity\",\"jobType\":\"DATA_INTEGRITY\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"checks\",\"fieldName\":\"Checks\",\"persisted\":false,\"collectionName\":\"checks\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/dataIntegrity\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.parameters.DataIntegrityJobParameters$DataIntegrityReportType\",\"name\":\"type\",\"fieldName\":\"Type\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"REPORT\",\"SUMMARY\",\"DETAILS\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Resource table\",\"jobType\":\"RESOURCE_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Analytics table\",\"jobType\":\"ANALYTICS_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"skipPrograms\",\"fieldName\":\"Skip programs\",\"persisted\":false,\"collectionName\":\"skipPrograms\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/programs\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipResourceTables\",\"fieldName\":\"Skip resource tables\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Continuous analytics table\",\"jobType\":\"CONTINUOUS_ANALYTICS_TABLE\",\"schedulingType\":\"FIXED_DELAY\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"fullUpdateHourOfDay\",\"fieldName\":\"Full update hour of day\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Data sync\",\"jobType\":\"DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker programs data sync\",\"jobType\":\"TRACKER_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Event programs data sync\",\"jobType\":\"EVENT_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Meta data sync\",\"jobType\":\"META_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"trackerProgramPageSize\",\"fieldName\":\"Tracker program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"eventProgramPageSize\",\"fieldName\":\"Event program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"dataValuesPageSize\",\"fieldName\":\"Data values page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Aggregate data exchange\",\"jobType\":\"AGGREGATE_DATA_EXCHANGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"dataExchangeIds\",\"fieldName\":\"Data exchange ids\",\"persisted\":false,\"collectionName\":\"dataExchangeIds\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/aggregateDataExchanges\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Send scheduled message\",\"jobType\":\"SEND_SCHEDULED_MESSAGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Program notifications\",\"jobType\":\"PROGRAM_NOTIFICATIONS\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Monitoring\",\"jobType\":\"MONITORING\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"validationRuleGroups\",\"fieldName\":\"Validation rule groups\",\"persisted\":false,\"collectionName\":\"validationRuleGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/validationRuleGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"sendNotifications\",\"fieldName\":\"Send notifications\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"persistResults\",\"fieldName\":\"Persist results\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Push analysis\",\"jobType\":\"PUSH_ANALYSIS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"pushAnalysis\",\"fieldName\":\"Push analysis\",\"persisted\":false,\"collectionName\":\"pushAnalysis\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/pushAnalysis\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker search optimization\",\"jobType\":\"TRACKER_SEARCH_OPTIMIZATION\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"attributes\",\"fieldName\":\"Attributes\",\"persisted\":false,\"collectionName\":\"attributes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/trackedEntityAttributes/indexable\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipIndexDeletion\",\"fieldName\":\"Skip index deletion\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Predictor\",\"jobType\":\"PREDICTOR\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictors\",\"fieldName\":\"Predictors\",\"persisted\":false,\"collectionName\":\"predictors\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictors\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictorGroups\",\"fieldName\":\"Predictor groups\",\"persisted\":false,\"collectionName\":\"predictorGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictorGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Disable inactive users\",\"jobType\":\"DISABLE_INACTIVE_USERS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"inactiveMonths\",\"fieldName\":\"Inactive months\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"reminderDaysBefore\",\"fieldName\":\"Reminder days before\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Test\",\"jobType\":\"TEST\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Long\",\"name\":\"waitMillis\",\"fieldName\":\"Wait millis\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"stages\",\"fieldName\":\"Stages\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtStage\",\"fieldName\":\"Fail at stage\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"items\",\"fieldName\":\"Items\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtItem\",\"fieldName\":\"Fail at item\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Long\",\"name\":\"itemDuration\",\"fieldName\":\"Item duration\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.String\",\"name\":\"failWithMessage\",\"fieldName\":\"Fail with message\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"failWithException\",\"fieldName\":\"Fail with exception\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.JobProgress$FailurePolicy\",\"name\":\"failWithPolicy\",\"fieldName\":\"Fail with policy\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"PARENT\",\"FAIL\",\"SKIP_STAGE\",\"SKIP_ITEM\",\"SKIP_ITEM_OUTLIER\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"runStagesParallel\",\"fieldName\":\"Run stages parallel\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]}]}", - "responseSize": 24994, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/analytics/tableTypes", - "featureName": "Users should be able to view jobs", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"]", - "responseSize": 122, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictors?paging=false", - "featureName": "Users should be able to view jobs", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictors\":[{\"displayName\":\"Malaria Outbreak Threshold\",\"id\":\"tEK1OEqS4O1\"}]}", - "responseSize": 80, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/pushAnalysis?paging=false", - "featureName": "Users should be able to view jobs", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"pushAnalysis\":[{\"displayName\":\"Immunization Key Indicators Monthly Report\",\"id\":\"jtcMAKhWwnc\"}]}", - "responseSize": 98, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictorGroups?paging=false", - "featureName": "Users should be able to view jobs", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictorGroups\":[]}", - "responseSize": 22, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/validationRuleGroups?paging=false", - "featureName": "Users should be able to view jobs", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"validationRuleGroups\":[{\"displayName\":\"ANC\",\"id\":\"UP1lctvalPn\"},{\"displayName\":\"Commodities\",\"id\":\"xcpl667ccfF\"},{\"displayName\":\"Critical event\",\"id\":\"xWtt9c443Lt\"},{\"displayName\":\"District stock\",\"id\":\"mEtdbIDDhix\"},{\"displayName\":\"Epidemic disease outbreak\",\"id\":\"y2yQIm79VTW\"},{\"displayName\":\"Facility Stock\",\"id\":\"SqyI8HKqI4g\"},{\"displayName\":\"Immunisation\",\"id\":\"UiOSY1iIdub\"},{\"displayName\":\"Infectious disease outbreak\",\"id\":\"WUZXEFdn1PX\"},{\"displayName\":\"Malaria\",\"id\":\"zlaSof6qLqF\"},{\"displayName\":\"Population\",\"id\":\"D3bItmtBpsW\"},{\"displayName\":\"TB\",\"id\":\"IMF6p1MqoHl\"},{\"displayName\":\"Testing\",\"id\":\"nMDkAJXsmlR\"}]}", - "responseSize": 628, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/dataIntegrity", - "featureName": "Users should be able to view jobs", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[{\"name\":\"orgunits_invalid_geometry\",\"displayName\":\"Organisation units with invalid geometry.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with invalid geometry.\",\"introduction\":\"DHIS2 uses the PostGIS database extension to manage the geographical information associated\\nwith organisation units. There are various reasons why geometries may be considered to be\\ninvalid including self-inclusions, self-intersections, and sliver polygons. Please see the\\nPostGIS documentation for a more in-depth discussion on this topic.\\n\\nInvalid geometry is not always a problem and may be able to be ignored, however, it has been observed in certain systems\\nthat this can lead to problems in analytics. If you are experiencing issues when generating analytics\\ntables, and see errors related to invalid geometries, you will need to either remove the invalid geometry,\\nor fix it.\",\"recommendation\":\"Update the geometry of the affected organisation units to a valid geometry. It may be possible to use the PostGIS function `ST_MakeValid` to automatically fix the problem. However, in other cases the geometry may need to be edited in a GIS tool, and then updated again in DHIS2.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OIG\"},{\"name\":\"data_elements_without_groups\",\"displayName\":\"Data elements lacking groups\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data element groups\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWG\"},{\"name\":\"orgunit_group_sets_excess_groups\",\"displayName\":\"Organisation units which belong to multiple groups in a group set.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which belong to multiple groups in a group set.\",\"introduction\":\"Organisation units should belong to exactly one group within each organisation unit group set of which they are a member. If the organisation unit belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the organisation units in the details list to exactly one group within each group set membership.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OGSEG\"},{\"name\":\"validation_rules_missing_value_strategy_null\",\"displayName\":\"All validation rule expressions should have a missing value strategy.\",\"section\":\"Validation rules\",\"severity\":\"SEVERE\",\"description\":\"All validation rule expressions should have a missing value strategy.\",\"introduction\":\"Validation rules are composed of a left and right side expression. In certain systems the missing value strategy may not be defined. This may lead to an exception during validation rule analysis. The affected validation rules should be corrected to with an appropriate missing value strategy.\",\"recommendation\":\"Using the results of the the details SQL view, identify the affected validation rules and which side of the rule the missing value strategy has not been specified. Using the maintenance app, make the appropriate corrections and save the rule.\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRMVSN\"},{\"name\":\"category_combos_being_invalid\",\"displayName\":\"Invalid Category-combos\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Lists all category-combos that are invalid\",\"recommendation\":\"Make sure the category combo is assigned to at least one category and that all categories have category options \",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCBI\"},{\"name\":\"data_elements_in_data_set_not_in_form\",\"displayName\":\"Data sets with data elements not in data entry form\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that have data elements which are neither a member of the set's data entry form nor a member of the sets section\",\"recommendation\":\"Either remove the data elements in question or make them a member of the set's form or section\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DEIDSNIF\"},{\"name\":\"categories_no_options\",\"displayName\":\"Categories with no category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with no category options\",\"introduction\":\"Categories should always have at least one category option.\",\"recommendation\":\"Any categories without category options should either be removed from the system if they are not in use. Otherwise, appropriate category options should be added to the category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CNO\"},{\"name\":\"data_elements_aggregate_no_analysis\",\"displayName\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"introduction\":\"All aggregate data elements that are captured in DHIS2 should be used to produce some type of analysis output (charts, maps, tables). This can be by using them directly in an output, or by having them contribute to an indicator calculation that is used an output.\",\"recommendation\":\"Data elements that are not routinely being reviewed in analysis, either directly or indirectly through indicators, should be reviewed to determine if they still need to be collected. If these are meant to be used in routine review, then associated outputs should be created using them. If these data elements are not going to be used for any type of information review, consideration should be made to either archive them or delete them.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANA\"},{\"name\":\"indicators_duplicated_terms\",\"displayName\":\"Indicators with the same terms.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same terms.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check attempts to identify indicators with the same formulas, regardless of the order of their their terms. Suppose you have an indicator which calculates total ANC attendance: ANC Total = ANC1 + ANC2 + ANC3 Suppose then another indicator exists in the system, which has been defined as: ANC Totals = ANC3 + ANC2 + ANC1 These two indicators are equivalent, and will produce the same result, and are thus considered to be duplicated.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Considered deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IDT\"},{\"name\":\"program_rules_no_action\",\"displayName\":\"Program rules with no action.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules with no action.\",\"introduction\":\"All program rules should have an action.\",\"recommendation\":\"Using the DHIS2 user interface, assign an action to each of the program rules which is missing one. Alternatively, if the program rule is not in use, then consider removing it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNA\"},{\"name\":\"orgunits_compulsory_group_count\",\"displayName\":\"Organisation units that are not in all compulsory orgunit group sets\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Orgunits that are not in all compulsory orgunit group sets\",\"introduction\":\"If any organisation unit groups have been marked as compulsory, each and every organisation unit should belong to exactly one group within each compulsory organisation unit group set. Assume we have created a group set called \\\"Ownership\\\" with two groups \\\"Public\\\" and \\\"Private\\\". Each and every organisation unit contained in the hierarchy must belong to either Public or Private (but not both). When organisation unit are not part of a group set, results in the analytics apps will not be correct if the organisation unit group set is used for aggregation.\",\"recommendation\":\"For each of the organisation units identified in the details query, you should assign the appropriate organisation unit group within the group set. Alternatively, if the group set should not be compulsory, you should change this attribute.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OCGC\"},{\"name\":\"orgunits_no_coordinates\",\"displayName\":\"Organisation units with no coordinates.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with no coordinates.\",\"introduction\":\"Ideally, all organisation units contained in the DHIS2 hierarchy should have a valid\\nset of coordinates. Usually for all organisation units above the facility level,\\nthese coordinates should be a polygon which provides the boundary of the organisation\\nunit. For facilities, these are usually represented as point coordinates.\\n\\nThere can obviously be exceptions to this rule. Mobile health facilities may not have\\na fixed location. Community health workers or wards below the facility level\\nmay also not have a defined or definable coordinate.\\n\\nThis check is intended to allow you to review all organisation units which do\\nnot have any coordinates and make a determination as to whether they should be updated.\",\"recommendation\":\"Where appropriate, update the geometry of each organisation unit with a valid geometry.\\nYou may need to contact the appropriate local government office to obtain a copy\\nof district boundaries, commonly referred to as \\\"shape files\\\". Another possibility\\nis to use freely available boundary files from GADM (https://gadm.org)\\n\\nIf facilities are missing coordinates, it may be possible to obtain these from\\nthe facility staff using their smart phone to get the coordinates. Images\\nfrom Google Maps can also often be used to estimate the position of a facility,\\nassuming that you have good enough resolution and local knowledge of where\\nit is located.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONC\"},{\"name\":\"data_sets_not_assigned_to_org_units\",\"displayName\":\"Data sets not assigned to organisation units\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that are not assigned to any organisation units\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DSNATOU\"},{\"name\":\"dashboards_no_items\",\"displayName\":\"Dashboards with no items.\",\"section\":\"Dashboards\",\"severity\":\"INFO\",\"description\":\"Dashboards with no items.\",\"introduction\":\"All dashboards should have content on them. Dashboards without any content do not serve any purpose, and can make it more difficult to find relevant dashboards with content.\",\"recommendation\":\"Dashboards without content that have not been modified in the last 14 days should be considered for deletion.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNI\"},{\"name\":\"orgunits_same_name_and_parent\",\"displayName\":\"Organisation units should not have the same name and parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have the same name and parent.\",\"introduction\":\"Organisation units may have exactly the same name. This may become confusing to users, particularly if the organisation unit has the same name and same parent. This can easily lead to data entry or analysis mistakes as users have no way to distinguish between the two organisation units.\",\"recommendation\":\"Rename identically named organisation units which share the same parent using the maintenance app.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OSNAP\"},{\"name\":\"indicators_not_grouped\",\"displayName\":\"Indicators not in any groups.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not in any groups.\",\"introduction\":\"All indicators should be in an indicator group. This allows users to find the indicators more easily in analysis apps and also contributes to having more complete indicators group sets. Maintenance operations can also be made more efficient by applying bulk settings (ex. sharing, filtering) to all indicators within an indicator group.\",\"recommendation\":\"Indicators that are not in a indicator group should be added to a relevant indicator group. If the indicators are not needed, they should be deleted.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"ING\"},{\"name\":\"category_option_group_sets_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option group sets should be composed of at least two category option groups.\",\"recommendation\":\"Considering removing groups with zero or one category option groups, or alternatively, add additional category option groups to the group set to make it more useful.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSS\"},{\"name\":\"org_units_without_groups\",\"displayName\":\"Organisation units lacking groups\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are not connected to at least one group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWG\"},{\"name\":\"data_elements_excess_groupset_membership\",\"displayName\":\"Data elements which belong to multiple groups in a group set.\",\"section\":\"data_elements\",\"severity\":\"SEVERE\",\"description\":\"Data elements which belong to multiple groups in a group set.\",\"introduction\":\"Data elements should belong to exactly one group within each data element group set of which they are a member. If the data element belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the data elements in the details list to exactly one data element group within each group set.\",\"issuesIdType\":\"data_elements_aggregate\",\"isSlow\":false,\"code\":\"DEEGM\"},{\"name\":\"data_element_groups_scarce\",\"displayName\":\"Data element groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Data element groups should have at least two members.\",\"introduction\":\"All data element groups should be composed of at least two data elements.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"dataElementGroups\",\"isSlow\":false,\"code\":\"DEGS\"},{\"name\":\"orgunits_not_contained_by_parent\",\"displayName\":\"Organisation units with point coordinates should be contained by their parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with point coordinates should be contained by their parent.\",\"introduction\":\"Facilities are often represented as points in the DHIS2 hierarchy. Their parent organisation units geometry should contain all facilities which have been associated with them.\",\"recommendation\":\"Often boundary files are simplified when they are uploaded into DHIS2. This process may result in\\nfacilities which are located close to the border of a given district to fall outside of the district\\nwhen the boundary is simplified. This is considered to be more of a cosmetic problem for most DHIS2\\ninstallations, but could become an issue if any geospatial analysis is attempted using the\\nboundaries and point coordinates.\\n\\nIn cases where the facility falls outside of its parent's boundary\\nyou should confirm that the coordinates are correct. If the location is close to the boundary, you\\nmay want to reconsider how the boundary files have been simplified. Otherwise, if the location of\\nthe facility is completely incorrect, it should be rectified.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONCBP\"},{\"name\":\"program_rules_message_no_template\",\"displayName\":\"Program rules actions which should send or schedule a message without a message template.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules actions which should send or schedule a message without a message template.\",\"introduction\":\"Program rule actions of type \\\"Send message\\\" or \\\"Schedule message\\\" should have an associated message template.\",\"recommendation\":\"Using the DHIS2 user interface, assign a message template to each of the program rule actions which send or schedule messages but which does not have an association with a message template.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRMNT\"},{\"name\":\"indicators_with_invalid_denominator\",\"displayName\":\"Indicators with invalid denominator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"List all indicators where the denominator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWID\"},{\"name\":\"indicator_types_duplicated\",\"displayName\":\"Indicator types with the same factor.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicator types with the same factor.\",\"introduction\":\"Indicators can be assigned a factor which is multiplied by the indicator's value. For example, if you create a percentage based indicator, you can assign the indicator a factor of 100, which would be multiplied by the actual value of the indicator calculated by DHIS2. In general, having multiple indicator types with the same factor is not recommended. It is duplicative, and may lead to confusion.\",\"recommendation\":\"Duplicated indicator types should consider to be removed from the system. Consider choosing one of the duplicated indicator types as the one to keep, and then update all indicators which share the same factor to this indicator type. The duplicated indicator types can then be removed from the system.\",\"issuesIdType\":\"indicatorTypes\",\"isSlow\":false,\"code\":\"ITD\"},{\"name\":\"options_sets_empty\",\"displayName\":\"Empty option sets\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Empty option sets\",\"introduction\":\"All option sets should generally include at least two items. Empty option sets serve no purpose.\",\"recommendation\":\"Options should either be added to the option set, or the option set should be deleted.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSE\"},{\"name\":\"category_options_no_categories\",\"displayName\":\"Category options with no categories.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options with no categories.\",\"introduction\":\"All category options should belong to at least one category.\",\"recommendation\":\"Category options which are not part of any category should be removed or alternatively should be added to an appropriate category.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CONC\"},{\"name\":\"orgunits_orphaned\",\"displayName\":\"Orphaned organisation units.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"Orphaned organisation units.\",\"introduction\":\"Orphaned organisation units are those which have neither parents nor any children. This means that they have no relationship to the main organisation unit hierarchy. These may be created by faulty metadata imports or direct manipulation of the database.\",\"recommendation\":\"The orphaned organisation units should be assigned a parent or removed from the system. It is recommended to use the DHIS2 API for this task if possible. If this is not possible, then they may need to be removed through direct SQL on the DHIS2 database.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OO\"},{\"name\":\"indicators_with_identical_formulas\",\"displayName\":\"Indicators with identical formulas\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that have the identical formulas with at least one other indicator\",\"recommendation\":\"Check if the same indicator should be used everywhere and remove duplicates\",\"isSlow\":false,\"code\":\"IWIF\"},{\"name\":\"program_indicators_with_invalid_filters\",\"displayName\":\"Program indicators with invalid filter\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators with invalid filter expression\",\"recommendation\":\"Check that the expression evaluates to true/false\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIF\"},{\"name\":\"program_rules_without_condition\",\"displayName\":\"Program rules lacking a condition\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that have no condition yet\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWC\"},{\"name\":\"categories_one_default_category\",\"displayName\":\"Only one default category should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category should exist\",\"introduction\":\"There should only exist one category with name and code \\\"default\\\".\",\"recommendation\":\"Only the category with UID \\\"GLevLNI9wkl\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category or move all references to category \\\"GLevLNI9wkl\\\" and then remove the unused conflicting category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CODC\"},{\"name\":\"org_units_with_cyclic_references\",\"displayName\":\"Organisation units with cyclic references\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that have a conflicting parent hierarchy definition so that two organisation units become parent of each other or in other words they form a circular reference\",\"recommendation\":\"One of the organisation units must be setup wrongly and needs to be corrected so that a non-circular tree connects the two\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWCR\"},{\"name\":\"program_rule_variables_without_data_element\",\"displayName\":\"Program rule variables lacking a data element\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring a data element source but that is not yet linked to a data element\",\"recommendation\":\"Assign a data element to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWDE\"},{\"name\":\"org_units_violating_exclusive_group_sets\",\"displayName\":\"Organisation units with conflicting exclusive group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are members of multiple exclusive organisation unit groups\",\"recommendation\":\"Remove the organisation unit from all but one exclusive organisation unit group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUVEGS\"},{\"name\":\"program_rule_actions_without_data_object\",\"displayName\":\"Program rules with actions lacking a data object\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires either a data element or an attribute but is not connected either\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWDO\"},{\"name\":\"orgunits_openingdate_gt_closeddate\",\"displayName\":\"Organisation units which have an opening date later than the closed date.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which have an opening date later than the closed date.\",\"introduction\":\"If a closing date has been defined for an organisation unit, it should always be after the opening date (if one has been defined).\",\"recommendation\":\"Alter either the opening or closing date of all affected organisation units so that the closing date is after the opening date.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OOGC\"},{\"name\":\"categories_one_default_category_option_combo\",\"displayName\":\"Only one default category option combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option combo should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option combo with UID \\\"HllvX50cXC0\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option combo or move all references to category option combo \\\"HllvX50cXC0\\\" and then remove the unused conflicting category option combo.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CODCOC\"},{\"name\":\"category_option_group_sets_incomplete\",\"displayName\":\"Category option group sets which do not contain all category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option group sets which which do not contain all category options.\",\"introduction\":\"Category option group sets are composed of multiple category option groups, which are in turn composed of various category options. Category option group sets are often used to group related category options together for analytical purposes. Categories are also composed of category options. In general, but not always, category option group sets should contain all category options of related categories. Suppose we have the following two age categories. \\nAge coarse: <15, 15+ Age fine: <1, 1-10, 10-14,15-19,20-24,25-29,30-34,35-39,40-44,45+\\nIn many cases, related data elements may be disaggregated differently. This may be to differences in the way in which the data is collected, or as is often the case, the disaggregation has changed over time. If we wish to analyze data for two different data elements (one of which uses Age coarse and the other Age fine), we can create a category option group set consisting of two category option groups which should consist of the following category options from above. \\n<15: <15, <1, 1-10, 10-14 15+: 15+, 15-19,20-24,25-29,30-34,35-39,40-44,45+\\nSuppose that we happen to omit the category option \\\"<1\\\" from the \\\"<15\\\" category option group. This would result in potential aggregation errors in when using this category option group set in any analytical objects. The details of this metadata check would return the UID and name of the category option group set. The category and category option would also be provided. Using the previous example, we would see \\\"Age fine:{<1}\\\" in the metadata check details section, to indicate that the <1 category option which is part of the \\\"Age fine\\\" category, is missing from the category option group set.\\nThere may exist specific analytical reasons why specific category options are omitted from a category option group set. However,these should usually be special cases. This metadata check will identify cases where category option group sets appear to be incomplete, however you should carefully review any groups which appear in the details. \\nThis check may also produce a number of issues which may at first glance appear to be false positives. In some cases, category options may be added to a category by mistake. When category option group sets are created, this extraneous option may be omitted and thus appear as missing from the group set. \\nAnother observed situation is where an option like \\\"Unknown\\\" is used across unrelated categories. Suppose you have two categories \\\"Age (<15, 15+, Unknown)\\\" and \\\"Sex (Male,Female,Unknown)\\\". Similar to above, we create category option group sets like: \\n<15: <15 15+: 15+ Unknown: Unknown\\nThis metadata check will report that \\\"Male\\\" and \\\"Female\\\" are missing from the group set. This is because the same \\\"Unknown\\\" option is shared between two different, unrelated categories. It is recommended that if this situation occurs, that you create two separate \\\"Unknown\\\" category options like \\\"Unknown sex\\\" and \\\"Unknown age\\\".\",\"recommendation\":\"Using the maintenance app, assign the missing category options to an appropriate category option group within the affected category option group set.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSI\"},{\"name\":\"maps_not_viewed_one_year\",\"displayName\":\"Maps which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Maps which have not been viewed in the past 12 months\",\"introduction\":\"Maps should be regularly viewed in the system. In many cases, users may create maps for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system and being difficult to find in the Maps app.\",\"recommendation\":\"Unused maps can be removed directly using the Maps app by a user with sufficient authority. If maps are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"maps\",\"isSlow\":false,\"code\":\"MNVOY\"},{\"name\":\"indicators_exact_duplicates\",\"displayName\":\"Indicators with the same formula.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same formula.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check shows indicators which have the exact same formulas. Spaces which are present are removed prior to comparison.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Consider deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IED\"},{\"name\":\"indicators_violating_exclusive_group_sets\",\"displayName\":\"Indicators with conflicting exclusive group sets\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that are members of multiple exclusive indicator groups\",\"recommendation\":\"Remove the indicator from all but one exclusive indicator group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IVEGS\"},{\"name\":\"category_options_excess_groupset_membership\",\"displayName\":\"Category options which belong to multiple groups in a category option group set.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category options which belong to multiple groups in a category option group set.\",\"introduction\":\"Category options should belong to exactly one category option group which are part of a category option group set. If the category option belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the category option in the details list to exactly one category option group within each group set.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"COEGM\"},{\"name\":\"periods_duplicates\",\"displayName\":\"Duplicate Periods\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Lists all periods duplicates which have identical type and start date\",\"recommendation\":\"Make sure all database references are moved to one of the duplicates before deleting the unused duplicates\",\"isSlow\":false,\"code\":\"PD\"},{\"name\":\"program_rules_without_action\",\"displayName\":\"Program rules lacking an action\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that are not connected to any program rule action\",\"recommendation\":\"Connect the rule to an action or consider removing the rule\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWA\"},{\"name\":\"orgunits_multiple_roots\",\"displayName\":\"The organisation unit hierarchy should have a single root.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"The organisation unit hierarchy should have a single root.\",\"introduction\":\"Every DHIS2 system should have a single root organisation unit. This means a single organisation unit from which all other branches of the hierarchy are descendants.\",\"recommendation\":\"Once you have decided which organisation unit should be the real root of the organisation unit hierarchy, you should update the parent organisation unit. This can be done by using the DHIS2 API or my updating the value directly in the `organisationunit` table.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMR\"},{\"name\":\"validation_rules_with_invalid_left_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a left side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWILSE\"},{\"name\":\"program_rule_actions_without_stage_id\",\"displayName\":\"Program rules with actions lacking a program stage\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a program stage but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWSI\"},{\"name\":\"indicator_groups_scarce\",\"displayName\":\"Indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups should have at least two members.\",\"introduction\":\"All indicator groups should be composed of at least two indicators.\",\"recommendation\":\"Considering removing groups with zero or one groups, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"indicatorGroups\",\"isSlow\":false,\"code\":\"IGS\"},{\"name\":\"option_sets_wrong_sort_order\",\"displayName\":\"Option sets with possibly wrong sort order.\",\"section\":\"Option sets\",\"severity\":\"SEVERE\",\"description\":\"Option sets with possibly wrong sort order.\",\"introduction\":\"Option sets contain options which should be ordered sequentially. The sort_order property should always start with 1 and have a sequential sequence. If there are three options in the option set, then the sort order should be 1,2,3. \\nIn certain circumstances, options may be deleted from an option set, and the sort order may become corrupted. This may lead to a situation where it becomes impossible to update the option set from the maintenance app, and may lead to problems when attempting to using the option set in the data entry app.\",\"recommendation\":\"If it is possible to open the option set in the maintenance app, you can resort the option set, which should correct the problem. Another possible solution is to directly update the sort_order property of in the `optionset` table in the database, ensuring that a valid sequence is present for all options in the option set.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSWSO\"},{\"name\":\"periods_same_start_end_date\",\"displayName\":\"Periods with the same start and end dates\",\"section\":\"Periods\",\"severity\":\"CRITICAL\",\"description\":\"Periods with the same start and end dates\",\"introduction\":\"Different periods should not have exactly the same start and end date.\",\"recommendation\":\"All references to the duplicate periods should be removed from the system and reassigned. It is recommended to use the period with the lower periodid.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PSSED\"},{\"name\":\"program_indicators_with_invalid_expressions\",\"displayName\":\"Program indicators with invalid expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have an invalid expression\",\"recommendation\":\"Check that the expression evaluates to a number\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIE\"},{\"name\":\"program_rule_actions_without_notification\",\"displayName\":\"Program rule with actions lacking a notification template\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires a notification template but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWN\"},{\"name\":\"indicator_no_analysis\",\"displayName\":\"Indicators not used in analytical objects.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not used in analytical objects.\",\"introduction\":\"Indicators should be used to produce some type of analytical output (charts, maps, pivot tables). Note: indicators used in datasets to provide feedback during data entry are not counted as being used in analytical objects.\",\"recommendation\":\"Indicators that are not routinely being used for analysis should be reviewed to determine if they are useful and needed. If these are meant to be used for routine review, then associated outputs should be created using them. If these indicators are not going to be used for any type of information review, and are not used in data sets for feedback during data entry, consideration should be made to delete them.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"INA\"},{\"name\":\"user_groups_scarce\",\"displayName\":\"User groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"User groups should have at least two members.\",\"introduction\":\"Generally, user groups should contain two or more users.\",\"recommendation\":\"Considering removing user groups with less than two users, or alternatively, add additional users to the group to make it more useful.\",\"issuesIdType\":\"userGroups\",\"isSlow\":false,\"code\":\"UGS\"},{\"name\":\"data_elements_aggregate_with_different_period_types\",\"displayName\":\"Aggregate data elements which belong to datasets with different period types.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"SEVERE\",\"description\":\"Aggregate data elements which belong to datasets with different period types.\",\"introduction\":\"Data elements should not belong to datasets with different period types.\",\"recommendation\":\"If you need to collect data with different period types (e.g. weekly and monthly) you should use different data elements for each period type. In general, it is not recommended to collect data with different frequencies, since in general, data collected at higher frequencies (e.g. weekly) can be aggregated to data with lower frequencies (e.g yearly).\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAWDPT\"},{\"name\":\"validation_rules_without_groups\",\"displayName\":\"Validation rules lacking groups\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that are not member of at least one validation rule group\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWG\"},{\"name\":\"category_option_combos_disjoint\",\"displayName\":\"Category option combinations with disjoint associations.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with disjoint associations.\",\"introduction\":\"Under certain circumstances, category option combinations may exist in the system, but not have any direct association with category options which are associated with their category combination. This situation usually occurs when category options have been added to a category and then the category is added to a category combination. New category option combinations are created in the system at this point. If any of the category options are then removed in one of the underlying categories, a so-called disjoint category option combination may result. This is a category option combination which has no direct association with any category options in any of the categories associated with the category combination.\",\"recommendation\":\"The disjoint category option combinations should be removed from the system if possible. However, if any data is associated with the category option combination, a determination will need to be made in regards of how to deal with this data.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"COCD\"},{\"name\":\"options_sets_unused\",\"displayName\":\"Option sets which are not used\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Option sets which are not used\",\"introduction\":\"Option sets should be used for some purpose. The may be used by data elements, comments, attributes, or tracked entity attributes.\",\"recommendation\":\"Consider deleting unused option sets, or alternatively, ensure that they have been properly assigned.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSU\"},{\"name\":\"catoptioncombos_no_catcombo\",\"displayName\":\"Category options combinations with no category combination.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options combinations with no category combination.\",\"introduction\":\"All category option combinations should be associated with a category combo. In certain cases, when category combinations are deleted,the linkage between a category option combination and a category combination may become corrupted.\",\"recommendation\":\"Check if any data is associated with the category option combination in question. Likely, the data should either be deleted or migrated to a valid category option combination. Any data which is associated with any of these category option combinations will not be available through either the data entry modules or any of the analytical apps.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CNC\"},{\"name\":\"data_elements_violating_exclusive_group_sets\",\"displayName\":\"Data elements with conflicting exclusive group sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are a members of more than one exclusive data element set belonging to the same data element group set\",\"recommendation\":\"Either remove the data element from all but one exclusive group set or consider if the set really should be an exclusive group set\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEVEGS\"},{\"name\":\"categories_same_category_options\",\"displayName\":\"Categories with the same category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with the same category options\",\"introduction\":\"Categories with the exact same category options should be considered to be merged. Categories with the exact same category options may be easily confused by users in analysis. The details view will provide a list of categories which have the exact same category options. For each duplicated category a number in parentheses such as (1) will indicate which categories belong to duplicated groups.\",\"recommendation\":\"If category combinations have already been created with duplicative categories,\\nit is recommended that you do not take any action, but rather ensure\\nthat users understand that there may be two category combinations which are duplicative.\\n\\nIf you choose to merge the duplicative category combinations, you would need to \\nremap all category option combinations from the category combo which you wish to \\nremove, to the one which you wish to keep. \\n\\nIf one of the categories is not in use in any category combination, it should\\nconsider to be removed from the system.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CSCO\"},{\"name\":\"visualizations_not_viewed_one_year\",\"displayName\":\"Visualizations which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Visualizations which have not been viewed in the past 12 months\",\"introduction\":\"Visualizations should be regularly viewed in the system. In many cases, users may create charts for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to charts being difficult to find in the visualization app.\",\"recommendation\":\"Unused charts can be removed directly using the data visualization app by a user with sufficient authority. If charts are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"visualizations\",\"isSlow\":false,\"code\":\"VNVOY\"},{\"name\":\"categories_one_default_category_option\",\"displayName\":\"Only one default category option should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option with UID \\\"xYerKDKCefk\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option or move all references to category option \\\"xYerKDKCefk\\\" and then remove the unused conflicting category option.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CODCO\"},{\"name\":\"orgunits_multiple_spaces\",\"displayName\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"introduction\":\"Names and/or shortnames of organisation units should not contain multiple spaces. They are superfluous and may complicate the location of organisation units when they are searched.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the multiple spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMS\"},{\"name\":\"data_elements_aggregate_abandoned\",\"displayName\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"introduction\":\"Data elements are considered to be abandoned when they have not been edited in at least 100 days and do not have any data values associated with them. Often, these are the result of new or changed configurations that have been abandoned at some point.\",\"recommendation\":\"Data elements that have no data associated with them and which there are no plans to start using for data collection should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAA\"},{\"name\":\"data_elements_assigned_to_data_sets_with_different_period_types\",\"displayName\":\"Data elements assigned to data sets with different period type\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are assigned to at least one data set that has a different period type\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEATDSWDPT\"},{\"name\":\"data_elements_aggregate_no_groups\",\"displayName\":\"Aggregate data elements not in any data element groups.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not in any data element groups.\",\"introduction\":\"All data elements should be in a data element group. This allows users to find the data elements more easily in analysis\\n apps and also contributes to having more complete data element group sets.\\n Maintenance operations can also be made more efficient by applying\\n bulk settings (ex. sharing) to all data elements within a data element group.\",\"recommendation\":\"Data elements that are not in a data element group should be added to a relevant data element group. If the data elements are not needed, they should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANG\"},{\"name\":\"category_options_shared_within_category_combo\",\"displayName\":\"Category combinations with categories which share the same category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category combinations with categories which share the same category options.\",\"introduction\":\"As a general rule, category options should be reused where possible between categories. The exception to this rule however, is when you have a category combo with multiple categories, and within those categories, a category option is shared. As a simple example, lets say you have a category called \\\"Sex\\\" with options \\\"Male\\\"\\\", \\\"Female\\\" and \\\"Unknown\\\". There is also a second category called \\\"Age\\\" with options \\\"<15\\\", \\\"15+\\\", and \\\"Unknown\\\". A category combination called \\\"Age/Sex\\\" is then created with these two categories, which share the option \\\"Unknown\\\". This situation should be avoided, as it creates issues when analyzing data.\",\"recommendation\":\"The recommended approach to dealing with this situation is to create a new category combination, using two new categories. Using the example from the introduction, you should create two new category options called \\\"Unknown age\\\" and \\\"Unknown sex\\\". A new category combination can then be created with these new categories, which do not share category options. All data which is potentially associated with the old category combinations, would need to be reassigned to the new category option combinations. Any analytical objects which use the categories to be removed would also need to be updated.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"COSWCC\"},{\"name\":\"orgunits_null_island\",\"displayName\":\"Organisation units located within 100 km of Null Island (0,0).\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units located within 100 km of Null Island (0,0).\",\"introduction\":\"A common problem when importing coordinates is the inclusion of coordinates situated around the point of [Null Island](https://en.wikipedia.org/wiki/Null_Island). This is the point on the Earth's surface where the Prime Meridian and Equator intersect with a latitude of 0 and a longitude of 0. The point also happens to be situated currently in the middle of the ocean. This query identifies any points located within 100 km of the point having latitude and longitude equal to zero.\",\"recommendation\":\"Update the coordinates of the affected organization unit to the correct location.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONI\"},{\"name\":\"program_rule_actions_without_section\",\"displayName\":\"Program rules with actions lacking a program stage section\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a section but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWS\"},{\"name\":\"periods_3y_future\",\"displayName\":\"Periods which are more than three years in the future.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are more than three years in the future.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\nfar future. Different data entry clients may not properly validate for periods\\nwhich are in the future, and thus any periods in the future should be reviewed.\\nIn some cases, data may be valid for future dates, e.g. targets which are set for the\\nnext fiscal year.\",\"recommendation\":\"If any periods exist in the system in the future, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\\n\\nIn many cases, clients may mean to transmit\\ndata for January 2021, but due to data entry errors, January 2031 is selected. Thus,\\nany data in the far future should be investigated to ensure it does not result\\nfrom data entry errors.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"P3F\"},{\"name\":\"orgunits_trailing_spaces\",\"displayName\":\"Organisation units should not have trailing spaces.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have trailing spaces.\",\"introduction\":\"Trailing spaces in organisation units are superfluous.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the trailing spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OTS\"},{\"name\":\"validation_rule_groups_scarce\",\"displayName\":\"Validation rule should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Validation rule should have at least two members.\",\"introduction\":\"Generally validation rule groups should be composed of multiple validation rules.\",\"recommendation\":\"Considering removing groups which are empty or which have a single member. Alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"validationRuleGroups\",\"isSlow\":false,\"code\":\"VRGS\"},{\"name\":\"indicators_with_invalid_numerator\",\"displayName\":\"Indicators with invalid numerator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators where the numerator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWIN\"},{\"name\":\"categories_one_default_category_combo\",\"displayName\":\"Only one default category combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category combo should exist\",\"introduction\":\"There should only exist one category combo with name and code \\\"default\\\".\",\"recommendation\":\"Only the category combo with UID \\\"bjDvmb4bfuf\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category combo or move all references to category combo \\\"bjDvmb4bfuf\\\" and then remove the unused conflicting category combo.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CODCC\"},{\"name\":\"data_elements_without_data_sets\",\"displayName\":\"Data elements lacking data Sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data sets\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWDS\"},{\"name\":\"category_combos_unused\",\"displayName\":\"Category combinations not used by other metadata objects\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category combinations not used by other metadata objects\",\"introduction\":\"Category combinations which are unused in any datasets, data elements, programs or data approval workflows may be safe to delete. In some cases, category combinations may be created, but never actually used for anything. This may lead to situations where users and implementers are confused about which category combination should actually be used. In general, it should be safe to delete unused category combinations, except in situations where existing data has been associated with them.\",\"recommendation\":\"Check to see if any data is associated with the category combination before attempting to delete it. Category combinations which are not currently used in any metadata objects may still be valid for legacy reasons, but they should be reviewed to be sure they are still needed. Otherwise, it should be safe to remove them from the system.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCU\"},{\"name\":\"category_option_groups_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option groups should be composed of at least two category options. There can however be legitimate cases when a single category option is part of a group, especially in cases where there is a direct mapping between age bands and category options.\",\"recommendation\":\"Considering removing groups with zero or one category options, or alternatively, add additional category options to the group to make it more useful.\",\"issuesIdType\":\"categoryOptionGroups\",\"isSlow\":false,\"code\":\"COGS\"},{\"name\":\"datasets_empty\",\"displayName\":\"Datasets with no data elements.\",\"section\":\"Data sets\",\"severity\":\"WARNING\",\"description\":\"Datasets with no data elements.\",\"introduction\":\"All datasets should have data elements assigned to them.\",\"recommendation\":\"Remove empty datasets, or alternatively, assign data elements to them.\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DE\"},{\"name\":\"indicators_without_groups\",\"displayName\":\"Indicators lacking groups\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that do not have at least one group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWG\"},{\"name\":\"orgunit_groups_scarce\",\"displayName\":\"Organisation unit groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Organisation unit groups should have at least two members.\",\"introduction\":\"Generally, organisation unit groups should be composed of multiple organisation units.\",\"recommendation\":\"Considering removing groups with zero or one organisation units, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OGS\"},{\"name\":\"program_rules_without_priority\",\"displayName\":\"Program rules lacking a priority setting\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules with action type \\\"assign\\\" where the rule priority is not yet set\",\"recommendation\":\"Set a priority for the program rule(s)\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWP\"},{\"name\":\"categories_unique_category_combo\",\"displayName\":\"Different category combinations should not have the exact same combination of categories.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Different category combinations should not have the exact same combination of categories.\",\"introduction\":\"Category combinations should be a unique combination of categories. If two or more category combinations contain the exact same set of categories, this would be considered to be duplicative and potentially confusing to users.\",\"recommendation\":\"One category combo is kept, all references are updated to use this combo and other combos are removed.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CUCC\"},{\"name\":\"indicator_group_sets_scarce\",\"displayName\":\"Indicator groups sets should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups sets should have at least two members.\",\"introduction\":\"All indicator group set should be composed of at least two indicators groups.\",\"recommendation\":\"Considering removing indicator group sets with less than two indicator groups, or alternatively, add additional indicator groups to the indicator group set to make it more useful.\",\"issuesIdType\":\"indicatorGroupSets\",\"isSlow\":false,\"code\":\"IGSS\"},{\"name\":\"validation_rules_with_invalid_right_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a right side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWIRSE\"},{\"name\":\"data_elements_aggregate_aggregation_operator\",\"displayName\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"introduction\":\"Data elements which are not numeric (text, dates, etc) should have an aggregation operator set to NONE. Data elements which are able to be aggregated (numbers, integers, etc) should have an aggregation operator set to something other than NONE, most often SUM.\",\"recommendation\":\"Open the affected data elements in the Maintenance App and change their aggregation type to an appropriate type. Alternatively, these can be altered via the API.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAAO\"},{\"name\":\"org_unit_groups_without_group_sets\",\"displayName\":\"Organisation unit groups lacking group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation unit groups that aren't member of at least one organisation unit group set\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OUGWGS\"},{\"name\":\"program_rule_variables_without_attribute\",\"displayName\":\"Program rule variables lacking an attribute\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring an attribute source but that is not yet linked to an attribute\",\"recommendation\":\"Assign an attribute to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWA\"},{\"name\":\"program_indicator_groups_scarce\",\"displayName\":\"Program indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Program indicator groups should have at least two members.\",\"introduction\":\"Program indicator groups should generally be composed of two or more program indicators.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"programIndicatorGroups\",\"isSlow\":false,\"code\":\"PIGS\"},{\"name\":\"program_rules_no_expression\",\"displayName\":\"Program rules with no expression.\",\"section\":\"Program rules\",\"severity\":\"WARNING\",\"description\":\"Program rules with no expression.\",\"introduction\":\"All program rules should have an expression. Expressions are used by program rules to determine when they should be triggered. Program rules with no expression have no purpose.\",\"recommendation\":\"Using the DHIS2 user interface, assign an expression to each of the program rules which is missing one. Otherwise, if it is safe to delete the program rule with no expression, it is recommended to remove it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNE\"},{\"name\":\"data_elements_aggregate_no_data\",\"displayName\":\"Aggregate data elements with NO data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements with NO data values.\",\"introduction\":\"Data elements should generally always be associated with data values. If data elements exist in a data set which is active, but there are no data values associated with them, they may not be part of the data entry screens. Alternatively, the data element may have been added but never been associated with a dataset.\",\"recommendation\":\"Consider removing data elements with no data values.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAND\"},{\"name\":\"program_indicators_without_expression\",\"displayName\":\"Program indicators lacking an expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have no expression set yet\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWE\"},{\"name\":\"periods_distant_past\",\"displayName\":\"Periods which are in the distant past.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are in the distant past.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\ndistant past. Different data entry clients may not properly validate for periods\\nwhich are in the distant past, and thus these periods should be triaged to ensure\\nthat data has not been entered against them by mistake.\",\"recommendation\":\"If any periods exist in the system in the distant past, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PDP\"},{\"name\":\"org_units_being_orphaned\",\"displayName\":\"Orphaned organisation units\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that aren't level 1 units but that lack a parent so that they are not connected to the rest of the organisation tree\",\"recommendation\":\"Find (or create) and set the correct parent for the orphaned organisation unit(s). Eventually this is also caused by having set the wrong level.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUBO\"},{\"name\":\"cocs_wrong_cardinality\",\"displayName\":\"Category option combinations with incorrect cardinality.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with incorrect cardinality.\",\"introduction\":\"All category option combinations should have exactly the same number of category option associations as the number of categories in the category combination. If there are two categories in a category combination, then every category option combination should have exactly two category options.\\nCategory option combinations with the incorrect cardinality are usually the result of a category combination having been created, and then modified later. Suppose that two categories are used to create a category combination. Each category option combination of this category combo will have two category options. If an additional category is added to the category combination later, new category option combinations with three category options will be created and associated with this category combo. The original category option combinations would be considered to be invalid.\",\"recommendation\":\"Category option combinations which have an incorrect cardinality will be ignored by the DHIS2 analytics system and should be removed.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CWC\"},{\"name\":\"dashboards_not_viewed_one_year\",\"displayName\":\"Dashboards which have not been actively viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Dashboards which have not been actively viewed in the past 12 months\",\"introduction\":\"Dashboards should be regularly viewed in the system. In many cases, users may create dashboards for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to useful dashboards being difficult to find. This check identifies any dashboards which have not been viewed in the past year.\",\"recommendation\":\"Unused dashboards can be deleted in the entirety from the main dashboard app by clicking on the \\\"Edit\\\" button and choosing \\\"Delete\\\". Note that this process cannot be undone! Another option would be to alter the sharing of the dashboard so that it is not visible to any user.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNVOY\"}]", - "responseSize": 66022, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - } -] diff --git a/cypress/fixtures/network/40/users_should_be_able_to_view_system_jobs.json b/cypress/fixtures/network/40/users_should_be_able_to_view_system_jobs.json deleted file mode 100644 index 74b77b8e6..000000000 --- a/cypress/fixtures/network/40/users_should_be_able_to_view_system_jobs.json +++ /dev/null @@ -1,271 +0,0 @@ -[ - { - "path": "/api/40/systemSettings/helpPageLink", - "featureName": "Users should be able to view system jobs", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"helpPageLink\":\"https://dhis2.github.io/dhis2-docs/master/en/user/html/dhis2_user_manual_en.html\"}", - "responseSize": 99, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/analytics/tableTypes", - "featureName": "Users should be able to view system jobs", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"]", - "responseSize": 122, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/jobConfigurations/jobTypes?fields=*&paging=false", - "featureName": "Users should be able to view system jobs", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"jobTypes\":[{\"name\":\"Data integrity\",\"jobType\":\"DATA_INTEGRITY\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"checks\",\"fieldName\":\"Checks\",\"persisted\":false,\"collectionName\":\"checks\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/dataIntegrity\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.parameters.DataIntegrityJobParameters$DataIntegrityReportType\",\"name\":\"type\",\"fieldName\":\"Type\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"REPORT\",\"SUMMARY\",\"DETAILS\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Resource table\",\"jobType\":\"RESOURCE_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Analytics table\",\"jobType\":\"ANALYTICS_TABLE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"skipPrograms\",\"fieldName\":\"Skip programs\",\"persisted\":false,\"collectionName\":\"skipPrograms\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/programs\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipResourceTables\",\"fieldName\":\"Skip resource tables\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Continuous analytics table\",\"jobType\":\"CONTINUOUS_ANALYTICS_TABLE\",\"schedulingType\":\"FIXED_DELAY\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"fullUpdateHourOfDay\",\"fieldName\":\"Full update hour of day\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"lastYears\",\"fieldName\":\"Last years\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.Set\",\"itemKlass\":\"org.hisp.dhis.analytics.AnalyticsTableType\",\"name\":\"skipTableTypes\",\"fieldName\":\"Skip table types\",\"persisted\":false,\"collectionName\":\"skipTableTypes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"DATA_VALUE\",\"COMPLETENESS\",\"COMPLETENESS_TARGET\",\"ORG_UNIT_TARGET\",\"EVENT\",\"ENROLLMENT\",\"OWNERSHIP\",\"VALIDATION_RESULT\"],\"relativeApiEndpoint\":\"/api/analytics/tableTypes\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Data sync\",\"jobType\":\"DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker programs data sync\",\"jobType\":\"TRACKER_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Event programs data sync\",\"jobType\":\"EVENT_PROGRAMS_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"pageSize\",\"fieldName\":\"Page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Meta data sync\",\"jobType\":\"META_DATA_SYNC\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"trackerProgramPageSize\",\"fieldName\":\"Tracker program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":20,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"eventProgramPageSize\",\"fieldName\":\"Event program page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":60,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"dataValuesPageSize\",\"fieldName\":\"Data values page size\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":10000,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Aggregate data exchange\",\"jobType\":\"AGGREGATE_DATA_EXCHANGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"dataExchangeIds\",\"fieldName\":\"Data exchange ids\",\"persisted\":false,\"collectionName\":\"dataExchangeIds\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/aggregateDataExchanges\",\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Send scheduled message\",\"jobType\":\"SEND_SCHEDULED_MESSAGE\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Program notifications\",\"jobType\":\"PROGRAM_NOTIFICATIONS\",\"schedulingType\":\"CRON\",\"jobParameters\":[]},{\"name\":\"Monitoring\",\"jobType\":\"MONITORING\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"validationRuleGroups\",\"fieldName\":\"Validation rule groups\",\"persisted\":false,\"collectionName\":\"validationRuleGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/validationRuleGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"sendNotifications\",\"fieldName\":\"Send notifications\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"persistResults\",\"fieldName\":\"Persist results\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Push analysis\",\"jobType\":\"PUSH_ANALYSIS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"pushAnalysis\",\"fieldName\":\"Push analysis\",\"persisted\":false,\"collectionName\":\"pushAnalysis\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/pushAnalysis\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Tracker search optimization\",\"jobType\":\"TRACKER_SEARCH_OPTIMIZATION\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.util.Set\",\"itemKlass\":\"java.lang.String\",\"name\":\"attributes\",\"fieldName\":\"Attributes\",\"persisted\":false,\"collectionName\":\"attributes\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/trackedEntityAttributes/indexable\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"skipIndexDeletion\",\"fieldName\":\"Skip index deletion\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Predictor\",\"jobType\":\"PREDICTOR\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"relativeStart\",\"fieldName\":\"Relative start\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"relativeEnd\",\"fieldName\":\"Relative end\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictors\",\"fieldName\":\"Predictors\",\"persisted\":false,\"collectionName\":\"predictors\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictors\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.util.List\",\"itemKlass\":\"java.lang.String\",\"name\":\"predictorGroups\",\"fieldName\":\"Predictor groups\",\"persisted\":false,\"collectionName\":\"predictorGroups\",\"attribute\":false,\"simple\":false,\"collection\":true,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":true,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"relativeApiEndpoint\":\"/api/predictorGroups\",\"defaultValue\":[],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Disable inactive users\",\"jobType\":\"DISABLE_INACTIVE_USERS\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Integer\",\"name\":\"inactiveMonths\",\"fieldName\":\"Inactive months\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":0,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"reminderDaysBefore\",\"fieldName\":\"Reminder days before\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]},{\"name\":\"Test\",\"jobType\":\"TEST\",\"schedulingType\":\"CRON\",\"jobParameters\":[{\"klass\":\"java.lang.Long\",\"name\":\"waitMillis\",\"fieldName\":\"Wait millis\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"stages\",\"fieldName\":\"Stages\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtStage\",\"fieldName\":\"Fail at stage\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"items\",\"fieldName\":\"Items\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Integer\",\"name\":\"failAtItem\",\"fieldName\":\"Fail at item\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Long\",\"name\":\"itemDuration\",\"fieldName\":\"Item duration\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.String\",\"name\":\"failWithMessage\",\"fieldName\":\"Fail with message\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"failWithException\",\"fieldName\":\"Fail with exception\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"org.hisp.dhis.scheduling.JobProgress$FailurePolicy\",\"name\":\"failWithPolicy\",\"fieldName\":\"Fail with policy\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"constants\":[\"PARENT\",\"FAIL\",\"SKIP_STAGE\",\"SKIP_ITEM\",\"SKIP_ITEM_OUTLIER\"],\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false},{\"klass\":\"java.lang.Boolean\",\"name\":\"runStagesParallel\",\"fieldName\":\"Run stages parallel\",\"persisted\":false,\"attribute\":false,\"simple\":false,\"collection\":false,\"ordered\":false,\"owner\":false,\"identifiableObject\":false,\"nameableObject\":false,\"embeddedObject\":false,\"analyticalObject\":false,\"readable\":false,\"writable\":false,\"unique\":false,\"required\":false,\"manyToMany\":false,\"oneToOne\":false,\"manyToOne\":false,\"oneToMany\":false,\"defaultValue\":false,\"translatable\":false,\"gistPreferences\":{\"included\":\"AUTO\",\"transformation\":\"AUTO\"},\"propertyTransformer\":false}]}]}", - "responseSize": 24994, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/pushAnalysis?paging=false", - "featureName": "Users should be able to view system jobs", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"pushAnalysis\":[{\"displayName\":\"Immunization Key Indicators Monthly Report\",\"id\":\"jtcMAKhWwnc\"}]}", - "responseSize": 98, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/validationRuleGroups?paging=false", - "featureName": "Users should be able to view system jobs", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"validationRuleGroups\":[{\"displayName\":\"ANC\",\"id\":\"UP1lctvalPn\"},{\"displayName\":\"Commodities\",\"id\":\"xcpl667ccfF\"},{\"displayName\":\"Critical event\",\"id\":\"xWtt9c443Lt\"},{\"displayName\":\"District stock\",\"id\":\"mEtdbIDDhix\"},{\"displayName\":\"Epidemic disease outbreak\",\"id\":\"y2yQIm79VTW\"},{\"displayName\":\"Facility Stock\",\"id\":\"SqyI8HKqI4g\"},{\"displayName\":\"Immunisation\",\"id\":\"UiOSY1iIdub\"},{\"displayName\":\"Infectious disease outbreak\",\"id\":\"WUZXEFdn1PX\"},{\"displayName\":\"Malaria\",\"id\":\"zlaSof6qLqF\"},{\"displayName\":\"Population\",\"id\":\"D3bItmtBpsW\"},{\"displayName\":\"TB\",\"id\":\"IMF6p1MqoHl\"},{\"displayName\":\"Testing\",\"id\":\"nMDkAJXsmlR\"}]}", - "responseSize": 628, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictors?paging=false", - "featureName": "Users should be able to view system jobs", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictors\":[{\"displayName\":\"Malaria Outbreak Threshold\",\"id\":\"tEK1OEqS4O1\"}]}", - "responseSize": 80, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/predictorGroups?paging=false", - "featureName": "Users should be able to view system jobs", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"predictorGroups\":[]}", - "responseSize": 22, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - }, - { - "path": "/api/40/dataIntegrity", - "featureName": "Users should be able to view system jobs", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "[{\"name\":\"orgunits_invalid_geometry\",\"displayName\":\"Organisation units with invalid geometry.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with invalid geometry.\",\"introduction\":\"DHIS2 uses the PostGIS database extension to manage the geographical information associated\\nwith organisation units. There are various reasons why geometries may be considered to be\\ninvalid including self-inclusions, self-intersections, and sliver polygons. Please see the\\nPostGIS documentation for a more in-depth discussion on this topic.\\n\\nInvalid geometry is not always a problem and may be able to be ignored, however, it has been observed in certain systems\\nthat this can lead to problems in analytics. If you are experiencing issues when generating analytics\\ntables, and see errors related to invalid geometries, you will need to either remove the invalid geometry,\\nor fix it.\",\"recommendation\":\"Update the geometry of the affected organisation units to a valid geometry. It may be possible to use the PostGIS function `ST_MakeValid` to automatically fix the problem. However, in other cases the geometry may need to be edited in a GIS tool, and then updated again in DHIS2.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OIG\"},{\"name\":\"data_elements_without_groups\",\"displayName\":\"Data elements lacking groups\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data element groups\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWG\"},{\"name\":\"orgunit_group_sets_excess_groups\",\"displayName\":\"Organisation units which belong to multiple groups in a group set.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which belong to multiple groups in a group set.\",\"introduction\":\"Organisation units should belong to exactly one group within each organisation unit group set of which they are a member. If the organisation unit belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the organisation units in the details list to exactly one group within each group set membership.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OGSEG\"},{\"name\":\"validation_rules_missing_value_strategy_null\",\"displayName\":\"All validation rule expressions should have a missing value strategy.\",\"section\":\"Validation rules\",\"severity\":\"SEVERE\",\"description\":\"All validation rule expressions should have a missing value strategy.\",\"introduction\":\"Validation rules are composed of a left and right side expression. In certain systems the missing value strategy may not be defined. This may lead to an exception during validation rule analysis. The affected validation rules should be corrected to with an appropriate missing value strategy.\",\"recommendation\":\"Using the results of the the details SQL view, identify the affected validation rules and which side of the rule the missing value strategy has not been specified. Using the maintenance app, make the appropriate corrections and save the rule.\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRMVSN\"},{\"name\":\"category_combos_being_invalid\",\"displayName\":\"Invalid Category-combos\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Lists all category-combos that are invalid\",\"recommendation\":\"Make sure the category combo is assigned to at least one category and that all categories have category options \",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCBI\"},{\"name\":\"data_elements_in_data_set_not_in_form\",\"displayName\":\"Data sets with data elements not in data entry form\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that have data elements which are neither a member of the set's data entry form nor a member of the sets section\",\"recommendation\":\"Either remove the data elements in question or make them a member of the set's form or section\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DEIDSNIF\"},{\"name\":\"categories_no_options\",\"displayName\":\"Categories with no category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with no category options\",\"introduction\":\"Categories should always have at least one category option.\",\"recommendation\":\"Any categories without category options should either be removed from the system if they are not in use. Otherwise, appropriate category options should be added to the category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CNO\"},{\"name\":\"data_elements_aggregate_no_analysis\",\"displayName\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not used in any favourites (directly or through indicators)\",\"introduction\":\"All aggregate data elements that are captured in DHIS2 should be used to produce some type of analysis output (charts, maps, tables). This can be by using them directly in an output, or by having them contribute to an indicator calculation that is used an output.\",\"recommendation\":\"Data elements that are not routinely being reviewed in analysis, either directly or indirectly through indicators, should be reviewed to determine if they still need to be collected. If these are meant to be used in routine review, then associated outputs should be created using them. If these data elements are not going to be used for any type of information review, consideration should be made to either archive them or delete them.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANA\"},{\"name\":\"indicators_duplicated_terms\",\"displayName\":\"Indicators with the same terms.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same terms.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check attempts to identify indicators with the same formulas, regardless of the order of their their terms. Suppose you have an indicator which calculates total ANC attendance: ANC Total = ANC1 + ANC2 + ANC3 Suppose then another indicator exists in the system, which has been defined as: ANC Totals = ANC3 + ANC2 + ANC1 These two indicators are equivalent, and will produce the same result, and are thus considered to be duplicated.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Considered deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IDT\"},{\"name\":\"program_rules_no_action\",\"displayName\":\"Program rules with no action.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules with no action.\",\"introduction\":\"All program rules should have an action.\",\"recommendation\":\"Using the DHIS2 user interface, assign an action to each of the program rules which is missing one. Alternatively, if the program rule is not in use, then consider removing it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNA\"},{\"name\":\"orgunits_compulsory_group_count\",\"displayName\":\"Organisation units that are not in all compulsory orgunit group sets\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Orgunits that are not in all compulsory orgunit group sets\",\"introduction\":\"If any organisation unit groups have been marked as compulsory, each and every organisation unit should belong to exactly one group within each compulsory organisation unit group set. Assume we have created a group set called \\\"Ownership\\\" with two groups \\\"Public\\\" and \\\"Private\\\". Each and every organisation unit contained in the hierarchy must belong to either Public or Private (but not both). When organisation unit are not part of a group set, results in the analytics apps will not be correct if the organisation unit group set is used for aggregation.\",\"recommendation\":\"For each of the organisation units identified in the details query, you should assign the appropriate organisation unit group within the group set. Alternatively, if the group set should not be compulsory, you should change this attribute.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OCGC\"},{\"name\":\"orgunits_no_coordinates\",\"displayName\":\"Organisation units with no coordinates.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with no coordinates.\",\"introduction\":\"Ideally, all organisation units contained in the DHIS2 hierarchy should have a valid\\nset of coordinates. Usually for all organisation units above the facility level,\\nthese coordinates should be a polygon which provides the boundary of the organisation\\nunit. For facilities, these are usually represented as point coordinates.\\n\\nThere can obviously be exceptions to this rule. Mobile health facilities may not have\\na fixed location. Community health workers or wards below the facility level\\nmay also not have a defined or definable coordinate.\\n\\nThis check is intended to allow you to review all organisation units which do\\nnot have any coordinates and make a determination as to whether they should be updated.\",\"recommendation\":\"Where appropriate, update the geometry of each organisation unit with a valid geometry.\\nYou may need to contact the appropriate local government office to obtain a copy\\nof district boundaries, commonly referred to as \\\"shape files\\\". Another possibility\\nis to use freely available boundary files from GADM (https://gadm.org)\\n\\nIf facilities are missing coordinates, it may be possible to obtain these from\\nthe facility staff using their smart phone to get the coordinates. Images\\nfrom Google Maps can also often be used to estimate the position of a facility,\\nassuming that you have good enough resolution and local knowledge of where\\nit is located.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONC\"},{\"name\":\"data_sets_not_assigned_to_org_units\",\"displayName\":\"Data sets not assigned to organisation units\",\"section\":\"Data Sets\",\"severity\":\"WARNING\",\"description\":\"Lists all data sets that are not assigned to any organisation units\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DSNATOU\"},{\"name\":\"dashboards_no_items\",\"displayName\":\"Dashboards with no items.\",\"section\":\"Dashboards\",\"severity\":\"INFO\",\"description\":\"Dashboards with no items.\",\"introduction\":\"All dashboards should have content on them. Dashboards without any content do not serve any purpose, and can make it more difficult to find relevant dashboards with content.\",\"recommendation\":\"Dashboards without content that have not been modified in the last 14 days should be considered for deletion.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNI\"},{\"name\":\"orgunits_same_name_and_parent\",\"displayName\":\"Organisation units should not have the same name and parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have the same name and parent.\",\"introduction\":\"Organisation units may have exactly the same name. This may become confusing to users, particularly if the organisation unit has the same name and same parent. This can easily lead to data entry or analysis mistakes as users have no way to distinguish between the two organisation units.\",\"recommendation\":\"Rename identically named organisation units which share the same parent using the maintenance app.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OSNAP\"},{\"name\":\"indicators_not_grouped\",\"displayName\":\"Indicators not in any groups.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not in any groups.\",\"introduction\":\"All indicators should be in an indicator group. This allows users to find the indicators more easily in analysis apps and also contributes to having more complete indicators group sets. Maintenance operations can also be made more efficient by applying bulk settings (ex. sharing, filtering) to all indicators within an indicator group.\",\"recommendation\":\"Indicators that are not in a indicator group should be added to a relevant indicator group. If the indicators are not needed, they should be deleted.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"ING\"},{\"name\":\"category_option_group_sets_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option group sets should be composed of at least two category option groups.\",\"recommendation\":\"Considering removing groups with zero or one category option groups, or alternatively, add additional category option groups to the group set to make it more useful.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSS\"},{\"name\":\"org_units_without_groups\",\"displayName\":\"Organisation units lacking groups\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are not connected to at least one group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWG\"},{\"name\":\"data_elements_excess_groupset_membership\",\"displayName\":\"Data elements which belong to multiple groups in a group set.\",\"section\":\"data_elements\",\"severity\":\"SEVERE\",\"description\":\"Data elements which belong to multiple groups in a group set.\",\"introduction\":\"Data elements should belong to exactly one group within each data element group set of which they are a member. If the data element belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the data elements in the details list to exactly one data element group within each group set.\",\"issuesIdType\":\"data_elements_aggregate\",\"isSlow\":false,\"code\":\"DEEGM\"},{\"name\":\"data_element_groups_scarce\",\"displayName\":\"Data element groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Data element groups should have at least two members.\",\"introduction\":\"All data element groups should be composed of at least two data elements.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"dataElementGroups\",\"isSlow\":false,\"code\":\"DEGS\"},{\"name\":\"orgunits_not_contained_by_parent\",\"displayName\":\"Organisation units with point coordinates should be contained by their parent.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units with point coordinates should be contained by their parent.\",\"introduction\":\"Facilities are often represented as points in the DHIS2 hierarchy. Their parent organisation units geometry should contain all facilities which have been associated with them.\",\"recommendation\":\"Often boundary files are simplified when they are uploaded into DHIS2. This process may result in\\nfacilities which are located close to the border of a given district to fall outside of the district\\nwhen the boundary is simplified. This is considered to be more of a cosmetic problem for most DHIS2\\ninstallations, but could become an issue if any geospatial analysis is attempted using the\\nboundaries and point coordinates.\\n\\nIn cases where the facility falls outside of its parent's boundary\\nyou should confirm that the coordinates are correct. If the location is close to the boundary, you\\nmay want to reconsider how the boundary files have been simplified. Otherwise, if the location of\\nthe facility is completely incorrect, it should be rectified.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONCBP\"},{\"name\":\"program_rules_message_no_template\",\"displayName\":\"Program rules actions which should send or schedule a message without a message template.\",\"section\":\"Program rules\",\"severity\":\"SEVERE\",\"description\":\"Program rules actions which should send or schedule a message without a message template.\",\"introduction\":\"Program rule actions of type \\\"Send message\\\" or \\\"Schedule message\\\" should have an associated message template.\",\"recommendation\":\"Using the DHIS2 user interface, assign a message template to each of the program rule actions which send or schedule messages but which does not have an association with a message template.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRMNT\"},{\"name\":\"indicators_with_invalid_denominator\",\"displayName\":\"Indicators with invalid denominator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"List all indicators where the denominator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWID\"},{\"name\":\"indicator_types_duplicated\",\"displayName\":\"Indicator types with the same factor.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicator types with the same factor.\",\"introduction\":\"Indicators can be assigned a factor which is multiplied by the indicator's value. For example, if you create a percentage based indicator, you can assign the indicator a factor of 100, which would be multiplied by the actual value of the indicator calculated by DHIS2. In general, having multiple indicator types with the same factor is not recommended. It is duplicative, and may lead to confusion.\",\"recommendation\":\"Duplicated indicator types should consider to be removed from the system. Consider choosing one of the duplicated indicator types as the one to keep, and then update all indicators which share the same factor to this indicator type. The duplicated indicator types can then be removed from the system.\",\"issuesIdType\":\"indicatorTypes\",\"isSlow\":false,\"code\":\"ITD\"},{\"name\":\"options_sets_empty\",\"displayName\":\"Empty option sets\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Empty option sets\",\"introduction\":\"All option sets should generally include at least two items. Empty option sets serve no purpose.\",\"recommendation\":\"Options should either be added to the option set, or the option set should be deleted.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSE\"},{\"name\":\"category_options_no_categories\",\"displayName\":\"Category options with no categories.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options with no categories.\",\"introduction\":\"All category options should belong to at least one category.\",\"recommendation\":\"Category options which are not part of any category should be removed or alternatively should be added to an appropriate category.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CONC\"},{\"name\":\"orgunits_orphaned\",\"displayName\":\"Orphaned organisation units.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"Orphaned organisation units.\",\"introduction\":\"Orphaned organisation units are those which have neither parents nor any children. This means that they have no relationship to the main organisation unit hierarchy. These may be created by faulty metadata imports or direct manipulation of the database.\",\"recommendation\":\"The orphaned organisation units should be assigned a parent or removed from the system. It is recommended to use the DHIS2 API for this task if possible. If this is not possible, then they may need to be removed through direct SQL on the DHIS2 database.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OO\"},{\"name\":\"indicators_with_identical_formulas\",\"displayName\":\"Indicators with identical formulas\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that have the identical formulas with at least one other indicator\",\"recommendation\":\"Check if the same indicator should be used everywhere and remove duplicates\",\"isSlow\":false,\"code\":\"IWIF\"},{\"name\":\"program_indicators_with_invalid_filters\",\"displayName\":\"Program indicators with invalid filter\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators with invalid filter expression\",\"recommendation\":\"Check that the expression evaluates to true/false\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIF\"},{\"name\":\"program_rules_without_condition\",\"displayName\":\"Program rules lacking a condition\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that have no condition yet\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWC\"},{\"name\":\"categories_one_default_category\",\"displayName\":\"Only one default category should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category should exist\",\"introduction\":\"There should only exist one category with name and code \\\"default\\\".\",\"recommendation\":\"Only the category with UID \\\"GLevLNI9wkl\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category or move all references to category \\\"GLevLNI9wkl\\\" and then remove the unused conflicting category.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CODC\"},{\"name\":\"org_units_with_cyclic_references\",\"displayName\":\"Organisation units with cyclic references\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that have a conflicting parent hierarchy definition so that two organisation units become parent of each other or in other words they form a circular reference\",\"recommendation\":\"One of the organisation units must be setup wrongly and needs to be corrected so that a non-circular tree connects the two\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUWCR\"},{\"name\":\"program_rule_variables_without_data_element\",\"displayName\":\"Program rule variables lacking a data element\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring a data element source but that is not yet linked to a data element\",\"recommendation\":\"Assign a data element to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWDE\"},{\"name\":\"org_units_violating_exclusive_group_sets\",\"displayName\":\"Organisation units with conflicting exclusive group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that are members of multiple exclusive organisation unit groups\",\"recommendation\":\"Remove the organisation unit from all but one exclusive organisation unit group\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUVEGS\"},{\"name\":\"program_rule_actions_without_data_object\",\"displayName\":\"Program rules with actions lacking a data object\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires either a data element or an attribute but is not connected either\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWDO\"},{\"name\":\"orgunits_openingdate_gt_closeddate\",\"displayName\":\"Organisation units which have an opening date later than the closed date.\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units which have an opening date later than the closed date.\",\"introduction\":\"If a closing date has been defined for an organisation unit, it should always be after the opening date (if one has been defined).\",\"recommendation\":\"Alter either the opening or closing date of all affected organisation units so that the closing date is after the opening date.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OOGC\"},{\"name\":\"categories_one_default_category_option_combo\",\"displayName\":\"Only one default category option combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option combo should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option combo with UID \\\"HllvX50cXC0\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option combo or move all references to category option combo \\\"HllvX50cXC0\\\" and then remove the unused conflicting category option combo.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CODCOC\"},{\"name\":\"category_option_group_sets_incomplete\",\"displayName\":\"Category option group sets which do not contain all category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option group sets which which do not contain all category options.\",\"introduction\":\"Category option group sets are composed of multiple category option groups, which are in turn composed of various category options. Category option group sets are often used to group related category options together for analytical purposes. Categories are also composed of category options. In general, but not always, category option group sets should contain all category options of related categories. Suppose we have the following two age categories. \\nAge coarse: <15, 15+ Age fine: <1, 1-10, 10-14,15-19,20-24,25-29,30-34,35-39,40-44,45+\\nIn many cases, related data elements may be disaggregated differently. This may be to differences in the way in which the data is collected, or as is often the case, the disaggregation has changed over time. If we wish to analyze data for two different data elements (one of which uses Age coarse and the other Age fine), we can create a category option group set consisting of two category option groups which should consist of the following category options from above. \\n<15: <15, <1, 1-10, 10-14 15+: 15+, 15-19,20-24,25-29,30-34,35-39,40-44,45+\\nSuppose that we happen to omit the category option \\\"<1\\\" from the \\\"<15\\\" category option group. This would result in potential aggregation errors in when using this category option group set in any analytical objects. The details of this metadata check would return the UID and name of the category option group set. The category and category option would also be provided. Using the previous example, we would see \\\"Age fine:{<1}\\\" in the metadata check details section, to indicate that the <1 category option which is part of the \\\"Age fine\\\" category, is missing from the category option group set.\\nThere may exist specific analytical reasons why specific category options are omitted from a category option group set. However,these should usually be special cases. This metadata check will identify cases where category option group sets appear to be incomplete, however you should carefully review any groups which appear in the details. \\nThis check may also produce a number of issues which may at first glance appear to be false positives. In some cases, category options may be added to a category by mistake. When category option group sets are created, this extraneous option may be omitted and thus appear as missing from the group set. \\nAnother observed situation is where an option like \\\"Unknown\\\" is used across unrelated categories. Suppose you have two categories \\\"Age (<15, 15+, Unknown)\\\" and \\\"Sex (Male,Female,Unknown)\\\". Similar to above, we create category option group sets like: \\n<15: <15 15+: 15+ Unknown: Unknown\\nThis metadata check will report that \\\"Male\\\" and \\\"Female\\\" are missing from the group set. This is because the same \\\"Unknown\\\" option is shared between two different, unrelated categories. It is recommended that if this situation occurs, that you create two separate \\\"Unknown\\\" category options like \\\"Unknown sex\\\" and \\\"Unknown age\\\".\",\"recommendation\":\"Using the maintenance app, assign the missing category options to an appropriate category option group within the affected category option group set.\",\"issuesIdType\":\"categoryOptionGroupSets\",\"isSlow\":false,\"code\":\"COGSI\"},{\"name\":\"maps_not_viewed_one_year\",\"displayName\":\"Maps which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Maps which have not been viewed in the past 12 months\",\"introduction\":\"Maps should be regularly viewed in the system. In many cases, users may create maps for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system and being difficult to find in the Maps app.\",\"recommendation\":\"Unused maps can be removed directly using the Maps app by a user with sufficient authority. If maps are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"maps\",\"isSlow\":false,\"code\":\"MNVOY\"},{\"name\":\"indicators_exact_duplicates\",\"displayName\":\"Indicators with the same formula.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators with the same formula.\",\"introduction\":\"Indicators should generally have unique formulas. This metadata check shows indicators which have the exact same formulas. Spaces which are present are removed prior to comparison.\",\"recommendation\":\"Duplicative indicators should be considered to be removed from the system, since they may cause confusion on the part of users as to which one should be used. Consider deleting all but one of the duplicated indicators using the maintenance app.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IED\"},{\"name\":\"indicators_violating_exclusive_group_sets\",\"displayName\":\"Indicators with conflicting exclusive group sets\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that are members of multiple exclusive indicator groups\",\"recommendation\":\"Remove the indicator from all but one exclusive indicator group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IVEGS\"},{\"name\":\"category_options_excess_groupset_membership\",\"displayName\":\"Category options which belong to multiple groups in a category option group set.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category options which belong to multiple groups in a category option group set.\",\"introduction\":\"Category options should belong to exactly one category option group which are part of a category option group set. If the category option belongs to multiple groups, this will lead to unpredictable results in analysis.\",\"recommendation\":\"Using the maintenance app, assign the category option in the details list to exactly one category option group within each group set.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"COEGM\"},{\"name\":\"periods_duplicates\",\"displayName\":\"Duplicate Periods\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Lists all periods duplicates which have identical type and start date\",\"recommendation\":\"Make sure all database references are moved to one of the duplicates before deleting the unused duplicates\",\"isSlow\":false,\"code\":\"PD\"},{\"name\":\"program_rules_without_action\",\"displayName\":\"Program rules lacking an action\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules that are not connected to any program rule action\",\"recommendation\":\"Connect the rule to an action or consider removing the rule\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWA\"},{\"name\":\"orgunits_multiple_roots\",\"displayName\":\"The organisation unit hierarchy should have a single root.\",\"section\":\"Organisation units\",\"severity\":\"CRITICAL\",\"description\":\"The organisation unit hierarchy should have a single root.\",\"introduction\":\"Every DHIS2 system should have a single root organisation unit. This means a single organisation unit from which all other branches of the hierarchy are descendants.\",\"recommendation\":\"Once you have decided which organisation unit should be the real root of the organisation unit hierarchy, you should update the parent organisation unit. This can be done by using the DHIS2 API or my updating the value directly in the `organisationunit` table.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMR\"},{\"name\":\"validation_rules_with_invalid_left_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a left side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWILSE\"},{\"name\":\"program_rule_actions_without_stage_id\",\"displayName\":\"Program rules with actions lacking a program stage\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a program stage but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWSI\"},{\"name\":\"indicator_groups_scarce\",\"displayName\":\"Indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups should have at least two members.\",\"introduction\":\"All indicator groups should be composed of at least two indicators.\",\"recommendation\":\"Considering removing groups with zero or one groups, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"indicatorGroups\",\"isSlow\":false,\"code\":\"IGS\"},{\"name\":\"option_sets_wrong_sort_order\",\"displayName\":\"Option sets with possibly wrong sort order.\",\"section\":\"Option sets\",\"severity\":\"SEVERE\",\"description\":\"Option sets with possibly wrong sort order.\",\"introduction\":\"Option sets contain options which should be ordered sequentially. The sort_order property should always start with 1 and have a sequential sequence. If there are three options in the option set, then the sort order should be 1,2,3. \\nIn certain circumstances, options may be deleted from an option set, and the sort order may become corrupted. This may lead to a situation where it becomes impossible to update the option set from the maintenance app, and may lead to problems when attempting to using the option set in the data entry app.\",\"recommendation\":\"If it is possible to open the option set in the maintenance app, you can resort the option set, which should correct the problem. Another possible solution is to directly update the sort_order property of in the `optionset` table in the database, ensuring that a valid sequence is present for all options in the option set.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSWSO\"},{\"name\":\"periods_same_start_end_date\",\"displayName\":\"Periods with the same start and end dates\",\"section\":\"Periods\",\"severity\":\"CRITICAL\",\"description\":\"Periods with the same start and end dates\",\"introduction\":\"Different periods should not have exactly the same start and end date.\",\"recommendation\":\"All references to the duplicate periods should be removed from the system and reassigned. It is recommended to use the period with the lower periodid.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PSSED\"},{\"name\":\"program_indicators_with_invalid_expressions\",\"displayName\":\"Program indicators with invalid expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have an invalid expression\",\"recommendation\":\"Check that the expression evaluates to a number\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWIE\"},{\"name\":\"program_rule_actions_without_notification\",\"displayName\":\"Program rule with actions lacking a notification template\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all program rules connected to an action of a type that requires a notification template but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWN\"},{\"name\":\"indicator_no_analysis\",\"displayName\":\"Indicators not used in analytical objects.\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Indicators not used in analytical objects.\",\"introduction\":\"Indicators should be used to produce some type of analytical output (charts, maps, pivot tables). Note: indicators used in datasets to provide feedback during data entry are not counted as being used in analytical objects.\",\"recommendation\":\"Indicators that are not routinely being used for analysis should be reviewed to determine if they are useful and needed. If these are meant to be used for routine review, then associated outputs should be created using them. If these indicators are not going to be used for any type of information review, and are not used in data sets for feedback during data entry, consideration should be made to delete them.\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"INA\"},{\"name\":\"user_groups_scarce\",\"displayName\":\"User groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"User groups should have at least two members.\",\"introduction\":\"Generally, user groups should contain two or more users.\",\"recommendation\":\"Considering removing user groups with less than two users, or alternatively, add additional users to the group to make it more useful.\",\"issuesIdType\":\"userGroups\",\"isSlow\":false,\"code\":\"UGS\"},{\"name\":\"data_elements_aggregate_with_different_period_types\",\"displayName\":\"Aggregate data elements which belong to datasets with different period types.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"SEVERE\",\"description\":\"Aggregate data elements which belong to datasets with different period types.\",\"introduction\":\"Data elements should not belong to datasets with different period types.\",\"recommendation\":\"If you need to collect data with different period types (e.g. weekly and monthly) you should use different data elements for each period type. In general, it is not recommended to collect data with different frequencies, since in general, data collected at higher frequencies (e.g. weekly) can be aggregated to data with lower frequencies (e.g yearly).\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAWDPT\"},{\"name\":\"validation_rules_without_groups\",\"displayName\":\"Validation rules lacking groups\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that are not member of at least one validation rule group\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWG\"},{\"name\":\"category_option_combos_disjoint\",\"displayName\":\"Category option combinations with disjoint associations.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with disjoint associations.\",\"introduction\":\"Under certain circumstances, category option combinations may exist in the system, but not have any direct association with category options which are associated with their category combination. This situation usually occurs when category options have been added to a category and then the category is added to a category combination. New category option combinations are created in the system at this point. If any of the category options are then removed in one of the underlying categories, a so-called disjoint category option combination may result. This is a category option combination which has no direct association with any category options in any of the categories associated with the category combination.\",\"recommendation\":\"The disjoint category option combinations should be removed from the system if possible. However, if any data is associated with the category option combination, a determination will need to be made in regards of how to deal with this data.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"COCD\"},{\"name\":\"options_sets_unused\",\"displayName\":\"Option sets which are not used\",\"section\":\"Option sets\",\"severity\":\"WARNING\",\"description\":\"Option sets which are not used\",\"introduction\":\"Option sets should be used for some purpose. The may be used by data elements, comments, attributes, or tracked entity attributes.\",\"recommendation\":\"Consider deleting unused option sets, or alternatively, ensure that they have been properly assigned.\",\"issuesIdType\":\"optionSets\",\"isSlow\":false,\"code\":\"OSU\"},{\"name\":\"catoptioncombos_no_catcombo\",\"displayName\":\"Category options combinations with no category combination.\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category options combinations with no category combination.\",\"introduction\":\"All category option combinations should be associated with a category combo. In certain cases, when category combinations are deleted,the linkage between a category option combination and a category combination may become corrupted.\",\"recommendation\":\"Check if any data is associated with the category option combination in question. Likely, the data should either be deleted or migrated to a valid category option combination. Any data which is associated with any of these category option combinations will not be available through either the data entry modules or any of the analytical apps.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CNC\"},{\"name\":\"data_elements_violating_exclusive_group_sets\",\"displayName\":\"Data elements with conflicting exclusive group sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are a members of more than one exclusive data element set belonging to the same data element group set\",\"recommendation\":\"Either remove the data element from all but one exclusive group set or consider if the set really should be an exclusive group set\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEVEGS\"},{\"name\":\"categories_same_category_options\",\"displayName\":\"Categories with the same category options\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Categories with the same category options\",\"introduction\":\"Categories with the exact same category options should be considered to be merged. Categories with the exact same category options may be easily confused by users in analysis. The details view will provide a list of categories which have the exact same category options. For each duplicated category a number in parentheses such as (1) will indicate which categories belong to duplicated groups.\",\"recommendation\":\"If category combinations have already been created with duplicative categories,\\nit is recommended that you do not take any action, but rather ensure\\nthat users understand that there may be two category combinations which are duplicative.\\n\\nIf you choose to merge the duplicative category combinations, you would need to \\nremap all category option combinations from the category combo which you wish to \\nremove, to the one which you wish to keep. \\n\\nIf one of the categories is not in use in any category combination, it should\\nconsider to be removed from the system.\",\"issuesIdType\":\"categories\",\"isSlow\":false,\"code\":\"CSCO\"},{\"name\":\"visualizations_not_viewed_one_year\",\"displayName\":\"Visualizations which have not been viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Visualizations which have not been viewed in the past 12 months\",\"introduction\":\"Visualizations should be regularly viewed in the system. In many cases, users may create charts for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to charts being difficult to find in the visualization app.\",\"recommendation\":\"Unused charts can be removed directly using the data visualization app by a user with sufficient authority. If charts are a part of any dashboard however, they will also need to be removed from the dashboard first.\",\"issuesIdType\":\"visualizations\",\"isSlow\":false,\"code\":\"VNVOY\"},{\"name\":\"categories_one_default_category_option\",\"displayName\":\"Only one default category option should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category option should exist\",\"introduction\":\"There should only exist one category option with name and code \\\"default\\\".\",\"recommendation\":\"Only the category option with UID \\\"xYerKDKCefk\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category option or move all references to category option \\\"xYerKDKCefk\\\" and then remove the unused conflicting category option.\",\"issuesIdType\":\"categoryOptions\",\"isSlow\":false,\"code\":\"CODCO\"},{\"name\":\"orgunits_multiple_spaces\",\"displayName\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have multiple spaces in their names or shortnames.\",\"introduction\":\"Names and/or shortnames of organisation units should not contain multiple spaces. They are superfluous and may complicate the location of organisation units when they are searched.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the multiple spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OMS\"},{\"name\":\"data_elements_aggregate_abandoned\",\"displayName\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements that have not been changed in last 100 days and do not have any data values.\",\"introduction\":\"Data elements are considered to be abandoned when they have not been edited in at least 100 days and do not have any data values associated with them. Often, these are the result of new or changed configurations that have been abandoned at some point.\",\"recommendation\":\"Data elements that have no data associated with them and which there are no plans to start using for data collection should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAA\"},{\"name\":\"data_elements_assigned_to_data_sets_with_different_period_types\",\"displayName\":\"Data elements assigned to data sets with different period type\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that are assigned to at least one data set that has a different period type\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEATDSWDPT\"},{\"name\":\"data_elements_aggregate_no_groups\",\"displayName\":\"Aggregate data elements not in any data element groups.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements not in any data element groups.\",\"introduction\":\"All data elements should be in a data element group. This allows users to find the data elements more easily in analysis\\n apps and also contributes to having more complete data element group sets.\\n Maintenance operations can also be made more efficient by applying\\n bulk settings (ex. sharing) to all data elements within a data element group.\",\"recommendation\":\"Data elements that are not in a data element group should be added to a relevant data element group. If the data elements are not needed, they should be deleted.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEANG\"},{\"name\":\"category_options_shared_within_category_combo\",\"displayName\":\"Category combinations with categories which share the same category options.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category combinations with categories which share the same category options.\",\"introduction\":\"As a general rule, category options should be reused where possible between categories. The exception to this rule however, is when you have a category combo with multiple categories, and within those categories, a category option is shared. As a simple example, lets say you have a category called \\\"Sex\\\" with options \\\"Male\\\"\\\", \\\"Female\\\" and \\\"Unknown\\\". There is also a second category called \\\"Age\\\" with options \\\"<15\\\", \\\"15+\\\", and \\\"Unknown\\\". A category combination called \\\"Age/Sex\\\" is then created with these two categories, which share the option \\\"Unknown\\\". This situation should be avoided, as it creates issues when analyzing data.\",\"recommendation\":\"The recommended approach to dealing with this situation is to create a new category combination, using two new categories. Using the example from the introduction, you should create two new category options called \\\"Unknown age\\\" and \\\"Unknown sex\\\". A new category combination can then be created with these new categories, which do not share category options. All data which is potentially associated with the old category combinations, would need to be reassigned to the new category option combinations. Any analytical objects which use the categories to be removed would also need to be updated.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"COSWCC\"},{\"name\":\"orgunits_null_island\",\"displayName\":\"Organisation units located within 100 km of Null Island (0,0).\",\"section\":\"Organisation units\",\"severity\":\"SEVERE\",\"description\":\"Organisation units located within 100 km of Null Island (0,0).\",\"introduction\":\"A common problem when importing coordinates is the inclusion of coordinates situated around the point of [Null Island](https://en.wikipedia.org/wiki/Null_Island). This is the point on the Earth's surface where the Prime Meridian and Equator intersect with a latitude of 0 and a longitude of 0. The point also happens to be situated currently in the middle of the ocean. This query identifies any points located within 100 km of the point having latitude and longitude equal to zero.\",\"recommendation\":\"Update the coordinates of the affected organization unit to the correct location.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"ONI\"},{\"name\":\"program_rule_actions_without_section\",\"displayName\":\"Program rules with actions lacking a program stage section\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists program rules connected to an action of a type that requires a section but is not yet connected to one\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRAWS\"},{\"name\":\"periods_3y_future\",\"displayName\":\"Periods which are more than three years in the future.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are more than three years in the future.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\nfar future. Different data entry clients may not properly validate for periods\\nwhich are in the future, and thus any periods in the future should be reviewed.\\nIn some cases, data may be valid for future dates, e.g. targets which are set for the\\nnext fiscal year.\",\"recommendation\":\"If any periods exist in the system in the future, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\\n\\nIn many cases, clients may mean to transmit\\ndata for January 2021, but due to data entry errors, January 2031 is selected. Thus,\\nany data in the far future should be investigated to ensure it does not result\\nfrom data entry errors.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"P3F\"},{\"name\":\"orgunits_trailing_spaces\",\"displayName\":\"Organisation units should not have trailing spaces.\",\"section\":\"Organisation units\",\"severity\":\"WARNING\",\"description\":\"Organisation units should not have trailing spaces.\",\"introduction\":\"Trailing spaces in organisation units are superfluous.\",\"recommendation\":\"If the number of affected organisation units is small, the easiest remedy is to correct them directly from the user interface. Another possible option would be to replace all of the trailing spaces using SQL.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OTS\"},{\"name\":\"validation_rule_groups_scarce\",\"displayName\":\"Validation rule should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Validation rule should have at least two members.\",\"introduction\":\"Generally validation rule groups should be composed of multiple validation rules.\",\"recommendation\":\"Considering removing groups which are empty or which have a single member. Alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"validationRuleGroups\",\"isSlow\":false,\"code\":\"VRGS\"},{\"name\":\"indicators_with_invalid_numerator\",\"displayName\":\"Indicators with invalid numerator\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators where the numerator expression is not valid\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWIN\"},{\"name\":\"categories_one_default_category_combo\",\"displayName\":\"Only one default category combo should exist\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Only one \\\"default\\\" category combo should exist\",\"introduction\":\"There should only exist one category combo with name and code \\\"default\\\".\",\"recommendation\":\"Only the category combo with UID \\\"bjDvmb4bfuf\\\" should be named \\\"default\\\" and have code \\\"default\\\". Either rename the conflicting category combo or move all references to category combo \\\"bjDvmb4bfuf\\\" and then remove the unused conflicting category combo.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CODCC\"},{\"name\":\"data_elements_without_data_sets\",\"displayName\":\"Data elements lacking data Sets\",\"section\":\"Data Elements\",\"severity\":\"WARNING\",\"description\":\"Lists all data elements that have no data sets\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEWDS\"},{\"name\":\"category_combos_unused\",\"displayName\":\"Category combinations not used by other metadata objects\",\"section\":\"Categories\",\"severity\":\"WARNING\",\"description\":\"Category combinations not used by other metadata objects\",\"introduction\":\"Category combinations which are unused in any datasets, data elements, programs or data approval workflows may be safe to delete. In some cases, category combinations may be created, but never actually used for anything. This may lead to situations where users and implementers are confused about which category combination should actually be used. In general, it should be safe to delete unused category combinations, except in situations where existing data has been associated with them.\",\"recommendation\":\"Check to see if any data is associated with the category combination before attempting to delete it. Category combinations which are not currently used in any metadata objects may still be valid for legacy reasons, but they should be reviewed to be sure they are still needed. Otherwise, it should be safe to remove them from the system.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CCU\"},{\"name\":\"category_option_groups_scarce\",\"displayName\":\"Category option groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Category option groups should have at least two members.\",\"introduction\":\"Generally, category option groups should be composed of at least two category options. There can however be legitimate cases when a single category option is part of a group, especially in cases where there is a direct mapping between age bands and category options.\",\"recommendation\":\"Considering removing groups with zero or one category options, or alternatively, add additional category options to the group to make it more useful.\",\"issuesIdType\":\"categoryOptionGroups\",\"isSlow\":false,\"code\":\"COGS\"},{\"name\":\"datasets_empty\",\"displayName\":\"Datasets with no data elements.\",\"section\":\"Data sets\",\"severity\":\"WARNING\",\"description\":\"Datasets with no data elements.\",\"introduction\":\"All datasets should have data elements assigned to them.\",\"recommendation\":\"Remove empty datasets, or alternatively, assign data elements to them.\",\"issuesIdType\":\"dataSets\",\"isSlow\":false,\"code\":\"DE\"},{\"name\":\"indicators_without_groups\",\"displayName\":\"Indicators lacking groups\",\"section\":\"Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all indicators that do not have at least one group\",\"issuesIdType\":\"indicators\",\"isSlow\":false,\"code\":\"IWG\"},{\"name\":\"orgunit_groups_scarce\",\"displayName\":\"Organisation unit groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Organisation unit groups should have at least two members.\",\"introduction\":\"Generally, organisation unit groups should be composed of multiple organisation units.\",\"recommendation\":\"Considering removing groups with zero or one organisation units, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OGS\"},{\"name\":\"program_rules_without_priority\",\"displayName\":\"Program rules lacking a priority setting\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rules with action type \\\"assign\\\" where the rule priority is not yet set\",\"recommendation\":\"Set a priority for the program rule(s)\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRWP\"},{\"name\":\"categories_unique_category_combo\",\"displayName\":\"Different category combinations should not have the exact same combination of categories.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Different category combinations should not have the exact same combination of categories.\",\"introduction\":\"Category combinations should be a unique combination of categories. If two or more category combinations contain the exact same set of categories, this would be considered to be duplicative and potentially confusing to users.\",\"recommendation\":\"One category combo is kept, all references are updated to use this combo and other combos are removed.\",\"issuesIdType\":\"categoryCombos\",\"isSlow\":false,\"code\":\"CUCC\"},{\"name\":\"indicator_group_sets_scarce\",\"displayName\":\"Indicator groups sets should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Indicator groups sets should have at least two members.\",\"introduction\":\"All indicator group set should be composed of at least two indicators groups.\",\"recommendation\":\"Considering removing indicator group sets with less than two indicator groups, or alternatively, add additional indicator groups to the indicator group set to make it more useful.\",\"issuesIdType\":\"indicatorGroupSets\",\"isSlow\":false,\"code\":\"IGSS\"},{\"name\":\"validation_rules_with_invalid_right_side_expression\",\"displayName\":\"Validation rules with invalid left side expression\",\"section\":\"Validation Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all validation rules that have a right side expression that is not valid\",\"issuesIdType\":\"validationRules\",\"isSlow\":false,\"code\":\"VRWIRSE\"},{\"name\":\"data_elements_aggregate_aggregation_operator\",\"displayName\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Non-numeric data elements which have an aggregation operator other than NONE.\",\"introduction\":\"Data elements which are not numeric (text, dates, etc) should have an aggregation operator set to NONE. Data elements which are able to be aggregated (numbers, integers, etc) should have an aggregation operator set to something other than NONE, most often SUM.\",\"recommendation\":\"Open the affected data elements in the Maintenance App and change their aggregation type to an appropriate type. Alternatively, these can be altered via the API.\",\"issuesIdType\":\"dataElements\",\"isSlow\":false,\"code\":\"DEAAO\"},{\"name\":\"org_unit_groups_without_group_sets\",\"displayName\":\"Organisation unit groups lacking group sets\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation unit groups that aren't member of at least one organisation unit group set\",\"issuesIdType\":\"organisationUnitGroups\",\"isSlow\":false,\"code\":\"OUGWGS\"},{\"name\":\"program_rule_variables_without_attribute\",\"displayName\":\"Program rule variables lacking an attribute\",\"section\":\"Program Rules\",\"severity\":\"WARNING\",\"description\":\"Lists all programs with rule variables requiring an attribute source but that is not yet linked to an attribute\",\"recommendation\":\"Assign an attribute to the variable in question or consider if the variable is not needed\",\"issuesIdType\":\"programs\",\"isSlow\":false,\"code\":\"PRVWA\"},{\"name\":\"program_indicator_groups_scarce\",\"displayName\":\"Program indicator groups should have at least two members.\",\"section\":\"Group size\",\"severity\":\"WARNING\",\"description\":\"Program indicator groups should have at least two members.\",\"introduction\":\"Program indicator groups should generally be composed of two or more program indicators.\",\"recommendation\":\"Considering removing groups with a single member, or alternatively, add additional members to the group to make it more useful.\",\"issuesIdType\":\"programIndicatorGroups\",\"isSlow\":false,\"code\":\"PIGS\"},{\"name\":\"program_rules_no_expression\",\"displayName\":\"Program rules with no expression.\",\"section\":\"Program rules\",\"severity\":\"WARNING\",\"description\":\"Program rules with no expression.\",\"introduction\":\"All program rules should have an expression. Expressions are used by program rules to determine when they should be triggered. Program rules with no expression have no purpose.\",\"recommendation\":\"Using the DHIS2 user interface, assign an expression to each of the program rules which is missing one. Otherwise, if it is safe to delete the program rule with no expression, it is recommended to remove it.\",\"issuesIdType\":\"programRules\",\"isSlow\":false,\"code\":\"PRNE\"},{\"name\":\"data_elements_aggregate_no_data\",\"displayName\":\"Aggregate data elements with NO data values.\",\"section\":\"Data elements (aggregate)\",\"severity\":\"WARNING\",\"description\":\"Aggregate data elements with NO data values.\",\"introduction\":\"Data elements should generally always be associated with data values. If data elements exist in a data set which is active, but there are no data values associated with them, they may not be part of the data entry screens. Alternatively, the data element may have been added but never been associated with a dataset.\",\"recommendation\":\"Consider removing data elements with no data values.\",\"issuesIdType\":\"dataElements\",\"isSlow\":true,\"code\":\"DEAND\"},{\"name\":\"program_indicators_without_expression\",\"displayName\":\"Program indicators lacking an expression\",\"section\":\"Program Indicators\",\"severity\":\"WARNING\",\"description\":\"Lists all program indicators that have no expression set yet\",\"issuesIdType\":\"programIndicators\",\"isSlow\":false,\"code\":\"PIWE\"},{\"name\":\"periods_distant_past\",\"displayName\":\"Periods which are in the distant past.\",\"section\":\"Periods\",\"severity\":\"WARNING\",\"description\":\"Periods which are in the distant past.\",\"introduction\":\"Periods in DHIS2 are automatically generated by the system. As new data is entered\\ninto the system, new periods are automatically created. In some cases, periods\\nmay mistakenly be created when data is sent to DHIS2 for periods which are in the\\ndistant past. Different data entry clients may not properly validate for periods\\nwhich are in the distant past, and thus these periods should be triaged to ensure\\nthat data has not been entered against them by mistake.\",\"recommendation\":\"If any periods exist in the system in the distant past, you should review the raw data\\neither directly in the datavalue table, or alternatively though the pivot tables\\nto ensure that this data is correct.\",\"issuesIdType\":\"periods\",\"isSlow\":false,\"code\":\"PDP\"},{\"name\":\"org_units_being_orphaned\",\"displayName\":\"Orphaned organisation units\",\"section\":\"Organisation Units\",\"severity\":\"WARNING\",\"description\":\"Lists all organisation units that aren't level 1 units but that lack a parent so that they are not connected to the rest of the organisation tree\",\"recommendation\":\"Find (or create) and set the correct parent for the orphaned organisation unit(s). Eventually this is also caused by having set the wrong level.\",\"issuesIdType\":\"organisationUnits\",\"isSlow\":false,\"code\":\"OUBO\"},{\"name\":\"cocs_wrong_cardinality\",\"displayName\":\"Category option combinations with incorrect cardinality.\",\"section\":\"Categories\",\"severity\":\"SEVERE\",\"description\":\"Category option combinations with incorrect cardinality.\",\"introduction\":\"All category option combinations should have exactly the same number of category option associations as the number of categories in the category combination. If there are two categories in a category combination, then every category option combination should have exactly two category options.\\nCategory option combinations with the incorrect cardinality are usually the result of a category combination having been created, and then modified later. Suppose that two categories are used to create a category combination. Each category option combination of this category combo will have two category options. If an additional category is added to the category combination later, new category option combinations with three category options will be created and associated with this category combo. The original category option combinations would be considered to be invalid.\",\"recommendation\":\"Category option combinations which have an incorrect cardinality will be ignored by the DHIS2 analytics system and should be removed.\",\"issuesIdType\":\"categoryOptionCombos\",\"isSlow\":false,\"code\":\"CWC\"},{\"name\":\"dashboards_not_viewed_one_year\",\"displayName\":\"Dashboards which have not been actively viewed in the past 12 months\",\"section\":\"Visualizations\",\"severity\":\"WARNING\",\"description\":\"Dashboards which have not been actively viewed in the past 12 months\",\"introduction\":\"Dashboards should be regularly viewed in the system. In many cases, users may create dashboards for temporary purposes and then never delete them. This can eventually lead to a lack of tidiness in the system. This can lead to useful dashboards being difficult to find. This check identifies any dashboards which have not been viewed in the past year.\",\"recommendation\":\"Unused dashboards can be deleted in the entirety from the main dashboard app by clicking on the \\\"Edit\\\" button and choosing \\\"Delete\\\". Note that this process cannot be undone! Another option would be to alter the sharing of the dashboard so that it is not visible to any user.\",\"issuesIdType\":\"dashboards\",\"isSlow\":false,\"code\":\"DNVOY\"}]", - "responseSize": 66022, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - } -] diff --git a/cypress/fixtures/network/40/users_that_are_not_authorized_should_be_denied_access.json b/cypress/fixtures/network/40/users_that_are_not_authorized_should_be_denied_access.json deleted file mode 100644 index 004341b62..000000000 --- a/cypress/fixtures/network/40/users_that_are_not_authorized_should_be_denied_access.json +++ /dev/null @@ -1,36 +0,0 @@ -[ - { - "path": "/api/40/systemSettings/helpPageLink", - "featureName": "Users that are not authorized should be denied access", - "static": false, - "count": 1, - "nonDeterministic": false, - "method": "GET", - "requestBody": "", - "requestHeaders": { - "host": "localhost:8080", - "proxy-connection": "keep-alive", - "accept": "application/json", - "origin": "http://localhost:3000", - "sec-fetch-site": "same-site", - "sec-fetch-mode": "cors" - }, - "statusCode": 200, - "responseBody": "{\"helpPageLink\":\"https://dhis2.github.io/dhis2-docs/master/en/user/html/dhis2_user_manual_en.html\"}", - "responseSize": 99, - "responseHeaders": { - "server": "nginx/1.23.3", - "content-type": "application/json;charset=UTF-8", - "transfer-encoding": "chunked", - "connection": "keep-alive", - "access-control-allow-credentials": "true", - "access-control-allow-origin": "http://localhost:3000", - "vary": "Origin", - "access-control-expose-headers": "ETag, Location", - "cache-control": "no-cache, private", - "x-content-type-options": "nosniff", - "x-xss-protection": "1; mode=block", - "x-frame-options": "SAMEORIGIN" - } - } -] diff --git a/cypress/integration/list-route/job-toggle/index.js b/cypress/integration/list-route/job-toggle/index.js deleted file mode 100644 index 9ac37f4f9..000000000 --- a/cypress/integration/list-route/job-toggle/index.js +++ /dev/null @@ -1,62 +0,0 @@ -import { Given, When, Then } from 'cypress-cucumber-preprocessor/steps' - -/** - * Currently cypress can't override earlier defined intercepts. This - * is a known bug. The code below is a temporary fix that can be - * removed once cypress has resolved the issue. - * - * https://github.com/cypress-io/cypress/issues/9302 - */ - -Given('a disabled user job exists', () => { - const responses = [] - - cy.fixture('list-route/disabled-user-job').then((fixture) => { - responses.push(fixture) - }) - - cy.fixture('list-route/enabled-user-job').then((fixture) => { - responses.push(fixture) - }) - - cy.intercept({ pathname: /jobConfigurations$/ }, (req) => { - const fixture = responses.shift() - req.reply(200, fixture) - }) -}) - -Given('an enabled user job exists', () => { - const responses = [] - - cy.fixture('list-route/enabled-user-job').then((fixture) => { - responses.push(fixture) - }) - - cy.fixture('list-route/disabled-user-job').then((fixture) => { - responses.push(fixture) - }) - - cy.intercept({ pathname: /jobConfigurations$/ }, (req) => { - const fixture = responses.shift() - req.reply(200, fixture) - }) -}) - -Given('the user navigated to the job list page', () => { - cy.visit('/') - cy.findByRole('heading', { name: 'Scheduled jobs' }).should('exist') -}) - -Given('the job toggle switch is off', () => { - cy.findByRole('switch', { name: 'Toggle job' }).should('not.be.checked') -}) - -When('the user clicks the job toggle switch', () => { - cy.intercept({ pathname: /lnWRZN67iDU$/ }, { statusCode: 204 }) - - cy.findByRole('switch', { name: 'Toggle job' }).click() -}) - -Then('the job toggle switch is on', () => { - cy.findByRole('switch', { name: 'Toggle job' }).should('be.checked') -}) diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js deleted file mode 100644 index 62eef0a1e..000000000 --- a/cypress/plugins/index.js +++ /dev/null @@ -1,11 +0,0 @@ -const { - networkShim, - chromeAllowXSiteCookies, - cucumberPreprocessor, -} = require('@dhis2/cypress-plugins') - -module.exports = (on, config) => { - networkShim(on) - chromeAllowXSiteCookies(on, config) - cucumberPreprocessor(on, config) -} diff --git a/cypress/support/e2e.js b/cypress/support/e2e.js new file mode 100644 index 000000000..6b465da79 --- /dev/null +++ b/cypress/support/e2e.js @@ -0,0 +1,45 @@ +/* global Cypress */ +import '@testing-library/cypress/add-commands' + +/** + * Custom login command, can be used to login or switch between sessions. + * Will cache and restore cookies, localStorage, and sessionStorage. See: + * https://docs.cypress.io/api/commands/session + */ +Cypress.Commands.add('login', (user) => { + cy.session( + user, + () => { + cy.visit('/') + + // Ensure we're on the login page + cy.findByRole('heading', { name: 'Please sign in' }).should('exist') + + // Enter credentials + cy.get('input#server').type(user.server) + cy.get('input#j_username').type(user.name) + cy.get('input#j_password').type(user.password) + cy.findByRole('button', { name: 'Sign in' }).click() + + // Wait until main route has been loaded + cy.findByRole('heading', { name: 'Scheduled jobs' }).should('exist') + }, + { + validate: () => { + cy.request(`${user.server}/api/me`).then((response) => { + expect(response.status).to.eq(200) + expect(response.body.username).to.eq(user.name) + }) + }, + } + ) +}) + +// Log in before each test, if not already logged in +beforeEach(() => { + cy.login({ + name: Cypress.env('LOGIN_NAME'), + password: Cypress.env('LOGIN_PASSWORD'), + server: Cypress.env('LOGIN_SERVER'), + }) +}) diff --git a/cypress/support/index.js b/cypress/support/index.js deleted file mode 100644 index 62beaefca..000000000 --- a/cypress/support/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import '@testing-library/cypress/add-commands' -import { enableAutoLogin, enableNetworkShim } from '@dhis2/cypress-commands' - -enableAutoLogin() -enableNetworkShim() diff --git a/i18n/en.pot b/i18n/en.pot index 5bd1bf149..3668840b9 100644 --- a/i18n/en.pot +++ b/i18n/en.pot @@ -5,8 +5,8 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -"POT-Creation-Date: 2023-02-20T11:19:50.904Z\n" -"PO-Revision-Date: 2023-02-20T11:19:50.904Z\n" +"POT-Creation-Date: 2023-04-18T13:02:25.022Z\n" +"PO-Revision-Date: 2023-04-18T13:02:25.022Z\n" msgid "Not authorized" msgstr "Not authorized" @@ -45,6 +45,9 @@ msgstr "CRON Expression" msgid "Please select checks to run." msgstr "Please select checks to run." +msgid "Something went wrong whilst fetching options" +msgstr "Something went wrong whilst fetching options" + msgid "Checks to run" msgstr "Checks to run" @@ -75,9 +78,24 @@ msgstr "Name" msgid "Job type" msgstr "Job type" +msgid "Loading job types" +msgstr "Loading job types" + +msgid "Something went wrong whilst loading job types" +msgstr "Something went wrong whilst loading job types" + +msgid "Loading options" +msgstr "Loading options" + +msgid "Something went wrong whilst loading options" +msgstr "Something went wrong whilst loading options" + msgid "No options available" msgstr "No options available" +msgid "There was a problem fetching parameters" +msgstr "There was a problem fetching parameters" + msgid "Parameters" msgstr "Parameters" @@ -273,9 +291,21 @@ msgstr "Scheduled" msgid "Stopped" msgstr "Stopped" +msgid "Account expiry alert" +msgstr "Account expiry alert" + +msgid "Exchange aggregate data" +msgstr "Exchange aggregate data" + msgid "Analytics table" msgstr "Analytics table" +msgid "Analyticstable update" +msgstr "Analyticstable update" + +msgid "Complete data set registration import" +msgstr "Complete data set registration import" + msgid "Continuous analytics table" msgstr "Continuous analytics table" @@ -294,21 +324,60 @@ msgstr "Data statistics" msgid "Data synchronization" msgstr "Data synchronization" +msgid "Datavalue import" +msgstr "Datavalue import" + +msgid "Datavalue import internal" +msgstr "Datavalue import internal" + +msgid "Disable inactive users" +msgstr "Disable inactive users" + +msgid "Enrollment import" +msgstr "Enrollment import" + +msgid "Event import" +msgstr "Event import" + msgid "Event programs data sync" msgstr "Event programs data sync" msgid "File resource clean up" msgstr "File resource clean up" +msgid "GEOJSON import" +msgstr "GEOJSON import" + +msgid "GML import" +msgstr "GML import" + +msgid "Image processing" +msgstr "Image processing" + +msgid "Leader election" +msgstr "Leader election" + +msgid "Leader renewal" +msgstr "Leader renewal" + +msgid "Metadata import" +msgstr "Metadata import" + msgid "Metadata synchronization" msgstr "Metadata synchronization" +msgid "Mock" +msgstr "Mock" + msgid "Monitoring" msgstr "Monitoring" msgid "Predictor" msgstr "Predictor" +msgid "Program data sync" +msgstr "Program data sync" + msgid "Program notifications" msgstr "Program notifications" @@ -318,24 +387,42 @@ msgstr "Push analysis" msgid "Remove expired reserved values" msgstr "Remove expired reserved values" +msgid "Remove used or expired reserved values" +msgstr "Remove used or expired reserved values" + msgid "Resource table" msgstr "Resource table" msgid "Send scheduled message" msgstr "Send scheduled message" +msgid "SMS send" +msgstr "SMS send" + +msgid "System version update check" +msgstr "System version update check" + +msgid "TEI import" +msgstr "TEI import" + +msgid "Tracker import job" +msgstr "Tracker import job" + +msgid "Tracker import notification job" +msgstr "Tracker import notification job" + +msgid "Tracker import rule engine job" +msgstr "Tracker import rule engine job" + msgid "Tracker programs data sync" msgstr "Tracker programs data sync" +msgid "Tracker search optimization" +msgstr "Tracker search optimization" + msgid "Validation results notification" msgstr "Validation results notification" -msgid "Disable inactive users" -msgstr "Disable inactive users" - -msgid "Exchange aggregate data" -msgstr "Exchange aggregate data" - msgid "A CRON expression is required" msgstr "A CRON expression is required" diff --git a/package.json b/package.json index a25b68b33..da7f2ccb9 100644 --- a/package.json +++ b/package.json @@ -11,9 +11,8 @@ "lint:css": "stylelint './src/**/*.css' && prettier './src/**/*.css' --check", "format": "d2-style apply && yarn format:css", "format:css": "prettier './src/**/*.css' --write", - "cypress:capture": "start-server-and-test 'yarn start:nobrowser' http://localhost:3000 'yarn cypress run --env networkMode=capture'", - "cypress:stub": "start-server-and-test 'yarn start:nobrowser' http://localhost:3000 'yarn cypress run --env networkMode=stub'", - "cypress:live": "start-server-and-test 'yarn start:nobrowser' http://localhost:3000 'yarn cypress open --env networkMode=live'" + "cypress:open": "cypress open", + "cypress": "start-server-and-test 'start:nobrowser' 'http://localhost:3000' 'cypress:open'" }, "dependencies": { "@dhis2/app-runtime": "^3.2.0", @@ -32,15 +31,13 @@ "styled-jsx": "^4.0.1" }, "devDependencies": { + "@badeball/cypress-cucumber-preprocessor": "^15.1.4", + "@cypress/webpack-preprocessor": "^5.17.0", "@dhis2/cli-app-scripts": "^8.0.1", "@dhis2/cli-style": "^10.4.1", - "@dhis2/cli-utils-cypress": "^9.0.2", - "@dhis2/cypress-commands": "^9.0.2", - "@dhis2/cypress-plugins": "^9.0.2", "@testing-library/cypress": "^7.0.6", "@testing-library/react-hooks": "^7.0.0", - "cypress": "^9.5.1", - "cypress-cucumber-preprocessor": "^4.3.1", + "cypress": "^12.7.0", "enzyme": "^3.10.0", "enzyme-adapter-react-16": "^1.15.6", "eslint-plugin-compat": "^3.9.0", diff --git a/src/components/AuthWall/AuthWall.js b/src/components/AuthWall/AuthWall.js index fc73fc79f..238bc106c 100644 --- a/src/components/AuthWall/AuthWall.js +++ b/src/components/AuthWall/AuthWall.js @@ -1,8 +1,9 @@ import React from 'react' import { PropTypes } from '@dhis2/prop-types' -import { CircularLoader, Layer, CenteredContent, NoticeBox } from '@dhis2/ui' +import { NoticeBox } from '@dhis2/ui' import i18n from '@dhis2/d2-i18n' import { useDataQuery } from '@dhis2/app-runtime' +import { Spinner } from '../Spinner' import { getAuthorized } from './selectors' import styles from './AuthWall.module.css' @@ -16,13 +17,7 @@ const AuthWall = ({ children }) => { const { loading, error, data } = useDataQuery(query) if (loading) { - return ( - - - - - - ) + return } if (error) { diff --git a/src/components/FormFields/DataIntegrityChecksField.js b/src/components/FormFields/DataIntegrityChecksField.js index 8d3898072..c1ac0037a 100644 --- a/src/components/FormFields/DataIntegrityChecksField.js +++ b/src/components/FormFields/DataIntegrityChecksField.js @@ -3,6 +3,8 @@ import { PropTypes } from '@dhis2/prop-types' import i18n from '@dhis2/d2-i18n' import { FieldGroup, + CircularLoader, + NoticeBox, Radio, Transfer, TransferOption, @@ -11,7 +13,7 @@ import { Help, } from '@dhis2/ui' import cx from 'classnames' -import { hooks } from '../Store' +import { useParameterOption } from '../../hooks/parameter-options' import { severityMap } from '../../services/server-translations/dataIntegrityChecks' import styles from './DataIntegrityChecksField.module.css' @@ -30,7 +32,7 @@ const VALIDATOR = (value) => { } const DataIntegrityChecksField = ({ label, name }) => { - const options = hooks.useParameterOptions('dataIntegrityChecks') + const { loading, error, data } = useParameterOption('dataIntegrityChecks') const { input: { value, onChange }, } = useField(name) @@ -38,7 +40,20 @@ const DataIntegrityChecksField = ({ label, name }) => { const hasValue = !!value && value.length > 0 const [runSelected, setRunSelected] = useState(hasValue) - const translatedOptions = options + if (loading) { + return + } + + if (error) { + return ( + + ) + } + + const translatedOptions = data .map((option) => ({ ...option, value: option.name, diff --git a/src/components/FormFields/JobTypeField.js b/src/components/FormFields/JobTypeField.js index 46fd93c9e..b926d2ea1 100644 --- a/src/components/FormFields/JobTypeField.js +++ b/src/components/FormFields/JobTypeField.js @@ -2,13 +2,14 @@ import React from 'react' import { ReactFinalForm, SingleSelectFieldFF, + SingleSelectField, composeValidators, hasValue, string, } from '@dhis2/ui' import i18n from '@dhis2/d2-i18n' -import { hooks } from '../Store' import { jobTypesMap } from '../../services/server-translations' +import { useJobTypes } from '../../hooks/job-types' const { Field } = ReactFinalForm @@ -17,8 +18,31 @@ export const FIELD_NAME = 'jobType' const VALIDATOR = composeValidators(string, hasValue) const JobTypeField = () => { - const jobTypes = hooks.useAllJobTypes() - const options = jobTypes + const { loading, error, data } = useJobTypes() + const label = i18n.t('Job type') + const disabledProps = { disabled: true, label } + + if (loading) { + return ( + + ) + } + + if (error) { + return ( + + ) + } + + const options = data .map(({ jobType }) => ({ value: jobType, label: jobTypesMap[jobType], @@ -32,7 +56,7 @@ const JobTypeField = () => { validate={VALIDATOR} component={SingleSelectFieldFF} options={options} - label={i18n.t('Job type')} + label={label} required /> ) diff --git a/src/components/FormFields/JobTypeField.test.js b/src/components/FormFields/JobTypeField.test.js index daf55c469..5b856c093 100644 --- a/src/components/FormFields/JobTypeField.test.js +++ b/src/components/FormFields/JobTypeField.test.js @@ -1,27 +1,35 @@ import React from 'react' import { mount } from 'enzyme' import { ReactFinalForm } from '@dhis2/ui' -import { StoreContext } from '../Store' +import { useJobTypes } from '../../hooks/job-types' import JobTypeField from './JobTypeField' const { Form } = ReactFinalForm +jest.mock('../../hooks/job-types', () => ({ + useJobTypes: jest.fn(), +})) + +afterEach(() => { + jest.resetAllMocks() +}) + describe('', () => { it('shows an error that the field is required on empty values', () => { - const store = { - jobTypes: [{ jobType: 'ANALYTICS_TABLE' }], - } + useJobTypes.mockImplementation(() => ({ + loading: false, + error: undefined, + data: [{ jobType: 'ANALYTICS_TABLE' }], + })) const wrapper = mount( - -
{}}> - {({ handleSubmit }) => ( - - - - )} - -
+
{}}> + {({ handleSubmit }) => ( + + + + )} + ) // Trigger validation diff --git a/src/components/FormFields/LabeledOptionsField.js b/src/components/FormFields/LabeledOptionsField.js index 1e39a46e9..451695631 100644 --- a/src/components/FormFields/LabeledOptionsField.js +++ b/src/components/FormFields/LabeledOptionsField.js @@ -2,25 +2,43 @@ import React from 'react' import { PropTypes } from '@dhis2/prop-types' import { MultiSelectFieldFF, ReactFinalForm, MultiSelectField } from '@dhis2/ui' import i18n from '@dhis2/d2-i18n' -import { hooks } from '../Store' +import { useParameterOption } from '../../hooks/parameter-options' const { Field } = ReactFinalForm // A labeled options field has options that have both an id and a label. const LabeledOptionsField = ({ label, name, parameterName }) => { - const options = hooks.useParameterOptions(parameterName) + const { loading, error, data } = useParameterOption(parameterName) + const disabledProps = { disabled: true, label } - if (options.length === 0) { + if (loading) { return ( + ) + } + + if (error) { + return ( + + ) + } + + if (data.length === 0) { + return ( + ) } - const labeledOptions = options.map(({ id, displayName }) => ({ + const labeledOptions = data.map(({ id, displayName }) => ({ value: id, label: displayName, })) diff --git a/src/components/FormFields/LabeledOptionsField.test.js b/src/components/FormFields/LabeledOptionsField.test.js index e3acf4c07..1b92ed4e0 100644 --- a/src/components/FormFields/LabeledOptionsField.test.js +++ b/src/components/FormFields/LabeledOptionsField.test.js @@ -1,33 +1,39 @@ import React from 'react' import { mount } from 'enzyme' import { ReactFinalForm } from '@dhis2/ui' -import { StoreContext } from '../Store' +import { useParameterOption } from '../../hooks/parameter-options' import LabeledOptionsField from './LabeledOptionsField' const { Form } = ReactFinalForm +jest.mock('../../hooks/parameter-options', () => ({ + useParameterOption: jest.fn(), +})) + +afterEach(() => { + jest.resetAllMocks() +}) + describe('', () => { it('shows a message when there are no options', () => { - const store = { - parameterOptions: { - parameterName: [], - }, - } + useParameterOption.mockImplementation(() => ({ + loading: false, + error: undefined, + data: [], + })) const props = { label: 'label', name: 'name', parameterName: 'parameterName', } const wrapper = mount( - -
{}}> - {() => ( - - - - )} - -
+
{}}> + {() => ( + + + + )} + ) const actual = wrapper @@ -40,26 +46,24 @@ describe('', () => { }) it('renders the field when there are options', () => { - const store = { - parameterOptions: { - parameterName: [{ id: 'id', displayName: 'displayName' }], - }, - } + useParameterOption.mockImplementation(() => ({ + loading: false, + error: undefined, + data: [{ id: 'id', displayName: 'displayName' }], + })) const props = { label: 'label', name: 'fieldName', parameterName: 'parameterName', } const wrapper = mount( - -
{}}> - {() => ( - - - - )} - -
+
{}}> + {() => ( + + + + )} + ) const actual = wrapper.find('LabeledOptionsField') diff --git a/src/components/FormFields/ParameterFields.js b/src/components/FormFields/ParameterFields.js index e1266f82e..c86ce0208 100644 --- a/src/components/FormFields/ParameterFields.js +++ b/src/components/FormFields/ParameterFields.js @@ -1,8 +1,14 @@ import React from 'react' import i18n from '@dhis2/d2-i18n' import { PropTypes } from '@dhis2/prop-types' -import { ReactFinalForm, InputFieldFF, Box, SwitchFieldFF } from '@dhis2/ui' -import { hooks } from '../Store' +import { + NoticeBox, + ReactFinalForm, + InputFieldFF, + Box, + SwitchFieldFF, +} from '@dhis2/ui' +import { useJobTypeParameters } from '../../hooks/job-types' import { formatToString } from './formatters' import SkipTableTypesField from './SkipTableTypesField' import LabeledOptionsField from './LabeledOptionsField' @@ -39,14 +45,27 @@ const getCustomComponent = (jobType, parameterName) => { // Renders all parameters for a given jobtype const ParameterFields = ({ jobType }) => { - const parameters = hooks.useJobTypeParameters(jobType) + const { loading, error, data } = useJobTypeParameters(jobType) - if (parameters.length === 0) { + if (loading) { + return null + } + + if (error) { + return ( + + ) + } + + if (data.length === 0) { return null } // Map all parameters to the appropriate field types - const parameterComponents = parameters.map( + const parameterComponents = data.map( ({ fieldName, name, klass, ...rest }) => { const defaultProps = { label: fieldName, diff --git a/src/components/FormFields/ParameterFields.test.js b/src/components/FormFields/ParameterFields.test.js index ab4f8170d..ef2f2047f 100644 --- a/src/components/FormFields/ParameterFields.test.js +++ b/src/components/FormFields/ParameterFields.test.js @@ -1,27 +1,39 @@ import React from 'react' import { mount } from 'enzyme' import { ReactFinalForm } from '@dhis2/ui' -import { StoreContext } from '../Store' +import { useJobTypeParameters } from '../../hooks/job-types' +import { useParameterOption } from '../../hooks/parameter-options' import ParameterFields from './ParameterFields' const { Form } = ReactFinalForm +jest.mock('../../hooks/job-types', () => ({ + useJobTypeParameters: jest.fn(), +})) + +jest.mock('../../hooks/parameter-options', () => ({ + useParameterOption: jest.fn(), +})) + describe('', () => { it('returns null if there are no parameters', () => { - const store = { jobTypes: [{ jobType: 'jobType' }] } + useJobTypeParameters.mockImplementation(() => ({ + loading: false, + error: undefined, + data: [], + })) const props = { jobType: 'jobType', } + const wrapper = mount( - -
{}}> - {() => ( - - - - )} - -
+
{}}> + {() => ( + + + + )} + ) const children = wrapper.find('form').children() @@ -30,36 +42,33 @@ describe('', () => { }) it('returns the expected component for skipTableTypes', () => { - const store = { - jobTypes: [ + useParameterOption.mockImplementation(() => ({ + loading: false, + error: undefined, + data: [], + })) + useJobTypeParameters.mockImplementation(() => ({ + loading: false, + error: undefined, + data: [ { - jobType: 'jobType', - jobParameters: [ - { - fieldName: 'fieldName', - name: 'skipTableTypes', - klass: 'klass', - }, - ], + fieldName: 'fieldName', + name: 'skipTableTypes', + klass: 'klass', }, ], - parameterOptions: { - skipTableTypes: [], - }, - } + })) const props = { - jobType: 'jobType', + jobType: 'skipTableTypes', } const wrapper = mount( - -
{}}> - {() => ( - - - - )} - -
+
{}}> + {() => ( + + + + )} + ) const component = wrapper.find('SkipTableTypesField') @@ -68,33 +77,28 @@ describe('', () => { }) it('returns the expected component for java.lang.String', () => { - const store = { - jobTypes: [ + useJobTypeParameters.mockImplementation(() => ({ + loading: false, + error: undefined, + data: [ { - jobType: 'jobType', - jobParameters: [ - { - fieldName: 'fieldName', - name: 'name', - klass: 'java.lang.String', - }, - ], + fieldName: 'fieldName', + name: 'name', + klass: 'java.lang.String', }, ], - } + })) const props = { jobType: 'jobType', } const wrapper = mount( - -
{}}> - {() => ( - - - - )} - -
+
{}}> + {() => ( + + + + )} + ) const component = wrapper.find('InputFieldFF') @@ -103,33 +107,28 @@ describe('', () => { }) it('returns the expected component for java.lang.Boolean', () => { - const store = { - jobTypes: [ + useJobTypeParameters.mockImplementation(() => ({ + loading: false, + error: undefined, + data: [ { - jobType: 'jobType', - jobParameters: [ - { - fieldName: 'fieldName', - name: 'name', - klass: 'java.lang.Boolean', - }, - ], + fieldName: 'fieldName', + name: 'name', + klass: 'java.lang.Boolean', }, ], - } + })) const props = { jobType: 'jobType', } const wrapper = mount( - -
{}}> - {() => ( - - - - )} - -
+
{}}> + {() => ( + + + + )} + ) const component = wrapper.find('SwitchFieldFF') @@ -138,33 +137,28 @@ describe('', () => { }) it('returns the expected component for java.lang.Integer', () => { - const store = { - jobTypes: [ + useJobTypeParameters.mockImplementation(() => ({ + loading: false, + error: undefined, + data: [ { - jobType: 'jobType', - jobParameters: [ - { - fieldName: 'fieldName', - name: 'name', - klass: 'java.lang.Integer', - }, - ], + fieldName: 'fieldName', + name: 'name', + klass: 'java.lang.Integer', }, ], - } + })) const props = { jobType: 'jobType', } const wrapper = mount( - -
{}}> - {() => ( - - - - )} - -
+
{}}> + {() => ( + + + + )} + ) const component = wrapper.find('InputFieldFF') @@ -173,36 +167,28 @@ describe('', () => { }) it('returns the expected component for java.util.List', () => { - const store = { - jobTypes: [ + useJobTypeParameters.mockImplementation(() => ({ + loading: false, + error: undefined, + data: [ { - jobType: 'jobType', - jobParameters: [ - { - fieldName: 'fieldName', - name: 'parameterName', - klass: 'java.util.List', - }, - ], + fieldName: 'fieldName', + name: 'parameterName', + klass: 'java.util.List', }, ], - parameterOptions: { - parameterName: [{ id: 'id', displayName: 'displayName' }], - }, - } + })) const props = { jobType: 'jobType', } const wrapper = mount( - -
{}}> - {() => ( - - - - )} - -
+
{}}> + {() => ( + + + + )} + ) const component = wrapper.find('LabeledOptionsField') diff --git a/src/components/FormFields/ScheduleField.js b/src/components/FormFields/ScheduleField.js index 6d6ebd835..0b2dabb80 100644 --- a/src/components/FormFields/ScheduleField.js +++ b/src/components/FormFields/ScheduleField.js @@ -1,12 +1,28 @@ import React from 'react' +import i18n from '@dhis2/d2-i18n' +import { NoticeBox } from '@dhis2/ui' import { PropTypes } from '@dhis2/prop-types' -import { hooks } from '../Store' +import { useJobType } from '../../hooks/job-types' import CronField from './CronField' import DelayField from './DelayField' const ScheduleField = ({ jobType }) => { - const currentJobType = hooks.useJobType(jobType) - const schedulingType = currentJobType.schedulingType + const { loading, error, data } = useJobType(jobType) + + if (loading) { + return null + } + + if (error) { + return ( + + ) + } + + const { schedulingType } = data switch (schedulingType) { case 'CRON': diff --git a/src/components/FormFields/ScheduleField.test.js b/src/components/FormFields/ScheduleField.test.js index 1d42d660c..bd561aa5e 100644 --- a/src/components/FormFields/ScheduleField.test.js +++ b/src/components/FormFields/ScheduleField.test.js @@ -1,14 +1,14 @@ import React from 'react' import { mount } from 'enzyme' import { ReactFinalForm } from '@dhis2/ui' -import { StoreContext } from '../Store' +import { useJobType } from '../../hooks/job-types' import ScheduleField from './ScheduleField' const { Form } = ReactFinalForm -// Mock these components to simplify this test -jest.mock('./CronField', () => () =>
CronField
) -jest.mock('./DelayField', () => () =>
DelayField
) +jest.mock('../../hooks/job-types', () => ({ + useJobType: jest.fn(), +})) afterEach(() => { jest.resetAllMocks() @@ -19,84 +19,71 @@ describe('', () => { const props = { jobType: 'one', } - const store = { - jobTypes: [ - { - jobType: 'one', - schedulingType: 'CRON', - }, - ], - } + useJobType.mockImplementation(() => ({ + loading: false, + error: undefined, + data: { + schedulingType: 'CRON', + }, + })) const wrapper = mount( - -
{}}> - {() => ( - - - - )} - -
+
{}}> + {() => ( + + + + )} + ) - const actual = wrapper.text() - - expect(actual).toEqual(expect.stringContaining('CronField')) - expect(actual).toEqual(expect.not.stringContaining('DelayField')) + const component = wrapper.find('CronField') + expect(component).toHaveLength(1) }) it('renders the delay field if the scheduling type is FIXED_DELAY', () => { const props = { jobType: 'one', } - const store = { - jobTypes: [ - { - jobType: 'one', - schedulingType: 'FIXED_DELAY', - }, - ], - } + useJobType.mockImplementation(() => ({ + loading: false, + error: undefined, + data: { + schedulingType: 'FIXED_DELAY', + }, + })) const wrapper = mount( - -
{}}> - {() => ( - - - - )} - -
+
{}}> + {() => ( + + + + )} + ) - const actual = wrapper.text() - - expect(actual).toEqual(expect.stringContaining('DelayField')) - expect(actual).toEqual(expect.not.stringContaining('CronField')) + const component = wrapper.find('DelayField') + expect(component).toHaveLength(1) }) it('returns null for unrecognised scheduling types', () => { const props = { jobType: 'one', } - const store = { - jobTypes: [ - { - jobType: 'one', - schedulingType: 'RANDOM', - }, - ], - } + useJobType.mockImplementation(() => ({ + loading: false, + error: undefined, + data: { + schedulingType: 'DOES_NOT_EXIST', + }, + })) const wrapper = mount( - -
{}}> - {() => ( - - - - )} - -
+
{}}> + {() => ( + + + + )} + ) const children = wrapper.find('form').children() diff --git a/src/components/FormFields/SkipTableTypesField.js b/src/components/FormFields/SkipTableTypesField.js index 8d93823ed..3982d3502 100644 --- a/src/components/FormFields/SkipTableTypesField.js +++ b/src/components/FormFields/SkipTableTypesField.js @@ -2,25 +2,43 @@ import React from 'react' import { PropTypes } from '@dhis2/prop-types' import i18n from '@dhis2/d2-i18n' import { MultiSelectField, ReactFinalForm, MultiSelectFieldFF } from '@dhis2/ui' -import { hooks } from '../Store' import { analyticsTableTypes } from '../../services/server-translations' +import { useParameterOption } from '../../hooks/parameter-options' const { Field } = ReactFinalForm const SkipTableTypesField = ({ label, name, parameterName }) => { - const options = hooks.useParameterOptions(parameterName) + const { loading, error, data } = useParameterOption(parameterName) + const disabledProps = { disabled: true, label } - if (options.length === 0) { + if (loading) { return ( + ) + } + + if (error) { + return ( + + ) + } + + if (data.length === 0) { + return ( + ) } - const translatedOptions = options.map((option) => ({ + const translatedOptions = data.map((option) => ({ value: option, label: analyticsTableTypes[option] || option, })) diff --git a/src/components/FormFields/SkipTableTypesField.test.js b/src/components/FormFields/SkipTableTypesField.test.js index eb3fa2be1..751fca68a 100644 --- a/src/components/FormFields/SkipTableTypesField.test.js +++ b/src/components/FormFields/SkipTableTypesField.test.js @@ -1,18 +1,26 @@ import React from 'react' import { mount } from 'enzyme' import { ReactFinalForm } from '@dhis2/ui' -import { StoreContext } from '../Store' +import { useParameterOption } from '../../hooks/parameter-options' import SkipTableTypesField from './SkipTableTypesField' const { Form } = ReactFinalForm +jest.mock('../../hooks/parameter-options', () => ({ + useParameterOption: jest.fn(), +})) + +afterEach(() => { + jest.resetAllMocks() +}) + describe('', () => { it('shows a message when there are no options', () => { - const store = { - parameterOptions: { - parameterName: [], - }, - } + useParameterOption.mockImplementation(() => ({ + loading: false, + error: undefined, + data: [], + })) const props = { label: 'label', name: 'name', @@ -20,15 +28,13 @@ describe('', () => { } const wrapper = mount( - -
{}}> - {() => ( - - - - )} - -
+
{}}> + {() => ( + + + + )} + ) const actual = wrapper @@ -41,26 +47,24 @@ describe('', () => { }) it('renders the field when there are options', () => { - const store = { - parameterOptions: { - parameterName: ['one', 'two'], - }, - } + useParameterOption.mockImplementation(() => ({ + loading: false, + error: undefined, + data: ['one', 'two'], + })) const props = { label: 'label', name: 'fieldName', parameterName: 'parameterName', } const wrapper = mount( - -
{}}> - {() => ( - - - - )} - -
+
{}}> + {() => ( + + + + )} + ) const actual = wrapper.find('SkipTableTypesField') diff --git a/src/components/Forms/JobEditForm.js b/src/components/Forms/JobEditForm.js index c5a82e447..12151dd5b 100644 --- a/src/components/Forms/JobEditForm.js +++ b/src/components/Forms/JobEditForm.js @@ -18,7 +18,6 @@ const { useForm } = ReactFinalForm const JobEditForm = ({ id, - refetchJobs, handleSubmit, pristine, submitting, @@ -89,7 +88,6 @@ const JobEditForm = ({ id={id} onSuccess={() => { history.push('/') - refetchJobs() }} /> @@ -109,7 +107,6 @@ JobEditForm.propTypes = { hasSubmitErrors: bool.isRequired, id: string.isRequired, pristine: bool.isRequired, - refetchJobs: func.isRequired, setIsPristine: func.isRequired, submitting: bool.isRequired, values: object.isRequired, diff --git a/src/components/Forms/JobEditFormContainer.js b/src/components/Forms/JobEditFormContainer.js index 2aa37dc3f..75c3facb9 100644 --- a/src/components/Forms/JobEditFormContainer.js +++ b/src/components/Forms/JobEditFormContainer.js @@ -3,7 +3,6 @@ import { PropTypes } from '@dhis2/prop-types' import { ReactFinalForm } from '@dhis2/ui' import { useParams } from 'react-router-dom' import { useUpdateJob } from '../../hooks/jobs' -import { hooks } from '../Store' import JobEditForm from './JobEditForm' const { Form } = ReactFinalForm @@ -22,11 +21,9 @@ const initialFields = [ 'name', ] -const JobEditFormContainer = ({ setIsPristine }) => { +const JobEditFormContainer = ({ job, setIsPristine }) => { const { id } = useParams() const [updateJob] = useUpdateJob({ id }) - const refetchJobs = hooks.useRefetchJobs() - const job = hooks.useJob(id) // Creating an object with just the values we want to use as initial values const initialValues = initialFields.reduce((filtered, key) => { @@ -46,15 +43,15 @@ const JobEditFormContainer = ({ setIsPristine }) => { setIsPristine={setIsPristine} initialValues={initialValues} id={id} - refetchJobs={refetchJobs} destroyOnUnregister /> ) } -const { func } = PropTypes +const { func, object } = PropTypes JobEditFormContainer.propTypes = { + job: object.isRequired, setIsPristine: func.isRequired, } diff --git a/src/components/Forms/JobEditFormContainer.test.js b/src/components/Forms/JobEditFormContainer.test.js index 25439f0ab..41f77d647 100644 --- a/src/components/Forms/JobEditFormContainer.test.js +++ b/src/components/Forms/JobEditFormContainer.test.js @@ -1,6 +1,5 @@ import React from 'react' import { shallow } from 'enzyme' -import { StoreContext } from '../Store' import JobEditFormContainer from './JobEditFormContainer' jest.mock('react-router-dom', () => ({ @@ -13,14 +12,8 @@ afterEach(() => { describe('', () => { it('renders without errors', () => { - const store = { - jobs: { id: 'id' }, - } + const job = { id: 'id' } - shallow( - - {}} /> - - ) + shallow( {}} />) }) }) diff --git a/src/components/JobTable/Actions.js b/src/components/JobTable/Actions.js index 4be4a5cd9..5c1db25ca 100644 --- a/src/components/JobTable/Actions.js +++ b/src/components/JobTable/Actions.js @@ -7,7 +7,7 @@ import ViewJobAction from './ViewJobAction' import RunJobAction from './RunJobAction' import DeleteJobAction from './DeleteJobAction' -const Actions = ({ id, configurable }) => ( +const Actions = ({ id, configurable, enabled, refetch }) => ( ( ) : ( )} - {configurable && } - {configurable && } + {configurable && ( + + )} + {configurable && } } > @@ -30,11 +32,13 @@ Actions.defaultProps = { configurable: false, } -const { string, bool } = PropTypes +const { string, bool, func } = PropTypes Actions.propTypes = { id: string.isRequired, + refetch: func.isRequired, configurable: bool, + enabled: bool, } export default Actions diff --git a/src/components/JobTable/Actions.test.js b/src/components/JobTable/Actions.test.js index d76bb7345..5dd7c4a35 100644 --- a/src/components/JobTable/Actions.test.js +++ b/src/components/JobTable/Actions.test.js @@ -4,10 +4,10 @@ import Actions from './Actions' describe('', () => { it('renders without errors for configurable jobs', () => { - shallow() + shallow( {}} />) }) it('renders without errors for non configurable jobs', () => { - shallow() + shallow( {}} />) }) }) diff --git a/src/components/JobTable/DeleteJobAction.js b/src/components/JobTable/DeleteJobAction.js index 5afc9c99b..fff1f0f2a 100644 --- a/src/components/JobTable/DeleteJobAction.js +++ b/src/components/JobTable/DeleteJobAction.js @@ -3,11 +3,9 @@ import { PropTypes } from '@dhis2/prop-types' import { MenuItem } from '@dhis2/ui' import i18n from '@dhis2/d2-i18n' import { DeleteJobModal } from '../Modal' -import { hooks } from '../Store' -const DeleteJobAction = ({ id }) => { +const DeleteJobAction = ({ id, refetch }) => { const [showModal, setShowModal] = useState(false) - const refetchJobs = hooks.useRefetchJobs() return ( @@ -26,17 +24,18 @@ const DeleteJobAction = ({ id }) => { /* istanbul ignore next */ () => setShowModal(false) } - onSuccess={refetchJobs} + onSuccess={refetch} /> )} ) } -const { string } = PropTypes +const { string, func } = PropTypes DeleteJobAction.propTypes = { id: string.isRequired, + refetch: func.isRequired, } export default DeleteJobAction diff --git a/src/components/JobTable/DeleteJobAction.test.js b/src/components/JobTable/DeleteJobAction.test.js index 7076be7a1..94100aa10 100644 --- a/src/components/JobTable/DeleteJobAction.test.js +++ b/src/components/JobTable/DeleteJobAction.test.js @@ -4,11 +4,11 @@ import DeleteJobAction from './DeleteJobAction' describe('', () => { it('renders without errors', () => { - shallow() + shallow( {}} />) }) it('shows the modal when MenuItem is clicked', () => { - const wrapper = mount() + const wrapper = mount( {}} />) expect(wrapper.find('DeleteJobModal')).toHaveLength(0) diff --git a/src/components/JobTable/JobTable.js b/src/components/JobTable/JobTable.js index c32436e89..2be8266bb 100644 --- a/src/components/JobTable/JobTable.js +++ b/src/components/JobTable/JobTable.js @@ -1,5 +1,4 @@ import React from 'react' -import { PropTypes } from '@dhis2/prop-types' import { Table, TableHead, @@ -10,9 +9,10 @@ import { TableBody, } from '@dhis2/ui' import i18n from '@dhis2/d2-i18n' +import { PropTypes } from '@dhis2/prop-types' import JobTableRow from './JobTableRow' -const JobTable = ({ jobs }) => ( +const JobTable = ({ jobs, refetch }) => ( @@ -31,16 +31,19 @@ const JobTable = ({ jobs }) => ( {i18n.t('No jobs to display')} ) : ( - jobs.map((job) => ) + jobs.map((job) => ( + + )) )}
) -const { object, arrayOf } = PropTypes +const { arrayOf, object, func } = PropTypes JobTable.propTypes = { jobs: arrayOf(object).isRequired, + refetch: func.isRequired, } export default JobTable diff --git a/src/components/JobTable/JobTable.test.js b/src/components/JobTable/JobTable.test.js index 24b05d421..499e30bf2 100644 --- a/src/components/JobTable/JobTable.test.js +++ b/src/components/JobTable/JobTable.test.js @@ -6,33 +6,33 @@ describe('', () => { it('renders without errors when there are jobs', () => { const jobs = [ { - cronExpression: '0 0 * ? * *', - displayName: 'Name', + id: 'lnWRZN67iDU', + name: 'Job 1', + type: 'DATA_INTEGRITY', + cronExpression: '0 0 3 ? * MON', + nextExecutionTime: '2021-03-01T03:00:00.000', + status: 'SCHEDULED', enabled: true, - id: '1', - jobStatus: 'ENABLED', - jobType: 'Type', - nextExecutionTime: '2100-10-10T14:48:00', - schedulingType: 'CRON', - }, - { - delay: 6000, - displayName: 'Name', - enabled: true, - id: '2', - jobStatus: 'ENABLED', - jobType: 'Type', - nextExecutionTime: '', - schedulingType: 'FIXED_DELAY', + configurable: true, + sequence: [ + { + id: 'lnWRZN67iDU', + name: 'Job 1', + type: 'DATA_INTEGRITY', + cronExpression: '0 0 3 ? * MON', + nextExecutionTime: '2021-03-01T03:00:00.000', + status: 'SCHEDULED', + }, + ], }, ] - shallow() + shallow( {}} />) }) it('renders without errors when there are no jobs', () => { const jobs = [] - shallow() + shallow( {}} />) }) }) diff --git a/src/components/JobTable/JobTableRow.js b/src/components/JobTable/JobTableRow.js index 070c8d776..d1d098c4c 100644 --- a/src/components/JobTable/JobTableRow.js +++ b/src/components/JobTable/JobTableRow.js @@ -11,60 +11,62 @@ import Schedule from './Schedule' const JobTableRow = ({ job: { id, - displayName, - jobType, + name, + type, cronExpression, delay, - jobStatus, + status, nextExecutionTime, - schedulingType, enabled, configurable, }, + refetch, }) => ( - {displayName} - {jobTypesMap[jobType]} + {name} + {jobTypesMap[type]} - + - + - + ) -const { shape, string, bool, number } = PropTypes +const { shape, string, bool, number, func } = PropTypes JobTableRow.propTypes = { job: shape({ - displayName: string.isRequired, + name: string.isRequired, enabled: bool.isRequired, id: string.isRequired, - jobStatus: string.isRequired, - jobType: string.isRequired, - schedulingType: string.isRequired, + status: string.isRequired, + type: string.isRequired, cronExpression: string, delay: number, nextExecutionTime: string, }).isRequired, + refetch: func.isRequired, } export default JobTableRow diff --git a/src/components/JobTable/JobTableRow.test.js b/src/components/JobTable/JobTableRow.test.js index eb9e7b18c..3e61b8ba8 100644 --- a/src/components/JobTable/JobTableRow.test.js +++ b/src/components/JobTable/JobTableRow.test.js @@ -5,33 +5,51 @@ import JobTableRow from './JobTableRow' describe('', () => { it('renders cron jobs without errors', () => { const job = { - id: '1', - displayName: 'Name', - jobType: 'SEND_SCHEDULED_MESSAGE', - cronExpression: '0 0 * ? * *', - jobStatus: 'ENABLED', - nextExecutionTime: '2100-10-10T14:48:00', + id: 'lnWRZN67iDU', + name: 'Job 1', + type: 'DATA_INTEGRITY', + cronExpression: '0 0 3 ? * MON', + nextExecutionTime: '2021-03-01T03:00:00.000', + status: 'SCHEDULED', enabled: true, - schedulingType: 'CRON', configurable: true, + sequence: [ + { + id: 'lnWRZN67iDU', + name: 'Job 1', + type: 'DATA_INTEGRITY', + cronExpression: '0 0 3 ? * MON', + nextExecutionTime: '2021-03-01T03:00:00.000', + status: 'SCHEDULED', + }, + ], } - shallow() + shallow( {}} />) }) it('renders fixed delay jobs without errors', () => { const job = { - id: '1', - displayName: 'Name', - jobType: 'CONTINUOUS_ANALYTICS_TABLE', - jobStatus: 'ENABLED', - nextExecutionTime: '', - enabled: true, - schedulingType: 'FIXED_DELAY', + id: 'lnWRZN67iDU', + name: 'Job 1', + type: 'CONTINUOUS_ANALYTICS_TABLE', delay: 6000, + nextExecutionTime: '2021-03-01T03:00:00.000', + status: 'SCHEDULED', + enabled: true, configurable: true, + sequence: [ + { + id: 'lnWRZN67iDU', + name: 'Job 1', + type: 'CONTINUOUS_ANALYTICS_TABLE', + delay: 6000, + nextExecutionTime: '2021-03-01T03:00:00.000', + status: 'SCHEDULED', + }, + ], } - shallow() + shallow( {}} />) }) }) diff --git a/src/components/JobTable/RunJobAction.js b/src/components/JobTable/RunJobAction.js index 51ed6007d..eb6bfc98b 100644 --- a/src/components/JobTable/RunJobAction.js +++ b/src/components/JobTable/RunJobAction.js @@ -2,11 +2,9 @@ import React, { useState } from 'react' import { PropTypes } from '@dhis2/prop-types' import { MenuItem } from '@dhis2/ui' import i18n from '@dhis2/d2-i18n' -import { hooks } from '../Store' import { RunJobModal } from '../Modal' -const RunJobAction = ({ id }) => { - const { enabled } = hooks.useJob(id) +const RunJobAction = ({ id, enabled, refetch }) => { const [showModal, setShowModal] = useState(false) return ( @@ -26,16 +24,19 @@ const RunJobAction = ({ id }) => { /* istanbul ignore next */ () => setShowModal(false) } + refetch={refetch} /> )} ) } -const { string } = PropTypes +const { string, bool, func } = PropTypes RunJobAction.propTypes = { id: string.isRequired, + refetch: func.isRequired, + enabled: bool, } export default RunJobAction diff --git a/src/components/JobTable/RunJobAction.test.js b/src/components/JobTable/RunJobAction.test.js index e2449ccee..dfc0229e9 100644 --- a/src/components/JobTable/RunJobAction.test.js +++ b/src/components/JobTable/RunJobAction.test.js @@ -1,17 +1,11 @@ import React from 'react' import { mount } from 'enzyme' -import { StoreContext } from '../Store' import RunJobAction from './RunJobAction' describe('', () => { it('shows the modal when MenuItem is clicked and the job is enabled', () => { - const store = { - jobs: [{ id: 'id', enabled: true }], - } const wrapper = mount( - - - + {}} /> ) expect(wrapper.find('RunJobModal')).toHaveLength(0) @@ -20,14 +14,7 @@ describe('', () => { }) it('does not show the modal when MenuItem is clicked and the job is disabled', () => { - const store = { - jobs: [{ id: 'id', enabled: false }], - } - const wrapper = mount( - - - - ) + const wrapper = mount( {}} />) expect(wrapper.find('RunJobModal')).toHaveLength(0) wrapper.find('a').simulate('click') diff --git a/src/components/JobTable/Schedule.js b/src/components/JobTable/Schedule.js index adaafb68a..4b1415f6a 100644 --- a/src/components/JobTable/Schedule.js +++ b/src/components/JobTable/Schedule.js @@ -2,22 +2,25 @@ import { PropTypes } from '@dhis2/prop-types' import i18n from '@dhis2/d2-i18n' import translateCron from '../../services/translate-cron' -const Schedule = ({ cronExpression, schedulingType, delay }) => { - switch (schedulingType) { - case 'CRON': - return translateCron(cronExpression) - case 'FIXED_DELAY': - return i18n.t('{{ delay }} seconds after last run', { delay }) - default: - // Unrecognised or invalid type - return '-' +const Schedule = ({ cronExpression, delay }) => { + const hasCronExpression = !!cronExpression + const hasDelay = !!delay + + if (hasCronExpression) { + return translateCron(cronExpression) + } + + if (hasDelay) { + return i18n.t('{{ delay }} seconds after last run', { delay }) } + + // Unrecognised or invalid type + return '-' } const { string, number } = PropTypes Schedule.propTypes = { - schedulingType: string.isRequired, cronExpression: string, delay: number, } diff --git a/src/components/Modal/RunJobModal.js b/src/components/Modal/RunJobModal.js index 3fc47e2d6..eff92aed2 100644 --- a/src/components/Modal/RunJobModal.js +++ b/src/components/Modal/RunJobModal.js @@ -10,9 +10,8 @@ import { NoticeBox, } from '@dhis2/ui' import i18n from '@dhis2/d2-i18n' -import { hooks } from '../Store' -const RunJobModal = ({ id, hideModal }) => { +const RunJobModal = ({ id, hideModal, refetch }) => { const [mutation] = useState({ resource: `jobConfigurations/${id}/execute`, type: 'create', @@ -20,10 +19,9 @@ const RunJobModal = ({ id, hideModal }) => { const [runJob, { loading, error }] = useDataMutation(mutation, { onComplete: () => { hideModal() - refetchJobs() + refetch() }, }) - const refetchJobs = hooks.useRefetchJobs() return ( @@ -64,6 +62,7 @@ const { func, string } = PropTypes RunJobModal.propTypes = { hideModal: func.isRequired, id: string.isRequired, + refetch: func.isRequired, } export default RunJobModal diff --git a/src/components/Modal/RunJobModal.test.js b/src/components/Modal/RunJobModal.test.js index 1936537b4..4bfe41922 100644 --- a/src/components/Modal/RunJobModal.test.js +++ b/src/components/Modal/RunJobModal.test.js @@ -1,7 +1,6 @@ import React from 'react' import { shallow, mount } from 'enzyme' import { useDataMutation } from '@dhis2/app-runtime' -import { StoreContext } from '../Store' import RunJobModal from './RunJobModal' jest.mock('@dhis2/app-runtime', () => ({ @@ -22,6 +21,7 @@ describe('', () => { const props = { id: 'id', hideModal: () => {}, + refetch: () => {}, } shallow() @@ -36,6 +36,7 @@ describe('', () => { const props = { id: 'id', hideModal: jest.fn(), + refetch: () => {}, } const wrapper = mount() @@ -53,6 +54,7 @@ describe('', () => { const props = { id: 'id', hideModal: jest.fn(), + refetch: () => {}, } const wrapper = mount() @@ -75,12 +77,9 @@ describe('', () => { const props = { id: 'id', hideModal: hideModalSpy, + refetch: refetchSpy, } - const wrapper = mount( - - - - ) + const wrapper = mount() wrapper .find('button') diff --git a/src/components/Routes/Routes.js b/src/components/Routes/Routes.js index 1a023f137..e0f79806d 100644 --- a/src/components/Routes/Routes.js +++ b/src/components/Routes/Routes.js @@ -1,18 +1,18 @@ import React from 'react' import { Route } from 'react-router-dom' import { Router } from 'react-router' -import { JobListContainer } from '../../pages/JobList' -import { JobEditContainer } from '../../pages/JobEdit' -import { JobView } from '../../pages/JobView' -import { JobAddContainer } from '../../pages/JobAdd' +import JobList from '../../pages/JobList' +import JobEdit from '../../pages/JobEdit' +import JobView from '../../pages/JobView' +import JobAdd from '../../pages/JobAdd' import history from '../../services/history' const Routes = () => ( - - + + - + ) diff --git a/src/components/Spinner/Spinner.js b/src/components/Spinner/Spinner.js new file mode 100644 index 000000000..70040e6d9 --- /dev/null +++ b/src/components/Spinner/Spinner.js @@ -0,0 +1,14 @@ +import React from 'react' +import { CircularLoader, Layer, CenteredContent } from '@dhis2/ui' + +const Spinner = () => { + return ( + + + + + + ) +} + +export default Spinner diff --git a/src/components/Spinner/index.js b/src/components/Spinner/index.js new file mode 100644 index 000000000..56bc264f2 --- /dev/null +++ b/src/components/Spinner/index.js @@ -0,0 +1,3 @@ +import Spinner from './Spinner' + +export { Spinner } diff --git a/src/components/Store/Store.js b/src/components/Store/Store.js index 8449fcdff..2d6a67a83 100644 --- a/src/components/Store/Store.js +++ b/src/components/Store/Store.js @@ -1,126 +1,15 @@ import React, { useState } from 'react' import { PropTypes } from '@dhis2/prop-types' -import { CircularLoader, Layer, CenteredContent } from '@dhis2/ui' -import { useDataQuery } from '@dhis2/app-runtime' import StoreContext from './StoreContext' -const jobsQuery = { - jobs: { - resource: 'jobConfigurations', - params: { - fields: '*', - paging: false, - }, - }, -} - -const jobTypesQuery = { - jobTypes: { - resource: 'jobConfigurations/jobTypes', - params: { - fields: '*', - paging: false, - }, - }, -} - -const optionsQuery = { - // Used by the ANALYTICS_TABLE and CONTINUOUS_ANALYTICS_TABLE job types - skipTableTypes: { - resource: 'analytics/tableTypes', - }, - - // Used by the MONITORING job type - validationRuleGroups: { - resource: 'validationRuleGroups', - params: { - paging: false, - }, - }, - - // Used by the PUSH_ANALYSIS job type - pushAnalysis: { - resource: 'pushAnalysis', - params: { - paging: false, - }, - }, - - // Used by the PREDICTOR job type - predictors: { - resource: 'predictors', - params: { - paging: false, - }, - }, - predictorGroups: { - resource: 'predictorGroups', - params: { - paging: false, - }, - }, - dataIntegrityChecks: { - resource: 'dataIntegrity', - }, -} - const Store = ({ children }) => { - // State that should persist after a refetch + // State that should persist const jobFilterState = useState('') const showSystemJobsState = useState(false) - const jobsFetch = useDataQuery(jobsQuery) - const jobTypesFetch = useDataQuery(jobTypesQuery) - const optionsFetch = useDataQuery(optionsQuery) - - const loading = - jobsFetch.loading || jobTypesFetch.loading || optionsFetch.loading - - if (loading) { - return ( - - - - - - ) - } - - const error = jobsFetch.error || jobTypesFetch.error || optionsFetch.error - - if (error) { - /** - * The app can't continue if this fails, because it doesn't - * have any data, so throw the error. - */ - throw error - } - const { jobConfigurations: jobs } = jobsFetch.data.jobs - const { jobTypes } = jobTypesFetch.data.jobTypes - const { - skipTableTypes, - validationRuleGroups: { validationRuleGroups }, - pushAnalysis: { pushAnalysis }, - predictors: { predictors }, - predictorGroups: { predictorGroups }, - dataIntegrityChecks, - } = optionsFetch.data - const parameterOptions = { - skipTableTypes, - validationRuleGroups, - pushAnalysis, - predictors, - predictorGroups, - dataIntegrityChecks, - } - return ( ({ - useDataQuery: jest.fn(), -})) - -afterEach(() => { - jest.resetAllMocks() -}) - describe('', () => { - describe('loading', () => { - it('shows a spinner when all are loading', () => { - useDataQuery.mockImplementation(() => ({ loading: true })) - - const wrapper = mount(Child) - const loadingIndicator = wrapper.find({ - 'data-test': 'dhis2-uicore-circularloader', - }) - - expect(loadingIndicator).toHaveLength(1) - }) - }) - - describe('errors', () => { - it('throws an error if all have errors', () => { - const message = 'Something went wrong' - const error = new Error(message) - - useDataQuery.mockImplementation(() => ({ loading: false, error })) - - expectRenderError(Child, message) - }) - }) - - it('renders the children when all data has been fetched', () => { - useDataQuery.mockImplementationOnce(() => ({ - loading: false, - error: undefined, - data: { jobs: { jobConfigurations: 'jobConfigurations' } }, - })) - useDataQuery.mockImplementationOnce(() => ({ - loading: false, - error: undefined, - data: { jobTypes: { jobTypes: 'jobTypes' } }, - })) - useDataQuery.mockImplementationOnce(() => ({ - loading: false, - error: undefined, - data: { - skipTableTypes: 'skipTableTypes', - validationRuleGroups: {}, - pushAnalysis: {}, - predictors: {}, - predictorGroups: {}, - }, - })) - + it('renders the children', () => { const wrapper = shallow(Child) expect(wrapper.text()).toEqual(expect.stringContaining('Child')) diff --git a/src/components/Store/StoreContext.js b/src/components/Store/StoreContext.js index c30a560dc..b4b4ab65c 100644 --- a/src/components/Store/StoreContext.js +++ b/src/components/Store/StoreContext.js @@ -1,12 +1,8 @@ import { createContext } from 'react' const StoreContext = createContext({ - jobs: {}, - jobTypes: {}, - parameterOptions: {}, - refetchJobs: () => { - throw new Error('Store context needs a valid provider') - }, + jobFilter: '', + showSystemJobs: false, }) export default StoreContext diff --git a/src/components/Store/StoreContext.test.js b/src/components/Store/StoreContext.test.js index 5b5b0c93b..b69c6d2c6 100644 --- a/src/components/Store/StoreContext.test.js +++ b/src/components/Store/StoreContext.test.js @@ -1,5 +1,3 @@ -import React from 'react' -import expectRenderError from '../../../test/expect-render-error' import StoreContext from './StoreContext' describe('StoreContext', () => { @@ -8,16 +6,3 @@ describe('StoreContext', () => { expect('Consumer' in StoreContext).toBe(true) }) }) - -describe('StoreContext.Consumer', () => { - it('returns a store with a refetchJobs function that throws an error if used outside of the provider', () => { - const message = 'Store context needs a valid provider' - - expectRenderError( - - {(store) => store.refetchJobs()} - , - message - ) - }) -}) diff --git a/src/components/Store/hooks.js b/src/components/Store/hooks.js index ab892d543..a2ade9243 100644 --- a/src/components/Store/hooks.js +++ b/src/components/Store/hooks.js @@ -1,31 +1,12 @@ import { useContext } from 'react' import StoreContext from './StoreContext' -export const useAllJobs = () => { - const store = useContext(StoreContext) - return store.jobs -} - -export const useAllParameterOptions = () => { - const store = useContext(StoreContext) - return store.parameterOptions -} - -export const useAllJobTypes = () => { - const store = useContext(StoreContext) - return store.jobTypes -} - -export const useRefetchJobs = () => { - const store = useContext(StoreContext) - return store.refetchJobs -} - /** * The state for the job filter and showing system * jobs is used in the job list, but kept in the * store since it has to persist after a refetch. */ + export const useJobFilter = () => { const store = useContext(StoreContext) return store.jobFilter @@ -35,56 +16,3 @@ export const useShowSystemJobs = () => { const store = useContext(StoreContext) return store.showSystemJobs } - -/** - * This hook returns the list of jobs that's shown in the - * job list route. The list is filtered by the job filter - * string and the show system jobs toggle from the store - * state. - */ -export const useJobListJobs = () => { - const [jobFilter] = useJobFilter() - const [showSystemJobs] = useShowSystemJobs() - const jobs = useAllJobs() - - // Filter jobs by the current jobFilter - const applyJobFilter = (job) => - job.displayName.toLowerCase().includes(jobFilter.toLowerCase()) - - // Filter jobs depending on the current showSystemJobs - const applyShowSystemJobs = (job) => - // Jobs that are configurable are user jobs - showSystemJobs ? true : job.configurable - - return jobs.filter(applyJobFilter).filter(applyShowSystemJobs) -} - -// Finds a job by id -export const useJob = (id) => { - const jobs = useAllJobs() - return jobs.find((job) => job.id === id) -} - -// Finds a jobType by the jobType string -export const useJobType = (jobType) => { - const jobTypes = useAllJobTypes() - return jobTypes.find((job) => job.jobType === jobType) -} - -// Returns an array with all parameters for a certain jobType -export const useJobTypeParameters = (jobType) => { - const selectedJobType = useJobType(jobType) - const hasParameters = 'jobParameters' in selectedJobType - - if (!hasParameters) { - return [] - } - - return selectedJobType.jobParameters -} - -// Returns the parameter options for a given parameter -export const useParameterOptions = (parameter) => { - const parameterOptions = useAllParameterOptions() - return parameterOptions[parameter] -} diff --git a/src/components/Store/hooks.test.js b/src/components/Store/hooks.test.js index d8258c691..a44eda2dc 100644 --- a/src/components/Store/hooks.test.js +++ b/src/components/Store/hooks.test.js @@ -1,92 +1,8 @@ import React from 'react' import { renderHook } from '@testing-library/react-hooks' -import { - useAllJobs, - useAllParameterOptions, - useAllJobTypes, - useRefetchJobs, - useJobFilter, - useShowSystemJobs, - useJobListJobs, - useJob, - useJobType, - useJobTypeParameters, - useParameterOptions, -} from './hooks' +import { useJobFilter, useShowSystemJobs } from './hooks' import StoreContext from './StoreContext' -describe('useAllJobs', () => { - it('should return the jobs part of the store', () => { - const jobs = 'jobs' - const store = { - jobs, - } - const wrapper = ({ children }) => ( - - {children} - - ) - const { result } = renderHook(() => useAllJobs(), { wrapper }) - - expect(result.current).toBe(jobs) - }) -}) - -describe('useAllParameterOptions', () => { - it('should return the parameterOptions part of the store', () => { - const parameterOptions = 'parameterOptions' - const store = { - parameterOptions, - } - const wrapper = ({ children }) => ( - - {children} - - ) - const { result } = renderHook(() => useAllParameterOptions(), { - wrapper, - }) - - expect(result.current).toBe(parameterOptions) - }) -}) - -describe('useAllJobTypes', () => { - it('should return the jobTypes part of the store', () => { - const jobTypes = 'jobTypes' - const store = { - jobTypes, - } - const wrapper = ({ children }) => ( - - {children} - - ) - const { result } = renderHook(() => useAllJobTypes(), { wrapper }) - - expect(result.current).toBe(jobTypes) - }) -}) - -describe('useRefetchJobs', () => { - it('should return the refetchJobs part of the store', () => { - const refetchJobs = 'refetchJobs' - const store = { - refetchJobs, - } - const wrapper = ({ children }) => ( - - {children} - - ) - const { result } = renderHook(() => useRefetchJobs(), { - wrapper, - }) - - expect(result.current).toBe(refetchJobs) - }) -}) - describe('useJobFilter', () => { it('should return the jobFilter part of the store', () => { const jobFilter = 'jobFilter' @@ -120,180 +36,3 @@ describe('useShowSystemJobs', () => { expect(result.current).toBe(showSystemJobs) }) }) - -describe('useJobListJobs', () => { - const user1 = { - displayName: 'User One', - configurable: true, - } - const user2 = { - displayName: 'User Two', - configurable: true, - } - const system1 = { - displayName: 'System One', - configurable: false, - } - const system2 = { - displayName: 'System Two', - configurable: false, - } - - it('should return matching jobs when there is no filter and showSystemJobs is false', () => { - const store = { - jobFilter: [''], - showSystemJobs: [false], - jobs: [user1, user2, system1, system2], - } - const wrapper = ({ children }) => ( - - {children} - - ) - const { result } = renderHook(() => useJobListJobs(), { wrapper }) - - expect(result.current).toEqual(expect.arrayContaining([user1, user2])) - }) - - it('should return matching jobs when there is no filter and showSystemJobs is true', () => { - const store = { - jobFilter: [''], - showSystemJobs: [true], - jobs: [user1, user2, system1, system2], - } - const wrapper = ({ children }) => ( - - {children} - - ) - const { result } = renderHook(() => useJobListJobs(), { wrapper }) - - expect(result.current).toEqual( - expect.arrayContaining([user1, user2, system1, system2]) - ) - }) - - it('should return matching jobs when there is a filter and showSystemJobs is false', () => { - const store = { - jobFilter: ['One'], - showSystemJobs: [false], - jobs: [user1, user2, system1, system2], - } - const wrapper = ({ children }) => ( - - {children} - - ) - const { result } = renderHook(() => useJobListJobs(), { wrapper }) - - expect(result.current).toEqual(expect.arrayContaining([user1])) - }) - - it('should return matching jobs when there is a filter and showSystemJobs is true', () => { - const store = { - jobFilter: ['One'], - showSystemJobs: [true], - jobs: [user1, user2, system1, system2], - } - const wrapper = ({ children }) => ( - - {children} - - ) - const { result } = renderHook(() => useJobListJobs(), { wrapper }) - - expect(result.current).toEqual(expect.arrayContaining([user1, system1])) - }) -}) - -describe('useJob', () => { - it('should return the requested job', () => { - const expected = { id: 'one' } - const store = { - jobs: [expected, { id: 'two' }, { id: 'three' }], - } - const wrapper = ({ children }) => ( - - {children} - - ) - const { result } = renderHook(() => useJob('one'), { wrapper }) - - expect(result.current).toEqual(expected) - }) -}) - -describe('useJobType', () => { - it('should return the requested jobType', () => { - const expected = { jobType: 'one' } - const store = { - jobTypes: [expected, { jobType: 'two' }, { jobType: 'three' }], - } - const wrapper = ({ children }) => ( - - {children} - - ) - const { result } = renderHook(() => useJobType('one'), { wrapper }) - - expect(result.current).toEqual(expected) - }) -}) - -describe('useJobTypeParameters', () => { - it('should return an array with parameters if there are any', () => { - const expected = 'jobParameters' - const store = { - jobTypes: [{ jobType: 'jobType', jobParameters: expected }], - } - const wrapper = ({ children }) => ( - - {children} - - ) - const { result } = renderHook(() => useJobTypeParameters('jobType'), { - wrapper, - }) - - expect(result.current).toEqual(expected) - }) - - it('should return an empty array if there are no parameters', () => { - const store = { - jobTypes: [{ jobType: 'jobType' }], - } - const wrapper = ({ children }) => ( - - {children} - - ) - const { result } = renderHook(() => useJobTypeParameters('jobType'), { - wrapper, - }) - - expect(result.current).toEqual([]) - }) -}) - -describe('useParameterOptions', () => { - it('should return the requested parameterOptions', () => { - const expected = 'parameterOption' - const store = { - parameterOptions: { - one: expected, - two: 'two', - three: 'three', - }, - } - const wrapper = ({ children }) => ( - - {children} - - ) - const { result } = renderHook(() => useParameterOptions('one'), { - wrapper, - }) - - expect(result.current).toEqual(expected) - }) -}) diff --git a/src/components/Store/index.js b/src/components/Store/index.js index 682b049af..d356eb246 100644 --- a/src/components/Store/index.js +++ b/src/components/Store/index.js @@ -1,5 +1,4 @@ import Store from './Store' -import StoreContext from './StoreContext' -import * as hooks from './hooks' +import { useJobFilter, useShowSystemJobs } from './hooks' -export { Store, StoreContext, hooks } +export { Store, useJobFilter, useShowSystemJobs } diff --git a/src/components/Switches/ToggleJobSwitch.js b/src/components/Switches/ToggleJobSwitch.js index 6ab2cc145..a55a552fb 100644 --- a/src/components/Switches/ToggleJobSwitch.js +++ b/src/components/Switches/ToggleJobSwitch.js @@ -3,7 +3,6 @@ import { PropTypes } from '@dhis2/prop-types' import { useDataMutation } from '@dhis2/app-runtime' import i18n from '@dhis2/d2-i18n' import { Switch } from '@dhis2/ui' -import { hooks } from '../Store' /* istanbul ignore next */ const mutation = { @@ -14,9 +13,8 @@ const mutation = { data: ({ enabled }) => ({ enabled }), } -const ToggleJobSwitch = ({ id, checked, disabled }) => { +const ToggleJobSwitch = ({ id, checked, disabled, refetch }) => { const [toggleJob, { loading }] = useDataMutation(mutation) - const refetchJobs = hooks.useRefetchJobs() const enabled = !checked return ( @@ -25,19 +23,20 @@ const ToggleJobSwitch = ({ id, checked, disabled }) => { disabled={disabled || loading} checked={checked} onChange={() => { - toggleJob({ id, enabled }).then(() => refetchJobs()) + toggleJob({ id, enabled }).then(refetch) }} ariaLabel={i18n.t('Toggle job')} /> ) } -const { bool, string } = PropTypes +const { bool, string, func } = PropTypes ToggleJobSwitch.propTypes = { checked: bool.isRequired, disabled: bool.isRequired, id: string.isRequired, + refetch: func.isRequired, } export default ToggleJobSwitch diff --git a/src/components/Switches/ToggleJobSwitch.test.js b/src/components/Switches/ToggleJobSwitch.test.js index ed7c8e0b7..06d1c596c 100644 --- a/src/components/Switches/ToggleJobSwitch.test.js +++ b/src/components/Switches/ToggleJobSwitch.test.js @@ -1,11 +1,10 @@ import React from 'react' import { shallow, mount } from 'enzyme' import { useDataMutation } from '@dhis2/app-runtime' -import { StoreContext } from '../Store' import ToggleJobSwitch from './ToggleJobSwitch' jest.mock('@dhis2/app-runtime', () => ({ - useDataMutation: jest.fn(), + useDataMutation: jest.fn(() => [() => {}, {}]), })) afterEach(() => { @@ -14,9 +13,14 @@ afterEach(() => { describe('', () => { it('renders without errors', () => { - useDataMutation.mockImplementation(() => [() => {}, {}]) - - shallow() + shallow( + {}} + /> + ) }) it('calls toggleJob and refetches when toggle is clicked', async () => { @@ -28,15 +32,12 @@ describe('', () => { id: 'id', checked, disabled: false, + refetch: refetchSpy, } useDataMutation.mockImplementation(() => [toggleJobSpy, {}]) - const wrapper = mount( - - - - ) + const wrapper = mount() wrapper .find('input') diff --git a/src/hooks/job-schedules/index.js b/src/hooks/job-schedules/index.js new file mode 100644 index 000000000..a85c34481 --- /dev/null +++ b/src/hooks/job-schedules/index.js @@ -0,0 +1,3 @@ +import useJobSchedules from './use-job-schedules' + +export { useJobSchedules } diff --git a/src/hooks/job-schedules/use-job-schedules.js b/src/hooks/job-schedules/use-job-schedules.js new file mode 100644 index 000000000..91e7536d5 --- /dev/null +++ b/src/hooks/job-schedules/use-job-schedules.js @@ -0,0 +1,26 @@ +import { useDataQuery } from '@dhis2/app-runtime' + +const key = 'schedules' +const query = { + [key]: { + resource: 'scheduler', + }, +} + +const useJobSchedules = () => { + const fetch = useDataQuery(query) + + // Remove nesting from data and move the id up + if (fetch.data?.[key]?.map) { + const data = fetch.data[key].map((job) => { + const id = job.sequence?.[0]?.id + return { ...job, id } + }) + + return { ...fetch, data } + } + + return fetch +} + +export default useJobSchedules diff --git a/src/hooks/job-schedules/use-job-schedules.test.js b/src/hooks/job-schedules/use-job-schedules.test.js new file mode 100644 index 000000000..634b0c66d --- /dev/null +++ b/src/hooks/job-schedules/use-job-schedules.test.js @@ -0,0 +1,95 @@ +import React from 'react' +import { renderHook } from '@testing-library/react-hooks' +import { CustomDataProvider } from '@dhis2/app-runtime' +import useJobSchedules from './use-job-schedules' + +describe('useJobSchedules', () => { + it('should return the expected data', async () => { + const job = { sequence: [{ id: 'id' }] } + const data = { scheduler: [job] } + const wrapper = ({ children }) => ( + {children} + ) + + const { result, waitFor } = renderHook(() => useJobSchedules(), { + wrapper, + }) + + // Loading state + await waitFor(() => { + expect(result.current).toMatchObject({ + loading: true, + error: undefined, + data: undefined, + }) + }) + + await waitFor(() => { + expect(result.current).toMatchObject({ + loading: false, + error: undefined, + data: [{ id: 'id', sequence: [{ id: 'id' }] }], + }) + }) + }) + + it('should not fail if sequence is missing', async () => { + const job = {} + const data = { scheduler: [job] } + const wrapper = ({ children }) => ( + {children} + ) + + const { result, waitFor } = renderHook(() => useJobSchedules(), { + wrapper, + }) + + await waitFor(() => { + expect(result.current).toMatchObject({ + loading: false, + error: undefined, + data: [job], + }) + }) + }) + + it('should not fail if sequence is empty', async () => { + const job = { sequence: [] } + const data = { scheduler: [job] } + const wrapper = ({ children }) => ( + {children} + ) + + const { result, waitFor } = renderHook(() => useJobSchedules(), { + wrapper, + }) + + await waitFor(() => { + expect(result.current).toMatchObject({ + loading: false, + error: undefined, + data: [job], + }) + }) + }) + + it('should not fail if the first sequence has no id', async () => { + const job = { sequence: [{}] } + const data = { scheduler: [job] } + const wrapper = ({ children }) => ( + {children} + ) + + const { result, waitFor } = renderHook(() => useJobSchedules(), { + wrapper, + }) + + await waitFor(() => { + expect(result.current).toMatchObject({ + loading: false, + error: undefined, + data: [job], + }) + }) + }) +}) diff --git a/src/hooks/job-types/index.js b/src/hooks/job-types/index.js new file mode 100644 index 000000000..52a465e78 --- /dev/null +++ b/src/hooks/job-types/index.js @@ -0,0 +1,5 @@ +import useJobType from './use-job-type' +import useJobTypes from './use-job-types' +import useJobTypeParameters from './use-job-type-parameters' + +export { useJobType, useJobTypes, useJobTypeParameters } diff --git a/src/hooks/job-types/use-job-type-parameters.js b/src/hooks/job-types/use-job-type-parameters.js new file mode 100644 index 000000000..fae6a964e --- /dev/null +++ b/src/hooks/job-types/use-job-type-parameters.js @@ -0,0 +1,22 @@ +import useJobType from './use-job-type' + +const useJobTypeParameters = (jobType) => { + const fetch = useJobType(jobType) + + // Return parameters when there is data + if (fetch.data) { + const hasParameters = 'jobParameters' in fetch.data + + if (!hasParameters) { + return { ...fetch, data: [] } + } + + const data = fetch.data.jobParameters + + return { ...fetch, data } + } + + return fetch +} + +export default useJobTypeParameters diff --git a/src/hooks/job-types/use-job-type-parameters.test.js b/src/hooks/job-types/use-job-type-parameters.test.js new file mode 100644 index 000000000..6ca1a57d6 --- /dev/null +++ b/src/hooks/job-types/use-job-type-parameters.test.js @@ -0,0 +1,61 @@ +import React from 'react' +import { renderHook } from '@testing-library/react-hooks' +import { CustomDataProvider } from '@dhis2/app-runtime' +import useJobTypeParameters from './use-job-type-parameters' + +describe('useJobTypeParameters', () => { + it('should return the requested job parameters', async () => { + const jobParameters = 'jobParameters' + const jobType = 'match' + const data = { + 'jobConfigurations/jobTypes': { + jobTypes: [{ jobType, jobParameters }], + }, + } + const wrapper = ({ children }) => ( + {children} + ) + + const { result, waitFor } = renderHook( + () => useJobTypeParameters(jobType), + { + wrapper, + } + ) + + await waitFor(() => { + expect(result.current).toMatchObject({ + loading: false, + error: undefined, + data: jobParameters, + }) + }) + }) + + it('should return an empty array if the jobType has no jobParameters', async () => { + const jobType = 'match' + const data = { + 'jobConfigurations/jobTypes': { + jobTypes: [{ jobType }], + }, + } + const wrapper = ({ children }) => ( + {children} + ) + + const { result, waitFor } = renderHook( + () => useJobTypeParameters(jobType), + { + wrapper, + } + ) + + await waitFor(() => { + expect(result.current).toMatchObject({ + loading: false, + error: undefined, + data: [], + }) + }) + }) +}) diff --git a/src/hooks/job-types/use-job-type.js b/src/hooks/job-types/use-job-type.js new file mode 100644 index 000000000..74595d365 --- /dev/null +++ b/src/hooks/job-types/use-job-type.js @@ -0,0 +1,23 @@ +import useJobTypes from './use-job-types' + +const useJobType = (jobType) => { + const fetch = useJobTypes() + + // Return requested job type when there is data + if (fetch.data) { + const requestedJobType = fetch.data.find( + (currentJobType) => currentJobType.jobType === jobType + ) + + if (!requestedJobType) { + const error = new Error('Job type could not be found') + return { ...fetch, data: undefined, error } + } + + return { ...fetch, data: requestedJobType } + } + + return fetch +} + +export default useJobType diff --git a/src/hooks/job-types/use-job-type.test.js b/src/hooks/job-types/use-job-type.test.js new file mode 100644 index 000000000..b989a2e8f --- /dev/null +++ b/src/hooks/job-types/use-job-type.test.js @@ -0,0 +1,57 @@ +import React from 'react' +import { renderHook } from '@testing-library/react-hooks' +import { CustomDataProvider } from '@dhis2/app-runtime' +import useJobType from './use-job-type' + +describe('useJobType', () => { + it('should return the requested job type', async () => { + const jobType = 'match' + const job = { jobType } + const data = { + 'jobConfigurations/jobTypes': { + jobTypes: [{ jobType: 'nomatch' }, job], + }, + } + const wrapper = ({ children }) => ( + {children} + ) + + const { result, waitFor } = renderHook(() => useJobType(jobType), { + wrapper, + }) + + await waitFor(() => { + expect(result.current).toMatchObject({ + loading: false, + error: undefined, + data: job, + }) + }) + }) + + it('should return an error if the job could not be found', async () => { + const jobType = 'match' + const data = { + 'jobConfigurations/jobTypes': { + jobTypes: [{ jobType: 'nomatch' }], + }, + } + const wrapper = ({ children }) => ( + {children} + ) + + const { result, waitFor } = renderHook(() => useJobType(jobType), { + wrapper, + }) + + await waitFor(() => { + expect(result.current).toMatchObject({ + loading: false, + data: undefined, + }) + expect(result.current.error.message).toBe( + 'Job type could not be found' + ) + }) + }) +}) diff --git a/src/hooks/job-types/use-job-types.js b/src/hooks/job-types/use-job-types.js new file mode 100644 index 000000000..17f20aa77 --- /dev/null +++ b/src/hooks/job-types/use-job-types.js @@ -0,0 +1,27 @@ +import { useDataQuery } from '@dhis2/app-runtime' + +const key = 'jobTypes' +const query = { + [key]: { + resource: 'jobConfigurations/jobTypes', + params: { + fields: '*', + paging: false, + }, + }, +} + +const useJobTypes = () => { + const fetch = useDataQuery(query) + + // Remove nesting from data + if (fetch.data) { + const data = fetch.data[key].jobTypes + + return { ...fetch, data } + } + + return fetch +} + +export default useJobTypes diff --git a/src/hooks/job-types/use-job-types.test.js b/src/hooks/job-types/use-job-types.test.js new file mode 100644 index 000000000..ccce2c6b1 --- /dev/null +++ b/src/hooks/job-types/use-job-types.test.js @@ -0,0 +1,26 @@ +import React from 'react' +import { renderHook } from '@testing-library/react-hooks' +import { CustomDataProvider } from '@dhis2/app-runtime' +import useJobTypes from './use-job-types' + +describe('useJobTypes', () => { + it('should return the job types without nesting', async () => { + const jobTypes = 'jobTypes' + const data = { 'jobConfigurations/jobTypes': { jobTypes } } + const wrapper = ({ children }) => ( + {children} + ) + + const { result, waitFor } = renderHook(() => useJobTypes(), { + wrapper, + }) + + await waitFor(() => { + expect(result.current).toMatchObject({ + loading: false, + error: undefined, + data: jobTypes, + }) + }) + }) +}) diff --git a/src/hooks/jobs/index.js b/src/hooks/jobs/index.js index 74dd5115e..039e19f78 100644 --- a/src/hooks/jobs/index.js +++ b/src/hooks/jobs/index.js @@ -1,4 +1,5 @@ import useSubmitJob from './use-submit-job' import useUpdateJob from './use-update-job' +import useJobById from './use-job-by-id' -export { useSubmitJob, useUpdateJob } +export { useSubmitJob, useUpdateJob, useJobById } diff --git a/src/hooks/jobs/use-job-by-id.js b/src/hooks/jobs/use-job-by-id.js new file mode 100644 index 000000000..0b001ea3f --- /dev/null +++ b/src/hooks/jobs/use-job-by-id.js @@ -0,0 +1,18 @@ +import useJobs from './use-jobs' + +const useJobById = (id) => { + const fetch = useJobs() + + // Find job by id + if (fetch.data) { + const data = fetch.data.find((job) => { + return job.id === id + }) + + return { ...fetch, data } + } + + return fetch +} + +export default useJobById diff --git a/src/hooks/jobs/use-job-by-id.test.js b/src/hooks/jobs/use-job-by-id.test.js new file mode 100644 index 000000000..b03c3ab1c --- /dev/null +++ b/src/hooks/jobs/use-job-by-id.test.js @@ -0,0 +1,32 @@ +import React from 'react' +import { renderHook } from '@testing-library/react-hooks' +import { CustomDataProvider } from '@dhis2/app-runtime' +import useJobById from './use-job-by-id' + +describe('useJobById', () => { + it('should return a job by id', async () => { + const id = 'match' + const job = { id } + const data = { + jobConfigurations: { + jobConfigurations: [job], + }, + } + + const wrapper = ({ children }) => ( + {children} + ) + + const { result, waitFor } = renderHook(() => useJobById(id), { + wrapper, + }) + + await waitFor(() => { + expect(result.current).toMatchObject({ + loading: false, + error: undefined, + data: job, + }) + }) + }) +}) diff --git a/src/hooks/jobs/use-jobs.js b/src/hooks/jobs/use-jobs.js new file mode 100644 index 000000000..077ff4439 --- /dev/null +++ b/src/hooks/jobs/use-jobs.js @@ -0,0 +1,35 @@ +import { useDataQuery } from '@dhis2/app-runtime' + +const key = 'jobs' +const query = { + [key]: { + resource: 'jobConfigurations', + params: { + fields: [ + 'created', + 'cronExpression', + 'id', + 'jobParameters', + 'jobType', + 'lastExecuted', + 'lastExecutedStatus', + 'name', + ], + }, + }, +} + +const useJobs = () => { + const fetch = useDataQuery(query) + + // Remove nesting from data + if (fetch.data) { + const data = fetch.data[key].jobConfigurations + + return { ...fetch, data } + } + + return fetch +} + +export default useJobs diff --git a/src/hooks/jobs/use-jobs.test.js b/src/hooks/jobs/use-jobs.test.js new file mode 100644 index 000000000..61bcd99b8 --- /dev/null +++ b/src/hooks/jobs/use-jobs.test.js @@ -0,0 +1,31 @@ +import React from 'react' +import { renderHook } from '@testing-library/react-hooks' +import { CustomDataProvider } from '@dhis2/app-runtime' +import useJobs from './use-jobs' + +describe('useJobs', () => { + it('should return the expected data', async () => { + const match = [{ id: 'id' }] + const data = { + jobConfigurations: { + jobConfigurations: match, + }, + } + + const wrapper = ({ children }) => ( + {children} + ) + + const { result, waitFor } = renderHook(() => useJobs(), { + wrapper, + }) + + await waitFor(() => { + expect(result.current).toMatchObject({ + loading: false, + error: undefined, + data: match, + }) + }) + }) +}) diff --git a/src/hooks/jobs/use-submit-job.js b/src/hooks/jobs/use-submit-job.js index 0fb4a9d27..22a81b90d 100644 --- a/src/hooks/jobs/use-submit-job.js +++ b/src/hooks/jobs/use-submit-job.js @@ -1,6 +1,4 @@ -import { useContext } from 'react' import { useDataEngine } from '@dhis2/app-runtime' -import { StoreContext } from '../../components/Store' import history from '../../services/history' import formatError from '../../services/format-error' @@ -11,14 +9,12 @@ const mutation = { } const useSubmitJob = () => { - const { refetchJobs } = useContext(StoreContext) const engine = useDataEngine() const submitJob = (job) => engine .mutate(mutation, { variables: { job } }) .then(() => { history.push('/') - refetchJobs() }) .catch((error) => { const isValidationError = error.type === 'access' diff --git a/src/hooks/jobs/use-submit-job.test.js b/src/hooks/jobs/use-submit-job.test.js index 2fa5dc2e4..3a9513b48 100644 --- a/src/hooks/jobs/use-submit-job.test.js +++ b/src/hooks/jobs/use-submit-job.test.js @@ -1,4 +1,3 @@ -import { useContext } from 'react' import { useDataEngine } from '@dhis2/app-runtime' import history from '../../services/history' import formatError from '../../services/format-error' @@ -8,11 +7,6 @@ jest.mock('@dhis2/app-runtime', () => ({ useDataEngine: jest.fn(), })) -jest.mock('react', () => ({ - ...jest.requireActual('react'), - useContext: jest.fn(() => ({ refetchJobs: () => {} })), -})) - jest.mock('../../services/history', () => ({ push: jest.fn(), })) @@ -20,20 +14,17 @@ jest.mock('../../services/history', () => ({ jest.mock('../../services/format-error', () => jest.fn()) describe('useSubmitJob', () => { - it('should redirect to root and refetch after a successful submit', () => { - const refetchspy = jest.fn() + it('should redirect to root', () => { const engine = { mutate: () => Promise.resolve(), } - useContext.mockImplementation(() => ({ refetchJobs: refetchspy })) useDataEngine.mockImplementation(() => engine) const [submitJob] = useSubmitJob() - expect.assertions(2) + expect.assertions(1) submitJob().then(() => { expect(history.push).toHaveBeenCalledWith('/') - expect(refetchspy).toHaveBeenCalled() }) }) diff --git a/src/hooks/jobs/use-update-job.js b/src/hooks/jobs/use-update-job.js index e16c8708c..4b53391fb 100644 --- a/src/hooks/jobs/use-update-job.js +++ b/src/hooks/jobs/use-update-job.js @@ -1,6 +1,4 @@ -import { useContext } from 'react' import { useDataEngine } from '@dhis2/app-runtime' -import { StoreContext } from '../../components/Store' import history from '../../services/history' import formatError from '../../services/format-error' @@ -12,14 +10,12 @@ const mutation = { } const useUpdateJob = ({ id }) => { - const { refetchJobs } = useContext(StoreContext) const engine = useDataEngine() const updateJob = (job) => engine .mutate(mutation, { variables: { job, id } }) .then(() => { history.push('/') - refetchJobs() }) .catch((error) => { const isValidationError = error.type === 'access' diff --git a/src/hooks/jobs/use-update-job.test.js b/src/hooks/jobs/use-update-job.test.js index 705d8f6cf..52d57b394 100644 --- a/src/hooks/jobs/use-update-job.test.js +++ b/src/hooks/jobs/use-update-job.test.js @@ -1,4 +1,3 @@ -import { useContext } from 'react' import { useDataEngine } from '@dhis2/app-runtime' import history from '../../services/history' import formatError from '../../services/format-error' @@ -8,11 +7,6 @@ jest.mock('@dhis2/app-runtime', () => ({ useDataEngine: jest.fn(), })) -jest.mock('react', () => ({ - ...jest.requireActual('react'), - useContext: jest.fn(() => ({ refetchJobs: () => {} })), -})) - jest.mock('../../services/history', () => ({ push: jest.fn(), })) @@ -20,20 +14,17 @@ jest.mock('../../services/history', () => ({ jest.mock('../../services/format-error', () => jest.fn()) describe('useUpdateJob', () => { - it('should redirect to root and refetch after a successful update', () => { - const refetchspy = jest.fn() + it('should redirect to root', () => { const engine = { mutate: () => Promise.resolve(), } - useContext.mockImplementation(() => ({ refetchJobs: refetchspy })) useDataEngine.mockImplementation(() => engine) const [updateJob] = useUpdateJob({ id: 'id' }) - expect.assertions(2) + expect.assertions(1) return updateJob().then(() => { expect(history.push).toHaveBeenCalledWith('/') - expect(refetchspy).toHaveBeenCalled() }) }) diff --git a/src/hooks/parameter-options/index.js b/src/hooks/parameter-options/index.js new file mode 100644 index 000000000..ee28b60fb --- /dev/null +++ b/src/hooks/parameter-options/index.js @@ -0,0 +1,3 @@ +import useParameterOption from './use-parameter-option' + +export { useParameterOption } diff --git a/src/hooks/parameter-options/use-parameter-option.js b/src/hooks/parameter-options/use-parameter-option.js new file mode 100644 index 000000000..c9c66b285 --- /dev/null +++ b/src/hooks/parameter-options/use-parameter-option.js @@ -0,0 +1,16 @@ +import useParameterOptions from './use-parameter-options' + +const useParameterOption = (parameter) => { + const fetch = useParameterOptions() + + // Select required parameter when there is data + if (fetch.data?.[parameter]) { + const data = fetch.data[parameter] + + return { ...fetch, data } + } + + return fetch +} + +export default useParameterOption diff --git a/src/hooks/parameter-options/use-parameter-option.test.js b/src/hooks/parameter-options/use-parameter-option.test.js new file mode 100644 index 000000000..39b4c3989 --- /dev/null +++ b/src/hooks/parameter-options/use-parameter-option.test.js @@ -0,0 +1,39 @@ +import React from 'react' +import { renderHook } from '@testing-library/react-hooks' +import { CustomDataProvider } from '@dhis2/app-runtime' +import useParameterOption from './use-parameter-option' + +describe('useParameterOption', () => { + it('should return the requested parameter option', async () => { + const parameter = 'validationRuleGroups' + const expected = 'expected' + const data = { + 'analytics/tableTypes': 'skipTableTypes', + validationRuleGroups: { + validationRuleGroups: expected, + }, + pushAnalysis: { pushAnalysis: 'pushAnalysis' }, + predictors: { predictors: 'predictors' }, + predictorGroups: { predictorGroups: 'predictorGroups' }, + dataIntegrity: 'dataIntegrityChecks', + } + const wrapper = ({ children }) => ( + {children} + ) + + const { result, waitFor } = renderHook( + () => useParameterOption(parameter), + { + wrapper, + } + ) + + await waitFor(() => { + expect(result.current).toMatchObject({ + loading: false, + error: undefined, + data: expected, + }) + }) + }) +}) diff --git a/src/hooks/parameter-options/use-parameter-options.js b/src/hooks/parameter-options/use-parameter-options.js new file mode 100644 index 000000000..dc43d6d6d --- /dev/null +++ b/src/hooks/parameter-options/use-parameter-options.js @@ -0,0 +1,64 @@ +import { useDataQuery } from '@dhis2/app-runtime' + +const query = { + skipTableTypes: { + resource: 'analytics/tableTypes', + }, + validationRuleGroups: { + resource: 'validationRuleGroups', + params: { + paging: false, + }, + }, + pushAnalysis: { + resource: 'pushAnalysis', + params: { + paging: false, + }, + }, + predictors: { + resource: 'predictors', + params: { + paging: false, + }, + }, + predictorGroups: { + resource: 'predictorGroups', + params: { + paging: false, + }, + }, + dataIntegrityChecks: { + resource: 'dataIntegrity', + }, +} + +const useParameterOptions = () => { + const fetch = useDataQuery(query) + + // Remove nesting from data + if (fetch.data) { + const { + skipTableTypes, + validationRuleGroups: { validationRuleGroups }, + pushAnalysis: { pushAnalysis }, + predictors: { predictors }, + predictorGroups: { predictorGroups }, + dataIntegrityChecks, + } = fetch.data + const data = { + skipTableTypes, + validationRuleGroups, + pushAnalysis, + predictors, + predictorGroups, + dataIntegrityChecks, + } + + return { ...fetch, data } + } + + return fetch +} + +export default useParameterOptions diff --git a/src/hooks/parameter-options/use-parameter-options.test.js b/src/hooks/parameter-options/use-parameter-options.test.js new file mode 100644 index 000000000..2ea1cd873 --- /dev/null +++ b/src/hooks/parameter-options/use-parameter-options.test.js @@ -0,0 +1,41 @@ +import React from 'react' +import { renderHook } from '@testing-library/react-hooks' +import { CustomDataProvider } from '@dhis2/app-runtime' +import useParameterOptions from './use-parameter-options' + +describe('useParameterOptions', () => { + it('should return the expected data without nesting', async () => { + const data = { + 'analytics/tableTypes': 'skipTableTypes', + validationRuleGroups: { + validationRuleGroups: 'validationRuleGroups', + }, + pushAnalysis: { pushAnalysis: 'pushAnalysis' }, + predictors: { predictors: 'predictors' }, + predictorGroups: { predictorGroups: 'predictorGroups' }, + dataIntegrity: 'dataIntegrityChecks', + } + const wrapper = ({ children }) => ( + {children} + ) + + const { result, waitFor } = renderHook(() => useParameterOptions(), { + wrapper, + }) + + await waitFor(() => { + expect(result.current).toMatchObject({ + loading: false, + error: undefined, + data: { + skipTableTypes: 'skipTableTypes', + validationRuleGroups: 'validationRuleGroups', + pushAnalysis: 'pushAnalysis', + predictors: 'predictors', + predictorGroups: 'predictorGroups', + dataIntegrityChecks: 'dataIntegrityChecks', + }, + }) + }) + }) +}) diff --git a/src/pages/JobAdd/JobAdd.js b/src/pages/JobAdd/JobAdd.js index 2a1d4a95a..dcd71c80a 100644 --- a/src/pages/JobAdd/JobAdd.js +++ b/src/pages/JobAdd/JobAdd.js @@ -1,5 +1,4 @@ -import React from 'react' -import { PropTypes } from '@dhis2/prop-types' +import React, { useState } from 'react' import { Card, IconInfo16 } from '@dhis2/ui' import i18n from '@dhis2/d2-i18n' import { DiscardFormButton } from '../../components/Buttons' @@ -9,45 +8,42 @@ import styles from './JobAdd.module.css' const infoLink = 'https://docs.dhis2.org/en/use/user-guides/dhis-core-version-236/maintaining-the-system/scheduling.html' -const JobAdd = ({ isPristine, setIsPristine }) => ( - -
- - {i18n.t('Back to all jobs')} - -

{i18n.t('New Job')}

-
- -
-

- {i18n.t('Configuration')} -

- { + const [isPristine, setIsPristine] = useState(true) + + return ( + +
+ - - - - {i18n.t('About job configuration')} - + {i18n.t('Back to all jobs')} + +

{i18n.t('New Job')}

- - - -) - -const { bool, func } = PropTypes - -JobAdd.propTypes = { - isPristine: bool.isRequired, - setIsPristine: func.isRequired, + +
+

+ {i18n.t('Configuration')} +

+ + + + + {i18n.t('About job configuration')} + +
+ +
+ + ) } export default JobAdd diff --git a/src/pages/JobAdd/JobAdd.test.js b/src/pages/JobAdd/JobAdd.test.js deleted file mode 100644 index 2863b9ff3..000000000 --- a/src/pages/JobAdd/JobAdd.test.js +++ /dev/null @@ -1,13 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' -import JobAdd from './JobAdd' - -describe('', () => { - it('renders without errors', () => { - const props = { - isPristine: false, - setIsPristine: () => {}, - } - shallow() - }) -}) diff --git a/src/pages/JobAdd/JobAddContainer.js b/src/pages/JobAdd/JobAddContainer.js deleted file mode 100644 index 6276474b4..000000000 --- a/src/pages/JobAdd/JobAddContainer.js +++ /dev/null @@ -1,10 +0,0 @@ -import React, { useState } from 'react' -import JobAdd from './JobAdd' - -const JobAddContainer = () => { - const [isPristine, setIsPristine] = useState(true) - - return -} - -export default JobAddContainer diff --git a/src/pages/JobAdd/JobAddContainer.test.js b/src/pages/JobAdd/JobAddContainer.test.js deleted file mode 100644 index a1d732560..000000000 --- a/src/pages/JobAdd/JobAddContainer.test.js +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' -import JobAddContainer from './JobAddContainer' - -describe('', () => { - it('renders without errors', () => { - shallow() - }) -}) diff --git a/src/pages/JobAdd/index.js b/src/pages/JobAdd/index.js index 1494fb601..ca7468d7a 100644 --- a/src/pages/JobAdd/index.js +++ b/src/pages/JobAdd/index.js @@ -1,3 +1,3 @@ -import JobAddContainer from './JobAddContainer' +import JobAdd from './JobAdd' -export { JobAddContainer } +export default JobAdd diff --git a/src/pages/JobEdit/JobEdit.js b/src/pages/JobEdit/JobEdit.js index 165800063..81e3eb1ca 100644 --- a/src/pages/JobEdit/JobEdit.js +++ b/src/pages/JobEdit/JobEdit.js @@ -1,77 +1,80 @@ -import React from 'react' -import { PropTypes } from '@dhis2/prop-types' +import React, { useState } from 'react' import { Card, IconInfo16 } from '@dhis2/ui' +import { useParams } from 'react-router-dom' import i18n from '@dhis2/d2-i18n' +import { useJobById } from '../../hooks/jobs' import { DiscardFormButton } from '../../components/Buttons' import { JobEditFormContainer } from '../../components/Forms' import { JobDetails } from '../../components/JobDetails' +import { Spinner } from '../../components/Spinner' import styles from './JobEdit.module.css' const infoLink = 'https://docs.dhis2.org/en/use/user-guides/dhis-core-version-236/maintaining-the-system/scheduling.html' -const JobEdit = ({ - isPristine, - setIsPristine, - name, - created, - lastExecutedStatus, - lastExecuted, -}) => ( - -
- - {i18n.t('Back to all jobs')} - -

- {i18n.t('Job: {{ name }}', { - name, - nsSeparator: '>', - })} -

-
- -
-

- {i18n.t('Configuration')} -

- { + const [isPristine, setIsPristine] = useState(true) + const { id } = useParams() + const { data, loading, error } = useJobById(id) + + if (loading) { + return + } + + if (error) { + throw error + } + + const { name, created, lastExecutedStatus, lastExecuted } = data + + return ( + +
+ - - - - {i18n.t('About job configuration')} - + {i18n.t('Back to all jobs')} + +

+ {i18n.t('Job: {{ name }}', { + name, + nsSeparator: '>', + })} +

-
- +
+

+ {i18n.t('Configuration')} +

+ + + + + {i18n.t('About job configuration')} + +
+
+ +
+ -
- - - -) - -const { bool, func, string } = PropTypes - -JobEdit.propTypes = { - created: string.isRequired, - isPristine: bool.isRequired, - lastExecuted: string.isRequired, - lastExecutedStatus: string.isRequired, - name: string.isRequired, - setIsPristine: func.isRequired, + + + ) } export default JobEdit diff --git a/src/pages/JobEdit/JobEdit.test.js b/src/pages/JobEdit/JobEdit.test.js deleted file mode 100644 index 6890fe4c4..000000000 --- a/src/pages/JobEdit/JobEdit.test.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' -import JobEdit from './JobEdit' - -describe('', () => { - it('renders without errors', () => { - const props = { - isPristine: false, - setIsPristine: () => {}, - name: 'name', - created: 'now', - lastExecutedStatus: 'COMPLETED', - lastExecuted: 'now', - } - shallow() - }) -}) diff --git a/src/pages/JobEdit/JobEditContainer.js b/src/pages/JobEdit/JobEditContainer.js deleted file mode 100644 index 9cc40037d..000000000 --- a/src/pages/JobEdit/JobEditContainer.js +++ /dev/null @@ -1,23 +0,0 @@ -import React, { useState } from 'react' -import { useParams } from 'react-router-dom' -import { hooks } from '../../components/Store' -import JobEdit from './JobEdit' - -const JobEditContainer = () => { - const [isPristine, setIsPristine] = useState(true) - const { id } = useParams() - const job = hooks.useJob(id) - - return ( - - ) -} - -export default JobEditContainer diff --git a/src/pages/JobEdit/JobEditContainer.test.js b/src/pages/JobEdit/JobEditContainer.test.js deleted file mode 100644 index f5ebd87ff..000000000 --- a/src/pages/JobEdit/JobEditContainer.test.js +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' -import { useParams } from 'react-router-dom' -import { StoreContext } from '../../components/Store' -import JobEditContainer from './JobEditContainer' - -jest.mock('react-router-dom', () => ({ - useParams: jest.fn(), -})) - -afterEach(() => { - jest.resetAllMocks() -}) - -describe('', () => { - it('renders without errors when there is data', () => { - const id = 'one' - const store = { - jobs: [ - { - id, - name: 'name', - created: 'now', - lastExecutedStatus: 'COMPLETED', - lastExecuted: 'now', - }, - ], - } - - useParams.mockImplementation(() => id) - - shallow( - - - - ) - }) -}) diff --git a/src/pages/JobEdit/index.js b/src/pages/JobEdit/index.js index 172022b32..4be028647 100644 --- a/src/pages/JobEdit/index.js +++ b/src/pages/JobEdit/index.js @@ -1,3 +1,3 @@ -import JobEditContainer from './JobEditContainer' +import JobEdit from './JobEdit' -export { JobEditContainer } +export default JobEdit diff --git a/src/pages/JobList/JobList.js b/src/pages/JobList/JobList.js index 10ac9cc26..154889cb0 100644 --- a/src/pages/JobList/JobList.js +++ b/src/pages/JobList/JobList.js @@ -1,74 +1,87 @@ import React from 'react' -import { PropTypes } from '@dhis2/prop-types' import { Card, Checkbox, InputField, IconInfo16 } from '@dhis2/ui' import i18n from '@dhis2/d2-i18n' +import { useJobSchedules } from '../../hooks/job-schedules' +import { useJobFilter, useShowSystemJobs } from '../../components/Store' import { JobTable } from '../../components/JobTable' import { LinkButton } from '../../components/LinkButton' +import { Spinner } from '../../components/Spinner' import styles from './JobList.module.css' const infoLink = 'https://docs.dhis2.org/en/use/user-guides/dhis-core-version-236/maintaining-the-system/scheduling.html' -const JobList = ({ - jobs, - showSystemJobs, - setShowSystemJobs, - jobFilter, - setJobFilter, -}) => ( - -
-

{i18n.t('Scheduled jobs')}

- - - - - {i18n.t('About job configuration')} - -
- -
- { - setJobFilter(value) - }} - value={jobFilter} - type="search" - role="searchbox" - name="job-filter" - /> -
- { - setShowSystemJobs(checked) +const JobList = () => { + const [jobFilter, setJobFilter] = useJobFilter() + const [showSystemJobs, setShowSystemJobs] = useShowSystemJobs() + const { data, loading, error, refetch } = useJobSchedules() + + if (loading) { + return + } + + if (error) { + throw error + } + + // Filter jobs by the current jobFilter + const applyJobFilter = (job) => + job.name.toLowerCase().includes(jobFilter.toLowerCase()) + + // Filter jobs depending on the current showSystemJobs + const applyShowSystemJobs = (job) => + // Jobs that are configurable are user jobs + showSystemJobs ? true : job.configurable + + const jobs = data.filter(applyJobFilter).filter(applyShowSystemJobs) + + return ( + +
+

+ {i18n.t('Scheduled jobs')} +

+ + + + + {i18n.t('About job configuration')} + +
+ +
+ { + setJobFilter(value) }} + value={jobFilter} + type="search" + role="searchbox" + name="job-filter" /> - {i18n.t('New job')} +
+ { + setShowSystemJobs(checked) + }} + /> + {i18n.t('New job')} +
-
- - - -) - -const { bool, object, string, arrayOf, func } = PropTypes - -JobList.propTypes = { - jobFilter: string.isRequired, - jobs: arrayOf(object).isRequired, - setJobFilter: func.isRequired, - setShowSystemJobs: func.isRequired, - showSystemJobs: bool.isRequired, + + + + ) } export default JobList diff --git a/src/pages/JobList/JobList.test.js b/src/pages/JobList/JobList.test.js deleted file mode 100644 index 7fd22b075..000000000 --- a/src/pages/JobList/JobList.test.js +++ /dev/null @@ -1,57 +0,0 @@ -import React from 'react' -import { mount } from 'enzyme' -import JobList from './JobList' - -jest.mock('react-router-dom', () => ({ Link: (props) => })) - -jest.mock('../../components/JobTable', () => ({ JobTable: () => null })) - -jest.mock('../../services/history', () => ({ - push: jest.fn(), -})) - -afterEach(() => { - jest.resetAllMocks() -}) - -describe('', () => { - it('calls setJobFilter with changes to the job filter input', () => { - const spy = jest.fn() - const props = { - jobs: [{ id: 'one' }], - isLoading: false, - showSystemJobs: false, - setShowSystemJobs: () => {}, - jobFilter: '', - setJobFilter: spy, - } - const wrapper = mount() - - wrapper - .find({ 'data-test': 'job-filter-input' }) - .find('input') - .simulate('change', { target: { value: 'Change' } }) - - expect(spy).toHaveBeenCalledWith('Change') - }) - - it('calls setShowSystemJobs when the show system jobs toggle is clicked', () => { - const spy = jest.fn() - const props = { - jobs: [{ id: 'one' }], - isLoading: false, - showSystemJobs: false, - setShowSystemJobs: spy, - jobFilter: '', - setJobFilter: () => {}, - } - const wrapper = mount() - - wrapper - .find({ 'data-test': 'job-toggle-checkbox' }) - .find('input') - .simulate('change', { target: { value: !props.showSystemJobs } }) - - expect(spy).toHaveBeenCalledWith(true) - }) -}) diff --git a/src/pages/JobList/JobListContainer.js b/src/pages/JobList/JobListContainer.js deleted file mode 100644 index 273acd488..000000000 --- a/src/pages/JobList/JobListContainer.js +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react' -import { hooks } from '../../components/Store' -import JobList from './JobList' - -const JobListContainer = () => { - const [jobFilter, setJobFilter] = hooks.useJobFilter() - const [showSystemJobs, setShowSystemJobs] = hooks.useShowSystemJobs() - const jobs = hooks.useJobListJobs() - - return ( - - ) -} - -export default JobListContainer diff --git a/src/pages/JobList/JobListContainer.test.js b/src/pages/JobList/JobListContainer.test.js deleted file mode 100644 index 8c37ac111..000000000 --- a/src/pages/JobList/JobListContainer.test.js +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react' -import { shallow } from 'enzyme' -import { StoreContext } from '../../components/Store' -import JobListContainer from './JobListContainer' - -describe('', () => { - it('renders without errors when there is data', () => { - const store = { - jobs: [ - { id: 'one', name: 'one' }, - { id: 'two', name: 'two' }, - ], - jobFilter: ['', () => {}], - showSystemJobs: [false, () => {}], - } - - shallow( - - - - ) - }) -}) diff --git a/src/pages/JobList/index.js b/src/pages/JobList/index.js index 5db904f2f..49bb3c7e4 100644 --- a/src/pages/JobList/index.js +++ b/src/pages/JobList/index.js @@ -1,3 +1,3 @@ -import JobListContainer from './JobListContainer' +import JobList from './JobList' -export { JobListContainer } +export default JobList diff --git a/src/pages/JobView/JobView.js b/src/pages/JobView/JobView.js index 99c412dd4..8e4a42f08 100644 --- a/src/pages/JobView/JobView.js +++ b/src/pages/JobView/JobView.js @@ -9,11 +9,12 @@ import { InputField, } from '@dhis2/ui' import i18n from '@dhis2/d2-i18n' -import { hooks } from '../../components/Store' import { LinkButton } from '../../components/LinkButton' import { JobDetails } from '../../components/JobDetails' +import { useJobById } from '../../hooks/jobs' import translateCron from '../../services/translate-cron' import { jobTypesMap } from '../../services/server-translations' +import { Spinner } from '../../components/Spinner' import styles from './JobView.module.css' const infoLink = @@ -21,6 +22,16 @@ const infoLink = const JobView = () => { const { id } = useParams() + const { data, loading, error } = useJobById(id) + + if (loading) { + return + } + + if (error) { + throw error + } + const { name, created, @@ -28,7 +39,7 @@ const JobView = () => { lastExecuted, jobType, cronExpression, - } = hooks.useJob(id) + } = data return ( diff --git a/src/pages/JobView/JobView.test.js b/src/pages/JobView/JobView.test.js deleted file mode 100644 index ab0a8f118..000000000 --- a/src/pages/JobView/JobView.test.js +++ /dev/null @@ -1,40 +0,0 @@ -import React from 'react' -import { useParams } from 'react-router-dom' -import { shallow } from 'enzyme' -import { StoreContext } from '../../components/Store' -import JobView from './JobView' - -jest.mock('react-router-dom', () => ({ - useParams: jest.fn(), -})) - -afterEach(() => { - jest.resetAllMocks() -}) - -describe('', () => { - it('renders without errors', () => { - const id = 'one' - const store = { - jobs: [ - { - id, - jobType: 'DATA_SET_NOTIFICATION', - cronExpression: '0 0 2 * * ?', - name: 'name', - created: 'now', - lastExecutedStatus: 'COMPLETED', - lastExecuted: 'now', - }, - ], - } - - useParams.mockImplementation(() => id) - - shallow( - - - - ) - }) -}) diff --git a/src/pages/JobView/index.js b/src/pages/JobView/index.js index 4c10e269b..616015034 100644 --- a/src/pages/JobView/index.js +++ b/src/pages/JobView/index.js @@ -1,3 +1,3 @@ import JobView from './JobView' -export { JobView } +export default JobView diff --git a/src/services/server-translations/jobTypesMap.js b/src/services/server-translations/jobTypesMap.js index 813197050..c39ad7ce6 100644 --- a/src/services/server-translations/jobTypesMap.js +++ b/src/services/server-translations/jobTypesMap.js @@ -1,27 +1,54 @@ import i18n from '@dhis2/d2-i18n' const jobTypesMap = { + ACCOUNT_EXPIRY_ALERT: i18n.t('Account expiry alert'), + AGGREGATE_DATA_EXCHANGE: i18n.t('Exchange aggregate data'), ANALYTICS_TABLE: i18n.t('Analytics table'), + ANALYTICSTABLE_UPDATE: i18n.t('Analyticstable update'), + COMPLETE_DATA_SET_REGISTRATION_IMPORT: i18n.t( + 'Complete data set registration import' + ), CONTINUOUS_ANALYTICS_TABLE: i18n.t('Continuous analytics table'), CREDENTIALS_EXPIRY_ALERT: i18n.t('Credentials expiry alert'), DATA_INTEGRITY: i18n.t('Data integrity'), DATA_SET_NOTIFICATION: i18n.t('Dataset notification'), DATA_STATISTICS: i18n.t('Data statistics'), DATA_SYNC: i18n.t('Data synchronization'), + DATAVALUE_IMPORT: i18n.t('Datavalue import'), + DATAVALUE_IMPORT_INTERNAL: i18n.t('Datavalue import internal'), + DISABLE_INACTIVE_USERS: i18n.t('Disable inactive users'), + ENROLLMENT_IMPORT: i18n.t('Enrollment import'), + EVENT_IMPORT: i18n.t('Event import'), EVENT_PROGRAMS_DATA_SYNC: i18n.t('Event programs data sync'), FILE_RESOURCE_CLEANUP: i18n.t('File resource clean up'), + GEOJSON_IMPORT: i18n.t('GEOJSON import'), + GML_IMPORT: i18n.t('GML import'), + IMAGE_PROCESSING: i18n.t('Image processing'), + LEADER_ELECTION: i18n.t('Leader election'), + LEADER_RENEWAL: i18n.t('Leader renewal'), + METADATA_IMPORT: i18n.t('Metadata import'), META_DATA_SYNC: i18n.t('Metadata synchronization'), + MOCK: i18n.t('Mock'), MONITORING: i18n.t('Monitoring'), PREDICTOR: i18n.t('Predictor'), + PROGRAM_DATA_SYNC: i18n.t('Program data sync'), PROGRAM_NOTIFICATIONS: i18n.t('Program notifications'), PUSH_ANALYSIS: i18n.t('Push analysis'), REMOVE_EXPIRED_RESERVED_VALUES: i18n.t('Remove expired reserved values'), + REMOVE_USED_OR_EXPIRED_RESERVED_VALUES: i18n.t( + 'Remove used or expired reserved values' + ), RESOURCE_TABLE: i18n.t('Resource table'), SEND_SCHEDULED_MESSAGE: i18n.t('Send scheduled message'), + SMS_SEND: i18n.t('SMS send'), + SYSTEM_VERSION_UPDATE_CHECK: i18n.t('System version update check'), + TEI_IMPORT: i18n.t('TEI import'), + TRACKER_IMPORT_JOB: i18n.t('Tracker import job'), + TRACKER_IMPORT_NOTIFICATION_JOB: i18n.t('Tracker import notification job'), + TRACKER_IMPORT_RULE_ENGINE_JOB: i18n.t('Tracker import rule engine job'), TRACKER_PROGRAMS_DATA_SYNC: i18n.t('Tracker programs data sync'), + TRACKER_SEARCH_OPTIMIZATION: i18n.t('Tracker search optimization'), VALIDATION_RESULTS_NOTIFICATION: i18n.t('Validation results notification'), - DISABLE_INACTIVE_USERS: i18n.t('Disable inactive users'), - AGGREGATE_DATA_EXCHANGE: i18n.t('Exchange aggregate data'), } export default jobTypesMap diff --git a/yarn.lock b/yarn.lock index 17941fbc8..fed50a7ec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,13 +2,6 @@ # yarn lockfile v1 -"@ampproject/remapping@^2.1.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34" - integrity sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg== - dependencies: - "@jridgewell/trace-mapping" "^0.3.0" - "@apideck/better-ajv-errors@^0.2.4": version "0.2.5" resolved "https://registry.yarnpkg.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.2.5.tgz#b9c0092b7f7f23c356a0a31600334f7b8958458b" @@ -53,13 +46,6 @@ dependencies: "@babel/highlight" "^7.14.5" -"@babel/code-frame@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== - dependencies: - "@babel/highlight" "^7.16.7" - "@babel/compat-data@^7.12.1", "@babel/compat-data@^7.13.0", "@babel/compat-data@^7.13.8": version "7.13.8" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.8.tgz#5b783b9808f15cef71547f1b691f34f8ff6003a6" @@ -75,11 +61,6 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== -"@babel/compat-data@^7.16.4", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.0.tgz#86850b8597ea6962089770952075dcaabb8dba34" - integrity sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng== - "@babel/core@7.12.3": version "7.12.3" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8" @@ -102,7 +83,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@>=7.9.0", "@babel/core@^7.1.0", "@babel/core@^7.1.6", "@babel/core@^7.12.3", "@babel/core@^7.6.2", "@babel/core@^7.7.5", "@babel/core@^7.8.4": +"@babel/core@>=7.9.0", "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.6.2", "@babel/core@^7.7.5", "@babel/core@^7.8.4": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.10.tgz#07de050bbd8193fcd8a3c27918c0890613a94559" integrity sha512-bfIYcT0BdKeAZrovpMqX2Mx5NrgAckGbwT982AkdS5GNfn3KMGiprlBAtmBcFZRUmpaufS6WZFP8trvx8ptFDw== @@ -145,27 +126,6 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/core@^7.16.0": - version "7.17.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.5.tgz#6cd2e836058c28f06a4ca8ee7ed955bbf37c8225" - integrity sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.3" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helpers" "^7.17.2" - "@babel/parser" "^7.17.3" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - "@babel/generator@^7.12.1", "@babel/generator@^7.13.0", "@babel/generator@^7.13.9": version "7.13.9" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" @@ -202,15 +162,6 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.17.3": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.3.tgz#a2c30b0c4f89858cb87050c3ffdfd36bdf443200" - integrity sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg== - dependencies: - "@babel/types" "^7.17.0" - jsesc "^2.5.1" - source-map "^0.5.0" - "@babel/generator@^7.8.6": version "7.8.7" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.7.tgz#870b3cf7984f5297998152af625c4f3e341400f7" @@ -249,13 +200,6 @@ dependencies: "@babel/types" "^7.15.4" -"@babel/helper-annotate-as-pure@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" - integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc" @@ -272,14 +216,6 @@ "@babel/helper-explode-assignable-expression" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" - integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.16.7" - "@babel/types" "^7.16.7" - "@babel/helper-compilation-targets@^7.12.1", "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.10", "@babel/helper-compilation-targets@^7.13.8": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.10.tgz#1310a1678cb8427c07a753750da4f8ce442bdd0c" @@ -310,16 +246,6 @@ browserslist "^4.16.6" semver "^6.3.0" -"@babel/helper-compilation-targets@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" - integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== - dependencies: - "@babel/compat-data" "^7.16.4" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.17.5" - semver "^6.3.0" - "@babel/helper-create-class-features-plugin@^7.12.1", "@babel/helper-create-class-features-plugin@^7.13.0": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.10.tgz#073b2bbb925a097643c6fc5770e5f13394e887c9" @@ -366,19 +292,6 @@ "@babel/helper-replace-supers" "^7.15.4" "@babel/helper-split-export-declaration" "^7.15.4" -"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.17.6": - version "7.17.6" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz#3778c1ed09a7f3e65e6d6e0f6fbfcc53809d92c9" - integrity sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-create-regexp-features-plugin@^7.10.1": version "7.10.1" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz#1b8feeab1594cbcfbf3ab5a3bbcabac0468efdbd" @@ -404,14 +317,6 @@ "@babel/helper-annotate-as-pure" "^7.14.5" regexpu-core "^4.7.1" -"@babel/helper-create-regexp-features-plugin@^7.16.7": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz#1dcc7d40ba0c6b6b25618997c5dbfd310f186fe1" - integrity sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - regexpu-core "^5.0.1" - "@babel/helper-define-polyfill-provider@^0.1.5": version "0.1.5" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz#3c2f91b7971b9fc11fe779c945c014065dea340e" @@ -440,27 +345,6 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-define-polyfill-provider@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" - integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-environment-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" - integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-explode-assignable-expression@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.13.tgz#0e46990da9e271502f77507efa4c9918d3d8634a" @@ -475,13 +359,6 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-explode-assignable-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" - integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-function-name@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" @@ -509,15 +386,6 @@ "@babel/template" "^7.15.4" "@babel/types" "^7.15.4" -"@babel/helper-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" - integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== - dependencies: - "@babel/helper-get-function-arity" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/types" "^7.16.7" - "@babel/helper-function-name@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" @@ -548,13 +416,6 @@ dependencies: "@babel/types" "^7.15.4" -"@babel/helper-get-function-arity@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" - integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-get-function-arity@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" @@ -584,13 +445,6 @@ dependencies: "@babel/types" "^7.15.4" -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-member-expression-to-functions@^7.12.13", "@babel/helper-member-expression-to-functions@^7.12.16": version "7.12.16" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.16.tgz#41e0916b99f8d5f43da4f05d85f4930fa3d62b22" @@ -619,13 +473,6 @@ dependencies: "@babel/types" "^7.15.4" -"@babel/helper-member-expression-to-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" - integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-module-imports@^7.0.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" @@ -654,13 +501,6 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-module-imports@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz#42eb4bd8eea68bab46751212c357bfed8b40f6f1" @@ -676,21 +516,6 @@ "@babel/types" "^7.13.0" lodash "^4.17.19" -"@babel/helper-module-transforms@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.13.tgz#01afb052dcad2044289b7b20beb3fa8bd0265bea" - integrity sha512-acKF7EjqOR67ASIlDTupwkKM1eUisNAjaSduo5Cz+793ikfnpe7p4Q7B7EWU2PCoSTPWsQkR7hRUWEIZPiVLGA== - dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-replace-supers" "^7.12.13" - "@babel/helper-simple-access" "^7.12.13" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/helper-validator-identifier" "^7.12.11" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.12.13" - "@babel/types" "^7.12.13" - lodash "^4.17.19" - "@babel/helper-module-transforms@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e" @@ -719,20 +544,6 @@ "@babel/traverse" "^7.15.4" "@babel/types" "^7.15.4" -"@babel/helper-module-transforms@^7.16.7": - version "7.17.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz#3c3b03cc6617e33d68ef5a27a67419ac5199ccd0" - integrity sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" - "@babel/helper-optimise-call-expression@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" @@ -754,13 +565,6 @@ dependencies: "@babel/types" "^7.15.4" -"@babel/helper-optimise-call-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" - integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" @@ -786,11 +590,6 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== -"@babel/helper-plugin-utils@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" - integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== - "@babel/helper-regex@^7.10.1": version "7.10.1" resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.1.tgz#021cf1a7ba99822f993222a001cc3fec83255b96" @@ -825,15 +624,6 @@ "@babel/helper-wrap-function" "^7.15.4" "@babel/types" "^7.15.4" -"@babel/helper-remap-async-to-generator@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" - integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-wrap-function" "^7.16.8" - "@babel/types" "^7.16.8" - "@babel/helper-replace-supers@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.13.tgz#00ec4fb6862546bd3d0aff9aac56074277173121" @@ -874,17 +664,6 @@ "@babel/traverse" "^7.15.4" "@babel/types" "^7.15.4" -"@babel/helper-replace-supers@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" - integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - "@babel/helper-simple-access@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz#8478bcc5cacf6aa1672b251c1d2dde5ccd61a6c4" @@ -906,13 +685,6 @@ dependencies: "@babel/types" "^7.15.4" -"@babel/helper-simple-access@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" - integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" @@ -934,13 +706,6 @@ dependencies: "@babel/types" "^7.15.4" -"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" - integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== - dependencies: - "@babel/types" "^7.16.0" - "@babel/helper-split-export-declaration@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" @@ -962,13 +727,6 @@ dependencies: "@babel/types" "^7.15.4" -"@babel/helper-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-split-export-declaration@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" @@ -996,11 +754,6 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48" integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g== -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - "@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.12.17": version "7.12.17" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" @@ -1016,11 +769,6 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== -"@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== - "@babel/helper-wrap-function@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" @@ -1051,16 +799,6 @@ "@babel/traverse" "^7.15.4" "@babel/types" "^7.15.4" -"@babel/helper-wrap-function@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" - integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== - dependencies: - "@babel/helper-function-name" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.8" - "@babel/types" "^7.16.8" - "@babel/helpers@^7.12.1", "@babel/helpers@^7.13.10": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.10.tgz#fd8e2ba7488533cdeac45cc158e9ebca5e3c7df8" @@ -1079,15 +817,6 @@ "@babel/traverse" "^7.15.4" "@babel/types" "^7.15.4" -"@babel/helpers@^7.17.2": - version "7.17.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.2.tgz#23f0a0746c8e287773ccd27c14be428891f63417" - integrity sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ== - dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.0" - "@babel/types" "^7.17.0" - "@babel/highlight@^7.10.4": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" @@ -1115,15 +844,6 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/highlight@^7.16.7": - version "7.16.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" - integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - chalk "^2.0.0" - js-tokens "^4.0.0" - "@babel/highlight@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797" @@ -1138,11 +858,6 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.7.tgz#7b8facf95d25fef9534aad51c4ffecde1a61e26a" integrity sha512-9JWls8WilDXFGxs0phaXAZgpxTZhSk/yOYH2hTHC0X1yC7Z78IJfvR1vJ+rmJKq3I35td2XzXzN6ZLYlna+r/A== -"@babel/parser@^7.1.6": - version "7.12.16" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.16.tgz#cc31257419d2c3189d394081635703f549fc1ed4" - integrity sha512-c/+u9cqV6F0+4Hpq01jnJO+GLp2DdT63ppz9Xa+6cHaajM9VFzK/iDXiKK65YtpeVwu+ctfS6iqlMqRgQRzeCw== - "@babel/parser@^7.12.13": version "7.12.17" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.17.tgz#bc85d2d47db38094e5bb268fc761716e7d693848" @@ -1163,17 +878,10 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.5.tgz#d33a58ca69facc05b26adfe4abebfed56c1c2dac" integrity sha512-2hQstc6I7T6tQsWzlboMh3SgMRPaS4H6H7cPQsJkdzTzEGqQrpLDsE2BGASU5sBPoEQyHzeqU6C8uKbFeEk6sg== -"@babel/parser@^7.16.7", "@babel/parser@^7.17.3": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.3.tgz#b07702b982990bf6fdc1da5049a23fece4c5c3d0" - integrity sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" - integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" +"@babel/parser@^7.18.8": + version "7.21.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.2.tgz#dacafadfc6d7654c3051a66d6fe55b6cb2f2a0b3" + integrity sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ== "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5": version "7.14.5" @@ -1193,15 +901,6 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4" "@babel/plugin-proposal-optional-chaining" "^7.14.5" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" - integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-async-generator-functions@^7.12.1", "@babel/plugin-proposal-async-generator-functions@^7.13.8": version "7.13.8" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz#87aacb574b3bc4b5603f6fe41458d72a5a2ec4b1" @@ -1229,15 +928,6 @@ "@babel/helper-remap-async-to-generator" "^7.15.4" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-async-generator-functions@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" - integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-remap-async-to-generator" "^7.16.8" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-proposal-class-properties@7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" @@ -1246,7 +936,7 @@ "@babel/helper-create-class-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.8.3": +"@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.8.3": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37" integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== @@ -1262,14 +952,6 @@ "@babel/helper-create-class-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-proposal-class-properties@^7.16.0", "@babel/plugin-proposal-class-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" - integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-proposal-class-static-block@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz#158e9e10d449c3849ef3ecde94a03d9f1841b681" @@ -1288,15 +970,6 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-proposal-class-static-block@^7.16.7": - version "7.17.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz#164e8fd25f0d80fa48c5a4d1438a6629325ad83c" - integrity sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.6" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-proposal-decorators@7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz#59271439fed4145456c41067450543aee332d15f" @@ -1322,14 +995,6 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-dynamic-import@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" - integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-proposal-export-namespace-from@^7.12.1", "@babel/plugin-proposal-export-namespace-from@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz#393be47a4acd03fa2af6e3cde9b06e33de1b446d" @@ -1346,14 +1011,6 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" - integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-proposal-json-strings@^7.12.1", "@babel/plugin-proposal-json-strings@^7.13.8": version "7.13.8" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz#bf1fb362547075afda3634ed31571c5901afef7b" @@ -1370,14 +1027,6 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" - integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-proposal-logical-assignment-operators@^7.12.1", "@babel/plugin-proposal-logical-assignment-operators@^7.13.8": version "7.13.8" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz#93fa78d63857c40ce3c8c3315220fd00bfbb4e1a" @@ -1394,14 +1043,6 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" - integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-proposal-nullish-coalescing-operator@7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" @@ -1410,7 +1051,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.1.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8", "@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": +"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8", "@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": version "7.13.8" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz#3730a31dafd3c10d8ccd10648ed80a2ac5472ef3" integrity sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A== @@ -1426,14 +1067,6 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" - integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-proposal-numeric-separator@7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz#0e2c6774c4ce48be412119b4d693ac777f7685a6" @@ -1458,14 +1091,6 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-numeric-separator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" - integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-proposal-object-rest-spread@^7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.13.8": version "7.13.8" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz#5d210a4d727d6ce3b18f9de82cc99a3964eed60a" @@ -1488,17 +1113,6 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.14.5" -"@babel/plugin-proposal-object-rest-spread@^7.16.0", "@babel/plugin-proposal-object-rest-spread@^7.16.7": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz#d9eb649a54628a51701aef7e0ea3d17e2b9dd390" - integrity sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw== - dependencies: - "@babel/compat-data" "^7.17.0" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.16.7" - "@babel/plugin-proposal-optional-catch-binding@^7.12.1", "@babel/plugin-proposal-optional-catch-binding@^7.13.8": version "7.13.8" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz#3ad6bd5901506ea996fc31bdcf3ccfa2bed71107" @@ -1515,14 +1129,6 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-catch-binding@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" - integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining@7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz#cce122203fc8a32794296fc377c6dedaf4363797" @@ -1532,7 +1138,7 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.1.0", "@babel/plugin-proposal-optional-chaining@^7.12.1", "@babel/plugin-proposal-optional-chaining@^7.13.8", "@babel/plugin-proposal-optional-chaining@^7.8.3": +"@babel/plugin-proposal-optional-chaining@^7.12.1", "@babel/plugin-proposal-optional-chaining@^7.13.8", "@babel/plugin-proposal-optional-chaining@^7.8.3": version "7.13.8" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.8.tgz#e39df93efe7e7e621841babc197982e140e90756" integrity sha512-hpbBwbTgd7Cz1QryvwJZRo1U0k1q8uyBmeXOSQUjdg/A2TASkhR/rz7AyqZ/kS8kbpsNA80rOYbxySBJAqmhhQ== @@ -1550,15 +1156,6 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" - integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-proposal-private-methods@^7.12.1", "@babel/plugin-proposal-private-methods@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz#04bd4c6d40f6e6bbfa2f57e2d8094bad900ef787" @@ -1575,14 +1172,6 @@ "@babel/helper-create-class-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-proposal-private-methods@^7.16.11": - version "7.16.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" - integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.10" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-proposal-private-property-in-object@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz#9f65a4d0493a940b4c01f8aa9d3f1894a587f636" @@ -1603,16 +1192,6 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-private-property-in-object@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" - integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba" @@ -1629,14 +1208,6 @@ "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" - integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.10.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.1.tgz#dc04feb25e2dd70c12b05d680190e138fa2c0c6f" @@ -1701,7 +1272,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.12.1", "@babel/plugin-syntax-flow@^7.12.13": +"@babel/plugin-syntax-flow@^7.12.1": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.13.tgz#5df9962503c0a9c918381c929d51d4d6949e7e86" integrity sha512-J/RYxnlSLXZLVR7wTRsozxKT8qbsx1mNKJzXEEjQ0Kjx1ZACcyHgbanNWNCFtc36IzuWhYWPpvJFFoexoOWFmA== @@ -1736,13 +1307,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-jsx@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz#50b6571d13f764266a113d77c82b4a6508bbe665" - integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -1848,13 +1412,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-arrow-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" - integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-transform-async-to-generator@^7.12.1", "@babel/plugin-transform-async-to-generator@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f" @@ -1873,15 +1430,6 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-remap-async-to-generator" "^7.14.5" -"@babel/plugin-transform-async-to-generator@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" - integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-remap-async-to-generator" "^7.16.8" - "@babel/plugin-transform-block-scoped-functions@^7.12.1", "@babel/plugin-transform-block-scoped-functions@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4" @@ -1896,13 +1444,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-block-scoped-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" - integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-transform-block-scoping@^7.12.1", "@babel/plugin-transform-block-scoping@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz#f36e55076d06f41dfd78557ea039c1b581642e61" @@ -1924,13 +1465,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-block-scoping@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" - integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz#0265155075c42918bf4d3a4053134176ad9b533b" @@ -1970,20 +1504,6 @@ "@babel/helper-split-export-declaration" "^7.15.4" globals "^11.1.0" -"@babel/plugin-transform-classes@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" - integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - globals "^11.1.0" - "@babel/plugin-transform-computed-properties@^7.12.1", "@babel/plugin-transform-computed-properties@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed" @@ -1998,13 +1518,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-computed-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" - integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-transform-destructuring@^7.12.1", "@babel/plugin-transform-destructuring@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz#c5dce270014d4e1ebb1d806116694c12b7028963" @@ -2019,13 +1532,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-destructuring@^7.16.7": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz#c445f75819641788a27a0a3a759d9df911df6abc" - integrity sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz#3f1601cc29905bfcb67f53910f197aeafebb25ad" @@ -2042,14 +1548,6 @@ "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-dotall-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" - integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.10.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.1.tgz#920b9fec2d78bb57ebb64a644d5c2ba67cc104ee" @@ -2072,13 +1570,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-duplicate-keys@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" - integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-transform-exponentiation-operator@^7.12.1", "@babel/plugin-transform-exponentiation-operator@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz#4d52390b9a273e651e4aba6aee49ef40e80cd0a1" @@ -2095,14 +1586,6 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-exponentiation-operator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" - integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-transform-flow-strip-types@7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz#8430decfa7eb2aea5414ed4a3fa6e1652b7d77c4" @@ -2111,14 +1594,6 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-flow" "^7.12.1" -"@babel/plugin-transform-flow-strip-types@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.13.tgz#b439c43116dc60fb45b7efd2e1db91897b7c8f4b" - integrity sha512-39/t9HtN+Jlc7EEY6oCSCf3kRrKIl2JULOGPnHZiaRjoYZEFaDXDZI32uE2NosQRh8o6N9B+8iGvDK7ToJhJaw== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-flow" "^7.12.13" - "@babel/plugin-transform-for-of@^7.12.1", "@babel/plugin-transform-for-of@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062" @@ -2140,13 +1615,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-for-of@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" - integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-transform-function-name@^7.12.1", "@babel/plugin-transform-function-name@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051" @@ -2163,15 +1631,6 @@ "@babel/helper-function-name" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" - integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== - dependencies: - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-transform-literals@^7.12.1", "@babel/plugin-transform-literals@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9" @@ -2186,13 +1645,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" - integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-transform-member-expression-literals@^7.12.1", "@babel/plugin-transform-member-expression-literals@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40" @@ -2207,13 +1659,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-member-expression-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" - integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-transform-modules-amd@^7.12.1", "@babel/plugin-transform-modules-amd@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz#19f511d60e3d8753cc5a6d4e775d3a5184866cc3" @@ -2232,25 +1677,6 @@ "@babel/helper-plugin-utils" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-amd@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" - integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== - dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-commonjs@^7.1.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.13.tgz#5043b870a784a8421fa1fd9136a24f294da13e50" - integrity sha512-OGQoeVXVi1259HjuoDnsQMlMkT9UkZT9TpXAsqWplS/M0N1g3TJAn/ByOCeQu7mfjc5WpSsRU+jV1Hd89ts0kQ== - dependencies: - "@babel/helper-module-transforms" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-simple-access" "^7.12.13" - babel-plugin-dynamic-import-node "^2.3.3" - "@babel/plugin-transform-modules-commonjs@^7.12.1", "@babel/plugin-transform-modules-commonjs@^7.13.8": version "7.13.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz#7b01ad7c2dcf2275b06fa1781e00d13d420b3e1b" @@ -2281,16 +1707,6 @@ "@babel/helper-simple-access" "^7.15.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe" - integrity sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA== - dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" - babel-plugin-dynamic-import-node "^2.3.3" - "@babel/plugin-transform-modules-systemjs@^7.12.1", "@babel/plugin-transform-modules-systemjs@^7.13.8": version "7.13.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz#6d066ee2bff3c7b3d60bf28dec169ad993831ae3" @@ -2324,17 +1740,6 @@ "@babel/helper-validator-identifier" "^7.14.9" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz#887cefaef88e684d29558c2b13ee0563e287c2d7" - integrity sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw== - dependencies: - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - babel-plugin-dynamic-import-node "^2.3.3" - "@babel/plugin-transform-modules-umd@^7.12.1", "@babel/plugin-transform-modules-umd@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz#8a3d96a97d199705b9fd021580082af81c06e70b" @@ -2351,14 +1756,6 @@ "@babel/helper-module-transforms" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-modules-umd@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" - integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== - dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-transform-named-capturing-groups-regex@^7.12.1", "@babel/plugin-transform-named-capturing-groups-regex@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz#2213725a5f5bbbe364b50c3ba5998c9599c5c9d9" @@ -2380,13 +1777,6 @@ dependencies: "@babel/helper-create-regexp-features-plugin" "^7.14.5" -"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252" - integrity sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/plugin-transform-new-target@^7.12.1", "@babel/plugin-transform-new-target@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz#e22d8c3af24b150dd528cbd6e685e799bf1c351c" @@ -2401,13 +1791,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-new-target@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" - integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-transform-object-super@^7.12.1", "@babel/plugin-transform-object-super@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" @@ -2424,14 +1807,6 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-replace-supers" "^7.14.5" -"@babel/plugin-transform-object-super@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" - integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz#8fa7603e3097f9c0b7ca1a4821bc2fb52e9e5007" @@ -2453,13 +1828,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-parameters@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" - integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-transform-property-literals@^7.12.1", "@babel/plugin-transform-property-literals@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81" @@ -2474,13 +1842,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" - integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-transform-react-constant-elements@^7.12.1": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.13.10.tgz#5d3de8a8ee53f4612e728f4f17b8c9125f8019e5" @@ -2502,13 +1863,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-react-display-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz#7b6d40d232f4c0f550ea348593db3b21e2404340" - integrity sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-transform-react-jsx-development@^7.12.1", "@babel/plugin-transform-react-jsx-development@^7.12.12": version "7.12.17" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz#f510c0fa7cd7234153539f9a362ced41a5ca1447" @@ -2516,13 +1870,6 @@ dependencies: "@babel/plugin-transform-react-jsx" "^7.12.17" -"@babel/plugin-transform-react-jsx-development@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz#43a00724a3ed2557ed3f276a01a929e6686ac7b8" - integrity sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A== - dependencies: - "@babel/plugin-transform-react-jsx" "^7.16.7" - "@babel/plugin-transform-react-jsx-self@^7.12.1": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.13.tgz#422d99d122d592acab9c35ea22a6cfd9bf189f60" @@ -2548,17 +1895,6 @@ "@babel/plugin-syntax-jsx" "^7.12.13" "@babel/types" "^7.12.17" -"@babel/plugin-transform-react-jsx@^7.16.7": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz#eac1565da176ccb1a715dae0b4609858808008c1" - integrity sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-jsx" "^7.16.7" - "@babel/types" "^7.17.0" - "@babel/plugin-transform-react-pure-annotations@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz#05d46f0ab4d1339ac59adf20a1462c91b37a1a42" @@ -2567,14 +1903,6 @@ "@babel/helper-annotate-as-pure" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-react-pure-annotations@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz#232bfd2f12eb551d6d7d01d13fe3f86b45eb9c67" - integrity sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-transform-regenerator@^7.12.1", "@babel/plugin-transform-regenerator@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz#b628bcc9c85260ac1aeb05b45bde25210194a2f5" @@ -2589,13 +1917,6 @@ dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-regenerator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" - integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q== - dependencies: - regenerator-transform "^0.14.2" - "@babel/plugin-transform-reserved-words@^7.12.1", "@babel/plugin-transform-reserved-words@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz#7d9988d4f06e0fe697ea1d9803188aa18b472695" @@ -2610,13 +1931,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-reserved-words@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" - integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-transform-runtime@7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz#04b792057eb460389ff6a4198e377614ea1e7ba5" @@ -2627,18 +1941,6 @@ resolve "^1.8.1" semver "^5.5.1" -"@babel/plugin-transform-runtime@^7.16.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz#0a2e08b5e2b2d95c4b1d3b3371a2180617455b70" - integrity sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" - semver "^6.3.0" - "@babel/plugin-transform-shorthand-properties@^7.12.1", "@babel/plugin-transform-shorthand-properties@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad" @@ -2653,13 +1955,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-shorthand-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" - integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-transform-spread@^7.12.1", "@babel/plugin-transform-spread@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd" @@ -2676,14 +1971,6 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" -"@babel/plugin-transform-spread@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" - integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-transform-sticky-regex@^7.12.1", "@babel/plugin-transform-sticky-regex@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz#760ffd936face73f860ae646fb86ee82f3d06d1f" @@ -2698,13 +1985,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-sticky-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" - integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-transform-template-literals@^7.12.1", "@babel/plugin-transform-template-literals@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d" @@ -2719,13 +1999,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-template-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" - integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-transform-typeof-symbol@^7.12.1", "@babel/plugin-transform-typeof-symbol@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz#785dd67a1f2ea579d9c2be722de8c84cb85f5a7f" @@ -2740,13 +2013,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-typeof-symbol@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" - integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-transform-typescript@^7.12.1": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz#4a498e1f3600342d2a9e61f60131018f55774853" @@ -2779,13 +2045,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-unicode-escapes@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" - integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-transform-unicode-regex@^7.12.1", "@babel/plugin-transform-unicode-regex@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz#b52521685804e155b1202e83fc188d34bb70f5ac" @@ -2802,14 +2061,6 @@ "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-unicode-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" - integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/preset-env@7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.1.tgz#9c7e5ca82a19efc865384bb4989148d2ee5d7ac2" @@ -3114,94 +2365,6 @@ core-js-compat "^3.15.0" semver "^6.3.0" -"@babel/preset-env@^7.16.0": - version "7.16.11" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982" - integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g== - dependencies: - "@babel/compat-data" "^7.16.8" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-async-generator-functions" "^7.16.8" - "@babel/plugin-proposal-class-properties" "^7.16.7" - "@babel/plugin-proposal-class-static-block" "^7.16.7" - "@babel/plugin-proposal-dynamic-import" "^7.16.7" - "@babel/plugin-proposal-export-namespace-from" "^7.16.7" - "@babel/plugin-proposal-json-strings" "^7.16.7" - "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" - "@babel/plugin-proposal-numeric-separator" "^7.16.7" - "@babel/plugin-proposal-object-rest-spread" "^7.16.7" - "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" - "@babel/plugin-proposal-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-private-methods" "^7.16.11" - "@babel/plugin-proposal-private-property-in-object" "^7.16.7" - "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.16.7" - "@babel/plugin-transform-async-to-generator" "^7.16.8" - "@babel/plugin-transform-block-scoped-functions" "^7.16.7" - "@babel/plugin-transform-block-scoping" "^7.16.7" - "@babel/plugin-transform-classes" "^7.16.7" - "@babel/plugin-transform-computed-properties" "^7.16.7" - "@babel/plugin-transform-destructuring" "^7.16.7" - "@babel/plugin-transform-dotall-regex" "^7.16.7" - "@babel/plugin-transform-duplicate-keys" "^7.16.7" - "@babel/plugin-transform-exponentiation-operator" "^7.16.7" - "@babel/plugin-transform-for-of" "^7.16.7" - "@babel/plugin-transform-function-name" "^7.16.7" - "@babel/plugin-transform-literals" "^7.16.7" - "@babel/plugin-transform-member-expression-literals" "^7.16.7" - "@babel/plugin-transform-modules-amd" "^7.16.7" - "@babel/plugin-transform-modules-commonjs" "^7.16.8" - "@babel/plugin-transform-modules-systemjs" "^7.16.7" - "@babel/plugin-transform-modules-umd" "^7.16.7" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.8" - "@babel/plugin-transform-new-target" "^7.16.7" - "@babel/plugin-transform-object-super" "^7.16.7" - "@babel/plugin-transform-parameters" "^7.16.7" - "@babel/plugin-transform-property-literals" "^7.16.7" - "@babel/plugin-transform-regenerator" "^7.16.7" - "@babel/plugin-transform-reserved-words" "^7.16.7" - "@babel/plugin-transform-shorthand-properties" "^7.16.7" - "@babel/plugin-transform-spread" "^7.16.7" - "@babel/plugin-transform-sticky-regex" "^7.16.7" - "@babel/plugin-transform-template-literals" "^7.16.7" - "@babel/plugin-transform-typeof-symbol" "^7.16.7" - "@babel/plugin-transform-unicode-escapes" "^7.16.7" - "@babel/plugin-transform-unicode-regex" "^7.16.7" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.16.8" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" - core-js-compat "^3.20.2" - semver "^6.3.0" - -"@babel/preset-flow@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.12.13.tgz#71ee7fe65a95b507ac12bcad65a4ced27d8dfc3e" - integrity sha512-gcEjiwcGHa3bo9idURBp5fmJPcyFPOszPQjztXrOjUE2wWVqc6fIVJPgWPIQksaQ5XZ2HWiRsf2s1fRGVjUtVw== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-transform-flow-strip-types" "^7.12.13" - "@babel/preset-modules@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" @@ -3224,17 +2387,6 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-modules@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" - integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - "@babel/preset-react@7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.1.tgz#7f022b13f55b6dd82f00f16d1c599ae62985358c" @@ -3259,18 +2411,6 @@ "@babel/plugin-transform-react-jsx-development" "^7.12.12" "@babel/plugin-transform-react-pure-annotations" "^7.12.1" -"@babel/preset-react@^7.16.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.16.7.tgz#4c18150491edc69c183ff818f9f2aecbe5d93852" - integrity sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-transform-react-display-name" "^7.16.7" - "@babel/plugin-transform-react-jsx" "^7.16.7" - "@babel/plugin-transform-react-jsx-development" "^7.16.7" - "@babel/plugin-transform-react-pure-annotations" "^7.16.7" - "@babel/preset-typescript@7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz#86480b483bb97f75036e8864fe404cc782cc311b" @@ -3279,7 +2419,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-typescript" "^7.12.1" -"@babel/preset-typescript@^7.1.0", "@babel/preset-typescript@^7.6.0": +"@babel/preset-typescript@^7.6.0": version "7.12.16" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.16.tgz#b2080ce20b7095c049db2a0410f1e39bc892f7ca" integrity sha512-IrYNrpDSuQfNHeqh7gsJsO35xTGyAyGkI1VxOpBEADFtxCqZ77a1RHbJqM3YJhroj7qMkNMkNtcw0lqeZUrzow== @@ -3288,17 +2428,6 @@ "@babel/helper-validator-option" "^7.12.16" "@babel/plugin-transform-typescript" "^7.12.16" -"@babel/register@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.12.13.tgz#e9cb57618264f2944634da941ba9755088ef9ec5" - integrity sha512-fnCeRXj970S9seY+973oPALQg61TRvAaW0nRDe1f4ytKqM3fZgsNXewTZWmqZedg74LFIRpg/11dsrPZZvYs2g== - dependencies: - find-cache-dir "^2.0.0" - lodash "^4.17.19" - make-dir "^2.1.0" - pirates "^4.0.0" - source-map-support "^0.5.16" - "@babel/runtime-corejs3@^7.10.2": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.12.13.tgz#53d09813b7c20d616caf258e9325550ff701c039" @@ -3321,13 +2450,6 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.16.0": - version "7.17.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.2.tgz#66f68591605e59da47523c631416b18508779941" - integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw== - dependencies: - regenerator-runtime "^0.13.4" - "@babel/runtime@^7.6.2": version "7.14.6" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d" @@ -3362,15 +2484,6 @@ "@babel/parser" "^7.15.4" "@babel/types" "^7.15.4" -"@babel/template@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" - "@babel/template@^7.8.3": version "7.8.6" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" @@ -3455,22 +2568,6 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.0", "@babel/traverse@^7.17.3": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57" - integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.3" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.17.3" - "@babel/types" "^7.17.0" - debug "^4.1.0" - globals "^11.1.0" - "@babel/types@7.15.0": version "7.15.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.0.tgz#61af11f2286c4e9c69ca8deb5f4375a73c72dcbd" @@ -3540,13 +2637,45 @@ "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" -"@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" - integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== +"@badeball/cypress-configuration@^4.0.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@badeball/cypress-configuration/-/cypress-configuration-4.2.0.tgz#4c19bada0e40600b572b4d91933e0bd226cb2e3f" + integrity sha512-8Dc6diBW8zUycpCFbr7vqQ8ioNZMvpHV79KGdHVpwpRtkFX6enwG82CKU9DeWys6Ou5dFpXw6NYNYNb46y7UYA== dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - to-fast-properties "^2.0.0" + "@babel/parser" "^7.18.8" + debug "^4.3.2" + esbuild "^0.14.23" + glob "^7.1.6" + minimatch "^3.0.4" + node-hook "^1.0.0" + +"@badeball/cypress-cucumber-preprocessor@^15.1.4": + version "15.1.4" + resolved "https://registry.yarnpkg.com/@badeball/cypress-cucumber-preprocessor/-/cypress-cucumber-preprocessor-15.1.4.tgz#89f3c6735d592d41badee58ac92a17e71adeefed" + integrity sha512-CVagR47O7ZNOGVZJzBz6IJ5cVqj7zEUQEoI6br/gSdfZ8YVBbf8Eqx1pEZCWiDnzc7w20qj+IzM7Z8ExxYN4fQ== + dependencies: + "@badeball/cypress-configuration" "^4.0.0" + "@cucumber/cucumber-expressions" "^16.0.0" + "@cucumber/gherkin" "^24.0.0" + "@cucumber/html-formatter" "^19.2.0" + "@cucumber/message-streams" "^4.0.1" + "@cucumber/messages" "^19.1.2" + "@cucumber/tag-expressions" "^4.1.0" + base64-js "^1.5.1" + chalk "^4.1.2" + cli-table "^0.3.11" + common-ancestor-path "^1.0.1" + cosmiconfig "^7.0.1" + debug "^4.2.0" + error-stack-parser "^2.0.7" + esbuild "^0.17.8" + glob "^7.2.0" + is-path-inside "^3.0.3" + module-alias "^2.2.2" + node-hook "^1.0.0" + resolve-pkg "^2.0.0" + source-map "^0.7.4" + uuid "^8.3.2" "@bcoe/v8-coverage@^0.2.3": version "0.2.3" @@ -3708,29 +2837,44 @@ resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-10.1.0.tgz#f0950bba18819512d42f7197e56c518aa491cf18" integrity sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg== -"@cypress/browserify-preprocessor@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@cypress/browserify-preprocessor/-/browserify-preprocessor-3.0.2.tgz#1dbecae394937aed47a3524cad47086c2ded8c50" - integrity sha512-y6mlFR+IR2cqcm3HabSp7AEcX9QfF1EUL4eOaw/7xexdhmdQU8ez6piyRopZQob4BK8oKTsc9PkupsU2rzjqMA== - dependencies: - "@babel/core" "^7.16.0" - "@babel/plugin-proposal-class-properties" "^7.16.0" - "@babel/plugin-proposal-object-rest-spread" "^7.16.0" - "@babel/plugin-transform-runtime" "^7.16.0" - "@babel/preset-env" "^7.16.0" - "@babel/preset-react" "^7.16.0" - "@babel/runtime" "^7.16.0" - babel-plugin-add-module-exports "^1.0.4" - babelify "^10.0.0" - bluebird "^3.7.2" - browserify "^16.2.3" - coffeeify "^3.0.1" - coffeescript "^1.12.7" - debug "^4.3.2" - fs-extra "^9.0.0" - lodash.clonedeep "^4.5.0" - through2 "^2.0.0" - watchify "^4.0.0" +"@cucumber/cucumber-expressions@^16.0.0": + version "16.1.2" + resolved "https://registry.yarnpkg.com/@cucumber/cucumber-expressions/-/cucumber-expressions-16.1.2.tgz#8c7200a4490b48a0309f5cc4e058cf6578b5b578" + integrity sha512-CfHEbxJ5FqBwF6mJyLLz4B353gyHkoi6cCL4J0lfDZ+GorpcWw4n2OUAdxJmP7ZlREANWoTFlp4FhmkLKrCfUA== + dependencies: + regexp-match-indices "1.0.2" + +"@cucumber/gherkin@^24.0.0": + version "24.1.0" + resolved "https://registry.yarnpkg.com/@cucumber/gherkin/-/gherkin-24.1.0.tgz#ca2dcbe11f5f7d7f30fd073280550bd6eca2363c" + integrity sha512-B48XrUod4y3SoXe6mv12q7U1zThUNSK3yHSm/hBJCJZ6RJUJhFk3FVMN/83qOEbsYZe6iG9v+4L1Myf8/q8C6g== + dependencies: + "@cucumber/messages" "^19.1.4" + +"@cucumber/html-formatter@^19.2.0": + version "19.2.0" + resolved "https://registry.yarnpkg.com/@cucumber/html-formatter/-/html-formatter-19.2.0.tgz#47b9fcb58fbb48d0e6124fd2e867d9c6fe299470" + integrity sha512-qGms4588jmVF/G3fTbgZvxn6OQw9GaTFV007nZZ9/10M9DfrgRqjFjVxVI9TPV63xOLPicEVoqsKZtcECbdMSA== + +"@cucumber/message-streams@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@cucumber/message-streams/-/message-streams-4.0.1.tgz#a5339d3504594bb2edb5732aaae94dddb24d0970" + integrity sha512-Kxap9uP5jD8tHUZVjTWgzxemi/0uOsbGjd4LBOSxcJoOCRbESFwemUzilJuzNTB8pcTQUh8D5oudUyxfkJOKmA== + +"@cucumber/messages@^19.1.2", "@cucumber/messages@^19.1.4": + version "19.1.4" + resolved "https://registry.yarnpkg.com/@cucumber/messages/-/messages-19.1.4.tgz#5cefc47cac3004c0bc38d42933042ec248bb747c" + integrity sha512-Pksl0pnDz2l1+L5Ug85NlG6LWrrklN9qkMxN5Mv+1XZ3T6u580dnE6mVaxjJRdcOq4tR17Pc0RqIDZMyVY1FlA== + dependencies: + "@types/uuid" "8.3.4" + class-transformer "0.5.1" + reflect-metadata "0.1.13" + uuid "9.0.0" + +"@cucumber/tag-expressions@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@cucumber/tag-expressions/-/tag-expressions-4.1.0.tgz#9a91b0e0dd2f2ba703e3038c52b49b9ac06c2c6f" + integrity sha512-chTnjxV3vryL75N90wJIMdMafXmZoO2JgNJLYpsfcALL2/IQrRiny3vM9DgD5RDCSt1LNloMtb7rGey9YWxCsA== "@cypress/request@^2.88.10": version "2.88.10" @@ -3756,6 +2900,15 @@ tunnel-agent "^0.6.0" uuid "^8.3.2" +"@cypress/webpack-preprocessor@^5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@cypress/webpack-preprocessor/-/webpack-preprocessor-5.17.0.tgz#3f58cf333c5931094780e3ca14c9302a1965025e" + integrity sha512-HyFqHkrOrIIYOt4G+r3VK0kVYTcev1tEcqBI/0DJ4AzEuEgW/TB+cX56txy4Cgn60XXdJoul2utclZwUqOsPZA== + dependencies: + bluebird "3.7.1" + debug "^4.3.4" + lodash "^4.17.20" + "@cypress/xvfb@^1.2.4": version "1.2.4" resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" @@ -4372,21 +3525,6 @@ webpack "^5.41.1" workbox-build "^6.1.5" -"@dhis2/cli-helpers-engine@^2.3.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@dhis2/cli-helpers-engine/-/cli-helpers-engine-2.4.0.tgz#1609d358088f0616fb400aa9f90fc8bb57d4b196" - integrity sha512-SRcN3s/sQTkd5VUbWAs2+UeYtJ0zLdj4F/RkrL8x2/RX/79vIxvryqBom4FFw/meY0c2GDpXgrpKNQcST/OHBQ== - dependencies: - chalk "^3.0.0" - cross-spawn "^7.0.3" - find-up "^5.0.0" - fs-extra "^8.0.1" - inquirer "^7.3.3" - request "^2.88.0" - tar "^4.4.8" - update-notifier "^3.0.0" - yargs "^13.1.0" - "@dhis2/cli-helpers-engine@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@dhis2/cli-helpers-engine/-/cli-helpers-engine-3.0.0.tgz#dacddea16de7e5e60280aefbee2e5661795b78b3" @@ -4422,30 +3560,9 @@ husky "^7.0.2" micromatch "^4.0.4" perfy "^1.1.5" - prettier "^2.4.1" - semver "^7.3.5" - yargs "^16.2.0" - -"@dhis2/cli-utils-cypress@^9.0.2": - version "9.0.2" - resolved "https://registry.yarnpkg.com/@dhis2/cli-utils-cypress/-/cli-utils-cypress-9.0.2.tgz#c3ab5afaffd380579d97f35ff93a69a10000dbb3" - integrity sha512-LM6qeghtMOGvjf3lMjKJX4+z0zfzxeAN5Y7J+ShJNs0ErelL/Y+GJiHZRwO766tSgp63wpvjSq1WOoN1UdT6Pw== - dependencies: - "@dhis2/cli-helpers-engine" "^2.3.0" - fs-extra "^8.1.0" - jscodeshift "^0.11.0" - -"@dhis2/cypress-commands@^9.0.2": - version "9.0.2" - resolved "https://registry.yarnpkg.com/@dhis2/cypress-commands/-/cypress-commands-9.0.2.tgz#676870ccb2d5fe3811d5f480c7edf2f0b8507255" - integrity sha512-G6H9bOpjxqa2X+pc5vJqiwZLp+8utuac/BMRehb/8T6CeIWF4r6keCTq9HTof47szC+06JbsB2ZiviInmZGXJA== - dependencies: - jscodeshift "^0.11.0" - -"@dhis2/cypress-plugins@^9.0.2": - version "9.0.2" - resolved "https://registry.yarnpkg.com/@dhis2/cypress-plugins/-/cypress-plugins-9.0.2.tgz#6cbd58b2ce26a08e70045b81835504cd9ef6d8c9" - integrity sha512-FhHW5+8HBKIJwAl5fEv6lapTo76LLR9LtoS8iy4crc5RZnHlWgVqXeqG1sBFix93yd8nCFfYvOIP8+Y+x9mi5A== + prettier "^2.4.1" + semver "^7.3.5" + yargs "^16.2.0" "@dhis2/d2-i18n@^1.1.0": version "1.1.0" @@ -4561,6 +3678,121 @@ "@dhis2/ui-icons" "7.2.0" prop-types "^15.7.2" +"@esbuild/android-arm64@0.17.11": + version "0.17.11" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.11.tgz#52c3e6cabc19c5e4c1c0c01cb58f0442338e1c14" + integrity sha512-QnK4d/zhVTuV4/pRM4HUjcsbl43POALU2zvBynmrrqZt9LPcLA3x1fTZPBg2RRguBQnJcnU059yKr+bydkntjg== + +"@esbuild/android-arm@0.17.11": + version "0.17.11" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.11.tgz#f3fc768235aecbeb840d0049fdf13cd28592105f" + integrity sha512-CdyX6sRVh1NzFCsf5vw3kULwlAhfy9wVt8SZlrhQ7eL2qBjGbFhRBWkkAzuZm9IIEOCKJw4DXA6R85g+qc8RDw== + +"@esbuild/android-x64@0.17.11": + version "0.17.11" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.11.tgz#443ed47771a7e917e4282469ba350d117473550c" + integrity sha512-3PL3HKtsDIXGQcSCKtWD/dy+mgc4p2Tvo2qKgKHj9Yf+eniwFnuoQ0OUhlSfAEpKAFzF9N21Nwgnap6zy3L3MQ== + +"@esbuild/darwin-arm64@0.17.11": + version "0.17.11" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.11.tgz#0e8c78d94d5759a48521dbfd83189d2ed3499a16" + integrity sha512-pJ950bNKgzhkGNO3Z9TeHzIFtEyC2GDQL3wxkMApDEghYx5Qers84UTNc1bAxWbRkuJOgmOha5V0WUeh8G+YGw== + +"@esbuild/darwin-x64@0.17.11": + version "0.17.11" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.11.tgz#2405cfdf70eb961c7cf973463ca7263dc2004c88" + integrity sha512-iB0dQkIHXyczK3BZtzw1tqegf0F0Ab5texX2TvMQjiJIWXAfM4FQl7D909YfXWnB92OQz4ivBYQ2RlxBJrMJOw== + +"@esbuild/freebsd-arm64@0.17.11": + version "0.17.11" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.11.tgz#d5138e873e15f87bd4564c024dfa00ef37e623fd" + integrity sha512-7EFzUADmI1jCHeDRGKgbnF5sDIceZsQGapoO6dmw7r/ZBEKX7CCDnIz8m9yEclzr7mFsd+DyasHzpjfJnmBB1Q== + +"@esbuild/freebsd-x64@0.17.11": + version "0.17.11" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.11.tgz#e850b58b8fabf8e9ef0e125af3c25229ad2d6c38" + integrity sha512-iPgenptC8i8pdvkHQvXJFzc1eVMR7W2lBPrTE6GbhR54sLcF42mk3zBOjKPOodezzuAz/KSu8CPyFSjcBMkE9g== + +"@esbuild/linux-arm64@0.17.11": + version "0.17.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.11.tgz#2bfb93d0809ec2357c12ebb27736b750c9ae0aa5" + integrity sha512-Qxth3gsWWGKz2/qG2d5DsW/57SeA2AmpSMhdg9TSB5Svn2KDob3qxfQSkdnWjSd42kqoxIPy3EJFs+6w1+6Qjg== + +"@esbuild/linux-arm@0.17.11": + version "0.17.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.11.tgz#e56fb3b76828317a704f4a167c5bd790fe5314e7" + integrity sha512-M9iK/d4lgZH0U5M1R2p2gqhPV/7JPJcRz+8O8GBKVgqndTzydQ7B2XGDbxtbvFkvIs53uXTobOhv+RyaqhUiMg== + +"@esbuild/linux-ia32@0.17.11": + version "0.17.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.11.tgz#59fa1c49b271793d14eb5effc757e8c0d0cb2cab" + integrity sha512-dB1nGaVWtUlb/rRDHmuDQhfqazWE0LMro/AIbT2lWM3CDMHJNpLckH+gCddQyhhcLac2OYw69ikUMO34JLt3wA== + +"@esbuild/linux-loong64@0.14.54": + version "0.14.54" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" + integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw== + +"@esbuild/linux-loong64@0.17.11": + version "0.17.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.11.tgz#89575bc189099c03a36daa54f3f481780c7fd502" + integrity sha512-aCWlq70Q7Nc9WDnormntGS1ar6ZFvUpqr8gXtO+HRejRYPweAFQN615PcgaSJkZjhHp61+MNLhzyVALSF2/Q0g== + +"@esbuild/linux-mips64el@0.17.11": + version "0.17.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.11.tgz#0e18ca039dc7e4645efd8edc1b10952933eb6b1b" + integrity sha512-cGeGNdQxqY8qJwlYH1BP6rjIIiEcrM05H7k3tR7WxOLmD1ZxRMd6/QIOWMb8mD2s2YJFNRuNQ+wjMhgEL2oCEw== + +"@esbuild/linux-ppc64@0.17.11": + version "0.17.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.11.tgz#2d152cb3a253afb8c100a165ad132dc96f36cb11" + integrity sha512-BdlziJQPW/bNe0E8eYsHB40mYOluS+jULPCjlWiHzDgr+ZBRXPtgMV1nkLEGdpjrwgmtkZHEGEPaKdS/8faLDA== + +"@esbuild/linux-riscv64@0.17.11": + version "0.17.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.11.tgz#c6ac494a81221d53d65b33e665c7df1747952d3c" + integrity sha512-MDLwQbtF+83oJCI1Cixn68Et/ME6gelmhssPebC40RdJaect+IM+l7o/CuG0ZlDs6tZTEIoxUe53H3GmMn8oMA== + +"@esbuild/linux-s390x@0.17.11": + version "0.17.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.11.tgz#4bad33894bc7415cea4be8fa90fe456226a424ad" + integrity sha512-4N5EMESvws0Ozr2J94VoUD8HIRi7X0uvUv4c0wpTHZyZY9qpaaN7THjosdiW56irQ4qnJ6Lsc+i+5zGWnyqWqQ== + +"@esbuild/linux-x64@0.17.11": + version "0.17.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.11.tgz#903fda743459f530a16a6c6ee8d2c0f6c1a12fc7" + integrity sha512-rM/v8UlluxpytFSmVdbCe1yyKQd/e+FmIJE2oPJvbBo+D0XVWi1y/NQ4iTNx+436WmDHQBjVLrbnAQLQ6U7wlw== + +"@esbuild/netbsd-x64@0.17.11": + version "0.17.11" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.11.tgz#b589239fe7d9b16ee03c5e191f3f5b640f1518a1" + integrity sha512-4WaAhuz5f91h3/g43VBGdto1Q+X7VEZfpcWGtOFXnggEuLvjV+cP6DyLRU15IjiU9fKLLk41OoJfBFN5DhPvag== + +"@esbuild/openbsd-x64@0.17.11": + version "0.17.11" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.11.tgz#b355019754116bef39ec688f8fd2fe6471b9779b" + integrity sha512-UBj135Nx4FpnvtE+C8TWGp98oUgBcmNmdYgl5ToKc0mBHxVVqVE7FUS5/ELMImOp205qDAittL6Ezhasc2Ev/w== + +"@esbuild/sunos-x64@0.17.11": + version "0.17.11" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.11.tgz#2ea47fb592e68406e5025a7696dc714fc6a115dc" + integrity sha512-1/gxTifDC9aXbV2xOfCbOceh5AlIidUrPsMpivgzo8P8zUtczlq1ncFpeN1ZyQJ9lVs2hILy1PG5KPp+w8QPPg== + +"@esbuild/win32-arm64@0.17.11": + version "0.17.11" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.11.tgz#47e6fdab17c4c52e6e0d606dd9cb843b29826325" + integrity sha512-vtSfyx5yRdpiOW9yp6Ax0zyNOv9HjOAw8WaZg3dF5djEHKKm3UnoohftVvIJtRh0Ec7Hso0RIdTqZvPXJ7FdvQ== + +"@esbuild/win32-ia32@0.17.11": + version "0.17.11" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.11.tgz#a97273aa3164c8d8f501899f55cc75a4a79599a3" + integrity sha512-GFPSLEGQr4wHFTiIUJQrnJKZhZjjq4Sphf+mM76nQR6WkQn73vm7IsacmBRPkALfpOCHsopSvLgqdd4iUW2mYw== + +"@esbuild/win32-x64@0.17.11": + version "0.17.11" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.11.tgz#9be796d93ae27b636da32d960899a4912bca27a1" + integrity sha512-N9vXqLP3eRL8BqSy8yn4Y98cZI2pZ8fyuHx6lKjiG2WABpT2l01TXdzq5Ma2ZUBzfB7tx5dXVhge8X9u0S70ZQ== + "@eslint/eslintrc@^0.4.1": version "0.4.1" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.1.tgz#442763b88cecbe3ee0ec7ca6d6dd6168550cbf14" @@ -5005,24 +4237,6 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@jridgewell/resolve-uri@^3.0.3": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c" - integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.11" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec" - integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== - -"@jridgewell/trace-mapping@^0.3.0": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3" - integrity sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@ls-lint/ls-lint@^1.10.0": version "1.11.0" resolved "https://registry.yarnpkg.com/@ls-lint/ls-lint/-/ls-lint-1.11.0.tgz#fff074121e72bbbf6f1e5da05b916196039479df" @@ -5661,6 +4875,11 @@ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== +"@types/uuid@8.3.4": + version "8.3.4" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" + integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== + "@types/webpack-sources@*": version "2.1.0" resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.0.tgz#8882b0bd62d1e0ce62f183d0d01b72e6e82e8c10" @@ -6091,7 +5310,7 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -JSONStream@^1.0.3, JSONStream@^1.0.4: +JSONStream@^1.0.4: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== @@ -6162,15 +5381,6 @@ acorn-jsx@^5.3.1: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== -acorn-node@^1.2.0, acorn-node@^1.3.0, acorn-node@^1.5.2, acorn-node@^1.6.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" - integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== - dependencies: - acorn "^7.0.0" - acorn-walk "^7.0.0" - xtend "^4.0.2" - acorn-private-class-elements@^0.1.0, acorn-private-class-elements@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/acorn-private-class-elements/-/acorn-private-class-elements-0.1.1.tgz#85209cb5791ab84fde2362cb208fa51e7679bcdc" @@ -6210,7 +5420,7 @@ acorn-walk@^6.0.0: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== -acorn-walk@^7.0.0, acorn-walk@^7.1.1: +acorn-walk@^7.1.1: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== @@ -6225,16 +5435,16 @@ acorn@^6.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^7.0.0, acorn@^7.1.1, acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - acorn@^7.1.0: version "7.1.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== +acorn@^7.1.1, acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + acorn@^8.0.5: version "8.1.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.1.0.tgz#52311fd7037ae119cbb134309e901aa46295b3fe" @@ -6429,11 +5639,6 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= - anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -6450,14 +5655,6 @@ anymatch@^3.0.3, anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -anymatch@^3.1.0, anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - append-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" @@ -6686,7 +5883,7 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= -assert@^1.1.1, assert@^1.4.0: +assert@^1.1.1: version "1.5.0" resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== @@ -6694,20 +5891,6 @@ assert@^1.1.1, assert@^1.4.0: object-assign "^4.1.1" util "0.10.3" -assertion-error-formatter@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/assertion-error-formatter/-/assertion-error-formatter-2.0.1.tgz#6bbdffaec8e2fa9e2b0eb158bfe353132d7c0a9b" - integrity sha512-cjC3jUCh9spkroKue5PDSKH5RFQ/KNuZJhk3GwHYmB/8qqETxLOmMdLH+ohi/VukNzxDlMvIe7zScvLoOdhb6Q== - dependencies: - diff "^3.0.0" - pad-right "^0.2.2" - repeat-string "^1.6.1" - -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== - assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" @@ -6723,13 +5906,6 @@ ast-types-flow@^0.0.7: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= -ast-types@0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.14.2.tgz#600b882df8583e3cd4f2df5fa20fa83759d4bdfd" - integrity sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA== - dependencies: - tslib "^2.0.1" - astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" @@ -6790,11 +5966,6 @@ autoprefixer@^9.6.1, autoprefixer@^9.8.6: postcss "^7.0.32" postcss-value-parser "^4.1.0" -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -6829,11 +6000,6 @@ axobject-query@^2.2.0: resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== -babel-core@^7.0.0-bridge.0: - version "7.0.0-bridge.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" - integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== - babel-eslint@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" @@ -6892,11 +6058,6 @@ babel-loader@8.1.0: pify "^4.0.1" schema-utils "^2.6.5" -babel-plugin-add-module-exports@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-1.0.4.tgz#6caa4ddbe1f578c6a5264d4d3e6c8a2720a7ca2b" - integrity sha512-g+8yxHUZ60RcyaUpfNzy56OtWW+x9cyEe9j+CranqLiqbju2yf/Cy6ZtYK40EZxtrdHllzlVZgLmcOUCTlJ7Jg== - babel-plugin-dynamic-import-node@^2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" @@ -6967,15 +6128,6 @@ babel-plugin-polyfill-corejs2@^0.2.2: "@babel/helper-define-polyfill-provider" "^0.2.2" semver "^6.1.1" -babel-plugin-polyfill-corejs2@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" - integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== - dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.3.1" - semver "^6.1.1" - babel-plugin-polyfill-corejs3@^0.1.3: version "0.1.7" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz#80449d9d6f2274912e05d9e182b54816904befd0" @@ -6992,14 +6144,6 @@ babel-plugin-polyfill-corejs3@^0.2.2: "@babel/helper-define-polyfill-provider" "^0.2.2" core-js-compat "^3.14.0" -babel-plugin-polyfill-corejs3@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" - integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - core-js-compat "^3.21.0" - babel-plugin-polyfill-regenerator@^0.1.2: version "0.1.6" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz#0fe06a026fe0faa628ccc8ba3302da0a6ce02f3f" @@ -7014,13 +6158,6 @@ babel-plugin-polyfill-regenerator@^0.2.2: dependencies: "@babel/helper-define-polyfill-provider" "^0.2.2" -babel-plugin-polyfill-regenerator@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" - integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - babel-plugin-react-require@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/babel-plugin-react-require/-/babel-plugin-react-require-3.1.3.tgz#ba3d7305b044a90c35c32c5a9ab943fd68e1638d" @@ -7099,7 +6236,7 @@ babel-preset-react-app@^10.0.0: babel-plugin-macros "2.8.0" babel-plugin-transform-react-remove-prop-types "0.4.24" -babel-runtime@^6.11.6, babel-runtime@^6.26.0: +babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= @@ -7107,11 +6244,6 @@ babel-runtime@^6.11.6, babel-runtime@^6.26.0: core-js "^2.4.0" regenerator-runtime "^0.11.0" -babelify@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/babelify/-/babelify-10.0.0.tgz#fe73b1a22583f06680d8d072e25a1e0d1d1d7fb5" - integrity sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg== - babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" @@ -7137,7 +6269,7 @@ base64-js@^1.0.2: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== -base64-js@^1.3.1: +base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -7167,11 +6299,6 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -becke-ch--regex--s0-0-v1--base--pl--lib@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/becke-ch--regex--s0-0-v1--base--pl--lib/-/becke-ch--regex--s0-0-v1--base--pl--lib-1.4.0.tgz#429ceebbfa5f7e936e78d73fbdc7da7162b20e20" - integrity sha1-Qpzuu/pffpNueNc/vcfacWKyDiA= - bfj@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2" @@ -7221,7 +6348,12 @@ blob-util@^2.0.2: resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== -bluebird@3.7.2, bluebird@^3.4.1, bluebird@^3.5.3, bluebird@^3.5.5, bluebird@^3.7.2: +bluebird@3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de" + integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== + +bluebird@3.7.2, bluebird@^3.5.3, bluebird@^3.5.5, bluebird@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -7328,30 +6460,11 @@ brorand@^1.0.1, brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= -browser-pack@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.1.0.tgz#c34ba10d0b9ce162b5af227c7131c92c2ecd5774" - integrity sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA== - dependencies: - JSONStream "^1.0.3" - combine-source-map "~0.8.0" - defined "^1.0.0" - safe-buffer "^5.1.1" - through2 "^2.0.0" - umd "^3.0.0" - browser-process-hrtime@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browser-resolve@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-2.0.0.tgz#99b7304cb392f8d73dba741bb2d7da28c6d7842b" - integrity sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ== - dependencies: - resolve "^1.17.0" - browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" @@ -7409,121 +6522,13 @@ browserify-sign@^4.0.0: inherits "^2.0.1" parse-asn1 "^5.0.0" -browserify-zlib@^0.2.0, browserify-zlib@~0.2.0: +browserify-zlib@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== dependencies: pako "~1.0.5" -browserify@^16.2.3: - version "16.5.2" - resolved "https://registry.yarnpkg.com/browserify/-/browserify-16.5.2.tgz#d926835e9280fa5fd57f5bc301f2ef24a972ddfe" - integrity sha512-TkOR1cQGdmXU9zW4YukWzWVSJwrxmNdADFbqbE3HFgQWe5wqZmOawqZ7J/8MPCwk/W8yY7Y0h+7mOtcZxLP23g== - dependencies: - JSONStream "^1.0.3" - assert "^1.4.0" - browser-pack "^6.0.1" - browser-resolve "^2.0.0" - browserify-zlib "~0.2.0" - buffer "~5.2.1" - cached-path-relative "^1.0.0" - concat-stream "^1.6.0" - console-browserify "^1.1.0" - constants-browserify "~1.0.0" - crypto-browserify "^3.0.0" - defined "^1.0.0" - deps-sort "^2.0.0" - domain-browser "^1.2.0" - duplexer2 "~0.1.2" - events "^2.0.0" - glob "^7.1.0" - has "^1.0.0" - htmlescape "^1.1.0" - https-browserify "^1.0.0" - inherits "~2.0.1" - insert-module-globals "^7.0.0" - labeled-stream-splicer "^2.0.0" - mkdirp-classic "^0.5.2" - module-deps "^6.2.3" - os-browserify "~0.3.0" - parents "^1.0.1" - path-browserify "~0.0.0" - process "~0.11.0" - punycode "^1.3.2" - querystring-es3 "~0.2.0" - read-only-stream "^2.0.0" - readable-stream "^2.0.2" - resolve "^1.1.4" - shasum "^1.0.0" - shell-quote "^1.6.1" - stream-browserify "^2.0.0" - stream-http "^3.0.0" - string_decoder "^1.1.1" - subarg "^1.0.0" - syntax-error "^1.1.1" - through2 "^2.0.0" - timers-browserify "^1.0.1" - tty-browserify "0.0.1" - url "~0.11.0" - util "~0.10.1" - vm-browserify "^1.0.0" - xtend "^4.0.0" - -browserify@^17.0.0: - version "17.0.0" - resolved "https://registry.yarnpkg.com/browserify/-/browserify-17.0.0.tgz#4c48fed6c02bfa2b51fd3b670fddb805723cdc22" - integrity sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w== - dependencies: - JSONStream "^1.0.3" - assert "^1.4.0" - browser-pack "^6.0.1" - browser-resolve "^2.0.0" - browserify-zlib "~0.2.0" - buffer "~5.2.1" - cached-path-relative "^1.0.0" - concat-stream "^1.6.0" - console-browserify "^1.1.0" - constants-browserify "~1.0.0" - crypto-browserify "^3.0.0" - defined "^1.0.0" - deps-sort "^2.0.1" - domain-browser "^1.2.0" - duplexer2 "~0.1.2" - events "^3.0.0" - glob "^7.1.0" - has "^1.0.0" - htmlescape "^1.1.0" - https-browserify "^1.0.0" - inherits "~2.0.1" - insert-module-globals "^7.2.1" - labeled-stream-splicer "^2.0.0" - mkdirp-classic "^0.5.2" - module-deps "^6.2.3" - os-browserify "~0.3.0" - parents "^1.0.1" - path-browserify "^1.0.0" - process "~0.11.0" - punycode "^1.3.2" - querystring-es3 "~0.2.0" - read-only-stream "^2.0.0" - readable-stream "^2.0.2" - resolve "^1.1.4" - shasum-object "^1.0.0" - shell-quote "^1.6.1" - stream-browserify "^3.0.0" - stream-http "^3.0.0" - string_decoder "^1.1.1" - subarg "^1.0.0" - syntax-error "^1.1.1" - through2 "^2.0.0" - timers-browserify "^1.0.1" - tty-browserify "0.0.1" - url "~0.11.0" - util "~0.12.0" - vm-browserify "^1.0.0" - xtend "^4.0.0" - browserslist@4.14.2: version "4.14.2" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.2.tgz#1b3cec458a1ba87588cc5e9be62f19b6d48813ce" @@ -7567,17 +6572,6 @@ browserslist@^4.16.8: escalade "^3.1.1" node-releases "^1.1.75" -browserslist@^4.17.5, browserslist@^4.19.1: - version "4.19.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.3.tgz#29b7caad327ecf2859485f696f9604214bedd383" - integrity sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg== - dependencies: - caniuse-lite "^1.0.30001312" - electron-to-chromium "^1.4.71" - escalade "^3.1.1" - node-releases "^2.0.2" - picocolors "^1.0.0" - bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -7640,14 +6634,6 @@ buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" -buffer@~5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6" - integrity sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - bufferhelper@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/bufferhelper/-/bufferhelper-0.2.1.tgz#fa74a385724a58e242f04ad6646c2366f83b913e" @@ -7745,11 +6731,6 @@ cacheable-request@^6.0.0: normalize-url "^4.1.0" responselike "^1.0.2" -cached-path-relative@^1.0.0, cached-path-relative@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.1.0.tgz#865576dfef39c0d6a7defde794d078f5308e3ef3" - integrity sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA== - cachedir@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" @@ -7838,7 +6819,7 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001166, caniuse-lite@^1.0.30001179, caniuse-lite@^1.0.30001181, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001254, caniuse-lite@^1.0.30001312: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001166, caniuse-lite@^1.0.30001179, caniuse-lite@^1.0.30001181, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001254: version "1.0.30001452" resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001452.tgz" integrity sha512-Lkp0vFjMkBB3GTpLR8zk4NwW5EdRdnitwYJHDOOKIU85x4ckYCPQ+9WlVvSVClHxVReefkUMtWZH2l9KGlD51w== @@ -7860,19 +6841,6 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chai@^4.2.0: - version "4.3.6" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" - integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== - dependencies: - assertion-error "^1.1.0" - check-error "^1.0.2" - deep-eql "^3.0.1" - get-func-name "^2.0.0" - loupe "^2.3.1" - pathval "^1.1.1" - type-detect "^4.0.5" - chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -7898,6 +6866,14 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + char-regex@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" @@ -7923,11 +6899,6 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= - check-more-types@2.24.0, check-more-types@^2.24.0: version "2.24.0" resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" @@ -7950,21 +6921,6 @@ cheerio@^1.0.0-rc.3: lodash "^4.15.0" parse5 "^3.0.1" -chokidar@3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" - integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -7999,21 +6955,6 @@ chokidar@^3.3.0, chokidar@^3.4.1: optionalDependencies: fsevents "~2.3.1" -chokidar@^3.4.0: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -8059,6 +7000,11 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== +class-transformer@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/class-transformer/-/class-transformer-0.5.1.tgz#24147d5dffd2a6cea930a3250a677addf96ab336" + integrity sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -8112,7 +7058,7 @@ cli-table3@~0.6.1: optionalDependencies: colors "1.4.0" -cli-table@^0.3.1: +cli-table@^0.3.11: version "0.3.11" resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.11.tgz#ac69cdecbe81dccdba4889b9a18b7da312a9d3ee" integrity sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ== @@ -8220,19 +7166,6 @@ coa@^2.0.2: chalk "^2.4.1" q "^1.1.2" -coffeeify@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/coffeeify/-/coffeeify-3.0.1.tgz#5e2753000c50bd24c693115f33864248dd11136c" - integrity sha512-Qjnr7UX6ldK1PHV7wCnv7AuCd4q19KTUtwJnu/6JRJB4rfm12zvcXtKdacUoePOKr1I4ka/ydKiwWpNAdsQb0g== - dependencies: - convert-source-map "^1.3.0" - through2 "^2.0.0" - -coffeescript@^1.12.7: - version "1.12.7" - resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-1.12.7.tgz#e57ee4c4867cf7f606bfc4a0f2d550c0981ddd27" - integrity sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA== - collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" @@ -8309,23 +7242,13 @@ colorette@^2.0.16: colors@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" - integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= + integrity sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw== -colors@1.4.0, colors@^1.1.2: +colors@1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -combine-source-map@^0.8.0, combine-source-map@~0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" - integrity sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos= - dependencies: - convert-source-map "~1.1.0" - inline-source-map "~0.6.0" - lodash.memoize "~3.0.3" - source-map "~0.5.3" - combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -8338,7 +7261,7 @@ commander@2.15.1: resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag== -commander@^2.19.0, commander@^2.20.0, commander@^2.9.0: +commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -8358,6 +7281,11 @@ commander@^5.1.0: resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== +common-ancestor-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" + integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== + common-tags@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" @@ -8423,7 +7351,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.0, concat-stream@^1.5.1, concat-stream@^1.6.0, concat-stream@^1.6.1, concat-stream@~1.6.0: +concat-stream@^1.5.0, concat-stream@^1.5.1: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -8460,7 +7388,7 @@ console-browserify@^1.1.0: resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== -constants-browserify@^1.0.0, constants-browserify@~1.0.0: +constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= @@ -8519,18 +7447,6 @@ convert-source-map@^0.3.3: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA= -convert-source-map@^1.3.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - -convert-source-map@~1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" - integrity sha1-SCnId+n+SbMWHzvzZziI4gRpmGA= - cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -8574,14 +7490,6 @@ core-js-compat@^3.16.0: browserslist "^4.16.8" semver "7.0.0" -core-js-compat@^3.20.2, core-js-compat@^3.21.0: - version "3.21.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.21.1.tgz#cac369f67c8d134ff8f9bd1623e3bc2c42068c82" - integrity sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g== - dependencies: - browserslist "^4.19.1" - semver "7.0.0" - core-js-compat@^3.6.2: version "3.6.4" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.4.tgz#938476569ebb6cda80d339bcf199fae4f16fff17" @@ -8618,16 +7526,6 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -cosmiconfig@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc" - integrity sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ== - dependencies: - is-directory "^0.3.1" - js-yaml "^3.9.0" - parse-json "^4.0.0" - require-from-string "^2.0.1" - cosmiconfig@^5.0.0: version "5.2.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" @@ -8660,6 +7558,17 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" +cosmiconfig@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + crc32-stream@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85" @@ -8740,7 +7649,7 @@ cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" -crypto-browserify@^3.0.0, crypto-browserify@^3.11.0: +crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== @@ -9003,59 +7912,6 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.6.tgz#865d0b5833d7d8d40f4e5b8a6d76aea3de4725ef" integrity sha512-+ZAmfyWMT7TiIlzdqJgjMb7S4f1beorDbWbsocyK4RaiqA5RTX3K14bnBWmmA9QEM0gRdsjyyrEmcyga8Zsxmw== -cucumber-expressions@^5.0.13: - version "5.0.18" - resolved "https://registry.yarnpkg.com/cucumber-expressions/-/cucumber-expressions-5.0.18.tgz#6c70779efd3aebc5e9e7853938b1110322429596" - integrity sha1-bHB3nv0668Xp54U5OLERAyJClZY= - dependencies: - becke-ch--regex--s0-0-v1--base--pl--lib "^1.2.0" - -cucumber-expressions@^6.0.1: - version "6.6.2" - resolved "https://registry.yarnpkg.com/cucumber-expressions/-/cucumber-expressions-6.6.2.tgz#d89640eccc72a78380b6c210eae36a64e7462b81" - integrity sha512-WcFSVBiWNLJbIcAAC3t/ACU46vaOKfe1UIF5H3qveoq+Y4XQm9j3YwHurQNufRKBBg8nCnpU7Ttsx7egjS3hwA== - dependencies: - becke-ch--regex--s0-0-v1--base--pl--lib "^1.2.0" - -cucumber-tag-expressions@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/cucumber-tag-expressions/-/cucumber-tag-expressions-1.1.1.tgz#7f5c7b70009bc2b666591bfe64854578bedee85a" - integrity sha1-f1x7cACbwrZmWRv+ZIVFeL7e6Fo= - -cucumber@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/cucumber/-/cucumber-4.2.1.tgz#64cfff6150bbe6b5e94b173470057353d6206719" - integrity sha512-3gQ0Vv4kSHsvXEFC6b1c+TfLRDzWD1/kU7e5vm8Kh8j35b95k6favan9/4ixcBNqd7UsU1T6FYcawC87+DlNKw== - dependencies: - assertion-error-formatter "^2.0.1" - babel-runtime "^6.11.6" - bluebird "^3.4.1" - cli-table "^0.3.1" - colors "^1.1.2" - commander "^2.9.0" - cucumber-expressions "^5.0.13" - cucumber-tag-expressions "^1.1.1" - duration "^0.2.0" - escape-string-regexp "^1.0.5" - figures "2.0.0" - gherkin "^5.0.0" - glob "^7.0.0" - indent-string "^3.1.0" - is-generator "^1.0.2" - is-stream "^1.1.0" - knuth-shuffle-seeded "^1.0.6" - lodash "^4.17.4" - mz "^2.4.0" - progress "^2.0.0" - resolve "^1.3.3" - serialize-error "^2.1.0" - stack-chain "^2.0.0" - stacktrace-js "^2.0.0" - string-argv "0.0.2" - title-case "^2.1.1" - util-arity "^1.0.2" - verror "^1.9.0" - currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -9068,30 +7924,10 @@ cyclist@^1.0.1: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= -cypress-cucumber-preprocessor@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/cypress-cucumber-preprocessor/-/cypress-cucumber-preprocessor-4.3.1.tgz#c1702bfcdcb55bf9fe9d1436e944710b3d636bfb" - integrity sha512-BKUYXqoTeKzkPXohEczDtpAwRCY0ZPtIpfRwJut16yNLqdXQMV+aItwanxe3cbJTFlwg562NAjL4LMdiOhkAjg== - dependencies: - "@cypress/browserify-preprocessor" "^3.0.2" - chai "^4.2.0" - chokidar "3.5.2" - cosmiconfig "^4.0.0" - cucumber "^4.2.1" - cucumber-expressions "^6.0.1" - cucumber-tag-expressions "^1.1.1" - dargs "^7.0.0" - debug "^3.0.1" - gherkin "^5.1.0" - glob "^7.1.2" - js-string-escape "^1.0.1" - minimist "^1.2.5" - through "^2.3.8" - -cypress@^9.5.1: - version "9.5.1" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-9.5.1.tgz#51162f3688cedf5ffce311b914ef49a7c1ece076" - integrity sha512-H7lUWB3Svr44gz1rNnj941xmdsCljXoJa2cDneAltjI9leKLMQLm30x6jLlpQ730tiVtIbW5HdUmBzPzwzfUQg== +cypress@^12.7.0: + version "12.7.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.7.0.tgz#69900f82af76cf3ba0ddb9b59ec3b0d38222ab22" + integrity sha512-7rq+nmhzz0u6yabCFyPtADU2OOrYt6pvUau9qV7xyifJ/hnsaw/vkr0tnLlcuuQKUAOC1v1M1e4Z0zG7S0IAvA== dependencies: "@cypress/request" "^2.88.10" "@cypress/xvfb" "^1.2.4" @@ -9110,9 +7946,9 @@ cypress@^9.5.1: commander "^5.1.0" common-tags "^1.8.0" dayjs "^1.10.4" - debug "^4.3.2" + debug "^4.3.4" enquirer "^2.3.6" - eventemitter2 "^6.4.3" + eventemitter2 "6.4.7" execa "4.1.0" executable "^4.1.1" extract-zip "2.0.1" @@ -9125,7 +7961,7 @@ cypress@^9.5.1: listr2 "^3.8.3" lodash "^4.17.21" log-symbols "^4.0.0" - minimist "^1.2.5" + minimist "^1.2.6" ospath "^1.2.2" pretty-bytes "^5.6.0" proxy-from-env "1.0.0" @@ -9156,16 +7992,6 @@ dargs@^4.0.1: dependencies: number-is-nan "^1.0.0" -dargs@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" - integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== - -dash-ast@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dash-ast/-/dash-ast-1.0.0.tgz#12029ba5fb2f8aa6f0a861795b23c1b4b6c27d37" - integrity sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA== - dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -9215,17 +8041,17 @@ debug@4.3.1: dependencies: ms "2.1.2" -debug@^3.0.0, debug@^3.0.1, debug@^3.1.0, debug@^3.1.1, debug@^3.2.6, debug@^3.2.7: +debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.6, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" -debug@^4.3.2: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== +debug@^4.2.0, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" @@ -9264,13 +8090,6 @@ dedent@^0.7.0: resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= -deep-eql@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" - integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== - dependencies: - type-detect "^4.0.0" - deep-equal@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" @@ -9348,11 +8167,6 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= - del@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" @@ -9376,16 +8190,6 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= -deps-sort@^2.0.0, deps-sort@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.1.tgz#9dfdc876d2bcec3386b6829ac52162cda9fa208d" - integrity sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw== - dependencies: - JSONStream "^1.0.3" - shasum-object "^1.0.0" - subarg "^1.0.0" - through2 "^2.0.0" - des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" @@ -9430,15 +8234,6 @@ detect-port@^1.3.0: address "^1.0.1" debug "^2.6.0" -detective@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b" - integrity sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg== - dependencies: - acorn-node "^1.6.1" - defined "^1.0.0" - minimist "^1.1.1" - diff-sequences@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" @@ -9449,7 +8244,7 @@ diff-sequences@^27.0.6: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.6.tgz#3305cb2e55a033924054695cc66019fd7f8e5723" integrity sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ== -diff@3.5.0, diff@^3.0.0: +diff@3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== @@ -9553,7 +8348,7 @@ dom-serializer@~0.1.1: domelementtype "^1.3.0" entities "^1.1.1" -domain-browser@^1.1.1, domain-browser@^1.2.0: +domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== @@ -9644,13 +8439,6 @@ duplexer2@0.0.2: dependencies: readable-stream "~1.1.9" -duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= - dependencies: - readable-stream "^2.0.2" - duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" @@ -9676,14 +8464,6 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" -duration@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/duration/-/duration-0.2.2.tgz#ddf149bc3bc6901150fe9017111d016b3357f529" - integrity sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg== - dependencies: - d "1" - es5-ext "~0.10.46" - ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -9735,11 +8515,6 @@ electron-to-chromium@^1.3.830: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.832.tgz#b947205525a7825eff9b39566140d5471241c244" integrity sha512-x7lO8tGoW0CyV53qON4Lb5Rok9ipDelNdBIAiYUZ03dqy4u9vohMM1qV047+s/hiyJiqUWX/3PNwkX3kexX5ig== -electron-to-chromium@^1.4.71: - version "1.4.75" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.75.tgz#d1ad9bb46f2f1bf432118c2be21d27ffeae82fdd" - integrity sha512-LxgUNeu3BVU7sXaKjUDD9xivocQLxFtq6wgERrutdY/yIOps3ODOZExK1jg8DTEg4U8TUCb5MLGeWFOYuxjF3Q== - elliptic@^6.0.0: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -9941,6 +8716,13 @@ error-stack-parser@^2.0.6: dependencies: stackframe "^1.1.1" +error-stack-parser@^2.0.7: + version "2.1.4" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" + integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== + dependencies: + stackframe "^1.3.4" + es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.4: version "1.17.4" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184" @@ -10000,32 +8782,6 @@ es-abstract@^1.18.0-next.2: string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.0" -es-abstract@^1.18.5: - version "1.19.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" - integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-symbols "^1.0.2" - internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.1" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.1" - is-string "^1.0.7" - is-weakref "^1.0.1" - object-inspect "^1.11.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.1" - es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5: version "1.20.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.0.tgz#b2d526489cceca004588296334726329e0a6bfb6" @@ -10076,7 +8832,7 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.35, es5-ext@^0.10.50, es5-ext@~0.10.46: +es5-ext@^0.10.35, es5-ext@^0.10.50: version "0.10.53" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== @@ -10102,6 +8858,161 @@ es6-symbol@^3.1.1, es6-symbol@~3.1.3: d "^1.0.1" ext "^1.1.2" +esbuild-android-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be" + integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ== + +esbuild-android-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771" + integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg== + +esbuild-darwin-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25" + integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug== + +esbuild-darwin-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73" + integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw== + +esbuild-freebsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d" + integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg== + +esbuild-freebsd-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48" + integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q== + +esbuild-linux-32@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5" + integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw== + +esbuild-linux-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652" + integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg== + +esbuild-linux-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b" + integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig== + +esbuild-linux-arm@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59" + integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw== + +esbuild-linux-mips64le@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34" + integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw== + +esbuild-linux-ppc64le@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e" + integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ== + +esbuild-linux-riscv64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8" + integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg== + +esbuild-linux-s390x@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6" + integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA== + +esbuild-netbsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81" + integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w== + +esbuild-openbsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b" + integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw== + +esbuild-sunos-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da" + integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw== + +esbuild-windows-32@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31" + integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w== + +esbuild-windows-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4" + integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ== + +esbuild-windows-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982" + integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg== + +esbuild@^0.14.23: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2" + integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA== + optionalDependencies: + "@esbuild/linux-loong64" "0.14.54" + esbuild-android-64 "0.14.54" + esbuild-android-arm64 "0.14.54" + esbuild-darwin-64 "0.14.54" + esbuild-darwin-arm64 "0.14.54" + esbuild-freebsd-64 "0.14.54" + esbuild-freebsd-arm64 "0.14.54" + esbuild-linux-32 "0.14.54" + esbuild-linux-64 "0.14.54" + esbuild-linux-arm "0.14.54" + esbuild-linux-arm64 "0.14.54" + esbuild-linux-mips64le "0.14.54" + esbuild-linux-ppc64le "0.14.54" + esbuild-linux-riscv64 "0.14.54" + esbuild-linux-s390x "0.14.54" + esbuild-netbsd-64 "0.14.54" + esbuild-openbsd-64 "0.14.54" + esbuild-sunos-64 "0.14.54" + esbuild-windows-32 "0.14.54" + esbuild-windows-64 "0.14.54" + esbuild-windows-arm64 "0.14.54" + +esbuild@^0.17.8: + version "0.17.11" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.11.tgz#9f3122643b21d7e7731e42f18576c10bfa28152b" + integrity sha512-pAMImyokbWDtnA/ufPxjQg0fYo2DDuzAlqwnDvbXqHLphe+m80eF++perYKVm8LeTuj2zUuFXC+xgSVxyoHUdg== + optionalDependencies: + "@esbuild/android-arm" "0.17.11" + "@esbuild/android-arm64" "0.17.11" + "@esbuild/android-x64" "0.17.11" + "@esbuild/darwin-arm64" "0.17.11" + "@esbuild/darwin-x64" "0.17.11" + "@esbuild/freebsd-arm64" "0.17.11" + "@esbuild/freebsd-x64" "0.17.11" + "@esbuild/linux-arm" "0.17.11" + "@esbuild/linux-arm64" "0.17.11" + "@esbuild/linux-ia32" "0.17.11" + "@esbuild/linux-loong64" "0.17.11" + "@esbuild/linux-mips64el" "0.17.11" + "@esbuild/linux-ppc64" "0.17.11" + "@esbuild/linux-riscv64" "0.17.11" + "@esbuild/linux-s390x" "0.17.11" + "@esbuild/linux-x64" "0.17.11" + "@esbuild/netbsd-x64" "0.17.11" + "@esbuild/openbsd-x64" "0.17.11" + "@esbuild/sunos-x64" "0.17.11" + "@esbuild/win32-arm64" "0.17.11" + "@esbuild/win32-ia32" "0.17.11" + "@esbuild/win32-x64" "0.17.11" + escalade@^3.0.2, escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -10446,7 +9357,7 @@ espree@^7.3.0, espree@^7.3.1: acorn-jsx "^5.3.1" eslint-visitor-keys "^1.3.0" -esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -10520,21 +9431,16 @@ event-stream@=3.3.4: stream-combiner "~0.0.4" through "~2.3.1" -eventemitter2@^6.4.3: - version "6.4.5" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.5.tgz#97380f758ae24ac15df8353e0cc27f8b95644655" - integrity sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw== +eventemitter2@6.4.7: + version "6.4.7" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" + integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg== eventemitter3@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== -events@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/events/-/events-2.1.0.tgz#2a9a1e18e6106e0e812aa9ebd4a819b3c29c0ba5" - integrity sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg== - events@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" @@ -10816,11 +9722,6 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -fast-safe-stringify@^2.0.7: - version "2.1.1" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" - integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== - fastest-levenshtein@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" @@ -10859,13 +9760,6 @@ figgy-pudding@^3.5.1: resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== -figures@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - figures@^3.0.0, figures@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" @@ -10935,7 +9829,7 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: +find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== @@ -11001,11 +9895,6 @@ flatten@^1.0.2: resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== -flow-parser@0.*: - version "0.145.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.145.0.tgz#e39af5f3470211cf21a50eb589da4d5cc5f71f39" - integrity sha512-dqpYiE0rZopmex5FR6pi/HTia8i+q/euc9WUWH6fTLt6sQgXjnAcsOwgMMLHCxwCSqPrvi/XFmBiicKitLNrKA== - flush-write-stream@^1.0.0, flush-write-stream@^1.0.2: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" @@ -11031,11 +9920,6 @@ for-in@^1.0.2: resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -11265,21 +10149,11 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-assigned-identifiers@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz#6dbf411de648cbaf8d9169ebb0d2d576191e2ff1" - integrity sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ== - get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" - integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= - get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" @@ -11371,11 +10245,6 @@ gettext-parser@^3.1.0: readable-stream "^3.2.0" safe-buffer "^5.1.2" -gherkin@^5.0.0, gherkin@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/gherkin/-/gherkin-5.1.0.tgz#684bbb03add24eaf7bdf544f58033eb28fb3c6d5" - integrity sha1-aEu7A63STq9731RPWAM+so+zxtU= - git-raw-commits@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.3.tgz#f040e67b8445962d4d168903a9e84c4240c17655" @@ -11402,7 +10271,7 @@ glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: dependencies: is-glob "^4.0.1" -glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -11442,10 +10311,10 @@ glob@7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== +glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -11454,15 +10323,15 @@ glob@^7.0.0, glob@^7.1.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== +glob@^7.2.0: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" @@ -11925,11 +10794,6 @@ html-webpack-plugin@4.5.0: tapable "^1.1.3" util.promisify "1.0.0" -htmlescape@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" - integrity sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E= - htmlparser2@^3.10.0, htmlparser2@^3.3.0, htmlparser2@^3.9.1: version "3.10.1" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" @@ -12252,7 +11116,7 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -indent-string@^3.0.0, indent-string@^3.1.0: +indent-string@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= @@ -12280,7 +11144,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -12305,13 +11169,6 @@ ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== -inline-source-map@~0.6.0: - version "0.6.2" - resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" - integrity sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU= - dependencies: - source-map "~0.5.3" - inquirer@^7.3.3: version "7.3.3" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" @@ -12331,22 +11188,6 @@ inquirer@^7.3.3: strip-ansi "^6.0.0" through "^2.3.6" -insert-module-globals@^7.0.0, insert-module-globals@^7.2.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.2.1.tgz#d5e33185181a4e1f33b15f7bf100ee91890d5cb3" - integrity sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg== - dependencies: - JSONStream "^1.0.3" - acorn-node "^1.5.2" - combine-source-map "^0.8.0" - concat-stream "^1.6.1" - is-buffer "^1.1.0" - path-is-absolute "^1.0.1" - process "~0.11.0" - through2 "^2.0.0" - undeclared-identifiers "^1.1.2" - xtend "^4.0.0" - internal-ip@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" @@ -12470,7 +11311,7 @@ is-boolean-object@^1.1.0: dependencies: call-bind "^1.0.2" -is-buffer@^1.1.0, is-buffer@^1.1.5: +is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== @@ -12528,13 +11369,6 @@ is-core-module@^2.0.0, is-core-module@^2.2.0, is-core-module@^2.4.0: dependencies: has "^1.0.3" -is-core-module@^2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" - integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== - dependencies: - has "^1.0.3" - is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -12619,18 +11453,6 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-generator@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-generator/-/is-generator-1.0.3.tgz#c14c21057ed36e328db80347966c693f886389f3" - integrity sha1-wUwhBX7TbjKNuANHlmxpP4hjifM= - is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -12744,7 +11566,7 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" -is-path-inside@^3.0.2: +is-path-inside@^3.0.2, is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== @@ -12839,11 +11661,6 @@ is-root@2.1.0: resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== -is-shared-array-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" - integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== - is-shared-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" @@ -12906,17 +11723,6 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" -is-typed-array@^1.1.3, is-typed-array@^1.1.7: - version "1.1.8" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.8.tgz#cbaa6585dc7db43318bc5b89523ea384a6f65e79" - integrity sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-abstract "^1.18.5" - foreach "^2.0.5" - has-tostringtag "^1.0.0" - is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -12944,7 +11750,7 @@ is-valid-glob@^1.0.0: resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= -is-weakref@^1.0.1, is-weakref@^1.0.2: +is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== @@ -13881,11 +12687,6 @@ js-sha3@0.8.0: resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== -js-string-escape@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" - integrity sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8= - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -13899,44 +12700,11 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^3.9.0: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jscodeshift@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.11.0.tgz#4f95039408f3f06b0e39bb4d53bc3139f5330e2f" - integrity sha512-SdRK2C7jjs4k/kT2mwtO07KJN9RnjxtKn03d9JVj6c3j9WwaLcFYsICYDnLAzY0hp+wG2nxl+Cm2jWLiNVYb8g== - dependencies: - "@babel/core" "^7.1.6" - "@babel/parser" "^7.1.6" - "@babel/plugin-proposal-class-properties" "^7.1.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.1.0" - "@babel/plugin-proposal-optional-chaining" "^7.1.0" - "@babel/plugin-transform-modules-commonjs" "^7.1.0" - "@babel/preset-flow" "^7.0.0" - "@babel/preset-typescript" "^7.1.0" - "@babel/register" "^7.0.0" - babel-core "^7.0.0-bridge.0" - colors "^1.1.2" - flow-parser "0.*" - graceful-fs "^4.2.4" - micromatch "^3.1.10" - neo-async "^2.5.0" - node-dir "^0.1.17" - recast "^0.20.3" - temp "^0.8.1" - write-file-atomic "^2.3.0" - jsdom@^16.4.0: version "16.5.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.5.0.tgz#9e453505600cc5a70b385750d35256f380730cc4" @@ -14052,13 +12820,6 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json-stable-stringify@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" - integrity sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U= - dependencies: - jsonify "~0.0.0" - json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -14099,11 +12860,6 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= - jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" @@ -14193,21 +12949,6 @@ known-css-properties@^0.21.0: resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.21.0.tgz#15fbd0bbb83447f3ce09d8af247ed47c68ede80d" integrity sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw== -knuth-shuffle-seeded@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/knuth-shuffle-seeded/-/knuth-shuffle-seeded-1.0.6.tgz#01f1b65733aa7540ee08d8b0174164d22081e4e1" - integrity sha1-AfG2VzOqdUDuCNiwF0Fk0iCB5OE= - dependencies: - seed-random "~2.2.0" - -labeled-stream-splicer@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz#42a41a16abcd46fd046306cf4f2c3576fffb1c21" - integrity sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw== - dependencies: - inherits "^2.0.1" - stream-splicer "^2.0.0" - language-subtag-registry@~0.3.2: version "0.3.21" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" @@ -14439,11 +13180,6 @@ lodash.memoize@4.1.2, lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= -lodash.memoize@~3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" - integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8= - lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -14489,7 +13225,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.7.0, lodash@~4.17.12: +"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.5, lodash@^4.7.0, lodash@~4.17.12: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -14537,18 +13273,6 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" -loupe@^2.3.1: - version "2.3.4" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" - integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== - dependencies: - get-func-name "^2.0.0" - -lower-case@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= - lower-case@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7" @@ -14607,7 +13331,7 @@ make-dir@^1.0.0: dependencies: pify "^3.0.0" -make-dir@^2.0.0, make-dir@^2.1.0: +make-dir@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== @@ -14927,14 +13651,14 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2: +minimatch@3.0.4, minimatch@^3.0.4, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" -minimatch@^3.1.2: +minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -14963,11 +13687,16 @@ minimist@0.0.8: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= -minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + minipass-collect@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" @@ -15043,11 +13772,6 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp-classic@^0.5.2: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -15084,26 +13808,10 @@ mocha@^5.2.0: mkdirp "0.5.1" supports-color "5.4.0" -module-deps@^6.2.3: - version "6.2.3" - resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-6.2.3.tgz#15490bc02af4b56cf62299c7c17cba32d71a96ee" - integrity sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA== - dependencies: - JSONStream "^1.0.3" - browser-resolve "^2.0.0" - cached-path-relative "^1.0.2" - concat-stream "~1.6.0" - defined "^1.0.0" - detective "^5.2.0" - duplexer2 "^0.1.2" - inherits "^2.0.1" - parents "^1.0.0" - readable-stream "^2.0.2" - resolve "^1.4.0" - stream-combiner2 "^1.1.1" - subarg "^1.0.0" - through2 "^2.0.0" - xtend "^4.0.0" +module-alias@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/module-alias/-/module-alias-2.2.2.tgz#151cdcecc24e25739ff0aa6e51e1c5716974c0e0" + integrity sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q== moment@^2.24.0: version "2.24.0" @@ -15176,15 +13884,6 @@ mute-stream@0.0.8: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -mz@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - nan@^2.12.1: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" @@ -15262,13 +13961,6 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -no-case@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== - dependencies: - lower-case "^1.1.1" - no-case@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8" @@ -15277,13 +13969,6 @@ no-case@^3.0.3: lower-case "^2.0.1" tslib "^1.10.0" -node-dir@^0.1.17: - version "0.1.17" - resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" - integrity sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU= - dependencies: - minimatch "^3.0.2" - node-forge@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" @@ -15296,6 +13981,11 @@ node-gettext@^2.0.0: dependencies: lodash.get "^4.4.2" +node-hook@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-hook/-/node-hook-1.0.0.tgz#82ca39af991d726d5c7952e59c992378bb296f7e" + integrity sha512-tBTIHwkzXvbesP0fY495VsqSWCOS5Ttt5+mAmeqUC1yglCiSYarNewfi2Q+HOL+M6pZYYqwGU6jIi5+gIHQbpg== + node-http-proxy-json@^0.1.9: version "0.1.9" resolved "https://registry.yarnpkg.com/node-http-proxy-json/-/node-http-proxy-json-0.1.9.tgz#5e744138c189ebd7e0105fe92d035a5486478cd4" @@ -15375,11 +14065,6 @@ node-releases@^1.1.75: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.75.tgz#6dd8c876b9897a1b8e5a02de26afa79bb54ebbfe" integrity sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw== -node-releases@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" - integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== - normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -15504,7 +14189,7 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.11.0, object-inspect@^1.12.0: +object-inspect@^1.12.0: version "1.12.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== @@ -15758,7 +14443,7 @@ original@^1.0.0: dependencies: url-parse "^1.4.3" -os-browserify@^0.3.0, os-browserify@~0.3.0: +os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= @@ -15773,13 +14458,6 @@ ospath@^1.2.2: resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs= -outpipe@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/outpipe/-/outpipe-1.1.1.tgz#50cf8616365e87e031e29a5ec9339a3da4725fa2" - integrity sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I= - dependencies: - shell-quote "^1.4.2" - p-cancelable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" @@ -15883,13 +14561,6 @@ package-json@^6.3.0: registry-url "^5.0.0" semver "^6.2.0" -pad-right@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/pad-right/-/pad-right-0.2.2.tgz#6fbc924045d244f2a2a244503060d3bfc6009774" - integrity sha1-b7ySQEXSRPKiokRQMGDTv8YAl3Q= - dependencies: - repeat-string "^1.5.2" - pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" @@ -15919,13 +14590,6 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parents@^1.0.0, parents@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" - integrity sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E= - dependencies: - path-platform "~0.11.15" - parse-asn1@^5.0.0: version "5.1.5" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" @@ -16015,16 +14679,11 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= -path-browserify@0.0.1, path-browserify@~0.0.0: +path-browserify@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== -path-browserify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" - integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== - path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" @@ -16040,7 +14699,7 @@ path-exists@^4.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: +path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= @@ -16065,16 +14724,6 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-platform@~0.11.15: - version "0.11.15" - resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" - integrity sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I= - path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -16099,11 +14748,6 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== - pause-stream@0.0.11: version "0.0.11" resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" @@ -16137,11 +14781,6 @@ perfy@^1.1.5: resolved "https://registry.yarnpkg.com/perfy/-/perfy-1.1.5.tgz#0d629f870a34a3eb1866d3db485d2b3faef29e4b" integrity sha512-/ieVBpMaPTJf83YTUl2TImsSwMEJ23qGP2w27pE6aX+NrB/ZRGqOnQZpl7J719yFwd+ebDiHguPNFeMSamyK7w== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - picomatch@^2.0.4, picomatch@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.1.tgz#21bac888b6ed8601f831ce7816e335bc779f0a4a" @@ -16184,7 +14823,7 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= -pirates@^4.0.0, pirates@^4.0.1: +pirates@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== @@ -17035,7 +15674,7 @@ process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -process@^0.11.10, process@~0.11.0: +process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= @@ -17182,7 +15821,7 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@^1.2.4, punycode@^1.3.2: +punycode@^1.2.4: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= @@ -17215,7 +15854,7 @@ query-string@^4.1.0: object-assign "^4.1.0" strict-uri-encode "^1.0.0" -querystring-es3@^0.2.0, querystring-es3@~0.2.0: +querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= @@ -17527,13 +16166,6 @@ react@^16.13.1, react@^16.8.6: object-assign "^4.1.1" prop-types "^15.6.2" -read-only-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" - integrity sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A= - dependencies: - readable-stream "^2.0.2" - read-pkg-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" @@ -17583,7 +16215,7 @@ read-pkg@^5.2.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.2.0, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: +"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.2.0, readable-stream@^3.4.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -17628,23 +16260,6 @@ readdirp@~3.5.0: dependencies: picomatch "^2.2.1" -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -recast@^0.20.3: - version "0.20.4" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.20.4.tgz#db55983eac70c46b3fff96c8e467d65ffb4a7abc" - integrity sha512-6qLIBGGRcwjrTZGIiBpJVC/NeuXpogXNyRQpqU1zWPUigCphvApoCs9KIwDYh1eDuJ6dAFlQoi/QUyE5KQ6RBQ== - dependencies: - ast-types "0.14.2" - esprima "~4.0.0" - source-map "~0.6.1" - tslib "^2.0.1" - recursive-readdir@2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" @@ -17668,18 +16283,16 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" +reflect-metadata@0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== + reflect.ownkeys@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz#749aceec7f3fdf8b63f927a04809e90c5c0b3460" integrity sha1-dJrO7H8/34tj+SegSAnpDFwLNGA= -regenerate-unicode-properties@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" - integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== - dependencies: - regenerate "^1.4.2" - regenerate-unicode-properties@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" @@ -17692,11 +16305,6 @@ regenerate@^1.4.0: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" @@ -17733,6 +16341,18 @@ regex-parser@^2.2.11: resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== +regexp-match-indices@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regexp-match-indices/-/regexp-match-indices-1.0.2.tgz#cf20054a6f7d5b3e116a701a7b00f82889d10da6" + integrity sha512-DwZuAkt8NF5mKwGGER1EGh2PRqyvhRhhLviH+R8y8dIuaQROlUfXjt4s9ZTXstIsSkptf06BSvwcEmmfheJJWQ== + dependencies: + regexp-tree "^0.1.11" + +regexp-tree@^0.1.11: + version "0.1.24" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.24.tgz#3d6fa238450a4d66e5bc9c4c14bb720e2196829d" + integrity sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw== + regexp.prototype.flags@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" @@ -17792,18 +16412,6 @@ regexpu-core@^4.7.1: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.2.0" -regexpu-core@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.0.1.tgz#c531122a7840de743dcf9c83e923b5560323ced3" - integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw== - dependencies: - regenerate "^1.4.2" - regenerate-unicode-properties "^10.0.1" - regjsgen "^0.6.0" - regjsparser "^0.8.2" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.0.0" - registry-auth-token@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.1.1.tgz#40a33be1e82539460f94328b0f7f0f84c16d9479" @@ -17823,11 +16431,6 @@ regjsgen@^0.5.1: resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== -regjsgen@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" - integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== - regjsparser@^0.6.4: version "0.6.4" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" @@ -17835,13 +16438,6 @@ regjsparser@^0.6.4: dependencies: jsesc "~0.5.0" -regjsparser@^0.8.2: - version "0.8.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" - integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== - dependencies: - jsesc "~0.5.0" - relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" @@ -17913,7 +16509,7 @@ repeat-element@^1.1.2: resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== -repeat-string@^1.0.0, repeat-string@^1.5.2, repeat-string@^1.6.1: +repeat-string@^1.0.0, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= @@ -17977,7 +16573,7 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-from-string@^2.0.1, require-from-string@^2.0.2: +require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== @@ -18050,6 +16646,13 @@ resolve-pathname@^3.0.0: resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== +resolve-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg/-/resolve-pkg-2.0.0.tgz#ac06991418a7623edc119084edc98b0e6bf05a41" + integrity sha512-+1lzwXehGCXSeryaISr6WujZzowloigEofRB+dj75y9RRa/obVcYgbHJd53tdYw8pvZj8GojXaaENws8Ktw/hQ== + dependencies: + resolve-from "^5.0.0" + resolve-url-loader@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz#235e2c28e22e3e432ba7a5d4e305c59a58edfc08" @@ -18079,15 +16682,6 @@ resolve@1.18.1: is-core-module "^2.0.0" path-parse "^1.0.6" -resolve@^1.1.4, resolve@^1.3.3, resolve@^1.4.0: - version "1.22.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== - dependencies: - is-core-module "^2.8.1" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.3.2, resolve@^1.8.1: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" @@ -18413,11 +17007,6 @@ schema-utils@^3.1.0, schema-utils@^3.1.1: ajv "^6.12.5" ajv-keywords "^3.5.2" -seed-random@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/seed-random/-/seed-random-2.2.0.tgz#2a9b19e250a817099231a5b99a4daf80b7fbed54" - integrity sha1-KpsZ4lCoFwmSMaW5mk2vgLf77VQ= - select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -18490,11 +17079,6 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" -serialize-error@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" - integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go= - serialize-javascript@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" @@ -18574,7 +17158,7 @@ setprototypeof@1.1.1: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== -sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: +sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== @@ -18589,21 +17173,6 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" -shasum-object@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shasum-object/-/shasum-object-1.0.0.tgz#0b7b74ff5b66ecf9035475522fa05090ac47e29e" - integrity sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg== - dependencies: - fast-safe-stringify "^2.0.7" - -shasum@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" - integrity sha1-5wEjENj0F/TetXEhUOVni4euVl8= - dependencies: - json-stable-stringify "~0.0.0" - sha.js "~2.4.4" - shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -18633,11 +17202,6 @@ shell-quote@1.7.2: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== -shell-quote@^1.4.2, shell-quote@^1.6.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" - integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== - shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" @@ -18662,11 +17226,6 @@ signal-exit@^3.0.3: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" @@ -18806,14 +17365,6 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.16, source-map-support@~0.5.19: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - source-map-support@^0.5.6, source-map-support@~0.5.12: version "0.5.16" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" @@ -18822,16 +17373,19 @@ source-map-support@^0.5.6, source-map-support@~0.5.12: buffer-from "^1.0.0" source-map "^0.6.0" +source-map-support@~0.5.19: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@0.5.6: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" - integrity sha1-dc449SvwczxafwwRjYEzSiu19BI= - source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -18842,11 +17396,16 @@ source-map@0.7.3, source-map@^0.7.3, source-map@~0.7.2: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== -source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.3: +source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= +source-map@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + source-map@^0.8.0-beta.0: version "0.8.0-beta.0" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" @@ -18995,18 +17554,6 @@ stable@^0.1.8: resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== -stack-chain@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/stack-chain/-/stack-chain-2.0.0.tgz#d73d1172af89565f07438b5bcc086831b6689b2d" - integrity sha512-GGrHXePi305aW7XQweYZZwiRwR7Js3MWoK/EHzzB9ROdc75nCnjSJVi21rdAGxFl+yCx2L2qdfl5y7NO4lTyqg== - -stack-generator@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.5.tgz#fb00e5b4ee97de603e0773ea78ce944d81596c36" - integrity sha512-/t1ebrbHkrLrDuNMdeAcsvynWgoH/i4o8EGGfX7dEYDoTXOYVAkEpFdtshlvabzc6JlJ8Kf9YdFEoz7JkzGN9Q== - dependencies: - stackframe "^1.1.1" - stack-utils@^2.0.2, stack-utils@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" @@ -19019,22 +17566,10 @@ stackframe@^1.1.1: resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== -stacktrace-gps@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/stacktrace-gps/-/stacktrace-gps-3.0.4.tgz#7688dc2fc09ffb3a13165ebe0dbcaf41bcf0c69a" - integrity sha512-qIr8x41yZVSldqdqe6jciXEaSCKw1U8XTXpjDuy0ki/apyTn/r3w9hDAAQOhZdxvsC93H+WwwEu5cq5VemzYeg== - dependencies: - source-map "0.5.6" - stackframe "^1.1.1" - -stacktrace-js@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stacktrace-js/-/stacktrace-js-2.0.2.tgz#4ca93ea9f494752d55709a081d400fdaebee897b" - integrity sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg== - dependencies: - error-stack-parser "^2.0.6" - stack-generator "^2.0.5" - stacktrace-gps "^3.0.4" +stackframe@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" + integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== start-server-and-test@^1.12.5: version "1.12.5" @@ -19067,7 +17602,7 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= -stream-browserify@^2.0.0, stream-browserify@^2.0.1: +stream-browserify@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== @@ -19075,22 +17610,6 @@ stream-browserify@^2.0.0, stream-browserify@^2.0.1: inherits "~2.0.1" readable-stream "^2.0.2" -stream-browserify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" - integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== - dependencies: - inherits "~2.0.4" - readable-stream "^3.5.0" - -stream-combiner2@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" - integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= - dependencies: - duplexer2 "~0.1.0" - readable-stream "^2.0.2" - stream-combiner@~0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" @@ -19117,39 +17636,16 @@ stream-http@^2.7.2: to-arraybuffer "^1.0.0" xtend "^4.0.0" -stream-http@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.2.0.tgz#1872dfcf24cb15752677e40e5c3f9cc1926028b5" - integrity sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.4" - readable-stream "^3.6.0" - xtend "^4.0.2" - stream-shift@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== -stream-splicer@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.1.tgz#0b13b7ee2b5ac7e0609a7463d83899589a363fcd" - integrity sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg== - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.2" - strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= -string-argv@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" - integrity sha1-2sMECGkMIfPDYwo/86BYd73L1zY= - string-hash@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" @@ -19549,13 +18045,6 @@ stylis@3.5.4: resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe" integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q== -subarg@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" - integrity sha1-9izxdYHplrSPyWVpn1TAauJouNI= - dependencies: - minimist "^1.1.0" - sugarss@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d" @@ -19606,11 +18095,6 @@ supports-hyperlinks@^2.0.0: has-flag "^4.0.0" supports-color "^7.0.0" -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - svg-parser@^2.0.2: version "2.0.4" resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" @@ -19645,13 +18129,6 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -syntax-error@^1.1.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" - integrity sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w== - dependencies: - acorn-node "^1.2.0" - table@^6.0.4, table@^6.6.0: version "6.7.0" resolved "https://registry.yarnpkg.com/table/-/table-6.7.0.tgz#26274751f0ee099c547f6cb91d3eff0d61d155b2" @@ -19731,13 +18208,6 @@ temp-dir@^2.0.0: resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== -temp@^0.8.1: - version "0.8.4" - resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.4.tgz#8c97a33a4770072e0a05f919396c7665a7dd59f2" - integrity sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg== - dependencies: - rimraf "~2.6.2" - temp@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.1.tgz#2d666114fafa26966cd4065996d7ceedd4dd4697" @@ -19876,20 +18346,6 @@ text-table@0.2.0, text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - throat@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" @@ -19953,13 +18409,6 @@ thunky@^1.0.2: resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== -timers-browserify@^1.0.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" - integrity sha1-ycWLV1voQHN1y14kYtrO50NZ9B0= - dependencies: - process "~0.11.0" - timers-browserify@^2.0.4: version "2.0.11" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" @@ -19982,14 +18431,6 @@ tiny-warning@^1.0.0, tiny-warning@^1.0.3: resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== -title-case@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.1.tgz#3e127216da58d2bc5becf137ab91dae3a7cd8faa" - integrity sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o= - dependencies: - no-case "^2.2.0" - upper-case "^1.0.3" - tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -20159,11 +18600,6 @@ tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== -tslib@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" - integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== - tslib@^2.1.0: version "2.3.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" @@ -20181,11 +18617,6 @@ tty-browserify@0.0.0: resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= -tty-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" - integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -20212,7 +18643,7 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: +type-detect@4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== @@ -20302,12 +18733,7 @@ uglify-js@^3.1.4: resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.5.tgz#5d71d6dbba64cf441f32929b1efce7365bb4f113" integrity sha512-xtB8yEqIkn7zmOyS2zUNBsYCBRhDkvlNxMMY2smuJ/qA8NCHeQvKCF3i9Z4k8FJH4+PJvZRtMrPynfZ75+CSZw== -umd@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf" - integrity sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow== - -unbox-primitive@^1.0.0, unbox-primitive@^1.0.1: +unbox-primitive@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== @@ -20332,27 +18758,11 @@ unc-path-regex@^0.1.2: resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= -undeclared-identifiers@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz#9254c1d37bdac0ac2b52de4b6722792d2a91e30f" - integrity sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw== - dependencies: - acorn-node "^1.3.0" - dash-ast "^1.0.0" - get-assigned-identifiers "^1.2.0" - simple-concat "^1.0.0" - xtend "^4.0.1" - unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== - unicode-match-property-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" @@ -20361,34 +18771,16 @@ unicode-match-property-ecmascript@^1.0.4: unicode-canonical-property-names-ecmascript "^1.0.4" unicode-property-aliases-ecmascript "^1.0.4" -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== -unicode-match-property-value-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" - integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== - unicode-property-aliases-ecmascript@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== -unicode-property-aliases-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" - integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== - unified@^9.1.0: version "9.2.0" resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8" @@ -20540,11 +18932,6 @@ update-notifier@^3.0.0: semver-diff "^2.0.0" xdg-basedir "^3.0.0" -upper-case@^1.0.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= - uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -20581,7 +18968,7 @@ url-parse@^1.4.3, url-parse@^1.4.7: querystringify "^2.1.1" requires-port "^1.0.0" -url@^0.11.0, url@~0.11.0: +url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= @@ -20594,11 +18981,6 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -util-arity@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/util-arity/-/util-arity-1.1.0.tgz#59d01af1fdb3fede0ac4e632b0ab5f6ce97c9330" - integrity sha1-WdAa8f2z/t4KxOYysKtfbOl8kzA= - util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -20636,25 +19018,6 @@ util@^0.11.0: dependencies: inherits "2.0.3" -util@~0.10.1: - version "0.10.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" - integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== - dependencies: - inherits "2.0.3" - -util@~0.12.0: - version "0.12.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" - integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - safe-buffer "^5.1.2" - which-typed-array "^1.1.2" - utila@^0.4.0, utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" @@ -20665,6 +19028,11 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= +uuid@9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + uuid@^3.3.2, uuid@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" @@ -20735,15 +19103,6 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -verror@^1.9.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.1.tgz#4bf09eeccf4563b109ed4b3d458380c972b0cdeb" - integrity sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - vfile-message@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" @@ -20810,7 +19169,7 @@ vinyl@^2.0.0, vinyl@^2.2.0: remove-trailing-separator "^1.0.1" replace-ext "^1.0.0" -vm-browserify@^1.0.0, vm-browserify@^1.0.1: +vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== @@ -20854,19 +19213,6 @@ warning@^4.0.2: dependencies: loose-envify "^1.0.0" -watchify@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/watchify/-/watchify-4.0.0.tgz#53b002d51e7b0eb640b851bb4de517a689973392" - integrity sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA== - dependencies: - anymatch "^3.1.0" - browserify "^17.0.0" - chokidar "^3.4.0" - defined "^1.0.0" - outpipe "^1.1.0" - through2 "^4.0.2" - xtend "^4.0.2" - watchpack-chokidar2@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" @@ -21138,18 +19484,6 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which-typed-array@^1.1.2: - version "1.1.7" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.7.tgz#2761799b9a22d4b8660b3c1b40abaa7739691793" - integrity sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-abstract "^1.18.5" - foreach "^2.0.5" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.7" - which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -21539,7 +19873,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^2.0.0, write-file-atomic@^2.3.0: +write-file-atomic@^2.0.0: version "2.4.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== @@ -21590,7 +19924,7 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: +"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==