|
@@ -234,6 +234,64 @@ public class AttributionComplianceGate {
|
|
|
return new GateReport(base == null ? Collections.emptyList() : base.getNodes(), all);
|
|
return new GateReport(base == null ? Collections.emptyList() : base.getNodes(), all);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // ==================== G-3 证据码隔离(T11) ====================
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * T11 G-3 证据码规范化:低侧机制证据码归一。
|
|
|
|
|
+ *
|
|
|
|
|
+ * <p>契约:{@code PUB}/{@code KB}/{@code COM} 原样保留;空/null/未知编号 → {@code EVIDENCE_UNVERIFIED}
|
|
|
|
|
+ * (「未核实」)。纯规则、无 DB、无副作用,可单测。
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param evidenceCode 原始证据码
|
|
|
|
|
+ * @return 规范化证据码(PUB/KB/COM 原样,其余「未核实」)
|
|
|
|
|
+ */
|
|
|
|
|
+ public String tagEvidence(String evidenceCode) {
|
|
|
|
|
+ if (evidenceCode == null) {
|
|
|
|
|
+ return AttributionLowSideRules.EVIDENCE_UNVERIFIED;
|
|
|
|
|
+ }
|
|
|
|
|
+ String code = evidenceCode.trim();
|
|
|
|
|
+ if (AttributionLowSideRules.EVIDENCE_PUB.equals(code)
|
|
|
|
|
+ || AttributionLowSideRules.EVIDENCE_KB.equals(code)
|
|
|
|
|
+ || AttributionLowSideRules.EVIDENCE_COM.equals(code)) {
|
|
|
|
|
+ return code;
|
|
|
|
|
+ }
|
|
|
|
|
+ return AttributionLowSideRules.EVIDENCE_UNVERIFIED;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * T11 G-3 证据码是否可进推荐依据:仅 {@code PUB}/{@code KB} 可进;
|
|
|
|
|
+ * {@code COM}(存在性记录)/「未核实」/未知编号 → {@code false}。
|
|
|
|
|
+ */
|
|
|
|
|
+ public boolean canEnterRecommendationBasis(String evidenceCode) {
|
|
|
|
|
+ String code = tagEvidence(evidenceCode);
|
|
|
|
|
+ return AttributionLowSideRules.EVIDENCE_PUB.equals(code)
|
|
|
|
|
+ || AttributionLowSideRules.EVIDENCE_KB.equals(code);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * T11 G-3 证据码是否仅作存在性记录:仅 {@code COM} 判定为存在性记录
|
|
|
|
|
+ * (只作存在性记录,绝不进推荐依据)。
|
|
|
|
|
+ */
|
|
|
|
|
+ public boolean isExistenceRecordOnly(String evidenceCode) {
|
|
|
|
|
+ return AttributionLowSideRules.EVIDENCE_COM.equals(tagEvidence(evidenceCode));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * T11 G-3 推荐依据证据码隔离:过滤仅保留 {@code PUB}/{@code KB}(保序),
|
|
|
|
|
+ * 剔除 {@code COM} 与「未核实」。
|
|
|
|
|
+ */
|
|
|
|
|
+ public List<String> isolateForRecommendation(List<String> evidenceCodes) {
|
|
|
|
|
+ List<String> out = new ArrayList<>();
|
|
|
|
|
+ if (evidenceCodes != null) {
|
|
|
|
|
+ for (String code : evidenceCodes) {
|
|
|
|
|
+ if (canEnterRecommendationBasis(code)) {
|
|
|
|
|
+ out.add(tagEvidence(code));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return out;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// ==================== 内部 ====================
|
|
// ==================== 内部 ====================
|
|
|
|
|
|
|
|
/** 非菌株级粒度下「菌名 + 菌株号」商品推荐拦截(T6 G-2) */
|
|
/** 非菌株级粒度下「菌名 + 菌株号」商品推荐拦截(T6 G-2) */
|