## 2025-10-29 刷脸一致性校验记录表(旁路写入,不影响收费流程) 执行顺序:按段落依次执行;首次建表可跳过“删除表”步骤。 ```sql -- ============================================ -- 刷脸一致性校验记录表(旁路写入,不影响收费流程) -- ============================================ -- 第一步:如果表已存在,先删除(首次建表可跳过这步) IF OBJECT_ID('dbo.t_face_verify_log', 'U') IS NOT NULL DROP TABLE dbo.t_face_verify_log; GO -- 第二步:创建表结构 CREATE TABLE dbo.t_face_verify_log ( -- 主键:自增ID id bigint IDENTITY(1,1) PRIMARY KEY, -- 最终采用身份:face=采用刷脸身份,card=采用社保卡身份(必填) adopted_identity varchar(10) NOT NULL, -- 患者ID:从页面获取的患者编号,可为空 patient_id varchar(50) NULL, -- 就诊次数:从页面获取的就诊次数,可为空 times int NULL, -- 是否一致:1=社保卡和刷脸身份证号一致,0=不一致,NULL=未完成比对 is_match bit NULL, -- 用户操作:go_face=用户选择去刷脸,skip_face=用户跳过刷脸直接结算,continue_with_card=不一致时继续按卡结算,redo=返回重新核验 user_action varchar(50) NULL, -- 失败原因:fail=刷脸失败,error=网络异常,cancel=用户取消刷脸 reason varchar(50) NULL, -- 社保卡身份证号尾号:仅存储后4位(例如:1234),用于脱敏展示,不存完整身份证号 card_tail varchar(8) NULL, -- 刷脸身份证号尾号:仅存储后4位(例如:1234),用于脱敏展示,不存完整身份证号 face_tail varchar(8) NULL, -- 实人认证业务流水号:从刷脸接口返回的res.data.data.authNo字段获取,用于追踪刷脸记录 auth_no varchar(64) NULL, -- 预留扩展字段:存储JSON格式的额外信息,可为空 ext_json nvarchar(max) NULL, -- 创建时间:记录插入时间,默认当前时间 created_at datetime NOT NULL DEFAULT GETDATE(), -- 操作人编码:从Token中获取的当前登录用户编码,可为空 created_by varchar(50) NULL ); GO -- 第三步:给表添加备注 EXEC sp_addextendedproperty 'MS_Description', '刷脸一致性校验记录表(旁路写入,不影响收费流程)', 'SCHEMA', 'dbo', 'TABLE', 't_face_verify_log'; GO -- 第四步:给每个字段添加详细备注 EXEC sp_addextendedproperty 'MS_Description', '主键:自增ID', 'SCHEMA', 'dbo', 'TABLE', 't_face_verify_log', 'COLUMN', 'id'; GO EXEC sp_addextendedproperty 'MS_Description', '最终采用身份:face=采用刷脸身份,card=采用社保卡身份(必填)', 'SCHEMA', 'dbo', 'TABLE', 't_face_verify_log', 'COLUMN', 'adopted_identity'; GO EXEC sp_addextendedproperty 'MS_Description', '患者ID:从页面获取的患者编号,可为空', 'SCHEMA', 'dbo', 'TABLE', 't_face_verify_log', 'COLUMN', 'patient_id'; GO EXEC sp_addextendedproperty 'MS_Description', '就诊次数:从页面获取的就诊次数,可为空', 'SCHEMA', 'dbo', 'TABLE', 't_face_verify_log', 'COLUMN', 'times'; GO EXEC sp_addextendedproperty 'MS_Description', '是否一致:1=社保卡和刷脸身份证号一致,0=不一致,NULL=未完成比对', 'SCHEMA', 'dbo', 'TABLE', 't_face_verify_log', 'COLUMN', 'is_match'; GO EXEC sp_addextendedproperty 'MS_Description', '用户操作:go_face=用户选择去刷脸,skip_face=用户跳过刷脸直接结算,continue_with_card=不一致时继续按卡结算,redo=返回重新核验', 'SCHEMA', 'dbo', 'TABLE', 't_face_verify_log', 'COLUMN', 'user_action'; GO EXEC sp_addextendedproperty 'MS_Description', '失败原因:fail=刷脸失败,error=网络异常,cancel=用户取消刷脸', 'SCHEMA', 'dbo', 'TABLE', 't_face_verify_log', 'COLUMN', 'reason'; GO EXEC sp_addextendedproperty 'MS_Description', '社保卡身份证号尾号:仅存储后4位(例如:1234),用于脱敏展示,不存完整身份证号', 'SCHEMA', 'dbo', 'TABLE', 't_face_verify_log', 'COLUMN', 'card_tail'; GO EXEC sp_addextendedproperty 'MS_Description', '刷脸身份证号尾号:仅存储后4位(例如:1234),用于脱敏展示,不存完整身份证号', 'SCHEMA', 'dbo', 'TABLE', 't_face_verify_log', 'COLUMN', 'face_tail'; GO EXEC sp_addextendedproperty 'MS_Description', '实人认证业务流水号:从刷脸接口返回的res.data.data.authNo字段获取,用于追踪刷脸记录', 'SCHEMA', 'dbo', 'TABLE', 't_face_verify_log', 'COLUMN', 'auth_no'; GO EXEC sp_addextendedproperty 'MS_Description', '预留扩展字段:存储JSON格式的额外信息,可为空', 'SCHEMA', 'dbo', 'TABLE', 't_face_verify_log', 'COLUMN', 'ext_json'; GO EXEC sp_addextendedproperty 'MS_Description', '创建时间:记录插入时间,默认当前时间', 'SCHEMA', 'dbo', 'TABLE', 't_face_verify_log', 'COLUMN', 'created_at'; GO EXEC sp_addextendedproperty 'MS_Description', '操作人编码:从Token中获取的当前登录用户编码,可为空', 'SCHEMA', 'dbo', 'TABLE', 't_face_verify_log', 'COLUMN', 'created_by'; GO -- 第五步:创建索引(提升查询效率,不影响写入性能) CREATE INDEX IX_face_verify_log_created_at ON dbo.t_face_verify_log(created_at DESC); GO CREATE INDEX IX_face_verify_log_patient_times ON dbo.t_face_verify_log(patient_id, times); GO ``` ### 追加(可选):存储完整身份证号字段 如需在审计日志中存储完整身份证号码(不推荐明文,建议加密/脱敏后存),仅需在现有表上“加列”,不改动原有字段与逻辑: ```sql ALTER TABLE dbo.t_face_verify_log ADD card_id_no varchar(32) NULL, -- 社保卡身份证完整号(如需可加密后存) face_id_no varchar(32) NULL; -- 刷脸身份证完整号(如需可加密后存) -- 可选:如需检索,建掩码索引(不建议对明文建索引) -- CREATE INDEX IX_face_verify_log_card_id_no ON dbo.t_face_verify_log(card_id_no); ```