Facility Data Module


Image:Gsoc2009logo.gif

Contents

Overview

Commonly, there are large quantities of data that are collected on a periodic basis to assist with monitoring and evaluation and/or reporting to external funding agencies. Often, the reports in question are a combination of aggregate patient data (to be retrieved directly out of patient records) and aggregations of other data that is not directly captured at the patient level in the system. Allowing a mechanism for recording this "other data" in the system facilitates our ability to create reports that easily combine all data into one report, regardless of it's source.

Examples of the type of data that might be entered in aggregate form are:

  • Daily indicators of equipment status (i.e. was the x-ray machine functioning properly today)
  • Daily indicators of whether particular medications are stocked out or expired.
  • Depending on the facility, not all patients are necessarily entered into the EMR. Often, various routine patient visits are not captured in full electronically, so data may be needed to record these visits in aggregate - (i.e. 30 children vaccinated today)
  • Monthly indicators of education or training sessions (i.e. Number of training sessions held in churches this month)

Requirements

Phase 1 A complete OpenMRS module that compiles and runs on OpenMRS 1.4 and up. The core requirements would be as follows:

  • Creation of Objects required to model Aggregate Report Data
    • AggregateReportQuestion - (i.e. unique identifier, datatype, localizable question text, map of configuration properties)
    • AggregateReportSection - (i.e. unique identifier, localizable title/header, list of questions)
    • AggregateReport - (i.e. unique identifier, localizable name, frequency, map of configuration properties)
  • Data Model updates and services required to save, retrieve, and delete these objects from the database.
  • Creation of simple, intuitive user interface pages, including:
    • Management of Aggregate questions
    • Management of Reports and grouping questions into Report Sections
    • Graphical calendar view of report by period, color-coded by status (complete,partially complete,incomplete).
    • Page to choose and either view or enter data for a given Location / Period / Report
    • See example screenshots of user interface pages below

Phase 2

  • Enable use of the HTMLFormEntry module to enable more fine-grained control over the layout of an Aggregate Report
  • Analysis pages that provide tools for:
    • Viewing all reports for a given location / report side-by-side for all periods in a selected date range
    • Identifying missing reports and missing answers within reports
    • View the data for all numeric-typed questions in a given report as an aggregate value over a selected date range (sum, mean, median, etc)
    • Exporting of any of these to Excel
    • Graphing the data of any given question for a location over a selected date range. Support various graph types (i.e. time graph for numeric type, pie chart for coded type)

High-Level Specification

These are some of the high level specifications and user stories that could be included in this project. During the design phase, we will add even features and requirements. After creating the full backlog of features, the team will meet with users/stakeholders to prioritize all features in order to figure out which ones are going to be implemented in a first release.

User Stories

This section will be completed by the student after soliciting requirements

Project Plan

This section will be completed by the student and mentor.

Mockups

This section will be completed by the student. These are some example screen shots from the system that has helped guide these requirements:

Calendar for a Daily Report
Enlarge
Calendar for a Daily Report
Calendar for a Monthly Report
Enlarge
Calendar for a Monthly Report
Viewing a Daily Report
Enlarge
Viewing a Daily Report
Answering one type of aggregate question
Enlarge
Answering one type of aggregate question
Answering other types of aggregate questions
Enlarge
Answering other types of aggregate questions
Formatting questions based on dimension
Enlarge
Formatting questions based on dimension
Viewing multiple reports over time
Enlarge
Viewing multiple reports over time
Aggregating questions over time
Enlarge
Aggregating questions over time

FAQs

***TO BE COMPLETED***

Resources

Project Documents

Here is a small sample Facility Data Collection form that we should aim to implement in the initial phase:

<html>
<head> 
<title>Daily Site Report</title>
</head>
<body bgcolor="#FFFFFF" leftmargin=4 marginwidth=0 marginheight=4 topmargin=4>
	<form name="aggregateEntryForm" method="post" action="aggregate-reports-2">
		<input type=hidden name=site value=3>
		<input type=hidden name=report_type value=daily_report>
		<input type=hidden name=start_date value=2009-05-26>
		<input type=hidden name=end_date value=2009-05-26>
        	<table width=100%>
	        	<tr align=center>
				<th>Site: Cange</th>
				<th>Date: 2009/May/26</th>
			</tr>
		</table>
		<table width=100% border=2 rules=rows cellpadding=5>
        		<tr bgcolor=#afdfbf><th colspan=2>Equipment Status</th><tr>
			<tr align=left><td width=50% align=right>Electricity Working</td>
				<td width=50% align=left>
					<input type=radio name=formData.electricity_working value=t>oui
					<input type=radio name=formData.electricity_working value=f>non
					<input type=text size=20 name=formData.electricity_working_txt value="">
					<input type=radio name=formData.electricity_working value=NA>Pas Disponible
				</td>
			</tr>
			<tr align=left><td width=50% align=right>Generator Working</td>
				<td width=50% align=left>
					<input type=radio name=formData.generator_working value=t>oui
					<input type=radio name=formData.generator_working value=f>non
					<input type=text size=20 name=formData.generator_working_txt value="">
					<input type=radio name=formData.generator_working value=NA>Pas Disponible
				</td>
			</tr>
			<tr bgcolor=#afdfbf><th colspan=2>Number of Vaccinations Performed</th><tr>
			<tr align=left>
				<td width=50% align=right>Adults</td>
				<td width=50% align=left>
					<input type=text size=5 name=formData.vaccination_adult value="">
				</td>
			</tr>
			<tr align=left>
				<td width=50% align=right>Children</td>
				<td width=50% align=left>
					<input type=text size=5 name=formData.vaccination_child value="">
				</td>
			</tr>
			<tr bgcolor=#afdfbf><th colspan=2>Mobile Clinics</th><tr>
			<tr align=left>
				<td width=50% align=right>Was there a mobile clinic today?</td>
				<td width=50% align=left>
					<input type=radio name=formData.mobile_clinic value=t>Yes
					<input type=radio name=formData.mobile_clinic value=f>No
					<input type=radio name=formData.mobile_clinic value=NA>N/A
				</td>
			</tr>
			<tr align=left>
				<td width=50% align=right># of Children Seen</td>
        			<td width=50% align=left>
					<input type=text size=5 name=formData.mobile_child value="">
				</td>
			</tr>
			<tr align=left>
				<td width=50% align=right># of Adults Seen</td>
				<td width=50% align=left>
					<input type=text size=5 name=formData.mobile_adult value="">
				</td>
			</tr>
			<tr bgcolor=#afdfbf><th colspan=2>Stock Status - Vaccinations</th><tr>
			<tr align=left>
				<td width=50% align=right>Measles</td>
				<td width=50% align=left>
					<select name=formData.vac_measles>
						<option value="" selected > </option>
						<option value=no_stock_out>In Stock</option>
						<option value=stock_out>Out of Stock</option>
						<option value=stock_expired>All Stock Expired</option>
						<option value=not_applicable_at_site>N/A</option>
					</select>
					for <input type=text size=5 name=formData.vac_measles_days value="" /> days
					<input type=text size=20 name=formData.vac_measles_txt value="">
				</td>
			</tr>
			<tr align=left>
				<td width=50% align=right>Polio</td>
				<td width=50% align=left>
        				<select name=formData.vac_polio>
						<option value="" selected > </option>
						<option value=no_stock_out>In Stock</option>
						<option value=stock_out>Out of Stock</option>
						<option value=stock_expired>All Stock Expired</option>
						<option value=not_applicable_at_site>N/A</option>
					</select>
					for <input type=text size=5 name=formData.vac_polio_days value="" /> days
					<input type=text size=20 name=formData.vac_polio_txt value="">
				</td>
			</tr>
			<tr align=left>
				<td width=50% align=right>Tetanus</td>
				<td width=50% align=left>
					<select name=formData.vac_tetanus>
						<option value="" selected > </option>
						<option value=no_stock_out>In Stock</option>
						<option value=stock_out>Out of Stock</option>
						<option value=stock_expired>All Stock Expired</option>
						<option value=not_applicable_at_site>N/A</option>
					</select>
					for <input type=text size=5 name=formData.vac_tetanus_days value="" /> days
					<input type=text size=20 name=formData.vac_tetanus_txt value="">
				</td>
			</tr>
		</table>
	</form>
</body>
</html>

OpenMRS Documents

  • more resources to follow

Blogs

External

  • more resources to follow