feat(osi): 实现 JKDA 档案 Create/Update 与创建请求契约(T-206)

- contract/jkda.go 补创建请求结构体(healthRecord + manageInfo + 既往史节点)
- osi/jkda.go 新增 CreateHealthRecord/UpdateHealthRecord
- osi/codes.go 登记 JKDA00001 create / JKDA00003 update serviceId 与路径
- mapping 映射创建路径(真实字典快照反查主数据)
- 代码与单测完成;真实 create 待安全测试档案与写入授权(见 tasks.md T-206 BLOCKED)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
ila
2026-07-07 23:11:17 +08:00
co-authored by Claude Opus 4.8
parent 12346c9923
commit f95a779daa
8 changed files with 253 additions and 9 deletions
+30
View File
@@ -1,5 +1,7 @@
package mapping
import "chis_osi/contract"
type PHISHealthRecord struct {
SourceSystem string
SourceRecordID string
@@ -158,3 +160,31 @@ func mapCode(dict Dict, code string, errs *[]ValidationError) string {
}
return mapped
}
func BuildHealthRecordCreate(mapped MappedHealthRecord) contract.HealthRecordCreate {
return contract.HealthRecordCreate{
BaseInfo: contract.HealthRecordBaseInfo{
IDCard: mapped.IDCard,
PersonName: mapped.PersonName,
},
HealthRecord: contract.HealthRecordCreateInfo{
CheckID: mapped.CheckID,
IDCard: mapped.IDCard,
PersonName: mapped.PersonName,
SexCode: mapped.SexCode,
Birthday: mapped.Birthday,
MobileNumber: mapped.MobileNumber,
RegionCode: mapped.RegionCode,
ManaDoctorID: mapped.ManaDoctorID,
ManaUnitID: mapped.ManaUnitID,
CreateUser: mapped.ManaDoctorID,
CreateUnit: mapped.ManaUnitID,
NationCode: mapped.NationCode,
EducationCode: mapped.EducationCode,
WorkCode: mapped.WorkCode,
MaritalStatusCode: mapped.MaritalStatusCode,
BloodTypeCode: mapped.BloodTypeCode,
RhBloodCode: mapped.RhBloodCode,
InsuranceCode: mapped.InsuranceCode,
},
}
}
+20
View File
@@ -2,6 +2,26 @@ package mapping
import "testing"
func TestBuildHealthRecordCreateUsesMappedFieldsAndCheckID(t *testing.T) {
mapped, errs := MapHealthRecord(validPHISHealthRecord(), MapContext{Dicts: DefaultDictSnapshot()})
if len(errs) != 0 {
t.Fatalf("errors = %#v", errs)
}
create := BuildHealthRecordCreate(mapped)
if create.HealthRecord.CheckID != mapped.CheckID {
t.Fatalf("checkId = %q, want %q", create.HealthRecord.CheckID, mapped.CheckID)
}
if create.HealthRecord.IDCard != mapped.IDCard || create.HealthRecord.PersonName != mapped.PersonName {
t.Fatalf("healthRecord demographics = %#v", create.HealthRecord)
}
if create.HealthRecord.RegionCode != mapped.RegionCode || create.HealthRecord.ManaDoctorID != mapped.ManaDoctorID || create.HealthRecord.ManaUnitID != mapped.ManaUnitID || create.HealthRecord.CreateUser != mapped.ManaDoctorID || create.HealthRecord.CreateUnit != mapped.ManaUnitID {
t.Fatalf("management fields = %#v", create.HealthRecord)
}
if create.BaseInfo.IDCard != mapped.IDCard || create.BaseInfo.PersonName != mapped.PersonName {
t.Fatalf("baseInfo = %#v", create.BaseInfo)
}
}
func TestMapHealthRecordMapsDirectFieldsDictsAndCheckID(t *testing.T) {
src := validPHISHealthRecord()
got, errs := MapHealthRecord(src, MapContext{Dicts: DefaultDictSnapshot()})