Files
csharpcode/patientman/PatientMan/Service References/Actions/clsC03Quartly.cs
2025-08-02 05:20:17 +07:00

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()
{
}
}
}