- 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>
182 lines
5.6 KiB
Go
182 lines
5.6 KiB
Go
package contract
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
)
|
|
|
|
func TestFindHealthRecordDeserializesMeasuredJKDA00002Data(t *testing.T) {
|
|
raw := []byte(`[
|
|
{
|
|
"healthRecord": {
|
|
"idCard": "440000********1234",
|
|
"personName": "测试人员",
|
|
"sexCode": "1",
|
|
"birthday": "1970-01-01",
|
|
"phrId": "PHR001",
|
|
"empiId": "0123456789abcdef0123456789abcdef",
|
|
"checkId": null,
|
|
"manaUnitId": "123456789",
|
|
"createUnit": "123456789",
|
|
"manaDoctorId": "D001",
|
|
"createUser": "U001",
|
|
"regionCode": "441625000000",
|
|
"addressCode": "441625000001",
|
|
"homePlaceCode": "441625000002",
|
|
"address": "现住址",
|
|
"adressNumber": "101号",
|
|
"homePlace": "户籍地",
|
|
"homePlaceNumber": "202号",
|
|
"nationCode": "01",
|
|
"educationCode": "30",
|
|
"workCode": "90",
|
|
"maritalStatusCode": "20",
|
|
"bloodTypeCode": "1",
|
|
"rhBloodCode": "1",
|
|
"insuranceCode": "01",
|
|
"insuranceType": null,
|
|
"personGroup": "01",
|
|
"otherPersonGroup": null,
|
|
"isFillShhj": "y",
|
|
"contact": "联系人",
|
|
"contactPhone": "13800000000",
|
|
"mobileNumber": "13900000000",
|
|
"phoneNumber": "02000000000",
|
|
"status": "1",
|
|
"createDate": "2026-07-06"
|
|
},
|
|
"pastHistory": {
|
|
"ywgms": "2",
|
|
"jwsjb": "1",
|
|
"bls": "2",
|
|
"ycbs": "2",
|
|
"cjqk": "2",
|
|
"jzsfqn": "2",
|
|
"jzsmq": "2",
|
|
"jzszn": "2",
|
|
"jzsxdjm": "2"
|
|
},
|
|
"jwsjb": [{"jwsjbcode":"2","jwsjbmc":"高血压","jwsjbqzsj":"2020-01-02"}],
|
|
"jwsss": [{"jwssscode":"1","jwsssmc":"手术史","jwsssqzsj":"2019-03-04"}],
|
|
"jwsws": [{"jwswscode":"1","jwswsmc":"外伤史"}],
|
|
"jwssx": [{"jwssxcode":"1","jwssxyy":"输血原因"}],
|
|
"familyMiddle": {
|
|
"waterSourceCode": "1",
|
|
"fuelType": "2",
|
|
"cookAirTool": "3",
|
|
"washroom": "4",
|
|
"livestockColumn": "5",
|
|
"isFillShhj": "y"
|
|
}
|
|
}
|
|
]`)
|
|
|
|
var records []FindHealthRecord
|
|
if err := json.Unmarshal(raw, &records); err != nil {
|
|
t.Fatalf("Unmarshal: %v", err)
|
|
}
|
|
if len(records) != 1 {
|
|
t.Fatalf("records length = %d", len(records))
|
|
}
|
|
|
|
record := records[0]
|
|
if record.HealthRecord.PhrID != "PHR001" {
|
|
t.Fatalf("phrId = %q", record.HealthRecord.PhrID)
|
|
}
|
|
if record.HealthRecord.AdressNumber != "101号" {
|
|
t.Fatalf("adressNumber = %q", record.HealthRecord.AdressNumber)
|
|
}
|
|
if record.HealthRecord.CheckID != nil {
|
|
t.Fatalf("checkId = %#v, want nil", record.HealthRecord.CheckID)
|
|
}
|
|
if record.HealthRecord.InsuranceType != nil {
|
|
t.Fatalf("insuranceType = %#v, want nil", record.HealthRecord.InsuranceType)
|
|
}
|
|
if record.HealthRecord.OtherPersonGroup != nil {
|
|
t.Fatalf("otherPersonGroup = %#v, want nil", record.HealthRecord.OtherPersonGroup)
|
|
}
|
|
if record.PastHistory == nil || record.PastHistory.JWSJB != "1" {
|
|
t.Fatalf("pastHistory = %#v", record.PastHistory)
|
|
}
|
|
if len(record.PastDiseases) != 1 || record.PastDiseases[0].Code != "2" || record.PastDiseases[0].ConfirmedDate != "2020-01-02" {
|
|
t.Fatalf("past diseases = %#v", record.PastDiseases)
|
|
}
|
|
if len(record.PastSurgeries) != 1 || record.PastSurgeries[0].Name != "手术史" {
|
|
t.Fatalf("past surgeries = %#v", record.PastSurgeries)
|
|
}
|
|
if len(record.PastTraumas) != 1 || record.PastTraumas[0].Name != "外伤史" {
|
|
t.Fatalf("past traumas = %#v", record.PastTraumas)
|
|
}
|
|
if len(record.PastTransfusions) != 1 || record.PastTransfusions[0].Reason != "输血原因" {
|
|
t.Fatalf("past transfusions = %#v", record.PastTransfusions)
|
|
}
|
|
if record.FamilyMiddle == nil || record.FamilyMiddle.IsFillSHHJ != "y" {
|
|
t.Fatalf("familyMiddle = %#v", record.FamilyMiddle)
|
|
}
|
|
}
|
|
|
|
func TestFindHealthRecordResponseDeserializesDataArray(t *testing.T) {
|
|
raw := []byte(`{"code":"01","message":"操作成功","data":[{"healthRecord":{"phrId":"PHR001","checkId":null,"adressNumber":"101号"}}]}`)
|
|
|
|
var response FindHealthRecordResponse
|
|
if err := json.Unmarshal(raw, &response); err != nil {
|
|
t.Fatalf("Unmarshal: %v", err)
|
|
}
|
|
if response.Code != "01" || response.Message != "操作成功" {
|
|
t.Fatalf("response = %#v", response)
|
|
}
|
|
if len(response.Data) != 1 {
|
|
t.Fatalf("data length = %d", len(response.Data))
|
|
}
|
|
if response.Data[0].HealthRecord.PhrID != "PHR001" {
|
|
t.Fatalf("phrId = %q", response.Data[0].HealthRecord.PhrID)
|
|
}
|
|
if response.Data[0].HealthRecord.CheckID != nil {
|
|
t.Fatalf("checkId = %#v, want nil", response.Data[0].HealthRecord.CheckID)
|
|
}
|
|
}
|
|
func TestHealthRecordCreateSerializesCreateFieldNames(t *testing.T) {
|
|
req := HealthRecordCreate{
|
|
BaseInfo: HealthRecordBaseInfo{
|
|
IDCard: "440000********1234",
|
|
PersonName: "测试人员",
|
|
},
|
|
HealthRecord: HealthRecordCreateInfo{
|
|
CheckID: "CHK2026070700000001",
|
|
IDCard: "440000********1234",
|
|
PersonName: "测试人员",
|
|
SexCode: "1",
|
|
Birthday: "1970-01-01",
|
|
MobileNumber: "13900000000",
|
|
RegionCode: "441625000000",
|
|
ManaDoctorID: "doc-001",
|
|
ManaUnitID: "123456789",
|
|
AddressNumber: "101号",
|
|
},
|
|
PastHistory: &PastHistory{YWGMS: "0101"},
|
|
}
|
|
|
|
raw, err := json.Marshal(req)
|
|
if err != nil {
|
|
t.Fatalf("Marshal: %v", err)
|
|
}
|
|
var got map[string]any
|
|
if err := json.Unmarshal(raw, &got); err != nil {
|
|
t.Fatalf("Unmarshal: %v", err)
|
|
}
|
|
healthRecord := got["healthRecord"].(map[string]any)
|
|
if healthRecord["checkId"] != "CHK2026070700000001" {
|
|
t.Fatalf("healthRecord = %#v", healthRecord)
|
|
}
|
|
if healthRecord["addressNumber"] != "101号" {
|
|
t.Fatalf("addressNumber missing: %#v", healthRecord)
|
|
}
|
|
if _, ok := healthRecord["adressNumber"]; ok {
|
|
t.Fatalf("create request used response typo adressNumber: %#v", healthRecord)
|
|
}
|
|
baseInfo := got["baseInfo"].(map[string]any)
|
|
if baseInfo["idCard"] != "440000********1234" || baseInfo["personName"] != "测试人员" {
|
|
t.Fatalf("baseInfo = %#v", baseInfo)
|
|
}
|
|
}
|