254 lines
15 KiB
C#
254 lines
15 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 = meta.TblPatient.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 = meta.TblPatient.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.TreatmentEdate).First()).Where(p => p.TreatmentEdate >= BeginDate && p.TreatmentEdate <= 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.OrderByDescending(m => m.TreatmentSdate).First()).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 = LastArvs2.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;
|
|
string indexs22 = "";
|
|
var index22preresult = meta.TblExaminationInfo.Where(m => m.ExamDate >= BeginDate && m.ExamDate <= EndDate && m.ReTreatment == 1).ToList();
|
|
var index22result = index22preresult.Join(meta.TblPatient, 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).ToList();
|
|
index22= index22result.Count();
|
|
indexs22 = string.Join(",", index22result.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;
|
|
string indexs23 = "";
|
|
var index23result = meta.TblPatient.Where(p => p.Dateofreferral != null && p.Dateofreferral >= BeginDate && p.Dateofreferral <= EndDate && p.DateofArv != null && p.HaveArvBefore == 1).Select(p => new { PatientId = p.PatientId }).ToList();
|
|
//Nam < 15 tuổi
|
|
index23 = index23result.Count();
|
|
indexs23 = string.Join(",", index23result.Select(p => p.PatientId).ToArray());
|
|
|
|
#endregion
|
|
#region index 2.4
|
|
//Chuyển đi trong kỳ báo cáo
|
|
int index24 = 0;
|
|
string indexs24 = "";
|
|
var referrals = meta.TblReferralsTo.Where(p => p.EndDate >= BeginDate && p.EndDate <= EndDate && p.TypeId == "09").ToList();
|
|
var index24result = referrals.Join(meta.TblPatient, e => e.PatientId, p => p.PatientId, (e, p) => new { PatientId = p.PatientId, DateofArv = p.DateofArv, EndDate = e.EndDate }).Where(m => m.DateofArv != null && m.EndDate >= m.DateofArv).ToList();
|
|
index24 = index24result.Count();
|
|
indexs24 = string.Join(",", index24result.Select(p => p.PatientId).ToArray());
|
|
|
|
#endregion
|
|
#region index 2.5
|
|
//Bỏ trị trong kỳ báo cáo
|
|
int index25 = 0;
|
|
string indexs25 = "";
|
|
var lossfollows = meta.TblReferralsTo.Where(p => p.EndDate >= BeginDate && p.EndDate <= EndDate && p.TypeId == "10").ToList();
|
|
var index25result = lossfollows.Join(meta.TblPatient, e => e.PatientId, p => p.PatientId, (e, p) => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear, DateofArv = p.DateofArv, EndDate = e.EndDate }).Where(m => m.DateofArv != null || m.EndDate > m.DateofArv).ToList();
|
|
|
|
//Nam < 15 tuổi
|
|
index25 = index25result.Count();
|
|
indexs25 = string.Join(",", index25result.Select(p => p.PatientId).ToArray());
|
|
|
|
#endregion
|
|
#region index 2.6
|
|
//Tử vong trong kỳ báo cáo
|
|
int index26=0;
|
|
string indexs26="";
|
|
var deaths = meta.TblReferralsTo.Where(p => p.EndDate >= BeginDate && p.EndDate <= EndDate && p.TypeId == "11").ToList();
|
|
var index26result = deaths.Join(meta.TblPatient, e => e.PatientId, p => p.PatientId, (e, p) => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear, DateofArv = p.DateofArv, EndDate = e.EndDate }).Where(m => m.DateofArv != null || m.EndDate > m.DateofArv).ToList();
|
|
|
|
|
|
index26 = index26result.Where(m => m.Sex == 1).Count();
|
|
indexs26 = string.Join(",", index26result.Select(p => p.PatientId).ToArray());
|
|
|
|
#endregion
|
|
#region index 2.7
|
|
// Đang quản lý
|
|
int index27=0;
|
|
string indexs27 = "";
|
|
var LastArvs = TreatmentInfo.Where(p => p.TreatmentSdate < EndDate && p.TreatmentId == "01").GroupBy(q => q.PatientId).Select(g => g.OrderByDescending(m => m.TreatmentSdate).First()).ToList().Where(s => s.TreatmentEdate == null || s.TreatmentEdate > EndDate).Select(t => t.PatientId).ToList();
|
|
|
|
var index27result = Patients.Where(m => m.DateofArv != null && m.DateofArv <= EndDate).Where(p => LastArvs.Contains(p.PatientId)).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).ToList();
|
|
//Nam < 15 tuổi
|
|
index27 = index27result.Count();
|
|
indexs27 = string.Join(",", index27result.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;
|
|
string indexs3 = "";
|
|
var index3Treatment = TreatmentInfo.Where(q => q.TreatmentSdate <= EndDate).Where(q => q.TreatmentId == "01").GroupBy(q => q.PatientId).Select(g => g.OrderBy(q => q.TreatmentSdate).Last()).Where(q => q.TreatmentEdate != null || q.TreatmentEdate > EndDate).ToList();
|
|
var index3Outpatient = (from q in index3Treatment join p in exams on q.PatientId equals p.PatientId where p.OutPatientTreatment == 1 select q).ToList();
|
|
var index3result = (from q in index3Outpatient join g in Patients on q.PatientId equals g.PatientId select new { q.PatientId, g.Sex, Age = (EndDate.Year - g.BirthYear) }).ToList();
|
|
|
|
index3 = index3result.Count();
|
|
indexs3 = string.Join(",", index3result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
|
|
|
|
#endregion
|
|
|
|
#region fill
|
|
|
|
_Rep.Cells[14, 9].Value = index1[0]; _Tracking.Cells[14, 9].Value = indexs1[0];
|
|
_Rep.Cells[14, 10].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, 10].Value = index22; _Tracking.Cells[17, 10].Value = indexs22;
|
|
_Rep.Cells[18, 10].Value = index23; _Tracking.Cells[18, 10].Value = indexs23;
|
|
_Rep.Cells[19, 10].Value = index24; _Tracking.Cells[19, 10].Value = indexs24;
|
|
_Rep.Cells[20, 10].Value = index25; _Tracking.Cells[20, 10].Value = indexs25;
|
|
_Rep.Cells[21, 10].Value = index26; _Tracking.Cells[21, 10].Value = indexs26;
|
|
_Rep.Cells[22, 10].Value = index27; _Tracking.Cells[22, 10].Value = indexs27;
|
|
_Rep.Cells[23, 10].Value = index3; _Tracking.Cells[23, 10].Value = indexs3;
|
|
#endregion
|
|
|
|
}
|
|
private void R6()
|
|
{
|
|
|
|
}
|
|
|
|
}
|
|
}
|