江苏工伤联网接口使用示例.md 11 KB

江苏工伤联网结算接口使用示例

基础调用示例

1. 初始化系统

// 基础初始化(使用默认配置)
var initResult = JiangSuWorkInjuryBusiness.Initialize();

// 或者使用自定义配置
var config = new JiangSuWorkInjuryBusiness.WorkInjuryConfig
{
    FixmedinsCode = "SQ201348",
    FixmedinsName = "沭阳铭和医院",
    DefaultOperator = "001",
    DefaultOperatorName = "系统管理员"
};
var initResult = JiangSuWorkInjuryBusiness.Initialize(config);

Console.WriteLine($"初始化结果: {initResult["success"]}, 消息: {initResult["message"]}");

2. 基础交易调用

// 方式1:使用交易名称(支持中文)
var result1 = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("签到");
var result2 = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("读卡");

// 方式2:使用交易编号
var result3 = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("9001"); // 签到
var result4 = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("1101"); // 读卡

// 方式3:使用英文名称
var result5 = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("SignIn");
var result6 = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("ReadCard");

完整业务流程示例

1. 工伤患者就医完整流程

// 患者信息
var patientInfo = new
{
    visit_type = "1", // 门诊
    dept_code = "001",
    dept_name = "骨科",
    doctor_code = "DOC001",
    doctor_name = "张主任"
};

// 费用明细
var feeDetails = new object[]
{
    new
    {
        fee_ocur_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
        med_list_codg = "001",
        med_list_name = "拍片费",
        fee_amt = 120.00,
        cnt = 1
    },
    new
    {
        fee_ocur_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
        med_list_codg = "002",
        med_list_name = "诊疗费",
        fee_amt = 15.00,
        cnt = 1
    }
};

// 执行完整流程(自动完成读卡->登记->预结算->结算)
var processResult = JiangSuWorkInjuryBusiness.CompleteWorkInjuryProcess(patientInfo, feeDetails);

Console.WriteLine($"完整流程结果: {processResult["success"]}");
foreach (var step in processResult["processSteps"])
{
    Console.WriteLine($"步骤{step["step"]}: {step["name"]} - {step["success"]}");
}

2. 分步业务调用

// 第1步:读卡
var readCardResult = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("ReadCard");
if (!(bool)readCardResult["success"])
{
    Console.WriteLine($"读卡失败: {readCardResult["message"]}");
    return;
}

// 第2步:患者登记
var registerParams = new
{
    psn_no = readCardResult["data"]["psn_no"], // 从读卡结果获取人员编号
    visit_type = "1",
    dept_code = "001",
    dept_name = "骨科"
};
var registerResult = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("RegisterPatient", registerParams);

// 第3步:费用预结算
var preSettleParams = new
{
    visit_no = registerResult["data"]["visit_no"], // 从登记结果获取就诊号
    fee_details = feeDetails
};
var preSettleResult = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("PreSettle", preSettleParams);

// 第4步:正式结算
var settleParams = new
{
    visit_no = registerResult["data"]["visit_no"],
    pre_settle_id = preSettleResult["data"]["pre_settle_id"]
};
var settleResult = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("Settle", settleParams);

特殊业务示例

1. 处方明细上传

// 大批量处方明细
var prescriptions = new object[120]; // 假设有120条处方
for (int i = 0; i < 120; i++)
{
    prescriptions[i] = new
    {
        med_list_codg = $"MED{i:D3}",
        med_list_name = $"药品{i}",
        cnt = 1,
        pric = 25.50
    };
}

// 自动分批上传(每批50条)
var batchResult = JiangSuWorkInjuryBusiness.BatchUploadPrescriptions(prescriptions, "P123456", "V20241201001");
Console.WriteLine($"批量上传结果: 成功{batchResult["data"]["successCount"]}批,失败{batchResult["data"]["failureCount"]}批");

2. 智能重试机制

// 对于可能因网络等原因失败的交易,使用智能重试
var retryResult = JiangSuWorkInjuryBusiness.SmartRetryTransaction(
    "PreSettle", 
    preSettleParams, 
    maxRetries: 3, 
    baseDelayMs: 1000
);

if ((bool)retryResult["success"])
{
    Console.WriteLine($"重试成功,共尝试{retryResult["retryInfo"]["totalAttempts"]}次");
}
else
{
    Console.WriteLine($"重试{retryResult["retryInfo"]["totalAttempts"]}次后仍然失败");
}

3. 交易冲正

// 获取需要冲正的交易记录ID(从之前的交易结果中获取)
string originalMessageId = settleResult["infRefMsgId"]?.ToString();

// 执行冲正操作
var reverseResult = JiangSuWorkInjuryBusiness.ReverseTransactionByRecord(originalMessageId);
Console.WriteLine($"冲正结果: {reverseResult["success"]}, 消息: {reverseResult["message"]}");

系统监控和管理

1. 健康检查

// 系统健康检查
var healthResult = JiangSuWorkInjuryBusiness.HealthCheck();
var healthData = healthResult["data"];

Console.WriteLine($"系统健康状态: {healthData["overallHealth"]}");
Console.WriteLine($"DLL状态: {healthData["checks"]["dllStatus"]["success"]}");
Console.WriteLine($"初始化状态: {healthData["checks"]["initStatus"]["initialized"]}");
Console.WriteLine($"签到状态: {healthData["checks"]["signInStatus"]["signedIn"]}");

2. 获取系统统计

// 获取系统运行统计
var statsResult = JiangSuWorkInjuryBusiness.GetTransactionStatistics();
var stats = statsResult["data"];

Console.WriteLine($"系统初始化: {stats["systemStatus"]["initialized"]}");
Console.WriteLine($"当前签到状态: {stats["systemStatus"]["signedIn"]}");
Console.WriteLine($"交易记录总数: {stats["transactionRecords"]["totalCount"]}");

3. 签到状态管理

// 检查当前签到状态
var signInStatus = JiangSuWorkInjuryBusiness.GetSignInStatus();
var statusData = signInStatus["data"];

if ((bool)statusData["signedIn"])
{
    Console.WriteLine($"已签到,流水号: {statusData["signNo"]}");
    Console.WriteLine($"签到时间: {statusData["signInTime"]}");
    Console.WriteLine($"会话时长: {statusData["sessionDuration"]}");
}
else
{
    Console.WriteLine("未签到,需要先执行签到操作");
    var signInResult = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("SignIn");
}

// 手动签退
var signOutResult = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("SignOut");

错误处理示例

try
{
    var result = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("ReadCard");
    
    if ((bool)result["success"])
    {
        // 成功处理
        var cardData = result["data"];
        Console.WriteLine($"读卡成功,患者: {cardData["psn_name"]}");
    }
    else
    {
        // 错误处理
        int errorCode = (int)result["code"];
        string errorMessage = result["message"]?.ToString();
        
        if (errorCode >= 2000 && errorCode < 3000)
        {
            // DLL层面错误
            Console.WriteLine($"DLL调用失败: {errorMessage}");
        }
        else if (errorCode >= 3000)
        {
            // 业务层面错误
            Console.WriteLine($"业务处理失败: {errorMessage}");
            Console.WriteLine($"业务错误码: {result["businessErrorCode"]}");
        }
        else
        {
            // 系统层面错误
            Console.WriteLine($"系统错误: {errorMessage}");
        }
    }
}
catch (Exception ex)
{
    Console.WriteLine($"系统异常: {ex.Message}");
}

在HIS系统中的集成示例

public class WorkInjuryService
{
    // 初始化工伤联网接口
    public bool InitializeWorkInjury()
    {
        var config = new JiangSuWorkInjuryBusiness.WorkInjuryConfig
        {
            FixmedinsCode = ConfigurationManager.AppSettings["WorkInjury.FixmedinsCode"],
            FixmedinsName = ConfigurationManager.AppSettings["WorkInjury.FixmedinsName"],
            DefaultOperator = GetCurrentOperatorId(),
            DefaultOperatorName = GetCurrentOperatorName()
        };
        
        var result = JiangSuWorkInjuryBusiness.Initialize(config);
        return (bool)result["success"];
    }
    
    // 工伤患者读卡
    public WorkInjuryPatient ReadWorkInjuryCard()
    {
        var result = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("ReadCard");
        
        if (!(bool)result["success"])
        {
            throw new BusinessException($"工伤读卡失败: {result["message"]}");
        }
        
        var cardData = result["data"];
        return new WorkInjuryPatient
        {
            PersonNo = cardData["psn_no"]?.ToString(),
            PersonName = cardData["psn_name"]?.ToString(),
            IdCard = cardData["psn_cert_no"]?.ToString(),
            // ... 其他字段映射
        };
    }
    
    // 工伤结算
    public WorkInjurySettleResult ProcessWorkInjurySettle(string visitNo, List<FeeDetail> feeDetails)
    {
        // 转换费用明细格式
        var fees = feeDetails.Select(f => new
        {
            fee_ocur_time = f.FeeTime.ToString("yyyy-MM-dd HH:mm:ss"),
            med_list_codg = f.MedCode,
            med_list_name = f.MedName,
            fee_amt = f.Amount,
            cnt = f.Count
        }).ToArray();
        
        // 预结算
        var preSettleParams = new { visit_no = visitNo, fee_details = fees };
        var preResult = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("PreSettle", preSettleParams);
        
        if (!(bool)preResult["success"])
        {
            throw new BusinessException($"工伤预结算失败: {preResult["message"]}");
        }
        
        // 正式结算
        var settleParams = new 
        { 
            visit_no = visitNo, 
            pre_settle_id = preResult["data"]["pre_settle_id"] 
        };
        var settleResult = JiangSuWorkInjuryBusiness.ProcessWorkInjuryTransaction("Settle", settleParams);
        
        if (!(bool)settleResult["success"])
        {
            throw new BusinessException($"工伤结算失败: {settleResult["message"]}");
        }
        
        // 返回结算结果
        var settleData = settleResult["data"];
        return new WorkInjurySettleResult
        {
            SettleId = settleData["settle_id"]?.ToString(),
            TotalAmount = decimal.Parse(settleData["total_amt"]?.ToString() ?? "0"),
            FundAmount = decimal.Parse(settleData["fund_amt"]?.ToString() ?? "0"),
            SelfAmount = decimal.Parse(settleData["self_amt"]?.ToString() ?? "0")
        };
    }
}

总结

江苏工伤联网结算接口提供了:

  1. 极简调用:只需两个核心函数 Initialize()ProcessWorkInjuryTransaction()
  2. 全面覆盖:支持所有工伤文档定义的17种交易类型
  3. 智能化:自动签到、自动重试、自动分批处理
  4. 生产就绪:完整的日志、监控、错误处理机制
  5. 灵活集成:可直接嵌入任何HIS系统

所有交易都通过统一的 ProcessWorkInjuryTransaction() 函数处理,大大简化了集成复杂度。