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

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