CDPH query for meenaxi
CDPH calculation for days present
by kbcb
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment-with-locales.min.js"></script>
<h2>Input</h2>
<textarea id="data">
99900 Discharge 3/1/2018 11:00 AM EMC ER F2 Emergency
12345 Admission 3/8/2018 11:45 PM EMC ER K4 Emergency
12345 Discharge 3/9/2018 3:22 AM EMC ER K4 Emergency
34567 Admission 3/10/2018 10:17 PM EMC ER G1 Emergency
34567 Admission 3/10/2018 4:17 AM EMC ER G1 Observation
34567 Transfer Out 3/11/2018 5:56 AM EMC ER G1 Observation
45678 Admission 3/12/2018 6:00 AM EMC ER A3 Emergency
45678 Transfer Out 3/12/2018 3:45 PM EMC ER A3 Emergency
45678 Transfer In 3/12/2018 7:00 PM EMC ER Overflow Emergency
45678 Discharge 3/12/2018 9:00 PM EMC ER Overflow Emergency
45678 Admission 3/14/2018 6:00 AM EMC ER A1 Emergency
45678 Transfer In 3/14/2018 3:45 PM EMC ER A1 Emergency
45678 Transfer Out 3/14/2018 7:00 PM EMC ER A1 Emergency
45678 Discharge 3/15/2018 1:00 AM EMC ER A1 Emergency
56789 Admission 3/17/2018 4:13 AM EMC ER R2 Emergency
56789 Admission 3/17/2018 6:26 AM EMC ER R2 Inpatient
56789 Transfer Out 3/17/2018 8:22 AM EMC ER R2 Inpatient
78889 Admission 3/18/2018 6:52 PM EMC ER B2 Emergency
78889 Admission 3/18/2018 10:09 PM EMC ER B2 Inpatient
78889 Transfer Out 3/18/2018 10:59 PM EMC ER B2 Inpatient
78889 Transfer In 3/18/2018 10:59 PM EMC ER OTF Room Inpatient
78910 Admission 3/20/2018 8:45 AM EMC ER FT4 Emergency
78910 Discharge 3/20/2018 11:00 AM EMC ER FT4 Emergency
78910 Admission 3/21/2018 2:00 PM EMC ER G3 Emergency
78910 Transfer Out 3/21/2018 4:00 PM EMC ER G3 Emergency
78910 Transfer In 3/21/2108 4:00 PM EMC ER OTF Room Emergency
78910 Discharge 3/21/2018 4:28 PM EMC ER OTF Room Emergency
99989 Admission 3/22/2018 3:44 PM EMC ER R3 Emergency
99989 Admission 3/22/2018 5:31 PM EMC ER R3 Inpatient
99989 Admission 3/22/2018 5:48 AM EMC ER R3 Observation
99989 Transfer In 3/22/2018 6:43 PM EMC ER OTF...
CSS
#data {
white-space: pre;
}
td {
border: 1px solid black;
padding: 5px;
}
textarea {
width: 100%;
height: 100px;
}
JavaScript
/*
1. Copy and paste Excel data INTO the <div> in "HTML" tab
2. Hit "Run" in top-left
Notes:
* $(document).ready() is the beginning of the logic
* parseData is first executed to convert the excel tab-delimited data into javascript arrays of rows and columns (a sub-array)
* groupData is then executed to group the data together by mrn number (the first column)
*/
function parseData() {
var data = $('#data').val();
var lines = data.replace(/\r/g, '').split('\n');
var parsed = [];
_.each(lines, function(line) {
if (!line) {
return;
}
var columns = line.split('\t');
var parsedLine = [];
_.each(columns, function(column) {
parsedLine.push(column);
});
parsed.push(parsedLine);
});
return parsed;
}
function groupData(parsedData) {
var mrnGroups = [];
_.each(parsedData, function(parsedLine) {
var foundMrnGroup = _.find(mrnGroups, function(mrnGroup) {
return mrnGroup.mrn === parsedLine[0];
});
if (!foundMrnGroup) {
foundMrnGroup = {
mrn: parsedLine[0],
lines: []
};
mrnGroups.push(foundMrnGroup);
}
foundMrnGroup.lines.push(parsedLine);
});
return mrnGroups;
}
function getDiff(row1, row2) {
var date1 = moment(row1[2]);
var date2 = moment(row2[2]);
var diff = date2.diff(date1, 'd'); // returns difference in days
return diff + 1; // returns a fraction of 24 hours
}
$(document).ready(function() {
var parsedData = parseData();
var groupedData = groupData(parsedData);
_.each(groupedData, function(mrnGroup) {
var daysPresentForGroup = 0;
// Scenario 1
if (mrnGroup.lines.length === 1) {
daysPresentForGroup = 1;
} else { // All other scenarios
var next = 0;
var countedDates = [];
for (var i = 0; i < mrnGroup.lines.length; i++) {
var line = mrnGroup.lines[i];
// Reset the next count on admission
if...