50 lines
1.6 KiB
Go
50 lines
1.6 KiB
Go
package service
|
|
|
|
import "strings"
|
|
|
|
// CrossValidate 交叉验证:AI 检测结果 vs LAMP 检测结果(规格书:一致→确认诊断;不一致→升级专家会诊)
|
|
func CrossValidate(aiClass, lampResult string, lampDiseases []string) (bool, string) {
|
|
switch {
|
|
case lampResult == "invalid":
|
|
return false, "LAMP 判读无效,建议复检或专家会诊"
|
|
case aiClass == "":
|
|
return false, "未找到关联巡检记录,暂无法交叉验证"
|
|
case aiClass == "unknown":
|
|
return false, "AI 结果未知,建议复检或专家会诊"
|
|
case aiClass == "sick" && lampResult == "positive":
|
|
return true, "AI 检出异常与 LAMP 阳性一致,确认诊断"
|
|
case aiClass == "healthy" && lampResult == "negative":
|
|
return true, "AI 未见异常与 LAMP 阴性一致"
|
|
case aiClass == "sick" && lampResult == "negative":
|
|
return false, "AI 检出异常但 LAMP 阴性,建议专家会诊"
|
|
case aiClass == "healthy" && lampResult == "positive":
|
|
return false, "AI 未见异常但 LAMP 阳性,建议专家会诊"
|
|
default:
|
|
return false, "交叉验证结果待确认"
|
|
}
|
|
}
|
|
|
|
// AIClassFromDetections 从巡检检测结果归纳 AI 结论;空检测或 unknown 不当作 healthy。
|
|
func AIClassFromDetections(detections []AIDetection) string {
|
|
if len(detections) == 0 {
|
|
return "unknown"
|
|
}
|
|
healthySeen := false
|
|
unknownSeen := false
|
|
for _, d := range detections {
|
|
class := strings.ToLower(strings.TrimSpace(d.ClassName))
|
|
switch class {
|
|
case "healthy":
|
|
healthySeen = true
|
|
case "", "unknown":
|
|
unknownSeen = true
|
|
default:
|
|
return "sick"
|
|
}
|
|
}
|
|
if healthySeen && !unknownSeen {
|
|
return "healthy"
|
|
}
|
|
return "unknown"
|
|
}
|