Commit bf6a7751 by ruyun.zhang@suvalue.com

Merge branch 'feature/公式1009修改' into v2020morge

parents ab222643 dbcf0688
......@@ -290,5 +290,18 @@ public ApiResponse GetBaiscnorm([FromBody] ComputerRequest request)
var list = _computeService.GetBaiscnorm(request.AllotId);
return new ApiResponse(ResponseType.OK, "ok", list);
}
/// <summary>
/// 医生绩效详情
/// </summary>
/// <param name="computeId"></param>
/// <returns></returns>
[Route("doctordetail/{computeId}")]
[HttpPost]
public ApiResponse DoctorDetail(int computeId)
{
var result = _computeService.GetDoctorDetail(computeId);
return new ApiResponse(ResponseType.OK, result);
}
}
}
\ No newline at end of file
......@@ -393,6 +393,13 @@
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ComputeController.DoctorDetail(System.Int32)">
<summary>
医生绩效详情
</summary>
<param name="computeId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ConfigController.GetDrugList(Performance.DtoModels.DrugpropRequest)">
<summary>
获取 药占比配置信息列表
......
......@@ -596,7 +596,12 @@
</member>
<member name="P:Performance.DtoModels.ComputeResult.ShouldGiveFee">
<summary>
应发管理绩效(需计算)
考核前管理绩效
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResult.AssessLaterManagementFee">
<summary>
考核后管理绩效
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResult.PerforSumFee">
......@@ -646,7 +651,7 @@
</member>
<member name="P:Performance.DtoModels.ComputeResult.GiveFee">
<summary>
应发绩效 考核(需计算)
应发绩效 考核(需计算)
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResult.BaiscNormPerforTotal">
......@@ -679,11 +684,6 @@
工号
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResult.ManagerNumber">
<summary>
科主任/护士长人数
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResult.MedicalNumber">
<summary>
核算单元人员数量
......@@ -777,6 +777,21 @@
<member name="F:Performance.DtoModels.SheetType.OtherWorkload">
<summary> 其他工作量(不参与核算) </summary>
</member>
<member name="F:Performance.DtoModels.SheetType.BudgetRatio">
<summary> 预算比例 </summary>
</member>
<member name="F:Performance.DtoModels.SheetType.AssessBeforeOtherFee">
<summary> 科室考核前其他绩效 </summary>
</member>
<member name="F:Performance.DtoModels.SheetType.PersonOtherManagePerforFee">
<summary> 其他管理绩效 </summary>
</member>
<member name="F:Performance.DtoModels.SheetType.PersonAdjustLaterOtherManagePerforFee">
<summary> 调节后其他管理绩效 </summary>
</member>
<member name="F:Performance.DtoModels.SheetType.PersonPostCoefficient">
<summary> 个人岗位系数 </summary>
</member>
<member name="T:Performance.DtoModels.AccountUnitType">
<summary>
核算单元类型
......@@ -905,9 +920,14 @@
核算单元
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.ManagerNumber">
<member name="P:Performance.DtoModels.PerDataAccountBaisc.EmployeeName">
<summary>
科主任/护士长数量
医生姓名
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.PermanentStaff">
<summary>
效率绩效人数
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.Number">
......@@ -950,6 +970,16 @@
考核对分率
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.AssessLaterManagementFee">
<summary>
考核后管理绩效
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.Management">
<summary>
管理绩效发放系数
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.AssessLaterOtherFee">
<summary>
考核后其他绩效
......@@ -970,16 +1000,36 @@
规模绩效系数
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.ScalePerfor">
<summary>
规模绩效
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.Effic">
<summary>
效率绩效系数
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.EfficPerfor">
<summary>
效率绩效
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.Attendance">
<summary>
出勤率
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.Grant">
<summary>
发放系数
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.ShouldGiveFee">
<summary>
应发管理绩效
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.MedicineFactor">
<summary>
药占比系数
......@@ -1015,6 +1065,11 @@
人均绩效
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.AvgPerfor">
<summary>
人均核算绩效
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.RealGiveFee">
<summary>
实发绩效
......@@ -2645,7 +2700,7 @@
<summary> 收入项名称 </summary>
</member>
<member name="P:Performance.DtoModels.DetailDtos`1.IncomeType">
<summary> 1、收入 2、支出 3、工作量 4、特殊科室 5、科室奖罚 6、科室药占比考核 7、科室材料占比考核 </summary>
<summary> 1、收入 2、支出 3、工作量 4、特殊科室 5、科室奖罚 6、科室药占比考核 7、科室材料占比考核 8、调节后其他绩效 </summary>
</member>
<member name="P:Performance.DtoModels.DetailDtos`1.Amount">
<summary> 金额 </summary>
......
......@@ -2033,11 +2033,6 @@
定科人数
</summary>
</member>
<member name="P:Performance.EntityModels.im_accountbasic.DoctorDirectorNumber">
<summary>
科主任数量
</summary>
</member>
<member name="P:Performance.EntityModels.im_accountbasic.DoctorNumber">
<summary>
核算单元医生数量
......@@ -4288,11 +4283,6 @@
是否带入平均计算 是 否
</summary>
</member>
<member name="P:Performance.EntityModels.res_account.ManagerNumber">
<summary>
科主任/护士长数量
</summary>
</member>
<member name="P:Performance.EntityModels.res_account.Number">
<summary>
核算单元医生数量
......
......@@ -111,11 +111,11 @@ public AutoMapperConfigs()
.ForMember(dest => dest.UnitType, opt => opt.MapFrom(src => EnumHelper.GetItems<UnitType>().First(t => t.Name == src.UnitType.Replace("行政工勤", "行政后勤")).Value))
.ForMember(dest => dest.DoctorAccountingUnit, opt => opt.MapFrom(src => src.AccountingUnit))
//.ForMember(dest => dest.Department, opt => opt.MapFrom(src => src.Department))
.ForMember(dest => dest.DoctorDirectorNumber, opt => opt.MapFrom(src => src.ManagerNumber))
//.ForMember(dest => dest.DoctorDirectorNumber, opt => opt.MapFrom(src => src.ManagerNumber))
.ForMember(dest => dest.DoctorNumber, opt => opt.MapFrom(src => src.Number))
.ForMember(dest => dest.DoctorBasicFactor, opt => opt.MapFrom(src => src.BasicFactor))
//.ForMember(dest => dest.DoctorSlopeFactor, opt => opt.MapFrom(src => src.SlopeFactor))
.ForMember(dest => dest.DoctorOtherPerfor1, opt => opt.MapFrom(src => src.OtherPerfor1))
//.ForMember(dest => dest.DoctorOtherPerfor1, opt => opt.MapFrom(src => src.OtherPerfor1))
//.ForMember(dest => dest.DoctorOtherPerfor2, opt => opt.MapFrom(src => src.OtherPerfor2))
//.ForMember(dest => dest.DoctorExtra, opt => opt.MapFrom(src => src.Extra))
.ForMember(dest => dest.DoctorScoringAverage, opt => opt.MapFrom(src => src.ScoringAverage))
......
......@@ -71,11 +71,16 @@ public class ComputeResult
public Nullable<decimal> Grant { get; set; }
/// <summary>
/// 应发管理绩效(需计算)
/// 考核前管理绩效
/// </summary>
public Nullable<decimal> ShouldGiveFee { get; set; }
/// <summary>
/// 考核后管理绩效
/// </summary>
public Nullable<decimal> AssessLaterManagementFee { get; set; }
/// <summary>
/// 绩效合计 考核前(需计算)
/// </summary>
public Nullable<decimal> PerforSumFee { get; set; }
......@@ -121,7 +126,7 @@ public class ComputeResult
public Nullable<decimal> OtherPerfor { get; set; }
/// <summary>
/// 应发绩效 考核(需计算)
/// 应发绩效 考核(需计算)
/// </summary>
public Nullable<decimal> GiveFee { get; set; }
......@@ -174,10 +179,10 @@ public class ComputeResult
///// </summary>
//public decimal? Workload { get; set; }
/// <summary>
/// 科主任/护士长人数
/// </summary>
public Nullable<decimal> ManagerNumber { get; set; }
///// <summary>
///// 科主任/护士长人数
///// </summary>
//public Nullable<decimal> ManagerNumber { get; set; }
/// <summary>
/// 核算单元人员数量
......
......@@ -131,6 +131,23 @@ public enum SheetType
/// <summary> 其他工作量(不参与核算) </summary>
[Description("其他工作量")]
OtherWorkload = 28,
/// <summary> 预算比例 </summary>
[Description("预算比例")]
BudgetRatio = 30,
/// <summary> 科室考核前其他绩效 </summary>
[Description("科室考核前其他绩效")]
AssessBeforeOtherFee = 31,
/// <summary> 其他管理绩效 </summary>
[Description("其他管理绩效")]
PersonOtherManagePerforFee = 32,
/// <summary> 调节后其他管理绩效 </summary>
[Description("调节后其他管理绩效")]
PersonAdjustLaterOtherManagePerforFee = 33,
/// <summary> 个人岗位系数 </summary>
[Description("个人岗位系数")]
PersonPostCoefficient = 34,
}
/// <summary>
......
......@@ -28,20 +28,25 @@ public class PerDataAccountBaisc : IPerData
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 医生姓名
/// </summary>
public string EmployeeName { get; set; }
///// <summary>
///// 科室名称
///// </summary>
//public string Department { get; set; }
///// <summary>
///// 效率绩效人数
///// </summary>
//public decimal PermanentStaff { get; set; }
/// <summary>
/// 科主任/护士长数量
/// 效率绩效人数
/// </summary>
public decimal ManagerNumber { get; set; }
public decimal PermanentStaff { get; set; }
///// <summary>
///// 科主任/护士长数量
///// </summary>
//public decimal ManagerNumber { get; set; }
/// <summary>
/// 核算单元医生数量
......@@ -58,10 +63,10 @@ public class PerDataAccountBaisc : IPerData
///// </summary>
//public decimal SlopeFactor { get; set; }
/// <summary>
/// 其他绩效1
/// </summary>
public decimal OtherPerfor1 { get; set; }
///// <summary>
///// 其他绩效1
///// </summary>
//public decimal OtherPerfor1 { get; set; }
/// <summary>
/// 考核前其他绩效
......@@ -94,6 +99,16 @@ public class PerDataAccountBaisc : IPerData
public decimal ScoringAverage { get; set; }
/// <summary>
/// 考核后管理绩效
/// </summary>
public Nullable<decimal> AssessLaterManagementFee { get; set; }
/// <summary>
/// 管理绩效发放系数
/// </summary>
public Nullable<decimal> Management { get; set; }
/// <summary>
/// 考核后其他绩效
/// </summary>
public Nullable<decimal> AssessLaterOtherFee { get; set; }
......@@ -114,15 +129,35 @@ public class PerDataAccountBaisc : IPerData
public decimal Scale { get; set; }
/// <summary>
/// 规模绩效
/// </summary>
public decimal ScalePerfor { get; set; }
/// <summary>
/// 效率绩效系数
/// </summary>
public decimal Effic { get; set; }
/// <summary>
/// 效率绩效
/// </summary>
public decimal EfficPerfor { get; set; }
/// <summary>
/// 出勤率
/// </summary>
public Nullable<decimal> Attendance { get; set; }
/// <summary>
/// 发放系数
/// </summary>
public decimal Grant { get; set; }
/// <summary>
/// 应发管理绩效
/// </summary>
public decimal ShouldGiveFee { get; set; }
///// <summary>
///// 保底绩效参考标准
///// </summary>
......@@ -183,6 +218,11 @@ public class PerDataAccountBaisc : IPerData
public Nullable<decimal> Avg { get; set; }
/// <summary>
/// 人均核算绩效
/// </summary>
public Nullable<decimal> AvgPerfor { get; set; }
/// <summary>
/// 实发绩效
/// </summary>
public Nullable<decimal> RealGiveFee { get; set; }
......
......@@ -101,10 +101,10 @@ public class PerDataClinicEmployee : IPerData
/// </summary>
public Nullable<decimal> OtherManagePerfor { get; set; }
/// <summary>
/// 其他绩效
/// </summary>
public Nullable<decimal> OthePerfor { get; set; }
///// <summary>
///// 其他绩效
///// </summary>
//public Nullable<decimal> OthePerfor { get; set; }
///// <summary>
///// 夜班费
......
......@@ -47,7 +47,7 @@ public class DetailDtos<T>
/// <summary> 收入项名称 </summary>
public string ItemName { get; set; }
/// <summary> 1、收入 2、支出 3、工作量 4、特殊科室 5、科室奖罚 6、科室药占比考核 7、科室材料占比考核 </summary>
/// <summary> 1、收入 2、支出 3、工作量 4、特殊科室 5、科室奖罚 6、科室药占比考核 7、科室材料占比考核 8、调节后其他绩效 </summary>
public int IncomeType { get; set; }
/// <summary> 金额 </summary>
......
......@@ -61,10 +61,10 @@ public class im_accountbasic
/// </summary>
public Nullable<decimal> PermanentStaff { get; set; }
/// <summary>
/// 科主任数量
/// </summary>
public Nullable<decimal> DoctorDirectorNumber { get; set; }
///// <summary>
///// 科主任数量
///// </summary>
//public Nullable<decimal> DoctorDirectorNumber { get; set; }
/// <summary>
/// 核算单元医生数量
......
......@@ -56,10 +56,10 @@ public class res_account
///// </summary>
//public Nullable<decimal> PermanentStaff { get; set; }
/// <summary>
/// 科主任/护士长数量
/// </summary>
public Nullable<decimal> ManagerNumber { get; set; }
///// <summary>
///// 科主任/护士长数量
///// </summary>
//public Nullable<decimal> ManagerNumber { get; set; }
/// <summary>
/// 核算单元医生数量
......
......@@ -19,7 +19,7 @@ public class BaiscNormService : IAutoInjection
/// </summary>
/// <param name="computes"></param>
/// <returns></returns>
public List<res_baiscnorm> ComputeAvg(List<res_baiscnorm> baiscnormList, List<im_accountbasic> accountbasicList, List<ComputeResult> computes)
public List<res_baiscnorm> ComputeAvg(List<res_baiscnorm> baiscnormList, List<ComputeEmployee> computeEmployees, List<ComputeResult> computes)
{
var keyList = new[]
{
......@@ -30,7 +30,7 @@ public List<res_baiscnorm> ComputeAvg(List<res_baiscnorm> baiscnormList, List<im
};
foreach (var item in keyList)
{
var count = accountbasicList.Where(t => t.UnitType == (int)item.UnitType).Sum(t => t.DoctorDirectorNumber);
var count = computeEmployees.Where(t => t.UnitType == item.UnitType.ToString()).Sum(t => t.Basics);
var dataList = computes.Where(t => t.UnitType == item.UnitType.ToString());
var baiscnorm = new res_baiscnorm
{
......@@ -163,7 +163,7 @@ public List<res_baiscnorm> DocterNurseBaiscnorm(List<res_baiscnorm> baiscnormLis
//剔除不同科室相同核算单元
var groupData = perData.Where(t => t.UnitType == info.UnitType.ToString())
.GroupBy(t => t.AccountingUnit)
.Select(t => new { AccountingUnit = t.Key, Number = t.Sum(p => p.ManagerNumber + p.Number), PerforTotal = t.Sum(p => p.PerforTotal) });
.Select(t => new { AccountingUnit = t.Key, Number = t.Sum(p => p.Number), PerforTotal = t.Sum(p => p.PerforTotal) });
var baiscnorm = new res_baiscnorm
{
......
......@@ -260,7 +260,7 @@ public void Save(List<PerSheet> perSheets, int allotId)
/// <param name="perSheet"></param>
/// <returns></returns>
public List<PerSheet> Compute(PerExcel excel, List<PerSheet> perSheet, IEnumerable<AccountUnitTotal> extras,
IEnumerable<AccountUnitTotal> drugExtras, IEnumerable<AccountUnitTotal> materialsExtras, IEnumerable<AccountUnitTotal> accountScoreAverages)
IEnumerable<AccountUnitTotal> drugExtras, IEnumerable<AccountUnitTotal> materialsExtras)
{
var accountList = excel.PerSheet.FirstOrDefault(t => t.SheetType == SheetType.AccountBasic)?.PerData?.Select(t => (PerDataAccountBaisc)t);
var economicData = perSheet.FirstOrDefault(t => t.SheetType == SheetType.ComputeEconomic)?.PerData?.Select(t => (PerData)t);
......@@ -287,7 +287,7 @@ public void Save(List<PerSheet> perSheets, int allotId)
var extra = extras?.FirstOrDefault(w => w.UnitType == unitType.ToString() && w.AccountingUnit == dept.AccountingUnit)?.TotelValue;
var drugExtra = drugExtras?.FirstOrDefault(w => w.UnitType == unitType.ToString() && w.AccountingUnit == dept.AccountingUnit)?.TotelValue;
var materialsExtra = materialsExtras?.FirstOrDefault(w => w.UnitType == unitType.ToString() && w.AccountingUnit == dept.AccountingUnit)?.TotelValue;
var scoreAverage = accountScoreAverages?.FirstOrDefault(w => w.UnitType == unitType.ToString() && w.AccountingUnit == dept.AccountingUnit)?.TotelValue;
//var scoreAverage = accountScoreAverages?.FirstOrDefault(w => w.UnitType == unitType.ToString() && w.AccountingUnit == dept.AccountingUnit)?.TotelValue;
var econDoctor = economicData.FirstOrDefault(t => t.UnitType == unitType.ToString() && t.AccountingUnit == dept.AccountingUnit);
var workDoctor = info.Data.FirstOrDefault(t => t.UnitType == unitType.ToString() && t.AccountingUnit == dept.AccountingUnit);
......@@ -312,10 +312,12 @@ public void Save(List<PerSheet> perSheets, int allotId)
dept.MedicineExtra = (drugExtra ?? 0);
dept.MaterialsExtra = (materialsExtra ?? 0);
dept.PerforFee = dept.Income * dept.BasicFactor;
dept.PerforTotal = Math.Round((dept.PerforFee + dept.WorkloadFee + dept.OtherPerfor1 + dept.AssessBeforeOtherFee) ?? 0);
//dept.PerforTotal = Math.Round((dept.PerforFee + dept.WorkloadFee + dept.OtherPerfor1 + dept.AssessBeforeOtherFee) ?? 0);
dept.PerforTotal = Math.Round((dept.PerforFee + dept.WorkloadFee + dept.AssessBeforeOtherFee) ?? 0);
dept.AssessLaterPerforTotal = Math.Round((dept.PerforTotal * dept.ScoringAverage + dept.MedicineExtra + dept.MaterialsExtra + dept.Extra + dept.AssessLaterOtherFee) ?? 0);
dept.RealGiveFee = Math.Round((dept.AssessLaterPerforTotal * dept.AdjustFactor + dept.AdjustLaterOtherFee) ?? 0);
dept.Avg = dept.ManagerNumber + dept.Number == 0 ? 0 : dept.PerforTotal / (dept.ManagerNumber + dept.Number);
//dept.Avg = dept.ManagerNumber + dept.Number == 0 ? 0 : dept.PerforTotal / (dept.ManagerNumber + dept.Number);
dept.Avg = dept.Number == 0 ? 0 : dept.PerforTotal / dept.Number;
}
sheet.PerData.AddRange(atDataList);
......
......@@ -86,7 +86,7 @@ public class ResultComputeService : IAutoInjection
var computResult = computeDirector.Compute(computeEmployees, accountSheet, allot, employeeExtra);
//计算 绩效标准 基数(科主任、副主任、护士长 =>> 平均值)
List<res_baiscnorm> baiscnormList = new List<res_baiscnorm>();
baiscNormService.ComputeAvg(baiscnormList, accountbasicList, computResult);
baiscNormService.ComputeAvg(baiscnormList, computeEmployees, computResult);
baiscNormService.DocterNurseBaiscnorm(baiscnormList, accountbasicList, accountSheet);
var empolyeeList2 = perforImEmployeeRepository.GetEntities(t => t.AllotID == allot.ID);
......@@ -122,9 +122,9 @@ public class ResultComputeService : IAutoInjection
/// </summary>
/// <param name="excel"></param>
/// <param name="allot"></param>
public void SpecialUnitCompute(PerExcel excel, per_allot allot, List<PerSheet> sheetLast, List<res_baiscnorm> baiscnormList,
public void SpecialUnitCompute(PerExcel excel, per_allot allot, List<res_baiscnorm> baiscnormList,
IEnumerable<AccountUnitTotal> accountExtras, IEnumerable<AccountUnitTotal> drugExtras, IEnumerable<AccountUnitTotal> materialsExtras,
IEnumerable<EmpolyeeTotal> employeeExtra, IEnumerable<AccountUnitTotal> accountScoreAverages)
IEnumerable<EmpolyeeTotal> employeeExtra)
{
var isBudget = budgetService.GetAdjustAndGrant(allot, out decimal adjust, out decimal grant);
var typeList = EnumHelper.GetItems<PerforType>();
......@@ -173,7 +173,7 @@ public class ResultComputeService : IAutoInjection
var extra = accountExtras?.FirstOrDefault(w => w.UnitType == UnitType.特殊核算组.ToString() && w.AccountingUnit == dept?.AccountingUnit)?.TotelValue;
var drugExtra = drugExtras?.FirstOrDefault(w => w.UnitType == UnitType.特殊核算组.ToString() && w.AccountingUnit == dept?.AccountingUnit)?.TotelValue;
var materialsExtra = materialsExtras?.FirstOrDefault(w => w.UnitType == UnitType.特殊核算组.ToString() && w.AccountingUnit == dept?.AccountingUnit)?.TotelValue;
var scoreAverage = accountScoreAverages?.FirstOrDefault(w => w.UnitType == UnitType.特殊核算组.ToString() && w.AccountingUnit == dept?.AccountingUnit)?.TotelValue;
//var scoreAverage = accountScoreAverages?.FirstOrDefault(w => w.UnitType == UnitType.特殊核算组.ToString() && w.AccountingUnit == dept?.AccountingUnit)?.TotelValue;
decimal? headcount = null;
if (typeList.Any(o => o.Description == item.QuantitativeIndicators))
......@@ -196,7 +196,7 @@ public class ResultComputeService : IAutoInjection
QuantitativeFee = item.Quantity * item.QuantitativeIndicatorsValue * headcount,
//ScoringAverage = scoreAverage.HasValue ? scoreAverage : dept?.ScoringAverage,
ScoringAverage = dept?.ScoringAverage ?? 0,
OtherPerfor = dept?.OtherPerfor1,
//OtherPerfor = dept?.OtherPerfor1,
Punishment = (extra ?? 0),
MedicineExtra = (drugExtra ?? 0),
MaterialsExtra = (materialsExtra ?? 0),
......@@ -226,7 +226,7 @@ public class ResultComputeService : IAutoInjection
&& (!string.IsNullOrEmpty(w.EmployeeName) || !string.IsNullOrEmpty(w.JobNumber)))
.FirstOrDefault(w => w.AccountingUnit == empolyee.AccountingUnit && w.UnitType == empolyee.UnitType
&& w.JobNumber == empolyee.JobNumber && w.EmployeeName == empolyee.DoctorName)?.TotelValue;
var avg = (group.Number == 0 ? 0 : (sumValue / group.Number));
var empolyeeAdjust = isBudget ? adjust : empolyee.Adjust;
var compute = new ComputeResult
{
......@@ -244,29 +244,45 @@ public class ResultComputeService : IAutoInjection
OtherManagePerfor = empolyee.OtherManagePerfor,
Number = group.Number,
PerforTotal = sumValue,
Avg = group.Number == 0 ? 0 : (sumValue / group.Number),
//Avg = group.Number == 0 ? 0 : (sumValue / group.Number),
Adjust = empolyeeAdjust ?? 1m,
Grant = isBudget ? grant : empolyee.Management,
Attendance = empolyee.Attendance ?? 0,
AssessBeforeOtherFee = empolyee?.AssessBeforeOtherFee ?? 0,
AssessLaterOtherFee = empolyee?.AssessLaterOtherFee ?? 0,
AdjustLaterOtherFee = empolyee?.AdjustLaterOtherFee ?? 0,
Efficiency = avg * (empolyee.Efficiency ?? 0),
Scale = sumValue * (empolyee.Scale ?? 0),
};
compute.Efficiency = compute.Avg * (empolyee.Efficiency ?? 1);
compute.Scale = compute.PerforTotal * (empolyee.Scale ?? 1);
//应发管理绩效
compute.ShouldGiveFee = Math.Round((compute.Efficiency + compute.Scale) * compute.Grant ?? 0);
//绩效合计
compute.PerforSumFee = Math.Round(compute.Avg + compute.ShouldGiveFee + compute.AssessBeforeOtherFee ?? 0);
//应发绩效
//compute.GiveFee = compute.PerforSumFee;
compute.GiveFee = Math.Round(compute.PerforSumFee * compute.ScoreAverageRate * compute.Attendance + compute.Punishment + compute.AssessLaterOtherFee ?? 0);
//实发绩效
//compute.RealGiveFee = (compute.GiveFee * compute.ScoreAverageRate + (compute.Punishment ?? 0) + (compute.OtherPerfor ?? 0)) * (compute.Adjust ?? 1m);
compute.RealGiveFee = Math.Round(compute.GiveFee * compute.Adjust + compute.AdjustLaterOtherFee ?? 0);
compute.Avg = (group.Number == 0 ? 0 : (sumValue / group.Number)) * (empolyee.Basics ?? 0) * compute.Attendance;
// 考核前管理绩效
compute.ShouldGiveFee = Math.Round((compute.Efficiency + compute.Scale) * compute.Grant + compute.OtherManagePerfor ?? 0);
// 考核后管理绩效
compute.AssessLaterManagementFee = Math.Round(compute.ShouldGiveFee * compute.ScoreAverageRate * compute.Attendance + compute.Punishment ?? 0);
// 考核前绩效
compute.PerforSumFee = compute.Attendance == 0 ? Math.Round(compute.ShouldGiveFee ?? 0) : Math.Round(compute.Avg / compute.Attendance + compute.ShouldGiveFee ?? 0);
// 考核后绩效
compute.GiveFee = Math.Round(compute.Avg + compute.AssessLaterManagementFee ?? 0);
// 参考基数专用绩效合计
compute.BaiscNormPerforTotal = compute.PerforSumFee;
// 实发绩效
compute.RealGiveFee = Math.Round((compute.Avg + compute.AssessLaterManagementFee) * compute.Adjust + compute.AdjustLaterOtherFee ?? 0);
//compute.Efficiency = compute.Avg * (empolyee.Efficiency ?? 1);
//compute.Scale = compute.PerforTotal * (empolyee.Scale ?? 1);
////应发管理绩效
//compute.ShouldGiveFee = Math.Round((compute.Efficiency + compute.Scale) * compute.Grant ?? 0);
////绩效合计
//compute.PerforSumFee = Math.Round(compute.Avg + compute.ShouldGiveFee + compute.AssessBeforeOtherFee ?? 0);
////应发绩效
////compute.GiveFee = compute.PerforSumFee;
//compute.GiveFee = Math.Round(compute.PerforSumFee * compute.ScoreAverageRate * compute.Attendance + compute.Punishment + compute.AssessLaterOtherFee ?? 0);
////实发绩效
////compute.RealGiveFee = (compute.GiveFee * compute.ScoreAverageRate + (compute.Punishment ?? 0) + (compute.OtherPerfor ?? 0)) * (compute.Adjust ?? 1m);
//compute.RealGiveFee = Math.Round(compute.GiveFee * compute.Adjust + compute.AdjustLaterOtherFee ?? 0);
//// 参考基数专用绩效合计
//compute.BaiscNormPerforTotal = compute.PerforSumFee;
computeList.Add(compute);
}
......
......@@ -373,7 +373,7 @@ public void Generate(per_allot allot, string mail)
//重新计算科室业绩(含所有提供保底金额)
logManageService.WriteMsg("正在生成绩效", "计算科室业绩分", 1, allot.ID, "ReceiveMessage", true);
var sheetLast = processComputService.Compute(excel, mergeSheets, accountExtras, drugExtras, materialsExtras, accountScoreAverages);
var sheetLast = processComputService.Compute(excel, mergeSheets, accountExtras, drugExtras, materialsExtras);
//保存计算过程数据
logManageService.WriteMsg("正在生成绩效", "保存科室业绩结果及计算过程中产生的数据", 1, allot.ID, "ReceiveMessage", true);
......@@ -392,7 +392,7 @@ public void Generate(per_allot allot, string mail)
// 计算特殊科室
logManageService.WriteMsg("正在生成绩效", "计算最终特殊科室绩效数据", 1, allot.ID, "ReceiveMessage", true);
resultComputeService.SpecialUnitCompute(excel, allot, sheetLast, baiscnormList, accountExtras, drugExtras, materialsExtras, employeeExtra, accountScoreAverages);
resultComputeService.SpecialUnitCompute(excel, allot, baiscnormList, accountExtras, drugExtras, materialsExtras, employeeExtra);
logManageService.WriteMsg("正在生成绩效", "保存最终特殊科室绩效数据", 1, allot.ID, "ReceiveMessage", true);
//保存 绩效人均参考标准
......
......@@ -179,7 +179,7 @@ private bool EditAccountBasic(int userId, OriginalRequest request)
{ "核算单元", nameof(im_accountbasic.DoctorAccountingUnit) },
//{ "科室名称", nameof(im_accountbasic.Department) },
{ "效率绩效人数", nameof(im_accountbasic.PermanentStaff) },
{ "科主任/护士长人数", nameof(im_accountbasic.DoctorDirectorNumber) },
//{ "科主任/护士长人数", nameof(im_accountbasic.DoctorDirectorNumber) },
{ "核算单元人员数量", nameof(im_accountbasic.DoctorNumber) },
{ "预算比例", nameof(im_accountbasic.DoctorBasicFactor) },
//{ "倾斜系数", nameof(im_accountbasic.DoctorSlopeFactor) },
......
......@@ -48,7 +48,7 @@ public class ExcelReadConfig
new ColumnInfo(nameof(PerDataClinicEmployee.AssessLaterOtherFee), "考核后其他绩效", true),
new ColumnInfo(nameof(PerDataClinicEmployee.Attendance), "出勤率", true),
new ColumnInfo(nameof(PerDataClinicEmployee.OtherManagePerfor), "其他管理绩效"),
new ColumnInfo(nameof(PerDataClinicEmployee.OthePerfor), "其他绩效"),
//new ColumnInfo(nameof(PerDataClinicEmployee.OthePerfor), "其他绩效"),
//new ColumnInfo(nameof(PerDataClinicEmployee.NightWorkPerfor), "夜班费"),
new ColumnInfo(nameof(PerDataClinicEmployee.Adjust), "调节系数", true),
new ColumnInfo(nameof(PerDataClinicEmployee.AdjustLaterOtherFee), "调节后其他绩效", true),
......@@ -75,10 +75,10 @@ public class ExcelReadConfig
{
new ColumnInfo(nameof(PerDataAccountBaisc.UnitType), "核算单元类型"),
new ColumnInfo(nameof(PerDataAccountBaisc.AccountingUnit), "核算单元"),
new ColumnInfo(nameof(PerDataAccountBaisc.ManagerNumber), "科主任/护士长人数", true),
//new ColumnInfo(nameof(PerDataAccountBaisc.ManagerNumber), "科主任/护士长人数", true),
new ColumnInfo(nameof(PerDataAccountBaisc.Number), "核算单元人员数量", true),
new ColumnInfo(nameof(PerDataAccountBaisc.BasicFactor), "预算比例", true),
new ColumnInfo(nameof(PerDataAccountBaisc.OtherPerfor1), "其他绩效1", true),
//new ColumnInfo(nameof(PerDataAccountBaisc.OtherPerfor1), "其他绩效1", true),
new ColumnInfo(nameof(PerDataAccountBaisc.AssessBeforeOtherFee), "考核前其他绩效", true),
new ColumnInfo(nameof(PerDataAccountBaisc.ScoringAverage), "考核得分率", true),
new ColumnInfo(nameof(PerDataAccountBaisc.AssessLaterOtherFee), "考核后其他绩效", true),
......
......@@ -75,13 +75,32 @@ public static IPerSheetDataRead GetDataRead(SheetType sheetType, bool isnew = fa
case SheetType.AccountScoreAverage:
dataread = new PerSheetDataReadAccountExtra();
break;
case SheetType.AccountAdjustLaterOtherFee:
//dataread = new PerSheetDataReadPersonExtra(); // 科室调节后其他绩效
dataread = new PerSheetDataReadAccountExtra();
break;
//case SheetType.AccountAdjustLaterOtherFee:
// //dataread = new PerSheetDataReadPersonExtra(); // 科室调节后其他绩效
// dataread = new PerSheetDataReadAccountExtra();
// break;
case SheetType.PersonAdjustLaterOtherFee:
dataread = new PerSheetDataReadPersonExtra(); // 业务中层行政中高层调节后其他绩效
break;
case SheetType.BudgetRatio:
dataread = new PerSheetDataReadAccountExtra(); // 预算比例
break;
case SheetType.AssessBeforeOtherFee:
dataread = new PerSheetDataReadAccountExtra(); // 科室考核前其他绩效
break;
case SheetType.AccountAdjustLaterOtherFee:
dataread = new PerSheetDataReadAccountExtra(); // 科室调节后其他绩效
break;
case SheetType.PersonOtherManagePerforFee:
dataread = new PerSheetDataReadPersonExtra(); // 其他管理绩效
break;
case SheetType.PersonAdjustLaterOtherManagePerforFee:
dataread = new PerSheetDataReadPersonExtra(); // 调节后其他管理绩效
break;
case SheetType.PersonPostCoefficient:
dataread = new PerSheetDataReadPersonExtra(); // 个人岗位系数
break;
}
return dataread;
}
......
......@@ -104,12 +104,28 @@ public SheetType GetSheetType(string sheetName)
return SheetType.AccountDrugAssess;
else if (sheetName.StartsWith("5.4"))
return SheetType.AccountMaterialsAssess;
else if (sheetName.StartsWith("6.10")) // 调节后其他管理绩效
return SheetType.PersonAdjustLaterOtherManagePerforFee;
else if (sheetName.StartsWith("6.11")) // 个人岗位系数
return SheetType.PersonPostCoefficient;
else if (sheetName.StartsWith("6.1"))
return SheetType.AccountScoreAverage;
else if (sheetName.StartsWith("6.2"))
return SheetType.AccountAdjustLaterOtherFee;
return SheetType.AccountAdjustLaterOtherFee; // 与6.8相同
else if (sheetName.StartsWith("6.3"))
return SheetType.PersonAdjustLaterOtherFee;
else if (sheetName.StartsWith("6.6")) // 预算比例
return SheetType.BudgetRatio;
else if (sheetName.StartsWith("6.7")) // 科室考核前其他绩效
return SheetType.AssessBeforeOtherFee;
else if (sheetName.StartsWith("6.8")) // 科室调节后其他绩效
return SheetType.AccountAdjustLaterOtherFee;
else if (sheetName.StartsWith("6.9")) // 其他管理绩效
return SheetType.PersonOtherManagePerforFee;
return SheetType.Unidentifiable;
}
}
......
......@@ -313,7 +313,7 @@ private void AccountNurseExport(int sheetID, SheetExportResponse response)
new List<(string, Func<res_account, object>, int, int, bool, bool)>
{
("核算单元", (t) => t.AccountingUnit, 1, 1, false, false),
("护士长人数", (t) => t.ManagerNumber, 1, 1, false, false),
//("护士长人数", (t) => t.ManagerNumber, 1, 1, false, false),
("核算单元护士数量", (t) => t.Number, 1, 1, false, false),
("医生基础系数", (t) => t.BasicFactor, 1, 1, false, false),
("倾斜系数", (t) => t.SlopeFactor, 1, 1, false, true),
......@@ -366,7 +366,7 @@ private void AccountDoctorExport(int sheetID, SheetExportResponse response)
new List<(string, Func<res_account, object>, int, int, bool, bool)>
{
("核算单元", (t) => t.AccountingUnit, 1, 1, false, false),
("科主任人数", (t) => t.ManagerNumber, 1, 1, false, false),
//("科主任人数", (t) => t.ManagerNumber, 1, 1, false, false),
("核算单元医生数量", (t) => t.Number, 1, 1, false, false),
("医生基础系数", (t) => t.BasicFactor, 1, 1, false, false),
("倾斜系数", (t) => t.SlopeFactor, 1, 1, false, true),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment