ডাটা (Data), বিগ ডাটা (Big Data) ও মেটা ডাটা (Meta Data) ?

ধরুন আপনি ইলেকট্রনিক জাহাজে (Air Bus) করে বাংলাদেশ থেকে নরওয়ে তে যাচ্ছেন ডিএইচআইএস ২ র এক্সপার্ট একাডেমী তে জয়েন করার জন্য। একবার কি ভেবে দেখেছেন যে প্রতি সেকেন্ড এ বিমানে কি পরিমান তথ্যের (অনেক শ্রেণীবদ্ধ ডাটার সমন্বয়) প্রয়োজন হচ্ছে অথবা কি পরিমান তথ্য সে জমা করছে? অর্থাৎ ফ্লাইট ডাটা রেকর্ডার বা এফডিআর, যেটি বিমানের ওড়া, ওঠানামা, বিমানের মধ্যের তাপমাত্রা, পরিবেশ, চাপ বা তাপের পরিবর্তন, সময়, শব্দ ইত্যাদি নানা বিষয় নিজের সিস্টেমের মধ্যে রেকর্ড করে রাখে। আর যেখানে তথ্য গুলো জমা রাখে তাকে ‘ব্ল্যাক বক্স’বলে যা আমরা সবাই জানি। এটিকে ব্ল্যাক বক্স নামে ডাকা হলেও এর আসল নাম হলো ফ্লাইট রেকর্ডার আর এটির রং অনেকটা কমলা ধরণের। তাহলে আপনার নরওয়ে যেতে ১৫ ঘণ্টায় কি পরিমান তথ্য ফ্লাইট রেকর্ডারে জমা হবে? আসলে আমরা এই তথ্য গুলোকেই ডাটা বলছি।

বিস্তারিত দেখুনঃ
Mohammad Julhas Sujan DHIS2 Developer Department of Informatics University of Oslo, Norway Skype: julhas08
Email: julhaspustcse@gmail.com
Day-1 Agenda:
  • 1. Overview of the program:
    • 1.1 Introduction and Logistics
    • 1.2 Purpose of the Course
    • 1.3 Learning Environment
    • 1.4 Participants Expectations
  • 2. Web Apps In DHIS2
    • 2.1 DHIS2 Overview
    • 2.2 Why do we need extensibility?
    • 2.3 How to achieve extensibility?
    • 2.4 DHIS2 Architecture
    • 2.5 DHIS2 Web API and Example
    • 2.6 DHIS2 Web Apps and Example
    • 2.7 DHIS2 Data Store and Why Data Store?
    • 2.8 DHIS2 Publish Subscribe Message Queue (SMQ) and Why publish (SMQ)?
    • 2.9 DHIS2 App Store
    • 2.10 Engaging with App Store
    • 2.11 DHIS2 Software Development
    • 2.12 DHIS2 Security
  • 3. Overview of Web API
    • 3.1 Session Agenda
    • 3.2 Why DHIS2 Web API
    • 3.3 HTTP and REST Principle
    • 3.4 DHIS2 Authentication
    • 3.5 Endpoint Overview
    • 3.6 Schema Endpoint
    • 3.7 Object Filtering
    • 3.8 Field Filtering
    • 3.9 References
  • 4. Assignment
Handson detail
Exercise detail

DHIS2 All Bengali Manuals

DHIS2 User Management
DHIS2 Organization Unit Management
Custom Data Entry Form Design
Facility Registry Interoperability App User Guideline
Interoperability Standard Guideline


Mohammad Julhas Sujan DHIS2 Developer Department of Informatics University of Oslo, Norway Skype: julhas08
Email: julhaspustcse@gmail.com
Day-1 Agenda:
  • 1. Overview of the program:
    • 1.1 Introduction and Logistics
    • 1.2 Purpose of the Course
    • 1.3 Learning Environment
    • 1.4 Participants Expectations
  • 2. Web Apps In DHIS2
    • 2.1 DHIS2 Overview
    • 2.2 Why do we need extensibility?
    • 2.3 How to achieve extensibility?
    • 2.4 DHIS2 Architecture
    • 2.5 DHIS2 Web API and Example
    • 2.6 DHIS2 Web Apps and Example
    • 2.7 DHIS2 Data Store and Why Data Store?
    • 2.8 DHIS2 Publish Subscribe Message Queue (SMQ) and Why publish (SMQ)?
    • 2.9 DHIS2 App Store
    • 2.10 Engaging with App Store
    • 2.11 DHIS2 Software Development
    • 2.12 DHIS2 Security
  • 3. Overview of Web API
    • 3.1 Session Agenda
    • 3.2 Why DHIS2 Web API
    • 3.3 HTTP and REST Principle
    • 3.4 DHIS2 Authentication
    • 3.5 Endpoint Overview
    • 3.6 Schema Endpoint
    • 3.7 Object Filtering
    • 3.8 Field Filtering
    • 3.9 References
  • 4. Assignment
Handson detail
Exercise detail

ডাটা এলিমেন্ট কি (What is data element) ?

ডিএইচআইএস ২ তে র-ডাটা ক্যাপচার করার মাধ্যম ই হল ডাটা এলিমেন্ট। ডেটা উপাদানগুলি কিভাবে সিস্টেমে রেকর্ড করা হয় ডাটা এলিমেন্ট সেটিই সংজ্ঞায়িত করে। যেমন ম্যালেরিয়ার ক্ষেত্রে মোট ম্যালেরিয়ার সংখ্যা কত তা ম্যালেরিয়া নামক একটি ডাটা এলিমেন্ট রেকর্ড কর। শুধু এতটুকু সংজ্ঞা দিয়ে ডিএইচআইএস ২ তে ডাটা এলিমেন্ট এর বিস্তৃতি বুঝা মুশকিল তবে কাজ করতে গেলে এটি সম্পর্কে বিস্তারিত জানা যাবে।

ডাটা এলিমেন্ট দেখা, ডাটা এলিমেন্ট এডিট করা, ডাটা এলিমেন্ট তৈরি করা, ডাটা এলিমেন্ট গ্রুপ তৈরি করা

বিস্তারিত দেখুনঃ
Mohammad Julhas Sujan DHIS2 Developer Department of Informatics University of Oslo, Norway Skype: julhas08
Email: julhaspustcse@gmail.com
Day-1 Agenda:
  • 1. Overview of the program:
    • 1.1 Introduction and Logistics
    • 1.2 Purpose of the Course
    • 1.3 Learning Environment
    • 1.4 Participants Expectations
  • 2. Web Apps In DHIS2
    • 2.1 DHIS2 Overview
    • 2.2 Why do we need extensibility?
    • 2.3 How to achieve extensibility?
    • 2.4 DHIS2 Architecture
    • 2.5 DHIS2 Web API and Example
    • 2.6 DHIS2 Web Apps and Example
    • 2.7 DHIS2 Data Store and Why Data Store?
    • 2.8 DHIS2 Publish Subscribe Message Queue (SMQ) and Why publish (SMQ)?
    • 2.9 DHIS2 App Store
    • 2.10 Engaging with App Store
    • 2.11 DHIS2 Software Development
    • 2.12 DHIS2 Security
  • 3. Overview of Web API
    • 3.1 Session Agenda
    • 3.2 Why DHIS2 Web API
    • 3.3 HTTP and REST Principle
    • 3.4 DHIS2 Authentication
    • 3.5 Endpoint Overview
    • 3.6 Schema Endpoint
    • 3.7 Object Filtering
    • 3.8 Field Filtering
    • 3.9 References
  • 4. Assignment
Handson detail
Exercise detail

DHIS2 Installation on Windows Local Server

Mohammad Julhas Sujan DHIS2 Developer Department of Informatics University of Oslo, Norway Skype: julhas08
Email: julhaspustcse@gmail.com
Day-1 Agenda:
  • 1. Overview of the program:
    • 1.1 Introduction and Logistics
    • 1.2 Purpose of the Course
    • 1.3 Learning Environment
    • 1.4 Participants Expectations
  • 2. Web Apps In DHIS2
    • 2.1 DHIS2 Overview
    • 2.2 Why do we need extensibility?
    • 2.3 How to achieve extensibility?
    • 2.4 DHIS2 Architecture
    • 2.5 DHIS2 Web API and Example
    • 2.6 DHIS2 Web Apps and Example
    • 2.7 DHIS2 Data Store and Why Data Store?
    • 2.8 DHIS2 Publish Subscribe Message Queue (SMQ) and Why publish (SMQ)?
    • 2.9 DHIS2 App Store
    • 2.10 Engaging with App Store
    • 2.11 DHIS2 Software Development
    • 2.12 DHIS2 Security
  • 3. Overview of Web API
    • 3.1 Session Agenda
    • 3.2 Why DHIS2 Web API
    • 3.3 HTTP and REST Principle
    • 3.4 DHIS2 Authentication
    • 3.5 Endpoint Overview
    • 3.6 Schema Endpoint
    • 3.7 Object Filtering
    • 3.8 Field Filtering
    • 3.9 References
  • 4. Assignment
Handson detail
Exercise detail

DHIS2 event web api to update existing event

POST: http://your-server/api/events/

{
	"events": [{
		"program": "ywNJYaTUVRT",
		"orgUnit": "xDybhnrm1NW",
		"event": "nnjyTxUY39n",
		"eventDate": "2019-11-05",
		"status": "ACTIVE",
		"programStage": "HrdLXTOGh8A",
		"dataValues": [{
			"dataElement": "lIkk661BLpG",
			"value": "AMC94237"
		}, {
			"dataElement": "dRKIjwIDab4",
			"value": "Accident and Emergency"
		}, {
			"dataElement": "tQa6uU1t6s3",
			"value": "ICU"
		}]
	}, {
		"program": "ywNJYaTUVRT",
		"orgUnit": "xDybhnrm1NW",
		"event": "ElCfLd3JaGa",
		"eventDate": "2019-11-05",
		"status": "ACTIVE",
		"programStage": "HrdLXTOGh8A",
		"dataValues": [{
			"dataElement": "lIkk661BLpG",
			"value": "AMC46756"
		}, {
			"dataElement": "dRKIjwIDab4",
			"value": "Advance Trauma Centre"
		},{
			"dataElement": "LSIvZSvxTjw",
			"value": ""
		}]
	}]
}

Opening Balance calculation in DHIS2 stock management

<--script>
dhis2.util.on( 'dhis2.de.event.formReady', function( event,iReVg2xgFPL ) {
	  var periodN= $( '#selectedPeriodId' ).val();// From DHIS2 Selection Param
	  var nextPeriod=(+periodN) + (+1);//201611,201612,201613
	  var nextPeriodSeperate=periodN.toString().substring(0, 4);
	  var year=parseInt(nextPeriodSeperate.trim());
	  var month=parseInt(periodN % 100);
	  if(month==12){
	    year++;
		month=01;
		nextPeriod=year+'01';	
		//console.log("Next period: "+nextPeriod);
	  }	
	 $('.selectedDate').val(nextPeriod);
});

function closingBL(op,re,adplus,adminus,con,closingid,opnextId,period){
// All id pick
 var opbalance= new Number(document.getElementById(op).value);
 var receipts= new Number(document.getElementById(re).value);
 var adjustPlus= new Number(document.getElementById(adplus).value);
 var adjustMinus= new Number(document.getElementById(adminus).value);
 var consump= new Number(document.getElementById(con).value);
 var nextPeriod= $(period).val();
// Closing Balance text data set
var clobalance=opbalance+receipts+adjustPlus-adjustMinus-consump;
/*if(clobalance<0){
 alert('Closing Balance can not be newgative.');
 $(closingid).val(' ');
}*/
$(closingid).val(clobalance);// Display closing balance at the text field
$(opnextId).val(clobalance);// Display closing balance at the text field
$(closingid).change();
$(opnextId).change();
$(closingid).prop("readonly",true);
$(opnextId).prop("readonly",true);
// Spliting Element ID
var ArrayFromString = op.split("-");
var elementId=ArrayFromString[0];

//console.log('Element Id: '+elementId);
//console.log('nextPeriod Id: '+nextPeriod);
var valueSaver = new ValueSaver( elementId,nextPeriod, 'dCWAvZ8hcrs', clobalance, null, 'red' );
valueSaver.save();

}
<--/script>

DHIS2 bulk custom attribute json payload


if(typeof customAttributeString.optionSet !=='undefined' ){
  jsonPayload = JSON.stringify({
    "name": customAttributeString.name,
    "shortName": customAttributeString.shortName,
    "aggregationType": customAttributeString.aggregationType,
    "domainType": customAttributeString.domainType,
    "valueType": customAttributeString.valueType,
    "code": updateArray[i].value,
    "optionSet": {
          "id": customAttributeString.optionSet.id
      }
  });
} 
else {
  jsonPayload = JSON.stringify({
    "name": customAttributeString.name,
    "shortName": customAttributeString.shortName,
    "aggregationType": customAttributeString.aggregationType,
    "domainType": customAttributeString.domainType,
    "valueType": customAttributeString.valueType,
    "code": updateArray[i].value
  });
}

let customAttributeString = response.data;
let jsonPayload = JSON.stringify({
...customAttributeString,
"code" : updateArray[i].value,
});

DHIS2 bulk custom elements json payload

jsonPayload = JSON.stringify({
    "name"      : customElementString.name,
    "shortName" : customElementString.shortName,
    "aggregationType": customElementString.aggregationType,
    "domainType": customElementString.domainType,
    "valueType" : customElementString.valueType,
    "code"      : updateArray[i].value,
    "displayName": customElementString.displayName,
    "displayShortName": customElementString.displayShortName,
    "displayFormName" : customElementString.displayFormName,
    "formName"        : customElementString.formName,
    "url"      : customElementString.url,
    "optionSet": {
        "id": customElementString.optionSet.id
    },
    "categoryCombo": {
        "id": customElementString.categoryCombo.id
    }
  });

Another way: 

let customElementString = response.data;
let jsonPayload = JSON.stringify({
 ...customElementString
 code: updateArray[i].value
});

Smooth Interoperable DHIS2 Mechanisms Curb High Mortality Rates in Bangladesh

Bangladesh is making huge strides in curbing child mortality rates! The Bangladesh National Health Care System holds maternal, neonatal and child health (MNCH) as one of its biggest focuses. Between 1990 and 2015, the maternal mortality ratio (MMR) and under-5 mortality ratio (U5MR) in Bangladesh fell by an impressive 69.1% and 73% respectively reports ‘Trends in maternal mortality: Estimates by WHO, UNICEF, UNFPA, World Bank and the United Nations Populations Division’. DHIS2 is being used in tracking the availability and collecting data of priority MNCH medicines across different health facilities has played a crucial role in this impressive achievement. https://community.dhis2.org/t/smooth-interoperable-dhis2-mechanisms-curb-high-mortality-rates-in-bangladesh/37077

How to merge data elements and datastore payload using React JS

let self = this;
    await getPrograms().then((response) => {
      self.setState({
        dataElements : response.data.programs[0].programStages[0].programStageDataElements       
      }); 
    }).catch(error => this.setState({error: true}));

    await getDataStoreNameSpace(this.props.orgUnitId).then((response) => {
      self.setState({
        dataStoreNamespace : response.data.elements      
      }); 
    }).catch(error => this.setState({error: true}));

    // Merge two array
    const mergeById = (jsonPayload1, jsonPayload2) =>
    jsonPayload1.map(itm => ({
        ...jsonPayload2.find((item) => (item.id === itm.dataElement.id) && item),
        ...itm
    }));
    let mergedArray = mergeById(this.state.dataElements, this.state.dataStoreNamespace);
    this.setState({mergedArrayData: mergedArray});

Laravel database table migration

## Generate Migration 

php artisan make:migration --path=database/migrations/modules/globalSettings create_admin_settings_table

### Migration Run Commands for table generate 


php artisan migrate --path=database/migrations/modules/globalSettings 

DHIS2 Login using Laravel and CURL


public function dhis2Login(Request $request) {	

	$username = trim($request->input('username'));
	$password = trim($request->input('password'));
	$ch = curl_init("http://........:8080/api/me");
	curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
	curl_setopt($ch, CURLOPT_USERPWD, "admin:district");
	$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);   //get status code
	$result=curl_exec ($ch);
	curl_close ($ch);
	$data['resultData']= json_decode($result, true);

}	

How to calculate previous month value in DHIS2 data entry form?

dhis2.util.on( 'dhis2.de.event.formReady', function( event,iReVg2xgFPL ) {
      var periodN= $( '#selectedPeriodId' ).val();// From DHIS2 Selection Param
      var nextPeriod=(+periodN) + (+1);//201611,201612,201613
      var nextPeriodSeperate=periodN.toString().substring(0, 4);
      var year=parseInt(nextPeriodSeperate.trim());
      var month=parseInt(periodN % 100);
      if(month==12){
        year++;
        month=01;
        nextPeriod=year+'01';   
      }   
     $('.selectedDate').val(nextPeriod);
});
See detail: http://dhis2trainingland.com/eportal/?tutorial=how-to-calculate-previous-month-value-in-dhis2-data-entry-form

React JS Async await


if(this.state.duplicateStatus) {
  let dpRes = await ( async (payload, currentIndex) => {
  Object.entries(updateTeiJson).map(payload => {
    let trackedEntityInstance = payload[1].trackedEntityInstance;
    updateTrackedEntity(payload[1], trackedEntityInstance).then(responseData=>{
    console.log("responseData: ", responseData);
      this.setState({
         teiResponse: responseData.data,
         teiResponseString: JSON.stringify(responseData.data),
         duplicateStatus: false
      })
    });
  });        
}

PostgreSQl-cannot execute nextval() in a read-only transaction

Issue: ERROR: cannot execute nextval() in a read-only transaction

Solution: Go >> C:\Program Files\PostgreSQL\11\share, open postgresql.conf and replaced default_transaction_read_only to off as `default_transaction_read_only = off` Also here: C:\Program Files\PostgreSQL\11\data, open postgresql.conf and replaced default_transaction_read_only to off as `default_transaction_read_only = off` In command line: ALTER SYSTEM SET default_transaction_read_only = off; See the result: Select name, setting from pg_settings where name ='default_transation_read_only'

PostgreSQL could not open extension control file “C:/../share/extension/postgis.control”:

ERROR:  could not open extension control file "C:/Program Files/PostgreSQL/10/share/extension/postgis.control": No such file or directory

Actual Cause: If you installed postgres <= 10.1 and want to create postgis extension using `CREATE EXTENSION postgis`you may get this issue. 

Solution: 

It seems that the case is still the same with latest versions of postgres (PostgreSQL-9.6.3-1-win64-bigsql.exe) and postgis (postgis-bundle-pg96x64-setup-2.3.2-1.exe). I copied the files around until all the paths could be resolved:

    Everything from C:\PostgreSQL\pg96\share\extension to C:\PostgreSQL\pg96\share\postgresql\extension
    postgis_topology-2.3.dll, postgis-2.3.dll, rtpostgis-2.3.dll, address_standardizer-2.3.dll and ogr_fdw.dll from C:\PostgreSQL\pg96\lib to C:\PostgreSQL\pg96\lib\postgresql


Ref: https://stackoverflow.com/questions/42806784/how-to-alter-the-path-for-postgres-looking-for-extensions 

DHIS 2 web request gives “Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986”


Solution: This happens because DHIS 2 uses brackets in some of their URLs, and because Tomcat version 8.5 later has prohibited the use of brackets in URLs. The DHIS 2 team is working on a change in the API syntax to avoid the use of brackets, and to encode all API request URLs. A short-term fix is to configure Tomcat to allow for brackets through the relaxedQueryChars connector attribute. Open the following file: /tomcat-dir/conf/server.xml and add relaxedQueryChars="[]" to the HTTP connector element: <-Connector protocol="HTTP/1.1" port="8080" relaxedQueryChars="[]" -/>
See detail: https://webmasters.stackexchange.com/questions/119129/dhis-2-web-request-gives-invalid-character-found-in-the-request-target-the-val

PostgreSQL database upload on windows

Go >> /c/Program Files/PostgreSQL/11/bin

Type: psql -U dhis -f dhis.sql dhis

Provide Password for user dhis: your dhis-password

Domain and Hosting Configuration in Digital Ocean

If you have purchased a domain from name.com/cheapname.com or any other website and want to host it in Digital ocean server, this post will guide you how to configure you domain and hosting in Digital Ocean. I have purchased a domain from ‘Exonhost’ and I want to host it in Digital Ocean Droplet. Let’s follow the below steps:

Read More

How to update categoryOptions using DHIS2 web api?

https://amrtest.icmr.org.in/amrtest/api/categoryOptions/v71U0ziiKTr
{
  "name": "Joint Fluid",
  "shortName": "JTFL",
  "attributeValues": [
    {
      "value": "Joint Fluid 3",
      "attribute": {
        "id": "xmp9h5eZldA"
      }
    }
  ]
}
Read More

How to update meta attributeValues (elements) using DHIS2 web api?

https://your-server/api/dataElements/2a19h5eZldA

{
	"name": "Hospital department",
	"shortName": "Hospital department",
	"aggregationType": "NONE",
	"domainType": "TRACKER",
	"valueType": "TEXT",
	"attributeValues": [{
		"value": "DEPARTMENT",
		"attribute": {
			"id": "xmp9h5eZldA"
		}
	}]
}

Read More

How to update specific trackedEntityAttributes using DHIS2 web api?

https://your-server/api/trackedEntityAttributes/DfXY7WHFzyc

{
      "name": "Age / DOB",
      "valueType": "AGE",
      "aggregationType": "AVERAGE",
      "shortName": "Age / DOB",
      "attributeValues": [
        {
          "value": "AGE",
          "attribute": {
            "id": "xmp9h5eZldA"
          }
        }
      ]
}


Read More

How to get elements detail using DHIS2 d2 framework

getInstance()
    .then(d2 => {
        d2.Api.getApi()  
        .put('dataElements/lIkk661BLpG',{
            method: 'PATCH',
            headers: {
            'content-type': 'application/json',
            Authorization: "Basic " + btoa("admin:district")   
            },
            data: '{"code": "AMR ID 111"}'
          })  
        .then(response => {
           console.log("response: ",response);
        });
    });

Read More

Create New track entity through web API

Tracker Web API consists of 3 endpoints that have full CRUD (create, read, update, delete) support. The 3 endpoints are /api/trackedEntityInstances /api/enrollments and /api/events and they are responsible for Tracked entity instance, Enrollment and Event items.

http://your-server/api/trackedEntityInstances

{
    "trackedEntityType": "nEenWmSyUEp",
    "orgUnit": "DiszpKrYNg8",
    "attributes": [
      {
        "attribute": "w75KJ2mc4zz",
        "value": "Joe"
      }
    ],
    "enrollments":[
      {
         "orgUnit":"DiszpKrYNg8",
         "program":"ur1Edk5Oe2n",
         "enrollmentDate":"2017-09-15",
         "incidentDate":"2017-09-15",
         "events":[
            {
               "program":"ur1Edk5Oe2n",
               "orgUnit":"DiszpKrYNg8",
               "eventDate":"2017-10-17",
               "status":"COMPLETED",
               "storedBy":"admin",
               "programStage":"EPEcjy3FWmI",
               "coordinate":{
                  "latitude":"59.8",
                  "longitude":"10.9"
               },
               "dataValues":[
                  {
                     "dataElement":"qrur9Dvnyt5",
                     "value":"22"
                  }
               ]
            }
            
         ]
      }
   ]
}
Read More

DHIS2 current user roles, organization unit and authorization using d2 framework



Read More

Parsing CSV file in React JS

Sometimes, you may need to upload CSV file using React JS. I have written here a script that can upload and parse CSV file data!



Read More

Deleting DHIS2 Tracker Records using WEB API

We can delete DHIS2 Tracked Entity Instances using postman as follows:


Read More

DHIS2 OAuth2.0 Authentication & Fetch Data

In this post, I will show you how to access DHIS2 data using OAuth2. Let’s start:

DHIS2 supports the OAuth2 authentication protocol. OAuth2 is an open standard for authorization which it allows third-party clients to connect on behalf of a DHIS2 user and get a reusable bearer token for subsequent requests to the Web API. DHIS 2 does not support fine-grained OAuth2 roles but rather provides applications access based on user roles of the DHIS2 user.

Each client for which you want to allow OAuth 2 authentication must be registered in DHIS2.

Read More

DHIS2 installation in Amazon Elastic Compute Cloud (AWS-EC2) Server

Server specifications:

Read More

DHIS2 404-not found error

Problem Statement: DHIS2 404-not found error: After running tomcat

Read More

DHIS2 user create using web api

Sometimes, we face problem to create DHIS2 users using web api. In this post we will show you how to create users in DHIS2 using web api. See the below json payload:

{
  "id": "IE1zznX91pR",
  "firstName": "Julhas",
  "surname": "Sujan",
  "email": "julhaspustcse@gmail.com",
  "userCredentials": {
    "userInfo": { "id": "IE1zznX91pR" },
    "username": "julhas999",
    "password": "your-password",
    "userRoles": [ {
      "id": "mo3t1mDUOmy"
    } ]
  },
  "organisationUnits": [ {
    "id": "PFgkSbQ0nC0"
  } ],
  "userGroups": [ {
    "id": "L7advm7THNS"
  } ]
}

Read More

DHIS2 2.30 Failing to start & Java Heap Space Problem with Solution

Problem Statement: HTTP Status 500 – Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: Java heap space

Read More

DHIS2 custom form scripting example for Stock calculation

In custom data entry form you can use JavaScript to create dynamic behavior and customizations. As an example, you can hide form sections based on specific user input for data elements, or show specific information when a form loads.

The DHIS2 data entry module provides a range of events which you can register for and use to perform actions at certain times. The events are registered on the document element. The jQuery event object and the data set identifier are always the first two arguments provided to the callback functions. The table below provides an overview of the events and when they are triggered.

Read More

DHIS2 Data Sets and Data Entry Forms

All data entry in DHIS2 is organized in data sets. A data set is a collection of data elements grouped together for data entry and data export between instances of DHIS2. To use a data set to collect data for a specific organization unit, you must assign the organization unit to the data set. Once you have assigned the data set to an organization unit, that data set is available in the Data entry app. Only the organization units that you have assigned the data set to can use the data set for data entry.

Read More

DHIS2 core configuration and data management second round training materials

The purpose of this second-round training is to further tailoring of skills for national data management team on DHIS2 customization and maintenance. This training will emphasize on DHIS2 aggregated and tracker format customization along with standard in metadata management including naming convention. Process of metadata adding, updating, maintaining, sharing and archiving. User management and access control in DHIS2. The ultimate goal is to improve national capacity on data management and configuration of DHIS2.


Read More

ডাটা (Data), বিগ ডাটা (Big Data) ও মেটা ডাটা (Meta Data) ?

ধরুন আপনি ইলেকট্রনিক জাহাজে (Air Bus) করে বাংলাদেশ থেকে নরওয়ে তে যাচ্ছেন ডিএইচআইএস ২ র এক্সপার্ট একাডেমী তে জয়েন করার জন্য। একবার কি ভেবে দেখেছেন যে প্রতি সেকেন্ড এ বিমানে কি পরিমান তথ্যের (অনেক শ্রেণীবদ্ধ ডাটার সমন্বয়) প্রয়োজন হচ্ছে অথবা কি পরিমান তথ্য সে জমা করছে? অর্থাৎ ফ্লাইট ডাটা রেকর্ডার বা এফডিআর, যেটি বিমানের ওড়া, ওঠানামা, বিমানের মধ্যের তাপমাত্রা, পরিবেশ, চাপ বা তাপের পরিবর্তন, সময়, শব্দ ইত্যাদি নানা বিষয় নিজের সিস্টেমের মধ্যে রেকর্ড করে রাখে। আর যেখানে তথ্য গুলো জমা রাখে তাকে ‘ব্ল্যাক বক্স’বলে যা আমরা সবাই জানি। এটিকে ব্ল্যাক বক্স নামে ডাকা হলেও এর আসল নাম হলো ফ্লাইট রেকর্ডার আর এটির রং অনেকটা কমলা ধরণের। তাহলে আপনার নরওয়ে যেতে ১৫ ঘণ্টায় কি পরিমান তথ্য ফ্লাইট রেকর্ডারে জমা হবে? আসলে আমরা এই তথ্য গুলোকেই ডাটা বলছি।

বিস্তারিত দেখুনঃ

ইন্ডিকেটর কি?

এটি অনেকটা ডাটা এলিমেন্ট এর মত যা ডাটা এনালাইসিস এর জন্য ব্যবহার করা। এটি একটি calculated formula যা ডাটা এলিমেন্ট, ক্যাটেগরি অপশন, দ্রুবক বা কোন ফ্যাক্টর এর সমন্বয়ে তৈরি। যেমন, আপনি ৫টি এলিমেন্ট এর ডাটার যোগফল পেতে চান সেক্ষেত্রে এই যোগফলটিই হচ্ছে ইন্ডিকেটর।

উধাহরন স্বরূপ BCG coverage <1 year বের করতে গেলে ফ্যাক্টর হিসাবে ১০০, numerator হিসাবে “BCG doses given to children under 1 year” এবং denominator হিসাবে “Target population under 1 year” ব্যবহার করতে হবে। নীচে কয়েকটি উধাহরন দেখানো হলঃ

বিস্তারিত দেখুনঃ

ক্যাটেগরি, ক্যাটেগরি অপশন কি এবং কেন ব্যবহার করবেন?

একটি উদাহরণ এর মাধ্যমে বিষয়টি আলোচনা করা যাক। ধরুন কোন একটি এলাকায় কোন নিদিষ্ট সময় এর ম্যালেরিয়া রুগীর মোট সংখা কত তা দেখতে চান। সেক্ষেত্রে আপনি কি করবেন নিশ্চয় আপনি ডাটা এলিমেন্ট ব্যবহার করে ঐ সংখাটি নিয়ে আসবেন। তার মানে এখানে ডাটা এলিমেন্ট এর মাধ্যমে আপনি aggregate ডাটা নিয়ে আসলেন। এবার আপনি চান যে এই সংখার মধ্যে কত জন মহিলা এবং কত জন পুরুষ অথবা ১০ বৎসর এর বেশি অথবা ১০ বৎসর এর কমের কত রুগী আছে। সেই তথ্যটি কিন্তু আপনি ডাটা এলিমেন্ট থেকে পাবেন না। সেক্ষেত্রে আপনাকে ক্যাটেগরি ব্যবহার করতে হবে অর্থাৎ ক্যাটেগরি আসলে aggregate ডাটা এলিমেন্ট এর আলাদা কম্পনেন্ট। যেমন জেন্ডার অথবা এজ হচ্ছে ক্যাটেগরি আর মহিলা, পুরুষ এই গুলো হচ্ছে ক্যাটেগরি অপশন।

বিস্তারিত দেখুনঃ

ডাটা এলিমেন্ট কি (What is data element) ?

ডিএইচআইএস ২ তে র-ডাটা ক্যাপচার করার মাধ্যম ই হল ডাটা এলিমেন্ট। ডেটা উপাদানগুলি কিভাবে সিস্টেমে রেকর্ড করা হয় ডাটা এলিমেন্ট সেটিই সংজ্ঞায়িত করে। যেমন ম্যালেরিয়ার ক্ষেত্রে মোট ম্যালেরিয়ার সংখ্যা কত তা ম্যালেরিয়া নামক একটি ডাটা এলিমেন্ট রেকর্ড কর। শুধু এতটুকু সংজ্ঞা দিয়ে ডিএইচআইএস ২ তে ডাটা এলিমেন্ট এর বিস্তৃতি বুঝা মুশকিল তবে কাজ করতে গেলে এটি সম্পর্কে বিস্তারিত জানা যাবে।

ডাটা এলিমেন্ট দেখা, ডাটা এলিমেন্ট এডিট করা, ডাটা এলিমেন্ট তৈরি করা, ডাটা এলিমেন্ট গ্রুপ তৈরি করা

বিস্তারিত দেখুনঃ

    Category

Blog

POST: http://your-server/api/events/

{
	"events": [{
		"program": "ywNJYaTUVRT",
		"orgUnit": "xDybhnrm1NW",
		"event": "nnjyTxUY39n",
		"eventDate": "2019-11-05",
		"status": "ACTIVE",
		"programStage": "HrdLXTOGh8A",
		"dataValues": [{
			"dataElement": "lIkk661BLpG",
			"value": "AMC94237"
		}, {
			"dataElement": "dRKIjwIDab4",
			"value": "Accident and Emergency"
		}, {
			"dataElement": "tQa6uU1t6s3",
			"value": "ICU"
		}]
	}, {
		"program": "ywNJYaTUVRT",
		"orgUnit": "xDybhnrm1NW",
		"event": "ElCfLd3JaGa",
		"eventDate": "2019-11-05",
		"status": "ACTIVE",
		"programStage": "HrdLXTOGh8A",
		"dataValues": [{
			"dataElement": "lIkk661BLpG",
			"value": "AMC46756"
		}, {
			"dataElement": "dRKIjwIDab4",
			"value": "Advance Trauma Centre"
		},{
			"dataElement": "LSIvZSvxTjw",
			"value": ""
		}]
	}]
}

Blog

<--script>
dhis2.util.on( 'dhis2.de.event.formReady', function( event,iReVg2xgFPL ) {
	  var periodN= $( '#selectedPeriodId' ).val();// From DHIS2 Selection Param
	  var nextPeriod=(+periodN) + (+1);//201611,201612,201613
	  var nextPeriodSeperate=periodN.toString().substring(0, 4);
	  var year=parseInt(nextPeriodSeperate.trim());
	  var month=parseInt(periodN % 100);
	  if(month==12){
	    year++;
		month=01;
		nextPeriod=year+'01';	
		//console.log("Next period: "+nextPeriod);
	  }	
	 $('.selectedDate').val(nextPeriod);
});

function closingBL(op,re,adplus,adminus,con,closingid,opnextId,period){
// All id pick
 var opbalance= new Number(document.getElementById(op).value);
 var receipts= new Number(document.getElementById(re).value);
 var adjustPlus= new Number(document.getElementById(adplus).value);
 var adjustMinus= new Number(document.getElementById(adminus).value);
 var consump= new Number(document.getElementById(con).value);
 var nextPeriod= $(period).val();
// Closing Balance text data set
var clobalance=opbalance+receipts+adjustPlus-adjustMinus-consump;
/*if(clobalance<0){
 alert('Closing Balance can not be newgative.');
 $(closingid).val(' ');
}*/
$(closingid).val(clobalance);// Display closing balance at the text field
$(opnextId).val(clobalance);// Display closing balance at the text field
$(closingid).change();
$(opnextId).change();
$(closingid).prop("readonly",true);
$(opnextId).prop("readonly",true);
// Spliting Element ID
var ArrayFromString = op.split("-");
var elementId=ArrayFromString[0];

//console.log('Element Id: '+elementId);
//console.log('nextPeriod Id: '+nextPeriod);
var valueSaver = new ValueSaver( elementId,nextPeriod, 'dCWAvZ8hcrs', clobalance, null, 'red' );
valueSaver.save();

}
<--/script>

Blog


if(typeof customAttributeString.optionSet !=='undefined' ){
  jsonPayload = JSON.stringify({
    "name": customAttributeString.name,
    "shortName": customAttributeString.shortName,
    "aggregationType": customAttributeString.aggregationType,
    "domainType": customAttributeString.domainType,
    "valueType": customAttributeString.valueType,
    "code": updateArray[i].value,
    "optionSet": {
          "id": customAttributeString.optionSet.id
      }
  });
} 
else {
  jsonPayload = JSON.stringify({
    "name": customAttributeString.name,
    "shortName": customAttributeString.shortName,
    "aggregationType": customAttributeString.aggregationType,
    "domainType": customAttributeString.domainType,
    "valueType": customAttributeString.valueType,
    "code": updateArray[i].value
  });
}

let customAttributeString = response.data;
let jsonPayload = JSON.stringify({
...customAttributeString,
"code" : updateArray[i].value,
});