-- Task-scoped, reviewable data access requests for dynamic investigations. -- This migration is deliberately restricted to the verified tjwater_v2 BizDB. BEGIN; SET LOCAL lock_timeout = '5s'; DO $$ BEGIN IF current_database() <> 'tjwater_v2' THEN RAISE EXCEPTION 'Operational access-request migration is restricted to tjwater_v2'; END IF; END $$; CREATE TABLE IF NOT EXISTS workbench.operational_task_access_requests ( project_id uuid NOT NULL, task_id uuid NOT NULL, access_request_id uuid NOT NULL, node_id text NOT NULL CHECK (length(node_id) > 0), status text NOT NULL CHECK (status IN ('pending','approved','rejected')), version bigint NOT NULL CHECK (version >= 1), document jsonb NOT NULL, requested_at timestamptz NOT NULL, updated_at timestamptz NOT NULL, PRIMARY KEY (project_id,task_id,access_request_id), FOREIGN KEY (project_id,task_id) REFERENCES workbench.operational_tasks(project_id,task_id) ON DELETE CASCADE, CHECK ((document->>'access_request_id'=access_request_id::text AND document->>'status'=status AND (document->>'version')::bigint=version) IS TRUE) ); CREATE INDEX IF NOT EXISTS operational_task_access_pending_idx ON workbench.operational_task_access_requests(project_id,status,requested_at) WHERE status='pending'; COMMENT ON TABLE workbench.operational_task_access_requests IS '动态调查中的任务级数据访问申请;与动作审批分离,保存申请范围及人工审核结果。'; COMMENT ON COLUMN workbench.operational_task_access_requests.project_id IS '所属项目标识;当前仍要求一个项目独占一个 BizDB。'; COMMENT ON COLUMN workbench.operational_task_access_requests.task_id IS '所属工况任务标识。'; COMMENT ON COLUMN workbench.operational_task_access_requests.access_request_id IS '访问申请的稳定标识,同时用于计划审核节点引用。'; COMMENT ON COLUMN workbench.operational_task_access_requests.node_id IS '发起申请的执行计划节点标识。'; COMMENT ON COLUMN workbench.operational_task_access_requests.status IS '人工审核状态:pending、approved 或 rejected。'; COMMENT ON COLUMN workbench.operational_task_access_requests.version IS '用于乐观并发控制的申请修订号。'; COMMENT ON COLUMN workbench.operational_task_access_requests.document IS '经过接口模型校验的完整访问申请文档。'; COMMENT ON COLUMN workbench.operational_task_access_requests.requested_at IS 'Agent 发起访问申请的时间。'; COMMENT ON COLUMN workbench.operational_task_access_requests.updated_at IS '申请最近一次状态变更时间。'; COMMIT;