feat(mapping): 实现健康档案映射基线(T-202)
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
package mapping
|
||||
|
||||
type PHISHealthRecord struct {
|
||||
SourceSystem string
|
||||
SourceRecordID string
|
||||
UpdatedAt string
|
||||
IDCard string
|
||||
PersonName string
|
||||
SexCode string
|
||||
Birthday string
|
||||
MobileNumber string
|
||||
RegionCode string
|
||||
ManaDoctorID string
|
||||
ManaUnitID string
|
||||
NationCode string
|
||||
EducationCode string
|
||||
WorkCode string
|
||||
MaritalStatusCode string
|
||||
BloodTypeCode string
|
||||
RhBloodCode string
|
||||
InsuranceCode string
|
||||
}
|
||||
|
||||
type MappedHealthRecord struct {
|
||||
CheckID string
|
||||
IDCard string
|
||||
PersonName string
|
||||
SexCode string
|
||||
Birthday string
|
||||
MobileNumber string
|
||||
RegionCode string
|
||||
ManaDoctorID string
|
||||
ManaUnitID string
|
||||
NationCode string
|
||||
EducationCode string
|
||||
WorkCode string
|
||||
MaritalStatusCode string
|
||||
BloodTypeCode string
|
||||
RhBloodCode string
|
||||
InsuranceCode string
|
||||
}
|
||||
|
||||
type DictSnapshot struct {
|
||||
Sex Dict
|
||||
Nation Dict
|
||||
Education Dict
|
||||
Work Dict
|
||||
MaritalStatus Dict
|
||||
BloodType Dict
|
||||
RhBlood Dict
|
||||
Insurance Dict
|
||||
}
|
||||
|
||||
type MapContext struct {
|
||||
Dicts DictSnapshot
|
||||
}
|
||||
|
||||
func DefaultDictSnapshot() DictSnapshot {
|
||||
return DictSnapshot{
|
||||
Sex: SexDict,
|
||||
Nation: NationDict,
|
||||
Education: EducationDict,
|
||||
Work: WorkDict,
|
||||
MaritalStatus: MaritalStatusDict,
|
||||
BloodType: BloodTypeDict,
|
||||
RhBlood: RhBloodDict,
|
||||
Insurance: InsuranceDict,
|
||||
}
|
||||
}
|
||||
|
||||
func MapHealthRecord(src PHISHealthRecord, ctx MapContext) (MappedHealthRecord, []ValidationError) {
|
||||
if ctx.Dicts.Sex.Name == "" {
|
||||
ctx.Dicts = DefaultDictSnapshot()
|
||||
}
|
||||
var errs []ValidationError
|
||||
for _, field := range []struct {
|
||||
name string
|
||||
value string
|
||||
}{
|
||||
{name: "idCard", value: src.IDCard},
|
||||
{name: "personName", value: src.PersonName},
|
||||
{name: "sexCode", value: src.SexCode},
|
||||
{name: "birthday", value: src.Birthday},
|
||||
{name: "mobileNumber", value: src.MobileNumber},
|
||||
{name: "regionCode", value: src.RegionCode},
|
||||
{name: "manaDoctorId", value: src.ManaDoctorID},
|
||||
{name: "manaUnitId", value: src.ManaUnitID},
|
||||
} {
|
||||
if field.value == "" {
|
||||
errs = append(errs, ValidationError{Field: field.name, Reason: "required"})
|
||||
}
|
||||
}
|
||||
|
||||
mapped := MappedHealthRecord{
|
||||
CheckID: GenerateCheckID(src.SourceSystem, "JKDA", src.SourceRecordID, src.UpdatedAt),
|
||||
IDCard: src.IDCard,
|
||||
PersonName: src.PersonName,
|
||||
Birthday: src.Birthday,
|
||||
MobileNumber: src.MobileNumber,
|
||||
RegionCode: src.RegionCode,
|
||||
ManaDoctorID: src.ManaDoctorID,
|
||||
ManaUnitID: src.ManaUnitID,
|
||||
}
|
||||
mapped.SexCode = mapCode(ctx.Dicts.Sex, src.SexCode, &errs)
|
||||
mapped.NationCode = mapCode(ctx.Dicts.Nation, src.NationCode, &errs)
|
||||
mapped.EducationCode = mapCode(ctx.Dicts.Education, src.EducationCode, &errs)
|
||||
mapped.WorkCode = mapCode(ctx.Dicts.Work, src.WorkCode, &errs)
|
||||
mapped.MaritalStatusCode = mapCode(ctx.Dicts.MaritalStatus, src.MaritalStatusCode, &errs)
|
||||
mapped.BloodTypeCode = mapCode(ctx.Dicts.BloodType, src.BloodTypeCode, &errs)
|
||||
mapped.RhBloodCode = mapCode(ctx.Dicts.RhBlood, src.RhBloodCode, &errs)
|
||||
mapped.InsuranceCode = mapCode(ctx.Dicts.Insurance, src.InsuranceCode, &errs)
|
||||
return mapped, errs
|
||||
}
|
||||
|
||||
func mapCode(dict Dict, code string, errs *[]ValidationError) string {
|
||||
if code == "" {
|
||||
return ""
|
||||
}
|
||||
mapped, err := dict.PHISToOSI(code)
|
||||
if err != nil {
|
||||
if validationErr, ok := err.(ValidationError); ok {
|
||||
*errs = append(*errs, validationErr)
|
||||
return ""
|
||||
}
|
||||
*errs = append(*errs, ValidationError{Field: dict.Field, Code: code, Reason: err.Error()})
|
||||
return ""
|
||||
}
|
||||
return mapped
|
||||
}
|
||||
Reference in New Issue
Block a user