江苏医保读社保卡基本信息功能文档.md 10 KB

江苏医保读社保卡基本信息功能文档

概述

本文档基于《医疗保障信息平台定点基线版医药机构接口规范 v0.9.9.15》,专门提取江苏医保读社保卡相关功能。与项目中长沙医保的SSCard.dll功能对应,江苏医保使用不同的动态库实现相同的读卡业务。

动态库说明

预期动态库名称

  • 主库: 可能为 JSMedInsurance.dllJiangSuCard.dllNationECCode_JS.dll
  • 辅助库: 可能包含读卡器驱动、加密解密、网络通信等相关DLL

与长沙医保对比

项目 长沙医保 江苏医保
主要DLL SSCard.dll 待确定(可能多个DLL)
初始化方式 简单URL+用户 复杂JSON配置
数据格式 自定义格式 标准38号文格式
业务复杂度 相对简单 功能更全面

核心功能模块

1. 初始化功能

1.1 函数定义

long WINAPI Init(char* pInitInfo, char* pErrMsg);

1.2 与长沙医保对比

长沙医保初始化:

[DllImport("SSCard.dll", EntryPoint = "Init")]
private extern static Int32 Init(string pUrl, string pUser);

江苏医保初始化(预期):

[DllImport("JSMedInsurance.dll", EntryPoint = "Init")]
private extern static Int32 Init(string pInitInfo, StringBuilder pErrMsg);

1.3 初始化参数 (JSON格式)

{
  "IP": "192.168.100.100",
  "PORT": 8080,
  "TIMEOUT": 120,
  "LOG_PATH": "C:\\log\\",
  "CARD_PASSTYPE": "1",
  "EC_URL": "https://fuwu-test.nhsa.gov.cn/localcfc/api/hsecfc/localQrCodeQuery",
  "API_NAME": "api-powersi-test-pri",
  "API_VERSION": "1.0.0",
  "ACCESS_KEY": "043a6d5927174ab5a7681b193b9fe0e3",
  "SECRETKEY": "ZugfjXENyvGIQYdB+hFB+s9JL0A=",
  "ORG_ID": "定点编号",
  "AREA_CODE": "320100"
}

1.4 关键配置参数说明

参数 说明 是否必填 示例值
IP 医保平台服务端IP Y 192.168.100.100
PORT 服务端端口 Y 8080
TIMEOUT 超时时间(秒) Y 120
LOG_PATH 日志目录 Y C:\log\
CARD_PASSTYPE 密码验证方式 Y 1:验证卡pin 2:验证数据库密码
EC_URL 电子凭证中台URL Y 国家医保局提供
ORG_ID 定点编号 Y 医院/药店编号
AREA_CODE 行政区划代码 Y 320100(南京)

2. 读社保卡基本信息

2.1 函数定义

long WINAPI ReadCardBas(char* pCardInfo, char* pBusiCardInfo);

2.2 与长沙医保对比

长沙医保读卡:

[DllImport("SSCard.dll", EntryPoint = "ReadCardBas")]
private extern static Int32 ReadCardBas(StringBuilder pOutBuff, int nOutBuffLen, StringBuilder pSignBuff, int nSignBuffLen);

江苏医保读卡(预期):

[DllImport("JSMedInsurance.dll", EntryPoint = "ReadCardBas")]
private extern static Int32 ReadCardBas(StringBuilder pCardInfo, StringBuilder pBusiCardInfo);

2.3 输出参数说明

pCardInfo - 社保卡基本信息

  • 格式: 管道符(|)分隔的标准38号文格式
  • 内容: 发卡地区行政区划代码|社会保障号码|卡号|卡识别码|姓名|卡复位信息|规范版本|发卡日期|卡有效期|终端机编号|终端设备号|
  • 示例: 639900|111111198101011110|X00000019|639900D15600000500BF7C7A48FB4966|张三|00814E43238697159900BF7C7A|1.00|20101001|20201001|410100813475|终端设备号|
  • 内存分配: 建议2048字节,不能小于2048

pBusiCardInfo - 业务卡串信息

  • 用途: 后续医保业务交易使用的加密卡串
  • 格式: 加密后的Base64字符串
  • 内存分配: 建议8192字节,不能小于8192

2.4 返回值

  • 0: 成功
  • 非0: 失败,具体错误码需参考动态库文档

3. PIN码管理功能

3.1 验证PIN码

long WINAPI VerifyPIN(char *pOutBuff);

验证规则:

  • 本参保地持卡人: 必须校验密码
  • 异地就医人员: 按本地医保局要求决定是否验证
  • 连续6次错误后卡片自动锁定

3.2 修改PIN码

long WINAPI ChangePIN(char *pOutBuff);

使用条件:

  • 需要原密码验证通过
  • 新密码和确认密码必须一致
  • 本参保地持卡人可以修改
  • 异地就医人员按本地要求

4. 处方信息读取功能

4.1 读社保卡基本信息和处方信息

long WINAPI ReadCardBasRx(char* pInput, char* pCardInfo, char* pRxInfo);

输入参数格式: 定点机构登记人姓名|定点机构登记人证件类型|定点机构登记人证件号码|医疗机构编码|代办人姓名|代办人身份证类型|代办人身份证类型|收费端电脑IP|CaInfo|his软件开发商|

处方信息输出: 处方登记流水号|处方过期时间|

5. 四合一介质支持

5.1 获取个人信息

long WINAPI GetPersonInfo(char* pInData, char* pOutData);

支持介质类型:

  1. 社保卡: 返回CardInfo和BusiCardInfo
  2. 电子凭证: 返回身份证号、姓名、令牌等
  3. 电子社保卡: 返回社保号、电子社保卡Token等
  4. 身份证: 返回身份证信息和业务身份证信息

C#集成实现建议

1. 江苏医保业务类结构

public class JiangSuMedInsuranceBusiness
{
    // P/Invoke声明
    [DllImport("JSMedInsurance.dll", EntryPoint = "Init", CharSet = CharSet.Ansi)]
    private extern static Int32 Init(string pInitInfo, StringBuilder pErrMsg);
    
    [DllImport("JSMedInsurance.dll", EntryPoint = "ReadCardBas", CharSet = CharSet.Ansi)]
    private extern static Int32 ReadCardBas(StringBuilder pCardInfo, StringBuilder pBusiCardInfo);
    
    [DllImport("JSMedInsurance.dll", EntryPoint = "VerifyPIN", CharSet = CharSet.Ansi)]
    private extern static Int32 VerifyPIN(StringBuilder pOutBuff);
    
    [DllImport("JSMedInsurance.dll", EntryPoint = "ChangePIN", CharSet = CharSet.Ansi)]
    private extern static Int32 ChangePIN(StringBuilder pOutBuff);
    
    [DllImport("JSMedInsurance.dll", EntryPoint = "GetPersonInfo", CharSet = CharSet.Ansi)]
    private extern static Int32 GetPersonInfo(string pInData, StringBuilder pOutData);
    
    // 业务方法
    public string InitializeSystem(JiangSuConfig config) { }
    public ReadCardResult ReadSocialSecurityCard() { }
    public bool VerifyCardPIN() { }
    public bool ChangeCardPIN() { }
    public PersonInfo GetPersonInfoByMedia(MediaType mediaType) { }
}

2. 配置类

public class JiangSuConfig
{
    public string IP { get; set; }
    public int PORT { get; set; }
    public int TIMEOUT { get; set; }
    public string LOG_PATH { get; set; }
    public string CARD_PASSTYPE { get; set; }
    public string EC_URL { get; set; }
    public string API_NAME { get; set; }
    public string API_VERSION { get; set; }
    public string ACCESS_KEY { get; set; }
    public string SECRETKEY { get; set; }
    public string ORG_ID { get; set; }
    public string AREA_CODE { get; set; }
    
    public string ToJson()
    {
        return JsonConvert.SerializeObject(this);
    }
}

3. 数据模型

public class JiangSuCardInfo
{
    public string IssueAreaCode { get; set; }      // 发卡地区行政区划代码
    public string SocialSecurityNumber { get; set; } // 社会保障号码
    public string CardNumber { get; set; }         // 卡号
    public string CardId { get; set; }            // 卡识别码
    public string Name { get; set; }              // 姓名
    public string CardResetInfo { get; set; }     // 卡复位信息
    public string SpecVersion { get; set; }       // 规范版本
    public string IssueDate { get; set; }         // 发卡日期
    public string ValidDate { get; set; }         // 卡有效期
    public string TerminalId { get; set; }        // 终端机编号
    public string DeviceId { get; set; }          // 终端设备号
    public string BusiCardInfo { get; set; }      // 业务卡串
    
    public static JiangSuCardInfo ParseFromString(string cardInfoString, string busiCardInfo)
    {
        // 解析管道符分隔的字符串
        string[] parts = cardInfoString.Split('|');
        if (parts.Length >= 11)
        {
            return new JiangSuCardInfo
            {
                IssueAreaCode = parts[0],
                SocialSecurityNumber = parts[1],
                CardNumber = parts[2],
                CardId = parts[3],
                Name = parts[4],
                CardResetInfo = parts[5],
                SpecVersion = parts[6],
                IssueDate = parts[7],
                ValidDate = parts[8],
                TerminalId = parts[9],
                DeviceId = parts[10],
                BusiCardInfo = busiCardInfo
            };
        }
        return null;
    }
}

系统集成步骤

1. 动态库部署

  1. 确定江苏医保提供的具体DLL文件名称
  2. 将所有相关DLL文件部署到应用程序目录
  3. 确保DLL的架构(x86/x64)与应用程序一致

2. 配置管理

  1. 在配置文件中添加江苏医保相关配置
  2. 支持多地区医保配置切换
  3. 提供配置验证功能

3. 异常处理

  1. 实现统一的错误码处理
  2. 提供友好的错误信息提示
  3. 记录详细的操作日志

4. 测试验证

  1. 单元测试各个功能模块
  2. 集成测试完整读卡流程
  3. 异常场景测试(网络断开、卡片故障等)

与长沙医保的差异对比

功能点 长沙医保(SSCard.dll) 江苏医保
初始化复杂度 简单(URL+用户) 复杂(13个配置参数)
数据格式标准 自定义 国家标准38号文
PIN码管理 不支持 支持验证和修改
多介质支持 仅社保卡 四合一(社保卡+电子凭证+电子社保卡+身份证)
处方信息 不支持 支持读取处方信息
加密卡串 简单格式 Base64加密格式
网络依赖 本地处理 需要网络连接医保平台

注意事项

  1. DLL依赖: 江苏医保可能包含多个DLL,需要确保所有依赖库都正确部署
  2. 网络配置: 需要确保能够访问江苏医保平台和电子凭证中台
  3. 证书配置: 可能需要配置数字证书用于安全通信
  4. 日志管理: 动态库会生成日志,需要合理配置日志目录
  5. 版本兼容: 注意规范版本(version1.1、version1.2)的兼容性处理
  6. 行政区划: AREA_CODE需要根据具体医院/药店所在地区配置