287 lines
18 KiB
C#
287 lines
18 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Datalib.DatabaseSpecific;
|
|
using System.Windows.Forms;
|
|
using Datalib.Linq;
|
|
using Datalib.EntityClasses;
|
|
using Datalib.FactoryClasses;
|
|
using Datalib.HelperClasses;
|
|
using PatientMan.Classes;
|
|
|
|
namespace PatientMan.Classes
|
|
{
|
|
|
|
class clsC03Quartly
|
|
{
|
|
public DevExpress.XtraSpreadsheet.SpreadsheetControl spreed;
|
|
public DateTime BeginDate;
|
|
public DateTime EndDate;
|
|
private DevExpress.Spreadsheet.Worksheet _Rep, _Tracking;
|
|
public DataAccessAdapter adapter = new DataAccessAdapter(SettingInfo.Constr);
|
|
|
|
public void Calculate()
|
|
{
|
|
_Rep = spreed.Document.Worksheets["Rep"];
|
|
_Tracking = spreed.Document.Worksheets["Tracking"];
|
|
|
|
R4(); R5(); R6();
|
|
}
|
|
|
|
private void R4()
|
|
{
|
|
|
|
var exams = new EntityCollection<TblExaminationInfoEntity>();
|
|
adapter.FetchEntityCollection(exams, null);
|
|
var Patients = new EntityCollection<TblPatientEntity>();
|
|
var Treatments = new EntityCollection<TblTreatmentInfoEntity>();
|
|
//var BeginDate = (DateTime)this.BeginDate.EditValue;
|
|
//var EndDate = (DateTime)this.EndDate.EditValue;
|
|
adapter.FetchEntityCollection(Patients, null);
|
|
adapter.FetchEntityCollection(Treatments, null);
|
|
LinqMetaData meta = new LinqMetaData(adapter);
|
|
#region Index1
|
|
/*Số bệnh nhân trước điều trị ARV mới đăng ký trong kỳ báo cáo
|
|
Lọc trong bảng tblPatients những bệnh nhân đăng ký trong khoảng báo cáo và thỏa mãn điều kiện DateofARV = null hoăc DateofArv > DateofRegistration
|
|
*/
|
|
int index1 = 0;
|
|
string indexs1 = "";
|
|
var index1result = Patients.Where(m => m.DateofRegistration >= BeginDate && m.DateofRegistration <= EndDate && (m.DateofArv == null || m.DateofArv >= m.DateofRegistration)).Select(q => q.PatientId).ToList();
|
|
index1 = index1result.Count();
|
|
indexs1 = string.Join(",", index1result.ToArray());
|
|
|
|
#endregion
|
|
#region index2
|
|
// Số bệnh nhân trước điều trị ARV hiện đang quản lý đến cuối kỳ báo cáo
|
|
|
|
int index2 = 0;
|
|
string indexs2 = "";
|
|
|
|
List<string> ends = exams.Where(p => p.ExamDate < EndDate).GroupBy(q => q.PatientId).Select(g => g.OrderByDescending(m => m.ExamDate).First()).ToList().Where(s => s.EndExamDate == null || s.EndExamDate > EndDate).Select(t => t.PatientId).ToList();
|
|
var index2result = Patients.Where(m => m.DateofArv > EndDate || m.DateofArv == null).Where(p => ends.Contains(p.PatientId)).Select(p => p.PatientId).ToList();
|
|
|
|
index2 = index2result.Count();
|
|
indexs2 = string.Join(",", index2result.ToArray());
|
|
#endregion
|
|
#region index3
|
|
//Chỉ số 1 - Số bệnh nhân bắt đầu điều trị dự phòng mắc Lao bằng INH (IPT) trong kì báo cáo
|
|
|
|
int index3 = 0;
|
|
string indexs3 = "";
|
|
var index3prevresult = (from tr in Treatments where tr.TreatmentId == "03" group tr by tr.PatientId into g select g.OrderBy(p => p.TreatmentSdate).First()).Where(p => p.TreatmentSdate >= BeginDate && p.TreatmentSdate <= EndDate).ToList();
|
|
var index3result = index3prevresult.Join(Patients,
|
|
t => t.PatientId,
|
|
p => p.PatientId,
|
|
(t, p)
|
|
=> new { t.PatientId }).Select(p => p.PatientId).ToList();
|
|
|
|
index3 = index3result.Count();
|
|
indexs3 = string.Join(",", index3result.ToArray());
|
|
|
|
#endregion
|
|
|
|
#region Fill Cells
|
|
_Rep.Cells[6,9].Value = index1;_Tracking.Cells[6,9].Value = indexs1;
|
|
_Rep.Cells[7, 9].Value = index2; _Tracking.Cells[7, 9].Value = indexs2;
|
|
_Rep.Cells[8, 9].Value = index3; _Tracking.Cells[8, 9].Value = indexs3;
|
|
|
|
#endregion
|
|
}
|
|
private void R5()
|
|
{
|
|
var exams = new EntityCollection<TblExaminationInfoEntity>();
|
|
adapter.FetchEntityCollection(exams, null);
|
|
var Patients = new EntityCollection<TblPatientEntity>();
|
|
var TreatmentInfo = new EntityCollection<TblTreatmentInfoEntity>();
|
|
var Regimens = new EntityCollection<TblRegimenEntity>();
|
|
|
|
adapter.FetchEntityCollection(Patients, null);
|
|
adapter.FetchEntityCollection(TreatmentInfo, null);
|
|
adapter.FetchEntityCollection(Regimens, null);
|
|
|
|
LinqMetaData meta = new LinqMetaData(adapter);
|
|
|
|
|
|
#region index1
|
|
// Số bệnh nhân điều trị ARV cuối kỳ báo cáo trước
|
|
|
|
int[] index1 = { 0, 0 };
|
|
string[] indexs1 = {"",""};
|
|
|
|
var LastArvs1 = TreatmentInfo.Where(p => p.TreatmentSdate < BeginDate && p.TreatmentId == "01").GroupBy(q => q.PatientId).Select(g => g.OrderByDescending(m => m.TreatmentSdate).First()).ToList().Where(s => s.TreatmentEdate == null || s.TreatmentEdate > BeginDate).Select(t => new { t.PatientId, t.Regimenid }).ToList();
|
|
var preindex1result = LastArvs1.Join(Regimens, p => p.Regimenid, q => q.Regimenid, (p, q) => new { p.PatientId, q.Type }).ToList();
|
|
index1[0] = preindex1result.Where(p => p.Type == 1).ToList().Count();
|
|
indexs1[0] = string.Join(",",preindex1result.Where(p => p.Type == 1).Select(p=>p.PatientId).ToArray());
|
|
|
|
index1[1] = preindex1result.Where(p => p.Type == 2).ToList().Count();
|
|
indexs1[1] = string.Join(",", preindex1result.Where(p => p.Type == 2).Select(p => p.PatientId).ToArray());
|
|
|
|
#endregion
|
|
#region index2
|
|
// Số bệnh nhân điều trị ARV cuối kỳ báo cáo trước
|
|
|
|
int[] index2 = { 0, 0 };
|
|
string[] indexs2 = { "", "" };
|
|
|
|
var LastArvs2 = TreatmentInfo.Where(p => p.TreatmentSdate < EndDate && p.TreatmentId == "01").GroupBy(q => q.PatientId).Select(g => g.OrderBy(m => m.TreatmentSdate).Last()).ToList().Where(s => s.TreatmentEdate == null || s.TreatmentEdate > EndDate).Select(t => new { t.PatientId, t.Regimenid }).ToList();
|
|
var preindex2result = LastArvs2.Join(Regimens, p => p.Regimenid, q => q.Regimenid, (p, q) => new { p.PatientId, q.Type }).ToList();
|
|
index2[0] = preindex2result.Where(p => p.Type == 1).ToList().Count();
|
|
indexs2[0] = string.Join(",", preindex2result.Where(p => p.Type == 1).Select(p => p.PatientId).ToArray());
|
|
index2[1] = preindex2result.Where(p => p.Type == 2).ToList().Count();
|
|
indexs2[1] = string.Join(",", preindex2result.Where(p => p.Type == 2).Select(p => p.PatientId).ToArray());
|
|
|
|
#endregion
|
|
|
|
#region index 2.1
|
|
// Số bệnh nhân bắt đầu điều trị ARV
|
|
|
|
int[] index21 = { 0, 0 };
|
|
string[] indexs21 = { "", "" };
|
|
List<string> Exceptions = Patients.Where(p => p.HaveArvBefore == 1 && p.Dateofreferral != null).Select(p => p.PatientId).ToList();
|
|
var FistArvs21 = TreatmentInfo.Where( p=>p.TreatmentId == "01").GroupBy(q => q.PatientId).Select(g => g.OrderBy(m => m.TreatmentSdate).First()).ToList().Where(s => s.TreatmentSdate >= BeginDate && s.TreatmentSdate <= EndDate).Select(t => new { t.PatientId, t.Regimenid }).ToList();
|
|
var preindex21result = FistArvs21.Join(Regimens, p => p.Regimenid, q => q.Regimenid, (p, q) => new { p.PatientId, q.Type }).Where(m => !Exceptions.Contains(m.PatientId)).ToList();
|
|
index21[0] = preindex21result.Where(p => p.Type == 1).ToList().Count();
|
|
indexs21[0] = string.Join(",", preindex21result.Where(p => p.Type == 1).Select(p => p.PatientId).ToArray());
|
|
index21[1] = preindex21result.Where(p => p.Type == 2).ToList().Count();
|
|
indexs21[1] = string.Join(",", preindex21result.Where(p => p.Type == 2).Select(p => p.PatientId).ToArray());
|
|
|
|
#endregion
|
|
#region Index 2.2
|
|
//Điều trị lại trong kỳ báo cáo
|
|
int[] index22 = {0,0};
|
|
string[] indexs22 = {"",""};
|
|
var index22preresult = exams.Where(m => m.ExamDate >= BeginDate && m.ExamDate <= EndDate && m.ReTreatment == 1).ToList();
|
|
var index22Retreatment = index22preresult.Join(Patients, e => e.PatientId, p => p.PatientId, (e, p) => new { PatientId = p.PatientId, ExamDate = e.ExamDate, DateofArv = p.DateofArv }).Where(m => m.DateofArv != null && m.ExamDate > m.DateofArv).GroupBy(m => m.PatientId).Select(g => g.OrderByDescending(m => m.ExamDate).First()).ToList();
|
|
var index22result = TreatmentInfo.Where(p => p.TreatmentId == "01").Join(index22Retreatment, p => p.PatientId, q => q.PatientId, (p, q) => new { p.PatientId, p.TreatmentSdate, p.Regimenid, q.ExamDate }).Where(g => g.TreatmentSdate >= g.ExamDate).GroupBy(g => g.PatientId).Select(g => g.OrderBy(q => q.TreatmentSdate).First()).Join(Regimens, p => p.Regimenid, q => q.Regimenid, (p, q) => new { p.PatientId, q.Type }).ToList();
|
|
index22[0] = index22result.Where(p => p.Type == 1).ToList().Count();
|
|
indexs22[0] = string.Join(",", index22result.Where(p => p.Type == 1).Select(p => p.PatientId).ToArray());
|
|
index22[1] = index22result.Where(p => p.Type == 2).ToList().Count();
|
|
indexs22[1] = string.Join(",", index22result.Where(p => p.Type ==2).Select(p => p.PatientId).ToArray());
|
|
|
|
|
|
#endregion
|
|
#region Index 2.3
|
|
// Tính chỉ số thứ 3 - Chuyển tới trong kỳ báo cáo . Lưu ý chỉ ARV
|
|
int[] index23 = {0,0};
|
|
string[] indexs23 = {"", ""};
|
|
var Returns = exams.Where(p => p.ExamDate >= BeginDate && p.ExamDate <= EndDate && p.ReTreatment == 2).Join(Patients, p => p.PatientId, q => q.PatientId, (p, q) => new { p.PatientId, p.ExamDate, q.DateofArv, q.Sex, q.BirthYear }).Where(p => p.DateofArv != null && p.DateofArv < p.ExamDate).Select(p => new { p.PatientId, DateofRegistration =p.ExamDate}).ToList();
|
|
var index23preresult = Patients.Where(p => p.DateofRegistration >= BeginDate && p.DateofRegistration <= EndDate && p.DateofArv != null && p.HaveArvBefore == 1).Select(p => new { p.PatientId, p.DateofRegistration }).ToList();
|
|
index23preresult.AddRange(Returns);
|
|
var index23result = TreatmentInfo.Where(p => p.TreatmentId == "01").Join(index23preresult, p => p.PatientId, q => q.PatientId, (p, q) => new { p.PatientId, p.TreatmentSdate, p.Regimenid, q.DateofRegistration }).Where(g => g.TreatmentSdate >= g.DateofRegistration).GroupBy(g => g.PatientId).Select(g => g.OrderBy(q => q.TreatmentSdate).First()).Join(Regimens, p => p.Regimenid, q => q.Regimenid, (p, q) => new { p.PatientId, q.Type }).ToList();
|
|
|
|
index23[0] = index23result.Where(m=>m.Type ==1).Count();
|
|
indexs23[0] = string.Join(",", index23result.Where(m => m.Type == 1).Select(p => p.PatientId).ToArray());
|
|
index23[1] = index23result.Where(m => m.Type == 2).Count();
|
|
indexs23[1] = string.Join(",", index23result.Where(m => m.Type ==2).Select(p => p.PatientId).ToArray());
|
|
|
|
#endregion
|
|
#region index 2.4
|
|
//Chuyển đi trong kỳ báo cáo
|
|
int[] index24 = {0,0};
|
|
string[] indexs24 = {"", ""};
|
|
var referrals = TreatmentInfo.Where( p => p.TreatmentEdate >= BeginDate && p.TreatmentId=="01" && p.TreatmentEdate <= EndDate && p.ReasonId == "09").ToList();
|
|
var index24result = referrals.Join(Regimens, p => p.Regimenid, q => q.Regimenid, (p, q) => new { p.PatientId, q.Type }).ToList();
|
|
|
|
index24[0] = index24result.Where(p=>p.Type==1).Count();
|
|
indexs24[0] = string.Join(",", index24result.Where(p=>p.Type==1).Select(p => p.PatientId).ToArray());
|
|
index24[1] = index24result.Where(p => p.Type == 2).Count();
|
|
indexs24[1] = string.Join(",", index24result.Where(p => p.Type == 2).Select(p => p.PatientId).ToArray());
|
|
|
|
#endregion
|
|
#region index 2.5
|
|
//Bỏ trị trong kỳ báo cáo
|
|
int[] index25 = {0,0};
|
|
string[] indexs25 = {"", ""};
|
|
var lostfollows = TreatmentInfo.Where(p => p.TreatmentEdate >= BeginDate && p.TreatmentId=="01" && p.TreatmentEdate <= EndDate && p.ReasonId == "10").ToList();
|
|
var index25result = lostfollows.Join(Regimens, p => p.Regimenid, q => q.Regimenid, (p, q) => new { p.PatientId, q.Type }).ToList();
|
|
|
|
index25[0] = index25result.Where(p=>p.Type==1).Count();
|
|
indexs25[0] = string.Join(",", index25result.Where(p=>p.Type==1).Select(p => p.PatientId).ToArray());
|
|
index25[1] = index25result.Where(p => p.Type == 2).Count();
|
|
indexs25[1] = string.Join(",", index25result.Where(p => p.Type == 2).Select(p => p.PatientId).ToArray());
|
|
|
|
|
|
#endregion
|
|
#region index 2.6
|
|
//Tử vong trong kỳ báo cáo
|
|
int[] index26 = { 0, 0 };
|
|
string[] indexs26 = { "", "" };
|
|
var deaths = TreatmentInfo.Where(p => p.TreatmentEdate >= BeginDate && p.TreatmentId=="01" && p.TreatmentEdate <= EndDate && p.ReasonId == "11").ToList();
|
|
var index26result = deaths.Join(Regimens, p => p.Regimenid, q => q.Regimenid, (p, q) => new { p.PatientId, q.Type }).ToList();
|
|
index26[0] = index26result.Where(p => p.Type == 1).Count();
|
|
indexs26[0] = string.Join(",", index26result.Where(p => p.Type == 1).Select(p => p.PatientId).ToArray());
|
|
index26[1] = index26result.Where(p => p.Type == 2).Count();
|
|
indexs26[1] = string.Join(",", index26result.Where(p => p.Type == 2).Select(p => p.PatientId).ToArray());
|
|
|
|
|
|
#endregion
|
|
#region index 2.7
|
|
// Đang quản lý
|
|
int[] index27 = { 0, 0 };
|
|
string[] indexs27 = { "", "" };
|
|
var LastArvs = TreatmentInfo.Where(p => p.TreatmentSdate <= EndDate && p.TreatmentId == "01").GroupBy(q => q.PatientId).Select(g => g.OrderBy(m => m.TreatmentSdate).Last()).ToList().Where(s => s.TreatmentEdate == null || s.TreatmentEdate > EndDate).Select(t => new{t.PatientId, t.Regimenid}).ToList();
|
|
var index27result = LastArvs.Join (Regimens, p=>p.Regimenid, q=>q.Regimenid, (p,q)=>new{ p.PatientId,q.Type}).ToList();
|
|
index27[0] = index27result.Where(p => p.Type == 1).Count();
|
|
indexs27[0] = string.Join(",", index27result.Where(p => p.Type == 1).Select(p => p.PatientId).ToArray());
|
|
index27[1] = index27result.Where(p => p.Type == 2).Count();
|
|
indexs27[1] = string.Join(",", index27result.Where(p => p.Type == 2).Select(p => p.PatientId).ToArray());
|
|
|
|
#endregion
|
|
#region index 3
|
|
|
|
// Đang nhận thuốc ARV tại các trạm y tế xã phường tính đến cuối kỳ báo cáo
|
|
|
|
int[] index3 = { 0, 0 };
|
|
string[] indexs3 = { "", "" };
|
|
var index3Treatment = TreatmentInfo.Where(q => q.TreatmentId == "01").Join(Regimens, p=>p.Regimenid, q=>q.Regimenid, (p,q)=>new{p.PatientId, q.Type,p.TreatmentSdate}).ToList();
|
|
var index3Outpatient = exams.Where(p => p.ExamDate <= EndDate).GroupBy(p => p.PatientId).Select(g => g.OrderBy(p => p.ExamDate).Last()).Where(p => p.OutPatientTreatment == 1).ToList();
|
|
var index3result = index3Outpatient.Join(index3Treatment, p => p.PatientId, q => q.PatientId, (p, q) => new { p.PatientId, p.ExamDate, q.TreatmentSdate, q.Type }).Where(p => p.ExamDate >= p.TreatmentSdate).GroupBy(p => p.PatientId).Select(p => p.OrderBy(q => q.TreatmentSdate).Last()).Select(p => new { p.PatientId, p.Type }).ToList();
|
|
|
|
index3[0] = index3result.Where(p => p.Type == 1).Count();
|
|
indexs3[0] = string.Join(",", index3result.Where(p => p.Type == 1).Select(p => p.PatientId).ToArray());
|
|
index3[1] = index3result.Where(p => p.Type == 2).Count();
|
|
indexs3[1] = string.Join(",", index3result.Where(p => p.Type == 2).Select(p => p.PatientId).ToArray());
|
|
|
|
|
|
#endregion
|
|
|
|
#region fill
|
|
|
|
_Rep.Cells[14, 8].Value = index1[0]; _Tracking.Cells[14, 9].Value = indexs1[0];
|
|
_Rep.Cells[14, 9].Value = index1[1]; _Tracking.Cells[14, 10].Value = indexs1[1];
|
|
|
|
_Rep.Cells[16, 8].Value = index21[0]; _Tracking.Cells[16, 8].Value = indexs21[0];
|
|
_Rep.Cells[16, 9].Value = index21[1]; _Tracking.Cells[16, 9].Value = indexs21[1];
|
|
|
|
_Rep.Cells[17, 8].Value = index22[0]; _Tracking.Cells[17, 8].Value = indexs22[0];
|
|
_Rep.Cells[17, 9].Value = index22[1]; _Tracking.Cells[17, 9].Value = indexs22[1];
|
|
|
|
_Rep.Cells[18, 8].Value = index23[0]; _Tracking.Cells[18, 8].Value = indexs23[0];
|
|
_Rep.Cells[18, 9].Value = index23[1]; _Tracking.Cells[18, 9].Value = indexs23[1];
|
|
|
|
_Rep.Cells[19, 8].Value = index24[0]; _Tracking.Cells[19, 8].Value = indexs24[0];
|
|
_Rep.Cells[19, 9].Value = index24[1]; _Tracking.Cells[19, 9].Value = indexs24[1];
|
|
|
|
_Rep.Cells[20, 8].Value = index25[0]; _Tracking.Cells[20, 8].Value = indexs25[0];
|
|
_Rep.Cells[20, 9].Value = index25[1]; _Tracking.Cells[20, 9].Value = indexs25[1];
|
|
|
|
_Rep.Cells[21, 8].Value = index26[0]; _Tracking.Cells[21, 8].Value = indexs26[0];
|
|
_Rep.Cells[21, 9].Value = index26[1]; _Tracking.Cells[21, 9].Value = indexs26[1];
|
|
|
|
_Rep.Cells[22, 8].Value = index27[0]; _Tracking.Cells[22, 8].Value = indexs27[0];
|
|
_Rep.Cells[22, 9].Value = index27[1]; _Tracking.Cells[22, 9].Value = indexs27[1];
|
|
|
|
_Rep.Cells[23, 8].Value = index3[0]; _Tracking.Cells[23, 8].Value = indexs3[0];
|
|
_Rep.Cells[23, 9].Value = index3[1]; _Tracking.Cells[23, 9].Value = indexs3[1];
|
|
|
|
#endregion
|
|
|
|
}
|
|
private void R6()
|
|
{
|
|
|
|
}
|
|
|
|
}
|
|
}
|