package jnpf.audit; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.Set; /** * 审计事件常量:event_type 受控枚举 + action_code SDK 内置常量。 */ public final class AuditConsts { /** event_type 受控枚举(spec v2.2 枚举分层治理:新增须经 audit 模块评审) */ public static final String TYPE_DATA_CHANGE = "DATA_CHANGE"; public static final String TYPE_BIZ_ACTION = "BIZ_ACTION"; public static final String TYPE_E_SIGNATURE = "E_SIGNATURE"; // JDK 8 兼容写法(仓库有效 maven.compiler.source=1.8,禁用 Set.of 等 Java 9+ API) public static final Set VALID_TYPES = Collections.unmodifiableSet( new HashSet<>(Arrays.asList(TYPE_DATA_CHANGE, TYPE_BIZ_ACTION, TYPE_E_SIGNATURE))); /** * action_code SDK 内置常量:**只内置最基础的三种数据动作**(开放命名空间,业务仍可自定义大写蛇形)。 * *

业务动作变体(禁用/启用/审批/驳回/归档/发布…)一律不再新增常量——它们本质都是 * 这三种之一,按业务语义枚举下去永远加不完。正确做法是用最接近的基础动作打底, * 把"具体是哪一种"交给细化字段承载: *

     *   禁用用户 → actionCode = UPDATE
     *              actionLabel = "禁用用户"                (人读语义)
     *              fieldDiffs  = enabled_mark: 1 → 0       (字段级 before-after,机器可判)
     *              reason / extra                          (需要原因或额外结构化信息时)
     * 
* 这样既能按 UPDATE 统一筛选统计,又比多一个枚举值携带更多信息。 */ public static final String ACT_CREATE = "CREATE"; public static final String ACT_READ = "READ"; public static final String ACT_UPDATE = "UPDATE"; public static final String ACT_DELETE = "DELETE"; /** 复核(在线表单「复核」按钮,由 lims_sign.meta_data.is_review_button 判定)。 */ public static final String ACT_REVIEW = "REVIEW"; /** * 例外:CORRECTION 不是业务动作,而是审计域自身的元操作——更正一条已写错的审计记录 * (append-only 下靠追加新事件实现,契约 {@code extra.correctsEventId} = 被更正事件 id,spec §4.3)。 * 它必须能与"业务数据被修改"区分开,降级成 UPDATE 会丢掉这个区分,故保留。 */ public static final String ACT_CORRECTION = "CORRECTION"; private AuditConsts() {} }