Upload to server

uploading
This commit is contained in:
2025-08-02 05:20:17 +07:00
commit a5eccbd452
984 changed files with 3031800 additions and 0 deletions

View File

@@ -0,0 +1,102 @@
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 clsC03Annual
{
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"];
R2(); R3();
}
private void R2()
{
var TreatmentInfo = new EntityCollection<TblTreatmentInfoEntity>();
LinqMetaData meta = new LinqMetaData(adapter);
#region index 1
//Chỉ số 3 - Số bệnh nhân bắt đầu điều trị Lao trong kỳ báo cáo
//Lọc tất cả các bản ghi trong bảng tblTreatmentInfo có kiểu điều trị là Lao (02) và có ngày điều trị trong khoảng báo cáo, nhóm lại lấy bản ghi duy nhất
int index1 = 0;
string indexs1 = "";
var index1prevresult = (from tr in TreatmentInfo where (tr.TreatmentId == "02" && tr.TreatmentSdate >= BeginDate && tr.TreatmentSdate <= EndDate) group tr by tr.PatientId into g select g.Last()).ToList();
var index1result = index1prevresult.Join(meta.TblPatient,
t => t.PatientId,
p => p.PatientId,
(t, p)
=> new { PatientId = p.PatientId, DateOfArv = p.DateofArv, sDate = t.TreatmentSdate }).Where(p => p.DateOfArv != null && p.DateOfArv <= p.sDate).ToList();
index1 = index1result.Count();
indexs1 = string.Join(",", index1result.Select(p => p.PatientId).ToArray());
#endregion
#region index 2
//Chỉ số 3 - Số bệnh nhân bắt đầu điều trị Lao trong kỳ báo cáo
//Lọc tất cả các bản ghi trong bảng tblTreatmentInfo có kiểu điều trị là Lao (02) và có ngày điều trị trong khoảng báo cáo, nhóm lại lấy bản ghi duy nhất
int index2 = 0;
string indexs2 = "";
var index2prevresult = (from tr in TreatmentInfo where (tr.TreatmentId == "02") group tr by tr.PatientId into g select g.First()).ToList();
var index2result = index2prevresult.Join(meta.TblPatient,
t => t.PatientId,
p => p.PatientId,
(t, p)
=> new { PatientId = p.PatientId, DateOfArv = p.DateofArv, sDate = t.TreatmentSdate }).Where(p => p.DateOfArv != null && p.DateOfArv > p.sDate).ToList();
index2 = index2result.Count();
indexs2 = string.Join(",", index1result.Select(p => p.PatientId).ToArray());
#endregion
#region filling
_Rep.Cells[5, 9].Value = index1; _Tracking.Cells[5, 9].Value = indexs1;
_Rep.Cells[6, 9].Value = index2; _Tracking.Cells[6, 9].Value = indexs2;
#endregion
}
private void R3()
{
var TestInfo = new EntityCollection<TblPreClinicsInfoEntity>();
LinqMetaData meta = new LinqMetaData(adapter);
#region index 1
//Chỉ số 1 Số bệnh nhân điều trị ARV được làm xét nghiệm tải lượng HIV để khẳng định thất bại điều trị
int index1 = 0;
string indexs1 = "";
int index1a = 0;
string indexs1a = "";
var index1prevresult = (from tr in TestInfo where (tr.Testid == "02" && tr.TestDate >= BeginDate && tr.TestDate <= EndDate) select tr).ToList();
var index1result = index1prevresult.Join(meta.TblPatient,
t => t.PatientId,
p => p.PatientId,
(t, p)
=> new { p.PatientId, p.DateofArv, t.TestDate, t.QualityResult,t.QuantityResult }).Where(p => p.DateofArv != null && p.DateofArv <= p.TestDate).ToList();
index1 = index1result.Count();
indexs1 = string.Join(",", index1result.Select(p => p.PatientId).ToArray());
index1a = index1result.Where(p => p.QuantityResult < 1000).Count();
indexs1a = string.Join(",", index1result.Where(p => p.QuantityResult < 1000).Select(p => p.PatientId).ToArray());
#endregion
#region index 2
#endregion
#region filling
_Rep.Cells[12, 9].Value = index1; _Tracking.Cells[12, 9].Value = indexs1;
_Rep.Cells[13, 9].Value = index1a; _Tracking.Cells[13, 9].Value = indexs1a;
#endregion
}
}
}

View File

@@ -0,0 +1,286 @@
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()
{
}
}
}

View File

@@ -0,0 +1,673 @@
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 clsD28
{
public DevExpress.XtraSpreadsheet.SpreadsheetControl spreed;
public DateTime BeginDate;
public DateTime EndDate;
private DevExpress.Spreadsheet.Worksheet _D28, _R6, _R7, _R8, _R9, _Common, _Tracking;
public DataAccessAdapter adapter = new DataAccessAdapter(SettingInfo.Constr);
public void Calculate()
{
_D28 = this.spreed.Document.Worksheets["D28"];
_Tracking = this.spreed.Document.Worksheets["Tracking"];
_R6 = this.spreed.Document.Worksheets["R6"];
_R7 = this.spreed.Document.Worksheets["R7"];
_R8 = this.spreed.Document.Worksheets["R8"];
_R9 = this.spreed.Document.Worksheets["R9"];
_Common = this.spreed.Document.Worksheets["Common"];
_Common.Cells[1, 1].Value = BeginDate;
_Common.Cells[1, 2].Value = EndDate;
R6();
R7();
R8();
R9();
_D28.Cells[6, 1].Value = "Từ ngày " + BeginDate.ToShortDateString() + " Đến ngày " + EndDate.ToShortDateString();
_D28.Cells[15, 1].Value = "Từ ngày " + BeginDate.ToShortDateString() + " Đến ngày " + EndDate.ToShortDateString();
_D28.Cells[30, 1].Value = "Từ ngày " + BeginDate.ToShortDateString() + " Đến ngày " + EndDate.ToShortDateString();
_D28.Cells[45, 1].Value = "Từ ngày " + BeginDate.ToShortDateString() + " Đến ngày " + EndDate.ToShortDateString();
}
#region R6
private void R6()
{
const int age = 15;
var ws = _R6;
LinqMetaData meta = new LinqMetaData(adapter);
EntityCollection<TblExaminationInfoEntity> exams = new EntityCollection<TblExaminationInfoEntity>();
EntityCollection<TblPatientEntity> Patients = new EntityCollection<TblPatientEntity>();
adapter.FetchEntityCollection(exams, null);
adapter.FetchEntityCollection(Patients, null);
#region index1
// Mới đăng ký trong kỳ báo cáo
int[] index1 = { 0, 0, 0, 0, };
string[] indexs1 = { "", "", "", "" };
var index1result = Patients.Where(m => m.DateofRegistration >= BeginDate && m.DateofRegistration <= EndDate && m.HaveArvBefore != 1).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).ToList();
//Nam < 15 tuổi
index1[0] = index1result.Where(m => m.Age < age).Where(m => m.Sex == 1).Count();
indexs1[0] = string.Join(",", index1result.Where(m => m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index1[1] = index1result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Count();
indexs1[1] = string.Join(",", index1result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 15 tuổi
index1[2] = index1result.Where(m => m.Age < age).Where(m => m.Sex == 2).Count();
indexs1[2] = string.Join(",", index1result.Where(m => m.Age < age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index1[3] = index1result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Count();
indexs1[3] = string.Join(",", index1result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
_D28.Cells[10, 3].Value = index1[0]; _D28.Cells[10, 4].Value = index1[1]; _D28.Cells[10, 5].Value = index1[2]; _D28.Cells[10, 6].Value = index1[3];
_Tracking.Cells[10, 3].Value = indexs1[0]; _Tracking.Cells[10, 4].Value = indexs1[1]; _Tracking.Cells[10, 5].Value = indexs1[2]; _Tracking.Cells[10, 6].Value = indexs1[3];
#endregion
#region index2
// Đang quản lý - Trước ARV
int[] index2 = { 0, 0, 0, 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 => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).ToList();
//Nam < 15 tuổi
index2[0] = index2result.Where(m => m.Age < age).Where(m => m.Sex == 1).Count();
indexs2[0] = string.Join(",", index2result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index2[1] = index2result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Count();
indexs2[1] = string.Join(",", index2result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 15 tuổi
index2[2] = index2result.Where(m => m.Age < age).Where(m => m.Sex == 2).Count();
indexs2[2] = string.Join(",", index2result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index2[3] = index2result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Count();
indexs2[3] = string.Join(",", index2result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
_D28.Cells[11, 3].Value = index2[0]; _D28.Cells[11, 4].Value = index2[1]; _D28.Cells[11, 5].Value = index2[2]; _D28.Cells[11, 6].Value = index2[3];
_Tracking.Cells[11, 3].Value = indexs1[0]; _Tracking.Cells[11, 4].Value = indexs1[1]; _Tracking.Cells[11, 5].Value = indexs1[2]; _Tracking.Cells[11, 6].Value = indexs1[3];
#endregion
}
#endregion
#region R7
private void R7()
{
/*BIỂU 7. QUẢN LÝ ĐIỀU TRỊ ARV TẠI CƠ SỞ ĐIỀU TRỊ HIV/AIDS*/
var ws = _R7;
const int age = 15;
var Patients = new EntityCollection<TblPatientEntity>();
var Referrals = new EntityCollection<TblReferralsToEntity>();
var Treatments = new EntityCollection<TblTreatmentInfoEntity>();
var exams = new EntityCollection<TblExaminationInfoEntity>();
LinqMetaData meta = new LinqMetaData(adapter);
//var BeginDate = (DateTime)this.BeginDate.EditValue;
//var EndDate = (DateTime)this.EndDate.EditValue;
adapter.FetchEntityCollection(Patients, null);
adapter.FetchEntityCollection(Referrals, null);
adapter.FetchEntityCollection(Treatments, null);
adapter.FetchEntityCollection(exams, null);
#region index1
/*Tính chỉ số thứ nhất - Bắt đầu được điều trị ARV tại cơ sở trong kỳ báo cáo
Lọc những người có ngày Arv != null và nằm trong khoảng BeginDate và EndDate
Loại bỏ những người từ nơi khác chuyển đến
*/
int[] index1 = { 0, 0, 0, 0 };
string[] indexs1 = { "", "", "", "" };
var index1result = Patients.Where(m => m.DateofArv != null && m.DateofArv >= BeginDate && m.DateofArv <= EndDate && m.HaveArvBefore != 1).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).ToList();
//Nam < 15 tuổi
index1[0] = index1result.Where(m => m.Age < age).Where(m => m.Sex == 1).Count();
indexs1[0] = string.Join(",", index1result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index1[1] = index1result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Count();
indexs1[1] = string.Join(",", index1result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 15 tuổi
index1[2] = index1result.Where(m => m.Age < age).Where(m => m.Sex == 2).Count();
indexs1[2] = string.Join(",", index1result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index1[3] = index1result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Count();
indexs1[3] = string.Join(",", index1result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
_D28.Cells[19, 3].Value = index1[0]; _D28.Cells[19, 4].Value = index1[1]; _D28.Cells[19, 5].Value = index1[2]; _D28.Cells[19, 6].Value = index1[3];
_Tracking.Cells[19, 3].Value = indexs1[0]; _Tracking.Cells[19, 4].Value = indexs1[1]; _Tracking.Cells[19, 5].Value = indexs1[2]; _Tracking.Cells[19, 6].Value = indexs1[3];
#endregion
#region Index2
//Điều trị lại trong kỳ báo cáo
int[] index2 = { 0, 0, 0, 0 };
string[] indexs2 = { "", "", "", "" };
var index2preresult = exams.Where(m => m.ExamDate >= BeginDate && m.ExamDate <= EndDate && m.ReTreatment == 1).ToList();
var index2result = index2preresult.Join(Patients, e => e.PatientId, p => p.PatientId, (e, p) => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear, ExamDate = e.ExamDate, DateofArv = p.DateofArv }).Where(m => m.DateofArv != null && m.ExamDate > m.DateofArv).ToList();
//Nam < 15 tuổi
index2[0] = index2result.Where(m => m.Age < age).Where(m => m.Sex == 1).Count();
indexs2[0] = string.Join(",", index2result.Where(m => m.Age < age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index2[1] = index2result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Count();
indexs2[1] = string.Join(",", index2result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 15 tuổi
index2[2] = index2result.Where(m => m.Age < age).Where(m => m.Sex == 2).Count();
indexs2[2] = string.Join(",", index2result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index2[3] = index2result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Count();
indexs2[3] = string.Join(",", index2result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
_D28.Cells[20, 3].Value = index2[0]; _D28.Cells[20, 4].Value = index2[1]; _D28.Cells[20, 5].Value = index2[2]; _D28.Cells[20, 6].Value = index2[3];
_Tracking.Cells[20, 3].Value = indexs2[0]; _Tracking.Cells[20, 4].Value = indexs2[1]; _Tracking.Cells[20, 5].Value = indexs2[2]; _Tracking.Cells[20, 6].Value = indexs2[3];
#endregion
#region Index 3
// Tính chỉ số thứ 3 - Chuyển tới trong kỳ báo cáo . Lưu ý chỉ ARV
int[] index3 = { 0, 0, 0, 0, 0, 0 };
string[] indexs3 = { "", "", "", "", "", "" };
var index3result = Patients.Where(p => p.Dateofreferral != null && p.Dateofreferral >= BeginDate && p.Dateofreferral <= EndDate && p.DateofArv != null && p.HaveArvBefore == 1).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).ToList();
//Nam < 15 tuổi
index3[0] = index3result.Where(m => m.Age < age).Where(m => m.Sex == 1).Count();
indexs3[0] = string.Join(",", index3result.Where(m => m.Age < age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index3[2] = index3result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Count();
indexs3[2] = string.Join(",", index3result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index3[3] = index3result.Where(m => m.Age < age).Where(m => m.Sex == 2).Count();
indexs3[3] = string.Join(",", index3result.Where(m => m.Age < age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index3[3] = index3result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Count();
indexs3[3] = string.Join(",", index3result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
_D28.Cells[21, 3].Value = index3[0]; _D28.Cells[21, 4].Value = index3[1]; _D28.Cells[21, 5].Value = index3[2]; _D28.Cells[21, 6].Value = index3[3];
_Tracking.Cells[21, 3].Value = indexs3[0]; _Tracking.Cells[21, 4].Value = indexs3[1]; _Tracking.Cells[21, 5].Value = indexs3[2]; _Tracking.Cells[21, 5].Value = indexs3[3];
#endregion
#region index4
//Chuyển đi trong kỳ báo cáo
int[] index4 = { 0, 0, 0, 0, };
string[] indexs4 = { "", "", "", "", };
var referrals = Treatments.Where(p => p.TreatmentEdate >= BeginDate && p.TreatmentEdate <= EndDate && p.TreatmentId=="01" && p.ReasonId =="09").ToList();
var index4result = referrals.Join(Patients, 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.TreatmentEdate }).ToList();
//Nam < 15 tuổi
index4[0] = index4result.Where(m => m.Age < age).Where(m => m.Sex == 1).Count();
indexs4[0] = string.Join(",", index4result.Where(m => m.Age < age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index4[1] = index4result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Count();
indexs4[1] = string.Join(",", index4result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index4[2] = index4result.Where(m => m.Age < age).Where(m => m.Sex == 2).Count();
indexs4[2] = string.Join(",", index4result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index4[3] = index4result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Count();
indexs4[3] = string.Join(",", index4result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
_D28.Cells[22, 3].Value = index4[0]; _D28.Cells[22, 4].Value = index4[1]; _D28.Cells[22, 5].Value = index4[2]; _D28.Cells[22, 6].Value = index4[3];
_Tracking.Cells[22, 3].Value = indexs4[0]; _Tracking.Cells[22, 4].Value = indexs4[1]; _Tracking.Cells[22, 5].Value = indexs4[2]; _Tracking.Cells[22, 5].Value = indexs4[3];
#endregion
#region index5
//Tử vong trong kỳ báo cáo
int[] index5 = { 0, 0, 0, 0 };
string[] indexs5 = { "", "", "", "" };
var deaths = Treatments.Where(p => p.TreatmentEdate >= BeginDate && p.TreatmentEdate <= EndDate && p.TreatmentId == "01" && p.ReasonId == "11").ToList();
var index5result = deaths.Join(Patients, 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.TreatmentEdate }).Where(m => m.DateofArv != null || m.EndDate > m.DateofArv).ToList();
//Nam < 15 tuổi
index5[0] = index5result.Where(m => m.Age < age).Where(m => m.Sex == 1).Count();
indexs5[0] = string.Join(",", index5result.Where(m => m.Age < age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index5[1] = index5result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Count();
indexs5[1] = string.Join(",", index5result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index5[2] = index5result.Where(m => m.Age < age).Where(m => m.Sex == 2).Count();
indexs5[2] = string.Join(",", index5result.Where(m => m.Age < age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index5[3] = index5result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Count();
indexs5[3] = string.Join(",", index5result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
_D28.Cells[23, 3].Value = index5[0]; _D28.Cells[23, 4].Value = index5[1]; _D28.Cells[23, 5].Value = index5[2]; _D28.Cells[23, 6].Value = index5[3];
_Tracking.Cells[23, 3].Value = indexs5[0]; _Tracking.Cells[23, 4].Value = indexs5[1]; _Tracking.Cells[23, 5].Value = indexs5[2]; _Tracking.Cells[23, 6].Value = indexs5[3];
#endregion
#region index6
//Bỏ trị trong kỳ báo cáo
int[] index6 = { 0, 0, 0, 0 };
string[] indexs6 = { "", "", "", "" };
var lossfollows = Treatments.Where(p => p.TreatmentEdate >= BeginDate && p.TreatmentEdate <= EndDate && p.TreatmentId == "01" && p.ReasonId == "10").ToList();
var index6result = 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.TreatmentEdate }).Where(m => m.DateofArv != null || m.EndDate > m.DateofArv).ToList();
//Nam < 15 tuổi
index6[0] = index6result.Where(m => m.Age < age).Where(m => m.Sex == 1).Count();
indexs6[0] = string.Join(",", index6result.Where(m => m.Age < age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index6[1] = index6result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Count();
indexs6[1] = string.Join(",", index6result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 15 tuổi
index6[2] = index6result.Where(m => m.Age < age).Where(m => m.Sex == 2).Count();
indexs6[2] = string.Join(",", index6result.Where(m => m.Age < age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index6[3] = index6result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Count();
indexs6[3] = string.Join(",", index6result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
_D28.Cells[24, 3].Value = index6[0]; _D28.Cells[24, 4].Value = index6[1]; _D28.Cells[24, 5].Value = index6[2]; _D28.Cells[24, 6].Value = index6[3];
_Tracking.Cells[24, 3].Value = indexs6[0]; _Tracking.Cells[24, 4].Value = indexs6[1]; _Tracking.Cells[24, 5].Value = indexs6[2]; _Tracking.Cells[24, 6].Value = indexs6[3];
#endregion
#region index7
// Đang quản lý
int[] index7 = { 0, 0, 0, 0 };
string[] indexs7 = { "", "", "", "" };
var LastArvs = Treatments.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 index7result = 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
index7[0] = index7result.Where(m => m.Age < age).Where(m => m.Sex == 1).Count();
indexs7[0] = string.Join(",", index7result.Where(m => m.Age < age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index7[1] = index7result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Count();
indexs7[1] = string.Join(",", index7result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index7[2] = index7result.Where(m => m.Age < age).Where(m => m.Sex == 2).Count();
indexs7[2] = string.Join(",", index7result.Where(m => m.Age < age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index7[3] = index7result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Count();
indexs7[3] = string.Join(",", index7result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
_D28.Cells[25, 3].Value = index7[0]; _D28.Cells[25, 4].Value = index7[1]; _D28.Cells[25, 5].Value = index7[2]; _D28.Cells[25, 6].Value = index7[3];
_Tracking.Cells[25, 3].Value = indexs7[0]; _Tracking.Cells[25, 4].Value = indexs7[1]; _Tracking.Cells[25, 5].Value = indexs7[2]; _Tracking.Cells[25, 6].Value = indexs7[3];
#endregion
#region index8
// Đ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[] index8 = { 0, 0, 0, 0 };
string[] indexs8 = { "", "", "", "" };
var index8Treatment = Treatments.Where(q => q.TreatmentId == "01").ToList();
var index8Outpatient = 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 index8result = index8Outpatient.Join(index8Treatment, p=>p.PatientId, q=>q.PatientId, (p,q)=>new{p.PatientId,p.ExamDate, q.TreatmentSdate}).Where(p=>p.ExamDate > p.TreatmentSdate).Join(Patients, p=>p.PatientId , q=>q.PatientId, (p,q)=>new{ q.PatientId,q.Sex, Age = (EndDate.Year - q.BirthYear) }).ToList();
//Nam < 15 tuổi
index8[0] = index8result.Where(m => m.Age < age).Where(m => m.Sex == 1).Count();
indexs8[0] = string.Join(",", index8result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index8[1] = index8result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Count();
indexs8[1] = string.Join(",", index8result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 15 tuổi
index8[2] = index8result.Where(m => m.Age < age).Where(m => m.Sex == 2).Count();
indexs8[2] = string.Join(",", index8result.Where(m => m.Age < age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index8[3] = index8result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Count();
indexs8[3] = string.Join(",", index8result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
_D28.Cells[26, 3].Value = index8[0]; _D28.Cells[26, 4].Value = index8[1]; _D28.Cells[26, 5].Value = index8[2]; _D28.Cells[26, 6].Value = index8[3];
_Tracking.Cells[26, 3].Value = indexs8[0]; _Tracking.Cells[26, 4].Value = indexs8[1]; _Tracking.Cells[26, 5].Value = indexs8[2]; _Tracking.Cells[26, 6].Value = indexs8[3];
#endregion
}
#endregion
#region R8
private void R8()
{
var ws = _R8;
const int age = 15;
var tmpPatients = new EntityCollection<TblPatientEntity>();
var Referrals = new EntityCollection<TblReferralsToEntity>();
var Treatments = new EntityCollection<TblTreatmentInfoEntity>();
var exams = new EntityCollection<TblExaminationInfoEntity>();
//var BeginDate = (DateTime)this.BeginDate.EditValue;
//var EndDate = (DateTime)this.EndDate.EditValue;
/*lùi ngày bắt đầu lại 12 tháng để vét được các bệnh nhân bắt đầu điều trị từ 12 tháng trước */
/*
ngày kết thúc là ngày bắt đầu ở trên + 12 tháng trong trường hợp khoảng báo cáo rộng hơn 1 năm - chỉ lấy khoảng báo cáo nhỏ hơn 1 năm
trong trường hợp khoảng báo cáo nhỏ hơn 1 năm thì ta lấy ngày kết thúc bằng này EndDate -12 tháng
*/
EntityCollection<TblPatientEntity> Patients = new EntityCollection<TblPatientEntity>();
EntityCollection<TblTreatmentInfoEntity> TreatmentInfo = new EntityCollection<TblTreatmentInfoEntity>();
adapter.FetchEntityCollection(Patients, null);
adapter.FetchEntityCollection(TreatmentInfo, null);
var Arvs = TreatmentInfo.Where(p => p.TreatmentSdate < EndDate && p.TreatmentSdate >= BeginDate.AddMonths(-12) && p.TreatmentId == "01").ToList();
var SelectedPatients = Arvs.Join(Patients.Where(p => p.DateofArv != null && p.DateofArv >= BeginDate.AddMonths(-12) && p.DateofArv <= EndDate.AddMonths(-12)), a => a.PatientId, p => p.PatientId, (a, p) => new { p.PatientId, p.Dateofreferral, p.HaveArvBefore, p.Sex, EndPointArv = p.DateofArv.Value.AddMonths(12), Age = p.DateofArv.Value.AddMonths(12).Year - p.BirthYear, a.TreatmentSdate, a.TreatmentEdate, a.ReasonId }).Where(p => p.TreatmentSdate <= p.EndPointArv).ToList();
#region index1
/* Tính chỉ số thứ nhất - Bắt đầu được điều trị ARV tại cơ sở theo nhóm - lọc đơn thuần từ dataset Patients và loại đi những người đã điều trị Arv ở nơi khác */
int[] index1 = { 0, 0, 0, 0 };
string[] indexs1 = { "", "", "", "" };
var index1result = SelectedPatients.Where(p => p.HaveArvBefore != 1).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, p.Age }).GroupBy(p=>p.PatientId).Select(g=>g.First()).ToList();
//Nam < 15 tuổi
index1[0] = index1result.Where(m => m.Age < age).Where(m => m.Sex == 1).Count();
indexs1[0] = string.Join(",", index1result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index1[1] = index1result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Count();
indexs1[1] = string.Join(",", index1result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 15 tuổi
index1[2] = index1result.Where(m => m.Age < age).Where(m => m.Sex == 2).Count();
indexs1[2] = string.Join(",", index1result.Where(m => m.Age < age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index1[3] = index1result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Count();
indexs1[3] = string.Join(",", index1result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
_D28.Cells[34, 3].Value = index1[0]; _D28.Cells[34, 4].Value = index1[1]; _D28.Cells[34, 5].Value = index1[2]; _D28.Cells[34, 6].Value = index1[3];
_Tracking.Cells[34, 3].Value = indexs1[0]; _Tracking.Cells[34, 4].Value = indexs1[1]; _Tracking.Cells[34, 5].Value = indexs1[2]; _Tracking.Cells[34, 6].Value = indexs1[3];
#endregion
#region index2
/* Tính chỉ số thứ 2 - Chuyển tới trong kỳ báo cáo
Lọc những người trong dataset bên và chỉ lấy những người có DateofReferral khác null và thỏa mãn điều kiện DateofReferral nhỏ hơn ngày Arv + 12 tháng
*/
int[] index2 = { 0, 0, 0, 0 };
string[] indexs2 = { "", "", "", "" };
var index2result = SelectedPatients.Where(q => q.Dateofreferral != null && q.HaveArvBefore == 1)
.Select(q => new { PatientId = q.PatientId, Sex = q.Sex, q.Age }).GroupBy(p => p.PatientId).Select(g => g.First()).ToList();
//Nam < 15 tuổi
index2[0] = index2result.Where(m => m.Age < age).Where(m => m.Sex == 1).Count();
indexs2[0] = string.Join(",", index2result.Where(m => m.Age < age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index2[1] = index2result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Count();
indexs2[1] = string.Join(",", index2result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 15 tuổi
index2[2] = index2result.Where(m => m.Age < age).Where(m => m.Sex == 2).Count();
indexs2[2] = string.Join(",", index2result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index2[3] = index2result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Count();
indexs2[3] = string.Join(",", index2result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
_D28.Cells[35, 3].Value = index2[0]; _D28.Cells[35, 4].Value = index2[1]; _D28.Cells[35, 5].Value = index2[2]; _D28.Cells[35, 6].Value = index2[3];
_Tracking.Cells[35, 3].Value = indexs2[0]; _Tracking.Cells[35, 4].Value = indexs2[1]; _Tracking.Cells[35, 5].Value = indexs2[2]; _Tracking.Cells[35, 6].Value = indexs2[3];
#endregion
#region index3
/*Tính chỉ số thứ 3 - Chuyển đi trong kỳ báo cáo
Tìm trong danh sách những người chuyển đi có ngày chuyển đi nằm trong khoảng ngày bắt đầu điều trị Arv + 12 tháng.
Thiết lập Join Query từ Dataset Patients để lấy thông tin cần thiết
*/
int[] index3 = { 0, 0, 0, 0 };
string[] indexs3 = { "", "", "", "" };
var index3preresult = SelectedPatients.GroupBy(p => p.PatientId).Select(g => g.OrderBy(p => p.TreatmentSdate).Last()).Select(p => new { p.PatientId, p.Sex, p.Age, moveout = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "10" ? true : false, lost = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "09" ? true : false, dead = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "1" ? true : false }).Where(p => !p.moveout && !p.dead && !p.lost).ToList();
var index3result = index3preresult.Where(q => q.moveout).Select(q => new { PatientId = q.PatientId, Sex = q.Sex, q.Age }).ToList();
index3[0] = index3result.Where(m => m.Age < age).Where(m => m.Sex == 1).Count();
indexs3[0] = string.Join(",", index3result.Where(m => m.Age < age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index3[2] = index3result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Count();
indexs3[2] = string.Join(",", index3result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index3[3] = index3result.Where(m => m.Age < age).Where(m => m.Sex == 2).Count();
indexs3[3] = string.Join(",", index3result.Where(m => m.Age < age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index3[3] = index3result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Count();
indexs3[3] = string.Join(",", index3result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
_D28.Cells[36, 3].Value = index3[0]; _D28.Cells[36, 4].Value = index3[1]; _D28.Cells[36, 5].Value = index3[2]; _D28.Cells[36, 6].Value = index3[3];
_Tracking.Cells[36, 3].Value = indexs3[0]; _Tracking.Cells[36, 4].Value = indexs3[1]; _Tracking.Cells[36, 5].Value = indexs3[2]; _Tracking.Cells[36, 5].Value = indexs3[3];
#endregion
#region index5
/*Tính chỉ số thứ 5 -Số bệnh nhân đang điều trị ARV tại thời điểm tháng thứ 12
join bảng Exams với Dataset Patients và lọc tất cả bản ghi khám cuối cùng với từng người trong khoảng 12 tháng thỏa mãn
điều kiện ngày khám cuối <= ngày Arv+ 12 tháng và ngày kết thúc = null hoặc > Arv+12 tháng
*
*/
int[] index5 = { 0, 0, 0, 0, };
string[] indexs5 = { "", "", "", "", };
var index5preresult = SelectedPatients.GroupBy(p => p.PatientId).Select(g => g.OrderBy(p => p.TreatmentSdate).Last()).Select(p => new { p.PatientId, p.Sex, p.Age, moveout = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "10" ? true : false, lost = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "09" ? true : false, dead = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "1" ? true : false }).Where(p => !p.moveout && !p.dead && !p.lost).ToList();
var index5result = index5preresult.Where(q => !q.moveout && !q.dead && !q.lost ).Select(q => new { PatientId = q.PatientId, Sex = q.Sex, q.Age }).ToList();
//Nam < 15 tuổi
index5[0] = index5result.Where(m => m.Age < age).Where(m => m.Sex == 1).Count();
indexs5[0] = string.Join(",", index5result.Where(m => m.Age < age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index5[1] = index5result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Count();
indexs5[1] = string.Join(",", index5result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index5[2] = index5result.Where(m => m.Age < age).Where(m => m.Sex == 2).Count();
indexs5[2] = string.Join(",", index5result.Where(m => m.Age < age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index5[3] = index5result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Count();
indexs5[3] = string.Join(",", index5result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
_D28.Cells[38, 3].Value = index5[0]; _D28.Cells[38, 4].Value = index5[1]; _D28.Cells[38, 5].Value = index5[2]; _D28.Cells[38, 6].Value = index5[3];
_Tracking.Cells[38, 3].Value = indexs5[0]; _Tracking.Cells[38, 4].Value = indexs5[1]; _Tracking.Cells[38, 5].Value = indexs5[2]; _Tracking.Cells[38, 6].Value = indexs5[3];
#endregion
#region index6
/* Tính chỉ số thứ 6 - Ngừng điều trị hoặc không khám
Lọc tất cả bản ghi cuối của điều trị ARV. Nến bản ghi này có ngày kết thúc điều trị và ngày kết thúc này phải nhỏ hơn
ngày Arv + 12
*/
int[] index6 = { 0, 0, 0, 0, };
string[] indexs6 = { "", "", "", "", };
var index6preresult = SelectedPatients.GroupBy(p => p.PatientId).Select(g => g.OrderBy(p => p.TreatmentSdate).Last()).Select(p => new { p.PatientId, p.Sex, p.Age, p.TreatmentEdate}).ToList();
var index6result = index6preresult.Where(q=>q.TreatmentEdate!=null).Select(q => new { PatientId = q.PatientId, Sex = q.Sex, q.Age }).ToList();
//Nam < 15 tuổi
index6[0] = index6result.Where(m => m.Age < age).Where(m => m.Sex == 1).Count();
indexs6[0] = string.Join(",", index6result.Where(m => m.Age < age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index6[1] = index6result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Count();
indexs6[1] = string.Join(",", index6result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 15 tuổi
index6[2] = index6result.Where(m => m.Age < age).Where(m => m.Sex == 2).Count();
indexs6[2] = string.Join(",", index6result.Where(m => m.Age < age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index6[3] = index6result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Count();
indexs6[3] = string.Join(",", index6result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
_D28.Cells[39, 3].Value = index6[0]; _D28.Cells[39, 4].Value = index6[1]; _D28.Cells[39, 5].Value = index6[2]; _D28.Cells[39, 6].Value = index6[3];
_Tracking.Cells[39, 3].Value = indexs6[0]; _Tracking.Cells[39, 4].Value = indexs6[1]; _Tracking.Cells[39, 5].Value = indexs6[2]; _Tracking.Cells[39, 6].Value = indexs6[3];
#endregion
#region index7
/* Tính chỉ số thứ 7 - Tử vong trong kỳ báo cáo
Lọc trong Dataset Patients và lấy những bệnh nhân có ngày từ vong trong khoảng ngày Arv -> ngày Arv+ 12 tháng
*/
int[] index7 = { 0, 0, 0, 0, };
string[] indexs7 = { "", "", "", "", };
var index7preresult = SelectedPatients.GroupBy(p => p.PatientId).Select(g => g.OrderBy(p => p.TreatmentSdate).Last()).Select(p => new { p.PatientId, p.Sex, p.Age, moveout = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "10" ? true : false, lost = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "09" ? true : false, dead = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "1" ? true : false }).Where(p => !p.moveout && !p.dead && !p.lost).ToList();
var index7result = index7preresult.Where(q => q.dead).Select(q => new { PatientId = q.PatientId, Sex = q.Sex, q.Age }).ToList();
//Nam < 15 tuổi
index7[0] = index7result.Where(m => m.Age < age).Where(m => m.Sex == 1).Count();
indexs7[0] = string.Join(",", index7result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index7[1] = index7result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Count();
indexs7[1] = string.Join(",", index7result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index7[2] = index7result.Where(m => m.Age < age).Where(m => m.Sex == 2).Count();
indexs7[2] = string.Join(",", index7result.Where(m => m.Age < age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index7[3] = index7result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Count();
indexs7[3] = string.Join(",", index7result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
_D28.Cells[40, 3].Value = index7[0]; _D28.Cells[40, 4].Value = index7[1]; _D28.Cells[40, 5].Value = index7[2]; _D28.Cells[40, 6].Value = index7[3];
_Tracking.Cells[40, 3].Value = indexs7[0]; _Tracking.Cells[40, 4].Value = indexs7[1]; _Tracking.Cells[40, 5].Value = indexs7[2]; _Tracking.Cells[40, 6].Value = indexs7[3];
#endregion
#region index8
// Chỉ số thứ 8 - Số bệnh nhân bỏ trị
int[] index8 = { 0, 0, 0, 0, };
string[] indexs8 = { "", "", "", "", };
var index8preresult = SelectedPatients.GroupBy(p => p.PatientId).Select(g => g.OrderBy(p => p.TreatmentSdate).Last()).Select(p => new { p.PatientId, p.Sex, p.Age, moveout = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "10" ? true : false, lost = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "09" ? true : false, dead = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "1" ? true : false }).Where(p => !p.moveout && !p.dead && !p.lost).ToList();
var index8result = index8preresult.Where(q => q.lost).Select(q => new { PatientId = q.PatientId, Sex = q.Sex, q.Age }).ToList();
//Nam < 15 tuổi
index8[0] = index8result.Where(m => m.Age < age).Where(m => m.Sex == 1).Count();
indexs8[0] = string.Join(",", index8preresult.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index8[1] = index8result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Count();
indexs8[1] = string.Join(",", index8preresult.Where(m => m.Age >= age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 15 tuổi
index8[2] = index8result.Where(m => m.Age < age).Where(m => m.Sex == 2).Count();
indexs8[2] = string.Join(",", index8preresult.Where(m => m.Age < age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index8[3] = index8result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Count();
indexs8[3] = string.Join(",", index8result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
_D28.Cells[41, 3].Value = index8[0]; _D28.Cells[41, 4].Value = index8[1]; _D28.Cells[41, 5].Value = index8[2]; _D28.Cells[41, 6].Value = index8[3];
_Tracking.Cells[41, 3].Value = indexs8[0]; _Tracking.Cells[41, 4].Value = indexs8[1]; _Tracking.Cells[41, 5].Value = indexs8[2]; _Tracking.Cells[41, 6].Value = indexs8[3];
#endregion
}
#endregion
#region R9
private void R9()
{
var ws = _R9;
const int age = 15;
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);
#region index1
//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[] index1 = { 0, 0, 0, 0 };
string[] indexs1 = { "", "", "", "" };
var index1prevresult = (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 index1result = index1prevresult.Join(Patients,
t => t.PatientId,
p => p.PatientId,
(t, p)
=> new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).ToList();
//Nam < 15 tuổi
index1[0] = index1result.Where(m => m.Age < age).Where(m => m.Sex == 1).Count();
indexs1[0] = string.Join(",", index1result.Where(m => m.Age < age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index1[1] = index1result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Count();
indexs1[1] = string.Join(",", index1result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 15 tuổi
index1[2] = index1result.Where(m => m.Age < age).Where(m => m.Sex == 2).Count();
indexs1[2] = string.Join(",", index1result.Where(m => m.Age < age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index1[3] = index1result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Count();
indexs1[3] = string.Join(",", index1result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
_D28.Cells[49, 3].Value = index1[0]; _D28.Cells[49, 4].Value = index1[1]; _D28.Cells[49, 5].Value = index1[2]; _D28.Cells[49, 6].Value = index1[3];
_Tracking.Cells[49, 3].Value = indexs1[0]; _Tracking.Cells[49, 4].Value = indexs1[1]; _Tracking.Cells[49, 5].Value = indexs1[2]; _Tracking.Cells[49, 6].Value = indexs1[3];
#endregion
#region index2
//Chỉ số 2 - Số bệnh nhân bắt đầu điều trị Lao trong kỳ báo cáo
int[] index2 = { 0, 0, 0, 0 };
string[] indexs2 = { "", "", "", "" };
var index2prevresult = (from tr in Treatments where tr.TreatmentId == "02" group tr by tr.PatientId into g select g.OrderBy(p => p.TreatmentEdate).First()).Where(p => p.TreatmentEdate >= BeginDate && p.TreatmentEdate <= EndDate).ToList();
var index2result = index2prevresult.Join(Patients,
t => t.PatientId,
p => p.PatientId,
(t, p)
=> new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear, DateOfArv = p.DateofArv, sDate = t.TreatmentSdate }).Where(p => p.DateOfArv != null && p.DateOfArv <= p.sDate).ToList();
//Nam < 15 tuổi
index2[0] = index2result.Where(m => m.Age < age).Where(m => m.Sex == 1).Count();
indexs2[0] = string.Join(",", index2result.Where(m => m.Age < age).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index2[1] = index2result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Count();
indexs2[1] = string.Join(",", index2result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 15 tuổi
index2[2] = index2result.Where(m => m.Age < age).Where(m => m.Sex == 2).Count();
indexs2[2] = string.Join(",", index2result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index2[3] = index2result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Count();
indexs2[3] = string.Join(",", index2result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
_D28.Cells[50, 3].Value = index2[0]; _D28.Cells[50, 4].Value = index2[1]; _D28.Cells[50, 5].Value = index2[2]; _D28.Cells[50, 6].Value = index2[3];
_Tracking.Cells[50, 3].Value = indexs2[0]; _Tracking.Cells[50, 4].Value = indexs2[1]; _Tracking.Cells[50, 5].Value = indexs2[2]; _Tracking.Cells[50, 6].Value = indexs2[3];
#endregion
}
#endregion
}
}

View File

@@ -0,0 +1,269 @@
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 clsFullPrint
{
public DataAccessAdapter adapter = new DataAccessAdapter(SettingInfo.Constr);
public void PrintOut(List<string> PatientLists)
{
SaveFileDialog saveDlg = new SaveFileDialog();
saveDlg.Filter = "Excel File|*.xlsx";
if (saveDlg.ShowDialog() != DialogResult.OK) return;
LinqMetaData meta = new LinqMetaData(adapter);
EntityCollection<TblPatientEntity> Patients = new EntityCollection<TblPatientEntity>();
EntityCollection<TblExaminationInfoEntity> Exams = new EntityCollection<TblExaminationInfoEntity>();
EntityCollection<TblPreClinicsInfoEntity> Tests= new EntityCollection<TblPreClinicsInfoEntity>();
EntityCollection<TblTreatmentInfoEntity> TreatmentInfo = new EntityCollection<TblTreatmentInfoEntity>();
EntityCollection<TblPreClinicsInfoEntity> CD4 = new EntityCollection<TblPreClinicsInfoEntity>();
EntityCollection<TblPreClinicsInfoEntity> INH = new EntityCollection<TblPreClinicsInfoEntity>();
EntityCollection<TblPreClinicsInfoEntity> CTX = new EntityCollection<TblPreClinicsInfoEntity>();
adapter.FetchEntityCollection(Patients, null);
adapter.FetchEntityCollection(Exams, null);
adapter.FetchEntityCollection(Tests, null);
adapter.FetchEntityCollection(TreatmentInfo, null);
var PrintPatients = Patients.Where(m => PatientLists.Contains(m.PatientId)).ToList();
var LastExams = Exams.GroupBy(m => m.PatientId).Select(g => g.OrderBy(m => m.ExamDate).Last()).Select(g => new { g.PatientId, g.ExamDate, g.EndExamDate, g.ReasonEnd, g.ReExamDate,g.OutPatientTreatment, Delays =g.ReExamDate==null?(double?)null:Math.Round( (DateTime.Now-g.ReExamDate.Value).TotalDays) }).ToList();
var LastCD4 = Tests.Where(p=>p.Testid=="01").GroupBy(m=>m.PatientId).Select(g=>g.OrderBy(m=>m.TestDate).Last()).Select(g=>new{g.PatientId,CD4=g.QuantityResult, CD4Delays = (DateTime.Now- g.TestDate.Value).TotalDays}).ToList();
var LastARV = TreatmentInfo.Where(p => p.TreatmentId == "01").GroupBy(m => m.PatientId).Select(g => g.OrderBy(m => m.TreatmentSdate).Last()).Select(g => new { g.PatientId, ARVsDate =g.TreatmentSdate, ARVeDate= g.TreatmentEdate, g.Regimenid}).ToList();
var LastINH = TreatmentInfo.Where(p => p.TreatmentId == "03").GroupBy(m => m.PatientId).Select(g => g.OrderBy(m => m.TreatmentSdate).Last()).Select(g => new { g.PatientId, INHsDate = g.TreatmentSdate, INHeDate = g.TreatmentEdate, }).ToList();
var LastCTX = TreatmentInfo.Where(p => p.TreatmentId == "04").GroupBy(m => m.PatientId).Select(g => g.OrderBy(m => m.TreatmentSdate).Last()).Select(g => new { g.PatientId, CTXsDate = g.TreatmentSdate, CTXeDate = g.TreatmentEdate, }).ToList();
var LastExamRec = (from p in PrintPatients
join q in LastExams on p.PatientId equals q.PatientId
select new
{
p.PatientId,
p.PatientName,
p.Sex,
p.BirthYear,
p.TelephoneNo,
p.SupporterInfo,
sms=(bool)p.Sms?"X":"",
p.Address,
p.DateofArv,
p.DateofRegistration,
p.HivConfirmedDate,
q.ReasonEnd,
q.ExamDate,
q.ReExamDate,
q.EndExamDate,
p.ProvinceId,
p.DistrictId,
p.CommuneId,
p.ReferralId,
q.OutPatientTreatment,
q.Delays
}
).ToList();
var LastCD4record = (from p in LastExamRec
join q in LastCD4 on p.PatientId equals q.PatientId into g
from q in g.DefaultIfEmpty()
select
new
{
p.PatientId,
p.PatientName,
p.Sex,
p.BirthYear,
p.TelephoneNo,
p.SupporterInfo,
p.sms,
p.Address,
p.DateofArv,
p.DateofRegistration,
p.HivConfirmedDate,
p.ReasonEnd,
p.ExamDate,
p.ReExamDate,
p.EndExamDate,
p.ProvinceId,
p.DistrictId,
p.CommuneId,
p.ReferralId,
p.OutPatientTreatment,
p.Delays,
CD4=q!=null?q.CD4.ToString():"N/A",
CD4Delays = q != null ? Math.Round(q.CD4Delays).ToString() : "N/A"
}
).ToList();
var LastARVrecord = (from p in LastCD4record
join q in LastARV on p.PatientId equals q.PatientId into g
from q in g.DefaultIfEmpty()
select
new
{
p.PatientId,
p.PatientName,
p.Sex,
p.BirthYear,
p.TelephoneNo,
p.SupporterInfo,
p.sms,
p.Address,
p.DateofArv,
p.DateofRegistration,
p.HivConfirmedDate,
p.ReasonEnd,
p.ExamDate,
p.ReExamDate,
p.ProvinceId,
p.DistrictId,
p.EndExamDate,
p.CommuneId,
p.ReferralId,
p.OutPatientTreatment,
p.Delays,
p.CD4,
p.CD4Delays,
ARVsDate=q!=null?q.ARVsDate:null,
ARVeDate = q != null ? q.ARVeDate : null,
Regimenid= q!=null? q.Regimenid: string.Empty,
}
).ToList();
var LastCTXrecord = (from p in LastARVrecord
join q in LastCTX on p.PatientId equals q.PatientId into g
from q in g.DefaultIfEmpty()
select
new
{
p.PatientId,
p.PatientName,
p.Sex,
p.BirthYear,
p.TelephoneNo,
p.SupporterInfo,
p.sms,
p.Address,
p.DateofArv,
p.DateofRegistration,
p.HivConfirmedDate,
p.ReasonEnd,
p.ExamDate,
p.ReExamDate,
p.EndExamDate,
p.ProvinceId,
p.DistrictId,
p.CommuneId,
p.ReferralId,
p.OutPatientTreatment,
p.Delays,
p.CD4,
p.CD4Delays,
p.ARVsDate,
p.ARVeDate,
p.Regimenid,
CTXsDate=q!=null?q.CTXsDate:null,
CTXeDate = q != null ? q.CTXeDate : null
}
).ToList();
int i =1;
var LastINHrecord = (from p in LastCTXrecord
join q in LastINH on p.PatientId equals q.PatientId into g
from q in g.DefaultIfEmpty()
select
new
{
p.PatientId,
p.PatientName,
p.Sex,
p.BirthYear,
p.TelephoneNo,
p.SupporterInfo,
p.sms,
p.Address,
p.DateofArv,
p.DateofRegistration,
p.HivConfirmedDate,
p.ReasonEnd,
p.ExamDate,
p.ReExamDate,
p.EndExamDate,
p.ProvinceId,
p.DistrictId,
p.CommuneId,
p.ReferralId,
p.OutPatientTreatment,
p.Delays,
p.CD4,
p.CD4Delays,
p.ARVsDate,
p.ARVeDate,
p.Regimenid,
p.CTXsDate,
p.CTXeDate,
INHsDate = q != null ? q.INHsDate : null,
INHeDate = q != null ? q.INHeDate : null
}
).Select(p => new clsPatientInfo
{
No= i++,
PatientID=p.PatientId,
PatientName=p.PatientName,
Sex=(int)p.Sex==1?"Nam":"Nữ",
BirthYear= (int)p.BirthYear,
TelephoneNo= p.TelephoneNo,
SupporterInfo=p.SupporterInfo,
sms=p.sms,
Address= p.Address,
DateofArv=p.DateofArv,
IsArv =p.DateofArv!=null?"X":"",
DateofRegistration= p.DateofRegistration,
HIVConfirmDate = p.HivConfirmedDate,
ReasonEnd=p.ReasonEnd,
LastExamDate= p.ExamDate,
ReExamDate= p.ReExamDate,
EndExamDate = p.EndExamDate,
ProvinceId= p.ProvinceId,
DistrictId=p.DistrictId,
CommuneId=p.CommuneId,
Referral= p.ReferralId!="01"?"X":"",
OutPatientTreatment=(short)p.OutPatientTreatment ==1?"X":"",
Delays = p.EndExamDate !=null?p.Delays.ToString():"",
CD4=p.CD4,
CD4Delays= p.EndExamDate !=null?p.CD4Delays:"",
ARVsDate=p.ARVsDate,
ARVeDate = p.ARVeDate,
Regimenid=p.Regimenid,
CTXsDate=p.CTXsDate,
CTXeDate=p.CTXeDate,
INHsDate =p.INHsDate,
INHeDate = p.INHeDate
}).ToList();
PatientMan.Forms.frmExp frm = new PatientMan.Forms.frmExp();
frm.LoadData();
frm.grdExport.DataSource = LastINHrecord;
frm.grdExport.ExportToXlsx(saveDlg.FileName);
MessageBox.Show("Dữ liệu đã được kết xuất ra tệp " + saveDlg.FileName);
frm.Dispose();
}
}
}

View File

@@ -0,0 +1,130 @@
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 clsHivQualExport
{
public DateTime BeginDate;
public DateTime EndDate;
public DataAccessAdapter adapter = new DataAccessAdapter(SettingInfo.Constr);
private EntityCollection<TblPatientEntity> Patients = new EntityCollection<TblPatientEntity>();
private EntityCollection<TblExaminationInfoEntity> Exams = new EntityCollection<TblExaminationInfoEntity>();
private EntityCollection<TblTreatmentInfoEntity> Treatments = new EntityCollection<TblTreatmentInfoEntity>();
private EntityCollection<TblPreClinicsInfoEntity> Tests = new EntityCollection<TblPreClinicsInfoEntity>();
public void HivQual()
{
SaveFileDialog saveDlg = new SaveFileDialog();
saveDlg.Filter = "Excel File|*.xlsx";
if (saveDlg.ShowDialog() != DialogResult.OK) return;
adapter.FetchEntityCollection(Patients, null);
adapter.FetchEntityCollection(Exams, null);
adapter.FetchEntityCollection(Treatments, null);
adapter.FetchEntityCollection(Tests, null);
var setLastExams = Exams.Where(p => p.ExamDate >= BeginDate && p.ExamDate <= EndDate).GroupBy(p => p.PatientId).Select (g=>g.OrderBy(m=>m.ExamDate).Last()).ToList();
var setPatients = setLastExams.Join(Patients, p => p.PatientId, q => q.PatientId, (p, q) => new
{
MaOPC = DBNull.Value,
MaBA = p.PatientId,
TuNgay = BeginDate,
DenNgay = EndDate,
NgayThuThap = DateTime.Today,
NguoiThuThap = "USAID/SMART TA eLog",
NgayDangKy = q.DateofRegistration,
ChuaARVCT = (q.HaveArvBefore != 1 && q.Dateofreferral != null)?"True":"False",
ARVCT = (q.HaveArvBefore == 1 && q.Dateofreferral != null)?"True":"False",
NgayXNMG1 = (Tests.Where(m => m.Testid == "03" || m.Testid == "04").Where(m => m.TestDate >= BeginDate && m.TestDate <= EndDate && m.PatientId == p.PatientId).Count() != 0) ? Tests.Where(m => m.Testid == "03" || m.Testid == "04").Where(m => m.TestDate >= BeginDate && m.TestDate <= EndDate && m.PatientId == p.PatientId).OrderBy(m => m.TestDate).Last().TestDate : null,
ALT1 = (Tests.Where(m => m.Testid == "03" && m.TestDate >= BeginDate && m.TestDate <= EndDate && m.PatientId == p.PatientId).Count() != 0) ? Tests.Where(m => m.Testid == "03" && m.TestDate >= BeginDate && m.TestDate <= EndDate && m.PatientId == p.PatientId).OrderBy(m => m.TestDate).Last().QuantityResult : null,
AST1 = (Tests.Where(m => m.Testid == "04" && m.TestDate >= BeginDate && m.TestDate <= EndDate && m.PatientId == p.PatientId).Count() != 0) ? Tests.Where(m => m.Testid == "04" && m.TestDate >= BeginDate && m.TestDate <= EndDate && m.PatientId == p.PatientId).OrderBy(m => m.TestDate).Last().QuantityResult : null,
NgayXNMG2 = DBNull.Value,
ALT2 = DBNull.Value,
AST2 = DBNull.Value,
NgayDieuTriARV = (q.DateofArv != null && q.DateofArv < EndDate) ? q.DateofArv : null,
NgayGDLS3 = (Exams.Where(m => m.PatientId == p.PatientId).Where(m => m.ClinicStage == 3).Count() != 0) ? Exams.Where(m => m.PatientId == p.PatientId).Where(m => m.ClinicStage == 3).First().ExamDate : null,
NgayGDLS4 = (Exams.Where(m => m.PatientId == p.PatientId).Where(m => m.ClinicStage == 4).Count() != 0) ? Exams.Where(m => m.PatientId == p.PatientId).Where(m => m.ClinicStage == 4).First().ExamDate : null,
NgayDuTCDieuTriARV = DBNull.Value,
NgaySanSangDieuTriARV = DBNull.Value,
NgayHen = (Exams.Where(g => g.PatientId == p.PatientId && g.ExamDate > BeginDate && g.ExamDate < p.ExamDate).Count() != 0) ? Exams.Where(g => g.PatientId == p.PatientId && g.ExamDate > BeginDate && g.ExamDate < p.ExamDate).OrderBy(m => m.ExamDate).Last().ReExamDate : p.ExamDate,
NgayKham = p.ExamDate,
NgayHenKeTiep = p.ReExamDate,
DuPhongCTX = (Treatments.Where(m => m.PatientId == p.PatientId && m.TreatmentId == "04").Select(m => new { m.TreatmentSdate, TreatmentEdate = (m.TreatmentEdate == null) ? m.TreatmentSdate.Value.AddYears(100) : m.TreatmentEdate.Value }).Where(m => m.TreatmentSdate <= p.ExamDate && m.TreatmentEdate >= p.ExamDate).Count() != 0) ? 1 : 2,
INH = (Treatments.Where(m => m.PatientId == p.PatientId && m.TreatmentId == "03").Select(m => new {m.TreatmentSdate, TreatmentEdate = (m.TreatmentEdate == null) ? m.TreatmentSdate.Value.AddYears(100) : m.TreatmentEdate }).Where(m => m.TreatmentSdate <= p.ExamDate && m.TreatmentEdate >= p.ExamDate).Count() != 0) ? 1 : 2,
NguoiNhaLanhThuoc = (p.NoSelfExam==1)?1:2,
GiaiDoanLS =(p.ClinicStage>0)?p.ClinicStage:9,
SangLocLao = (Treatments.Where(m => m.PatientId == p.PatientId && m.TreatmentId == "02").Select(m => new {m.TreatmentSdate, TreatmentEdate = (m.TreatmentEdate == null) ? m.TreatmentSdate.Value.AddYears(100) : m.TreatmentEdate }).Where(m => m.TreatmentSdate <= p.ExamDate && m.TreatmentEdate >= p.ExamDate).Count() != 0) ? 3:(p.TbScreenResult == string.Empty)?9:(p.TbScreenResult=="02"?1:2),
RLThanKinh=DBNull.Value,
VangDa =(p.Jaundice==1)?1:2,
DGiaTThuDT = (q.DateofArv==null || q.DateofArv> p.ExamDate)?3:p.TreatmentFollow==1?1:2,
NgayKT =p.EndExamDate,
}
).ToList();
Forms.frmExp frm = new Forms.frmExp();
frm.grdHivQual.DataSource = setPatients;
frm.grdHivQual.ExportToXlsx(saveDlg.FileName);
MessageBox.Show("Dữ liệu đã được kết xuất ra tệp " + saveDlg.FileName);
frm.Dispose();
}
public void CD4()
{
SaveFileDialog saveDlg = new SaveFileDialog();
saveDlg.Filter = "Excel File|*.xlsx";
if (saveDlg.ShowDialog() != DialogResult.OK) return;
adapter.FetchEntityCollection(Patients, null);
adapter.FetchEntityCollection(Exams, null);
adapter.FetchEntityCollection(Treatments, null);
adapter.FetchEntityCollection(Tests, null);
var setLastExams = Exams.Where(p => p.ExamDate >= BeginDate && p.ExamDate <= EndDate).GroupBy(p => p.PatientId).Select(g => g.OrderBy(m => m.ExamDate).Last()).ToList();
var CD4 = Tests.Where(p => p.Testid == "01" && p.TestDate <= EndDate && p.TestDate >= EndDate.AddYears(-1)).ToList();
var SetCD4 = setLastExams.Join(CD4, p => p.PatientId, q => q.PatientId, (p, q) => new
{
MaOPC = DBNull.Value,
MaBA = p.PatientId,
TuNgay = BeginDate,
DenNgay = EndDate,
NgayThuThap = DateTime.Today,
NguoiThuThap = "USAID/SMART TA eLog",
NgayXNCD4 = q.TestDate,
KQCD4= q.QuantityResult
}
).OrderBy(m=>m.MaBA).ThenBy(m=>m.NgayXNCD4 ).ToList();
Forms.frmExp frm = new Forms.frmExp();
frm.grdHivQual.DataSource = SetCD4;
frm.grdHivQual.ExportToXlsx(saveDlg.FileName);
MessageBox.Show("Dữ liệu đã được kết xuất ra tệp " + saveDlg.FileName);
frm.Dispose();
}
}
}

View File

@@ -0,0 +1,550 @@
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 clsHivqual
{
public DevExpress.XtraSpreadsheet.SpreadsheetControl spreed;
public DateTime BeginDate;
public DateTime EndDate;
private DevExpress.Spreadsheet.Worksheet _Hivqual, _Common, _Tracking;
public DataAccessAdapter adapter = new DataAccessAdapter(SettingInfo.Constr);
int row, col;
public void Calculate()
{
// var path = Application.StartupPath;
// var templatefile = path + @"\templates\Hivqual.xls";
// var repfile = path + @"\Excels\Hivqual.xls";
// Microsoft.Office.Interop.Excel.Workbook wb;
row = 5; col = 4;
// var app = new Excel.Application();
// File.Copy(templatefile, repfile, true);
// wb = app.Workbooks.Open(repfile);
_Hivqual = this.spreed.Document.Worksheets["VN"];
_Tracking = this.spreed.Document.Worksheets["Tracking"];
_Common = this.spreed.Document.Worksheets["Common"];
_Common.Cells[1, 1].Value = BeginDate;
_Common.Cells[1, 2].Value = EndDate;
Hivqual1(); Hivqual2(); Hivqual3(); Hivqual4(); Hivqual5(); Hivqual6(); Hivqual7(); Hivqual8(); Hivqual9(); Hivqual10();
string DateInfo = _Hivqual.Cells[3, 2].Value.ToString();
DateInfo = DateInfo.Replace("{startdate}", BeginDate.ToShortDateString());
DateInfo = DateInfo.Replace("{enddate}", EndDate.ToShortDateString());
_Hivqual.Cells[3, 2].Value = DateInfo;
// app.Visible = true;
}
#region "Hivqual"
private void Hivqual1()
{
/*Mẫu số: Lọc trong bảng tblPatient những bệnh nhân có DateofRegistration trong khoảng ngày báo cáo và loại trừ những bệnh nhân có DateofReferral!=nul.
Từ số: Trong bảng tblPreclicnic, lọc những bản ghi CD4 có ngày TestDate DateofRegistration <=15. Hoặc có ngày TestDate DateofRegistration >= -180.
Nhóm lại để lấy duy nhất nều tồn tại ở một bệnh nhân có 2 lần là CD4 thỏa mãn điều kiện trên.
*/
int numerator, denominator;
var thisPatients = new EntityCollection<TblPatientEntity>();
var tests = new EntityCollection<TblPreClinicsInfoEntity>();
adapter.FetchEntityCollection(thisPatients, null);
adapter.FetchEntityCollection(tests, null);
var thisBeginDate = this.BeginDate;
var thisEndDate = this.EndDate;
var dDominator = (from q in thisPatients where (q.DateofRegistration != null && q.DateofRegistration >= thisBeginDate && q.DateofRegistration <= thisEndDate.AddDays(-15) && q.Dateofreferral == null) select q).ToList();
var sDenominator = string.Join(",", dDominator.Select(m => m.PatientId).ToArray());
denominator = dDominator.Count;
var dNumerator = (from q in tests join p in dDominator on q.PatientId equals p.PatientId where (q.Testid == "01" && q.TestDate != null) select new { q.TestDate, p.DateofRegistration, q.PatientId, diff = ((TimeSpan)(q.TestDate - p.DateofRegistration)).TotalDays }).ToList().Where(s => s.diff <= 15 && s.diff >= -180).GroupBy(g => g.PatientId).Select(m => m.First().PatientId).ToList();
numerator = dNumerator.Count;
var sNumerator = string.Join(",", dNumerator.ToArray());
double result = denominator == 0 ? 0 : (double)numerator / (double)denominator;
_Hivqual.Cells[row, col].Value = result;
_Hivqual.Cells[row, col + 1].Value = denominator;
_Tracking.Cells[row, col + 1].Value = sDenominator; _Tracking.Cells[row, col].Value = sNumerator;
}
private void Hivqual2()
{
/* Tỷ lệe bệnh nhân chưa điều trị ARV tới tái khám định kỳ
* Mấu số: Lọc bệnh nhân trong bảng tblPatients thỏa mãn điều kiện có ngày DateofArv == null hoặc ngày DateofArv > EndDate. Và có ít nhất 1 ngày khám trong giai đoạn đánh giá.
Tử số: Lọc trong bảng tblExamination có ngày khám cuối trong giai đoạn đó ngày cuối giai đoạn đánh giá >= -90. . Nhóm lại nếu có nhiều bản ghi cho mỗi bệnh nhân để lấy bản ghi duy nhất.
*/
int numerator, denominator;
var thisPatients = new EntityCollection<TblPatientEntity>();
var exams = new EntityCollection<TblExaminationInfoEntity>();
adapter.FetchEntityCollection(thisPatients, null);
adapter.FetchEntityCollection(exams, null);
var thisBeginDate = this.BeginDate;
var thisEndDate = this.EndDate;
List<string> includes = (from q in exams
where (q.ExamDate >= thisBeginDate && q.ExamDate <= thisEndDate)
group q by q.PatientId into g
select g.First().PatientId).ToList();
var dDenominator = (from q in thisPatients where ((q.DateofArv == null || q.DateofArv > thisEndDate) && includes.Contains(q.PatientId)) select q.PatientId).ToList();
denominator = dDenominator.Count;
var sDenominator = string.Join(",", dDenominator.ToArray());
var dNumerator = (from q in exams
where (dDenominator.Contains(q.PatientId) && ((TimeSpan)(q.ExamDate - thisEndDate)).TotalDays >= -90)
group q by q.PatientId
into g
select g.Last().PatientId).ToList();
var sNumerator = string.Join(",", dNumerator.ToArray());
numerator = dNumerator.Count;
double result = denominator == 0 ? 0 : (double)numerator / (double)denominator;
_Hivqual.Cells[row + 1, col].Value = result;
_Hivqual.Cells[row + 1, col + 1].Value = denominator;
_Tracking.Cells[row + 1, col + 1].Value = sDenominator; _Tracking.Cells[row + 1, col].Value = sNumerator;
}
private void Hivqual3()
{
/*Tỷ lệ bệnh nhân mới đăng ký tại PKNT đủ tiêu chuẩn dự phòng INH (IPT) được kê đơn dự phòng trong vòng 6 tháng qua
Mẫu số:
Bước 1: Lọc ra những BN có ngày đăng kí trong giai đoạn đánh giá và ngày chuyển tới = null.
Bước 2: Từ các BN ở bước 1, Lọc ra những BN ở lần khám cuối thỏa tất cả:
- Sàng lọc lao = “01”
- Kết quả sàng lọc = “01” (âm tính)
- Kết quả AST, ALT gần nhất nhưng phải nằm trong giai đoạn đánh giá < 200 (nếu ko có là ko thỏa). ALT< 200 và [(AST <200) hoặc (AST = null)]
- Không có rối loạn thần kinh ngoại biên
- Không có Vàng da, vàng mắt
- Tự khám
Tử số:
Lấy tất cả mẫu số, thỏa có INH (mã số 03) ở lần khám cuối (bảng tblTreatments).
*/
int numerator, denominator;
var thisPatients = new EntityCollection<TblPatientEntity>();
var exams = new EntityCollection<TblExaminationInfoEntity>();
var treatments = new EntityCollection<TblTreatmentInfoEntity>();
var tests = new EntityCollection<TblPreClinicsInfoEntity>();
adapter.FetchEntityCollection(thisPatients, null);
adapter.FetchEntityCollection(exams, null);
adapter.FetchEntityCollection(treatments, null);
adapter.FetchEntityCollection(tests, null);
var thisBeginDate = this.BeginDate;
var thisEndDate = this.EndDate;
List<string> includesPatient = (from q in thisPatients
where q.DateofRegistration >= thisBeginDate && q.DateofRegistration <= thisEndDate && q.Dateofreferral == null
select q.PatientId).ToList();
var examciriteria = (from q in exams where ( q.ExamDate >= thisBeginDate && q.ExamDate <= thisEndDate && includesPatient.Contains(q.PatientId)) group q by q.PatientId into g select g.Last()).Where( q=>q.TbScreenResult == "01" && q.Jaundice == 0 && q.Blackouts==0 && q.NoSelfExam ==0).Select(p=>p.PatientId).ToList();
var altcriteria = (from q in tests where (examciriteria.Contains(q.PatientId) && q.Testid == "03" && q.TestDate >= thisBeginDate && q.TestDate <= thisEndDate) group q by q.PatientId into g select g.Last()).Where(p=>p.QuantityResult <200).Select(p=>new{p.PatientId}).ToList();
var astcriteria = (from q in tests where (examciriteria.Contains(q.PatientId) && q.Testid == "04" && q.TestDate >= thisBeginDate && q.TestDate <= thisEndDate) group q by q.PatientId into g select g.Last()).Select(p =>new{ p.PatientId, p.QualityResult}).ToList();
var tbTreatment = (from q in treatments where q.TreatmentId =="02"
select new
{
q.PatientId,
tbSdate = q.TreatmentSdate,
tbEdate = (q.TreatmentEdate == null) ? DateTime.Today.AddYears(100) : q.TreatmentEdate,
}).ToList();
var lastExams = exams.Where(q => q.ExamDate >= thisBeginDate && q.ExamDate <= thisEndDate).OrderBy(q => q.PatientId).GroupBy(q => q.PatientId).Select(g => g.OrderBy(p=>p.ExamDate).Last()).ToList();
List<string> Excludes = (from p in tbTreatment join q in lastExams on p.PatientId equals q.PatientId select new { q.PatientId, q.ExamDate, p.tbSdate, p.tbEdate }).Where(q => q.ExamDate >= q.tbSdate && q.ExamDate <= q.tbEdate).GroupBy(q => q.PatientId).Select(g => g.Key).ToList();
// var denominatorset = (from q in tests where (examciriteria.Contains(q.PatientId) && q.Testid == "03" && (q.QuantityResult >= 200 || q.Testid == "04" && q.QuantityResult >= 200) && q.TestDate >= thisBeginDate && q.TestDate >= thisEndDate) group q by q.PatientId into g select g.First().PatientId).ToList();
var denominatorset = (from p in altcriteria join q in astcriteria on p.PatientId equals q.PatientId into g from m in g.DefaultIfEmpty() select new { p.PatientId, QuantityResult = m == null ? 0 : m.QualityResult }).Where(p => p.QuantityResult < 200 && !Excludes.Contains(p.PatientId)).Select(p => p.PatientId).ToList();
var sDenominator = string.Join(",", denominatorset.ToArray());
denominator = denominatorset.Count;
var numeratorset = (from q in treatments where (denominatorset.Contains(q.PatientId) && q.TreatmentSdate >= thisBeginDate && q.TreatmentSdate <= thisEndDate && q.TreatmentId == "03") group q by q.PatientId into p select p.Last().PatientId).ToList();
var sNumerator = string.Join(",", numeratorset.ToArray());
numerator = (from q in numeratorset where denominatorset.Contains(q) select q).Count();
double result = denominator == 0 ? 0 : (double)numerator / (double)denominator;
_Hivqual.Cells[row + 2, col].Value = result;
_Hivqual.Cells[row + 2, col + 1].Value = denominator;
_Tracking.Cells[row + 2, col + 1].Value = sDenominator; _Tracking.Cells[row + 2, col].Value = sNumerator;
}
private void Hivqual4()
{
/*
Tỷ lệ bệnh nhân ARV đến tái khám đúng hẹn trong lần khám gần nhất
Mẫu số: Lọc các bệnh nhân có ngày điều trị ARV < cuối giai đoạn đánh giá và có ngày tái khám trong khoảng giai đoạn đánh giá. Nhóm lại để lấy duy nhất nếu tồn tại BN có nhiều hơn 1 ngày khám trong giai đoạn đánh giá.
Tử số: lọc các bệnh án có ngày hẹn tái khám >cuối kì báo cáo và có Daydiff <= 1.
Lọc các bản ghi lần khám gần nhất của các bệnh nhân đang điều trị Arv có DayDiff <=1 để lấy làm tử số
*/
int numerator, denominator;
var thisPatients = new EntityCollection<TblPatientEntity>();
var exams = new EntityCollection<TblExaminationInfoEntity>();
adapter.FetchEntityCollection(thisPatients, null);
adapter.FetchEntityCollection(exams, null);
var thisBeginDate = this.BeginDate;
var thisEndDate = this.EndDate;
List<string> arvPatients =
thisPatients.Where(q => q.DateofArv != null && q.DateofArv <= thisEndDate).Select(q => q.PatientId).ToList();
List<string> dDenominator = exams.Where(m => m.ExamDate <= thisEndDate && m.ExamDate >= thisBeginDate && arvPatients.Contains(m.PatientId)).GroupBy(g => g.PatientId).Select(g => g.OrderBy(m => m.ExamDate).Last()).Where(m => m.EndExamDate == null || m.EndExamDate > thisEndDate || m.ReasonEnd =="10").Select(m => m.PatientId).ToList();
denominator = dDenominator.Count;
var dNumerator = (from q in exams where (q.ExamDate <= thisEndDate && dDenominator.Contains(q.PatientId)) group q by q.PatientId into p select p.Last()).Where(g => g.DayDiff <= 1).Where(p=>p.ReExamDate > thisEndDate).Select(m => m.PatientId).ToList();
numerator = dNumerator.Count;
var sDenominator = string.Join(",", dDenominator.ToArray());
var sNumerator = string.Join(",", dNumerator.ToArray());
double result = denominator == 0 ? 0 : (double)numerator / (double)denominator;
_Hivqual.Cells[row + 3, col].Value = result;
_Hivqual.Cells[row + 3, col + 1].Value = denominator;
_Tracking.Cells[row + 3, col + 1].Value = sDenominator; _Tracking.Cells[row + 3, col].Value = sNumerator;
}
private void Hivqual5()
{
/*
Tỷ lệ bệnh nhân được đánh giá TTĐT trong lần khám gần nhất
* Mẫu số:
- Ngày điều trị ARV != null và < ngày cuối giai đoạn đánh giá.
- Có ngày khám trong giai đoạn đánh giá
- Tự đến khám
- Loại BN có ngày khám cuối (trong giai đoạn đánh giá) trùng ngày khởi liều ARV
Tử số: Mẫu số + có biến TreatmentFollow!=null ở lần khám cuối trong giai đoạn đánh giá.
*/
int numerator = 0; int denominator = 0;
var thisPatients = new EntityCollection<TblPatientEntity>();
var exams = new EntityCollection<TblExaminationInfoEntity>();
adapter.FetchEntityCollection(thisPatients, null);
adapter.FetchEntityCollection(exams, null);
var thisBeginDate = this.BeginDate;
var thisEndDate = this.EndDate;
List<string> arvPatients =
thisPatients.Where(q => q.DateofArv != null && q.DateofArv <= thisEndDate).Select(q => q.PatientId).ToList();
var dDenominator = (from q in exams
where (arvPatients.Contains(q.PatientId) && q.ExamDate >= thisBeginDate && q.ExamDate <= thisEndDate)
group q by q.PatientId
into g
select g.OrderBy(m => m.ExamDate).Last()).ToList()
.Where(m => m.NoSelfExam != 1)
.Select(m => m.PatientId)
.ToList();
denominator = dDenominator.Count;
var dNumerator = (from q in exams where (q.ExamDate >= thisBeginDate && q.ExamDate <= thisEndDate && dDenominator.Contains(q.PatientId)) group q by q.PatientId into p select p.Last()).Where(g => g.TreatmentFollow != null).Select(m => m.PatientId).ToList();
numerator = dNumerator.Count;
var sDenominator = string.Join(",", dDenominator.ToArray());
var sNumerator = string.Join(",", dNumerator.ToArray());
double result = denominator == 0 ? 0 : (double)numerator / (double)denominator;
_Hivqual.Cells[row + 4, col].Value = result;
_Hivqual.Cells[row + 4, col + 1].Value = denominator;
_Tracking.Cells[row + 4, col + 1].Value = sDenominator; _Tracking.Cells[row + 4, col].Value = sNumerator;
}
private void Hivqual6()
{
/*
Tỷ lệ BN điều trị ARV được bắt đầu điều trị ARV trong vòng 15 ngày
Mẫu số:
- Bước 1: Lọc ra các bệnh nhân có ngày khởi liều ARV nằm trong giai đoạn đánh giá.
- Bước 2: Loại ra những bệnh nhân đã điều trị ARV chuyển tới
Tử số:
- Lấy mẫu số
- Lọc ra những bệnh nhân có ngày khởi liều ARV ngày đủ tiêu chuẩn <= 15 HOẶC ngày đủ tiêu chuẩn = null.
- Ngày đủ tiêu chuẩn = min (ngày có CD4 < 350 (ngày CD4 này phải lớn hơn ngày đăng ký), ngày khám có giai đoạn lâm sang 3 hoặc 4)
*/
int numerator, denominator;
var exams = new EntityCollection<TblExaminationInfoEntity>();
var tests = new EntityCollection<TblPreClinicsInfoEntity>();
var thisPatients = new EntityCollection<TblPatientEntity>();
var thisBeginDate = this.BeginDate;
var thisEndDate = this.EndDate;
adapter.FetchEntityCollection(thisPatients, null);
adapter.FetchEntityCollection(exams, null);
adapter.FetchEntityCollection(tests, null);
var arvPatients = thisPatients.Where(p => p.DateofArv >= thisBeginDate && p.DateofArv <= thisEndDate && p.HaveArvBefore != 1).ToList<TblPatientEntity>();
var arvTests = tests.Where(p => p.Testid == "01" && p.QuantityResult <= 350).GroupBy(p => p.PatientId).Select(g => g.OrderBy(p => p.TestDate).First()).ToList();
var arvClinics = exams.Where(p => p.ClinicStage >= 3).GroupBy(p => p.PatientId).Select(g => g.OrderBy(p => p.ExamDate).First()).ToList();
var preresult = (from q in arvPatients
join p in arvTests on q.PatientId equals p.PatientId into g
from m in g.DefaultIfEmpty()
select new
{
q.PatientId,
q.DateofArv,
TestDate = (m == null) ? DateTime.Today.AddYears(100) : m.TestDate,
Cd4Criteria = (m == null) ? false : true
}).ToList();
var postresult = (from q in preresult
join p in arvClinics on q.PatientId equals p.PatientId into g
from m in g.DefaultIfEmpty()
select new
{
q.PatientId,
q.DateofArv,
q.TestDate,
q.Cd4Criteria,
ClinicDate = (m == null) ? DateTime.Today.AddYears(100) : m.ExamDate,
ClinicStageCriteria = (m == null) ? false : true
}).ToList();
var dDenominator = postresult.Where(q=>q.ClinicStageCriteria || q.Cd4Criteria).Select(m => m.PatientId).ToList();
denominator = dDenominator.Count();
var dNumerator = (from q in postresult where ((q.ClinicStageCriteria || q.Cd4Criteria) && ((DateTime)q.DateofArv - (DateTime)(q.TestDate >= q.ClinicDate ? q.ClinicDate : q.TestDate)).Days <= 15) select q.PatientId).ToList();
numerator = dNumerator.Count;
var sDenominator = string.Join(",", dDenominator.ToArray());
var sNumerator = string.Join(",", dNumerator.ToArray());
double result = denominator == 0 ? 0 : (double)numerator / (double)denominator;
_Hivqual.Cells[row + 5, col].Value = result;
_Hivqual.Cells[row + 5, col + 1].Value = denominator;
_Tracking.Cells[row + 5, col + 1].Value = sDenominator; _Tracking.Cells[row + 5, col].Value = sNumerator;
}
private void Hivqual7()
{
/* Kết quả CD4 của bệnh nhân lúc bắt đầu điều trị ARV
Mẫu số:
- Lọc ra những bệnh nhân có ngày khởi liều ARV trong giai đoạn đánh giá.
- Loại những đồng chí chuyển tới đã điều trị ARV.
- Lọc những người được làm test CD4 có ngày làm test nhỏ hơn ngày Arv (lấy bản ghi đầu tiên của từng người). Counter ở đây được lấy làm mẫu
Chia các chỉ số Arv thành 4 khoảng < 100, 100-249, 250-349, > 350, tính counter cho các nhóm để làm tử số. Và turn ra 4 tỷ lệ % tương ứng với 4 nhóm. Vậy sẽ có 4 tỷ lệ
*/
int denominator;
var tests = new EntityCollection<TblPreClinicsInfoEntity>();
var thisPatients = new EntityCollection<TblPatientEntity>();
var thisBeginDate = this.BeginDate;
var thisEndDate = this.EndDate;
adapter.FetchEntityCollection(thisPatients, null);
adapter.FetchEntityCollection(tests, null);
var arvPatients = thisPatients.Where(p => p.DateofArv >= thisBeginDate && p.DateofArv <= thisEndDate && p.HaveArvBefore != 1).ToList<TblPatientEntity>();
var arvTests = tests.Where(p => p.Testid == "01").ToList();
var preresult = (from q in arvTests
join p in arvPatients on q.PatientId equals p.PatientId
where (q.TestDate <= p.DateofArv)
select new
{
q.PatientId,
q.QuantityResult,
q.TestDate
}).GroupBy(p => p.PatientId).Select(g => g.OrderBy(p=>p.TestDate).Last()).ToList();
var postresult = preresult.GroupBy(m => m.PatientId).Select(g => g.OrderBy(m => m.TestDate).Last()).ToList();
denominator = postresult.Count;
var sDenominator = string.Join(",", postresult.Select(m => m.PatientId).ToArray());
int g1 = 100;
int g2 = 250;
int g3 = 350;
var dD1 = postresult.Where(m => m.QuantityResult < g1).Select(m => m.PatientId).ToList();
int d1 = dD1.Count();
var sD1 = string.Join(",", dD1.ToArray());
var dD2 = postresult.Where(m => m.QuantityResult >= g1).Where(m => m.QuantityResult < g2).Select(m => m.PatientId).ToList();
int d2 = dD2.Count;
var sD2 = string.Join(",", dD2.ToArray());
var dD3 = postresult.Where(m => m.QuantityResult >= g2).Where(m => m.QuantityResult < g3).Select(m => m.PatientId).ToList();
int d3 = dD3.Count;
var sD3 = string.Join(",", dD3.ToArray());
var dD4 = postresult.Where(m => m.QuantityResult >= g3).Select(m => m.PatientId).ToList();
int d4 = dD4.Count;
var sD4 = string.Join(",", dD4.ToArray());
_Hivqual.Cells[row + 6, col].Value = denominator == 0 ? 0 : (double)d1 / (double)denominator; _Hivqual.Cells[row + 6, col + 1].Value = denominator;
_Tracking.Cells[row + 6, col + 1].Value = sDenominator; _Tracking.Cells[row + 6, col].Value = sD1;
_Hivqual.Cells[row + 7, col].Value = denominator == 0 ? 0 : (double)d2 / (double)denominator; _Hivqual.Cells[row + 7, col + 1].Value = denominator;
_Tracking.Cells[row + 7, col + 1].Value = sDenominator; _Tracking.Cells[row + 7, col].Value = sD2;
_Hivqual.Cells[row + 8, col].Value = denominator == 0 ? 0 : (double)d3 / (double)denominator; _Hivqual.Cells[row + 8, col + 1].Value = denominator;
_Tracking.Cells[row + 8, col + 1].Value = sDenominator; _Tracking.Cells[row + 8, col].Value = sD3;
_Hivqual.Cells[row + 9, col].Value = denominator == 0 ? 0 : (double)d4 / (double)denominator; _Hivqual.Cells[row + 9, col + 1].Value = denominator;
_Tracking.Cells[row + 9, col + 1].Value = sDenominator; _Tracking.Cells[row + 9, col].Value = sD4;
}
private void Hivqual8()
{
/*Tỷ lệ bệnh nhân được kê đơn dự phòng CTX hoặc DAPSONE khi đủ tiêu chuẩn trong lần khám gần nhất
Mẫu số:
- Có ngày khám trong giai đooi đánh giá
- Chọn lần khám cuối cùng trong giai đoạn đánh giá
- Lần khám cuối là tự đến
- Đủ tiêu chuẩn dự phòng CTX: tại lần khám cuối cùng (ở trên) có CD4 <=350 hoặc lầ nkhám cuối cùng (chọn ở trên) có giai đoạn lâm sang 3 hoặc 4.
Tử số:
- Mẫu số được điều trị CTX trong lần khám đó.
*/
int numerator, denominator;
var exams = new EntityCollection<TblExaminationInfoEntity>();
var tests = new EntityCollection<TblPreClinicsInfoEntity>();
var treatment = new EntityCollection<TblTreatmentInfoEntity>();
var thisPatients = new EntityCollection<TblPatientEntity>();
var thisBeginDate = this.BeginDate;
var thisEndDate = this.EndDate;
adapter.FetchEntityCollection(thisPatients, null);
adapter.FetchEntityCollection(exams, null);
adapter.FetchEntityCollection(tests, null);
adapter.FetchEntityCollection(treatment, null);
var exaPatients =
exams.Where(p => p.ExamDate >= thisBeginDate && p.ExamDate <= thisEndDate && p.NoSelfExam != 1)
.GroupBy(p => p.PatientId)
.Select(g => g.OrderBy(p => p.ExamDate).Last())
.ToList();
var arvTests = tests.Where(p => p.Testid == "01" && p.QuantityResult < 350 && p.TestDate <= thisEndDate && p.TestDate >= thisBeginDate).GroupBy(p => p.PatientId).Select(g => g.OrderBy(p => p.TestDate).Last()).ToList();
var arvClinics = exams.Where(p=>p.EndExamDate >=thisBeginDate && p.ExamDate <= thisEndDate).GroupBy(p => p.PatientId).Select(g => g.OrderBy(p => p.ExamDate).Last()).Where(p=>p.ClinicStage >=3).ToList();
var preresult = (from q in exaPatients
join p in arvTests on q.PatientId equals p.PatientId into g
from m in g.DefaultIfEmpty()
select new
{
q.PatientId,
TestDate = (m == null) ? DateTime.Today.AddYears(100) : m.TestDate,
Cd4Criteria = (m == null) ? false : true
}).ToList();
var postresult = (from q in preresult
join p in arvClinics on q.PatientId equals p.PatientId into g
from m in g.DefaultIfEmpty()
select new
{
q.PatientId,
q.TestDate,
q.Cd4Criteria,
ClinicDate = (m == null) ? DateTime.Today.AddYears(100) : m.ExamDate,
ClinicStageCriteria = (m == null) ? false : true
}).ToList();
var dDenominator = postresult.Where(m => m.Cd4Criteria || m.ClinicStageCriteria).Select(m => m.PatientId).ToList();
denominator = dDenominator.Count;
var lastExams = exams.Where(q => q.ExamDate >= thisBeginDate && q.ExamDate <= thisEndDate).OrderBy(q => q.ExamDate).GroupBy(p => p.PatientId).Select(p => p.Last()).Select(p => new { p.PatientId, p.ExamDate }).ToList();
var critiera = (from q in postresult where (q.ClinicStageCriteria || q.Cd4Criteria) join g in lastExams on q.PatientId equals g.PatientId select new { q.PatientId, CriteriaDate=g.ExamDate }).ToList();
var dNumerator = (from q in treatment.Where(m=>m.TreatmentId =="04").Select(m=>new{m.PatientId,m.TreatmentSdate, TreatmentEdate = m.TreatmentEdate==null?DateTime.Today.AddYears(100):m.TreatmentEdate}).ToList() join p in critiera on q.PatientId equals p.PatientId where p.CriteriaDate >= q.TreatmentSdate && p.CriteriaDate <=q.TreatmentEdate orderby q.TreatmentSdate group q by q.PatientId into g select g.First()).ToList().Select(m => m.PatientId).ToList();
numerator = dNumerator.Count;
var sDenominator = string.Join(",", dDenominator.ToArray());
var sNumerator = string.Join(",", dNumerator.ToArray());
double result = denominator == 0 ? 0 : (double)numerator / (double)denominator;
_Hivqual.Cells[row + 10, col].Value = result;
_Hivqual.Cells[row + 10, col + 1].Value = denominator;
_Tracking.Cells[row + 10, col + 2].Value = sDenominator; _Tracking.Cells[row + 10, col].Value = sNumerator;
}
private void Hivqual9()
{
/*
Tỷ lệ bệnh nhân được sàng lọc Lao trong lần khám gần nhất
Lọc những bệnh nhân đi có khám lâm sàng trong khoảng báo cáo - làm mẫ sốu, ko tính các lần người nhà tới khám.
Lọc bản ghi khám cuối cùng của những bệnh nhân này trong khoảng báo cáo thỏa mãn TbScreen==1 làm tử
*/
int numerator, denominator;
var thisPatients = new EntityCollection<TblPatientEntity>();
var Treatments = new EntityCollection<TblTreatmentInfoEntity>();
var exams = new EntityCollection<TblExaminationInfoEntity>();
adapter.FetchEntityCollection(thisPatients, null);
adapter.FetchEntityCollection(exams, null);
adapter.FetchEntityCollection(Treatments , null);
var thisBeginDate = this.BeginDate;
var thisEndDate = this.EndDate;
// loại đi những nguoi dang dieu tri lao - ngay kham cuoi nam trong khoan dieu tri lao
var Tbs = Treatments.Where(m=>m.TreatmentId == "02").Select(m=>new{ m.PatientId, m.TreatmentSdate, TreatmentEDate = m.TreatmentEdate==null?DateTime.Today.AddYears(100):m.TreatmentEdate}).ToList();
var lastExams = exams.Where(p => p.ExamDate >= thisBeginDate && p.ExamDate <= thisEndDate).GroupBy(p => p.PatientId).Select(g => g.OrderBy(m => m.ExamDate).Last()).Where(m => m.NoSelfExam != 1 && m.IsClinic == 1).Select(m => new { m.PatientId, m.ExamDate, m.TbScreen }).ToList();
List<string> Excludes = Tbs.Join(lastExams, p => p.PatientId, q => q.PatientId, (p, q) => new { p.PatientId, q.ExamDate, p.TreatmentEDate, p.TreatmentSdate }).Where(m => m.ExamDate <= m.TreatmentEDate && m.ExamDate >= m.TreatmentSdate).GroupBy(p => p.PatientId).Select(g => g.Key).ToList();
var dDenominator = lastExams.Where(p => !Excludes.Contains(p.PatientId)).Select(p=>new{p.PatientId,p.TbScreen }).ToList();
denominator = dDenominator.Count;
var dNumerator = dDenominator.Where(m => m.TbScreen == 1).Select(m => m.PatientId).ToList();
numerator = dNumerator.Count;
var sDenominator = string.Join(",", dDenominator.Select(m=>m.PatientId).ToArray());
var sNumerator = string.Join(",", dNumerator.ToArray());
double result = denominator == 0 ? 0 : (double)numerator / (double)denominator;
_Hivqual.Cells[row + 11, col].Value = result;
_Hivqual.Cells[row + 11, col + 1].Value = denominator;
_Tracking.Cells[row + 11, col + 1].Value = sDenominator; _Tracking.Cells[row + 11, col].Value = sNumerator;
}
private void Hivqual10()
{
/*
Mẫu số: Có ít nhất 1 lần khám trong giai đoạn đánh giá.
- Loại các bệnh nhân chuyển đến trong giai đoạn đánh giá
- Loại các bệnh nhân có ngày đăng kí +15 >= ngày cuối giai đoạn đánh giá
Tử số:
Từ mẫu, lọc các bênh nhân có ít nhất 1 KQ CD4 nằm trong giai đoạn đánh giá
*/
int numerator, denominator;
var thisPatients = new EntityCollection<TblPatientEntity>();
var exams = new EntityCollection<TblExaminationInfoEntity>();
var tests = new EntityCollection<TblPreClinicsInfoEntity>();
adapter.FetchEntityCollection(thisPatients, null);
adapter.FetchEntityCollection(exams, null);
adapter.FetchEntityCollection(tests, null);
var thisBeginDate = this.BeginDate;
var thisEndDate = this.EndDate;
// một lần khám trong giai đoạn đánh giá, chuyển tới == null hoặc < begindate
var denominatorset = (from q in exams join p in thisPatients on q.PatientId equals p.PatientId where (!(p.Dateofreferral!=null && p.Dateofreferral >= thisBeginDate && p.Dateofreferral<=thisEndDate) && p.DateofRegistration.Value.AddDays(15) < thisEndDate && q.ExamDate >= thisBeginDate && q.ExamDate <= thisEndDate) group q by q.PatientId into g select g.First()).ToList();
denominator = denominatorset.Count;
var numeratorset = (from q in tests join p in denominatorset on q.PatientId equals p.PatientId where q.TestDate >= thisBeginDate && q.TestDate <= thisEndDate && q.Testid == "01" group q by q.PatientId into g select g.First()).ToList();
var sDenominator = string.Join(",", denominatorset.Select(m => m.PatientId).ToArray());
var sNumerator = string.Join(",", numeratorset.Select(m => m.PatientId).ToArray());
numerator = numeratorset.Count;
double result = denominator == 0 ? 0 : (double)numerator / (double)denominator;
_Hivqual.Cells[row + 12, col].Value = result;
_Hivqual.Cells[row + 12, col + 1].Value = denominator;
_Tracking.Cells[row + 12, col + 1].Value = sDenominator; _Tracking.Cells[row + 12, col].Value = sNumerator;
}
#endregion
}
}

View File

@@ -0,0 +1,64 @@
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 clsLateAppointment
{
static DataAccessAdapter adapter = new DataAccessAdapter(SettingInfo.Constr);
LinqMetaData meta = new LinqMetaData(adapter);
public void FixLateAppointMent()
{
if (MessageBox.Show("Quá trình hiệu chỉnh có thễ sẽ diễn ra trong thời gian dài nếu dữ liệu lớn. Bạn có chắn chắn thực hiện", "Cảnh báo", MessageBoxButtons.OKCancel) == DialogResult.Cancel) return;
List <string> patients = meta.TblPatient.OrderBy(m => m.PatientId).Select(m => m.PatientId).ToList();
#region "Patients"
foreach (string PatientId in patients)
{
var PatientExams = meta.TblExaminationInfo.Where(m => m.PatientId == PatientId).OrderBy(m => m.ExamDate).ToList();
for (int i = 0; i < PatientExams.Count() - 1; i++)
{
short DayDiff = (i==0)?(short)0: (short)(System.Convert.ToDateTime(PatientExams[i].ExamDate)-System.Convert.ToDateTime(PatientExams[i - 1].ReExamDate)).TotalDays;
string UniqueKey = PatientExams[i].UniqueKey;
TblExaminationInfoEntity ExamInfo = new TblExaminationInfoEntity(UniqueKey);
adapter.FetchEntity(ExamInfo);
ExamInfo.DayDiff = DayDiff;
if (DayDiff == 0)
{
ExamInfo.Status = 1;
}
else
{
if (DayDiff < 0)
{
ExamInfo.Status = 2;
}
else
{
ExamInfo.Status = 3;
}
}
adapter.SaveEntity(ExamInfo, true);
}
}
#endregion
MessageBox.Show("Quá trình hiệu chỉnh đã kêt thúc", "Hiệu chỉnh dữ liệu", MessageBoxButtons.OK);
}
}
}

View File

@@ -0,0 +1,975 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Datalib.DatabaseSpecific;
using Datalib.Linq;
using Datalib.EntityClasses;
using Datalib.FactoryClasses;
using Datalib.HelperClasses;
using PatientMan.Classes;
using System.Windows.Forms;
namespace PatientMan.Classes
{
public class clsMer
{
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 LinqMetaData meta = new LinqMetaData(new DataAccessAdapter(SettingInfo.Constr));
public void Calculate()
{
_Rep = spreed.Document.Worksheets["Rep"];
_Tracking = spreed.Document.Worksheets["Tracking"];
CARE_NEW();
CARE_CURR();
TX_NEW();
TX_CURR();
TX_RETA();
TX_RETB();
TB_IPTA();
TB_IPTB();
TB_SCREENA();
TB_SCREENB();
_Rep.Cells[2, 1].Value = "Từ ngày " + BeginDate.ToShortDateString() + " Đến ngày " + EndDate.ToShortDateString();
}
private void CARE_NEW()
{
int[] indexM = new int[8];
int[] indexF = new int[8];
string[] indexsM = new string[8];
string[] indexsF = new string[8];
EntityCollection<TblExaminationInfoEntity> Exams = new EntityCollection<TblExaminationInfoEntity>();
EntityCollection<TblPatientEntity> Patients = new EntityCollection<TblPatientEntity>();
adapter.FetchEntityCollection(Exams, null);
adapter.FetchEntityCollection(Patients, null);
List<string> Includes = Exams.Where(p => p.ExamDate >= BeginDate && p.ExamDate <= EndDate).Select(p => p.PatientId).ToList();
#region Man
var indexMpreresult = Patients.Where(p => p.DateofRegistration >= BeginDate && p.DateofRegistration <= EndDate && p.Dateofreferral == null).Where(p => Includes.Contains(p.PatientId)).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).Where(p => p.Sex == 1).ToList();
var indexMresult = indexMpreresult.Join(meta.TblAgeGroup, p => p.Age, q => (int)q.Age, (p, q) => new { p.PatientId,p.Age, Grp1=q.Grp1.Trim() }).ToList();
indexM[0] = indexMresult.Where(p => p.Grp1 == "<1").Count();
indexsM[0] = string.Join(",", indexMresult.Where(p => p.Grp1 == "<1").Select(p=>p.PatientId).ToArray());
indexM[1] = indexMresult.Where(p => p.Grp1 == "1-4").Count();
indexsM[1] = string.Join(",", indexMresult.Where(p => p.Grp1 == "1-4").Select(p => p.PatientId).ToArray());
indexM[2] = indexMresult.Where(p => p.Grp1 == "5-9").Count();
indexsM[2] = string.Join(",", indexMresult.Where(p => p.Grp1 == "5-9").Select(p => p.PatientId).ToArray());
indexM[3] = indexMresult.Where(p => p.Grp1 == "10-14").Count();
indexsM[3] = string.Join(",", indexMresult.Where(p => p.Grp1 == "10-14").Select(p => p.PatientId).ToArray());
indexM[4] = indexMresult.Where(p => p.Grp1 == "15-19").Count();
indexsM[4] = string.Join(",", indexMresult.Where(p => p.Grp1 == "15-19").Select(p => p.PatientId).ToArray());
indexM[5] = indexMresult.Where(p => p.Grp1 == "20-24").Count();
indexsM[5] = string.Join(",", indexMresult.Where(p => p.Grp1 == "20-24").Select(p => p.PatientId).ToArray());
indexM[6] = indexMresult.Where(p => p.Grp1 == "25-49").Count();
indexsM[6] = string.Join(",", indexMresult.Where(p => p.Grp1 == "25-49").Select(p => p.PatientId).ToArray());
indexM[7] = indexMresult.Where(p => p.Grp1 == "50+").Count();
indexsM[7] = string.Join(",", indexMresult.Where(p => p.Grp1 == "50+").Select(p => p.PatientId).ToArray());
#endregion
#region Female
var indexFpreresult = Patients.Where(p => p.DateofRegistration >= BeginDate && p.DateofRegistration <= EndDate && p.Dateofreferral == null).Where(p => Includes.Contains(p.PatientId)).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).Where(p => p.Sex == 2).ToList();
var indexFresult = indexFpreresult.Join(meta.TblAgeGroup, p => p.Age, q => (int)q.Age, (p, q) => new { p.PatientId, q.Grp1 }).ToList();
indexF[0] = indexFresult.Where(p => p.Grp1 == "<1").Count();
indexsF[0] = string.Join(",", indexFresult.Where(p => p.Grp1 == "<1").Select(p => p.PatientId).ToArray());
indexF[1] = indexFresult.Where(p => p.Grp1 == "1-4").Count();
indexsF[1] = string.Join(",", indexFresult.Where(p => p.Grp1 == "1-4").Select(p => p.PatientId).ToArray());
indexF[2] = indexFresult.Where(p => p.Grp1 == "5-9").Count();
indexsF[2] = string.Join(",", indexFresult.Where(p => p.Grp1 == "5-9").Select(p => p.PatientId).ToArray());
indexF[3] = indexFresult.Where(p => p.Grp1 == "10-14").Count();
indexsF[3] = string.Join(",", indexFresult.Where(p => p.Grp1 == "10-14").Select(p => p.PatientId).ToArray());
indexF[4] = indexFresult.Where(p => p.Grp1 == "15-19").Count();
indexsF[4] = string.Join(",", indexFresult.Where(p => p.Grp1 == "15-19").Select(p => p.PatientId).ToArray());
indexF[5] = indexFresult.Where(p => p.Grp1 == "20-24").Count();
indexsF[5] = string.Join(",", indexFresult.Where(p => p.Grp1 == "20-24").Select(p => p.PatientId).ToArray());
indexF[6] = indexFresult.Where(p => p.Grp1 == "25-49").Count();
indexsF[6] = string.Join(",", indexFresult.Where(p => p.Grp1 == "25-49").Select(p => p.PatientId).ToArray());
indexF[7] = indexFresult.Where(p => p.Grp1 == "50+").Count();
indexsF[7] = string.Join(",", indexFresult.Where(p => p.Grp1 == "50+").Select(p => p.PatientId).ToArray());
#endregion
#region fill
int row = 4;
_Rep.Cells[row++, 2].Value = indexM[0]; _Tracking.Cells[row-1, 2].Value = indexsM[0];
_Rep.Cells[row++, 2].Value = indexM[1]; _Tracking.Cells[row - 1, 2].Value = indexsM[1];
_Rep.Cells[row++, 2].Value = indexM[2]; _Tracking.Cells[row - 1, 2].Value = indexsM[2];
_Rep.Cells[row++, 2].Value = indexM[3]; _Tracking.Cells[row - 1, 2].Value = indexsM[3];
_Rep.Cells[row++, 2].Value = indexM[4]; _Tracking.Cells[row - 1, 2].Value = indexsM[4];
_Rep.Cells[row++, 2].Value = indexM[5]; _Tracking.Cells[row - 1, 2].Value = indexsM[5];
_Rep.Cells[row++, 2].Value = indexM[6]; _Tracking.Cells[row - 1, 2].Value = indexsM[6];
_Rep.Cells[row++, 2].Value = indexM[7]; _Tracking.Cells[row - 1, 2].Value = indexsM[7];
//Nữ
_Rep.Cells[row++, 2].Value = indexF[0]; _Tracking.Cells[row - 1, 2].Value = indexsF[0];
_Rep.Cells[row++, 2].Value = indexF[1]; _Tracking.Cells[row - 1, 2].Value = indexsF[1];
_Rep.Cells[row++, 2].Value = indexF[2]; _Tracking.Cells[row - 1, 2].Value = indexsF[2];
_Rep.Cells[row++, 2].Value = indexF[3]; _Tracking.Cells[row - 1, 2].Value = indexsF[3];
_Rep.Cells[row++, 2].Value = indexF[4]; _Tracking.Cells[row - 1, 2].Value = indexsF[4];
_Rep.Cells[row++, 2].Value = indexF[5]; _Tracking.Cells[row - 1, 2].Value = indexsF[5];
_Rep.Cells[row++, 2].Value = indexF[6]; _Tracking.Cells[row - 1, 2].Value = indexsF[6];
_Rep.Cells[row++, 2].Value = indexF[7]; _Tracking.Cells[row - 1, 2].Value = indexsF[7];
#endregion
}
private void CARE_CURR()
{
int[] indexM = new int[8];
int[] indexF = new int[8];
string[] indexsM = new string[8];
string[] indexsF = new string[8];
EntityCollection<TblPatientEntity> Patients = new EntityCollection<TblPatientEntity>();
EntityCollection<TblExaminationInfoEntity> Exams = new EntityCollection<TblExaminationInfoEntity>();
EntityCollection<TblPreClinicsInfoEntity> PreClinicInfo = new EntityCollection<TblPreClinicsInfoEntity>();
adapter.FetchEntityCollection(Patients, null);
adapter.FetchEntityCollection(Exams, null);
adapter.FetchEntityCollection(PreClinicInfo, null);
List<string> clinicStage = Exams.Where(p => p.ExamDate >= BeginDate && p.ExamDate <= EndDate && p.ClinicStage != 0).Select(p => p.PatientId).ToList();
List<string> Tests = PreClinicInfo.Where(p => p.TestDate >= BeginDate && p.TestDate <= EndDate && (p.Testid == "01" || p.Testid == "02")).Select(p => p.PatientId).ToList();
#region Man
var indexMpreresult = Patients.Where(p => clinicStage.Contains(p.PatientId)).Union(Patients.Where(p => Tests.Contains(p.PatientId))).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).Where(p => p.Sex == 1).GroupBy(p => p.PatientId).Select(g => g.First()).ToList();
var indexMresult = indexMpreresult.Join(meta.TblAgeGroup, p => p.Age, q => (int)q.Age, (p, q) => new { p.PatientId, q.Grp1 }).ToList();
indexM[0] = indexMresult.Where(p => p.Grp1 == "<1").Count();
indexsM[0] = string.Join(",", indexMresult.Where(p => p.Grp1 == "<1").Select(p => p.PatientId).ToArray());
indexM[1] = indexMresult.Where(p => p.Grp1 == "1-4").Count();
indexsM[1] = string.Join(",", indexMresult.Where(p => p.Grp1 == "1-4").Select(p => p.PatientId).ToArray());
indexM[2] = indexMresult.Where(p => p.Grp1 == "5-9").Count();
indexsM[2] = string.Join(",", indexMresult.Where(p => p.Grp1 == "5-9").Select(p => p.PatientId).ToArray());
indexM[3] = indexMresult.Where(p => p.Grp1 == "10-14").Count();
indexsM[3] = string.Join(",", indexMresult.Where(p => p.Grp1 == "10-14").Select(p => p.PatientId).ToArray());
indexM[4] = indexMresult.Where(p => p.Grp1 == "15-19").Count();
indexsM[4] = string.Join(",", indexMresult.Where(p => p.Grp1 == "15-19").Select(p => p.PatientId).ToArray());
indexM[5] = indexMresult.Where(p => p.Grp1 == "20-24").Count();
indexsM[5] = string.Join(",", indexMresult.Where(p => p.Grp1 == "20-24").Select(p => p.PatientId).ToArray());
indexM[6] = indexMresult.Where(p => p.Grp1 == "25-49").Count();
indexsM[6] = string.Join(",", indexMresult.Where(p => p.Grp1 == "25-49").Select(p => p.PatientId).ToArray());
indexM[7] = indexMresult.Where(p => p.Grp1 == "50+").Count();
indexsM[7] = string.Join(",", indexMresult.Where(p => p.Grp1 == "50+").Select(p => p.PatientId).ToArray());
#endregion
#region Female
var indexFpreresult = Patients.Where(p => clinicStage.Contains(p.PatientId)).Union(Patients.Where(p => Tests.Contains(p.PatientId))).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).Where(p => p.Sex == 2).GroupBy(p => p.PatientId).Select(g => g.First()).ToList();
var indexFresult = indexFpreresult.Join(meta.TblAgeGroup, p => p.Age, q => (int)q.Age, (p, q) => new { p.PatientId, q.Grp1 }).ToList();
indexF[0] = indexFresult.Where(p => p.Grp1 == "<1").Count();
indexsF[0] = string.Join(",", indexFresult.Where(p => p.Grp1 == "<1").Select(p => p.PatientId).ToArray());
indexF[1] = indexFresult.Where(p => p.Grp1 == "1-4").Count();
indexsF[1] = string.Join(",", indexFresult.Where(p => p.Grp1 == "1-4").Select(p => p.PatientId).ToArray());
indexF[2] = indexFresult.Where(p => p.Grp1 == "5-9").Count();
indexsF[2] = string.Join(",", indexFresult.Where(p => p.Grp1 == "5-9").Select(p => p.PatientId).ToArray());
indexF[3] = indexFresult.Where(p => p.Grp1 == "10-14").Count();
indexsF[3] = string.Join(",", indexFresult.Where(p => p.Grp1 == "10-14").Select(p => p.PatientId).ToArray());
indexF[4] = indexFresult.Where(p => p.Grp1 == "15-19").Count();
indexsF[4] = string.Join(",", indexFresult.Where(p => p.Grp1 == "15-19").Select(p => p.PatientId).ToArray());
indexF[5] = indexFresult.Where(p => p.Grp1 == "20-24").Count();
indexsF[5] = string.Join(",", indexFresult.Where(p => p.Grp1 == "20-24").Select(p => p.PatientId).ToArray());
indexF[6] = indexFresult.Where(p => p.Grp1 == "25-49").Count();
indexsF[6] = string.Join(",", indexFresult.Where(p => p.Grp1 == "25-49").Select(p => p.PatientId).ToArray());
indexF[7] = indexFresult.Where(p => p.Grp1 == "50+").Count();
indexsF[7] = string.Join(",", indexFresult.Where(p => p.Grp1 == "50+").Select(p => p.PatientId).ToArray());
#endregion
#region fill
int row = 20;
//Nam
_Rep.Cells[row++, 2].Value = indexM[0]; _Tracking.Cells[row - 1, 2].Value = indexsM[0];
_Rep.Cells[row++, 2].Value = indexM[1]; _Tracking.Cells[row - 1, 2].Value = indexsM[1];
_Rep.Cells[row++, 2].Value = indexM[2]; _Tracking.Cells[row - 1, 2].Value = indexsM[2];
_Rep.Cells[row++, 2].Value = indexM[3]; _Tracking.Cells[row - 1, 2].Value = indexsM[3];
_Rep.Cells[row++, 2].Value = indexM[4]; _Tracking.Cells[row - 1, 2].Value = indexsM[4];
_Rep.Cells[row++, 2].Value = indexM[5]; _Tracking.Cells[row - 1, 2].Value = indexsM[5];
_Rep.Cells[row++, 2].Value = indexM[6]; _Tracking.Cells[row - 1, 2].Value = indexsM[6];
_Rep.Cells[row++, 2].Value = indexM[7]; _Tracking.Cells[row - 1, 2].Value = indexsM[7];
//Nữ
_Rep.Cells[row++, 2].Value = indexF[0]; _Tracking.Cells[row - 1, 2].Value = indexsF[0];
_Rep.Cells[row++, 2].Value = indexF[1]; _Tracking.Cells[row - 1, 2].Value = indexsF[1];
_Rep.Cells[row++, 2].Value = indexF[2]; _Tracking.Cells[row - 1, 2].Value = indexsF[2];
_Rep.Cells[row++, 2].Value = indexF[3]; _Tracking.Cells[row - 1, 2].Value = indexsF[3];
_Rep.Cells[row++, 2].Value = indexF[4]; _Tracking.Cells[row - 1, 2].Value = indexsF[4];
_Rep.Cells[row++, 2].Value = indexF[5]; _Tracking.Cells[row - 1, 2].Value = indexsF[5];
_Rep.Cells[row++, 2].Value = indexF[6]; _Tracking.Cells[row - 1, 2].Value = indexsF[6];
_Rep.Cells[row++, 2].Value = indexF[7]; _Tracking.Cells[row - 1, 2].Value = indexsF[7];
#endregion
}
private void TX_NEW()
{
int[] indexM = new int[8];
int[] indexF = new int[8];
string[] indexsM = new string[8];
string[] indexsF = new string[8];
#region Man
var indexMpreresult = meta.TblPatient.Where(p => p.DateofArv >= BeginDate && p.DateofArv <= EndDate && p.HaveArvBefore !=1 ).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).Where(p => p.Sex == 1).ToList();
var indexMresult = indexMpreresult.Join(meta.TblAgeGroup, p => p.Age, q => (int)q.Age, (p, q) => new { p.PatientId, q.Grp1 }).ToList();
indexM[0] = indexMresult.Where(p => p.Grp1 == "<1").Count();
indexsM[0] = string.Join(",", indexMresult.Where(p => p.Grp1 == "<1").Select(p => p.PatientId).ToArray());
indexM[1] = indexMresult.Where(p => p.Grp1 == "1-4").Count();
indexsM[1] = string.Join(",", indexMresult.Where(p => p.Grp1 == "1-4").Select(p => p.PatientId).ToArray());
indexM[2] = indexMresult.Where(p => p.Grp1 == "5-9").Count();
indexsM[2] = string.Join(",", indexMresult.Where(p => p.Grp1 == "5-9").Select(p => p.PatientId).ToArray());
indexM[3] = indexMresult.Where(p => p.Grp1 == "10-14").Count();
indexsM[3] = string.Join(",", indexMresult.Where(p => p.Grp1 == "10-14").Select(p => p.PatientId).ToArray());
indexM[4] = indexMresult.Where(p => p.Grp1 == "15-19").Count();
indexsM[4] = string.Join(",", indexMresult.Where(p => p.Grp1 == "15-19").Select(p => p.PatientId).ToArray());
indexM[5] = indexMresult.Where(p => p.Grp1 == "20-24").Count();
indexsM[5] = string.Join(",", indexMresult.Where(p => p.Grp1 == "20-24").Select(p => p.PatientId).ToArray());
indexM[6] = indexMresult.Where(p => p.Grp1 == "25-49").Count();
indexsM[6] = string.Join(",", indexMresult.Where(p => p.Grp1 == "25-49").Select(p => p.PatientId).ToArray());
indexM[7] = indexMresult.Where(p => p.Grp1 == "50+").Count();
indexsM[7] = string.Join(",", indexMresult.Where(p => p.Grp1 == "50+").Select(p => p.PatientId).ToArray());
#endregion
#region Female
var indexFpreresult = meta.TblPatient.Where(p => p.DateofArv >= BeginDate && p.DateofArv <= EndDate && p.HaveArvBefore != 1).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).Where(p => p.Sex == 2).ToList();
var indexFresult = indexFpreresult.Join(meta.TblAgeGroup, p => p.Age, q => (int)q.Age, (p, q) => new { p.PatientId, q.Grp1 }).ToList();
indexF[0] = indexFresult.Where(p => p.Grp1 == "<1").Count();
indexsF[0] = string.Join(",", indexFresult.Where(p => p.Grp1 == "<1").Select(p => p.PatientId).ToArray());
indexF[1] = indexFresult.Where(p => p.Grp1 == "1-4").Count();
indexsF[1] = string.Join(",", indexFresult.Where(p => p.Grp1 == "1-4").Select(p => p.PatientId).ToArray());
indexF[2] = indexFresult.Where(p => p.Grp1 == "5-9").Count();
indexsF[2] = string.Join(",", indexFresult.Where(p => p.Grp1 == "5-9").Select(p => p.PatientId).ToArray());
indexF[3] = indexFresult.Where(p => p.Grp1 == "10-14").Count();
indexsF[3] = string.Join(",", indexFresult.Where(p => p.Grp1 == "10-14").Select(p => p.PatientId).ToArray());
indexF[4] = indexFresult.Where(p => p.Grp1 == "15-19").Count();
indexsF[4] = string.Join(",", indexFresult.Where(p => p.Grp1 == "15-19").Select(p => p.PatientId).ToArray());
indexF[5] = indexFresult.Where(p => p.Grp1 == "20-24").Count();
indexsF[5] = string.Join(",", indexFresult.Where(p => p.Grp1 == "20-24").Select(p => p.PatientId).ToArray());
indexF[6] = indexFresult.Where(p => p.Grp1 == "25-49").Count();
indexsF[6] = string.Join(",", indexFresult.Where(p => p.Grp1 == "25-49").Select(p => p.PatientId).ToArray());
indexF[7] = indexFresult.Where(p => p.Grp1 == "50+").Count();
indexsF[7] = string.Join(",", indexFresult.Where(p => p.Grp1 == "50+").Select(p => p.PatientId).ToArray());
#endregion
#region fill
int row = 36;
//Nam
_Rep.Cells[row++, 2].Value = indexM[0]; _Tracking.Cells[row - 1, 2].Value = indexsM[0];
_Rep.Cells[row++, 2].Value = indexM[1]; _Tracking.Cells[row - 1, 2].Value = indexsM[1];
_Rep.Cells[row++, 2].Value = indexM[2]; _Tracking.Cells[row - 1, 2].Value = indexsM[2];
_Rep.Cells[row++, 2].Value = indexM[3]; _Tracking.Cells[row - 1, 2].Value = indexsM[3];
_Rep.Cells[row++, 2].Value = indexM[4]; _Tracking.Cells[row - 1, 2].Value = indexsM[4];
_Rep.Cells[row++, 2].Value = indexM[5]; _Tracking.Cells[row - 1, 2].Value = indexsM[5];
_Rep.Cells[row++, 2].Value = indexM[6]; _Tracking.Cells[row - 1, 2].Value = indexsM[6];
_Rep.Cells[row++, 2].Value = indexM[7]; _Tracking.Cells[row - 1, 2].Value = indexsM[7];
//Nữ
_Rep.Cells[row++, 2].Value = indexF[0]; _Tracking.Cells[row - 1, 2].Value = indexsF[0];
_Rep.Cells[row++, 2].Value = indexF[1]; _Tracking.Cells[row - 1, 2].Value = indexsF[1];
_Rep.Cells[row++, 2].Value = indexF[2]; _Tracking.Cells[row - 1, 2].Value = indexsF[2];
_Rep.Cells[row++, 2].Value = indexF[3]; _Tracking.Cells[row - 1, 2].Value = indexsF[3];
_Rep.Cells[row++, 2].Value = indexF[4]; _Tracking.Cells[row - 1, 2].Value = indexsF[4];
_Rep.Cells[row++, 2].Value = indexF[5]; _Tracking.Cells[row - 1, 2].Value = indexsF[5];
_Rep.Cells[row++, 2].Value = indexF[6]; _Tracking.Cells[row - 1, 2].Value = indexsF[6];
_Rep.Cells[row++, 2].Value = indexF[7]; _Tracking.Cells[row - 1, 2].Value = indexsF[7];
#endregion
}
private void TX_CURR()
{
var Patients = new EntityCollection<TblPatientEntity>();
var Treatments = new EntityCollection<TblTreatmentInfoEntity>();
adapter.FetchEntityCollection(Patients, null);
adapter.FetchEntityCollection(Treatments, null);
int[] indexM = new int[8];
int[] indexF = new int[8];
string[] indexsM = new string[8];
string[] indexsF = new string[8];
var LastArvs = Treatments.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 indexpreresult = 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();
#region Man
var indexMpreresult = indexpreresult.Where(p => p.Sex == 1).ToList();
var indexMresult = indexMpreresult.Join(meta.TblAgeGroup, p => p.Age, q => (int)q.Age, (p, q) => new { p.PatientId, q.Grp2 }).ToList();
indexM[0] = indexMresult.Where(p => p.Grp2 == "<1").Count();
indexsM[0] = string.Join(",", indexMresult.Where(p => p.Grp2 == "<1").Select(p => p.PatientId).ToArray());
indexM[1] = indexMresult.Where(p => p.Grp2 == "1-4").Count();
indexsM[1] = string.Join(",", indexMresult.Where(p => p.Grp2 == "1-4").Select(p => p.PatientId).ToArray());
indexM[2] = indexMresult.Where(p => p.Grp2 == "5-9").Count();
indexsM[2] = string.Join(",", indexMresult.Where(p => p.Grp2 == "5-9").Select(p => p.PatientId).ToArray());
indexM[3] = indexMresult.Where(p => p.Grp2 == "10-14").Count();
indexsM[3] = string.Join(",", indexMresult.Where(p => p.Grp2 == "10-14").Select(p => p.PatientId).ToArray());
indexM[4] = indexMresult.Where(p => p.Grp2 == "15-19").Count();
indexsM[4] = string.Join(",", indexMresult.Where(p => p.Grp2 == "15-19").Select(p => p.PatientId).ToArray());
indexM[5] = indexMresult.Where(p => p.Grp2 == "20+").Count();
indexsM[5] = string.Join(",", indexMresult.Where(p => p.Grp2 == "20+").Select(p => p.PatientId).ToArray());
#endregion
#region Female
var indexFpreresult = indexpreresult.Where(p => p.Sex == 2).ToList();
var indexFresult = indexFpreresult.Join(meta.TblAgeGroup, p => p.Age, q => (int)q.Age, (p, q) => new { p.PatientId, q.Grp2 }).ToList();
indexF[0] = indexFresult.Where(p => p.Grp2 == "<1").Count();
indexsF[0] = string.Join(",", indexFresult.Where(p => p.Grp2 == "<1").Select(p => p.PatientId).ToArray());
indexF[1] = indexFresult.Where(p => p.Grp2 == "1-4").Count();
indexsF[1] = string.Join(",", indexFresult.Where(p => p.Grp2 == "1-4").Select(p => p.PatientId).ToArray());
indexF[2] = indexFresult.Where(p => p.Grp2 == "5-9").Count();
indexsF[2] = string.Join(",", indexFresult.Where(p => p.Grp2 == "5-9").Select(p => p.PatientId).ToArray());
indexF[3] = indexFresult.Where(p => p.Grp2 == "10-14").Count();
indexsF[3] = string.Join(",", indexFresult.Where(p => p.Grp2 == "10-14").Select(p => p.PatientId).ToArray());
indexF[4] = indexFresult.Where(p => p.Grp2 == "15-19").Count();
indexsF[4] = string.Join(",", indexFresult.Where(p => p.Grp2 == "15-19").Select(p => p.PatientId).ToArray());
indexF[5] = indexFresult.Where(p => p.Grp2 == "20+").Count();
indexsF[5] = string.Join(",", indexFresult.Where(p => p.Grp2 == "20+").Select(p => p.PatientId).ToArray());
#endregion
#region fill
int row = 52;
//Nam
_Rep.Cells[row++, 2].Value = indexM[0]; _Tracking.Cells[row - 1, 2].Value = indexsM[0];
_Rep.Cells[row++, 2].Value = indexM[1]; _Tracking.Cells[row - 1, 2].Value = indexsM[1];
_Rep.Cells[row++, 2].Value = indexM[2]; _Tracking.Cells[row - 1, 2].Value = indexsM[2];
_Rep.Cells[row++, 2].Value = indexM[3]; _Tracking.Cells[row - 1, 2].Value = indexsM[3];
_Rep.Cells[row++, 2].Value = indexM[4]; _Tracking.Cells[row - 1, 2].Value = indexsM[4];
_Rep.Cells[row++, 2].Value = indexM[5]; _Tracking.Cells[row - 1, 2].Value = indexsM[5];
//Nữ
_Rep.Cells[row++, 2].Value = indexF[0]; _Tracking.Cells[row - 1, 2].Value = indexsF[0];
_Rep.Cells[row++, 2].Value = indexF[1]; _Tracking.Cells[row - 1, 2].Value = indexsF[1];
_Rep.Cells[row++, 2].Value = indexF[2]; _Tracking.Cells[row - 1, 2].Value = indexsF[2];
_Rep.Cells[row++, 2].Value = indexF[3]; _Tracking.Cells[row - 1, 2].Value = indexsF[3];
_Rep.Cells[row++, 2].Value = indexF[4]; _Tracking.Cells[row - 1, 2].Value = indexsF[4];
_Rep.Cells[row++, 2].Value = indexF[5]; _Tracking.Cells[row - 1, 2].Value = indexsF[5];
#endregion
}
private void TX_RETA()
{
var Patients = new EntityCollection<TblPatientEntity>();
var Treatments = new EntityCollection<TblTreatmentInfoEntity>();
adapter.FetchEntityCollection(Patients, null);
adapter.FetchEntityCollection(Treatments, null);
int[] indexM = new int[8];
int[] indexF = new int[8];
string[] indexsM = new string[8];
string[] indexsF = new string[8];
var Arvs = Treatments.Where(p => p.TreatmentSdate < EndDate && p.TreatmentSdate >= BeginDate.AddMonths(-12) && p.TreatmentId == "01").ToList();
var SelectedPatients = Arvs.Join(Patients.Where(p => p.DateofArv != null && p.DateofArv.Value.AddYears(1) > p.DateofRegistration && p.DateofArv >= BeginDate.AddMonths(-12) && p.DateofArv <= EndDate.AddMonths(-12)), a => a.PatientId, p => p.PatientId, (a, p) => new { p.PatientId, p.Sex, EndPointArv = p.DateofArv.Value.AddMonths(12), Age = p.DateofArv.Value.AddMonths(12).Year - p.BirthYear, a.TreatmentSdate, a.TreatmentEdate, a.ReasonId }).Where(p => p.TreatmentSdate <= p.EndPointArv).ToList();
var indexpreresult = SelectedPatients.GroupBy(p => p.PatientId).Select(g => g.OrderBy(p => p.TreatmentSdate).Last()).Select(p => new { p.PatientId, p.Sex, p.Age, moveout = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "09" ? true : false, lost = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "10" ? true : false, dead = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "11" ? true : false }).Where(p => !p.moveout && !p.dead && !p.lost).ToList();
#region Man
var indexMpreresult = indexpreresult.Where(p => p.Sex == 1).ToList();
var indexMresult = indexMpreresult.Join(meta.TblAgeGroup, p => p.Age, q => (int)q.Age, (p, q) => new { p.PatientId, q.Grp2 }).ToList();
indexM[0] = indexMresult.Where(p => p.Grp2 == "<1").Count();
indexsM[0] = string.Join(",", indexMresult.Where(p => p.Grp2 == "<1").Select(p => p.PatientId).ToArray());
indexM[1] = indexMresult.Where(p => p.Grp2 == "1-4").Count();
indexsM[1] = string.Join(",", indexMresult.Where(p => p.Grp2 == "1-4").Select(p => p.PatientId).ToArray());
indexM[2] = indexMresult.Where(p => p.Grp2 == "5-9").Count();
indexsM[2] = string.Join(",", indexMresult.Where(p => p.Grp2 == "5-9").Select(p => p.PatientId).ToArray());
indexM[3] = indexMresult.Where(p => p.Grp2 == "10-14").Count();
indexsM[3] = string.Join(",", indexMresult.Where(p => p.Grp2 == "10-14").Select(p => p.PatientId).ToArray());
indexM[4] = indexMresult.Where(p => p.Grp2 == "15-19").Count();
indexsM[4] = string.Join(",", indexMresult.Where(p => p.Grp2 == "15-19").Select(p => p.PatientId).ToArray());
indexM[5] = indexMresult.Where(p => p.Grp2 == "20+").Count();
indexsM[5] = string.Join(",", indexMresult.Where(p => p.Grp2 == "20+").Select(p => p.PatientId).ToArray());
#endregion
#region Female
var indexFpreresult = indexpreresult.Where(p => p.Sex == 2).ToList();
var indexFresult = indexFpreresult.Join(meta.TblAgeGroup, p => p.Age, q => (int)q.Age, (p, q) => new { p.PatientId, q.Grp2 }).ToList();
indexF[0] = indexFresult.Where(p => p.Grp2 == "<1").Count();
indexsF[0] = string.Join(",", indexFresult.Where(p => p.Grp2 == "<1").Select(p => p.PatientId).ToArray());
indexF[1] = indexFresult.Where(p => p.Grp2 == "1-4").Count();
indexsF[1] = string.Join(",", indexFresult.Where(p => p.Grp2 == "1-4").Select(p => p.PatientId).ToArray());
indexF[2] = indexFresult.Where(p => p.Grp2 == "5-9").Count();
indexsF[2] = string.Join(",", indexFresult.Where(p => p.Grp2 == "5-9").Select(p => p.PatientId).ToArray());
indexF[3] = indexFresult.Where(p => p.Grp2 == "10-14").Count();
indexsF[3] = string.Join(",", indexFresult.Where(p => p.Grp2 == "10-14").Select(p => p.PatientId).ToArray());
indexF[4] = indexFresult.Where(p => p.Grp2 == "15-19").Count();
indexsF[4] = string.Join(",", indexFresult.Where(p => p.Grp2 == "15-19").Select(p => p.PatientId).ToArray());
indexF[5] = indexFresult.Where(p => p.Grp2 == "20+").Count();
indexsF[5] = string.Join(",", indexFresult.Where(p => p.Grp2 == "20+").Select(p => p.PatientId).ToArray());
#endregion
#region fill
int row =64;
//Nam
_Rep.Cells[row++, 2].Value = indexM[0]; _Tracking.Cells[row - 1, 2].Value = indexsM[0];
_Rep.Cells[row++, 2].Value = indexM[1]; _Tracking.Cells[row - 1, 2].Value = indexsM[1];
_Rep.Cells[row++, 2].Value = indexM[2]; _Tracking.Cells[row - 1, 2].Value = indexsM[2];
_Rep.Cells[row++, 2].Value = indexM[3]; _Tracking.Cells[row - 1, 2].Value = indexsM[3];
_Rep.Cells[row++, 2].Value = indexM[4]; _Tracking.Cells[row - 1, 2].Value = indexsM[4];
_Rep.Cells[row++, 2].Value = indexM[5]; _Tracking.Cells[row - 1, 2].Value = indexsM[5];
//Nữ
_Rep.Cells[row++, 2].Value = indexF[0]; _Tracking.Cells[row - 1, 2].Value = indexsF[0];
_Rep.Cells[row++, 2].Value = indexF[1]; _Tracking.Cells[row - 1, 2].Value = indexsF[1];
_Rep.Cells[row++, 2].Value = indexF[2]; _Tracking.Cells[row - 1, 2].Value = indexsF[2];
_Rep.Cells[row++, 2].Value = indexF[3]; _Tracking.Cells[row - 1, 2].Value = indexsF[3];
_Rep.Cells[row++, 2].Value = indexF[4]; _Tracking.Cells[row - 1, 2].Value = indexsF[4];
_Rep.Cells[row++, 2].Value = indexF[5]; _Tracking.Cells[row - 1, 2].Value = indexsF[5];
#endregion
}
private void TX_RETB()
{
var Patients = new EntityCollection<TblPatientEntity>();
var Treatments = new EntityCollection<TblTreatmentInfoEntity>();
adapter.FetchEntityCollection(Patients, null);
adapter.FetchEntityCollection(Treatments, null);
int[] indexM = new int[8];
int[] indexF = new int[8];
string[] indexsM = new string[8];
string[] indexsF = new string[8];
var Arvs = Treatments.Where(p => p.TreatmentSdate < EndDate && p.TreatmentSdate >= BeginDate.AddMonths(-12) && p.TreatmentId == "01").ToList();
var SelectedPatients = Arvs.Join(Patients.Where(p => p.DateofArv != null && p.DateofArv.Value.AddYears(1) > p.DateofRegistration && p.DateofArv >= BeginDate.AddMonths(-12) && p.DateofArv <= EndDate.AddMonths(-12)), a => a.PatientId, p => p.PatientId, (a, p) => new { p.PatientId, p.Sex, EndPointArv = p.DateofArv.Value.AddMonths(12), Age = p.DateofArv.Value.AddMonths(12).Year - p.BirthYear, a.TreatmentSdate, a.TreatmentEdate, a.ReasonId }).Where(p => p.TreatmentSdate <= p.EndPointArv).ToList();
var indexpreresult = SelectedPatients.GroupBy(p => p.PatientId).Select(g => g.OrderBy(p => p.TreatmentSdate).Last()).Select(p => new { p.PatientId, p.Sex, p.Age, moveout = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "09" ? true : false }).Where(p => !p.moveout).ToList();
#region Man
var indexMpreresult = indexpreresult.Where(p => p.Sex == 1).ToList();
var indexMresult = indexMpreresult.Join(meta.TblAgeGroup, p => p.Age, q => (int)q.Age, (p, q) => new { p.PatientId, q.Grp2 }).ToList();
indexM[0] = indexMresult.Where(p => p.Grp2 == "<1").Count();
indexsM[0] = string.Join(",", indexMresult.Where(p => p.Grp2 == "<1").Select(p => p.PatientId).ToArray());
indexM[1] = indexMresult.Where(p => p.Grp2 == "1-4").Count();
indexsM[1] = string.Join(",", indexMresult.Where(p => p.Grp2 == "1-4").Select(p => p.PatientId).ToArray());
indexM[2] = indexMresult.Where(p => p.Grp2 == "5-9").Count();
indexsM[2] = string.Join(",", indexMresult.Where(p => p.Grp2 == "5-9").Select(p => p.PatientId).ToArray());
indexM[3] = indexMresult.Where(p => p.Grp2 == "10-14").Count();
indexsM[3] = string.Join(",", indexMresult.Where(p => p.Grp2 == "10-14").Select(p => p.PatientId).ToArray());
indexM[4] = indexMresult.Where(p => p.Grp2 == "15-19").Count();
indexsM[4] = string.Join(",", indexMresult.Where(p => p.Grp2 == "15-19").Select(p => p.PatientId).ToArray());
indexM[5] = indexMresult.Where(p => p.Grp2 == "20+").Count();
indexsM[5] = string.Join(",", indexMresult.Where(p => p.Grp2 == "20+").Select(p => p.PatientId).ToArray());
#endregion
#region Female
var indexFpreresult = indexpreresult.Where(p => p.Sex == 2).ToList();
var indexFresult = indexFpreresult.Join(meta.TblAgeGroup, p => p.Age, q => (int)q.Age, (p, q) => new { p.PatientId, q.Grp2 }).ToList();
indexF[0] = indexFresult.Where(p => p.Grp2 == "<1").Count();
indexsF[0] = string.Join(",", indexFresult.Where(p => p.Grp2 == "<1").Select(p => p.PatientId).ToArray());
indexF[1] = indexFresult.Where(p => p.Grp2 == "1-4").Count();
indexsF[1] = string.Join(",", indexFresult.Where(p => p.Grp2 == "1-4").Select(p => p.PatientId).ToArray());
indexF[2] = indexFresult.Where(p => p.Grp2 == "5-9").Count();
indexsF[2] = string.Join(",", indexFresult.Where(p => p.Grp2 == "5-9").Select(p => p.PatientId).ToArray());
indexF[3] = indexFresult.Where(p => p.Grp2 == "10-14").Count();
indexsF[3] = string.Join(",", indexFresult.Where(p => p.Grp2 == "10-14").Select(p => p.PatientId).ToArray());
indexF[4] = indexFresult.Where(p => p.Grp2 == "15-19").Count();
indexsF[4] = string.Join(",", indexFresult.Where(p => p.Grp2 == "15-19").Select(p => p.PatientId).ToArray());
indexF[5] = indexFresult.Where(p => p.Grp2 == "20+").Count();
indexsF[5] = string.Join(",", indexFresult.Where(p => p.Grp2 == "20+").Select(p => p.PatientId).ToArray());
#endregion
#region fill
int row = 76;
//Nam
_Rep.Cells[row++, 2].Value = indexM[0]; _Tracking.Cells[row - 1, 2].Value = indexsM[0];
_Rep.Cells[row++, 2].Value = indexM[1]; _Tracking.Cells[row - 1, 2].Value = indexsM[1];
_Rep.Cells[row++, 2].Value = indexM[2]; _Tracking.Cells[row - 1, 2].Value = indexsM[2];
_Rep.Cells[row++, 2].Value = indexM[3]; _Tracking.Cells[row - 1, 2].Value = indexsM[3];
_Rep.Cells[row++, 2].Value = indexM[4]; _Tracking.Cells[row - 1, 2].Value = indexsM[4];
_Rep.Cells[row++, 2].Value = indexM[5]; _Tracking.Cells[row - 1, 2].Value = indexsM[5];
//Nữ
_Rep.Cells[row++, 2].Value = indexF[0]; _Tracking.Cells[row - 1, 2].Value = indexsF[0];
_Rep.Cells[row++, 2].Value = indexF[1]; _Tracking.Cells[row - 1, 2].Value = indexsF[1];
_Rep.Cells[row++, 2].Value = indexF[2]; _Tracking.Cells[row - 1, 2].Value = indexsF[2];
_Rep.Cells[row++, 2].Value = indexF[3]; _Tracking.Cells[row - 1, 2].Value = indexsF[3];
_Rep.Cells[row++, 2].Value = indexF[4]; _Tracking.Cells[row - 1, 2].Value = indexsF[4];
_Rep.Cells[row++, 2].Value = indexF[5]; _Tracking.Cells[row - 1, 2].Value = indexsF[5];
#endregion
}
private void TB_IPTA()
{
int[] indexM = new int[8];
int[] indexF = new int[8];
string[] indexsM = new string[8];
string[] indexsF = new string[8];
var Patients = new EntityCollection<TblPatientEntity>();
var Exams = new EntityCollection<TblExaminationInfoEntity>();
var Treatments = new EntityCollection<TblTreatmentInfoEntity>();
adapter.FetchEntityCollection(Patients, null);
adapter.FetchEntityCollection(Exams, null);
adapter.FetchEntityCollection(Treatments, null);
List<string> Includes = Exams.Where(p => p.ExamDate >= BeginDate && p.ExamDate <= EndDate && p.ClinicStage != 0).Select(p => p.PatientId).ToList();
#region Man
var indexMpreresult = Patients.Where(p => p.DateofRegistration >= BeginDate && p.DateofRegistration <= EndDate && p.Dateofreferral == null).Where(p => Includes.Contains(p.PatientId)).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).Where(p => p.Sex == 1).ToList();
var indexMresult = indexMpreresult.Join(meta.TblAgeGroup, p => p.Age, q => (int)q.Age, (p, q) => new { p.PatientId, q.Grp2 }).ToList();
List<string> INH = Treatments.Where(p => p.TreatmentSdate >= BeginDate && p.TreatmentSdate <= EndDate && p.TreatmentId == "03").Select(p => p.PatientId).ToList();
indexM[0] = indexMresult.Where(p => p.Grp2 == "<1").Where(p=>INH.Contains(p.PatientId)).Count();
indexsM[0] = string.Join(",", indexMresult.Where(p => p.Grp2 == "<1").Where(p=>INH.Contains(p.PatientId)).Select(p => p.PatientId).ToArray());
indexM[1] = indexMresult.Where(p => p.Grp2 == "1-4").Where(p => INH.Contains(p.PatientId)).Count();
indexsM[1] = string.Join(",", indexMresult.Where(p => p.Grp2 == "1-4").Where(p => INH.Contains(p.PatientId)).Select(p => p.PatientId).ToArray());
indexM[2] = indexMresult.Where(p => p.Grp2 == "5-9").Where(p => INH.Contains(p.PatientId)).Count();
indexsM[2] = string.Join(",", indexMresult.Where(p => p.Grp2 == "5-9").Where(p => INH.Contains(p.PatientId)).Select(p => p.PatientId).ToArray());
indexM[3] = indexMresult.Where(p => p.Grp2 == "10-14").Where(p => INH.Contains(p.PatientId)).Count();
indexsM[3] = string.Join(",", indexMresult.Where(p => p.Grp2 == "10-14").Where(p => INH.Contains(p.PatientId)).Select(p => p.PatientId).ToArray());
indexM[4] = indexMresult.Where(p => p.Grp2 == "15-19").Where(p => INH.Contains(p.PatientId)).Count();
indexsM[4] = string.Join(",", indexMresult.Where(p => p.Grp2 == "15-19").Where(p => INH.Contains(p.PatientId)).Select(p => p.PatientId).ToArray());
indexM[5] = indexMresult.Where(p => p.Grp2 == "20+").Where(p => INH.Contains(p.PatientId)).Count();
indexsM[5] = string.Join(",", indexMresult.Where(p => p.Grp2 == "20+").Where(p => INH.Contains(p.PatientId)).Select(p => p.PatientId).ToArray());
#endregion
#region Female
var indexFpreresult = Patients.Where(p => p.DateofRegistration >= BeginDate && p.DateofRegistration <= EndDate && p.Dateofreferral == null).Where(p => Includes.Contains(p.PatientId)).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).Where(p => p.Sex == 2).ToList();
var indexFresult = indexFpreresult.Join(meta.TblAgeGroup, p => p.Age, q => (int)q.Age, (p, q) => new { p.PatientId, q.Grp2 }).ToList();
indexF[0] = indexFresult.Where(p => p.Grp2 == "<1").Where(p => INH.Contains(p.PatientId)).Count();
indexsF[0] = string.Join(",", indexFresult.Where(p => p.Grp2 == "<1").Where(p => INH.Contains(p.PatientId)).Select(p => p.PatientId).ToArray());
indexF[1] = indexFresult.Where(p => p.Grp2 == "1-4").Where(p => INH.Contains(p.PatientId)).Count();
indexsF[1] = string.Join(",", indexFresult.Where(p => p.Grp2 == "1-4").Where(p => INH.Contains(p.PatientId)).Select(p => p.PatientId).ToArray());
indexF[2] = indexFresult.Where(p => p.Grp2 == "5-9").Where(p => INH.Contains(p.PatientId)).Count();
indexsF[2] = string.Join(",", indexFresult.Where(p => p.Grp2 == "5-9").Where(p => INH.Contains(p.PatientId)).Select(p => p.PatientId).ToArray());
indexF[3] = indexFresult.Where(p => p.Grp2 == "10-14").Where(p => INH.Contains(p.PatientId)).Count();
indexsF[3] = string.Join(",", indexFresult.Where(p => p.Grp2 == "10-14").Where(p => INH.Contains(p.PatientId)).Select(p => p.PatientId).ToArray());
indexF[4] = indexFresult.Where(p => p.Grp2 == "15-19").Where(p => INH.Contains(p.PatientId)).Count();
indexsF[4] = string.Join(",", indexFresult.Where(p => p.Grp2 == "15-19").Where(p => INH.Contains(p.PatientId)).Select(p => p.PatientId).ToArray());
indexF[5] = indexFresult.Where(p => p.Grp2 == "20+").Where(p => INH.Contains(p.PatientId)).Count();
indexsF[5] = string.Join(",", indexFresult.Where(p => p.Grp2 == "20+").Where(p => INH.Contains(p.PatientId)).Select(p => p.PatientId).ToArray());
#endregion
#region fill
int row = 88;
//Nam
_Rep.Cells[row++, 2].Value = indexM[0]; _Tracking.Cells[row - 1, 2].Value = indexsM[0];
_Rep.Cells[row++, 2].Value = indexM[1]; _Tracking.Cells[row - 1, 2].Value = indexsM[1];
_Rep.Cells[row++, 2].Value = indexM[2]; _Tracking.Cells[row - 1, 2].Value = indexsM[2];
_Rep.Cells[row++, 2].Value = indexM[3]; _Tracking.Cells[row - 1, 2].Value = indexsM[3];
_Rep.Cells[row++, 2].Value = indexM[4]; _Tracking.Cells[row - 1, 2].Value = indexsM[4];
_Rep.Cells[row++, 2].Value = indexM[5]; _Tracking.Cells[row - 1, 2].Value = indexsM[5];
//Nữ
_Rep.Cells[row++, 2].Value = indexF[0]; _Tracking.Cells[row - 1, 2].Value = indexsF[0];
_Rep.Cells[row++, 2].Value = indexF[1]; _Tracking.Cells[row - 1, 2].Value = indexsF[1];
_Rep.Cells[row++, 2].Value = indexF[2]; _Tracking.Cells[row - 1, 2].Value = indexsF[2];
_Rep.Cells[row++, 2].Value = indexF[3]; _Tracking.Cells[row - 1, 2].Value = indexsF[3];
_Rep.Cells[row++, 2].Value = indexF[4]; _Tracking.Cells[row - 1, 2].Value = indexsF[4];
_Rep.Cells[row++, 2].Value = indexF[5]; _Tracking.Cells[row - 1, 2].Value = indexsF[5];
#endregion
}
private void TB_IPTB()
{
int[] indexM = new int[8];
int[] indexF = new int[8];
string[] indexsM = new string[8];
string[] indexsF = new string[8];
var Patients = new EntityCollection<TblPatientEntity>();
var Exams = new EntityCollection<TblExaminationInfoEntity>();
var Treatments = new EntityCollection<TblTreatmentInfoEntity>();
adapter.FetchEntityCollection(Patients, null);
adapter.FetchEntityCollection(Exams, null);
adapter.FetchEntityCollection(Treatments, null);
List<string> Includes = Exams.Where(p => p.ExamDate >= BeginDate && p.ExamDate <= EndDate && p.ClinicStage != 0).Select(p => p.PatientId).ToList();
#region Man
var indexMpreresult = Patients.Where(p => p.DateofRegistration >= BeginDate && p.DateofRegistration <= EndDate && p.Dateofreferral == null).Where(p => Includes.Contains(p.PatientId)).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).Where(p => p.Sex == 1).ToList();
var indexMresult = indexMpreresult.Join(meta.TblAgeGroup, p => p.Age, q => (int)q.Age, (p, q) => new { p.PatientId, q.Grp2 }).ToList();
indexM[0] = indexMresult.Where(p => p.Grp2 == "<1").Count();
indexsM[0] = string.Join(",", indexMresult.Where(p => p.Grp2 == "<1").Select(p => p.PatientId).ToArray());
indexM[1] = indexMresult.Where(p => p.Grp2 == "1-4").Count();
indexsM[1] = string.Join(",", indexMresult.Where(p => p.Grp2 == "1-4").Select(p => p.PatientId).ToArray());
indexM[2] = indexMresult.Where(p => p.Grp2 == "5-9").Count();
indexsM[2] = string.Join(",", indexMresult.Where(p => p.Grp2 == "5-9").Select(p => p.PatientId).ToArray());
indexM[3] = indexMresult.Where(p => p.Grp2 == "10-14").Count();
indexsM[3] = string.Join(",", indexMresult.Where(p => p.Grp2 == "10-14").Select(p => p.PatientId).ToArray());
indexM[4] = indexMresult.Where(p => p.Grp2 == "15-19").Count();
indexsM[4] = string.Join(",", indexMresult.Where(p => p.Grp2 == "15-19").Select(p => p.PatientId).ToArray());
indexM[5] = indexMresult.Where(p => p.Grp2 == "20+").Count();
indexsM[5] = string.Join(",", indexMresult.Where(p => p.Grp2 == "20+").Select(p => p.PatientId).ToArray());
#endregion
#region Female
var indexFpreresult = Patients.Where(p => p.DateofRegistration >= BeginDate && p.DateofRegistration <= EndDate && p.Dateofreferral == null).Where(p => Includes.Contains(p.PatientId)).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).Where(p => p.Sex == 2).ToList();
var indexFresult = indexFpreresult.Join(meta.TblAgeGroup, p => p.Age, q => (int)q.Age, (p, q) => new { p.PatientId, q.Grp2 }).ToList();
indexF[0] = indexFresult.Where(p => p.Grp2 == "<1").Count();
indexsF[0] = string.Join(",", indexFresult.Where(p => p.Grp2 == "<1").Select(p => p.PatientId).ToArray());
indexF[1] = indexFresult.Where(p => p.Grp2 == "1-4").Count();
indexsF[1] = string.Join(",", indexFresult.Where(p => p.Grp2 == "1-4").Select(p => p.PatientId).ToArray());
indexF[2] = indexFresult.Where(p => p.Grp2 == "5-9").Count();
indexsF[2] = string.Join(",", indexFresult.Where(p => p.Grp2 == "5-9").Select(p => p.PatientId).ToArray());
indexF[3] = indexFresult.Where(p => p.Grp2 == "10-14").Count();
indexsF[3] = string.Join(",", indexFresult.Where(p => p.Grp2 == "10-14").Select(p => p.PatientId).ToArray());
indexF[4] = indexFresult.Where(p => p.Grp2 == "15-19").Count();
indexsF[4] = string.Join(",", indexFresult.Where(p => p.Grp2 == "15-19").Select(p => p.PatientId).ToArray());
indexF[5] = indexFresult.Where(p => p.Grp2 == "20+").Count();
indexsF[5] = string.Join(",", indexFresult.Where(p => p.Grp2 == "20+").Select(p => p.PatientId).ToArray());
#endregion
#region fill
int row = 100;
//Nam
_Rep.Cells[row++, 2].Value = indexM[0]; _Tracking.Cells[row - 1, 2].Value = indexsM[0];
_Rep.Cells[row++, 2].Value = indexM[1]; _Tracking.Cells[row - 1, 2].Value = indexsM[1];
_Rep.Cells[row++, 2].Value = indexM[2]; _Tracking.Cells[row - 1, 2].Value = indexsM[2];
_Rep.Cells[row++, 2].Value = indexM[3]; _Tracking.Cells[row - 1, 2].Value = indexsM[3];
_Rep.Cells[row++, 2].Value = indexM[4]; _Tracking.Cells[row - 1, 2].Value = indexsM[4];
_Rep.Cells[row++, 2].Value = indexM[5]; _Tracking.Cells[row - 1, 2].Value = indexsM[5];
//Nữ
_Rep.Cells[row++, 2].Value = indexF[0]; _Tracking.Cells[row - 1, 2].Value = indexsF[0];
_Rep.Cells[row++, 2].Value = indexF[1]; _Tracking.Cells[row - 1, 2].Value = indexsF[1];
_Rep.Cells[row++, 2].Value = indexF[2]; _Tracking.Cells[row - 1, 2].Value = indexsF[2];
_Rep.Cells[row++, 2].Value = indexF[3]; _Tracking.Cells[row - 1, 2].Value = indexsF[3];
_Rep.Cells[row++, 2].Value = indexF[4]; _Tracking.Cells[row - 1, 2].Value = indexsF[4];
_Rep.Cells[row++, 2].Value = indexF[5]; _Tracking.Cells[row - 1, 2].Value = indexsF[5];
#endregion
}
private void TB_SCREENA()
{
int[] indexM = new int[8];
int[] indexF = new int[8];
string[] indexsM = new string[8];
string[] indexsF = new string[8];
EntityCollection<TblExaminationInfoEntity> Exams = new EntityCollection<TblExaminationInfoEntity>();
EntityCollection<TblPatientEntity> Patients = new EntityCollection<TblPatientEntity>();
EntityCollection<TblPreClinicsInfoEntity> PreClinicsInfo = new EntityCollection<TblPreClinicsInfoEntity>();
adapter.FetchEntityCollection(Exams, null);
adapter.FetchEntityCollection(Patients, null);
adapter.FetchEntityCollection(PreClinicsInfo, null);
List<string> clinicStage = Exams.Where(p => p.ExamDate >= BeginDate && p.ExamDate <= EndDate && p.ClinicStage != 0).Select(p => p.PatientId).ToList();
List<string> Tests = PreClinicsInfo.Where(p => p.TestDate >= BeginDate && p.TestDate <= EndDate && (p.Testid == "01" || p.Testid == "02")).Select(p => p.PatientId).ToList();
List<string> ClinicCondition = Tests.Union(clinicStage).ToList();
List<string> Includes = Exams.Where(p => p.ExamDate >= BeginDate && p.ExamDate <= EndDate).GroupBy(p => p.PatientId).Select(p => p.OrderBy(g => g.ExamDate).Last()).Where(p => p.TbScreen == 1 && p.ClinicStage != 0).Where(p => ClinicCondition.Contains(p.PatientId)).Select(p => p.PatientId).ToList();
//var g1 = Exams.Where(p => p.ExamDate >= BeginDate && p.ExamDate <= EndDate).GroupBy(p => p.PatientId).Select(p => p.OrderBy(g => g.ExamDate).Last()).ToList();
//Forms.frmTest frm = new Forms.frmTest();
//frm.grdTest.DataSource = g1;
//frm.Show();
#region Man
var indexMpreresult = Patients.Where(p => Includes.Contains(p.PatientId)).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).Where(p => p.Sex == 1).ToList();
var indexMresult = indexMpreresult.Join(meta.TblAgeGroup, p => p.Age, q => (int)q.Age, (p, q) => new { p.PatientId, q.Grp2 }).ToList();
indexM[0] = indexMresult.Where(p => p.Grp2 == "<1").Count();
indexsM[0] = string.Join(",", indexMresult.Where(p => p.Grp2 == "<1").Select(p => p.PatientId).ToArray());
indexM[1] = indexMresult.Where(p => p.Grp2 == "1-4").Count();
indexsM[1] = string.Join(",", indexMresult.Where(p => p.Grp2 == "1-4").Select(p => p.PatientId).ToArray());
indexM[2] = indexMresult.Where(p => p.Grp2 == "5-9").Count();
indexsM[2] = string.Join(",", indexMresult.Where(p => p.Grp2 == "5-9").Select(p => p.PatientId).ToArray());
indexM[3] = indexMresult.Where(p => p.Grp2 == "10-14").Count();
indexsM[3] = string.Join(",", indexMresult.Where(p => p.Grp2 == "10-14").Select(p => p.PatientId).ToArray());
indexM[4] = indexMresult.Where(p => p.Grp2 == "15-19").Count();
indexsM[4] = string.Join(",", indexMresult.Where(p => p.Grp2 == "15-19").Select(p => p.PatientId).ToArray());
indexM[5] = indexMresult.Where(p => p.Grp2 == "20+").Count();
indexsM[5] = string.Join(",", indexMresult.Where(p => p.Grp2 == "20+").Select(p => p.PatientId).ToArray());
#endregion
#region Female
var indexFpreresult = Patients.Where(p => Includes.Contains(p.PatientId)).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).Where(p => p.Sex == 2).ToList();
var indexFresult = indexFpreresult.Join(meta.TblAgeGroup, p => p.Age, q => (int)q.Age, (p, q) => new { p.PatientId, q.Grp2 }).ToList();
indexF[0] = indexFresult.Where(p => p.Grp2 == "<1").Count();
indexsF[0] = string.Join(",", indexFresult.Where(p => p.Grp2 == "<1").Select(p => p.PatientId).ToArray());
indexF[1] = indexFresult.Where(p => p.Grp2 == "1-4").Count();
indexsF[1] = string.Join(",", indexFresult.Where(p => p.Grp2 == "1-4").Select(p => p.PatientId).ToArray());
indexF[2] = indexFresult.Where(p => p.Grp2 == "5-9").Count();
indexsF[2] = string.Join(",", indexFresult.Where(p => p.Grp2 == "5-9").Select(p => p.PatientId).ToArray());
indexF[3] = indexFresult.Where(p => p.Grp2 == "10-14").Count();
indexsF[3] = string.Join(",", indexFresult.Where(p => p.Grp2 == "10-14").Select(p => p.PatientId).ToArray());
indexF[4] = indexFresult.Where(p => p.Grp2 == "15-19").Count();
indexsF[4] = string.Join(",", indexFresult.Where(p => p.Grp2 == "15-19").Select(p => p.PatientId).ToArray());
indexF[5] = indexFresult.Where(p => p.Grp2 == "20+").Count();
indexsF[5] = string.Join(",", indexFresult.Where(p => p.Grp2 == "20+").Select(p => p.PatientId).ToArray());
#endregion
#region fill
int row = 112;
//Nam
_Rep.Cells[row++, 2].Value = indexM[0]; _Tracking.Cells[row - 1, 2].Value = indexsM[0];
_Rep.Cells[row++, 2].Value = indexM[1]; _Tracking.Cells[row - 1, 2].Value = indexsM[1];
_Rep.Cells[row++, 2].Value = indexM[2]; _Tracking.Cells[row - 1, 2].Value = indexsM[2];
_Rep.Cells[row++, 2].Value = indexM[3]; _Tracking.Cells[row - 1, 2].Value = indexsM[3];
_Rep.Cells[row++, 2].Value = indexM[4]; _Tracking.Cells[row - 1, 2].Value = indexsM[4];
_Rep.Cells[row++, 2].Value = indexM[5]; _Tracking.Cells[row - 1, 2].Value = indexsM[5];
//Nữ
_Rep.Cells[row++, 2].Value = indexF[0]; _Tracking.Cells[row - 1, 2].Value = indexsF[0];
_Rep.Cells[row++, 2].Value = indexF[1]; _Tracking.Cells[row - 1, 2].Value = indexsF[1];
_Rep.Cells[row++, 2].Value = indexF[2]; _Tracking.Cells[row - 1, 2].Value = indexsF[2];
_Rep.Cells[row++, 2].Value = indexF[3]; _Tracking.Cells[row - 1, 2].Value = indexsF[3];
_Rep.Cells[row++, 2].Value = indexF[4]; _Tracking.Cells[row - 1, 2].Value = indexsF[4];
_Rep.Cells[row++, 2].Value = indexF[5]; _Tracking.Cells[row - 1, 2].Value = indexsF[5];
#endregion
}
private void TB_SCREENB()
{
int[] indexM = new int[8];
int[] indexF = new int[8];
string[] indexsM = new string[8];
string[] indexsF = new string[8];
EntityCollection<TblExaminationInfoEntity> Exams = new EntityCollection<TblExaminationInfoEntity>();
EntityCollection<TblPatientEntity> Patients = new EntityCollection<TblPatientEntity>();
EntityCollection<TblPreClinicsInfoEntity> PreClinicsInfo = new EntityCollection<TblPreClinicsInfoEntity>();
adapter.FetchEntityCollection(Exams, null);
adapter.FetchEntityCollection(Patients, null);
adapter.FetchEntityCollection(PreClinicsInfo, null);
List<string> Includes = Exams.Where(p => p.ExamDate >= BeginDate && p.ExamDate <= EndDate && p.ClinicStage != 0).Select(p => p.PatientId).ToList();
List<string> clinicStage = Exams.Where(p => p.ExamDate >= BeginDate && p.ExamDate <= EndDate && p.ClinicStage != 0).Select(p => p.PatientId).ToList();
List<string> Tests = PreClinicsInfo.Where(p => p.TestDate >= BeginDate && p.TestDate <= EndDate && (p.Testid == "01" || p.Testid == "02")).Select(p => p.PatientId).ToList();
#region Man
var indexMpreresult = Patients.Where(p => clinicStage.Contains(p.PatientId)).Union(Patients.Where(p => Tests.Contains(p.PatientId))).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).Where(p => p.Sex == 1).GroupBy(p => p.PatientId).Select(g => g.First()).ToList();
var indexMresult = indexMpreresult.Join(meta.TblAgeGroup, p => p.Age, q => (int)q.Age, (p, q) => new { p.PatientId, q.Grp2 }).ToList();
indexM[0] = indexMresult.Where(p => p.Grp2 == "<1").Count();
indexsM[0] = string.Join(",", indexMresult.Where(p => p.Grp2 == "<1").Select(p => p.PatientId).ToArray());
indexM[1] = indexMresult.Where(p => p.Grp2 == "1-4").Count();
indexsM[1] = string.Join(",", indexMresult.Where(p => p.Grp2 == "1-4").Select(p => p.PatientId).ToArray());
indexM[2] = indexMresult.Where(p => p.Grp2 == "5-9").Count();
indexsM[2] = string.Join(",", indexMresult.Where(p => p.Grp2 == "5-9").Select(p => p.PatientId).ToArray());
indexM[3] = indexMresult.Where(p => p.Grp2 == "10-14").Count();
indexsM[3] = string.Join(",", indexMresult.Where(p => p.Grp2 == "10-14").Select(p => p.PatientId).ToArray());
indexM[4] = indexMresult.Where(p => p.Grp2 == "15-19").Count();
indexsM[4] = string.Join(",", indexMresult.Where(p => p.Grp2 == "15-19").Select(p => p.PatientId).ToArray());
indexM[5] = indexMresult.Where(p => p.Grp2 == "20+").Count();
indexsM[5] = string.Join(",", indexMresult.Where(p => p.Grp2 == "20+").Select(p => p.PatientId).ToArray());
#endregion
#region Female
var indexFpreresult = Patients.Where(p => clinicStage.Contains(p.PatientId)).Union(Patients.Where(p => Tests.Contains(p.PatientId))).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).Where(p => p.Sex == 2).GroupBy(p => p.PatientId).Select(g => g.First()).ToList();
var indexFresult = indexFpreresult.Join(meta.TblAgeGroup, p => p.Age, q => (int)q.Age, (p, q) => new { p.PatientId, q.Grp2 }).ToList();
indexF[0] = indexFresult.Where(p => p.Grp2 == "<1").Count();
indexsF[0] = string.Join(",", indexFresult.Where(p => p.Grp2 == "<1").Select(p => p.PatientId).ToArray());
indexF[1] = indexFresult.Where(p => p.Grp2 == "1-4").Count();
indexsF[1] = string.Join(",", indexFresult.Where(p => p.Grp2 == "1-4").Select(p => p.PatientId).ToArray());
indexF[2] = indexFresult.Where(p => p.Grp2 == "5-9").Count();
indexsF[2] = string.Join(",", indexFresult.Where(p => p.Grp2 == "5-9").Select(p => p.PatientId).ToArray());
indexF[3] = indexFresult.Where(p => p.Grp2 == "10-14").Count();
indexsF[3] = string.Join(",", indexFresult.Where(p => p.Grp2 == "10-14").Select(p => p.PatientId).ToArray());
indexF[4] = indexFresult.Where(p => p.Grp2 == "15-19").Count();
indexsF[4] = string.Join(",", indexFresult.Where(p => p.Grp2 == "15-19").Select(p => p.PatientId).ToArray());
indexF[5] = indexFresult.Where(p => p.Grp2 == "20+").Count();
indexsF[5] = string.Join(",", indexFresult.Where(p => p.Grp2 == "20+").Select(p => p.PatientId).ToArray());
#endregion
#region fill
int row = 124;
//Nam
_Rep.Cells[row++, 2].Value = indexM[0]; _Tracking.Cells[row - 1, 2].Value = indexsM[0];
_Rep.Cells[row++, 2].Value = indexM[1]; _Tracking.Cells[row - 1, 2].Value = indexsM[1];
_Rep.Cells[row++, 2].Value = indexM[2]; _Tracking.Cells[row - 1, 2].Value = indexsM[2];
_Rep.Cells[row++, 2].Value = indexM[3]; _Tracking.Cells[row - 1, 2].Value = indexsM[3];
_Rep.Cells[row++, 2].Value = indexM[4]; _Tracking.Cells[row - 1, 2].Value = indexsM[4];
_Rep.Cells[row++, 2].Value = indexM[5]; _Tracking.Cells[row - 1, 2].Value = indexsM[5];
//Nữ
_Rep.Cells[row++, 2].Value = indexF[0]; _Tracking.Cells[row - 1, 2].Value = indexsF[0];
_Rep.Cells[row++, 2].Value = indexF[1]; _Tracking.Cells[row - 1, 2].Value = indexsF[1];
_Rep.Cells[row++, 2].Value = indexF[2]; _Tracking.Cells[row - 1, 2].Value = indexsF[2];
_Rep.Cells[row++, 2].Value = indexF[3]; _Tracking.Cells[row - 1, 2].Value = indexsF[3];
_Rep.Cells[row++, 2].Value = indexF[4]; _Tracking.Cells[row - 1, 2].Value = indexsF[4];
_Rep.Cells[row++, 2].Value = indexF[5]; _Tracking.Cells[row - 1, 2].Value = indexsF[5];
#endregion
}
}
}

View File

@@ -0,0 +1,96 @@
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 clsPMTCT
{
public DevExpress.XtraSpreadsheet.SpreadsheetControl spreed;
private DevExpress.Spreadsheet.Worksheet _Rep;
public DataAccessAdapter adapter = new DataAccessAdapter(SettingInfo.Constr);
public LinqMetaData meta = new LinqMetaData(new DataAccessAdapter(SettingInfo.Constr));
private int row = 9;
private int Num=0;
public void Calculate()
{
_Rep = spreed.Document.Worksheets["Rep"];
var children = meta.TblChild.Join(meta.TblPregnanceInfo, p => p.PreganceId, q => q.UniqueKey, (p, q) => new { p.ChildId, q.PatientId, q.EstimatedDelivery }).OrderBy(q => q.ChildId).ThenBy(q => q.EstimatedDelivery).Select(q => q.ChildId).ToList();
foreach (var child in children)
{
Num++;
clsChildInfo Chidlinfo = FillChild(child);
_Rep.Cells[row, 0].Value = Num;
_Rep.Cells[row, 1].Value = Chidlinfo.ChildName;
_Rep.Cells[row, 2].Value = Chidlinfo.Sex == "Nam" ? Chidlinfo.ChildBod :null;
_Rep.Cells[row, 3].Value = Chidlinfo.Sex == "Nữ" ? Chidlinfo.ChildBod: null;
_Rep.Cells[row, 4].Value = Chidlinfo.ChildName;
_Rep.Cells[row+1, 4].Value = Chidlinfo.ChildId;
_Rep.Cells[row, 5].Value = Chidlinfo.MotherName;
_Rep.Cells[row+1, 5].Value = Chidlinfo.MotherId;
_Rep.Cells[row, 8].Value = Chidlinfo.FeedingType;
_Rep.Cells[row, 9].Value = Chidlinfo.CTXDate;
_Rep.Cells[row+1, 9].Value = Chidlinfo.EmbrioAge;
_Rep.Cells[row, 10].Value = Chidlinfo.PCRDate1;
_Rep.Cells[row + 1, 10].Value = Chidlinfo.PCRResult1;
_Rep.Cells[row, 11].Value = Chidlinfo.PCRDate2;
_Rep.Cells[row + 1, 11].Value = Chidlinfo.PCRResult2;
_Rep.Cells[row , 12].Value = Chidlinfo.HIV18Result;
row = row + 2;
}
}
private clsChildInfo FillChild(string ChildId)
{
clsChildInfo ChildInfo = new clsChildInfo();
var currChild = meta.TblChild.Where(q => q.ChildId == ChildId).FirstOrDefault();
ChildInfo.ChildId = currChild.ChildId;
ChildInfo.ChildName = currChild.ChildName;
ChildInfo.ChildBod = meta.TblPregnanceInfo.Where(q => q.UniqueKey == currChild.PreganceId).FirstOrDefault().EstimatedDelivery.Value;
ChildInfo.Sex = currChild.Sex == 1 ? "Nam" : "Nữ";
ChildInfo.MotherId = meta.TblPregnanceInfo.Where(q => q.UniqueKey == currChild.PreganceId).FirstOrDefault().PatientId;
DateTime PreganceDate = meta.TblPregnanceInfo.Where(q => q.UniqueKey == currChild.PreganceId).FirstOrDefault().PregnanceDate.Value;
ChildInfo.MotherName = meta.TblPatient.Where(p => p.PatientId == ChildInfo.MotherId).FirstOrDefault().PatientName;
ChildInfo.FeedingType = currChild.FeedingType == 1 ? "Sữa mẹ":"Nuôi bộ";
ChildInfo.CTXDate = currChild.Ctxdate.Value;
ChildInfo.EmbrioAge = Math.Round(((TimeSpan)(PreganceDate - currChild.Ctxdate)).TotalDays / 7,0);
ChildInfo.PCRDate1 = currChild.Pcrcdate1.Value;
ChildInfo.PCRResult1 = currChild.Pcrresult1==1?"Âm tính":"Dương tính";
ChildInfo.PCRDate2 = currChild.Pcrcdate1.Value;
ChildInfo.PCRResult2 = currChild.Pcrresult2 == 1 ? "Âm tính" : "Dương tính";
ChildInfo.HIV18Date = (DateTime)currChild.Hiv18Date;
ChildInfo.HIV18Result = currChild.Hiv18Result == 1 ? "Âmtính" : "Dương tính";
return ChildInfo;
}
public void Dispose()
{
adapter.Dispose();
}
}
}

View File

@@ -0,0 +1,846 @@
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 clsProgress
{
public DevExpress.XtraSpreadsheet.SpreadsheetControl spreed;
public DateTime BeginDate;
public DateTime EndDate;
private DevExpress.Spreadsheet.Worksheet _Progress, _Tracking;
public DataAccessAdapter adapter = new DataAccessAdapter(SettingInfo.Constr);
public void Calculate()
{
_Progress = this.spreed.Document.Worksheets["Progress"];
_Tracking = this.spreed.Document.Worksheets["Tracking"];
//V1A();
// V1B();
V1C(); VIIPreArv(); VIIARV(); V3C();
}
private void V1A()
{
LinqMetaData meta = new LinqMetaData(adapter);
DateTime BeginDate = this.BeginDate;
DateTime EndDate = this.EndDate;
#region index1patie
// Chỉ số 1 - 1A - Số lượt bệnh nhân đến PKNT trong kỳ báo cáo - Liên quan đến điều trị Lao (TreatmentId = "02"
int[] index1 = { 0, 0 };
string[] indexs1 = { "", "" };
index1[0] = meta.TblExaminationInfo.Where(m => m.ExamDate >= BeginDate).Where(m => m.ExamDate <= EndDate).Where(m => m.NoSelfExam != 1).Select(g => g.PatientId).ToList().Count();
indexs1[0] = string.Join(",", meta.TblTreatmentInfo.Where(m => m.TreatmentSdate <= EndDate).Where(m => m.TreatmentEdate == null || m.TreatmentEdate > EndDate).GroupBy(m => m.PatientId).Select(g => g.Key).ToArray());
index1[1] = meta.TblExaminationInfo.Where(m => m.ExamDate >= BeginDate).Where(m => m.ExamDate <= EndDate).Where(m => m.NoSelfExam == 1).Select(g => g.PatientId).ToList().Count();
//Fill
_Progress.Cells[11, 3].Value = index1[0]; _Progress.Cells[11, 7].Value = index1[1];
_Tracking.Cells[11, 3].Value = indexs1[0]; _Tracking.Cells[11, 7].Value = indexs1[1];
#endregion
#region index2
//chỉ số 2 - 1A - số bệnh nhân mới đăng ký trong kỳ báo cáo
int[] index2 = { 0, 0, 0, 0, 0, 0 };
string[] indexs2 = { "", "", "", "", "", "" };
var index2result = meta.TblPatient.Where(m => m.DateofRegistration >= BeginDate).Where(m => m.DateofRegistration <= EndDate).Select(m => new { PatientId = m.PatientId, Sex = m.Sex, Age = EndDate.Year - m.BirthYear }).ToList();
// Nam < 1 tuổi
index2[0] = index2result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs2[0] = string.Join(",", index2result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index2[1] = index2result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs2[1] = string.Join(",", index2result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15
index2[2] = index2result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs2[2] = string.Join(",", index2result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nữ < 1 tuổi
index2[3] = index2result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs2[3] = string.Join(",", index2result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
// Nữ từ 1-14
index2[4] = index2result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs2[4] = string.Join(",", index2result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15
index2[5] = index2result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
// Fill
_Progress.Cells[12, 3].Value = index2[0]; _Progress.Cells[12, 4].Value = index2[1]; _Progress.Cells[12, 5].Value = index2[2];
_Progress.Cells[12, 7].Value = index2[3]; _Progress.Cells[12, 8].Value = index2[4]; _Progress.Cells[12, 9].Value = index2[5];
_Tracking.Cells[12, 3].Value = indexs2[0]; _Tracking.Cells[12, 4].Value = indexs2[1]; _Tracking.Cells[12, 5].Value = indexs2[2];
_Tracking.Cells[12, 7].Value = indexs2[3]; _Tracking.Cells[12, 8].Value = indexs2[4]; _Tracking.Cells[12, 9].Value = indexs2[5];
#endregion
#region index 3
//chỉ số 3 - 1A - số bệnh đang quản lý trong kỳ báo cáo
int[] index3 = { 0, 0, 0, 0, 0, 0 };
string[] indexs3 = { "", "", "", "", "", "" };
var index3preresult = meta.TblExaminationInfo.Where(m => m.ExamDate <= EndDate).Join(meta.TblPatient, e => e.PatientId, p => p.PatientId, (e, p) => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear, ExamDate = e.ExamDate, EndExamDate = e.EndExamDate }).ToList();
var index3result = index3preresult.GroupBy(m => m.PatientId).Select(g => g.OrderBy(m => m.ExamDate).Last()).Where(m => m.EndExamDate == null || m.EndExamDate > EndDate).ToList();
//Nam < 1 tuổi
index3[0] = index3result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs3[0] = string.Join(",", index3result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14`
index3[1] = index3result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs3[1] = string.Join(",", index3result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index3[2] = index3result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs3[2] = string.Join(",", index3result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index3[3] = index3result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs3[3] = string.Join(",", index3result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index3[4] = index3result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs3[4] = string.Join(",", index3result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index3[5] = index3result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs3[5] = string.Join(",", index3result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Fill
_Progress.Cells[13, 3].Value = index3[0]; _Progress.Cells[13, 4].Value = index3[1]; _Progress.Cells[13, 5].Value = index3[2];
_Progress.Cells[13, 7].Value = index3[3]; _Progress.Cells[13, 8].Value = index3[4]; _Progress.Cells[13, 9].Value = index3[5];
_Tracking.Cells[13, 3].Value = indexs3[0]; _Tracking.Cells[13, 4].Value = indexs3[1]; _Tracking.Cells[13, 5].Value = indexs3[2];
_Tracking.Cells[13, 7].Value = indexs3[3]; _Tracking.Cells[13, 8].Value = indexs3[4]; _Tracking.Cells[13, 9].Value = indexs3[5];
#endregion
}
private void V1B()
{
int age = 15;
LinqMetaData meta = new LinqMetaData(adapter);
DateTime thisBeginDate = this.BeginDate;
DateTime thisEndDate = this.EndDate;
DateTime EndDate = this.EndDate;
#region index1
// Chỉ số 1 - 1B - Số lượt bệnh nhân đến PKNT trong kỳ báo cáo - Liên quan đến điều trị Comtrimoxazole (TreatmentId = "04"
int[] index1 = { 0, 0, 0, 0 };
string[] indexs1 = { "", "", "", "" };
List<string> endTreatment = meta.TblReferralsTo.Where(m => m.EndDate <= thisBeginDate).GroupBy(m => m.PatientId).Select(g => g.Key).ToList();
List<string> Comtri = meta.TblTreatmentInfo.Where(c => !endTreatment.Contains(c.PatientId)).Where(m => m.TreatmentId == "04").Where(m => m.TreatmentSdate <= thisEndDate).Where(m => m.TreatmentEdate == null || m.TreatmentEdate > thisEndDate).GroupBy(m => m.PatientId).Select(g => g.Key).ToList();
var Result = meta.TblPatient.Where(c => Comtri.Contains(c.PatientId)).Select(m => new { PatientId = m.PatientId, Sex = m.Sex, Age = thisEndDate.Year - m.BirthYear }).ToList();
//Nam < 15
index1[0] = Result.Where(m => m.Age < age).Where(m => m.Sex == 1).Count();
//Nam >=15
index1[1] = Result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Count();
//Nữ < 15 tuổi
index1[2] = Result.Where(m => m.Age < age).Where(m => m.Sex == 2).Count();
//Nữ >=15
index1[3] = Result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Count();
_Progress.Cells[20, 3].Value = index1[0]; _Progress.Cells[20, 5].Value = index1[1]; _Progress.Cells[20, 7].Value = index1[2]; _Progress.Cells[20, 9].Value = index1[3];
_Tracking.Cells[20, 3].Value = indexs1[0]; _Tracking.Cells[20, 5].Value = indexs1[1]; _Tracking.Cells[20, 7].Value = indexs1[2]; _Tracking.Cells[20, 9].Value = indexs1[3];
#endregion
}
private void V1C()
{
LinqMetaData meta = new LinqMetaData(adapter);
EntityCollection<TblTreatmentInfoEntity> TreatmentInfo = new EntityCollection<TblTreatmentInfoEntity>();
EntityCollection <TblPatientEntity> Patients = new EntityCollection<TblPatientEntity>();
adapter.FetchEntityCollection(TreatmentInfo, null);
adapter.FetchEntityCollection(Patients, null);
int age = 15;
DateTime thisBeginDate = this.BeginDate;
DateTime thisEndDate = this.EndDate;
#region index1
////Chỉ số 1 - 1C - Số lượt bệnh nhân tự đến được sàng lọc Lao trong kỳ báo cáo
//int[] index1 = { 0, 0, 0, 0 };
//var tbScreens = meta.TblExaminationInfo.Where(p => p.TbScreen == 1).Where(p => p.ExamDate >= thisBeginDate && p.ExamDate <= thisEndDate).ToList();
//var tbPositive = tbScreens.Where(p => p.TbScreenResult == "02").ToList();
//var tbNegative = tbScreens.Where(p => p.TbScreenResult != "02").ToList();
//List<string> tbTreat = meta.TblTreatmentInfo.Where(p => p.TreatmentId == "02").Where(p => p.TreatmentSdate >= thisBeginDate && p.TreatmentSdate <= thisEndDate).GroupBy(p => p.PatientId).Select(g => g.Key).ToList();
//index1[0] = tbPositive.Where(p => tbTreat.Contains(p.PatientId)).ToList().Count();
//index1[1] = tbNegative.Where(p => tbTreat.Contains(p.PatientId)).ToList().Count();
//index1[2] = tbPositive.Count - index1[0];
//index1[3] = tbNegative.Count - index1[1];
////Fill
//_Progress.Cells[25, 3].Value = index1[0]; _Progress.Cells[25, 5].Value = index1[1];
//_Progress.Cells[25, 7].Value = index1[2]; _Progress.Cells[25, 9].Value = index1[3];
#endregion
#region index3
//Chỉ số 3 - Số bệnh nhân bắt đầu điều trị Lao trong kỳ báo cáo
//Lọc tất cả các bản ghi trong bảng tblTreatmentInfo có kiểu điều trị là Lao (02) và có ngày điều trị trong khoảng báo cáo, nhóm lại lấy bản ghi duy nhất
int[] index3 = { 0, 0 };
string[] indexs3 = {"", ""};
var index3prevresult = (from tr in TreatmentInfo where (tr.TreatmentId == "02" && tr.TreatmentSdate >= thisBeginDate && tr.TreatmentSdate <= thisEndDate) group tr by tr.PatientId into g select g.First()).ToList();
var index3result = index3prevresult.Join(Patients,
t => t.PatientId,
p => p.PatientId,
(t, p)
=> new { PatientId = p.PatientId, Sex = p.Sex, Age = thisEndDate.Year - p.BirthYear }).ToList();
//Nam
index3[0] = index3result.Where(m => m.Sex == 1).Count();
indexs3[0] = string.Join(",",index3result.Where(m => m.Sex == 1).Select(p=>p.PatientId).ToArray());
//Nữ
index3[1] = index3result.Where(m => m.Sex == 2).Count();
indexs3[1] = string.Join(",", index3result.Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
_Progress.Cells[16, 3].Value = index3[0]; _Progress.Cells[16, 7].Value = index3[1];
_Tracking.Cells[16, 3].Value = indexs3[0]; _Tracking.Cells[16, 7].Value = indexs3[1];
#endregion
#region index4
//Chỉ số 4 - 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[] index4 = { 0, 0, 0, 0 };
//string[] indexs4 = { "", "", "", "" };
//var index4prevresult = (from tr in TreatmentInfo where tr.TreatmentId == "03" group tr by tr.PatientId into g select g.OrderBy(p => p.TreatmentEdate).First()).Where(p => p.TreatmentEdate >= thisBeginDate && p.TreatmentEdate <= thisEndDate).ToList();
//var index4result = index4prevresult.Join(meta.TblPatient,
// t => t.PatientId,
// p => p.PatientId,
// (t, p)
// => new { PatientId = p.PatientId, Sex = p.Sex, Age = thisEndDate.Year - p.BirthYear }).ToList();
////Nam < 15
//index4[0] = index4result.Where(m => m.Age < age).Where(m => m.Sex == 1).Count();
////Nam >=15
//index4[1] = index4result.Where(m => m.Age >= age).Where(m => m.Sex == 1).Count();
////Nữ < 15 tuổi
//index4[2] = index4result.Where(m => m.Age < age).Where(m => m.Sex == 2).Count();
////Nữ >=15
//index4[3] = index4result.Where(m => m.Age >= age).Where(m => m.Sex == 2).Count();
////fill
//_Progress.Cells[31, 3].Value = index4[0]; _Progress.Cells[31, 5].Value = index4[1]; _Progress.Cells[31, 7].Value = index4[2]; _Progress.Cells[31, 9].Value = index4[3];
//_Tracking.Cells[31, 3].Value = indexs4[0]; _Tracking.Cells[31, 5].Value = indexs4[1]; _Tracking.Cells[31, 7].Value = indexs4[2]; _Tracking.Cells[31, 9].Value = indexs4[3];
#endregion
}
private void VIIPreArv()
{
//Dịch vụ trước điều trị ARV
EntityCollection<TblExaminationInfoEntity> exams = new EntityCollection<TblExaminationInfoEntity>();
EntityCollection<TblPatientEntity> Patients = new EntityCollection<TblPatientEntity>();
EntityCollection<TblReferralsToEntity> ReferralTo = new EntityCollection<TblReferralsToEntity>();
adapter.FetchEntityCollection(exams, null);
adapter.FetchEntityCollection(Patients, null);
adapter.FetchEntityCollection(ReferralTo, null);
int row = 0;
#region index1
// Đang quản lý
int[] index1 = { 0, 0, 0, 0, 0, 0 };
string[] indexs1 = { "", "", "", "", "", "" };
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 index1Result = Patients.Where(m => m.DateofArv >= EndDate || m.DateofArv == null).Where(p => ends.Contains(p.PatientId)).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).ToList();
//Nam < 1 tuổi
index1[0] = index1Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs1[0] = string.Join(",", index1Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index1[1] = index1Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs1[1] = string.Join(",", index1Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index1[2] = index1Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs1[2] = string.Join(",", index1Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index1[3] = index1Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs1[3] = string.Join(",", index1Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index1[4] = index1Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs1[4] = string.Join(",", index1Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index1[5] = index1Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs1[5] = string.Join(",", index1Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 21;
_Progress.Cells[row, 3].Value = index1[0]; _Progress.Cells[row, 4].Value = index1[1]; _Progress.Cells[row, 5].Value = index1[2];
_Progress.Cells[row, 7].Value = index1[3]; _Progress.Cells[row, 8].Value = index1[4]; _Progress.Cells[row, 9].Value = index1[5];
_Tracking.Cells[row, 3].Value = indexs1[0]; _Tracking.Cells[row, 4].Value = indexs1[1]; _Tracking.Cells[row, 5].Value = indexs1[2];
_Tracking.Cells[row, 7].Value = indexs1[3]; _Tracking.Cells[row, 8].Value = indexs1[4]; _Tracking.Cells[row, 9].Value = indexs1[5];
#endregion
#region index2
// Mới đăng ký trong kỳ báo cáo
int[] index2 = { 0, 0, 0, 0, 0, 0 };
string[] indexs2 = { "", "", "", "", "", "" };
var index2Result = Patients.Where(m => m.DateofRegistration >= BeginDate && m.DateofRegistration <= EndDate && m.Dateofreferral ==null).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).ToList();
//Nam < 1 tuổi
index2[0] = index2Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs2[0] = string.Join(",", index2Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index2[1] = index2Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs2[1] = string.Join(",", index2Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index2[2] = index2Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs2[2] = string.Join(",", index2Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index2[3] = index2Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs2[3] = string.Join(",", index2Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index2[4] = index2Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs2[4] = string.Join(",", index2Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index2[5] = index2Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs2[5] = string.Join(",", index2Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 22;
_Progress.Cells[row, 3].Value = index2[0]; _Progress.Cells[row, 4].Value = index2[1]; _Progress.Cells[row, 5].Value = index2[2];
_Progress.Cells[row, 7].Value = index2[3]; _Progress.Cells[row, 8].Value = index2[4]; _Progress.Cells[row, 9].Value = index2[5];
_Tracking.Cells[row, 3].Value = indexs2[0]; _Tracking.Cells[row, 4].Value = indexs2[1]; _Tracking.Cells[row, 5].Value = indexs2[2];
_Tracking.Cells[row, 7].Value = indexs2[3]; _Tracking.Cells[row, 8].Value = indexs2[4]; _Tracking.Cells[row, 9].Value = indexs2[5];
#endregion
#region index3
//Điều trị lại trong kỳ báo cáo
int[] index3 = { 0, 0, 0, 0, 0, 4 };
string[] indexs3 = { "", "", "", "", "", "" };
var index3Preresult = exams.Where(m => m.ExamDate >= BeginDate && m.ExamDate <= EndDate && m.ReTreatment == 1).ToList();
var index3result = index3Preresult.Join(Patients, e => e.PatientId, p => p.PatientId, (e, p) => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear, ExamDate = e.ExamDate, DateofArv = p.DateofArv }).Where(m => m.DateofArv == null || m.ExamDate <= m.DateofArv).ToList();
//Nam < 1 tuổi
index3[0] = index3result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs3[0] = string.Join(",", index3result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index3[1] = index3result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs3[1] = string.Join(",", index3result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index3[2] = index3result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs3[2] = string.Join(",", index3result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index3[3] = index3result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs3[3] = string.Join(",", index3result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index3[4] = index3result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs3[4] = string.Join(",", index3result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index3[5] = index3result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs3[5] = string.Join(",", index3result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 23;
_Progress.Cells[row, 3].Value = index3[0]; _Progress.Cells[row, 4].Value = index3[1]; _Progress.Cells[row, 5].Value = index3[2];
_Progress.Cells[row, 7].Value = index3[3]; _Progress.Cells[row, 8].Value = index3[4]; _Progress.Cells[row, 9].Value = index3[5];
_Tracking.Cells[row, 3].Value = indexs3[0]; _Tracking.Cells[row, 4].Value = indexs3[1]; _Tracking.Cells[row, 5].Value = indexs3[2];
_Tracking.Cells[row, 7].Value = indexs3[3]; _Tracking.Cells[row, 8].Value = indexs3[4]; _Tracking.Cells[row, 9].Value = indexs3[5];
#endregion
#region index4
//Chuyển đến trong kỳ báo cáo
int[] index4 = { 0, 0, 0, 0, 0, 0 };
string[] indexs4 = { "", "", "", "", "", "" };
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 { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).ToList();
var index4Result = Patients.Where(p => p.Dateofreferral != null && p.DateofRegistration >= BeginDate && p.DateofRegistration <= EndDate && p.HaveArvBefore != 1).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).ToList();
index4Result.AddRange(Returns);
//Nam < 1 tuổi
index4[0] = index4Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs4[0] = string.Join(",", index4Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(q => q.PatientId).ToArray());
// Nam từ 1-14
index4[1] = index4Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs4[1] = string.Join(",", index4Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(q => q.PatientId).ToArray());
// Nam từ 15 tuổi
index4[2] = index4Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs4[2] = string.Join(",", index4Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(q => q.PatientId).ToArray());
//Nữ < 1 tuổi
index4[3] = index4Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs4[3] = string.Join(",", index4Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(q => q.PatientId).ToArray());
//Nữ từ 1-14
index4[4] = index4Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs4[4] = string.Join(",", index4Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(q => q.PatientId).ToArray());
//Nữ từ 15 tuổi
index4[5] = index4Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs4[5] = string.Join(",", index4Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(q => q.PatientId).ToArray());
//fill
row = 24;
_Progress.Cells[row, 3].Value = index4[0]; _Progress.Cells[row, 4].Value = index4[1]; _Progress.Cells[row, 5].Value = index4[2];
_Progress.Cells[row, 7].Value = index4[3]; _Progress.Cells[row, 8].Value = index4[4]; _Progress.Cells[row, 9].Value = index4[5];
_Tracking.Cells[row, 3].Value = indexs4[0]; _Tracking.Cells[row, 4].Value = indexs4[1]; _Tracking.Cells[row, 5].Value = indexs4[2];
_Tracking.Cells[row, 7].Value = indexs4[3]; _Tracking.Cells[row, 8].Value = indexs4[4]; _Tracking.Cells[row, 9].Value = indexs4[5];
#endregion
#region index5
//Chuyển đi trong kỳ báo cáo
int[] index5 = { 0, 0, 0, 0, 0, 0 };
string[] indexs5 = { "", "", "", "", "", "" };
var referrals = ReferralTo.Where(p => p.EndDate >= BeginDate && p.EndDate <= EndDate && p.TypeId == "09").ToList();
var index5Result = referrals.Join(Patients, 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 < 1 tuổi
index5[0] = index5Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs5[0] = string.Join(",", index5Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index5[1] = index5Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs5[1] = string.Join(",", index5Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index5[2] = index5Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs5[2] = string.Join(",", index5Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index5[3] = index5Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs5[3] = string.Join(",", index5Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index5[4] = index5Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs5[4] = string.Join(",", index5Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index5[5] = index5Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs5[5] = string.Join(",", index5Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 25;
_Progress.Cells[row, 3].Value = index5[0]; _Progress.Cells[row, 4].Value = index5[1]; _Progress.Cells[row, 5].Value = index5[2];
_Progress.Cells[row, 7].Value = index5[3]; _Progress.Cells[row, 8].Value = index5[4]; _Progress.Cells[row, 9].Value = index5[5];
_Tracking.Cells[row, 3].Value = indexs5[0]; _Tracking.Cells[row, 4].Value = indexs5[1]; _Tracking.Cells[row, 5].Value = indexs5[2];
_Tracking.Cells[row, 7].Value = indexs5[3]; _Tracking.Cells[row, 8].Value = indexs5[4]; _Tracking.Cells[row, 9].Value = indexs5[5];
#endregion
#region index6
int[] index6 = { 0, 0, 0, 0, 0, 0 };
string[] indexs6 = { "", "", "", "", "", "" };
var lossfollows = ReferralTo.Where(p => p.EndDate >= BeginDate && p.EndDate <= EndDate && p.TypeId == "10").ToList();
var index6Result = lossfollows.Join(Patients, 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 < 1 tuổi
index6[0] = index6Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs6[0] = string.Join(",", index6Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index6[1] = index6Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs6[1] = string.Join(",", index6Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index6[2] = index6Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs6[2] = string.Join(",", index6Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index6[3] = index6Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs6[3] = string.Join(",", index6Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index6[4] = index6Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs6[4] = string.Join(",", index6Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index6[5] = index6Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs6[5] = string.Join(",", index6Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 26;
_Progress.Cells[row, 3].Value = index6[0]; _Progress.Cells[row, 4].Value = index6[1]; _Progress.Cells[row, 5].Value = index6[2];
_Progress.Cells[row, 7].Value = index6[3]; _Progress.Cells[row, 8].Value = index6[4]; _Progress.Cells[row, 9].Value = index6[5];
_Tracking.Cells[row, 3].Value = indexs6[0]; _Tracking.Cells[row, 4].Value = indexs6[1]; _Tracking.Cells[row, 5].Value = indexs6[2];
_Tracking.Cells[row, 7].Value = indexs6[3]; _Tracking.Cells[row, 8].Value = indexs6[4]; _Tracking.Cells[row, 9].Value = indexs6[5];
#endregion
#region index7
//Tử vong
int[] index7 = { 0, 0, 0, 0, 0, 0 };
string[] indexs7 = { "", "", "", "", "", "" };
var deaths = ReferralTo.Where(p => p.EndDate >= BeginDate && p.EndDate <= EndDate && p.TypeId == "11").ToList();
var index7Result = deaths.Join(Patients, 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 < 1 tuổi
index7[0] = index7Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs7[0] = string.Join(",", index7Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(q => q.PatientId).ToArray());
// Nam từ 1-14
index7[1] = index7Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs7[1] = string.Join(",", index7Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(q => q.PatientId).ToArray());
// Nam từ 15 tuổi
index7[2] = index7Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs7[2] = string.Join(",", index7Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(q => q.PatientId).ToArray());
//Nữ < 1 tuổi
index7[3] = index7Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs7[3] = string.Join(",", index7Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(q => q.PatientId).ToArray());
//Nữ từ 1-14
index7[4] = index7Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs7[4] = string.Join(",", index7Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(q => q.PatientId).ToArray());
//Nữ từ 15 tuổi
index7[5] = index7Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs7[5] = string.Join(",", index7Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(q => q.PatientId).ToArray());
//fill
row = 27;
_Progress.Cells[row, 3].Value = index7[0]; _Progress.Cells[row, 4].Value = index7[1]; _Progress.Cells[row, 5].Value = index7[2];
_Progress.Cells[row, 7].Value = index7[3]; _Progress.Cells[row, 8].Value = index7[4]; _Progress.Cells[row, 9].Value = index7[5];
_Tracking.Cells[row, 3].Value = indexs7[0]; _Tracking.Cells[row, 4].Value = indexs7[1]; _Tracking.Cells[row, 5].Value = indexs7[2];
_Tracking.Cells[row, 7].Value = indexs7[3]; _Tracking.Cells[row, 8].Value = indexs7[4]; _Tracking.Cells[row, 9].Value = indexs7[5];
#endregion
}
private void VIIARV()
{
//Dịch vụ sau điều trị ARV
LinqMetaData meta = new LinqMetaData(adapter);
EntityCollection<TblPatientEntity> Patients = new EntityCollection<TblPatientEntity>();
EntityCollection<TblTreatmentInfoEntity> TreatmentInfo = new EntityCollection<TblTreatmentInfoEntity>();
EntityCollection<TblExaminationInfoEntity> Exams = new EntityCollection<TblExaminationInfoEntity>();
adapter.FetchEntityCollection(Patients, null);
adapter.FetchEntityCollection(TreatmentInfo, null);
adapter.FetchEntityCollection(Exams, null);
#region index1
// Đang quản lý
int[] index1 = { 0, 0, 0, 0, 0, 0 };
string[] indexs1 = { "", "", "", "", "", "" };
int row = 0;
//Lưu ý những cá nhân được đánh dấu là kết thúc điều trị nhưng lại quay lại
List<string> LastArv = TreatmentInfo.Where(p => p.TreatmentSdate <= EndDate && p.TreatmentId == "01").GroupBy(p => p.PatientId).Select(p => p.OrderBy(q => q.TreatmentSdate).Last()).ToList().Where(p => p.TreatmentEdate == null || p.TreatmentEdate > EndDate).Select(p => p.PatientId).ToList();
var index1Result = Patients.Where(p => LastArv.Contains(p.PatientId)).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).ToList();
//Nam < 1 tuổi
index1[0] = index1Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs1[0] = string.Join(",", index1Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index1[1] = index1Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs1[1] = string.Join(",", index1Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index1[2] = index1Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs1[2] = string.Join(",", index1Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index1[3] = index1Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs1[3] = string.Join(",", index1Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index1[4] = index1Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs1[4] = string.Join(",", index1Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index1[5] = index1Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs1[5] = string.Join(",", index1Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 32;
_Progress.Cells[row, 3].Value = index1[0]; _Progress.Cells[row, 4].Value = index1[1]; _Progress.Cells[row, 5].Value = index1[2];
_Progress.Cells[row, 7].Value = index1[3]; _Progress.Cells[row, 8].Value = index1[4]; _Progress.Cells[row, 9].Value = index1[5];
_Tracking.Cells[row, 3].Value = indexs1[0]; _Tracking.Cells[row, 4].Value = indexs1[1]; _Tracking.Cells[row, 5].Value = indexs1[2];
_Tracking.Cells[row, 7].Value = indexs1[3]; _Tracking.Cells[row, 8].Value = indexs1[4]; _Tracking.Cells[row, 9].Value = indexs1[5];
#endregion
#region index2
//Bắt đầu điều trị Arv trong kỳ báo cáo
int[] index2 = { 0, 0, 0, 0, 0, 0 };
string[] indexs2 = { "", "", "", "", "", "" };
var index2Result = Patients.Where(m => m.DateofArv != null && m.DateofArv >= BeginDate && m.DateofArv <= EndDate && m.HaveArvBefore != 1).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).ToList();
//Nam < 1 tuổi
index2[0] = index2Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs2[0] = string.Join(",", index2Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index2[1] = index2Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs2[1] = string.Join(",", index2Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index2[2] = index2Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs2[2] = string.Join(",", index2Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index2[3] = index2Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs2[3] = string.Join(",", index2Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index2[4] = index2Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs2[4] = string.Join(",", index2Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index2[5] = index2Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs2[5] = string.Join(",", index2Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 33;
_Progress.Cells[row, 3].Value = index2[0]; _Progress.Cells[row, 4].Value = index2[1]; _Progress.Cells[row, 5].Value = index2[2];
_Progress.Cells[row, 7].Value = index2[3]; _Progress.Cells[row, 8].Value = index2[4]; _Progress.Cells[row, 9].Value = index2[5];
_Tracking.Cells[row, 3].Value = indexs2[0]; _Tracking.Cells[row, 4].Value = indexs2[1]; _Tracking.Cells[row, 5].Value = indexs2[2];
_Tracking.Cells[row, 7].Value = indexs2[3]; _Tracking.Cells[row, 8].Value = indexs2[4]; _Tracking.Cells[row, 9].Value = indexs2[5];
#endregion
#region index3
//Điều trị lại trong kỳ báo cáo
int[] index3 = { 0, 0, 0, 0, 0, 4 };
string[] indexs3 = { "", "", "", "", "", "" };
var index3Preresult = Exams.Where(m => m.ExamDate >= BeginDate && m.ExamDate <= EndDate && m.ReTreatment == 1).ToList();
var index3Result = index3Preresult.Join(Patients, e => e.PatientId, p => p.PatientId, (e, p) => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear, ExamDate = e.ExamDate, DateofArv = p.DateofArv }).Where(m => m.DateofArv != null && m.ExamDate > m.DateofArv).ToList();
//Nam < 1 tuổi
index3[0] = index3Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs3[0] = string.Join(",", index3Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index3[1] = index3Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs3[1] = string.Join(",", index3Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index3[2] = index3Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs3[2] = string.Join(",", index3Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index3[3] = index3Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs3[3] = string.Join(",", index3Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index3[4] = index3Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs3[4] = string.Join(",", index3Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index3[5] = index3Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs3[5] = string.Join(",", index3Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 34;
_Progress.Cells[row, 3].Value = index3[0]; _Progress.Cells[row, 4].Value = index3[1]; _Progress.Cells[row, 5].Value = index3[2];
_Progress.Cells[row, 7].Value = index3[3]; _Progress.Cells[row, 8].Value = index3[4]; _Progress.Cells[row, 9].Value = index3[5];
_Tracking.Cells[row, 3].Value = indexs3[0]; _Tracking.Cells[row, 4].Value = indexs3[1]; _Tracking.Cells[row, 5].Value = indexs3[2];
_Tracking.Cells[row, 7].Value = indexs3[3]; _Tracking.Cells[row, 8].Value = indexs3[4]; _Tracking.Cells[row, 9].Value = indexs3[5];
#endregion
#region index4
//Chuyển đến trong kỳ báo cáo
int[] index4 = { 0, 0, 0, 0, 0, 0 };
string[] indexs4 = { "", "", "", "", "", "" };
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 { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).ToList();
var index4Result = Patients.Where(p=>p.DateofRegistration >= BeginDate && p.DateofRegistration <= EndDate && p.HaveArvBefore == 1).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).ToList();
index4Result.AddRange(Returns);
//Nam < 1 tuổi
index4[0] = index4Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs4[0] = string.Join(",", index4Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index4[1] = index4Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs4[1] = string.Join(",", index4Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index4[2] = index4Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs4[2] = string.Join(",", index4Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index4[3] = index4Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs4[3] = string.Join(",", index4Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index4[4] = index4Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs4[4] = string.Join(",", index4Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index4[5] = index4Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs4[5] = string.Join(",", index4Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 35;
_Progress.Cells[row, 3].Value = index4[0]; _Progress.Cells[row, 4].Value = index4[1]; _Progress.Cells[row, 5].Value = index4[2];
_Progress.Cells[row, 7].Value = index4[3]; _Progress.Cells[row, 8].Value = index4[4]; _Progress.Cells[row, 9].Value = index4[5];
_Tracking.Cells[row, 3].Value = indexs4[0]; _Tracking.Cells[row, 4].Value = indexs4[1]; _Tracking.Cells[row, 5].Value = indexs4[2];
_Tracking.Cells[row, 7].Value = indexs4[3]; _Tracking.Cells[row, 8].Value = indexs4[4]; _Tracking.Cells[row, 9].Value = indexs4[5];
#endregion
#region index5
//Chuyển đi trong kỳ báo cáo
int[] index5 = { 0, 0, 0, 0, 0, 0 };
string[] indexs5 = { "", "", "", "", "", "" };
var referrals = TreatmentInfo.Where(p => p.TreatmentEdate != null && p.TreatmentEdate >= BeginDate && p.TreatmentEdate <= EndDate && p.ReasonId == "09" && p.TreatmentId == "01").ToList();
var index5Result = referrals.Join(Patients, e => e.PatientId, p => p.PatientId, (e, p) => new { PatientId = p.PatientId, Sex = p.Sex, Age = e.TreatmentEdate.Value.Year - p.BirthYear }).ToList();
//Nam < 1 tuổi
index5[0] = index5Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs5[0] = string.Join(",", index5Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index5[1] = index5Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs5[1] = string.Join(",", index5Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index5[2] = index5Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs5[2] = string.Join(",", index5Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index5[3] = index5Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs5[3] = string.Join(",", index5Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index5[4] = index5Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs5[4] = string.Join(",", index5Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index5[5] = index5Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs5[5] = string.Join(",", index5Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 36;
_Progress.Cells[row, 3].Value = index5[0]; _Progress.Cells[row, 4].Value = index5[1]; _Progress.Cells[row, 5].Value = index5[2];
_Progress.Cells[row, 7].Value = index5[3]; _Progress.Cells[row, 8].Value = index5[4]; _Progress.Cells[row, 9].Value = index5[5];
_Tracking.Cells[row, 3].Value = indexs5[0]; _Tracking.Cells[row, 4].Value = indexs5[1]; _Tracking.Cells[row, 5].Value = indexs5[2];
_Tracking.Cells[row, 7].Value = indexs5[3]; _Tracking.Cells[row, 8].Value = indexs5[4]; _Tracking.Cells[row, 9].Value = indexs5[5];
#endregion
#region index6
//Tử vong trong kỳ báo cáo
int[] index6 = { 0, 0, 0, 0, 0, 0 };
string[] indexs6 = { "", "", "", "", "", "" };
var deaths = TreatmentInfo.Where(p => p.TreatmentEdate != null && p.TreatmentEdate >= BeginDate && p.TreatmentEdate <= EndDate && p.ReasonId == "11" && p.TreatmentId == "01").ToList();
var index6Result = deaths.Join(Patients, e => e.PatientId, p => p.PatientId, (e, p) => new { PatientId = p.PatientId, Sex = p.Sex, Age = e.TreatmentEdate.Value.Year - p.BirthYear }).ToList();
//Nam < 1 tuổi
index6[0] = index6Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs6[0] = string.Join(",", index6Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index6[1] = index6Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs6[1] = string.Join(",", index6Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index6[2] = index6Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs6[2] = string.Join(",", index6Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index6[3] = index6Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs6[3] = string.Join(",", index6Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index6[4] = index6Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs6[4] = string.Join(",", index6Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index6[5] = index6Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs6[5] = string.Join(",", index6Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 37;
_Progress.Cells[row, 3].Value = index6[0]; _Progress.Cells[row, 4].Value = index6[1]; _Progress.Cells[row, 5].Value = index6[2];
_Progress.Cells[row, 7].Value = index6[3]; _Progress.Cells[row, 8].Value = index6[4]; _Progress.Cells[row, 9].Value = index6[5];
_Tracking.Cells[row, 3].Value = indexs6[0]; _Tracking.Cells[row, 4].Value = indexs6[1]; _Tracking.Cells[row, 5].Value = indexs6[2];
_Tracking.Cells[row, 7].Value = indexs6[3]; _Tracking.Cells[row, 8].Value = indexs6[4]; _Tracking.Cells[row, 9].Value = indexs6[5];
#endregion
#region index7
//Bỏ trị trong kỳ báo cáo
int[] index7 = { 0, 0, 0, 0, 0, 0 };
string[] indexs7 = { "", "", "", "", "", "" };
var lossfollows = TreatmentInfo.Where(p => p.TreatmentEdate != null && p.TreatmentEdate >= BeginDate && p.TreatmentEdate <= EndDate && p.ReasonId == "10" && p.TreatmentId == "01").ToList();
var index7Result = lossfollows.Join(Patients, e => e.PatientId, p => p.PatientId, (e, p) => new { PatientId = p.PatientId, Sex = p.Sex, Age = e.TreatmentEdate.Value.Year - p.BirthYear}).ToList();
//Nam < 1 tuổi
index7[0] = index7Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs7[0] = string.Join(",", index7Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index7[1] = index7Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs7[1] = string.Join(",", index7Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index7[2] = index7Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs7[2] = string.Join(",", index7Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index7[3] = index7Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs7[3] = string.Join(",", index7Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index7[4] = index7Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs7[4] = string.Join(",", index7Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index7[5] = index7Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs7[5] = string.Join(",", index7Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 38;
_Progress.Cells[row, 3].Value = index7[0]; _Progress.Cells[row, 4].Value = index7[1]; _Progress.Cells[row, 5].Value = index7[2];
_Progress.Cells[row, 7].Value = index7[3]; _Progress.Cells[row, 8].Value = index7[4]; _Progress.Cells[row, 9].Value = index7[5];
_Tracking.Cells[row, 3].Value = indexs7[0]; _Tracking.Cells[row, 4].Value = indexs7[1]; _Tracking.Cells[row, 5].Value = indexs7[2];
_Tracking.Cells[row, 7].Value = indexs7[3]; _Tracking.Cells[row, 8].Value = indexs7[4]; _Tracking.Cells[row, 9].Value = indexs7[5];
#endregion
#region index8
//Không khám trong kỳ báo cáo - lưu ý đến ngày hẹn tái khám
int[] index8 = { 0, 0, 0, 0, 0, 0 };
string[] indexs8 = { "", "", "", "", "", "" };
var ReExams = Exams.Where(p => p.ReExamDate >= BeginDate && p.ReExamDate <= EndDate && (p.EndExamDate==null || p.EndExamDate > p.ReExamDate)).GroupBy(m => m.PatientId).Select(g => new { PatientId = g.Key, c1 = g.Count() }).ToList();
var exams = Exams.Where(p => p.ExamDate.Value.AddDays(p.DayDiff<0?Math.Abs(p.DayDiff.Value):0) >= BeginDate && p.ExamDate.Value.AddDays(p.DayDiff<0?Math.Abs(p.DayDiff.Value):0) <= EndDate).GroupBy(m => m.PatientId).Select(g => new { PatientId = g.Key, c2 = g.Count() }).ToList();
//var exams = Exams.Where(p => p.ExamDate >= BeginDate && p.ExamDate <= EndDate).GroupBy(m => m.PatientId).Select(g => new { PatientId = g.Key, c2 = g.Count() }).ToList();
var skips1 = (from p in ReExams join q in exams on p.PatientId equals q.PatientId into g from q in g.DefaultIfEmpty() select new { PatientId = p.PatientId, p.c1, c2 = (q == null) ? 0 : q.c2 }).ToList().Where(m => m.c1 > m.c2).Select(m => new { PatientId =m.PatientId,c1= m.c1, c2=m.c2 }).ToList();
//PatientMan.Forms.frmTest frm = new PatientMan.Forms.frmTest();
//frm.grdTest.DataSource = skips1;
//frm.Show();
List<string> skips = skips1.Select(m => m.PatientId).ToList();
var index8Result = Patients.Where(p=>p.DateofArv != null && p.DateofArv < BeginDate).Where(p => skips.Contains(p.PatientId)).Select(p => new { PatientId = p.PatientId, Sex = p.Sex, Age = EndDate.Year - p.BirthYear }).ToList();
//Nam < 1 tuổi
index8[0] = index8Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Count();
indexs8[0] = string.Join(",", index8Result.Where(m => m.Age < 1).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 1-14
index8[1] = index8Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Count();
indexs8[1] = string.Join(",", index8Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
// Nam từ 15 tuổi
index8[2] = index8Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Count();
indexs8[2] = string.Join(",", index8Result.Where(m => m.Age >= 15).Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ < 1 tuổi
index8[3] = index8Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Count();
indexs8[3] = string.Join(",", index8Result.Where(m => m.Age < 1).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 1-14
index8[4] = index8Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Count();
indexs8[4] = string.Join(",", index8Result.Where(m => m.Age >= 1 && m.Age < 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//Nữ từ 15 tuổi
index8[5] = index8Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Count();
indexs8[5] = string.Join(",", index8Result.Where(m => m.Age >= 15).Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 39;
//_Progress.Cells[row, 3].Value = index8[0]; _Progress.Cells[row, 4].Value = index8[1]; _Progress.Cells[row, 5].Value = index8[2];
//_Progress.Cells[row, 7].Value = index8[3]; _Progress.Cells[row, 8].Value = index8[4]; _Progress.Cells[row, 9].Value = index8[5];
//_Tracking.Cells[row, 3].Value = indexs8[0]; _Tracking.Cells[row, 4].Value = indexs8[1]; _Tracking.Cells[row, 5].Value = indexs8[2];
//_Tracking.Cells[row, 7].Value = indexs8[3]; _Tracking.Cells[row, 8].Value = indexs8[4]; _Tracking.Cells[row, 9].Value = indexs8[5];
#endregion
}
private void V3C()
{
LinqMetaData meta = new LinqMetaData(adapter);
int row = 0;
DateTime thisBeginDate = this.BeginDate;
DateTime thisEndDate = this.EndDate;
EntityCollection<TblPatientEntity> Patients = new EntityCollection<TblPatientEntity>();
EntityCollection<TblTreatmentInfoEntity> TreatmentInfo = new EntityCollection<TblTreatmentInfoEntity>();
adapter.FetchEntityCollection(Patients, null);
adapter.FetchEntityCollection(TreatmentInfo, null);
var Arvs = TreatmentInfo.Where(p => p.TreatmentSdate < EndDate && p.TreatmentSdate >= BeginDate.AddMonths(-12) && p.TreatmentId == "01").ToList();
var SelectedPatients = Arvs.Join(Patients.Where(p=>p.DateofArv!=null && p.DateofArv.Value.AddYears(1) > p.DateofRegistration && p.DateofArv>=BeginDate.AddMonths(-12) && p.DateofArv<=EndDate.AddMonths(-12)), a => a.PatientId, p => p.PatientId, (a, p) => new { p.PatientId, p.Sex, EndPointArv = p.DateofArv.Value.AddMonths(12), Age = p.DateofArv.Value.AddMonths(12).Year - p.BirthYear, a.TreatmentSdate, a.TreatmentEdate, a.ReasonId }).Where(p => p.TreatmentSdate <= p.EndPointArv).ToList();
#region "Index1"
int[] index1 = new int[2];
string[] index1s = new string[2];
var index1preresult = SelectedPatients.GroupBy(p => p.PatientId).Select(g => g.OrderBy(p => p.TreatmentSdate).Last()).Select(p => new { p.PatientId, p.Sex, p.Age, moveout = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "09" ? true : false, lost = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "10" ? true : false, dead = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "11" ? true : false }).Where(p => !p.moveout && !p.dead && !p.lost).ToList();
//Nam
index1[0] = index1preresult.Where(m => m.Sex == 1).Count();
index1s[0] = string.Join(",", index1preresult.Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ
index1[1] = index1preresult.Where(m => m.Sex == 2).Count();
index1s[1] = string.Join(",", index1preresult.Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 52;
_Progress.Cells[row, 3].Value = index1[0]; _Progress.Cells[row, 7].Value = index1[1];
_Tracking.Cells[row, 3].Value = index1s[0]; _Tracking.Cells[row, 7].Value = index1s[1];
#endregion
#region "Index2"
int[] index2 = new int[2];
string[] index2s = new string[2];
var index2preresult = SelectedPatients.GroupBy(p => p.PatientId).Select(g => g.OrderBy(p => p.TreatmentSdate).Last()).Select(p => new { p.PatientId, p.Sex, p.Age, moveout = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "09" ? true : false, lost = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "10" ? true : false, dead = p.TreatmentEdate != null && p.TreatmentEdate < p.EndPointArv && p.ReasonId == "11" ? true : false }).Where(p => !p.moveout).ToList();
//Nam
index2[0] = index2preresult.Where(m => m.Sex == 1).Count();
index2s[0] = string.Join(",", index2preresult.Where(m => m.Sex == 1).Select(p => p.PatientId).ToArray());
//Nữ
index2[1] = index2preresult.Where(m => m.Sex == 2).Count();
index2s[1] = string.Join(",", index2preresult.Where(m => m.Sex == 2).Select(p => p.PatientId).ToArray());
//fill
row = 53;
_Progress.Cells[row, 3].Value = index2[0]; _Progress.Cells[row, 7].Value = index2[1];
_Tracking.Cells[row, 3].Value = index2s[0]; _Tracking.Cells[row, 7].Value = index2s[1];
#endregion
}
}
}

View File

@@ -0,0 +1,47 @@
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.Actions
{
class clsUpdateReferralArv
{
public DataAccessAdapter adapter = new DataAccessAdapter(SettingInfo.Constr);
public LinqMetaData meta = new LinqMetaData(new DataAccessAdapter(SettingInfo.Constr));
public void UpdateArv()
{
var RefPatients = meta.TblPatient.Where(q => q.Dateofreferral != null && q.HaveArvBefore == 1).ToList();
foreach(var Patient in RefPatients)
{
string PatientID = Patient.PatientId;
if ( meta.TblTreatmentInfo.Where(p=>p.TreatmentId == "01" && p.PatientId == PatientID).Count() ==0)
{
TblTreatmentInfoEntity Treatment = new TblTreatmentInfoEntity();
Treatment.PatientId = PatientID;
Treatment.TreatmentId = "01";
Treatment.TreatmentSdate = Patient.Dateofreferral;
Treatment.Regimenid = Patient.Regimenid;
Treatment.UniqueKey = Guid.NewGuid().ToString("N");
adapter.SaveEntity(Treatment);
}
}
}
}
}