public Procedure() { UnitQty = 1; IcdVersion = PrefC.GetByte(PrefName.DxIcdVersion); }
///<summary>Gets all patplans with DateNextClaims that are today or in the past.</summary> public static DataTable GetOutstandingOrtho() { if (RemotingClient.RemotingRole == RemotingRole.ClientWeb) { return(Meth.GetTable(MethodBase.GetCurrentMethod())); } if (DataConnection.DBtype == DatabaseType.Oracle) { throw new ApplicationException("Currently not Oracle compatible. Please call support."); } byte orthoMonthsTreat = PrefC.GetByte(PrefName.OrthoDefaultMonthsTreat); long orthoDefaultAutoCodeNum = PrefC.GetLong(PrefName.OrthoAutoProcCodeNum); List <long> listOrthoBandingCodeNums = ProcedureCodes.GetOrthoBandingCodeNums(); string command = @" SELECT CONCAT(patient.LName,', ', patient.FName) Patient, patient.PatNum, carrier.CarrierName, patplan.OrthoAutoNextClaimDate, IF(patientnote.OrthoMonthsTreatOverride=-1, " + orthoMonthsTreat + @", patientnote.OrthoMonthsTreatOverride) MonthsTreat, patclaims.LastSent, patclaims.NumSent, IF(insplan.OrthoAutoProcCodeNumOverride = 0, " + orthoDefaultAutoCodeNum + @", insplan.OrthoAutoProcCodeNumOverride) AS AutoCodeNum, banding.DateBanding, banding.ProvNum, banding.ClinicNum, patplan.PatPlanNum, inssub.InsSubNum, insplan.PlanNum FROM patplan INNER JOIN inssub ON inssub.InsSubNum = patplan.InsSubNum INNER JOIN insplan ON insplan.PlanNum = inssub.PlanNum AND insplan.OrthoType = " + POut.Int((int)OrthoClaimType.InitialPlusPeriodic) + @" INNER JOIN carrier ON carrier.CarrierNum = insplan.CarrierNum INNER JOIN patient ON patient.PatNum = patplan.PatNum LEFT JOIN patientnote ON patientnote.PatNum = patient.PatNum LEFT JOIN ( SELECT MAX(claim.DateSent) LastSent, COUNT(claim.ClaimNum) NumSent, claim.PatNum, claim.InsSubNum, procedurelog.CodeNum FROM claim INNER JOIN claimproc ON claimproc.ClaimNum = claim.ClaimNum INNER JOIN insplan ON claim.PlanNum = insplan.PlanNum INNER JOIN procedurelog ON procedurelog.ProcNum = claimproc.ProcNum AND procedurelog.CodeNum = IF(insplan.OrthoAutoProcCodeNumOverride = 0, " + orthoDefaultAutoCodeNum + @", insplan.OrthoAutoProcCodeNumOverride) WHERE claim.ClaimStatus IN ('S','R') GROUP BY claim.PatNum, claim.InsSubNum )patclaims ON patclaims.PatNum = patplan.PatNum AND patclaims.InsSubNum = patplan.InsSubNum LEFT JOIN ( SELECT procedurelog.PatNum, MIN(procedurelog.ProcDate) AS DateBanding, procedurelog.ProvNum, procedurelog.ClinicNum FROM procedurelog " ; if (listOrthoBandingCodeNums.Count == 0) //The first rendition of ortho auto codes looked for hard coded D codes. { command += @"INNER JOIN procedurecode ON procedurecode.CodeNum = procedurelog.CodeNum AND(procedurecode.ProcCode LIKE 'D8080%' OR procedurecode.ProcCode LIKE 'D8090%') " ; } command += @"WHERE procedurelog.ProcStatus = " + POut.Int((int)ProcStat.C) + " "; if (listOrthoBandingCodeNums.Count > 0) { command += @"AND procedurelog.CodeNum IN ( " + String.Join(",", listOrthoBandingCodeNums) + @") "; } command += @" GROUP BY procedurelog.PatNum )banding ON banding.PatNum = patplan.PatNum WHERE (patplan.OrthoAutoNextClaimDate > " + POut.Date(new DateTime(1880, 1, 1)) + " AND patplan.OrthoAutoNextClaimDate <= " + DbHelper.Curdate() + @") AND patplan.Ordinal IN (1,2) " ; //TODO: Consider the edge case where an office falls behind and the patient really needs to create multiple claims. //E.g. NextClaimDate = 11/01/2016, today is 12/16/2016, this query would only show the Nov. row, but needs to also show a row for 12/01/2016. return(Db.GetTable(command)); }