Commit 5354f590 by 799284587@qq.com

保底绩效

parent 519f3277
......@@ -560,6 +560,11 @@
<member name="F:Performance.DtoModels.AccountUnitType.行政工勤">
<summary> 临床科室 </summary>
</member>
<member name="T:Performance.DtoModels.MinimumType">
<summary>
保底绩效
</summary>
</member>
<member name="P:Performance.DtoModels.PerData.UnitType">
<summary>
核算单元类别 (医生组/护理组)
......@@ -715,6 +720,21 @@
发放系数
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.MinimumReference">
<summary>
保底绩效参考标准
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.MinimumFactor">
<summary>
保底绩效系数
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.MinimumFee">
<summary>
保底绩效金额
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.Income">
<summary>
科室业绩
......
......@@ -958,6 +958,16 @@
调节系数
</summary>
</member>
<member name="P:Performance.EntityModels.im_accountbasic.MinimumReference">
<summary>
保底绩效参考标准
</summary>
</member>
<member name="P:Performance.EntityModels.im_accountbasic.MinimumFactor">
<summary>
保底绩效系数
</summary>
</member>
<member name="P:Performance.EntityModels.im_accountbasic.NurseHeadNumber">
<summary>
护士长人数
......@@ -1690,7 +1700,7 @@
</member>
<member name="P:Performance.EntityModels.per_allot.States">
<summary>
0 数据未上传 1 数据已上传 2 正在校验数据 3 数据验证通过 4 数据错误 5 正在生成绩效 6 绩效结果解析成功 7 绩效解析失败 8 归档
0 数据未上传 1 数据已上传 2 正在校验数据 3 数据验证通过 4 数据错误 5 正在生成绩效 6 绩效结果解析成功 7 绩效解析失败 8 归档 9 等待生成
</summary>
</member>
<member name="P:Performance.EntityModels.per_allot.Remark">
......@@ -1748,66 +1758,6 @@
备注
</summary>
</member>
<member name="T:Performance.EntityModels.per_item">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.per_item.Id">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.per_item.ModuleId">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.per_item.ItemName">
<summary>
绩效考核项
</summary>
</member>
<member name="P:Performance.EntityModels.per_item.FactorValue1">
<summary>
默认系数或医生系数
</summary>
</member>
<member name="P:Performance.EntityModels.per_item.FactorValue2">
<summary>
护理系数
</summary>
</member>
<member name="P:Performance.EntityModels.per_item.ExtractId">
<summary>
抽取绩效值SQL
</summary>
</member>
<member name="T:Performance.EntityModels.per_module">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.per_module.Id">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.per_module.HospitalId">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.per_module.ModuleName">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.per_module.Description">
<summary>
</summary>
</member>
<member name="T:Performance.EntityModels.per_sheet">
<summary>
上传数据解析
......@@ -1838,41 +1788,6 @@
数据来源 1 excel 导入 2 计算
</summary>
</member>
<member name="T:Performance.EntityModels.per_special">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.per_special.Id">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.per_special.HospitalId">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.per_special.Department">
<summary>
科室
</summary>
</member>
<member name="P:Performance.EntityModels.per_special.Target">
<summary>
量化指标
</summary>
</member>
<member name="P:Performance.EntityModels.per_special.TargetFactor">
<summary>
量化指标绩效分值
</summary>
</member>
<member name="P:Performance.EntityModels.per_special.AdjustFactor">
<summary>
调节系数
</summary>
</member>
<member name="T:Performance.EntityModels.res_account">
<summary>
科室核算结果
......@@ -1928,6 +1843,21 @@
倾斜系数
</summary>
</member>
<member name="P:Performance.EntityModels.res_account.MinimumReference">
<summary>
保底绩效参考标准
</summary>
</member>
<member name="P:Performance.EntityModels.res_account.MinimumFactor">
<summary>
保底绩效系数
</summary>
</member>
<member name="P:Performance.EntityModels.res_account.MinimumFee">
<summary>
保底绩效金额
</summary>
</member>
<member name="P:Performance.EntityModels.res_account.OtherPerfor1">
<summary>
其他绩效1
......
......@@ -125,6 +125,20 @@ public enum PerforType
医生护士平均,
}
/// <summary>
/// 保底绩效
/// </summary>
public enum MinimumType
{
[Description("保底绩效临床医生人均绩效")]
保底临床医生 = 1,
[Description("保底绩效医技医生人均绩效")]
保底医技医生 = 2,
[Description("保底绩效护士人均绩效")]
保底护士 = 3,
}
///// <summary>
///// 当前枚举为效率绩效、规模绩效中系数中文名称
///// 对应表cof_director中JobTitle 全文字匹配
......
......@@ -92,10 +92,24 @@ public class PerDataAccountBaisc : IPerData
/// 发放系数
/// </summary>
public decimal Grant { get; set; }
/// <summary>
/// 保底绩效参考标准
/// </summary>
public string MinimumReference { get; set; }
/// <summary>
/// 保底绩效系数
/// </summary>
public Nullable<decimal> MinimumFactor { get; set; }
#endregion
#region 由计算得出
/// <summary>
/// 保底绩效金额
/// </summary>
public Nullable<decimal> MinimumFee { get; set; }
/// <summary>
/// 科室业绩
......
......@@ -112,6 +112,16 @@ public class im_accountbasic
public Nullable<decimal> DoctorAdjustFactor { get; set; }
/// <summary>
/// 保底绩效参考标准
/// </summary>
public string MinimumReference { get; set; }
/// <summary>
/// 保底绩效系数
/// </summary>
public Nullable<decimal> MinimumFactor { get; set; }
/// <summary>
/// 护士长人数
/// </summary>
public Nullable<decimal> NurseHeadNumber { get; set; }
......
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// <copyright file=" mod_module.cs">
// * FileName: .cs
// </copyright>
......
......@@ -62,7 +62,7 @@ public class per_allot
public Nullable<DateTime> UploadDate { get; set; }
/// <summary>
/// 0 数据未上传 1 数据已上传 2 正在校验数据 3 数据验证通过 4 数据错误 5 正在生成绩效 6 绩效结果解析成功 7 绩效解析失败 8 归档
/// 0 数据未上传 1 数据已上传 2 正在校验数据 3 数据验证通过 4 数据错误 5 正在生成绩效 6 绩效结果解析成功 7 绩效解析失败 8 归档 9 等待生成
/// </summary>
public int States { get; set; }
......
//-----------------------------------------------------------------------
// <copyright file=" per_item.cs">
// * FileName: .cs
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Performance.EntityModels
{
/// <summary>
///
/// </summary>
[Table("per_item")]
public class per_item
{
/// <summary>
///
/// </summary>
[Key]
public int Id { get; set; }
/// <summary>
///
/// </summary>
public Nullable<int> ModuleId { get; set; }
/// <summary>
/// 绩效考核项
/// </summary>
public string ItemName { get; set; }
/// <summary>
/// 默认系数或医生系数
/// </summary>
public Nullable<decimal> FactorValue1 { get; set; }
/// <summary>
/// 护理系数
/// </summary>
public string FactorValue2 { get; set; }
/// <summary>
/// 抽取绩效值SQL
/// </summary>
public Nullable<int> ExtractId { get; set; }
}
}
//-----------------------------------------------------------------------
// <copyright file=" per_module.cs">
// * FileName: .cs
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Performance.EntityModels
{
/// <summary>
///
/// </summary>
[Table("per_module")]
public class per_module
{
/// <summary>
///
/// </summary>
[Key]
public int Id { get; set; }
/// <summary>
///
/// </summary>
public Nullable<int> HospitalId { get; set; }
/// <summary>
///
/// </summary>
public string ModuleName { get; set; }
/// <summary>
///
/// </summary>
public string Description { get; set; }
}
}
//-----------------------------------------------------------------------
// <copyright file=" per_special.cs">
// * FileName: .cs
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Performance.EntityModels
{
/// <summary>
///
/// </summary>
[Table("per_special")]
public class per_special
{
/// <summary>
///
/// </summary>
[Key]
public int Id { get; set; }
/// <summary>
///
/// </summary>
public Nullable<int> HospitalId { get; set; }
/// <summary>
/// 科室
/// </summary>
public string Department { get; set; }
/// <summary>
/// 量化指标
/// </summary>
public string Target { get; set; }
/// <summary>
/// 量化指标绩效分值
/// </summary>
public Nullable<decimal> TargetFactor { get; set; }
/// <summary>
/// 调节系数
/// </summary>
public Nullable<decimal> AdjustFactor { get; set; }
}
}
......@@ -67,6 +67,21 @@ public class res_account
public Nullable<decimal> SlopeFactor { get; set; }
/// <summary>
/// 保底绩效参考标准
/// </summary>
public string MinimumReference { get; set; }
/// <summary>
/// 保底绩效系数
/// </summary>
public Nullable<decimal> MinimumFactor { get; set; }
/// <summary>
/// 保底绩效金额
/// </summary>
public Nullable<decimal> MinimumFee { get; set; }
/// <summary>
/// 其他绩效1
/// </summary>
public Nullable<decimal> OtherPerfor1 { get; set; }
......
......@@ -23,7 +23,7 @@ public class ProcessComputService : IAutoInjection
private PerforImheaderRepository perforImHeaderRepository;
private PerforImemployeeRepository perforImEmployeeRepository;
private PerforResaccountRepository perforResaccountRepository;
//private PerforResaccountnurseRepository perforResAccountnurseRepository;
private PerforResbaiscnormRepository perforResbaiscnormRepository;
private PerforCofdrugtypeRepository perforCofdrugtypeRepository;
public ProcessComputService(PerforCofincomeRepository perforCofincomeRepository,
PerforCofdrugpropRepository perforCofdrugpropRepository,
......@@ -32,7 +32,7 @@ public class ProcessComputService : IAutoInjection
PerforImheaderRepository perforImHeaderRepository,
PerforImemployeeRepository perforImEmployeeRepository,
PerforResaccountRepository perforResaccountRepository,
//PerforResaccountnurseRepository perforResAccountnurseRepository,
PerforResbaiscnormRepository perforResbaiscnormRepository,
PerforCofdrugtypeRepository perforCofdrugtypeRepository)
{
this.perforCofincomeRepository = perforCofincomeRepository;
......@@ -42,7 +42,7 @@ public class ProcessComputService : IAutoInjection
this.perforImHeaderRepository = perforImHeaderRepository;
this.perforImEmployeeRepository = perforImEmployeeRepository;
this.perforResaccountRepository = perforResaccountRepository;
//this.perforResAccountnurseRepository = perforResAccountnurseRepository;
this.perforResbaiscnormRepository = perforResbaiscnormRepository;
this.perforCofdrugtypeRepository = perforCofdrugtypeRepository;
}
......@@ -224,7 +224,9 @@ private List<PerSheet> MergeCompute(PerExcel excel, int allotid)
var deptAccounting = excel.PerSheet.FirstOrDefault(t => t.SheetType == SheetType.AccountBasic);
var dataList = deptAccounting.PerData.Select(t => (PerDataAccountBaisc)t);
var sheet = Compute(dataList, twiceEconomicResult.PerData, twiceWorkloadResult1.PerData, twiceWorkloadResult2.PerData);
var baiscnormList = ComputeMinimum(dataList, twiceEconomicResult.PerData, twiceWorkloadResult1.PerData, twiceWorkloadResult2.PerData, allotid);
var sheet = Compute(dataList, twiceEconomicResult.PerData, twiceWorkloadResult1.PerData, twiceWorkloadResult2.PerData, baiscnormList);
perSheet.AddRange(sheet);
return perSheet;
......@@ -236,7 +238,8 @@ private List<PerSheet> MergeCompute(PerExcel excel, int allotid)
/// <param name="economicData"></param>
/// <param name="workloadData"></param>
/// <returns></returns>
private List<PerSheet> Compute(IEnumerable<PerDataAccountBaisc> dataList, List<PerData> economicData, List<PerData> doctorWorkloadData, List<PerData> nurseWorkloadData)
private List<PerSheet> Compute(IEnumerable<PerDataAccountBaisc> dataList, List<PerData> economicData,
List<PerData> doctorWorkloadData, List<PerData> nurseWorkloadData, List<res_baiscnorm> baiscnormList)
{
var pairs = new[]
{
......@@ -257,13 +260,17 @@ private List<PerSheet> Compute(IEnumerable<PerDataAccountBaisc> dataList, List<P
var econDoctor = economicData.FirstOrDefault(t => t.UnitType == unitType.ToString() && t.AccountingUnit == dept.Department);
var workDoctor = info.Data.FirstOrDefault(t => t.UnitType == unitType.ToString() && t.AccountingUnit == dept.Department);
//保底绩效
var minimum = baiscnormList.FirstOrDefault(t => t.PositionName == dept.MinimumReference);
if (!string.IsNullOrEmpty(dept.MinimumReference) && minimum != null)
dept.MinimumFee = minimum.AvgValue * (dept.MinimumFactor ?? 0) * (dept.ManagerNumber + dept.Number);
dept.ScoringAverage = dept.ScoringAverage == 0m ? 1 : dept.ScoringAverage;
dept.AdjustFactor = dept.AdjustFactor == 0m ? 1 : dept.AdjustFactor;
dept.Income = econDoctor?.CellValue ?? 0;
dept.WorkloadFee = workDoctor?.CellValue ?? 0;
dept.PerforFee = dept.Income * (dept.BasicFactor + dept.SlopeFactor);
dept.PerforTotal = dept.PerforFee + dept.WorkloadFee + dept.OtherPerfor1;
dept.PerforTotal = dept.PerforFee + dept.WorkloadFee + dept.OtherPerfor1 + (dept.MinimumFee ?? 0);
dept.RealGiveFee = (dept.PerforTotal * dept.ScoringAverage + dept.Extra + dept.OtherPerfor2) * dept.AdjustFactor;
dept.Avg = dept.ManagerNumber + dept.Number == 0 ? 0 : dept.PerforTotal / (dept.ManagerNumber + dept.Number);
}
......@@ -300,6 +307,54 @@ private List<PerSheet> Compute(IEnumerable<PerDataAccountBaisc> dataList, List<P
return result;
}
/// <summary>
/// 计算保底绩效参考标准
/// </summary>
/// <param name="baiscnormList"></param>
/// <param name="allotId"></param>
public List<res_baiscnorm> ComputeMinimum(IEnumerable<PerDataAccountBaisc> accountList, List<PerData> economicData, List<PerData> doctorWorkloadData, List<PerData> nurseWorkloadData, int allotId)
{
var basicRuleList = new[]
{
new { Data = doctorWorkloadData, MinimumType = MinimumType.保底临床医生, UnitType = UnitType.医生组 },
new { Data = doctorWorkloadData, MinimumType = MinimumType.保底医技医生, UnitType = UnitType.医技组 },
new { Data = nurseWorkloadData, MinimumType = MinimumType.保底护士, UnitType = UnitType.护理组 },
};
List<res_baiscnorm> baiscnormList = new List<res_baiscnorm>();
foreach (var rule in basicRuleList)
{
var dataList = accountList.Where(t => t.UnitType == (int)rule.UnitType);
var count = dataList.Sum(t => t.ManagerNumber + t.Number);
decimal totalValue = 0m;
foreach (var dept in dataList)
{
var econDoctor = economicData.FirstOrDefault(t => t.UnitType == rule.UnitType.ToString() && t.AccountingUnit == dept.Department);
var workDoctor = rule.Data.FirstOrDefault(t => t.UnitType == rule.UnitType.ToString() && t.AccountingUnit == dept.Department);
var income = econDoctor?.CellValue ?? 0;
var workloadFee = workDoctor?.CellValue ?? 0;
var perforFee = income * (dept.BasicFactor + dept.SlopeFactor);
var perforTotal = perforFee + workloadFee;
totalValue += perforTotal;
}
var baiscnorm = new res_baiscnorm
{
AllotID = allotId,
PositionName = EnumHelper.GetDescription(rule.MinimumType),
TotelNumber = count,
TotelValue = totalValue,
AvgValue = count == 0 ? 0 : totalValue / count
};
baiscnormList.Add(baiscnorm);
}
perforResbaiscnormRepository.AddRange(baiscnormList.ToArray());
return baiscnormList;
}
/// <summary>
/// 获取药占比分割比例
/// </summary>
......
......@@ -42,6 +42,8 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
unifyUnit.Scale = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "规模绩效系数").PointCell)?.ToString());
unifyUnit.Effic = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "效率绩效系数").PointCell)?.ToString());
unifyUnit.Grant = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "管理绩效发放系数").PointCell)?.ToString());
unifyUnit.MinimumReference = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "保底绩效参考标准").PointCell)?.ToString();
unifyUnit.MinimumFactor = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "保底绩效系数").PointCell)?.ToString());
unifyUnit.OtherPerfor1 = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "其他绩效1").PointCell)?.ToString());
unifyUnit.OtherPerfor2 = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "其他绩效2").PointCell)?.ToString());
unifyUnit.Extra = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "医院奖罚").PointCell)?.ToString());
......
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