← Back to team overview

dhis2-devs team mailing list archive

Re: patient_dataelement Vs routine_dataelement

 

Dear all,

And yet another diagram :-)

This time the concept of Encounter is completely dropped from the
PatientDataValue for a reason which Ola thought that our approach should be
similar to that of DHIS 1.4 patient module. Unfortunately I don't agree with
this ... in any case I have attached you the new model. According to Ola the
ActivityPlan need to work with plan not with half-filled encounters and I
thought that it doesn't make sense to have two objects called ActivityPlan
and Plan which I think is quite difficult to visualize the difference and
similarity and hence I have given them a new name called ActivityPlan and
HouseHoldVisit. This makes the concept of Encounter totally irrelevant.

And if anyone has another view/insight please come up with a more concrete
diagram close to an Object Oriented code than a list of description or
argument. I think doing that will speed up the whole process.


Thank you
Abyot.

2009/6/6 Abyot Gizaw <abyota@xxxxxxxxx>

> Hi,
>
> Please find the attached for your comment. In addition, I will be happy if
> I could get your view on how to generate activity plans.
>
> The idea I have, sort of use case, is for users to browse through the
> orgunits and reach to a village level. This is very important as
> activityplans are made every month for a village and approved by a village
> supervisor before they got passed on to the 2 health-extension-workers a
> village has. Now, once a level is reached to a specific village then I am
> thinking of getting the list of houses for that village. Assuming that
> houses are extension of sources then I think it will be easy to indentify
> the latest encounter (actually a list of encounters) that happened in a
> given house for whom (patient) and what_kind_ of_service(dataset) - because
> Encounter has (source,dataset,date,patient) attributes.
>
> Departing from such a (history of) encounter then it is possible to
> determine what will likely be the next encounter - for example give ANC
> cylcle 2 for individual so_and_so located in a house (source) xxx for a
> probable date of xxxx. Such an Encounter, the one put on the activityplan is
> a half-completed that is why I put a boolean attribute completed (with
> default false). So once a HEW goes out as per the plan and provide the
> service - registering all the required values (like date, values for the
> specific dataelements) then we are going to have a completed Encounter which
> should later be reflected on the patientdatavalue table. Reflecting this on
> the patientdatavalue could be either when an sms is sent from a HEW's mobile
> or when a HEW comes with a filled (executed) activityplan. I am also trying
> to address the issue of migration here .... but at the same time keep in
> mind that Health-Extension-Program deals with house-to-house service
> delivery. Probably this will force us to say a person without a house will
> not be in the Health-Extension-Program - actually these persons will be
> entertained in the other use case; the one Ola described us nicely.
>
> Obviously this is about house-to-house tracking or service delivery. When
> you take out the activityplanning part then .... it will boil down to the
> use case of Zanzibar and Line-Listing. An incidence occurs (could be death
> or birth or what so ever) then we can simply launch an encounter sheet (the
> look of an encounter sheet is going to be shaped by the dataset it has) and
> record a new Encounter and then regsiter the specific values on the
> patientdatavalue.
>
> Thank you,
> Abyot.
>
> 2009/6/6 Saptarshi Purkayastha <sunbiz@xxxxxxxxx>
>
>> Hi Bob,
>> Thanks for the comments and some really good insight about information
>> security which we need to think before implementing anything.
>>
>> 2009/6/6 Bob Jolliffe <bobjolliffe@xxxxxxxxx>
>>
>>>
>>> I think the main difference is that it is unlikely that one would ever
>>> want to query how many people called John have received a particular
>>> intervention.  But you might want to do that sort of query with males
>>> over the age of 6 or what have you.
>>>
>>
>> Nah, not about querying and aggregating based on name, but for identifying
>> the person. Suppose the ANM has to provide service to Mr. Sagar Shah of
>> Mahindra Nagar (that's my locality). You will be glad to know that in my
>> neighboring 2 buildings there are 3 people called Sagar Shah, but ofcourse
>> with different dates of birth. Their addresses are also different, but
>> simply a activityplan without the date of birth wouldn't have been enough to
>> identify the person.
>>
>>
>>> OK.  Maybe I'm just getting twisted up between an ERM and an OO
>>> perspective.  From an OO perspective it might be clearer to have
>>> something like (excuse the minimalism):
>>>
>>>          +-------------+
>>>          | Person      |
>>>          |-------------|
>>>          | Names       |
>>>          | Addresses   |
>>>          | Identifiers |
>>>          +---+---------+
>>>              |
>>>              +----------+
>>>              |          |
>>>  +-----------+---+  +---+----------------+
>>>  |Client         |  |Provider            |
>>>  |---------------|  |--------------------|
>>>  |DOB            |  |Services delivered  |
>>>  |Sex            |  |                    |
>>>  |Cause of Death |  |                    |
>>>  |Services rcvd  |  |                    |
>>>  |etc            |  |                    |
>>>  +---------------+  +--------------------+
>>
>>
>> The problem with classifying them separately is that, when the ANM is
>> pregnant, she has to get service from another ANM for ANC, PNC and what have
>> you. Same is the case with a household. They may well be a Person object
>> (which they are in the real-world) and based on the activityplan may be
>> service provider or receiver (may be sometimes even simultaneously) keeping
>> their "computer-world object" same... I have just tried to model these
>> objects based on what they would be in the real-life.
>>
>> ---
>> Regards,
>> Saptarshi PURKAYASTHA
>> Director R & D, HISP India
>> Health Information Systems Programme
>>
>> My Tech Blog:  http://sunnytalkstech.blogspot.com
>> You Live by CHOICE, Not by CHANCE
>>
>>
>>
>>> I think this is a point of principle and not a technical decision -
>>> though clearly it has technical implications.  Most often there are also
>>> legal requirements.  In India for example, there is not yet a privacy of
>>> information act, but I have heard it is under discussion and we might
>>> yet see it in the next year.  It is interesting that, like South Africa,
>>> the demand for such legislation in India seems not to come from
>>> grassroots but rather from the requirements imposed by outsourcing to
>>> Europe where the requirements are much tighter.  So whereas
>>> privacy-fetishism could be seen as a peculiarly European thing, the
>>> proliferation of legislation might also be one of those
>>> "world-flattening" aspects of globalisation.  For better or worse.
>>>
>>> More often than not (discounting any moral drivers), security becomes
>>> about liability.  We need to be able to *show* that the systems we build
>>> take *reasonable* precautions to safeguard the integrity and access to
>>> data within the frameworks of existing legislation, regulation and good
>>> practice.  Otherwise we expose ourselves to risk.  Of course coders just
>>> want to code ...
>>>
>>> Regarding legislation (in the context of a global project) I think its
>>> best to assume that privacy requirements either exist or are likely on
>>> the horizon.  Regulations will always be a local matter of local public
>>> service regulations etc.  Good practice we can work on.  There is an ISO
>>> standard on health information system security which I've been meaning
>>> to get hold of.  And Calle made a very good point earlier that it was
>>> good practice regarding aggregate data to allow sharing with the minimum
>>> of restrictions.  We don't want to harm that.
>>>
>>> There are some other issues regarding difference between web and desktop
>>> applications and the best way to manage database connections.  On a
>>> server-based web-app it is most common to have a single authenticated
>>> connection between the app and the db. This is probably not best
>>> practice when the browser, the web app and the database are all together
>>> on one machine.  In this case I think its better to establish the
>>> connection at login time with the user providing the required
>>> authentication and using the database's mechanism.  If we maintain the
>>> current setup, where connections(s) are established via a
>>> hibernate.properties file for example, then we must still show that we
>>> have taken reasonable precautions for protecting access to the contents.
>>>
>>> All of which is doable.  Its a shame that Satvik left before we could
>>> setup the Risk Register.  That's a useful tool for this kind of thing -
>>> ie demonstrating that you have taken reasonable risks into account and
>>> taken reasonable precautions.
>>>
>>> Regards
>>> Bob
>>>
>>> >
>>> >
>>> >
>>> >         Cheers
>>> >         Bob
>>> >
>>> >         2009/6/4 Saptarshi Purkayastha <sunbiz@xxxxxxxxx>:
>>> >         > Please find the attached Class Diagram representing the
>>> >         Person and its
>>> >         > model... Its not exhaustive. It lacks constructors,
>>> >         constants and some other
>>> >         > parts that can be implemented in iterations. Also I have
>>> >         deliberately
>>> >         > avoided Generalizes, Implements, Depends and the other
>>> >         clauses from the
>>> >         > diagram because without the full design those are somewhat
>>> >         meaningless.
>>> >         > It does not have the ActivityPlanner, Encounter and
>>> >         PatientDataValue. I have
>>> >         > included something known as StaticDataValue in causeOfDeath
>>> >         (we can have
>>> >         > that as static DataValues that will not change. More like a
>>> >         Dictionary).
>>> >         > Similarly Dataset in servicesProvided is also a static
>>> >         Dataset (but not very
>>> >         > static, if that makes any sense ;-))
>>> >         >
>>> >         > Encounter is as much as we should get into a electronic
>>> >         health record (EHR).
>>> >         > Program, Patient, Regimen, Findings, Drugs and the rest
>>> >         should be ignored.
>>> >         > ActivityPlanner (a subclass of Dataset, as I understand)
>>> >         should be the basis
>>> >         > of Encounters. Encounter will have the orgunitid, personid,
>>> >         period etc which
>>> >         > is populated from the values in ActivityPlanner. I dont have
>>> >         a clear idea on
>>> >         > the details of that, but I am sure Abyot can represent that
>>> >         for us.
>>> >         > PS: I have used the Netbeans UML designer which is quite
>>> >         good for simple
>>> >         > designs. Not as powerful as Rational's tools, but good
>>> >         enough for our needs
>>> >         > . I have attached the Netbeans UML project for anyone who
>>> >         wants to edit or
>>> >         > make changes on this model.
>>> >         >
>>> >         > ---
>>> >         > Regards,
>>> >         > Saptarshi PURKAYASTHA
>>> >         > Director R & D, HISP India
>>> >         > Health Information Systems Programme
>>> >         >
>>> >         > My Tech Blog:  http://sunnytalkstech.blogspot.com
>>> >         > You Live by CHOICE, Not by CHANCE
>>> >         >
>>> >         >
>>> >         > 2009/6/4 Abyot Gizaw <abyota@xxxxxxxxx>
>>> >         >>
>>> >         >> I guess we all agree with this - I agree!
>>> >         >>
>>> >         >> On Thu, Jun 4, 2009 at 12:45 PM, Ola Hodne Titlestad
>>> >         <olati@xxxxxxxxxx>
>>> >         >> wrote:
>>> >         >>>
>>> >         >>> Hi guys,
>>> >         >>>
>>> >         >>> Sorry to hear that many of you are not able to follow the
>>> >         discussion,
>>> >         >>> I'll try to spell out more clearly what my main concerns
>>> >         and interests are.
>>> >         >>>
>>> >         >>> First of all. I still have a feeling that the
>>> >         community/home/family part
>>> >         >>> of the requirements are perhaps blocking or at least
>>> >         interfering with other
>>> >         >>> important usage of this module. But maybe it’s just a
>>> >         misunderstanding. I’ll
>>> >         >>> discuss this with Abyot face2face (since we are sharing
>>> >         office…) soon, but
>>> >         >>> first some lines to the list (sorry for terrorising you on
>>> >         this topic).
>>> >         >>>
>>> >         >>> Orgunits (the main owner of data in a DHIS system)
>>> >         >>> I can't stop talking about orgunits because to me they are
>>> >         the key link
>>> >         >>> between a routine system and a “client-extended routine
>>> >         system” (which I
>>> >         >>> think it what we are developing, as opposed to a fully
>>> >         fledged medical
>>> >         >>> records system (OpenMRS is a much better candidate there).
>>> >         >>>
>>> >         >>>
>>> >         >>>
>>> >         >>> We need a system where we can “follow the data” in further
>>> >         detail than in
>>> >         >>> a normal routine system, either by looking at individual
>>> >         clients being
>>> >         >>> served by the facility (at home or at the clinic) as part
>>> >         of health
>>> >         >>> programme services, or by looking at more detailed data
>>> >         about a specific
>>> >         >>> vital event ( a death, a birth, or an outbreak) taking
>>> >         place at a facility
>>> >         >>> or in it’s catchment area.
>>> >         >>>
>>> >         >>>
>>> >         >>>
>>> >         >>> So while we need to collect data at the client level we
>>> >         still need to
>>> >         >>> keep track of the orgunit responsible for the service,
>>> >         whether the service
>>> >         >>> is carried out as part of a home visit in a facilities
>>> >         catchment area or at
>>> >         >>> the health facility itself.
>>> >         >>>
>>> >         >>>
>>> >         >>>
>>> >         >>> Those essential needs make up the minimum common
>>> >         denominator for all the
>>> >         >>> requirements and use cases we have discussed so far.
>>> >         Hopefully also when we
>>> >         >>> include Jason’s requirements from Zambia…let’s see.
>>> >         >>>
>>> >         >>>
>>> >         >>>
>>> >         >>> As long as I can be sure that we agree on those basics,
>>> >         and that the
>>> >         >>> following functionality is taken care of, I will stop
>>> >         interfering the
>>> >         >>> detailed design discussions and hopefully let the coding
>>> >         of the prototype
>>> >         >>> begin:
>>> >         >>>
>>> >         >>> Basic functionality for CHIS:
>>> >         >>>
>>> >         >>> 1) allow for data to be collected that has no reference to
>>> >         house, family
>>> >         >>> or community, but simply a patient identifier and a clinic
>>> >         (this is needed
>>> >         >>> for vital events registration)
>>> >         >>>
>>> >         >>> 2) enable quick drill-down from facility to client level
>>> >         when analysing
>>> >         >>> at data (“moving from the routine monthly report to the
>>> >         register book”) –
>>> >         >>> the main advantage of doing this CHIS inside DHIS
>>> >         >>>
>>> >         >>> 3) provide a user-defined and easy to use model for
>>> >         generating aggregated
>>> >         >>> data based on client-data (extending the calculated data
>>> >         element approach,
>>> >         >>> to create statistics and indicators from vital events)
>>> >         >>>
>>> >         >>> 4) Generation of routine data values (dataelement,
>>> >         orgunit, period).
>>> >         >>>
>>> >         >>> 4a) using the “extended calculated data element
>>> >         approach” (vital events
>>> >         >>> etc, see my examples on Maternal Death audit from pervious
>>> >         mails)
>>> >         >>>
>>> >         >>> 4b) in a community setting simply reuse the dataelements
>>> >         from the
>>> >         >>> register, but aggregated up to a facility and a month (or
>>> >         other desired
>>> >         >>> PeriodType)
>>> >         >>>
>>> >         >>>
>>> >         >>>
>>> >         >>> Activity Planning and client tracking
>>> >         >>>
>>> >         >>> On top of that, but equally important,  we have the
>>> >         requirements to
>>> >         >>> support the health programs in carrying out their home
>>> >         visits;
>>> >         >>>
>>> >         >>> 1) by providing activity plans with specific
>>> >         encounters/activities
>>> >         >>> (where, when and what) that has to be carried out,
>>> >         >>>
>>> >         >>> 2) the ability to track a client as see his/her status
>>> >         within a specific
>>> >         >>> programme, as to which vaccines are missing, checkups
>>> >         needed etc.
>>> >         >>>
>>> >         >>> I am not saying that we should not prioritise the Activity
>>> >         Planning
>>> >         >>> functionality here, of course we need that as part of the
>>> >         first prototype,
>>> >         >>> it is simply a separation of functionality to more
>>> >         summarise the needs from
>>> >         >>> all the use cases, and to try to map out what I see as the
>>> >         basics that are
>>> >         >>> shared by all the use cases we try to cover with this
>>> >         module.
>>> >         >>>
>>> >         >>>
>>> >         >>> best regards,
>>> >         >>> Ola Hodne Titlestad
>>> >         >>> HISP
>>> >         >>> University of Oslo
>>> >         >>>
>>> >         >>>
>>> >         >>> 2009/6/4 Abyot Gizaw <abyota@xxxxxxxxx>
>>> >         >>>>
>>> >         >>>> Hi All,
>>> >         >>>>
>>> >         >>>> Please find the attached diagram though not complete.
>>> >         Saptarshi, you can
>>> >         >>>> extend the diagram after sorting out the details with
>>> >         person,
>>> >         >>>> house/orgunit,...
>>> >         >>>>
>>> >         >>>> Looking for your comments.
>>> >         >>>>
>>> >         >>>> Thank you.
>>> >         >>>> Abyot.
>>> >         >>>>
>>> >         >>>>
>>> >         >>>> 2009/6/4 Bob Jolliffe <bobjolliffe@xxxxxxxxx>
>>> >         >>>>>
>>> >         >>>>> Hi
>>> >         >>>>>
>>> >         >>>>> 2009/6/4 Saptarshi Purkayastha <sunbiz@xxxxxxxxx>:
>>> >         >>>>> > I was silently following the discussion, because I am
>>> >         having a hard
>>> >         >>>>> > time
>>> >         >>>>> > trying to understand what is being discussed. I was
>>> >         hoping to
>>> >         >>>>> > understand the
>>> >         >>>>> > ideas as things were discussed more. Some clever guys
>>> >         invented
>>> >         >>>>> > diagrams (UML
>>> >         >>>>> > and the like) for modelling and "Picture do speak a
>>> >         thousand words".
>>> >         >>>>>
>>> >         >>>>> Agreed.  Is there a favoured dhis2 uml tool I wonder?
>>> >          We can surely
>>> >         >>>>> share the pictures but it would be good to use the same
>>> >         tool.
>>> >         >>>>>
>>> >         >>>>> >As for Encounters, these should be treated as anything
>>> >         where a Person
>>> >         >>>>> > (health worker, patient, household or family) has
>>> >         received a service.
>>> >         >>>>> > Death
>>> >         >>>>> > audit on the other hand is not receiving of a service
>>> >         (death during
>>> >         >>>>> > delivery
>>> >         >>>>> > or immunization can be recorded as part of an
>>> >         encounter). Instead the
>>> >         >>>>> > real
>>> >         >>>>> > audit of death should come from a Person's state (OOP
>>> >         speak: fields)
>>> >         >>>>> > and
>>> >         >>>>> > should be accessed as behaviors (OOP speak: methods).
>>> >         The Person
>>> >         >>>>> > should have
>>> >         >>>>> > deathDate, causeOfDeath just like a Person has
>>> >         birthDate, name and
>>> >         >>>>> > address.
>>> >         >>>>> > Ideally, Encounters should be filled in (or simply
>>> >         adding a
>>> >         >>>>> > "checkmark",
>>> >         >>>>> > that it was done) from an ActivityPlanner dataset.
>>> >         Thus the
>>> >         >>>>> > ActivityPlanner
>>> >         >>>>> > is a dataset and after values have been filled (or
>>> >         checkmark added)
>>> >         >>>>> > into it
>>> >         >>>>> > by using the EncounterService, it becomes an
>>> >         Encounter.
>>> >         >>>>> > ActivityPlanner is
>>> >         >>>>> > generated from the ActivityPlannerService, which gets
>>> >         its data from
>>> >         >>>>> > another
>>> >         >>>>> > dataset.
>>> >         >>>>> > @Ola: I do not agree to the notion that Person can be
>>> >         considered as
>>> >         >>>>> > an
>>> >         >>>>> > extension of the OrgUnit.
>>> >         >>>>>
>>> >         >>>>> We do need a diagram here!  Think Source rather than
>>> >         OrgUnit.  .If you
>>> >         >>>>> look at
>>> >         dhis-api/src/main/java/org/hisp/dhis/source/Source.java  you
>>> >         >>>>> will see that a Source is nothing more than a wrapper
>>> >         for an
>>> >         >>>>> Identifier.  So a rich model for a person (like for
>>> >         example the
>>> >         >>>>> OpenMRS demographic model) can extend Source in exactly
>>> >         the same way
>>> >         >>>>> OrgUnit does.  This doesn't make Person an OrgUnit or an
>>> >         extension of
>>> >         >>>>> one.
>>> >         >>>>>
>>> >         >>>>> The main benefit being we might then be able to reuse
>>> >         datavalue as-is
>>> >         >>>>> which I think would be good.  Without it, we resort to
>>> >         creating a new
>>> >         >>>>> PersonDataValue which would perhaps be tolerable but not
>>> >         ideal.
>>> >         >>>>>
>>> >         >>>>> >Person should have something of a relationship
>>> >         >>>>> > with an OrgUnit just as a Person should have
>>> >         relationship with other
>>> >         >>>>> > Person
>>> >         >>>>> > and only Person should have an Encounter, not an
>>> >         OrgUnit.
>>> >         >>>>>
>>> >         >>>>> Agreed.
>>> >         >>>>>
>>> >         >>>>> Regards
>>> >         >>>>> Bob
>>> >         >>>>>
>>> >         >>>>> > PS: A UML representation is needed before we can code,
>>> >         to summarize
>>> >         >>>>> > what has
>>> >         >>>>> > been talked about till date about the design because
>>> >         everyone
>>> >         >>>>> > (including me)
>>> >         >>>>> > have been forgetting what was decided and what was
>>> >         debated.
>>> >         >>>>> >
>>> >         >>>>> > ---
>>> >         >>>>> > Regards,
>>> >         >>>>> > Saptarshi PURKAYASTHA
>>> >         >>>>> > Director R & D, HISP India
>>> >         >>>>> > Health Information Systems Programme
>>> >         >>>>> >
>>> >         >>>>> > My Tech Blog:  http://sunnytalkstech.blogspot.com
>>> >         >>>>> > You Live by CHOICE, Not by CHANCE
>>> >         >>>>> >
>>> >         >>>>> >
>>> >         >>>>> > 2009/6/4 Abyot Gizaw <abyota@xxxxxxxxx>
>>> >         >>>>> >>
>>> >         >>>>> >> No it will not be generated by an activity planner
>>> >         service. It will
>>> >         >>>>> >> have
>>> >         >>>>> >> its own service I don't know may be encouterSevice or
>>> >         something like
>>> >         >>>>> >> that.
>>> >         >>>>> >> But Activity planner is going to make use of
>>> >         Encounters. As you
>>> >         >>>>> >> mentioned
>>> >         >>>>> >> the whole world doesn't go by the plan but as far as
>>> >         Health
>>> >         >>>>> >> Extension
>>> >         >>>>> >> program is concerned then that is the reality. I mean
>>> >         health workers
>>> >         >>>>> >> will be
>>> >         >>>>> >> given a sheet of paper list of names together with
>>> >         house numbers and
>>> >         >>>>> >> the
>>> >         >>>>> >> kind of service they are going to provide on the date
>>> >         specified.
>>> >         >>>>> >>
>>> >         >>>>> >> Now to the auditing thing, forget for the time being
>>> >         the activity
>>> >         >>>>> >> planning
>>> >         >>>>> >> or the community thing. I have seen a 1.4 patient
>>> >         module. When ever
>>> >         >>>>> >> you
>>> >         >>>>> >> click on the person icon and new pop up window opens
>>> >         with a list of
>>> >         >>>>> >> items to
>>> >         >>>>> >> be populated inluding the name of the person. I think
>>> >         this for me is
>>> >         >>>>> >> an
>>> >         >>>>> >> Encounter. A clincian has been waiting for a patient
>>> >         to arrive, a
>>> >         >>>>> >> patinet
>>> >         >>>>> >> arrives and the clinican picks a piece of paper/form
>>> >         to register the
>>> >         >>>>> >> incidence - could be death, birth or immunization or
>>> >         generally a
>>> >         >>>>> >> treatment.
>>> >         >>>>> >> For me this is an encounter which got shaped
>>> >         dyanamically (for
>>> >         >>>>> >> example the
>>> >         >>>>> >> individual identified during the point of care). And
>>> >         just like paper
>>> >         >>>>> >> forms
>>> >         >>>>> >> (for recording such an incidence) are printed before
>>> >         hand like a
>>> >         >>>>> >> template,
>>> >         >>>>> >> then a dataset (the current one)  will be used as a
>>> >         template to
>>> >         >>>>> >> generate a
>>> >         >>>>> >> more advanced and dynamic one called Encounter
>>> >         >>>>> >>
>>> >         >>>>> >> The activity planner by no means introduced the
>>> >         Encounter. I don't
>>> >         >>>>> >> know
>>> >         >>>>> >> may be I got influenced by OpenMRS, at least on this
>>> >         Encounter
>>> >         >>>>> >> thing. That
>>> >         >>>>> >> is how they modeled it - Saptarshi can you comment on
>>> >         this?
>>> >         >>>>> >>
>>> >         >>>>> >> Thanks
>>> >         >>>>> >> Abyot.
>>> >         >>>>> >>
>>> >         >>>>> >>
>>> >         >>>>> >> 2009/6/3 Ola Hodne Titlestad <olati@xxxxxxxxxx>
>>> >         >>>>> >>>
>>> >         >>>>> >>> 2009/6/3 Abyot Gizaw <abyota@xxxxxxxxx>
>>> >         >>>>> >>>>
>>> >         >>>>> >>>> Nooooo - I mean the point you mentioned that
>>> >         Encounter got
>>> >         >>>>> >>>> introduced
>>> >         >>>>> >>>> because I wanted to have it for the activity plan
>>> >         generation. No
>>> >         >>>>> >>>> that is not
>>> >         >>>>> >>>> the reason. And I didn't really understnad the data
>>> >         Vs metadata
>>> >         >>>>> >>>> and also
>>> >         >>>>> >>>> dhis design Vs activity/paln mixup I made.
>>> >         >>>>> >>>
>>> >         >>>>> >>> What confuses me (but less after your last email) is
>>> >         that you want
>>> >         >>>>> >>> to use
>>> >         >>>>> >>> Encounter both as an Activity and as kind of "data
>>> >         table". Let's
>>> >         >>>>> >>> see if  I
>>> >         >>>>> >>> know understand you correctly:
>>> >         >>>>> >>> An Encounter is generated by "an activity planner
>>> >         service" based on
>>> >         >>>>> >>> a
>>> >         >>>>> >>> dataset and a plan (who to visit and when) and then
>>> >         an instance of
>>> >         >>>>> >>> an
>>> >         >>>>> >>> Encounter would contain a specific value for source,
>>> >         patientID and
>>> >         >>>>> >>> date
>>> >         >>>>> >>> right and would be what I call a planned encounter,
>>> >         right?  And
>>> >         >>>>> >>> after the
>>> >         >>>>> >>> encounter has been made there will data values in
>>> >         PatientDataValue
>>> >         >>>>> >>> linked to
>>> >         >>>>> >>> the Encounter, right?
>>> >         >>>>> >>>
>>> >         >>>>> >>> So you can say that there is a two step process in
>>> >         "populating" a
>>> >         >>>>> >>> "complete patient data value", first you populate
>>> >         the Encounter
>>> >         >>>>> >>> with source,
>>> >         >>>>> >>> patient and date (which can happen any time), and
>>> >         then at the time
>>> >         >>>>> >>> of data
>>> >         >>>>> >>> entry or import you populate the PatientDataValues
>>> >         and reference
>>> >         >>>>> >>> the already
>>> >         >>>>> >>> exisiting encounter. Is this correct?
>>> >         >>>>> >>>
>>> >         >>>>> >>>>
>>> >         >>>>> >>>> Anyways, I could be wrong in my proposition. But
>>> >         the reason I
>>> >         >>>>> >>>> brought
>>> >         >>>>> >>>> the idea of Encounter is a simple normalization of
>>> >         >>>>> >>>> patientdatavalue. Imagine
>>> >         >>>>> >>>> a row in a datavalue table
>>> >         >>>>> >>>>
>>> >         >>>>> >>>>
>>> >         (patientid,date,sourceid,dataelementid,optioncomboid,value)
>>> >         >>>>> >>>>
>>> >         >>>>> >>>> and the first 3 columns will be the same for an
>>> >         individual say for
>>> >         >>>>> >>>> example for hundredes of dataelements collected in
>>> >         a specific
>>> >         >>>>> >>>> instance of
>>> >         >>>>> >>>> patient's diagnosis or treatment or actually an
>>> >         encounter. so
>>> >         >>>>> >>>> patient,source
>>> >         >>>>> >>>> and date are I feel unqiue in describing an
>>> >         encounter - that is
>>> >         >>>>> >>>> how I
>>> >         >>>>> >>>> introduced Encouner. In addition, this apporach
>>> >         will avoid direct
>>> >         >>>>> >>>> linkage of
>>> >         >>>>> >>>> a patient to his/her sensitive data. And of course
>>> >         an Encounter is
>>> >         >>>>> >>>> a valid
>>> >         >>>>> >>>> concept, I feel, in the CHIS we are trying to
>>> >         develop.
>>> >         >>>>> >>>
>>> >         >>>>> >>> I can see the need for normalisation, although I
>>> >         assume you could
>>> >         >>>>> >>> argue
>>> >         >>>>> >>> that this is also the case with normal routine data
>>> >         values in DHIS,
>>> >         >>>>> >>> and
>>> >         >>>>> >>> there we chose not to do this. Is it worth to break
>>> >         with this
>>> >         >>>>> >>> design or not,
>>> >         >>>>> >>> that is what I am asking I guess. Why use a
>>> >         different apporoach
>>> >         >>>>> >>> here than
>>> >         >>>>> >>> for routine data when I think it would be easier for
>>> >         all involved
>>> >         >>>>> >>> if we
>>> >         >>>>> >>> streamlined approaches to data stroring. Of course
>>> >         if there are
>>> >         >>>>> >>> better
>>> >         >>>>> >>> reasons (maybe you have already mentioned them and I
>>> >         simply don't
>>> >         >>>>> >>> understand
>>> >         >>>>> >>> them) for normalisation of client data than with
>>> >         routine data, if
>>> >         >>>>> >>> so I will
>>> >         >>>>> >>> no object it, but as a general principle I think we
>>> >         should follow
>>> >         >>>>> >>> the same
>>> >         >>>>> >>> design approach were feasible. But not at any cost
>>> >         of course.
>>> >         >>>>> >>>
>>> >         >>>>> >>> My main concern is that the concept of Encounter, at
>>> >         least to me
>>> >         >>>>> >>> only
>>> >         >>>>> >>> seems to fit with the community part of this module
>>> >         and not with
>>> >         >>>>> >>> the
>>> >         >>>>> >>> audit/case-based part. E.g. with the use case from
>>> >         Zanzibar (and
>>> >         >>>>> >>> many other
>>> >         >>>>> >>> places) where you want to collect data about a
>>> >         Maternal Death there
>>> >         >>>>> >>> will be
>>> >         >>>>> >>> no encounter, but an audit form that is filled after
>>> >         the death
>>> >         >>>>> >>> occurred, or
>>> >         >>>>> >>> similar with other vital events like births or with
>>> >         notifiable
>>> >         >>>>> >>> disease
>>> >         >>>>> >>> notification where you collect a lot of detail about
>>> >         a specific new
>>> >         >>>>> >>> case. In
>>> >         >>>>> >>> this case I guess you can also argue for
>>> >         normalisation and keep
>>> >         >>>>> >>> metadata
>>> >         >>>>> >>> (patient,source, date) about the "event" in a
>>> >         separate table, but
>>> >         >>>>> >>> to me the
>>> >         >>>>> >>> name "encounter" seem wrong in this scenario.
>>> >         >>>>> >>>
>>> >         >>>>> >>> I know it is hard to make one design fit all these
>>> >         cases perfectly,
>>> >         >>>>> >>> but
>>> >         >>>>> >>> my hope was that we could come up with a generic
>>> >         data model for
>>> >         >>>>> >>> collecting
>>> >         >>>>> >>> and storing patient data that would work for both
>>> >         community
>>> >         >>>>> >>> registers and
>>> >         >>>>> >>> for audits on vital events (death, birth, case of
>>> >         notifiable
>>> >         >>>>> >>> disease), and
>>> >         >>>>> >>> then build on such a "basic patient model" what you
>>> >         need to
>>> >         >>>>> >>> conceptualise
>>> >         >>>>> >>> encounters and activity plans.
>>> >         >>>>> >>>
>>> >         >>>>> >>>>
>>> >         >>>>> >>>> Infact this approach is more scalable than what you
>>> >         are mentioning
>>> >         >>>>> >>>> ...
>>> >         >>>>> >>>> because at some point we may need to go through
>>> >         encounters and
>>> >         >>>>> >>>> deal with
>>> >         >>>>> >>>> history. by then we can add more attributes to
>>> >         enounters and
>>> >         >>>>> >>>> expand
>>> >         >>>>> >>>> functionalities.
>>> >         >>>>> >>>
>>> >         >>>>> >>> which I guess will move them even further away for
>>> >         other usage than
>>> >         >>>>> >>> for
>>> >         >>>>> >>> community registers
>>> >         >>>>> >>>>
>>> >         >>>>> >>>> probably we need to draw a line - I mean with
>>> >         aggregate systems Vs
>>> >         >>>>> >>>> individual/patient based systems --- because the
>>> >         direct
>>> >         >>>>> >>>> manipulation of data
>>> >         >>>>> >>>> makes sense for aggregate systems. And for the case
>>> >         based (or
>>> >         >>>>> >>>> Individual)
>>> >         >>>>> >>>> systems then I think we need to depend on queries
>>> >         or services to
>>> >         >>>>> >>>> be provided
>>> >         >>>>> >>>> by the system for aggregation or manipulation of
>>> >         data.
>>> >         >>>>> >>>
>>> >         >>>>> >>> ok, I guess I see it from the other side; that we
>>> >         could keep the
>>> >         >>>>> >>> same
>>> >         >>>>> >>> design for data values, but add new services to
>>> >         represent
>>> >         >>>>> >>> encounters,
>>> >         >>>>> >>> registers, plans etc. on top of that
>>> >         >>>>> >>>
>>> >         >>>>> >>>
>>> >         >>>>> >>> Ola
>>> >         >>>>> >>> ----------
>>> >         >>>>> >>>
>>> >         >>>>> >>>>
>>> >         >>>>> >>>>
>>> >         >>>>> >>>> Thanks
>>> >         >>>>> >>>> Abyot.
>>> >         >>>>> >>>>
>>> >         >>>>> >>>>
>>> >         >>>>> >>>> 2009/6/3 Ola Hodne Titlestad <olati@xxxxxxxxxx>
>>> >         >>>>> >>>>>
>>> >         >>>>> >>>>> Hi,
>>> >         >>>>> >>>>>
>>> >         >>>>> >>>>> Sorry, maybe I'm a bit slow, but I don't manage to
>>> >         follow this
>>> >         >>>>> >>>>> reasoning.
>>> >         >>>>> >>>>>
>>> >         >>>>> >>>>> First of all I get a bit confused as to what is
>>> >         metadata and data
>>> >         >>>>> >>>>> in
>>> >         >>>>> >>>>> your model Abyot. Now it seems you have split up
>>> >         data values for
>>> >         >>>>> >>>>> patient
>>> >         >>>>> >>>>> data into two objects, Encounter and
>>> >         PatientDataValue, is that
>>> >         >>>>> >>>>> right? I can
>>> >         >>>>> >>>>> see that PatientDataValue does no longer have a
>>> >         refenece to place
>>> >         >>>>> >>>>> or time,
>>> >         >>>>> >>>>> but that this is taken care of through an
>>> >         Encounter.
>>> >         >>>>> >>>>>
>>> >         >>>>> >>>>> If that is the case then we will not get the
>>> >         straight forward
>>> >         >>>>> >>>>> calculation of aggregated data that we would have
>>> >         with Date
>>> >         >>>>> >>>>> (easily up to
>>> >         >>>>> >>>>> month) and Orgunit (group data values by orgunit)
>>> >         in
>>> >         >>>>> >>>>> PatientDataValue, which
>>> >         >>>>> >>>>> I would not recommend, especially for other use
>>> >         cases like
>>> >         >>>>> >>>>> birth/death
>>> >         >>>>> >>>>> audits or disease surveillance.
>>> >         >>>>> >>>>>
>>> >         >>>>> >>>>> (Guess I forgot to mention the orgunit reference
>>> >         from patient
>>> >         >>>>> >>>>> data
>>> >         >>>>> >>>>> value earlier today,although it has been mentioned
>>> >         before. It has
>>> >         >>>>> >>>>> many
>>> >         >>>>> >>>>> advantages when zooming in and out between
>>> >         aggregated and
>>> >         >>>>> >>>>> disaggregated
>>> >         >>>>> >>>>> data.)
>>> >         >>>>> >>>>>
>>> >         >>>>> >>>>> But from your description of an Encounter as part
>>> >         of the tasks
>>> >         >>>>> >>>>> carry
>>> >         >>>>> >>>>> out in the generated activity plan I got the
>>> >         feeling that
>>> >         >>>>> >>>>> Encounter is
>>> >         >>>>> >>>>> metdata describing HOW to collect the datavalues
>>> >         as is the case
>>> >         >>>>> >>>>> with data
>>> >         >>>>> >>>>> sets.  "By whom" and "when" in Encounter, seems to
>>> >         be information
>>> >         >>>>> >>>>> belonging
>>> >         >>>>> >>>>> to a data value, and not metadata. If the
>>> >         references to Whom and
>>> >         >>>>> >>>>> When in
>>> >         >>>>> >>>>> Encounter are "planned values" something you are
>>> >         supposed to do
>>> >         >>>>> >>>>> then I get
>>> >         >>>>> >>>>> it, but then I guess we cannot use the same values
>>> >         as part of the
>>> >         >>>>> >>>>> data
>>> >         >>>>> >>>>> value, I mean the world does not always go
>>> >         according to the plan.
>>> >         >>>>> >>>>> Maybe you
>>> >         >>>>> >>>>> just forgot to add a reference to PatientID and
>>> >         Date (and Source
>>> >         >>>>> >>>>> maybe) in
>>> >         >>>>> >>>>> PatientDataValue, if so then it would make sense
>>> >         to me.
>>> >         >>>>> >>>>>
>>> >         >>>>> >>>>> I am not sure I like how you model mixes
>>> >         activities and plans
>>> >         >>>>> >>>>> with the
>>> >         >>>>> >>>>> straightforward DHIS design of data elements,
>>> >         datasets,
>>> >         >>>>> >>>>> datavalues. Could
>>> >         >>>>> >>>>> your planned activities be linked to dataset,
>>> >         patient, and source
>>> >         >>>>> >>>>> without
>>> >         >>>>> >>>>> interfering with dataset and datavalue? That would
>>> >         keep the model
>>> >         >>>>> >>>>> simpler
>>> >         >>>>> >>>>> and easier to use for other use cases where we ant
>>> >         to collect
>>> >         >>>>> >>>>> case-based or
>>> >         >>>>> >>>>> client data.
>>> >         >>>>> >>>>>
>>> >         >>>>> >>>>> An Encounter or a register, isn't that simply a
>>> >         view on top of
>>> >         >>>>> >>>>> patient
>>> >         >>>>> >>>>> data values (filtered by dataset, date, patient),
>>> >         similar to a
>>> >         >>>>> >>>>> dataset
>>> >         >>>>> >>>>> report in routine DHIS? I understand the
>>> >         importance of
>>> >         >>>>> >>>>> referencing the
>>> >         >>>>> >>>>> encounter from the datavalue, but not sure I see
>>> >         the point of
>>> >         >>>>> >>>>> this
>>> >         >>>>> >>>>> dataset+encounter design. Your Encounter object
>>> >         sounds more like
>>> >         >>>>> >>>>> an Activity
>>> >         >>>>> >>>>> object which is stricty metadata (that says
>>> >         something of what you
>>> >         >>>>> >>>>> plan to
>>> >         >>>>> >>>>> do) and not a regsiter/encounter (which says what
>>> >         have been done)
>>> >         >>>>> >>>>> that has
>>> >         >>>>> >>>>> values for a patient, date and a set of data
>>> >         elements.
>>> >         >>>>> >>>>>
>>> >         >>>>> >>>>> best regards,
>>> >         >>>>> >>>>> Ola Hodne Titlestad
>>> >         >>>>> >>>>> HISP
>>> >         >>>>> >>>>> University of Oslo
>>> >         >>>>> >>>>>
>>> >         >>>>> >>>>>
>>> >         >>>>> >>>>> 2009/6/3 Abyot Gizaw <abyota@xxxxxxxxx>
>>> >         >>>>> >>>>>>
>>> >         >>>>> >>>>>>
>>> >         >>>>> >>>>>> 2009/6/3 Abyot Gizaw <abyota@xxxxxxxxx>
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> A bit tricky!
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> I think we need to maintain both Encounter and
>>> >         DataSet. I mean,
>>> >         >>>>> >>>>>>> a
>>> >         >>>>> >>>>>>> DataSet evolving to an Encounter whenever a
>>> >         visit is made by
>>> >         >>>>> >>>>>>> either a
>>> >         >>>>> >>>>>>> patient or a health-worker. This will help us to
>>> >         implement a
>>> >         >>>>> >>>>>>> dynamic DataSet
>>> >         >>>>> >>>>>>> functionality.  And here the DataSet will be
>>> >         acting only as a
>>> >         >>>>> >>>>>>> template to
>>> >         >>>>> >>>>>>> guide an Encounter.
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> ·         DataSet
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> o   Source
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> o   Period (for CHIS, daily periodType)
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> o   set<DataElement>
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> ·         ActivityPlan
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> o   Owner – person (Health Extension Worker)
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> o   Supervisor – person (Medical Officer)
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> o   Date – date
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> o   Activities – set<Encounter>
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> ·         Encounter  implements DataSet
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> o   Where – source (could be house or facility
>>> >         or anything
>>> >         >>>>> >>>>>>> else…)
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> o   When – date (time stamp)
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> o   ByWhom – person (the patient)
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> o   What – set<DataElement> (list of data to be
>>> >         collected)
>>> >         >>>>> >>>>>>
>>> >         >>>>> >>>>>> Sorry for the above strange stuff. I think it is
>>> >         better like
>>> >         >>>>> >>>>>> down
>>> >         >>>>> >>>>>> below.
>>> >         >>>>> >>>>>>
>>> >         >>>>> >>>>>> ·         Encounter
>>> >         >>>>> >>>>>>
>>> >         >>>>> >>>>>> o   DataSet
>>> >         >>>>> >>>>>>
>>> >         >>>>> >>>>>> o   ByWhom – person (the patient)
>>> >         >>>>> >>>>>>
>>> >         >>>>> >>>>>> o   When – date (time stamp)
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> ·         PatientDataValue
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> o   EncounterID
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> o   DataElementID
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> o   OptionComboID (just in case we are going to
>>> >         collecet
>>> >         >>>>> >>>>>>> multiple
>>> >         >>>>> >>>>>>> values for a dataelement)
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> o   Value
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> Activity plan is linked to an Encounter because
>>> >         during a
>>> >         >>>>> >>>>>>> house-to-house visit, health-workers are to
>>> >         follow a strict
>>> >         >>>>> >>>>>>> plan, signed by
>>> >         >>>>> >>>>>>> her/his supervisor outlining whom to meet,
>>> >         where, when and what
>>> >         >>>>> >>>>>>> kind of
>>> >         >>>>> >>>>>>> service to give (or what kind of data to
>>> >         collect).
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> The above approach will help us to do
>>> >         scheduling/tracking which
>>> >         >>>>> >>>>>>> I
>>> >         >>>>> >>>>>>> guess are very much linked to Encounters. For
>>> >         example a Mother
>>> >         >>>>> >>>>>>> need to be
>>> >         >>>>> >>>>>>> scheduled for a 2nd ANC Encounter following her
>>> >         1st ANC
>>> >         >>>>> >>>>>>> Encounter, or
>>> >         >>>>> >>>>>>> similarly for Child Immunization.
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> The dataelement classification is only to have a
>>> >         nice and tidy
>>> >         >>>>> >>>>>>> list
>>> >         >>>>> >>>>>>> of dataelements on the GUI, for example not
>>> >         showing patient
>>> >         >>>>> >>>>>>> related
>>> >         >>>>> >>>>>>> dataelements in indicator or datamart processing
>>> >         - which is a
>>> >         >>>>> >>>>>>> nice idea of
>>> >         >>>>> >>>>>>> Ola. The classification will have no use for the
>>> >         functionality
>>> >         >>>>> >>>>>>> of CHIS.
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> Thanks
>>> >         >>>>> >>>>>>> Abyot.
>>> >         >>>>> >>>>>>>
>>> >         >>>>> >>>>>>> On Wed, Jun 3, 2009 at 2:04 PM, Bob Jolliffe
>>> >         >>>>> >>>>>>> <bobjolliffe@xxxxxxxxx>
>>> >         >>>>> >>>>>>> wrote:
>>> >         >>>>> >>>>>>>>
>>> >         >>>>> >>>>>>>> 2009/6/3 Ola Hodne Titlestad
>>> >         <olati@xxxxxxxxxx>:
>>> >         >>>>> >>>>>>>> > On Wed, Jun 3, 2009 at 12:04 PM, Bob Jolliffe
>>> >         >>>>> >>>>>>>> > <bobjolliffe@xxxxxxxxx> wrote:
>>> >         >>>>> >>>>>>>> >>
>>> >         >>>>> >>>>>>>> >> 2009/6/3 Ola Hodne Titlestad
>>> >         <olati@xxxxxxxxxx>:
>>> >         >>>>> >>>>>>>> >> > Hi Abyot,
>>> >         >>>>> >>>>>>>> >> >
>>> >         >>>>> >>>>>>>> >> > If you read my summary e-mails just before
>>> >         the skype
>>> >         >>>>> >>>>>>>> >> > conference
>>> >         >>>>> >>>>>>>> >> > you will
>>> >         >>>>> >>>>>>>> >> > see
>>> >         >>>>> >>>>>>>> >> > that my suggestion was NOT to have a
>>> >         different type of
>>> >         >>>>> >>>>>>>> >> > data
>>> >         >>>>> >>>>>>>> >> > element, and
>>> >         >>>>> >>>>>>>> >> > I
>>> >         >>>>> >>>>>>>> >> > understood from the skype chat that we
>>> >         agreed on the
>>> >         >>>>> >>>>>>>> >> > same. What
>>> >         >>>>> >>>>>>>> >> > we
>>> >         >>>>> >>>>>>>> >> > talked
>>> >         >>>>> >>>>>>>> >> > about was to possibly make a separation in
>>> >         the user
>>> >         >>>>> >>>>>>>> >> > interface
>>> >         >>>>> >>>>>>>> >> > to avoid
>>> >         >>>>> >>>>>>>> >> > confusing the users, but in the background
>>> >         use the same
>>> >         >>>>> >>>>>>>> >> > DataElement
>>> >         >>>>> >>>>>>>> >> > object,
>>> >         >>>>> >>>>>>>> >> > but I am not sure that will always be
>>> >         needed as there are
>>> >         >>>>> >>>>>>>> >> > lot
>>> >         >>>>> >>>>>>>> >> > of overlap
>>> >         >>>>> >>>>>>>> >> > between routine and CHIS data elements.
>>> >         >>>>> >>>>>>>> >> >
>>> >         >>>>> >>>>>>>> >> > As you say, if we want to easily reuse
>>> >         datasets and data
>>> >         >>>>> >>>>>>>> >> > entry
>>> >         >>>>> >>>>>>>> >> > forms
>>> >         >>>>> >>>>>>>> >> > functionality we need to use the
>>> >         DataElement object also
>>> >         >>>>> >>>>>>>> >> > for
>>> >         >>>>> >>>>>>>> >> > client data
>>> >         >>>>> >>>>>>>> >> > elements. And of course we want to reuse
>>> >         what Murid has
>>> >         >>>>> >>>>>>>> >> > implemented
>>> >         >>>>> >>>>>>>> >> > regarding option lists for pre-defined
>>> >         values for data
>>> >         >>>>> >>>>>>>> >> > elements.
>>> >         >>>>> >>>>>>>> >> >
>>> >         >>>>> >>>>>>>> >> > The separation comes in DataValue as the
>>> >         PatientDataValue
>>> >         >>>>> >>>>>>>> >> > will
>>> >         >>>>> >>>>>>>> >> > need
>>> >         >>>>> >>>>>>>> >> > other
>>> >         >>>>> >>>>>>>> >> > properties than the (routine) DataValue.
>>> >         >>>>> >>>>>>>> >>
>>> >         >>>>> >>>>>>>> >> Agreed.  But what would these properties be
>>> >         exactly?  Two
>>> >         >>>>> >>>>>>>> >> options
>>> >         >>>>> >>>>>>>> >> which have surfaced are:
>>> >         >>>>> >>>>>>>> >> 1. an additional patientID attribute; or
>>> >         >>>>> >>>>>>>> >> 2. no additional attribute - association of
>>> >         patient as a
>>> >         >>>>> >>>>>>>> >> "source"
>>> >         >>>>> >>>>>>>> >>
>>> >         >>>>> >>>>>>>> >> The first is most obvious and perhaps
>>> >         simplest.  And I
>>> >         >>>>> >>>>>>>> >> suspect I
>>> >         >>>>> >>>>>>>> >> am
>>> >         >>>>> >>>>>>>> >> the only one crazy enough to see any merit
>>> >         in exploring the
>>> >         >>>>> >>>>>>>> >> second.
>>> >         >>>>> >>>>>>>> >
>>> >         >>>>> >>>>>>>> > patientID yes, but probably also a DataSetID
>>> >         as we need to
>>> >         >>>>> >>>>>>>> > keep
>>> >         >>>>> >>>>>>>> > track (and
>>> >         >>>>> >>>>>>>> > separation) of the encounters/visits
>>> >         (instances of a
>>> >         >>>>> >>>>>>>> > dataset, "a
>>> >         >>>>> >>>>>>>> > filled
>>> >         >>>>> >>>>>>>> > form") in a more efficient way than we do in
>>> >         DataValue now.
>>> >         >>>>> >>>>>>>> > At least this is how its done in 1.4 Patient
>>> >         module and also
>>> >         >>>>> >>>>>>>> > for
>>> >         >>>>> >>>>>>>> > Survey type
>>> >         >>>>> >>>>>>>> > data.
>>> >         >>>>> >>>>>>>> >
>>> >         >>>>> >>>>>>>> >
>>> >         >>>>> >>>>>>>> >>
>>> >         >>>>> >>>>>>>> >> So I'm guessing Abyot will make a
>>> >         PatientDataElement with
>>> >         >>>>> >>>>>>>> >> something
>>> >         >>>>> >>>>>>>> >> like a patientID.
>>> >         >>>>> >>>>>>>> >
>>> >         >>>>> >>>>>>>> > Data elements do not have any direct
>>> >         reference to its
>>> >         >>>>> >>>>>>>> > source, so
>>> >         >>>>> >>>>>>>> > this should
>>> >         >>>>> >>>>>>>> > not be necessary. It is the datavalue that
>>> >         keeps this
>>> >         >>>>> >>>>>>>> > reference
>>> >         >>>>> >>>>>>>> > and which
>>> >         >>>>> >>>>>>>> > again is controlled by the dataset.
>>> >         >>>>> >>>>>>>>
>>> >         >>>>> >>>>>>>> Sorry typo - I meant PatientDataValue ..
>>> >         >>>>> >>>>>>>>
>>> >         >>>>> >>>>>>>>
>>> >         >>>>> >>>>>>>> > We would in stead need a maintain
>>> >         Patients/Clients in a
>>> >         >>>>> >>>>>>>> > separate
>>> >         >>>>> >>>>>>>> > object, and
>>> >         >>>>> >>>>>>>> > pherhaps in a hierarchy (family, village).
>>> >         Lars also liked
>>> >         >>>>> >>>>>>>> > the
>>> >         >>>>> >>>>>>>> > idea of
>>> >         >>>>> >>>>>>>> > implementing the source object here, and I am
>>> >         open to that.
>>> >         >>>>> >>>>>>>> > After
>>> >         >>>>> >>>>>>>> > all that
>>> >         >>>>> >>>>>>>> > is why we created the source, to have
>>> >         diffeent types of
>>> >         >>>>> >>>>>>>> > sources to
>>> >         >>>>> >>>>>>>> > register
>>> >         >>>>> >>>>>>>> > data, not only orgunits.
>>> >         >>>>> >>>>>>>> > The peirod handling might also be different
>>> >         here as we
>>> >         >>>>> >>>>>>>> > always work
>>> >         >>>>> >>>>>>>> > on dates
>>> >         >>>>> >>>>>>>> > since these data are snapshots in time and
>>> >         not aggregtated
>>> >         >>>>> >>>>>>>> > over a
>>> >         >>>>> >>>>>>>> > certain
>>> >         >>>>> >>>>>>>> > period.
>>> >         >>>>> >>>>>>>> >
>>> >         >>>>> >>>>>>>> > Calle might have some useful input to how
>>> >         patient values are
>>> >         >>>>> >>>>>>>> > different from
>>> >         >>>>> >>>>>>>> > routine, apart from the security aspect we
>>> >         already discussed
>>> >         >>>>> >>>>>>>> > some
>>> >         >>>>> >>>>>>>> > weeks
>>> >         >>>>> >>>>>>>> > back.
>>> >         >>>>> >>>>>>>> >
>>> >         >>>>> >>>>>>>> >>
>>> >         >>>>> >>>>>>>> >> What else?  Do we need a concept like an
>>> >         encounter (or
>>> >         >>>>> >>>>>>>> >> visit) to
>>> >         >>>>> >>>>>>>> >> which
>>> >         >>>>> >>>>>>>> >> a date would be tied?  Or can something be
>>> >         done with a
>>> >         >>>>> >>>>>>>> >> PeriodType?
>>> >         >>>>> >>>>>>>> >
>>> >         >>>>> >>>>>>>> > If we are going to reuse the DHIS concepts of
>>> >         data element,
>>> >         >>>>> >>>>>>>> > dataset, data
>>> >         >>>>> >>>>>>>> > entry form and data value then the dataset is
>>> >         the key here.
>>> >         >>>>> >>>>>>>> > In many ways routine datasets and "client"
>>> >         datasets are very
>>> >         >>>>> >>>>>>>> > similar, and "a
>>> >         >>>>> >>>>>>>> > filled form", or what might be called an
>>> >         instance of a
>>> >         >>>>> >>>>>>>> > dataset,
>>> >         >>>>> >>>>>>>> > contains
>>> >         >>>>> >>>>>>>> > values linked to data elements for a given
>>> >         period and a
>>> >         >>>>> >>>>>>>> > given
>>> >         >>>>> >>>>>>>> > source. Client
>>> >         >>>>> >>>>>>>> > encounters, rows from a register book, are
>>> >         also like that; a
>>> >         >>>>> >>>>>>>> > client name,
>>> >         >>>>> >>>>>>>> > multiple data elements (columns in the book)
>>> >         with values,
>>> >         >>>>> >>>>>>>> > and a
>>> >         >>>>> >>>>>>>> > date. After
>>> >         >>>>> >>>>>>>> > all its the final row of the register book,
>>> >         the total row
>>> >         >>>>> >>>>>>>> > aggregating all
>>> >         >>>>> >>>>>>>> > the encounters that gives the routine values
>>> >         for a monthly
>>> >         >>>>> >>>>>>>> > routine
>>> >         >>>>> >>>>>>>> > dataset.
>>> >         >>>>> >>>>>>>> > This example also illustrates how data
>>> >         elements overlap
>>> >         >>>>> >>>>>>>> > between
>>> >         >>>>> >>>>>>>> > client data
>>> >         >>>>> >>>>>>>> > and routine data, routine data are simply the
>>> >         total of "all
>>> >         >>>>> >>>>>>>> > clients" for the
>>> >         >>>>> >>>>>>>> > month. (This is not the case in survey audit
>>> >         type of
>>> >         >>>>> >>>>>>>> > datasets e.g.
>>> >         >>>>> >>>>>>>> > with
>>> >         >>>>> >>>>>>>> > maternal detah audits, but for standard CHIS
>>> >         it is mostly
>>> >         >>>>> >>>>>>>> > the
>>> >         >>>>> >>>>>>>> > case)
>>> >         >>>>> >>>>>>>> >
>>> >         >>>>> >>>>>>>> > If we keep track of the DatasetID in a
>>> >         ClientDataValue
>>> >         >>>>> >>>>>>>> > object we
>>> >         >>>>> >>>>>>>> > can the
>>> >         >>>>> >>>>>>>> > easily get an ecounter by querying for a
>>> >         client + a date + a
>>> >         >>>>> >>>>>>>> > dataset, or a
>>> >         >>>>> >>>>>>>> > list of all encounters (within a certain
>>> >         programme
>>> >         >>>>> >>>>>>>> > (dataset)) by
>>> >         >>>>> >>>>>>>> > querying
>>> >         >>>>> >>>>>>>> > for a client + a dataset. Of course it would
>>> >         be possible to
>>> >         >>>>> >>>>>>>> > get
>>> >         >>>>> >>>>>>>> > all data
>>> >         >>>>> >>>>>>>> > elements belonging to a dataset without
>>> >         directly referencing
>>> >         >>>>> >>>>>>>> > datasetid in
>>> >         >>>>> >>>>>>>> > datavalue, we do that today for dataset
>>> >         reports. Again, we
>>> >         >>>>> >>>>>>>> > need to
>>> >         >>>>> >>>>>>>> > check
>>> >         >>>>> >>>>>>>> > this with Calle or others, but I think client
>>> >         data are
>>> >         >>>>> >>>>>>>> > different
>>> >         >>>>> >>>>>>>> > in the way
>>> >         >>>>> >>>>>>>> > that a data element can exist in multiple
>>> >         datasets AND be
>>> >         >>>>> >>>>>>>> > registered for all
>>> >         >>>>> >>>>>>>> > of them for the same client and date, because
>>> >         the same data
>>> >         >>>>> >>>>>>>> > elements in
>>> >         >>>>> >>>>>>>> > different datasets might have different
>>> >         meanings and values.
>>> >         >>>>> >>>>>>>> > For
>>> >         >>>>> >>>>>>>> > routine
>>> >         >>>>> >>>>>>>> > this is not the case, that is why we di not
>>> >         keep a reference
>>> >         >>>>> >>>>>>>> > to
>>> >         >>>>> >>>>>>>> > dataset in
>>> >         >>>>> >>>>>>>> > datavalue, it is enough to use data element
>>> >         to describe the
>>> >         >>>>> >>>>>>>> > meaning of the
>>> >         >>>>> >>>>>>>> > data.
>>> >         >>>>> >>>>>>>> >
>>> >         >>>>> >>>>>>>> > So each encounter will be a data entry form,
>>> >         and its
>>> >         >>>>> >>>>>>>> > metadata will
>>> >         >>>>> >>>>>>>> > be
>>> >         >>>>> >>>>>>>> > controlled through the dataset object,
>>> >         similar to how its
>>> >         >>>>> >>>>>>>> > done for
>>> >         >>>>> >>>>>>>> > routine
>>> >         >>>>> >>>>>>>> > data. In the dataset object we need to
>>> >         specify what kind of
>>> >         >>>>> >>>>>>>> > data
>>> >         >>>>> >>>>>>>> > that is
>>> >         >>>>> >>>>>>>> > going to be registered,e.g. aggregated,
>>> >         disaggregated,
>>> >         >>>>> >>>>>>>> > survey(or
>>> >         >>>>> >>>>>>>> > routine,
>>> >         >>>>> >>>>>>>> > client, survey). Semi-permanent is then
>>> >         included in routine
>>> >         >>>>> >>>>>>>> > which
>>> >         >>>>> >>>>>>>> > is a bit
>>> >         >>>>> >>>>>>>> > confusing, that is why I prefer aggregated.
>>> >         Anyway, the
>>> >         >>>>> >>>>>>>> > principle
>>> >         >>>>> >>>>>>>> > is the
>>> >         >>>>> >>>>>>>> > same.
>>> >         >>>>> >>>>>>>>
>>> >         >>>>> >>>>>>>> OK.  This makes sense.  A register object (for
>>> >         want of a
>>> >         >>>>> >>>>>>>> better
>>> >         >>>>> >>>>>>>> term)
>>> >         >>>>> >>>>>>>> would be a specialisation of dataset.
>>> >         >>>>> >>>>>>>>
>>> >         >>>>> >>>>>>>> > Datasets could be made even more dynamic, as
>>> >         we discussed on
>>> >         >>>>> >>>>>>>> > Skype, by
>>> >         >>>>> >>>>>>>> > adding other attributes like a set of header
>>> >         data elements
>>> >         >>>>> >>>>>>>> > and a
>>> >         >>>>> >>>>>>>> > set of
>>> >         >>>>> >>>>>>>> > footer data elements. These will be based on
>>> >         the same type
>>> >         >>>>> >>>>>>>> > of data
>>> >         >>>>> >>>>>>>> > elements,
>>> >         >>>>> >>>>>>>> > but stored or treated in a different way (in
>>> >         data entry and
>>> >         >>>>> >>>>>>>> > data
>>> >         >>>>> >>>>>>>> > value).Exactly how I am not sure, but we
>>> >         should look in
>>> >         >>>>> >>>>>>>> > detail at
>>> >         >>>>> >>>>>>>> > how 1.4
>>> >         >>>>> >>>>>>>> > treats header data elements.
>>> >         >>>>> >>>>>>>>
>>> >         >>>>> >>>>>>>> Trying to piece together what a register might
>>> >         look like in
>>> >         >>>>> >>>>>>>> xml:
>>> >         >>>>> >>>>>>>>
>>> >         >>>>> >>>>>>>> <register name="Immunization register">
>>> >         >>>>> >>>>>>>>    <dataset name="header" >
>>> >         >>>>> >>>>>>>>       <dataelement name="????" >
>>> >         >>>>> >>>>>>>>             <datavalue source="[clinicID]"
>>> >         period="???"
>>> >         >>>>> >>>>>>>> value="34"
>>> >         >>>>> >>>>>>>> />
>>> >         >>>>> >>>>>>>>       </dataelement>
>>> >         >>>>> >>>>>>>>       <dataelement name="????" >
>>> >         >>>>> >>>>>>>>             <datavalue source="[clinicID]"
>>> >         period="???"
>>> >         >>>>> >>>>>>>> value="34"
>>> >         >>>>> >>>>>>>> />
>>> >         >>>>> >>>>>>>>       </dataelement>
>>> >         >>>>> >>>>>>>>    </dataset>
>>> >         >>>>> >>>>>>>>
>>> >         >>>>> >>>>>>>>   <patientdataset name="immunization data" />
>>> >         >>>>> >>>>>>>>        <dataelement name="???">
>>> >         >>>>> >>>>>>>>             <patientdatavalue
>>> >         source="[patientID1]" value="36"
>>> >         >>>>> >>>>>>>> date="01/01/2010" /> <!-- should date be done
>>> >         with a period
>>> >         >>>>> >>>>>>>> type?
>>> >         >>>>> >>>>>>>>             <patientdatavalue
>>> >         source="[patientID2]" value="43"
>>> >         >>>>> >>>>>>>> date="01/01/2010" />
>>> >         >>>>> >>>>>>>>             <patientdatavalue
>>> >         source="[patientID3]" value="35"
>>> >         >>>>> >>>>>>>> date="01/01/2010" />
>>> >         >>>>> >>>>>>>>             <patientdatavalue
>>> >         source="[patientID4]" value="22"
>>> >         >>>>> >>>>>>>> date="01/01/2010" />
>>> >         >>>>> >>>>>>>>        </dataelement>
>>> >         >>>>> >>>>>>>>        <dataelement name="???">
>>> >         >>>>> >>>>>>>>             <patientdatavalue
>>> >         source="[patientID1]" value="36"
>>> >         >>>>> >>>>>>>> date="01/01/2010" />
>>> >         >>>>> >>>>>>>>             <patientdatavalue
>>> >         source="[patientID2]" value="43"
>>> >         >>>>> >>>>>>>> date="01/01/2010" />
>>> >         >>>>> >>>>>>>>             <patientdatavalue
>>> >         source="[patientID3]" value="35"
>>> >         >>>>> >>>>>>>> date="01/01/2010" />
>>> >         >>>>> >>>>>>>>             <patientdatavalue
>>> >         source="[patientID4]" value="22"
>>> >         >>>>> >>>>>>>> date="01/01/2010" />
>>> >         >>>>> >>>>>>>>        </dataelement>
>>> >         >>>>> >>>>>>>>   </patientdataelement>
>>> >         >>>>> >>>>>>>>
>>> >         >>>>> >>>>>>>> </register>
>>> >         >>>>> >>>>>>>>
>>> >         >>>>> >>>>>>>> While typing the above it occurred to me that
>>> >         header AND
>>> >         >>>>> >>>>>>>> footer are
>>> >         >>>>> >>>>>>>> probably not necessary for representing a
>>> >         register.  What we
>>> >         >>>>> >>>>>>>> really
>>> >         >>>>> >>>>>>>> need is a set of dataelements associated with
>>> >         the register and
>>> >         >>>>> >>>>>>>> a set
>>> >         >>>>> >>>>>>>> associated with register rows.  Whether the
>>> >         elements in the
>>> >         >>>>> >>>>>>>> former
>>> >         >>>>> >>>>>>>> are
>>> >         >>>>> >>>>>>>> eventually rendered in the header or the footer
>>> >         is probably a
>>> >         >>>>> >>>>>>>> presentation issue which could be determined
>>> >         by, for example,
>>> >         >>>>> >>>>>>>> the
>>> >         >>>>> >>>>>>>> name
>>> >         >>>>> >>>>>>>> or ID of the dataelement.
>>> >         >>>>> >>>>>>>>
>>> >         >>>>> >>>>>>>> Also the above patientdataset is grouped on the
>>> >         dataelement
>>> >         >>>>> >>>>>>>> axis.
>>> >         >>>>> >>>>>>>> Could also be grouped on source/patientID,
>>> >         making it closer in
>>> >         >>>>> >>>>>>>> analogy
>>> >         >>>>> >>>>>>>> to rows in a register.  Though deriving the
>>> >         latter from the
>>> >         >>>>> >>>>>>>> former
>>> >         >>>>> >>>>>>>> is
>>> >         >>>>> >>>>>>>> a simple enough transformation.
>>> >         >>>>> >>>>>>>>
>>> >         >>>>> >>>>>>>> Abyot, returning to your original question, I
>>> >         don't know if
>>> >         >>>>> >>>>>>>> having a
>>> >         >>>>> >>>>>>>> dataelement classification is necessary.  If
>>> >         the dataelements
>>> >         >>>>> >>>>>>>> are
>>> >         >>>>> >>>>>>>> always members of a dataset (at least one or
>>> >         only one ..) then
>>> >         >>>>> >>>>>>>> probably not.  But I think you are right that
>>> >         it is only as
>>> >         >>>>> >>>>>>>> you
>>> >         >>>>> >>>>>>>> hammer
>>> >         >>>>> >>>>>>>> out the detail that the truth might emerge ...
>>> >         >&
>>>
>>

Attachment: Class Diagram 1.png
Description: PNG image


Follow ups

References