private void fillGrid() { gridMain.BeginUpdate(); gridMain.Columns.Clear(); ODGridColumn col; col = new ODGridColumn("Loinc Code", 80); //,HorizontalAlignment.Center); gridMain.Columns.Add(col); col = new ODGridColumn("Status", 80); //,HorizontalAlignment.Center); gridMain.Columns.Add(col); col = new ODGridColumn("Long Name", 500); //,HorizontalAlignment.Center); gridMain.Columns.Add(col); col = new ODGridColumn("UCUM Units", 100); //,HorizontalAlignment.Center); gridMain.Columns.Add(col); col = new ODGridColumn("Order or Observation", 100); //,HorizontalAlignment.Center); gridMain.Columns.Add(col); gridMain.Rows.Clear(); ODGridRow row; listLoincSearch = Loincs.GetBySearchString(textCode.Text); for (int i = 0; i < listLoincSearch.Count; i++) { row = new ODGridRow(); row.Cells.Add(listLoincSearch[i].LoincCode); row.Cells.Add(listLoincSearch[i].StatusOfCode); row.Cells.Add(listLoincSearch[i].NameLongCommon); row.Cells.Add(listLoincSearch[i].UnitsUCUM); row.Cells.Add(listLoincSearch[i].OrderObs); gridMain.Rows.Add(row); } gridMain.EndUpdate(); }
private void FillGridAssessments() { gridAssessments.BeginUpdate(); gridAssessments.Columns.Clear(); gridAssessments.Columns.Add(new ODGridColumn("Date", 70)); gridAssessments.Columns.Add(new ODGridColumn("Type", 170)); gridAssessments.Columns.Add(new ODGridColumn("Description", 170)); gridAssessments.Columns.Add(new ODGridColumn("Documentation", 170)); gridAssessments.Rows.Clear(); ODGridRow row; List <EhrMeasureEvent> listEvents = EhrMeasureEvents.RefreshByType(PatCur.PatNum, EhrMeasureEventType.TobaccoUseAssessed); foreach (EhrMeasureEvent eventCur in listEvents) { row = new ODGridRow(); row.Cells.Add(eventCur.DateTEvent.ToShortDateString()); Loinc lCur = Loincs.GetByCode(eventCur.CodeValueEvent); //TobaccoUseAssessed events can be one of three types, all LOINC codes row.Cells.Add(lCur != null?lCur.NameLongCommon:eventCur.EventType.ToString()); Snomed sCur = Snomeds.GetByCode(eventCur.CodeValueResult); row.Cells.Add(sCur != null?sCur.Description:""); row.Cells.Add(eventCur.MoreInfo); row.Tag = eventCur; gridAssessments.Rows.Add(row); } gridAssessments.EndUpdate(); }
private void FormEhrMeasureEventEdit_Load(object sender, EventArgs e) { textDateTime.Text = _measureEventCur.DateTEvent.ToString(); Patient patCur = Patients.GetPat(_measureEventCur.PatNum); if (patCur != null) { textPatient.Text = patCur.GetNameFL(); } if (!String.IsNullOrWhiteSpace(MeasureDescript)) { labelMoreInfo.Text = MeasureDescript; } if (_measureEventCur.EventType == EhrMeasureEventType.TobaccoUseAssessed) { Loinc lCur = Loincs.GetByCode(_measureEventCur.CodeValueEvent); //TobaccoUseAssessed events can be one of three types, all LOINC codes if (lCur != null) { textType.Text = lCur.NameLongCommon; //Example: History of tobacco use Narrative } Snomed sCur = Snomeds.GetByCode(_measureEventCur.CodeValueResult); //TobaccoUseAssessed results can be any SNOMEDCT code, we recommend one of 8 codes, but the CQM measure allows 54 codes and we let the user select any SNOMEDCT they want if (sCur != null) { textResult.Text = sCur.Description; //Examples: Non-smoker (finding) or Smoker (finding) } //only visible if event is a tobacco use assessment textTobaccoDesireToQuit.Visible = true; textTobaccoDuration.Visible = true; textTobaccoStartDate.Visible = true; labelTobaccoDesireToQuit.Visible = true; labelTobaccoDesireScale.Visible = true; labelTobaccoStartDate.Visible = true; textTobaccoDesireToQuit.Text = _measureEventCur.TobaccoCessationDesire.ToString(); if (_measureEventCur.DateStartTobacco.Year >= 1880) { textTobaccoStartDate.Text = _measureEventCur.DateStartTobacco.ToShortDateString(); } CalcTobaccoDuration(); } else { //Currently, the TobaccoUseAssessed events are the only ones that can be deleted. butDelete.Enabled = false; } if (textType.Text == "") //if not set by LOINC name above, then either not a TobaccoUseAssessed event or the code was not in the LOINC table, fill with EventType { textType.Text = _measureEventCur.EventType.ToString(); } textMoreInfo.Text = _measureEventCur.MoreInfo; }
private void FormEhrMeasureEventEdit_Load(object sender, EventArgs e) { textDateTime.Text = MeasCur.DateTEvent.ToString(); if (MeasCur.EventType == EhrMeasureEventType.TobaccoUseAssessed) { Loinc lCur = Loincs.GetByCode(MeasCur.CodeValueEvent); //TobaccoUseAssessed events can be one of three types, all LOINC codes if (lCur != null) { textType.Text = lCur.NameLongCommon; //Example: History of tobacco use Narrative } Snomed sCur = Snomeds.GetByCode(MeasCur.CodeValueResult); //TobaccoUseAssessed results can be any SNOMEDCT code, we recommend one of 8 codes, but the CQM measure allows 54 codes and we let the user select any SNOMEDCT they want if (sCur != null) { textResult.Text = sCur.Description; //Examples: Non-smoker (finding) or Smoker (finding) } } if (textType.Text == "") //if not set by LOINC name above, then either not a TobaccoUseAssessed event or the code was not in the LOINC table, fill with EventType { textType.Text = MeasCur.EventType.ToString(); } textMoreInfo.Text = MeasCur.MoreInfo; }
private void butAdd_Click(object sender, EventArgs e) { FormEhrLabOrderEdit2014 FormLOE = new FormEhrLabOrderEdit2014(); FormLOE.EhrLabCur = new EhrLab(); FormLOE.EhrLabCur.PatNum = PatCur.PatNum; FormLOE.IsNew = true; FormLOE.ShowDialog(); if (FormLOE.DialogResult != DialogResult.OK) { return; } EhrMeasureEvent newMeasureEvent = new EhrMeasureEvent(); newMeasureEvent.DateTEvent = DateTime.Now; newMeasureEvent.EventType = EhrMeasureEventType.CPOE_LabOrdered; //default Loinc loinc = Loincs.GetByCode(FormLOE.EhrLabCur.UsiID); if (loinc != null && loinc.ClassType == "RAD") //short circuit logic { newMeasureEvent.EventType = EhrMeasureEventType.CPOE_RadOrdered; } newMeasureEvent.PatNum = FormLOE.EhrLabCur.PatNum; newMeasureEvent.MoreInfo = ""; newMeasureEvent.FKey = FormLOE.EhrLabCur.EhrLabNum; EhrMeasureEvents.Insert(newMeasureEvent); EhrLabs.SaveToDB(FormLOE.EhrLabCur); for (int i = 0; i < FormLOE.EhrLabCur.ListEhrLabResults.Count; i++) { if (CDSPermissions.GetForUser(Security.CurUser.UserNum).ShowCDS&& CDSPermissions.GetForUser(Security.CurUser.UserNum).LabTestCDS) { FormCDSIntervention FormCDSI = new FormCDSIntervention(); FormCDSI.ListCDSI = EhrTriggers.TriggerMatch(FormLOE.EhrLabCur.ListEhrLabResults[i], PatCur); FormCDSI.ShowIfRequired(false); } } FillGrid(); }
private void FormEhrAptObsEdit_Load(object sender, EventArgs e) { _appt = Appointments.GetOneApt(_ehrAptObsCur.AptNum); comboObservationQuestion.Items.Clear(); string[] arrayQuestionNames = Enum.GetNames(typeof(EhrAptObsIdentifier)); for (int i = 0; i < arrayQuestionNames.Length; i++) { comboObservationQuestion.Items.Add(arrayQuestionNames[i]); EhrAptObsIdentifier ehrAptObsIdentifier = (EhrAptObsIdentifier)i; if (_ehrAptObsCur.IdentifyingCode == ehrAptObsIdentifier) { comboObservationQuestion.SelectedIndex = i; } } listValueType.Items.Clear(); string[] arrayValueTypeNames = Enum.GetNames(typeof(EhrAptObsType)); for (int i = 0; i < arrayValueTypeNames.Length; i++) { listValueType.Items.Add(arrayValueTypeNames[i]); EhrAptObsType ehrAptObsType = (EhrAptObsType)i; if (_ehrAptObsCur.ValType == ehrAptObsType) { listValueType.SelectedIndex = i; } } if (_ehrAptObsCur.ValType == EhrAptObsType.Coded) { _strValCodeSystem = _ehrAptObsCur.ValCodeSystem; if (_ehrAptObsCur.ValCodeSystem == "LOINC") { _loincValue = Loincs.GetByCode(_ehrAptObsCur.ValReported); textValue.Text = _loincValue.NameShort; } else if (_ehrAptObsCur.ValCodeSystem == "SNOMEDCT") { _snomedValue = Snomeds.GetByCode(_ehrAptObsCur.ValReported); textValue.Text = _snomedValue.Description; } else if (_ehrAptObsCur.ValCodeSystem == "ICD9") { _icd9Value = ICD9s.GetByCode(_ehrAptObsCur.ValReported); textValue.Text = _icd9Value.Description; } else if (_ehrAptObsCur.ValCodeSystem == "ICD10") { _icd10Value = Icd10s.GetByCode(_ehrAptObsCur.ValReported); textValue.Text = _icd10Value.Description; } } else { textValue.Text = _ehrAptObsCur.ValReported; } comboUnits.Items.Clear(); comboUnits.Items.Add("none"); comboUnits.SelectedIndex = 0; List <string> listUcumCodes = Ucums.GetAllCodes(); for (int i = 0; i < listUcumCodes.Count; i++) { string ucumCode = listUcumCodes[i]; comboUnits.Items.Add(ucumCode); if (ucumCode == _ehrAptObsCur.UcumCode) { comboUnits.SelectedIndex = i + 1; } } SetFlags(); }
public static string Validate(Appointment appt) { StringBuilder sb = new StringBuilder(); Provider provFacility = Providers.GetProv(PrefC.GetInt(PrefName.PracticeDefaultProv)); if (!Regex.IsMatch(provFacility.NationalProvID, "^(80840)?[0-9]{10}$")) { WriteError(sb, "Invalid NPI for provider '" + provFacility.Abbr + "'"); } if (PrefC.HasClinicsEnabled && appt.ClinicNum != 0) //Using clinics and a clinic is assigned. { Clinic clinic = Clinics.GetClinic(appt.ClinicNum); if (clinic.Description == "") { WriteError(sb, "Missing clinic description for clinic attached to appointment."); } } else //Not using clinics for this patient { if (PrefC.GetString(PrefName.PracticeTitle) == "") { WriteError(sb, "Missing practice title."); } } Patient pat = Patients.GetPat(appt.PatNum); if (pat.PatStatus == PatientStatus.Deceased && pat.DateTimeDeceased.Year < 1880) { WriteError(sb, "Missing date time deceased."); } List <EhrAptObs> listObservations = EhrAptObses.Refresh(appt.AptNum); if (listObservations.Count == 0) { WriteError(sb, "Missing observation."); } for (int i = 0; i < listObservations.Count; i++) { EhrAptObs obs = listObservations[i]; if (obs.ValType == EhrAptObsType.Coded) { if (obs.ValCodeSystem.Trim().ToUpper() == "LOINC") { Loinc loincVal = Loincs.GetByCode(obs.ValReported); if (loincVal == null) { WriteError(sb, "Loinc code not found '" + loincVal.LoincCode + "'. Please add by going to Setup | Chart | EHR."); } } else if (obs.ValCodeSystem.Trim().ToUpper() == "SNOMEDCT") { Snomed snomedVal = Snomeds.GetByCode(obs.ValReported); if (snomedVal == null) { WriteError(sb, "Snomed code not found '" + snomedVal.SnomedCode + "'. Please add by going to Setup | Chart | EHR."); } } else if (obs.ValCodeSystem.Trim().ToUpper() == "ICD9") { ICD9 icd9Val = ICD9s.GetByCode(obs.ValReported); if (icd9Val == null) { WriteError(sb, "ICD9 code not found '" + icd9Val.ICD9Code + "'. Please add by going to Setup | Chart | EHR."); } } else if (obs.ValCodeSystem.Trim().ToUpper() == "ICD10") { Icd10 icd10Val = Icd10s.GetByCode(obs.ValReported); if (icd10Val == null) { WriteError(sb, "ICD10 code not found '" + icd10Val.Icd10Code + "'. Please add by going to Setup | Chart | EHR."); } } } else if (obs.ValType == EhrAptObsType.Numeric && obs.UcumCode != "") //We only validate the ucum code if it will be sent out. Blank units allowed. { Ucum ucum = Ucums.GetByCode(obs.UcumCode); if (ucum == null) { WriteError(sb, "Invalid unit code '" + obs.UcumCode + "' for observation (must be UCUM code)."); } } } return(sb.ToString()); }
///<summary>Observation/result segment. Used to transmit observations related to the patient and visit. Guide page 64.</summary> private void OBX() { List <EhrAptObs> listObservations = EhrAptObses.Refresh(_appt.AptNum); for (int i = 0; i < listObservations.Count; i++) { EhrAptObs obs = listObservations[i]; _seg = new SegmentHL7(SegmentNameHL7.OBX); _seg.SetField(0, "OBX"); _seg.SetField(1, (i + 1).ToString()); //OBX-1 Set ID - OBX. Required (length 1..4). Must start at 1 and increment. //OBX-2 Value Type. Required (length 1..3). Cardinality [1..1]. Identifies the structure of data in observation value OBX-5. Values allowed: TS=Time Stamp (Date and/or Time),TX=Text,NM=Numeric,CWE=Coded with exceptions,XAD=Address. if (obs.ValType == EhrAptObsType.Coded) { _seg.SetField(2, "CWE"); } else if (obs.ValType == EhrAptObsType.DateAndTime) { _seg.SetField(2, "TS"); } else if (obs.ValType == EhrAptObsType.Numeric) { _seg.SetField(2, "NM"); } else //obs.ValType==EhrAptObsType.Text { _seg.SetField(2, "TX"); } //OBX-3 Observation Identifier. Required (length up to 478). Cardinality [1..1]. Value set is HL7 table named "Observation Identifier". Type CE. We use LOINC codes because the testing tool used LOINC codes and so do vaccines. string obsIdCode = ""; string obsIdCodeDescript = ""; string obsIdCodeSystem = "LN"; if (obs.IdentifyingCode == EhrAptObsIdentifier.BodyTemp) { obsIdCode = "11289-6"; obsIdCodeDescript = "Body temperature:Temp:Enctrfrst:Patient:Qn:"; } else if (obs.IdentifyingCode == EhrAptObsIdentifier.CheifComplaint) { obsIdCode = "8661-1"; obsIdCodeDescript = "Chief complaint:Find:Pt:Patient:Nom:Reported"; } else if (obs.IdentifyingCode == EhrAptObsIdentifier.DateIllnessOrInjury) { obsIdCode = "11368-8"; obsIdCodeDescript = "Illness or injury onset date and time:TmStp:Pt:Patient:Qn:"; } else if (obs.IdentifyingCode == EhrAptObsIdentifier.OxygenSaturation) { obsIdCode = "59408-5"; obsIdCodeDescript = "Oxygen saturation:MFr:Pt:BldA:Qn:Pulse oximetry"; } else if (obs.IdentifyingCode == EhrAptObsIdentifier.PatientAge) { obsIdCode = "21612-7"; obsIdCodeDescript = "Age Time Patient Reported"; } else if (obs.IdentifyingCode == EhrAptObsIdentifier.PrelimDiag) { obsIdCode = "44833-2"; obsIdCodeDescript = "Diagnosis.preliminary:Imp:Pt:Patient:Nom:"; } else if (obs.IdentifyingCode == EhrAptObsIdentifier.TreatFacilityID) { obsIdCode = "SS001"; obsIdCodeDescript = "Treating Facility Identifier"; obsIdCodeSystem = "PHINQUESTION"; } else if (obs.IdentifyingCode == EhrAptObsIdentifier.TreatFacilityLocation) { obsIdCode = "SS002"; obsIdCodeDescript = "Treating Facility Location"; obsIdCodeSystem = "PHINQUESTION"; } else if (obs.IdentifyingCode == EhrAptObsIdentifier.TriageNote) { obsIdCode = "54094-8"; obsIdCodeDescript = "Triage note:Find:Pt:Emergency department:Doc:"; } else if (obs.IdentifyingCode == EhrAptObsIdentifier.VisitType) { obsIdCode = "SS003"; obsIdCodeDescript = "Facility / Visit Type"; obsIdCodeSystem = "PHINQUESTION"; } WriteCE(3, obsIdCode, obsIdCodeDescript, obsIdCodeSystem); //OBX-4 Observation Sub-ID. No longer used. //OBX-5 Observation Value. Required if known (length 1..99999). Value must match type in OBX-2. if (obs.ValType == EhrAptObsType.Address) { WriteXAD(5, _sendingFacilityAddress1, _sendingFacilityAddress2, _sendingFacilityCity, _sendingFacilityState, _sendingFacilityZip); } else if (obs.ValType == EhrAptObsType.Coded) { string codeDescript = ""; string codeSystemAbbrev = ""; if (obs.ValCodeSystem.Trim().ToUpper() == "LOINC") { Loinc loincVal = Loincs.GetByCode(obs.ValReported); codeDescript = loincVal.NameShort; codeSystemAbbrev = "LN"; } else if (obs.ValCodeSystem.Trim().ToUpper() == "SNOMEDCT") { Snomed snomedVal = Snomeds.GetByCode(obs.ValReported); codeDescript = snomedVal.Description; codeSystemAbbrev = "SCT"; } else if (obs.ValCodeSystem.Trim().ToUpper() == "ICD9") { ICD9 icd9Val = ICD9s.GetByCode(obs.ValReported); codeDescript = icd9Val.Description; codeSystemAbbrev = "I9"; } else if (obs.ValCodeSystem.Trim().ToUpper() == "ICD10") { Icd10 icd10Val = Icd10s.GetByCode(obs.ValReported); codeDescript = icd10Val.Description; codeSystemAbbrev = "I10"; } WriteCE(5, obs.ValReported.Trim(), codeDescript, codeSystemAbbrev); } else if (obs.ValType == EhrAptObsType.DateAndTime) { DateTime dateVal = DateTime.Parse(obs.ValReported.Trim()); string strDateOut = dateVal.ToString("yyyyMMdd"); //The testing tool threw errors when there were trailing zeros, even though technically valid. if (dateVal.Second > 0) { strDateOut += dateVal.ToString("HHmmss"); } else if (dateVal.Minute > 0) { strDateOut += dateVal.ToString("HHmm"); } else if (dateVal.Hour > 0) { strDateOut += dateVal.ToString("HH"); } _seg.SetField(5, strDateOut); } else if (obs.ValType == EhrAptObsType.Numeric) { _seg.SetField(5, obs.ValReported.Trim()); } else //obs.ValType==EhrAptObsType.Text { _seg.SetField(5, obs.ValReported); } //OBX-6 Units. Required if OBX-2 is NM=Numeric. Cardinality [0..1]. Type CE. The guide suggests value sets: Pulse Oximetry Unit, Temperature Unit, or Age Unit. However, the testing tool used UCUM, so we will use UCUM. if (obs.ValType == EhrAptObsType.Numeric) { if (String.IsNullOrEmpty(obs.UcumCode)) //If units are required but known, we must send a null flavor. { WriteCE(6, "UNK", "", "NULLFL"); } else { Ucum ucum = Ucums.GetByCode(obs.UcumCode); WriteCE(6, ucum.UcumCode, ucum.Description, "UCUM"); } } //OBX-7 References Range. No longer used. //OBX-8 Abnormal Flags. No longer used. //OBX-9 Probability. No longer used. //OBX-10 Nature of Abnormal Test. No longer used. _seg.SetField(11, "F"); //OBX-11 Observation Result Status. Required (length 1..1). Expected value is "F". //OBX-12 Effective Date of Reference Range. No longer used. //OBX-13 User Defined Access Checks. No longer used. //OBX-14 Date/Time of the Observation. Optional. //OBX-15 Producer's ID. No longer used. //OBX-16 Responsible Observer. No longer used. //OBX-17 Observation Method. No longer used. //OBX-18 Equipment Instance Identifier. No longer used. //OBX-19 Date/Time of the Analysis. No longer used. _msg.Segments.Add(_seg); } }
private void FillGridObservations() { gridObservations.BeginUpdate(); gridObservations.ListGridColumns.Clear(); gridObservations.ListGridColumns.Add(new UI.GridColumn("Observation", 200)); //0 gridObservations.ListGridColumns.Add(new UI.GridColumn("Value Type", 200)); //1 gridObservations.ListGridColumns.Add(new UI.GridColumn("Value", 0)); //2 gridObservations.ListGridRows.Clear(); List <EhrAptObs> listEhrAptObses = EhrAptObses.Refresh(_appt.AptNum); for (int i = 0; i < listEhrAptObses.Count; i++) { EhrAptObs obs = listEhrAptObses[i]; UI.GridRow row = new UI.GridRow(); row.Tag = obs; row.Cells.Add(obs.IdentifyingCode.ToString()); //0 Observation if (obs.ValType == EhrAptObsType.Coded) { row.Cells.Add(obs.ValType.ToString() + " - " + obs.ValCodeSystem); //1 Value Type if (obs.ValCodeSystem == "LOINC") { Loinc loincValue = Loincs.GetByCode(obs.ValReported); row.Cells.Add(loincValue.NameShort); //2 Value } else if (obs.ValCodeSystem == "SNOMEDCT") { Snomed snomedValue = Snomeds.GetByCode(obs.ValReported); row.Cells.Add(snomedValue.Description); //2 Value } else if (obs.ValCodeSystem == "ICD9") { ICD9 icd9Value = ICD9s.GetByCode(obs.ValReported); row.Cells.Add(icd9Value.Description); //2 Value } else if (obs.ValCodeSystem == "ICD10") { Icd10 icd10Value = Icd10s.GetByCode(obs.ValReported); row.Cells.Add(icd10Value.Description); //2 Value } } else if (obs.ValType == EhrAptObsType.Address) { string sendingFacilityAddress1 = PrefC.GetString(PrefName.PracticeAddress); string sendingFacilityAddress2 = PrefC.GetString(PrefName.PracticeAddress2); string sendingFacilityCity = PrefC.GetString(PrefName.PracticeCity); string sendingFacilityState = PrefC.GetString(PrefName.PracticeST); string sendingFacilityZip = PrefC.GetString(PrefName.PracticeZip); if (PrefC.HasClinicsEnabled && _appt.ClinicNum != 0) //Using clinics and a clinic is assigned. { Clinic clinic = Clinics.GetClinic(_appt.ClinicNum); sendingFacilityAddress1 = clinic.Address; sendingFacilityAddress2 = clinic.Address2; sendingFacilityCity = clinic.City; sendingFacilityState = clinic.State; sendingFacilityZip = clinic.Zip; } row.Cells.Add(obs.ValType.ToString()); //1 Value Type row.Cells.Add(sendingFacilityAddress1 + " " + sendingFacilityAddress2 + " " + sendingFacilityCity + " " + sendingFacilityState + " " + sendingFacilityZip); //2 Value } else { row.Cells.Add(obs.ValType.ToString()); //1 Value Type row.Cells.Add(obs.ValReported); //2 Value } gridObservations.ListGridRows.Add(row); } gridObservations.EndUpdate(); }
private void FillGrid() { gridMain.BeginUpdate(); gridMain.ListGridColumns.Clear(); GridColumn col = new GridColumn("Date", 70); gridMain.ListGridColumns.Add(col); col = new GridColumn("Prov", 50); gridMain.ListGridColumns.Add(col); col = new GridColumn("Item Not Performed", 130); gridMain.ListGridColumns.Add(col); col = new GridColumn("Code", 102); gridMain.ListGridColumns.Add(col); col = new GridColumn("Code Description", 150); gridMain.ListGridColumns.Add(col); col = new GridColumn("Reason Code", 80); gridMain.ListGridColumns.Add(col); col = new GridColumn("Reason Description", 150); gridMain.ListGridColumns.Add(col); col = new GridColumn("Note", 150); gridMain.ListGridColumns.Add(col); listNotPerf = EhrNotPerformeds.Refresh(PatCur.PatNum); gridMain.ListGridRows.Clear(); GridRow row; for (int i = 0; i < listNotPerf.Count; i++) { row = new GridRow(); row.Cells.Add(listNotPerf[i].DateEntry.ToShortDateString()); row.Cells.Add(Providers.GetAbbr(listNotPerf[i].ProvNum)); //Item not performed------------------------------------------------------------ switch (listNotPerf[i].CodeValue) { case "39156-5": //BMI exam row.Cells.Add(EhrNotPerformedItem.BMIExam.ToString()); break; case "428191000124101": //CurrentMedsDocumented row.Cells.Add(EhrNotPerformedItem.DocumentCurrentMeds.ToString()); break; case "11366-2": //History of tobacco use Narrative case "68535-4": //Have you used tobacco in the last 30 days case "68536-2": //Have you used smokeless tobacco in last 30 days row.Cells.Add(EhrNotPerformedItem.TobaccoScreening.ToString()); break; default: //We will default to Influenza Vaccine, there are 26 codes, for this item row.Cells.Add(EhrNotPerformedItem.InfluenzaVaccination.ToString()); break; } //Code not performed------------------------------------------------------------ row.Cells.Add(listNotPerf[i].CodeValue + " (" + listNotPerf[i].CodeSystem + ")"); //Description of code not performed--------------------------------------------- string descript = ""; //to get description, first determine which table the code is from. EhrNotPerformed is allowed to be CPT, CVX, LOINC, SNOMEDCT. switch (listNotPerf[i].CodeSystem) { case "CPT": Cpt cptCur = Cpts.GetByCode(listNotPerf[i].CodeValue); if (cptCur != null) { descript = cptCur.Description; } break; case "CVX": Cvx cvxCur = Cvxs.GetOneFromDb(listNotPerf[i].CodeValue); if (cvxCur != null) { descript = cvxCur.Description; } break; case "LOINC": Loinc lCur = Loincs.GetByCode(listNotPerf[i].CodeValue); if (lCur != null) { descript = lCur.NameLongCommon; } break; case "SNOMEDCT": Snomed sCur = Snomeds.GetByCode(listNotPerf[i].CodeValue); if (sCur != null) { descript = sCur.Description; } break; } row.Cells.Add(descript); //Reason Code------------------------------------------------------------------- row.Cells.Add(listNotPerf[i].CodeValueReason + " (" + listNotPerf[i].CodeSystemReason + ")"); //Reason Description------------------------------------------------------------ descript = ""; if (listNotPerf[i].CodeValueReason != "") { //reason codes are only allowed to be SNOMEDCT codes Snomed sCur = Snomeds.GetByCode(listNotPerf[i].CodeValueReason); if (sCur != null) { descript = sCur.Description; } } row.Cells.Add(descript); //Note-------------------------------------------------------------------------- row.Cells.Add(listNotPerf[i].Note); gridMain.ListGridRows.Add(row); } gridMain.EndUpdate(); }
private void FillGrid() { gridMain.BeginUpdate(); gridMain.Columns.Clear(); ODGridColumn col = new ODGridColumn("Category", 80); gridMain.Columns.Add(col); col = new ODGridColumn("Code", 100); gridMain.Columns.Add(col); col = new ODGridColumn("CodeSystem", 120); gridMain.Columns.Add(col); //col=new ODGridColumn("Op+Value",80);//Example: >=150 //gridMain.Columns.Add(col); col = new ODGridColumn("Description", 250); //Also includes values for labloinc and demographics and vitals. Example: ">150, BP Systolic" gridMain.Columns.Add(col); gridMain.Rows.Clear(); ODGridRow row; //EhrTriggerCur.ProblemDefNumList----------------------------------------------------------------------------------------------------------------------- string[] arrayString = EhrTriggerCur.ProblemDefNumList.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < arrayString.Length; i++) { row = new ODGridRow(); row.Cells.Add("Problem"); row.Cells.Add(arrayString[i]); row.Cells.Add("Problem Def"); row.Cells.Add(DiseaseDefs.GetItem(PIn.Long(arrayString[i])).DiseaseName); gridMain.Rows.Add(row); } //EhrTriggerCur.ProblemIcd9List--------------------------------------------------------------------------------------------------------------------------- arrayString = EhrTriggerCur.ProblemIcd9List.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < arrayString.Length; i++) { row = new ODGridRow(); row.Cells.Add("Problem"); row.Cells.Add(arrayString[i]); row.Cells.Add("ICD9 CM"); row.Cells.Add(ICD9s.GetByCode(arrayString[i]).Description); gridMain.Rows.Add(row); } //EhrTriggerCur.ProblemIcd10List; arrayString = EhrTriggerCur.ProblemIcd10List.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < arrayString.Length; i++) { row = new ODGridRow(); row.Cells.Add("Problem"); row.Cells.Add(arrayString[i]); row.Cells.Add("ICD10 CM"); row.Cells.Add(Icd10s.GetByCode(arrayString[i]).Description); gridMain.Rows.Add(row); } //EhrTriggerCur.ProblemSnomedList; arrayString = EhrTriggerCur.ProblemSnomedList.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < arrayString.Length; i++) { row = new ODGridRow(); row.Cells.Add("Problem"); row.Cells.Add(arrayString[i]); row.Cells.Add("SNOMED CT"); row.Cells.Add(Snomeds.GetByCode(arrayString[i]).Description); gridMain.Rows.Add(row); } //EhrTriggerCur.MedicationNumList arrayString = EhrTriggerCur.MedicationNumList.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < arrayString.Length; i++) { row = new ODGridRow(); row.Cells.Add("Medication"); row.Cells.Add(arrayString[i]); row.Cells.Add("Medication Def"); row.Cells.Add(Medications.GetDescription(PIn.Long(arrayString[i]))); gridMain.Rows.Add(row); } //EhrTriggerCur.RxCuiList arrayString = EhrTriggerCur.RxCuiList.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < arrayString.Length; i++) { row = new ODGridRow(); row.Cells.Add("Medication"); row.Cells.Add(arrayString[i]); row.Cells.Add("RxCui"); row.Cells.Add(RxNorms.GetByRxCUI(arrayString[i]).Description); gridMain.Rows.Add(row); } //EhrTriggerCur.CvxList arrayString = EhrTriggerCur.CvxList.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < arrayString.Length; i++) { row = new ODGridRow(); row.Cells.Add("Medication"); row.Cells.Add(arrayString[i]); row.Cells.Add("Cvx"); row.Cells.Add(Cvxs.GetByCode(arrayString[i]).Description); gridMain.Rows.Add(row); } //EhrTriggerCur.AllergyDefNumList arrayString = EhrTriggerCur.AllergyDefNumList.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < arrayString.Length; i++) { row = new ODGridRow(); row.Cells.Add("Allergy"); row.Cells.Add(arrayString[i]); row.Cells.Add("Allergy Def"); row.Cells.Add(AllergyDefs.GetOne(PIn.Long(arrayString[i])).Description); gridMain.Rows.Add(row); } //EhrTriggerCur.DemographicsList arrayString = EhrTriggerCur.DemographicsList.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < arrayString.Length; i++) { row = new ODGridRow(); string[] arrayStringElements = arrayString[i].Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); switch (arrayStringElements[0]) { case "age": row.Cells.Add("Demographic"); row.Cells.Add("30525-0"); row.Cells.Add("LOINC"); row.Cells.Add("Age" + arrayStringElements[1]); //Example "Age>55" gridMain.Rows.Add(row); break; case "gender": row.Cells.Add("Demographic"); row.Cells.Add("46098-0"); row.Cells.Add("LOINC"); row.Cells.Add("Gender:" + arrayString[i].Replace("gender,", "")); //Example "Gender:Male, Female, Unknown/Undifferentiated" gridMain.Rows.Add(row); break; default: //should never happen continue; //next trigger } } //EhrTriggerCur.LabLoincList arrayString = EhrTriggerCur.LabLoincList.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < arrayString.Length; i++) { row = new ODGridRow(); Loinc _loincTemp = Loincs.GetByCode(arrayString[i]); //.Split(new string[] { ";" },StringSplitOptions.None)[0]); if (_loincTemp == null) { continue; } row.Cells.Add("Laboratory"); row.Cells.Add(_loincTemp.LoincCode); row.Cells.Add("LOINC"); row.Cells.Add(_loincTemp.NameShort); //switch(arrayString[i].Split(new string[] { ";" },StringSplitOptions.RemoveEmptyEntries).Length) { // case 1://loinc only comparison // row.Cells.Add(_loincTemp.NameShort); // break; // case 2://microbiology or unitless lab. // Snomed _snomedTemp=Snomeds.GetByCode(arrayString[i].Split(new string[] { ";" },StringSplitOptions.None)[1]); // row.Cells.Add(_loincTemp.NameShort+", " // +(_snomedTemp==null?arrayString[i].Split(new string[] { ";" },StringSplitOptions.None)[1]:_snomedTemp.Description));//Example: Bacteria Identified, Campylobacter jenuni // break; // case 3://"traditional lab results" // row.Cells.Add(_loincTemp.NameShort+" " // +arrayString[i].Split(new string[] { ";" },StringSplitOptions.None)[1]+" "//example: >150 or a snomed code if microbiology // +arrayString[i].Split(new string[] { ";" },StringSplitOptions.None)[2] //example: mg/dL or blank // ); // break; // default://should never happen. Will display blank. // row.Cells.Add(""); // break; //} gridMain.Rows.Add(row); } //EhrTriggerCur.VitalLoincList arrayString = EhrTriggerCur.VitalLoincList.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < arrayString.Length; i++) { row = new ODGridRow(); string[] arrayStringElements = arrayString[i].Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); switch (arrayStringElements[0]) { case "height": row.Cells.Add("Vitals"); row.Cells.Add("8302-2"); row.Cells.Add("LOINC"); row.Cells.Add("Height" + arrayString[i].Replace("height,", "") + " in."); //Example "Age>55" gridMain.Rows.Add(row); break; case "weight": row.Cells.Add("Vitals"); row.Cells.Add("29463-7"); row.Cells.Add("LOINC"); row.Cells.Add("Weight:" + arrayString[i].Replace("weight,", "")); //Example "Gender:Male, Female, Unknown/Undifferentiated" gridMain.Rows.Add(row); break; case "bp???": row.Cells.Add("Vitals"); row.Cells.Add("???There are two."); row.Cells.Add("LOINC"); row.Cells.Add("???"); //Example "Gender:Male, Female, Unknown/Undifferentiated" gridMain.Rows.Add(row); break; case "BMI": row.Cells.Add("Vitals"); row.Cells.Add("39156-5"); row.Cells.Add("LOINC"); row.Cells.Add("BMI" + arrayString[i].Replace("BMI,", "").Replace("%", "") + "%"); //Example "Gender:Male, Female, Unknown/Undifferentiated" gridMain.Rows.Add(row); break; default: //should never happen continue; //next trigger } } //End trigger fields. gridMain.EndUpdate(); }
private void FillGrid() { gridMain.BeginUpdate(); gridMain.Columns.Clear(); ODGridColumn col = new ODGridColumn("Date", 70); gridMain.Columns.Add(col); col = new ODGridColumn("Type", 170); gridMain.Columns.Add(col); col = new ODGridColumn("Description", 170); gridMain.Columns.Add(col); col = new ODGridColumn("Documentation", 170); gridMain.Columns.Add(col); gridMain.Rows.Clear(); ODGridRow row; List <ODGridRow> listRows = new List <ODGridRow>(); #region AssessedEvents _ListEvents = EhrMeasureEvents.RefreshByType(PatCur.PatNum, EhrMeasureEventType.TobaccoUseAssessed); for (int i = 0; i < _ListEvents.Count; i++) { row = new ODGridRow(); row.Cells.Add(_ListEvents[i].DateTEvent.ToShortDateString()); Loinc lCur = Loincs.GetByCode(_ListEvents[i].CodeValueEvent); //TobaccoUseAssessed events can be one of three types, all LOINC codes if (lCur != null) { row.Cells.Add(lCur.NameLongCommon); } else { row.Cells.Add(_ListEvents[i].EventType.ToString()); } Snomed sCur = Snomeds.GetByCode(_ListEvents[i].CodeValueResult); if (sCur != null) { row.Cells.Add(sCur.Description); } else { row.Cells.Add(""); } row.Cells.Add(_ListEvents[i].MoreInfo); row.Tag = _ListEvents[i]; listRows.Add(row); } #endregion #region CessationInterventions _ListInterventions = Interventions.Refresh(PatCur.PatNum, InterventionCodeSet.TobaccoCessation); for (int i = 0; i < _ListInterventions.Count; i++) { row = new ODGridRow(); row.Cells.Add(_ListInterventions[i].DateEntry.ToShortDateString()); row.Cells.Add(InterventionCodeSet.TobaccoCessation.ToString() + " Counseling"); string descript = ""; switch (_ListInterventions[i].CodeSystem) { case "CPT": Cpt cptCur = Cpts.GetByCode(_ListInterventions[i].CodeValue); if (cptCur != null) { descript = cptCur.Description; } break; case "SNOMEDCT": Snomed sCur = Snomeds.GetByCode(_ListInterventions[i].CodeValue); if (sCur != null) { descript = sCur.Description; } break; } row.Cells.Add(descript); row.Cells.Add(_ListInterventions[i].Note); row.Tag = _ListInterventions[i]; listRows.Add(row); } #endregion #region CessationMedications _ListMedPats = MedicationPats.Refresh(PatCur.PatNum, true); List <EhrCode> listEhrMeds = EhrCodes.GetForValueSetOIDs(new List <string> { "2.16.840.1.113883.3.526.3.1190" }, true); //Tobacco Use Cessation Pharmacotherapy Value Set //listEhrMeds will contain 41 medications for tobacco cessation if those exist in the rxnorm table for (int i = _ListMedPats.Count - 1; i > -1; i--) { bool found = false; for (int j = 0; j < listEhrMeds.Count; j++) { if (_ListMedPats[i].RxCui.ToString() == listEhrMeds[j].CodeValue) { found = true; break; } } if (!found) { _ListMedPats.RemoveAt(i); } } for (int i = 0; i < _ListMedPats.Count; i++) { row = new ODGridRow(); string dateRange = ""; if (_ListMedPats[i].DateStart.Year > 1880) { dateRange = _ListMedPats[i].DateStart.ToShortDateString(); } if (_ListMedPats[i].DateStop.Year > 1880) { if (dateRange != "") { dateRange += " - "; } dateRange += _ListMedPats[i].DateStop.ToShortDateString(); } if (dateRange == "") { dateRange = _ListMedPats[i].DateTStamp.ToShortDateString(); } row.Cells.Add(dateRange); row.Cells.Add(InterventionCodeSet.TobaccoCessation.ToString() + " Medication"); string medDescript = RxNorms.GetDescByRxCui(_ListMedPats[i].RxCui.ToString()); row.Cells.Add(medDescript); row.Cells.Add(_ListMedPats[i].PatNote); row.Tag = _ListMedPats[i]; listRows.Add(row); } #endregion listRows.Sort(SortDate); for (int i = 0; i < listRows.Count; i++) { gridMain.Rows.Add(listRows[i]); } gridMain.EndUpdate(); }