Example #1
0
        public static PatientEpisode GetPatientEpisodes(string hn)
        {
            PatientEpisode ptEpi = new PatientEpisode();

            var cmdString = QueryString.GetPatientEpisodes(hn);
            //var dt = InterSystemsDA.DTBindDataCommand(cmdString, Constants.Chache89);
            var dt = InterSystemsDA.GetDTGetPatientEpisode(hn);

            ptEpi = Helper.DataTablePatientEpisode(dt, hn);

            return(ptEpi);
        }
Example #2
0
        internal static TheographChartViewModel GetPatientEpsiodeEventsChart(PatientEpisode patientEpisode)
        {
            TheographChartViewModel output = new TheographChartViewModel();

            if (patientEpisode.Episode.Events.Count == 0)
            {
                return(output);
            }

            var eventGroups = patientEpisode.Episode.Events.GroupBy(x => x.EventType.DisplayName);

            var maxEventEndTime = patientEpisode.Episode.Events.Select(x => x.StartTime)
                                  .Union(patientEpisode.Episode.Events.Where(x => x.EndTime.HasValue).Select(x => x.EndTime.Value))
                                  .Max();

            DateTime start = patientEpisode.Episode.StartTime;
            DateTime end   = start;

            // set a sensible end time
            if (patientEpisode.Episode.EndTime.HasValue)
            {
                end = patientEpisode.Episode.EndTime.Value;
            }
            else
            {
                end = maxEventEndTime;
            }

            var xAxis = new TheographAxisData
            {
                Type         = "datetime",
                Min          = start.AddHours(-1).ToHighchartsTime(),
                Max          = end.AddHours(1).ToHighchartsTime(),
                TickInterval = 1000 * 60 * 30,
                MinRange     = 1000 * 60 * 60, // max zoom of 1 hour
            };

            var yAxis      = new TheographAxisData();
            var yPlotBands = new List <TheographPlotBandData>();

            const int height = 100;

            yAxis.TickInterval = height;
            yAxis.Max          = eventGroups.Count() * height;
            yAxis.MinRange     = eventGroups.Count() * height;
            yAxis.Labels       = new TheographAxisLabelData();
            yAxis.Title        = new TheographTitleData();

            for (int i = 0; i < eventGroups.Count(); i++)
            {
                var eventGroup = eventGroups.ElementAt(i);

                var series = new TheographChartSeries
                {
                    Name = eventGroup.Key
                };

                var plotBand = new TheographPlotBandData
                {
                    From  = i * height,
                    To    = (i + 1) * height,
                    Color = (i % 2 == 0) ? "rgba(68, 170, 213, 0.1)" : null
                };

                plotBand.Label.Text = eventGroup.Key;

                var orderedEvents = eventGroup.OrderBy(x => x.StartTime);

                foreach (var orderedEvent in orderedEvents)
                {
                    int yPoint = ((i + 1) * height) - (height / 2);

                    StringBuilder sbToolTipText = new StringBuilder();

                    string tooltipTitle = eventGroup.Key;

                    IResultsEvent resultsEvent = orderedEvent as IResultsEvent;

                    if (resultsEvent != null)
                    {
                        if (resultsEvent.Results.Count > 1)
                        {
                            tooltipTitle = string.Format("{0} : {1}",
                                                         eventGroup.Key,
                                                         orderedEvent.Code.DisplayName);

                            foreach (var result in resultsEvent.Results)
                            {
                                sbToolTipText.AppendFormat(
                                    "{0}{1}",
                                    sbToolTipText.Length == 0 ? string.Empty : "<br/>",
                                    result.GetDisplayValue());
                            }
                        }
                        else if (resultsEvent.Results.Count == 1)
                        {
                            sbToolTipText.AppendFormat(
                                "{0} : {1}",
                                orderedEvent.Code.DisplayName,
                                resultsEvent.Results[0].GetDisplayValue());
                        }
                    }

                    sbToolTipText.AppendFormat(
                        "{0}{1:ddd MMMM} <sup>{2}</sup> {1:yyyy HH:mm}",
                        sbToolTipText.Length == 0 ? string.Empty : "<br/>",
                        orderedEvent.StartTime,
                        orderedEvent.StartTime.GetDayOrdinal());

                    if (orderedEvent.EndTime.HasValue)
                    {
                        sbToolTipText.AppendFormat(
                            " to {0:ddd MMMM} <sup>{1}</sup> {0:yyyy HH:mm}",
                            orderedEvent.EndTime.Value,
                            orderedEvent.EndTime.Value.GetDayOrdinal());
                    }

                    // start point
                    var dataPoint = new TheographChartSeriesData
                    {
                        // * 1000 to conform with the Highcharts way of handling dates
                        EpisodeStartTimestamp = orderedEvent.StartTime.ToHighchartsTime(),
                        Y = yPoint
                    };

                    dataPoint.AddData("tooltipTitle", tooltipTitle);
                    dataPoint.AddData("tooltipText", sbToolTipText.ToString());
                    dataPoint.AddData("episodeId", orderedEvent.EpisodeId.Value);

                    series.Data.Add(dataPoint);

                    // end point
                    if (orderedEvent.EndTime.HasValue)
                    {
                        dataPoint = new TheographChartSeriesData
                        {
                            // * 1000 to conform with the Highcharts way of handling dates
                            EpisodeStartTimestamp = orderedEvent.EndTime.Value.ToUnixTime() * 1000,
                            Y = yPoint
                        };

                        dataPoint.AddData("tooltipTitle", tooltipTitle);
                        dataPoint.AddData("tooltipText", sbToolTipText.ToString());
                        dataPoint.AddData("episodeId", orderedEvent.EpisodeId.Value);

                        series.Data.Add(dataPoint);
                    }

                    // add null-value point to disconnect separate epsiodes
                    var dataNullPoint = new TheographChartSeriesData
                    {
                        EpisodeStartTimestamp = dataPoint.EpisodeStartTimestamp + 1,
                        Y = null
                    };

                    series.Data.Add(dataNullPoint);
                }

                output.Series.Add(series);
                yAxis.AddPlotBand(plotBand);
            }

            var xPlotBands = new List <TheographPlotBandData>();

            xAxis.AddPlotBand(new TheographPlotBandData
            {
                From  = start.ToHighchartsTime(),
                To    = end.ToHighchartsTime(),
                Color = "rgba(190, 220, 240, 0.35)"
            });

            output.Axes.Add("x", xAxis);
            output.Axes.Add("y", yAxis);

            return(output);
        }
Example #3
0
        public static PatientEpisode DataTablePatientEpisode(DataTable dt, string hn)
        {
            PatientEpisode ptEpi = new PatientEpisode();
            List <Episode> epis  = new List <Episode>();

            if (!hn.Contains("-"))
            {
                hn = Regex.Replace(hn, @"^(.{2})(.{2})(.{6})$", "$1-$2-$3");
            }

            #region ByQueryString
            //foreach (DataRow row in dt.Rows)
            //{
            //    Episode epi = new Episode();
            //    string epino = row["PAADM_ADMNo"].ToString().Trim();
            //    if (!string.IsNullOrEmpty(epino))
            //    {
            //        epi.EpisodeNo = epino;
            //        epi.EpisodeDate = Convert.ToDateTime(row["PAADM_AdmDate"].ToString());
            //        epi.EpisodeTime = Convert.ToDateTime(row["PAADM_AdmTime"].ToString());
            //        epi.LocCode = row["CTLOC_Code"].ToString();
            //        epi.LocDesc = row["CTLOC_Desc"].ToString();
            //        epi.IPD_OPD = IPD_OPD(epino);
            //        epi.DoctorName = row["CTPCP_Desc"].ToString();
            //        epi.DoctorSpecialty = row["CTSPC_Desc"].ToString();
            //        epi.Revenue = GetData.GetRevenueByEPI(epino);
            //        epi.PaymentMethod = "";
            //        epi.ICD10 = row["MRCID_Code"].ToString();
            //        epi.ICPC2 = "";
            //        epi.DepartmentGroup = "";
            //        epi.Hospital = GetHospital(epino);
            //        epi.HospitalDRGCategory = "";
            //        epi.Interpreter = "";
            //        epis.Add(epi);
            //    }
            //}
            #endregion

            #region By Store Procedure
            foreach (DataRow row in dt.Rows)
            {
                Episode epi   = new Episode();
                string  epino = row["admNo"].ToString().Trim();
                if (!string.IsNullOrEmpty(epino))
                {
                    epi.EpisodeNo           = epino;
                    epi.EpisodeDate         = DateTime.Parse(row["admDate"].ToString()).ToString("dd/MM/yyyy");
                    epi.LocCode             = row["admLocCode"].ToString();
                    epi.LocDesc             = row["admLocDesc"].ToString();
                    epi.IPD_OPD             = IPD_OPD(epino);
                    epi.DoctorName          = row["admDocDesc"].ToString();
                    epi.DoctorSpecialty     = row["admSpec"].ToString();
                    epi.Revenue             = Convert.ToDouble(row["titmLineTotal"].ToString());
                    epi.PaymentMethod       = row["PayorDesc"].ToString();
                    epi.ICD10               = row["icd10"].ToString();
                    epi.ICPC2               = row["icd9"].ToString();
                    epi.DepartmentGroup     = row["DepartmentGrp"].ToString();
                    epi.Hospital            = row["CTHospital"].ToString();
                    epi.HospitalDRGCategory = row["CTHospitalDRG"].ToString();
                    epi.Interpreter         = row["interpreter"].ToString();
                    epis.Add(epi);
                }
            }
            #endregion



            ptEpi.HN       = hn;
            ptEpi.Episodes = epis;

            return(ptEpi);
        }