# 医保接口数据库操作详细分析

## 1. admissRegister 方法数据库操作

### 1.1 `t_si_log` 表 - 医保接口调用日志表

#### **操作类型**：INSERT

| 字段名 | 数据类型 | 数据来源 | 备注 |
|--------|----------|----------|------|
| `msgid` | String | `input.getString("msgid")` | 医保接口请求消息ID |
| `infno` | String | `input.getString("infno")` | 医保接口功能号 |
| `insuplc_admdvs` | String | `input.getString("insuplc_admdvs")` | 医保统筹区划 |
| `opter` | String | `input.getString("opter")` | 经办人 |
| `body` | String | `input.toJSONString()` | 完整的请求体JSON |
| `result` | String | `result.toJSONString()` | 完整的响应体JSON |
| `pat_no` | String | `p.getInpatientNo()` | 住院号 |
| `times` | Integer | `p.getAdmissTimes()` | 住院次数 |
| `ledger_sn` | Integer | `p.getLedgerSn()` | 账页号 |
| `log_type` | Integer | 固定值 `1` | 住院类型 |
| `create_datetime` | DateTime | `getdate()` | 记录生成时间 |
| `infcode` | Integer | `result.getIntValue("infcode")` | 返回结果（0成功，-1失败） |
| `psn_no` | String | `admMdtrtinfo.getPsnNo()` | 人员编号 |

### 1.2 `t_si_pat_info` 表 - 患者医保信息表

#### **操作类型**：UPDATE（afterAdmissRegister方法）

| 字段名 | 数据类型 | 数据来源 | 备注 |
|--------|----------|----------|------|
| `insuplc_admdvs` | String | `ybData.getInsuplcAdmdvs()` | 医保统筹区划 |
| `psn_type` | String | `ybData.getPsnType()` | 人员类别 |
| `emp_name` | String | `ybData.getEmpName()` | 单位名称 |
| `balance` | BigDecimal | `ybData.getBalance()` | 账户余额 |
| `mdtrt_id` | String | `output.getJSONObject("result").getString("mdtrt_id")` | 就诊ID（外部接口返回） |
| `adm_reg_msgid` | String | `input.getString("msgid")` | 入院登记消息ID |

### 1.3 `t_si_pat_info` 表 - 患者医保信息表

#### **操作类型**：UPDATE（updateResponceType方法）

| 字段名 | 数据类型 | 数据来源 | 备注 |
|--------|----------|----------|------|
| `responce_type` | String | `dao.selectResponceType(admMdtrtinfo.getMedType())` | 响应类型（根据医保类型查询） |

## 2. obtainBasicPersonInfo 方法数据库操作

### 2.1 `mz_patient_mi` 表 - 门诊患者信息表

#### **操作类型**：SELECT

| 字段名 | 数据类型 | 数据来源 | 备注 |
|--------|----------|----------|------|
| `social_no` | String | 数据库查询 | 身份证号 |
| `name` | String | 数据库查询 | 姓名 |
| `times` | Integer | 数据库查询 | 门诊次数 |
| `certificate_type` | String | 数据库查询 | 证件类型 |

### 2.2 `zy_ledger_file` 表 - 住院账页文件表

#### **操作类型**：SELECT

| 字段名 | 数据类型 | 数据来源 | 备注 |
|--------|----------|----------|------|
| `ledger_sn` | Integer | `dao.selectMaxLedgerSn()` | 最大账页号 |

### 2.3 `a_patient_mi` 表 - 患者基本信息表

#### **操作类型**：SELECT

| 字段名 | 数据类型 | 数据来源 | 备注 |
|--------|----------|----------|------|
| `psn_cert_type` | String | `dao.selectPsnCertType()` | 人员证件类型 |

### 2.4 `t_si_pat_info` 表 - 患者医保信息表

#### **操作类型**：UPDATE（updatePsnIdetType方法）

| 字段名 | 数据类型 | 数据来源 | 备注 |
|--------|----------|----------|------|
| `psn_idet_type` | String | `psnBaseinfo.getPsnIdetType()` | 人员身份类型（外部接口返回） |

#### **操作类型**：INSERT/UPDATE（insertSiZyInfoPsnNo/updateSiZyInfoPsnNo方法）

**INSERT 字段及数据来源**：

| 字段名 | 数据类型 | 数据来源 | 备注 |
|--------|----------|----------|------|
| `pat_no` | String | `qryPsnBsInfo.getPatNo()` | 住院号 |
| `times` | Integer | `qryPsnBsInfo.getTimes()` | 住院次数 |
| `ledger_sn` | Integer | `qryPsnBsInfo.getLedgerSn()` | 账页号 |
| `psn_no` | String | `psnBaseinfo.getPsnNo()` | 人员编号（外部接口返回） |
| `psn_name` | String | `psnBaseinfo.getPsnName()` | 人员姓名（外部接口返回） |
| `psn_cert_type` | String | `psnBaseinfo.getPsnCertType()` | 人员证件类型（外部接口返回） |
| `certno` | String | `psnBaseinfo.getCertno()` | 证件号码（外部接口返回） |
| `psn_idet_type` | String | `psnBaseinfo.getPsnIdetType()` | 人员身份类型（外部接口返回） |
| `insuplc_admdvs` | String | `psnBaseinfo.getInsuplcAdmdvs()` | 医保统筹区划（外部接口返回） |
| `psn_type` | String | `psnBaseinfo.getPsnType()` | 人员类别（外部接口返回） |
| `emp_name` | String | `psnBaseinfo.getEmpName()` | 单位名称（外部接口返回） |
| `balance` | BigDecimal | `psnBaseinfo.getBalance()` | 账户余额（外部接口返回） |

**UPDATE 字段及数据来源**：

| 字段名 | 数据类型 | 数据来源 | 备注 |
|--------|----------|----------|------|
| `psn_no` | String | `psnBaseinfo.getPsnNo()` | 人员编号（外部接口返回） |
| `psn_name` | String | `psnBaseinfo.getPsnName()` | 人员姓名（外部接口返回） |
| `psn_cert_type` | String | `psnBaseinfo.getPsnCertType()` | 人员证件类型（外部接口返回） |
| `certno` | String | `psnBaseinfo.getCertno()` | 证件号码（外部接口返回） |
| `psn_idet_type` | String | `psnBaseinfo.getPsnIdetType()` | 人员身份类型（外部接口返回） |
| `insuplc_admdvs` | String | `psnBaseinfo.getInsuplcAdmdvs()` | 医保统筹区划（外部接口返回） |
| `psn_type` | String | `psnBaseinfo.getPsnType()` | 人员类别（外部接口返回） |
| `emp_name` | String | `psnBaseinfo.getEmpName()` | 单位名称（外部接口返回） |
| `balance` | BigDecimal | `psnBaseinfo.getBalance()` | 账户余额（外部接口返回） |

### 2.5 `t_si_log` 表 - 医保接口调用日志表

#### **操作类型**：INSERT

| 字段名 | 数据类型 | 数据来源 | 备注 |
|--------|----------|----------|------|
| `msgid` | String | `input.getString("msgid")` | 医保接口请求消息ID |
| `infno` | String | `input.getString("infno")` | 医保接口功能号 |
| `insuplc_admdvs` | String | `input.getString("insuplc_admdvs")` | 医保统筹区划 |
| `opter` | String | `input.getString("opter")` | 经办人 |
| `body` | String | `input.toJSONString()` | 完整的请求体JSON |
| `result` | String | `result.toJSONString()` | 完整的响应体JSON |
| `pat_no` | String | `qryPsnBsInfo.getPatNo()` | 住院号 |
| `times` | Integer | `qryPsnBsInfo.getTimes()` | 住院次数 |
| `ledger_sn` | Integer | `qryPsnBsInfo.getLedgerSn()` | 账页号 |
| `log_type` | Integer | 固定值 `1` | 住院类型 |
| `create_datetime` | DateTime | `getdate()` | 记录生成时间 |
| `infcode` | Integer | `result.getIntValue("infcode")` | 返回结果（0成功，-1失败） |
| `psn_no` | String | `psnBaseinfo.getPsnNo()` | 人员编号（外部接口返回） |

## 3. 外部接口数据来源详细说明

### 3.1 admissRegister 方法外部接口数据

**接口名称**：医保入院登记接口
**接口功能号**：`SiFunction.ADMISSION_REGISTRATION`
**返回数据结构**：
```json
{
  "infcode": 0,
  "output": {
    "result": {
      "mdtrt_id": "就诊ID"
    }
  }
}
```

### 3.2 obtainBasicPersonInfo 方法外部接口数据

**接口名称**：医保人员基本信息查询接口
**接口功能号**：`SiFunction.OBTAIN_BASIC_PERSON_INFO`
**返回数据结构**：
```json
{
  "infcode": 0,
  "output": {
    "baseinfo": {
      "psn_no": "人员编号",
      "psn_name": "人员姓名",
      "psn_cert_type": "人员证件类型",
      "certno": "证件号码",
      "psn_idet_type": "人员身份类型",
      "insuplc_admdvs": "医保统筹区划",
      "psn_type": "人员类别",
      "emp_name": "单位名称",
      "balance": "账户余额"
    },
    "idetinfo": [
      {
        "psn_idet_type": "人员身份类型"
      }
    ]
  }
}
```

## 4. 数据流向总结

### 4.1 数据输入来源
1. **前端参数**：住院号、住院次数、账页号等基础信息
2. **外部医保接口**：人员信息、医保状态、账户余额等医保相关数据
3. **本地数据库查询**：患者基础信息、医保类型等

### 4.2 数据输出目标
1. **`t_si_log`**：记录所有医保接口调用日志
2. **`t_si_pat_info`**：存储患者医保信息和状态
3. **其他相关表**：根据业务需要更新相关患者信息

### 4.3 关键数据转换
1. **外部接口数据 → 本地数据库字段**：将医保接口返回的数据映射到本地数据库字段
2. **状态同步**：确保本地数据库中的医保状态与外部医保系统保持一致
3. **日志记录**：完整记录所有医保接口调用过程，便于问题排查和审计 