mcpField
H
hpk-parser

hpk-parser

github.com/dedalus-erp-pas数据与数据库170 次安装
代码仓库

关于 hpk-parser

hpk-parser 是用于解析和解释 HPK 医疗消息的技能,适用于法国医疗环境中的 Hexagone 系统。它可识别消息类型、提取并标注字段、验证结构,并依据 HPK 规范说明内容。

主要功能

  1. 01解析管道符分隔的 HPK 消息
  2. 02支持 100 多种消息类型
  3. 03提取并标注字段
  4. 04验证结构、字段数量和数据类型
  5. 05生成易读的消息说明
  6. 06映射至 HL7 v2.5 或 IHE PAM

适用场景

  1. 01排查格式错误的 HPK 消息
  2. 02依据 HPK 定义检查消息字段
  3. 03为集成工作记录 HPK 示例
  4. 04将 HPK 消息映射至 HL7 或 IHE PAM

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dedalus-erp-pas/foundation-skills --skill hpk-parser

安装后在 Claude Code 中输入/hpk-parser确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

fixtures/identity/
id_m1_create.json
fixtures/movements/
mv_m2_admission.json
mv_m6_transfer.json
mv_m9_discharge.json
reference/
README.md

详细介绍

HPK 消息解析器和说明器

概述

此技能可解析并说明 HPK(Healthcare Protocol Kernel)消息——一种专有的管道分隔医疗消息格式,用于 Hexagone 系统的法国医疗环境。解析器支持多个领域的 100 多种消息类型(患者管理、供应链、库存、财务、组织),可识别消息类型、提取所有字段、验证结构,并根据官方 HPK 词典和规范提供通俗易懂的说明。

主要事实来源:

  1. HPK 词典(@erp-pas/hpk-dictionary)——包含完整消息架构、字段定义和验证规则的 GitLab 仓库
  2. HPK ADT 消息规范——患者管理消息的完整字段定义
  3. HPK GEF 规范——工作流集成和经济/财务管理消息

覆盖范围:

  • 患者管理:身份(ID)、移动(MV)、保障(CV)——12 种以上消息类型
  • 供应链:产品(PR)、供应商(FO)、市场(MA)、订单(CO)、交付(LI)、收货(RO)——20 种以上消息类型
  • 财务:发票(FA)、杂项收据(RD)——4 种以上消息类型
  • 库存:库存移动(SO)、资产库存(IM)——5 种以上消息类型
  • 组织:结构(ST)、用户(UT)——6 种以上消息类型
  • 请求:创建请求(DD)——2 种以上消息类型

使用此技能的场景:

  • 解析并说明任意 HPK 消息(来自任何系统领域的原始文本输入)
  • 识别 HPK 消息类型和模式(ID|M1|C、MV|M2|C、PR|M0|C 等)
  • 根据规范提取并标注所有 HPK 字段
  • 验证 HPK 消息结构、字段数量和数据类型
  • 了解 HPK 业务规则和字段映射
  • 调试 HPK 消息问题或数据质量问题
  • 编写带说明的 HPK 消息示例文档
  • 验证是否符合 HPK 词典及字段定义
  • 将 HPK 消息映射到 HL7 v2.5 或 IHE PAM 对应格式
  • 分析 Hexagone WEB 集成场景中的 HPK 消息流
  • 支持开发 HPK 消息生成器或解析器
  • 排查 Hexagone WEB 与外部系统之间的接口问题

HPK 消息格式

HPK 消息使用管道符(|)作为字段分隔符,结构如下:

Type|Message|Mode|Emetteur|Date|User|...additional fields...

核心字段(位置 0-5):

  • 字段 0:消息类型(ID = 身份,MV = 移动,CV = 保障)
  • 字段 1:消息代码(M1、M2、M3、M6、M8、M9、MT、CE、B1 等)
  • 字段 2:模式(C = 创建,M = 修改,D = 删除)
  • 字段 3:Emetteur(发送方/源系统)
  • 字段 4:日期/时间(格式:YYYYMMDDHHmmss)
  • 字段 5:用户 ID

消息类型

身份消息(ID|*)
ID|M1 - 患者身份(创建/修改)

用途:患者人口统计信息(登记)

字段结构(共 38 个字段):

0:  Type (ID)
1:  Message (M1)
2:  Mode (C/M/D)
3:  Emetteur (Sender)
4:  Date (YYYYMMDDHHmmss)
5:  User
6:  IPP (Patient ID)
7:  Nom (Last Name)
8:  Prénom (First Name)
9:  Date de naissance (YYYYMMDD)
10: Sexe (M/F/U)
11: Adresse
12: Code postal
13: Ville
14: Pays
15: Téléphone
16: Téléphone portable
17: Email
18: Nom de naissance
19: Prénom usuel
20: Situation familiale
21: Nombre d'enfants
22: Profession
23: Médecin traitant
24: Établissement de naissance
25: Ville de naissance
26: Pays de naissance
27: Nationalité
28: INS (Identifiant National de Santé)
29: INS-C (Calcul)
30: NIR (Numéro de Sécurité Sociale)
31: Clé NIR
32: OID NIR
33: Matricule d'identité
34: Pays identité
35: Date décès (YYYYMMDD)
36: Indicateur de décès
37: Commentaire

示例:

ID|M1|C|HEXAGONE|20260122120000|USER001|PAT12345|DUPONT|JEAN|19750315|M|15 RUE DE LA PAIX|75001|PARIS|FRA|0612345678||||||||||||||||||||||||||||||

说明:

  • 类型:身份消息
  • 代码:M1(患者人口统计信息)
  • 模式:C(创建——登记新患者)
  • 患者:DUPONT JEAN,出生于 15/03/1975,男性
  • 联系方式:06 12 34 56 78,15 RUE DE LA PAIX,75001 PARIS,法国
  • 系统:消息来自 HEXAGONE 系统,用户 USER001,时间戳为 22/01/2026 12:00:00
ID|MT - 主治医生

用途:指定或更新患者的主治医生(médecin traitant)

字段结构(共 13 个字段):

0:  Type (ID)
1:  Message (MT)
2:  Mode (C/M/D)
3:  Emetteur
4:  Date
5:  User
6:  IPP
7:  Code médecin traitant
8:  Nom médecin traitant
9:  Prénom médecin traitant
10: Spécialité
11: Date début
12: Date fin

示例:

ID|MT|C|HEXAGONE|20260122120000|USER001|PAT12345|PR_MARTIN|MARTIN|SOPHIE|CARDIOLOGUE|20260122||

说明:

  • 类型:身份消息
  • 代码:MT(Médecin Traitant - 主治医生)
  • 模式:C(创建——指定新的主治医生)
  • 患者:PAT12345
  • 医生:MARTIN SOPHIE 医生,心脏病专家,代码 PR_MARTIN
  • 生效时间:自 22/01/2026 起(无结束日期)
ID|CE - 知情同意

用途:记录患者对治疗/数据处理的同意

字段结构(共 11 个字段):

0:  Type (ID)
1:  Message (CE)
2:  Mode (C/M/D)
3:  Emetteur
4:  Date
5:  User
6:  IPP
7:  Type consentement
8:  Statut (OUI/NON)
9:  Date début validité
10: Date fin validité
移动消息(MV|*)
MV|M2 - 患者入院

目的:医院收治(admission hospitalière)

字段结构(共 19 个字段):

0:  Type (MV)
1:  Message (M2)
2:  Mode (C/M/D)
3:  Emetteur
4:  Date
5:  User
6:  IPP
7:  Numéro de séjour (Visit ID)
8:  Date/heure entrée (YYYYMMDDHHmmss)
9:  Mode d'entrée (URGENCE/MUTATION/DOMICILE)
10: Établissement
11: Service
12: Unité fonctionnelle (UF)
13: Lit
14: Médecin responsable
15: Provenance
16: Type hospitalisation
17: Mode de traitement
18: Motif d'admission

示例:

MV|M2|C|HEXAGONE|20260122140000|USER001|PAT12345|VIS20260122001|20260122140000|URGENCE|CHU_PARIS|CARDIO|UF_CARDIO_01|LIT_001|PR_MARTIN|||||||

说明:

  • 类型:移动消息
  • 代码:M2(医院收治)
  • 模式:C(创建 - 新的收治)
  • 患者:PAT12345
  • 就诊:VIS20260122001(唯一就诊标识符)
  • 收治:22/01/2026 14:00:00,经急诊科收治
  • 地点:CHU_PARIS,心脏科,UF_CARDIO_01,病床 LIT_001
  • 护理团队:主治医师 PR_MARTIN
MV|M3 - 状态变更

目的:患者行政状态变更

字段结构:

0-5:  Common fields (Type, Message, Mode, Emetteur, Date, User)
6:    IPP
7:    Numéro de séjour
8:    Ancien statut
9:    Nouveau statut
10:   Date changement statut
11:   Motif changement
MV|M6 - 病区进入/转科

目的:患者在病区或科室之间转运

字段结构(共 18 个字段):

0:  Type (MV)
1:  Message (M6)
2:  Mode (C/M/D)
3:  Emetteur
4:  Date
5:  User
6:  IPP
7:  Numéro de séjour
8:  Nouvelle UF
9:  Nouveau lit
10: Nouveau service
11: Ancienne UF
12: Ancien lit
13: Ancien service
14: Date/heure mouvement
15: Mode de transfert
16: Nouveau médecin responsable
17: Motif de transfert

示例:

MV|M6|C|HEXAGONE|20260123090000|USER002|PAT12345|VIS20260122001|UF_NEURO_01|LIT_102|NEURO|UF_CARDIO_01|LIT_001|CARDIO||||||

说明:

  • 类型:移动消息
  • 代码:M6(病区转运)
  • 模式:C(创建 - 新的转运事件)
  • 患者:PAT12345,就诊编号 VIS20260122001
  • 来源:心脏科 UF_CARDIO_01,病床 LIT_001
  • 去向:神经科 UF_NEURO_01,病床 LIT_102
  • 时间戳:23/01/2026 09:00:00
MV|M8 - 离开病区

目的:离开功能病区(不办理出院)

字段结构:

0-5:  Common fields
6:    IPP
7:    Numéro de séjour
8:    UF de sortie
9:    Date/heure sortie UF
10:   Destination
11:   Mode de sortie
MV|M9 - 医院出院

目的:患者出院

字段结构(共 14 个字段):

0:  Type (MV)
1:  Message (M9)
2:  Mode (C/M/D)
3:  Emetteur
4:  Date
5:  User
6:  IPP
7:  Numéro de séjour
8:  Date/heure sortie (YYYYMMDDHHmmss)
9:  Mode de sortie (DOMICILE/MUTATION/DECES)
10: Destination
11: État à la sortie (AMELIORE/STATIONNAIRE/AGGRAVE)
12: Médecin ayant autorisé la sortie
13: Motif de sortie

示例:

MV|M9|C|HEXAGONE|20260125180000|USER003|PAT12345|VIS20260122001|20260125180000|DOMICILE||AMELIORE||||

说明:

  • 类型:移动消息
  • 代码:M9(医院出院)
  • 模式:C(创建 - 新的出院事件)
  • 患者:PAT12345,就诊编号 VIS20260122001
  • 出院时间:25/01/2026 18:00:00
  • 去向:DOMICILE(家中)
  • 状态:AMELIORE(病情好转)
MV|B1 - 急诊/诊疗室移动

目的:急诊科诊疗室移动

字段结构:

0-5:  Common fields
6:    IPP
7:    Numéro de passage aux urgences
8:    Box de départ
9:    Box d'arrivée
10:   Date/heure mouvement
11:   Motif
MV|MT - 临时移动

目的:患者临时转运(检查、操作)

字段结构:

0-5:  Common fields
6:    IPP
7:    Numéro de séjour
8:    Lieu de départ
9:    Lieu d'arrivée
10:   Date/heure départ
11:   Date/heure retour prévue
12:   Motif (EXAMEN/BLOC/RADIOLOGIE)
覆盖消息(CV|*)
CV|M1 - 保险覆盖

目的:患者保险和覆盖信息

字段结构(共 20 个字段):

0:  Type (CV)
1:  Message (M1)
2:  Mode (C/M/D)
3:  Emetteur
4:  Date
5:  User
6:  IPP
7:  Organisme payeur
8:  Code régime
9:  Caisse
10: Centre
11: Numéro adhérent
12: Clé adhérent
13: Rang bénéficiaire
14: Date début droits
15: Date fin droits
16: Type couverture (CPAM/MUTUELLE/AME)
17: Taux de remboursement
18: ALD (Affection Longue Durée)
19: CMU/CMUC

示例:

CV|M1|C|HEXAGONE|20260122120000|USER001|PAT12345|CPAM75|01|750|001|1234567890|12|00|20260101|20261231|CPAM|100|OUI|NON

说明:

  • 类型:覆盖消息
  • 代码:M1(保险信息)
  • 患者:PAT12345
  • 保险机构:CPAM 75(巴黎社会保障),代码 01/750/001
  • 参保人:#1234567890,校验键 12,等级 00(主要参保人)
  • 有效期:01/01/2026 至 31/12/2026
  • 覆盖范围:CPAM(国家医疗保险),报销比例 100%
  • 特殊情况:ALD(长期疾病)= YES,CMU = NO

解析逻辑

收到解析 HPK 消息的请求时:

第 1 步:拆分并识别
  1. 按竖线分隔符拆分:fields = message.split('|')

  2. 识别消息类型:检查 fields[0]、fields[1] 和 fields[2]

    • 类型:fields[0](ID、MV、CV、PR、FO、MA、CO、LI、RO、FA、SO、RD、IM、DD、UT、ST)
    • 消息代码:fields[1](M1、M2、M3、M6、M8、M9、MT、CE、B1 等)
    • 模式:fields[2](C=创建、M=修改、S/D=停用/删除)
  3. 查阅 HPK 字典:使用消息键 {Type}|{Message},从 @erp-pas/hpk-dictionary 获取字段定义

第 2 步:提取基础字段

提取标准头部字段(始终位于位置 0-5):

位置字段格式描述
0类型2 个字符消息类别
1消息2 个字符具体消息类型
2模式1 个字符操作(C/M/S/D)
3Emetteur15 个字符发送方系统
4日期16 个字符时间戳(YYYYMMDDHHMISSnn)
5用户50 个字符用户标识符
步骤 3:提取特定类型的字段

根据消息类型,提取其余字段:

ID|M1(身份信息 - 字段 6-37):

  • 6:IPP(患者 ID)
  • 7:姓氏(Last Name)
  • 8:名字(First Name)
  • 9:出生日期(YYYYMMDD)
  • 10:性别(M/F/U)
  • 11-37:其他人口统计信息字段

MV|M2(入院 - 字段 6-18):

  • 6:IPP
  • 7:住院号(Visit ID)
  • 8:入院日期/时间
  • 9:入院方式
  • 10-18:地点和护理团队详细信息

MV|M6(转科 - 字段 6-17):

  • 6:IPP
  • 7:住院号
  • 8-10:新地点(UF、床位、科室)
  • 11-13:原地点
  • 14-17:转科详细信息

MV|M9(出院 - 字段 6-13):

  • 6:IPP
  • 7:住院号
  • 8:出院日期/时间
  • 9:出院方式
  • 10-13:出院详细信息

CV|M1(保险覆盖 - 字段 6-19):

  • 6:IPP
  • 7-19:保险和覆盖范围详细信息
步骤 4:格式化数据

根据数据类型应用格式:

  1. 日期字段(YYYYMMDD):

    • 解析:20260122 → 22/01/2026
    • 验证:检查日期是否有效
  2. 日期时间字段(YYYYMMDDHHMISSnn):

    • 解析:20260122140530 → 22/01/2026 14:05:30
    • nn = 厘秒(显示时通常忽略)
  3. 枚举值:

    • 性别:M(男性)、F(女性)、U(未知)
    • 模式:C(创建)、M(修改)、S/D(删除)
    • 入院方式:URGENCE、MUTATION、DOMICILE 等
  4. 空字段:

    • 空字符串或连续的竖线 ||
    • 显示为“未提供”或留空
步骤 5:验证消息

使用 HPK Dictionary 定义:

  1. 字段数量验证:

    expected_count = len(dictionary[message_key].fields)
    actual_count = len(fields)
    if actual_count != expected_count:
        warn("Field count mismatch")
    
  2. 必填字段验证:

    for field_def in dictionary[message_key].fields:
        if field_def.isMandatory and not fields[field_def.position]:
            error(f"Missing required field: {field_def.description}")
    
  3. 类型验证:

    • 日期:检查格式是否为 YYYYMMDD,以及日期是否有效
    • 数字:检查是否为数字且在范围内
    • 字符串:检查长度是否 <= 最大值
  4. 长度验证:

    if len(field_value) > field_def.length:
        warn(f"Field exceeds maximum length: {field_def.description}")
    
步骤 6:生成说明

提供上下文和解释:

  1. 消息用途:描述此消息的功能
  2. 操作类型:解释 C/M/S/D 模式
  3. 关键数据点:突出重要的临床/管理数据
  4. 业务上下文:解释对工作流的影响
  5. 相关消息:说明典型的消息序列

验证规则

结构验证
  1. 消息格式:必须以有效的 Type|Message|Mode 模式开头
  2. 大写标头:前 6 个字段必须为大写
  3. 竖线分隔符:字段以 |(ASCII 124)分隔
  4. 不含空格:空字段用 || 表示,而不是 | |
  5. 尾随竖线:可使用尾随竖线表示可选字段
字段级验证

根据 HPK Dictionary 的 isMandatory 和 type 属性:

  1. 必填字段:如果 isMandatory: true,则不能为空
  2. 日期格式:必须符合 YYYYMMDD 或 YYYYMMDDHHMISSnn
  3. 数字字段:只能包含数字(适用时可包含小数点)
  4. 长度限制:不得超过字典中的 length 属性
  5. 枚举值:必须符合允许的值(检查 comment 字段)
业务逻辑验证

根据 HPK 规范和业务规则:

  1. IPP 一致性:同一序列中的相关消息必须使用相同的 IPP
  2. 住院号:同一就诊期间的 MV 消息必须使用相同的住院号
  3. 日期顺序:
    • 入院日期 ≤ 转科日期 ≤ 出院日期
    • 覆盖期限的开始日期 ≤ 结束日期
  4. 地点引用:科室/单元/床位必须存在于组织结构中
  5. 执业人员引用:医生代码必须在系统中有效
数据质量检查
  1. 日期合理性:

    • 出生日期不能在未来
    • 入院日期必须在合理范围内
    • 年龄不能超过 120 岁(特殊情况除外)
  2. 标识符格式:

    • IPP:检查格式和校验位(如适用)
    • NIR:15 位数字(13 位 + 2 位校验码),并通过 Luhn 验证
    • FINESS:机构代码为 9 位数字
  3. 代码有效性:

    • 性别代码:仅限 M、F、U
    • 国家代码:ISO 3166-1 alpha-3(FRA 等)
    • 保险制度代码:根据 référentiel 检查
错误报告

验证失败时,请报告:

**Validation Issues**:
❌ **Error**: Missing required field at position 7 (Last Name)
⚠️  **Warning**: Field 9 (Birth Date) exceeds maximum length
⚠️  **Warning**: Field count mismatch - expected 38, got 35
ℹ️  **Info**: Optional field 16 (Mobile phone) not provided

严重性级别:

  • 错误(❌):无法处理消息
  • 警告(⚠️):消息可能存在问题,但仍可处理
  • 信息(ℹ️):可选字段或轻微问题

输出格式示例

解析消息时,请提供:

### HPK Message Analysis

**Raw Message**:

[原始 HPK 消息]


**Message Identification**:
- Type: [ID/MV/CV]
- Code: [M1/M2/M6/M9/etc.]
- Full Name: [descriptive name]
- Operation: [Creation/Modification/Deletion]

**Core Fields**:
- Sender System: [emetteur]
- Timestamp: [formatted date/time]
- User: [user ID]

**[Type]-Specific Fields**:
[List all relevant fields with labels and values]

**Business Context**:
[Explain what this message represents and its purpose]

**Validation**:
- Field count: [actual] (expected: [expected for this type])
- Required fields: [✓ or ✗ for each required field]
- Date formats: [✓ or ✗]
- Enumerated values: [✓ or ✗]

HPK 字典集成

GitLab 仓库

仓库:https://gitlab-erp-pas.dedalus.lan/erp-pas/hexagone/hpk-dictionary
软件包:@erp-pas/hpk-dictionary(NPM)
版本:1.0.5+
用途:所有 HPK 消息定义的权威信息源

字典结构

HPK 字典是一个 NPM 软件包,为 Hexagone 医疗系统提供全面的消息定义。每种消息类型都包括:

{
  description: String,        // Human-readable message description
  fields: Array[{
    position: Number,         // Field position (1-based)
    description: String,      // Field description
    length: Number,          // Maximum field length
    type: String,            // Data type (String, Number, Date, etc.)
    isMandatory: Boolean,    // Required field flag
    comment: String          // Additional notes/rules
  }]
}
字典访问示例
const hpk = require('@erp-pas/hpk-dictionary')

// Access message definition
const idM1 = hpk.segments['ID|M1']
console.log(idM1.description)  // "Suppression Identité Patient"

// Iterate through field definitions
idM1.fields.forEach(field => {
  console.log(`${field.position}. ${field.description} (${field.type}, max: ${field.length})`)
  if (field.isMandatory) console.log('   ⚠️  Required')
})
字典中的消息类别

HPK 字典定义了 100 多种消息类型,涵盖以下领域:

身份与用户管理(ID、UT)
  • ID|M1:患者身份创建/修改
  • ID|MT:主治医师分配
  • ID|CE:知情同意
  • UT|A1:用户账户管理
患者转运(MV)
  • MV|M2:住院
  • MV|M3:行政状态变更
  • MV|M6:科室/服务转移
  • MV|M8:功能单元转出
  • MV|M9:出院
  • MV|B1:急诊箱转移
  • MV|MT:临时转移(检查、操作)
保险与财务(CV、FA)
  • CV|M1:保险承保信息
  • FA|FE:发票抬头
  • FA|FL:发票明细
组织结构(ST)
  • ST|EJ:法律实体(Établissement Juridique)
  • ST|EG:地理实体(Établissement Géographique)
  • ST|BA:建筑物(Bâtiment)
  • ST|ET:楼层(Étage)
  • ST|CH:房间(Chambre)
供应链管理(PR、FO、MA、CO、LI、RO)
  • PR|M0-M5:产品管理
  • FO|M1-M3:供应商管理
  • MA|M1-M3:合同/市场管理
  • CO|M1-M2:订单
  • LI|M1-M2:外部交付
  • RO|M1-M2:收货
库存与存货(SO、IM)
  • SO|S1:库存出库
  • SO|I1:库存盘点
  • SO|T1:库存转移
  • SO|L1:预设列表
  • IM|M1:资产盘点
其他(RD、DD)
  • RD|E1/L1:其他收据
  • DD|M1/K1:请求消息
使用字典进行验证

解析 HPK 消息时,请使用字典执行以下操作:

  1. 验证字段数量:根据字典检查实际字段数量与预期字段数量
  2. 验证必填字段:使用 isMandatory 标志,确保所有必填字段均存在
  3. 类型验证:使用 type 字段验证数据格式(Date、Number、String)
  4. 长度验证:使用 length 字段确保值不超过最大长度
  5. 业务规则:使用 comment 字段获取其他验证逻辑
字段类型参考

来自 HPK 字典:

  • String:文本字段(字母数字)
  • Number:数值字段(可能包含小数精度,例如 9999.99)
  • Date:日期字段(YYYYMMDD 或 YYYYMMDDHHMISSnn 格式)
  • Boolean:真/假值(法语中表示为 T/F 或 O/N:Oui/Non)

参考文档

主要信息源:

  • HPK 字典仓库 - 完整的消息定义,包含字段架构、验证规则和数据类型

内部文档:

相关标准(供参考):

重要说明

消息格式标准
  1. 前 6 个字段必须使用大写(Type、Message、Mode、Emetteur、Date、User)
  2. 管道分隔符:使用 | 作为字段分隔符
  3. 空字段:用连续的管道符 || 表示(不加空格)
  4. 最大长度:由字典指定,不得超出
  5. 日期格式:YYYYMMDDHHMISSnn(其中 nn = 厘秒)

HPK 到 HL7 的映射

标准消息映射

为实现互操作性,HPK 消息通常映射到 HL7 v2.5 / IHE PAM 格式。fixtures 目录中包含这些映射的示例。

身份消息(ID)→ HL7 ADT 消息
HPK 消息HL7 消息IHE 事件描述
ID|M1|CADT^A28患者新增注册新患者
ID|M1|MADT^A31患者更新更新患者人口统计信息
ID|M1|DADT^A29患者删除删除患者记录
ID|MT|CADT^A28-添加/更新主治医生
ID|CE|CADT^A28-记录知情同意
移动消息(MV)→ HL7 ADT 消息
HPK 消息HL7 消息IHE 事件描述
MV|M2|CADT^A01患者入院 [ITI-31]医院入院
MV|M3|CADT^A06-状态变更(转为门诊患者)
MV|M6|CADT^A02患者转科 [ITI-32]病区/科室转移
MV|M8|CADT^A02-离开病区(院内转移)
MV|M9|CADT^A03患者出院 [ITI-33]医院出院
MV|B1|CADT^A02-急诊箱转移
MV|MT|CADT^A09/A10-临时离院/返回
保障消息(CV)→ HL7 段
HPK 消息HL7 段描述
CV|M1|CIN1 + IN2主保险
CV|M1|MIN1 + IN2保险信息更新
关键字段映射
HPK ID|M1 → HL7 ADT PID 段
HPK 字段(位置)HPK 描述HL7 字段HL7 描述
6IPPPID-3患者标识符列表
7姓氏PID-5.1患者姓名 - 姓氏
8名字PID-5.2患者姓名 - 名字
9出生日期PID-7出生日期/时间
10性别PID-8行政性别
11-14地址、邮政编码、城市、国家PID-11患者地址
15-16电话PID-13电话号码 - 家庭
28INSPID-3国家健康 ID(OID 1.2.250.1.213.1.4.8)
30-31NIR + 校验码PID-3社会保障号码(OID 1.2.250.1.213.1.4.10)
HPK MV|M2 → HL7 ADT PV1 段
HPK 字段(位置)HPK 描述HL7 字段HL7 描述
7就诊编号PV1-19就诊编号
8入院日期/时间PV1-44入院日期/时间
9入院方式PV1-4入院类型
10医疗机构PV1-3.1分配的患者位置 - 医疗机构
11科室PV1-3.2分配的患者位置 - 楼宇
12功能单元PV1-3.3分配的患者位置 - 楼层
13床位PV1-3.4分配的患者位置 - 床位
14主管医生PV1-7主治医生
HPK MV|M9 → HL7 ADT PV1 段
HPK 字段(位置)HPK 描述HL7 字段HL7 描述
8出院日期/时间PV1-45出院日期/时间
9出院方式PV1-36出院去向
11出院时状态PV1-52患者状况代码
集成模式
模式 1:Hexagone WEB → Service Echange → 外部系统
[Hexagone WEB] --HPK--> [Service Echange] --HPK/HL7--> [External System]
                              ↓
                        [HPK Dictionary]
                        [Mapping Rules]

流程:

  1. Hexagone WEB 中发生事件(入院、转院、出院)
  2. 使用字典定义生成 HPK 消息
  3. 消息存储在 Oracle 数据库队列中
  4. Service Echange/Hexaflux 处理消息
  5. 根据需要使用映射规则将消息转换为 HL7
  6. 通过已配置的连接器将消息发送到外部系统
  7. 接收确认并记录日志
模式 2:外部系统 → Hexagone WEB(同步)
[External System] --Request--> [Hexagone WEB API] --HPK Event--> [Database]
                                       ↓
                                 [HPK Message]
                                       ↓
                              [Service Echange] --HPK--> [Other Systems]

流程:

  1. 外部系统向 Hexagone WEB 发起同步请求
  2. Hexagone WEB 处理请求并更新数据库
  3. 数据库触发器生成 HPK 消息
  4. 提高消息优先级(同步请求的优先级较高)
  5. Service Echange 将消息广播到其他系统
  6. 将响应返回给原始请求方
模式 3:消息排序

常见工作流中的典型 HPK 消息序列:

新患者入院:

1. ID|M1|C    - Register patient identity
2. CV|M1|C    - Add insurance coverage
3. MV|M2|C    - Admit patient to hospital
4. [Optional] ID|MT|C - Assign treating physician

患者转院:

1. MV|M8|C    - Exit from current unit
2. MV|M6|C    - Transfer to new unit
3. [If needed] MV|M3|C - Status change

患者出院:

1. MV|M9|C    - Discharge from hospital
2. [Optional] ID|M1|M - Update address if changed
3. [Optional] CV|M1|M - Update coverage end date
OID 参考(法国医疗保健)

HPK 到 HL7 映射的重要 OID:

标识符类型OID描述
INS-C1.2.250.1.213.1.4.8计算得出的国家健康标识符
INS-A1.2.250.1.213.1.4.9经认证的国家健康标识符
NIR1.2.250.1.213.1.4.10社会保险号码
IPP1.2.250.1.213.1.4.2患者永久标识符(本地)
FINESS1.2.250.1.71.4.2.2机构标识符
RPPS1.2.250.1.71.4.2.1医疗专业人员共享名录

常见问题排查

问题 1:字段数量不匹配

症状:消息中的字段数量少于或多于预期

Expected 38 fields for ID|M1, got 35

原因:

  • 可选字段缺少末尾竖线
  • 文本数据(地址、姓名)中有多余的竖线
  • 消息在传输过程中被截断

解决方案:

  1. 检查 HPK 字典中预期的字段数量
  2. 确认所有必填字段均存在
  3. 检查数据中是否有未转义的竖线
  4. 为可选字段补上缺少的末尾竖线
问题 2:日期格式错误

症状:日期格式无效或解析错误

Field 9 (Birth Date): "1975/03/15" - expected YYYYMMDD

原因:

  • 日期格式错误(使用斜杠而非数字)
  • 日期值无效(例如,20260231)
  • 缺少前导零

解决方案:

  1. 确认格式严格为 YYYYMMDD(8 位数字)
  2. 日期时间格式:YYYYMMDDHHMISSnn(16 位数字)
  3. 确认日期有效(例如,不存在 2 月 31 日)
  4. 如有需要,用零补齐(例如,"2026315" → "20260315")
问题 3:大写要求

症状:接收方拒绝消息

Field 3 (Emetteur): "Hexagone" - must be uppercase

原因:

  • 标头字段(位置 0-5)大小写混用
  • 接收系统进行区分大小写的验证

解决方案:

  1. 将前 6 个字段转换为大写
  2. 患者姓名使用规范大小写(ID|M1 中的字段 7-8)
  3. 查看规范,确认每个字段的大小写要求
问题 4:空字段与缺失字段

症状:必填字段为空

Field 7 (Last Name): "" - required field missing

原因:

  • 使用连续竖线 || 而非填写值
  • 空格字符 被视为空值
  • 空值与空字符串的处理方式不同

解决方案:

  1. 必填字段:必须包含非空值
  2. 可选字段:使用 ||(连续竖线)
  3. 切勿用空格表示空值:| | 是错误的
  4. 去除字段值中的空白字符
问题 5:字符编码

症状:特殊字符损坏

"Hôpital" appears as "H?pital"

原因:

  • UTF-8 与 ISO-8859-1 编码不匹配
  • 带重音符号的字符编码不正确

解决方案:

  1. 确认编码规范(通常为 UTF-8 或 ISO-8859-1)
  2. 确保整个处理流程中的编码一致
  3. 使用带重音符号的字符进行测试:é、è、à、ô、ç
  4. 比较时考虑进行规范化(移除重音符号)

实用示例

示例 1:解析身份消息

输入:

ID|M1|C|HEXAGONE|20260122120000|USER001|PAT12345|DUPONT|JEAN|19750315|M|15 RUE DE LA PAIX|75001|PARIS|FRA|0612345678||||||||||||||||||||||||||||||||||||||

预期输出:

### HPK Message Analysis

**Message Type**: ID|M1|C - Patient Identity Creation

**Core Information**:
- System: HEXAGONE
- Timestamp: 22/01/2026 12:00:00
- User: USER001
- Operation: Creation (new patient registration)

**Patient Demographics**:
- IPP: PAT12345
- Name: DUPONT JEAN
- Birth Date: 15/03/1975 (50 years old)
- Gender: Male
- Address: 15 RUE DE LA PAIX, 75001 PARIS, France
- Phone: 06 12 34 56 78

**Business Context**:
This message registers a new patient in the system. The IPP (PAT12345) will be used to identify this patient in all subsequent messages (admissions, transfers, etc.). The message was generated by USER001 on 22/01/2026 at 12:00.

**Validation**: ✓ All required fields present, correct format
示例 2:解析入院消息

输入:

MV|M2|C|HEXAGONE|20260122140000|USER001|PAT12345|VIS20260122001|20260122140000|URGENCE|CHU_PARIS|CARDIO|UF_CARDIO_01|LIT_001|PR_MARTIN|||||||

预期输出:

### HPK Message Analysis

**Message Type**: MV|M2|C - Patient Admission

**Core Information**:
- System: HEXAGONE
- Timestamp: 22/01/2026 14:00:00
- User: USER001
- Operation: Creation (new admission)

**Patient & Visit**:
- IPP: PAT12345
- Visit Number: VIS20260122001
- Admission Date/Time: 22/01/2026 14:00:00

**Admission Details**:
- Entry Mode: URGENCE (Emergency admission)
- Facility: CHU_PARIS
- Service: CARDIO (Cardiology)
- Functional Unit: UF_CARDIO_01
- Bed: LIT_001
- Attending Physician: PR_MARTIN

**Business Context**:
Patient PAT12345 admitted to CHU Paris Cardiology department via emergency room on 22/01/2026 at 14:00. The visit is assigned number VIS20260122001 which will track all movements during this hospital stay. Patient assigned to bed LIT_001 in functional unit UF_CARDIO_01 under care of Dr. PR_MARTIN.

**HL7 Mapping**: Maps to ADT^A01 (Admit Patient) - IHE PAM [ITI-31]

**Validation**: ✓ All required fields present
示例 3:解析消息序列

输入(多条消息):

1. ID|M1|C|HEXAGONE|20260122120000|USER001|PAT12345|DUPONT|JEAN|19750315|M|...
2. CV|M1|C|HEXAGONE|20260122120100|USER001|PAT12345|CPAM75|01|750|...
3. MV|M2|C|HEXAGONE|20260122140000|USER002|PAT12345|VIS001|20260122140000|URGENCE|...
4. MV|M6|C|HEXAGONE|20260123090000|USER003|PAT12345|VIS001|UF_NEURO|...
5. MV|M9|C|HEXAGONE|20260125180000|USER002|PAT12345|VIS001|20260125180000|DOMICILE|...

预期输出:

### HPK Message Sequence Analysis

**Workflow**: Complete Patient Episode

**Timeline**:

**22/01/2026 12:00** - Patient Registration (ID|M1|C)
- Patient DUPONT JEAN (IPP: PAT12345) registered by USER001

**22/01/2026 12:01** - Insurance Added (CV|M1|C) [+1 min]
- CPAM Paris coverage added by USER001

**22/01/2026 14:00** - Emergency Admission (MV|M2|C) [+2h]
- Admitted via emergency, Visit: VIS001 by USER002

**23/01/2026 09:00** - Transfer (MV|M6|C) [+19h]
- Transferred to Neurology by USER003

**25/01/2026 18:00** - Discharge (MV|M9|C) [+2d 9h]
- Discharged home by USER002

**Summary**:
- Episode duration: 3 days 6 hours
- Visit VIS001 completed
- 3 users involved
- ✓ Logical sequence maintained
- ✓ Chronological order correct

**HL7 Equivalent**: ADT^A28 → ADT^A28 → ADT^A01 → ADT^A02 → ADT^A03

快速参考

核心消息类型
患者管理(ID、MV、CV)
HPK 消息全名用途HL7 等效项
ID|M1|C/M/D患者身份患者人口统计信息和登记ADT^A28/A31/A29
ID|MT|C/M/D主治医生指定/更新 médecin traitantADT^A28
ID|CE|C/M/D知情同意记录患者同意ADT^A28
MV|M2|C/M/D入院医院入院ADT^A01
MV|M3|C/M/D状态变更行政状态变更ADT^A06
MV|M6|C/M/D转科病区/服务转移ADT^A02
MV|M8|C/M/D离开病区离开功能单元ADT^A02
MV|M9|C/M/D出院医院出院ADT^A03
MV|B1|C/M/D急诊诊室移动急诊科诊室移动ADT^A02
MV|MT|C/M/D临时移动临时移动(检查、操作)ADT^A09/A10
CV|M1|C/M/D保险覆盖保险和覆盖信息IN1/IN2
用户管理(UT)
HPK 消息全名用途
UT|A1|C/M/S用户账户创建/修改/删除用户账户
组织结构(ST)
HPK 消息全名用途
ST|EJ|C/M法律实体Établissement Juridique(法律实体)
ST|EG|C/M地理位置实体Établissement Géographique(实际场所)
ST|BA|C/M/S建筑物Bâtiment(建筑结构)
ST|ET|C/M/S楼层Étage(楼层)
ST|CH|C/M/S房间Chambre/Pièce(房间/空间)
供应链——产品和供应商(PR、FO)
HPK 消息全名用途
PR|M0|C/M/S产品——常规数据产品常规信息
PR|M1|C/M/S产品——药房信息药房专用产品数据
PR|M2|C/M/S产品——治疗用药目录治疗用药目录信息
PR|M3|C/M/S产品——会计信息会计和财务数据
PR|M4|C/M/S产品——经济信息经济管理信息
PR|M5|C/M/S产品——仓库信息商店/仓库信息
FO|M1|C/M/S供应商——常规信息供应商常规信息
FO|M2|C/M/S供应商——银行信息银行开户信息
FO|M3|C/M/S供应商——订购联系人订购联系点
供应链——订单和交付(MA、CO、LI、RO)
HPK 消息全名用途
MA|M1|C/M/S市场——标题合同/市场标题
MA|M2|C/M/S市场——条目合同/市场条目
MA|M3|C/M/S市场——供应商按市场划分的供应商
CO|M1|C/M/S订单——标题采购订单标题
CO|M2|C/M/S订单——条目采购订单条目
LI|M1|C/M交付——条目外部交付条目
LI|M2|C/M交付——批次条目带批次管理的交付条目
RO|M1|C/M/S收货——条目收货条目
RO|M2|C/M收货——批次条目带批次管理的收货条目
财务(FA、RD)
HPK 消息全名用途
FA|FE|C发票——标题Facture Entête(发票标题)
FA|FL|C发票——条目Facture Lignes(发票条目)
RD|E1|C杂项收款——标题Recettes diverses 标题
RD|L1|C杂项收款——条目Recettes diverses 条目
库存与存货(SO、IM)
HPK 消息全称用途
SO|S1|C库存出库出库(库存提取)
SO|I1|C库存盘点盘点(库存清点)
SO|T1|C库存转移转移(内部转移)
SO|L1|C预设清单预设清单
IM|M1|C资产盘点家具盘点(资产跟踪)
请求(DD)
HPK 消息全称用途
DD|M1|C身份请求创建身份请求
DD|K1|C行为请求创建行为请求
操作模式
模式法语英语说明
CCréation创建创建新记录
MModification修改更新现有记录
SSuppression删除删除/移除记录
DDeletion删除删除(另一种表示法)
常见字段模式

标准标头(所有消息):

Type|Message|Mode|Emetteur|Date|User|...

日期格式:

  • 短日期:YYYYMMDD(例如,20260122)
  • 完整时间戳:YYYYMMDDHHMISSnn(例如,20260122140530)
  • nn = 厘秒(1/100 秒)

性别代码:

  • M = 男性(Masculin)
  • F = 女性(Féminin)
  • U = 未知(Inconnu)

法国行政术语:

  • IPP = Identifiant Permanent du Patient(患者永久 ID)
  • INS = Identifiant National de Santé(国家健康 ID)
  • NIR = Numéro d'Inscription au Répertoire(社会保险号)
  • UF = Unité Fonctionnelle(功能单元)
  • FINESS = Fichier National des Établissements Sanitaires et Sociaux
  • CPAM = Caisse Primaire d'Assurance Maladie(健康保险基金)
  • ALD = Affection Longue Durée(长期疾病)
  • CMU = Couverture Maladie Universelle(全民健康保险)

评论

支持 Markdown