← Back to team overview

dhis2-devs team mailing list archive

Re: weeks calculation

 

Ahh.. :-)

Thanks
Caveman


Bob Jolliffe wrote:
2009/5/11 Orvalho Joaquim Augusto <orvaquim@xxxxxxxxx>:
Thank for this helpfull ofert.

I talk within your words.

Bob Jolliffe wrote:
Hi Orvalho

2009/5/11 Orvalho Joaquim Augusto <orvaquim@xxxxxxxxx>:
Well this comment is interesting.

And the question raises from my needs here. I am moving data from a not
dhis2 system to dhis2. And we must do it weekly because dhis2 is not yet
adopted.

I noticed that I had weeks changed on dhis2.
Do you have some examples?  i.e. ones which show that week 1 is
indicated as something specific for a particular year which is
different to the DHIS2 way.  Then maybe we can start thinking about
how DHIS2 should best handle.  Is your data coming from Excel?

It is not Excel.

Some physiology of what we have:
The System being used now is called Modulo Basico (modbas for now on). That
system is in MsAccess. It stores data for each form in one table. The table
contains for record identification these fields (all in strings): year (YR),
week (MTH, it is no mistake), district code (DC), province code (PC) and
health center (HC).

The data comens on diferent columns identified by A1, A2 up to An (depending
on the form).

As this is what Ministry of Health uses and dhis2 is being prepared to be
used in large scale we feed dhis2 using some rudimentar steps:
1. There is a scheduled program per day to convert the tables in MDB
 in modbas to mysql (db2sync instead of mysql migration tool because db2syn
exports well the keys)
2. Under the mysql server machine there is a python script that take data
feeds dhis2 tables.

Step 2 uses periodid generated by dhis2 using the ranges.

For the months this is fine. But for weeks we need to know which week is
based on the ranges given by periodid.

Is this clear enough?

And do you need really data to check?

No I don't need lots of data.  Just something like year 2005 (weeks
are ok), 2006 (dhis is one week ahead), 2007 (weeks are ok) .... I am
just trying to figure out the problem and what weeknumber system your
system (and DHIS2) is using.  Empirically like this is the easiest.

Cheers
Bob


Regards
Bob

PS. I see mysql makes use of a mode argument

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_week
I guess ISO8601 mode would be mode 3 under this scheme.
Thanks.

But on dhis2 it seems different isn't that?

Regards
Caveman


PPS.  Excel does not have a weeknum function built in.  There is an
analysis toolpack plugin which implements something non-standard -
somteimes described as the US norm - the first week (like other weeks)
ends on Sunday.  It can be any number of days long from 1 to 7.

PPPS.  David Wheeler has done some excellent work on the OpenFormula
SubCommittee of the ODF OASIS TC on figuring out the differences
between all these.  It looks like ODF will eventually adopt two
functions WEEKNUM (which implements the incorrect Excel algorithm) and
ISO_WEEKNUM which implements the correct algorithm.



And now to adjust to dhis2 I need to know how dhis2 does. And Bob raises
this. What I do? I use the algorithm from that java Class?

Caveman

Bob Jolliffe wrote:
Hi

2009/5/11 Murodullo Latifov <murodlatifov@xxxxxxxxx>:
Hi Caveman,



----- Original Message ----
From: Orvalho Joaquim Augusto <orvaquim@xxxxxxxxx>
To: dhis2-devs <dhis2-devs@xxxxxxxxxxxxxxxxxxx>
Sent: Monday, May 11, 2009 2:57:42 AM
Subject: [Dhis2-devs] weeks calculation

I could not find on dhis2 docs so I am asking:

How dhis2 calculate the weeks? The first week of a year for example.

Weekly periods are calculated based on their start date. If start date
of
the given week is on the previous year, end date of that period is
used.
Also
Saturday is used as first day of the week.
The code is here:
./dhis-api/src/main/java/org/hisp/dhis/period/WeeklyPeriodType.java

I find it a bit confusing.  It seems that we try to define a week as
Saturday to Friday, and then say that as long as the endDate is in a
different year to the startDate then we are in week 1.  So week 1 is
the first week in the year with a Friday in it?  This doesn't sound
right.  Also according to documentation on top of class, a weekly
period must have a startDate on a Monday and endDate on a Sunday.

But week numbers according to ISO8601 are equivalent to the number of
Thursdays - ie. first week in the year with a Thursday is week 1.
This is the way that, for example the javascript in the calendar.js
would calculate it.  And presumably any sql week function we might
use.  Also weeks would start on Monday (which agrees with our class
documentation).

So for the week of 29/12/2008 to 04/01/2009, by our calculation that
would be week 1 of 2009.  And it would be week 1 by ISO 8601.

But for the week of 28/12/2009 to 3/01/2010 which is coming up, our
calculation would have this as week 1 of 2010, whereas ISO8601 would
have it as week 52 or 53 of 2010.  Week 1 would be the week of
04/01/2010.

As I say - its a bit confusing.

Though perhaps in the end the actual week number doesn't matter.  What
might matter most is the convention we consistently adopt and
document.  Though it would be nice if our conception of week 1
coincided with the ISO8601 conception.  But not so nice as to break
all the annual reports ... Do we ever exchange a week number with
another system?  Do we need to be able to define this more flexibly to
accomodate different national reporting requirements which might
interpret the first week of the year differently?  I haven't even
begun to think of this in terms of localised calendar systems :-)

Regards
Bob

Thank you
Caveman



_______________________________________________
Mailing list: https://launchpad.net/~dhis2-devs
Post to     : dhis2-devs@xxxxxxxxxxxxxxxxxxx
Unsubscribe : https://launchpad.net/~dhis2-devs
More help   : https://help.launchpad.net/ListHelp





_______________________________________________
Mailing list: https://launchpad.net/~dhis2-devs
Post to     : dhis2-devs@xxxxxxxxxxxxxxxxxxx
Unsubscribe : https://launchpad.net/~dhis2-devs
More help   : https://help.launchpad.net/ListHelp







References