package com.gxwebsoft.ai.constants;

import java.util.*;

/**
 * 审计内容8 - 单位层面财务管理内部控制测试常量类
 */
public class AuditContent8InternalControlConstants {
    
    // 16个控制环节
    public static final String[] CONTROL_LINKS = {
        "有关部门或岗位财务管理职能划分",
        "财务管理岗位设置及职责划分",
        "财务管理岗位人员配备",
        "财务管理关键岗位人员轮岗",
        "财务管理事项授权审批（核）",
        "财务管理重大事项决定",
        "会计核算与文档管理",
        "财务电子信息管理",
        "重要财务管理事项的信息沟通",
        "财务管理风险评估",
        "财务管理风险应对",
        "内部审计与监督检查",
        "反舞弊",
        "财务管理内部控制评价",
        "财务管理内部控制缺陷跟踪与改进",
        "财务管理内部控制实施情况纳入考核体系"
    };
    
    // 控制要求
    public static final Map<String, String> CONTROL_REQUIREMENTS = new HashMap<>();
    static {
        CONTROL_REQUIREMENTS.put(CONTROL_LINKS[0], "财务管理决策、执行与监督职能相互分离");
        CONTROL_REQUIREMENTS.put(CONTROL_LINKS[1], "财务管理不相容职务相互分离并相互制约");
        CONTROL_REQUIREMENTS.put(CONTROL_LINKS[2], "财务管理岗位人员配备符合规定与岗位要求");
        CONTROL_REQUIREMENTS.put(CONTROL_LINKS[3], "关键岗位实行定期轮岗，不具备轮岗条件的实施其他替代措施");
        CONTROL_REQUIREMENTS.put(CONTROL_LINKS[4], "全部财务管理业务实施授权审批（核）");
        CONTROL_REQUIREMENTS.put(CONTROL_LINKS[5], "财务管理重大事项均由单位领导层集体研究决定");
        CONTROL_REQUIREMENTS.put(CONTROL_LINKS[6], "会计核算及其档案管理规范，会计信息准确");
        CONTROL_REQUIREMENTS.put(CONTROL_LINKS[7], "信息系统开发、运行和维护以及用户管理与数据备份规范，信息安全");
        CONTROL_REQUIREMENTS.put(CONTROL_LINKS[8], "对于重要财务管理事项均进行信息沟通");
        CONTROL_REQUIREMENTS.put(CONTROL_LINKS[9], "对于财务管理风险能够进行识别、评估与预防");
        CONTROL_REQUIREMENTS.put(CONTROL_LINKS[10], "对于出现的财务管理风险能够应对与控制");
        CONTROL_REQUIREMENTS.put(CONTROL_LINKS[11], "对于发生的财务管理业务进行定期与不定期的审计与监督检查");
        CONTROL_REQUIREMENTS.put(CONTROL_LINKS[12], "及时察觉与处置财务舞弊事件");
        CONTROL_REQUIREMENTS.put(CONTROL_LINKS[13], "对于财务管理内部控制实施评价，并取得成效");
        CONTROL_REQUIREMENTS.put(CONTROL_LINKS[14], "跟踪发现的财务管理内部控制缺陷，及时进行改进");
        CONTROL_REQUIREMENTS.put(CONTROL_LINKS[15], "在单位考核体系中包含财务管理内部控制实施情况内容");
    }
    
    // 控制活动描述
    public static final Map<String, String> CONTROL_ACTIVITIES = new HashMap<>();
    static {
        CONTROL_ACTIVITIES.put(CONTROL_LINKS[0], "按照决策、执行与监督职能相互分离的要求确定有关部门或岗位的财务管理职能，由财务管理部门提出意见，报经分管领导审核，经单位领导层集体审批后实施");
        CONTROL_ACTIVITIES.put(CONTROL_LINKS[1], "按照不相容职务相互分离的要求设置财务管理岗位，所有岗位具有明确的职责，由财务管理部门提出意见，报经分管领导审核，经单位领导层集体审批后实施");
        CONTROL_ACTIVITIES.put(CONTROL_LINKS[2], "按照有关规定与岗位要求配备财务管理人员，各岗位均有明确的任职要求，由财务管理部门提出意见，报经分管领导审核，经单位领导层集体审批后实施");
        CONTROL_ACTIVITIES.put(CONTROL_LINKS[3], "对于财务管理部门负责人与其他关键岗位人员按照规定进行轮岗、相关人员实行回避，不具备轮岗条件的实施其他替代措施，由财务管理部门提出意见，报经分管领导审核，经单位领导层集体审批后实施");
        CONTROL_ACTIVITIES.put(CONTROL_LINKS[4], "对于财务管理业务授权审批的范围、权限、程序与责任具有明确的规定，由财务管理部门提出意见，报经分管领导审核，经单位领导层集体审批后实施");
        CONTROL_ACTIVITIES.put(CONTROL_LINKS[5], "对于单位部门预算、大额资金使用、大宗设备采购或重大服务购买、基本建设等重大财务事项均有明确的决定或会签制度规定，由财务管理部门提出意见，报经分管领导审核，经单位领导层集体审批后实施");
        CONTROL_ACTIVITIES.put(CONTROL_LINKS[6], "对于会计凭证、会计账簿和会计报告处理程序以及会计档案管理具有明确的规定，由财务管理部门提出意见，报经分管领导审核，经单位领导层集体审批后实施");
        CONTROL_ACTIVITIES.put(CONTROL_LINKS[7], "对于财务管理信息系统的开发、运行和维护以及用户管理与系统数据备份，信息系统安全保密和泄密责任追究具有明确的规定，由财务管理部门提出意见，报经分管领导审核，经单位领导层集体审批后实施");
        CONTROL_ACTIVITIES.put(CONTROL_LINKS[8], "对于财务管理重要事项建立信息沟通制度，由财务管理部门提出意见，报经分管领导审核，经单位领导层集体审批后实施");
        CONTROL_ACTIVITIES.put(CONTROL_LINKS[9], "对于财务管理风险具有明确工作内容与要求的评估预防体系与工作机制，由财务管理部门提出意见，报经分管领导审核，经单位领导层集体审批后实施");
        CONTROL_ACTIVITIES.put(CONTROL_LINKS[10], "对于出现的财务管理风险具有应对机制与控制措施，由财务管理部门提出意见，报经分管领导审核，经单位领导层集体审批后实施");
        CONTROL_ACTIVITIES.put(CONTROL_LINKS[11], "设有独立的内审部门或审计岗位并有明确的职责要求，对内部审计与财务管理监督检查具有明确的规定，由审计管理部门提出意见，报经分管领导审核，经单位领导层集体审批后实施");
        CONTROL_ACTIVITIES.put(CONTROL_LINKS[12], "对于财务管理舞弊具有举报投诉制度和举报人保护制度以及全体员工被告知制度，对于举报投诉的财务管理舞弊事件与问题的处置具有明确的规定，由财务管理部门提出意见，报经分管领导审核，经单位领导层集体审批后实施");
        CONTROL_ACTIVITIES.put(CONTROL_LINKS[13], "设立或指定财务管理内部控制评价的职能部门与岗位，对于财务管理内部控制评价工作的计划、要求具有明确的规定，由财务管理内部控制评价部门提出意见，报经分管领导审核，经单位领导层集体审批后实施");
        CONTROL_ACTIVITIES.put(CONTROL_LINKS[14], "对于财务管理内部控制缺陷具有跟踪与改进制度，对于整改的实施与后续的检查具有明确的规定，由财务管理内部控制评价部门提出意见，报经分管领导审核，经单位领导层集体审批后实施");
        CONTROL_ACTIVITIES.put(CONTROL_LINKS[15], "对于财务管理内部控体系建设与执行在单位的考核制度中具有明确的考核规定，由财务管理内部控制评价部门提出意见，报经分管领导审核，经单位领导层集体审批后实施");
    }
    
    // 控制职责岗位
    public static final Map<String, String> CONTROL_POSITIONS = new HashMap<>();
    static {
        CONTROL_POSITIONS.put(CONTROL_LINKS[0], "财务管理部门负责人、分管领导");
        CONTROL_POSITIONS.put(CONTROL_LINKS[1], "财务管理部门负责人、分管领导");
        CONTROL_POSITIONS.put(CONTROL_LINKS[2], "财务管理部门负责人、分管领导");
        CONTROL_POSITIONS.put(CONTROL_LINKS[3], "财务管理部门负责人、分管领导");
        CONTROL_POSITIONS.put(CONTROL_LINKS[4], "财务管理部门负责人、分管领导");
        CONTROL_POSITIONS.put(CONTROL_LINKS[5], "财务管理部门负责人、分管领导");
        CONTROL_POSITIONS.put(CONTROL_LINKS[6], "财务管理部门负责人、分管领导");
        CONTROL_POSITIONS.put(CONTROL_LINKS[7], "财务管理部门负责人、分管领导");
        CONTROL_POSITIONS.put(CONTROL_LINKS[8], "财务管理部门负责人、分管领导");
        CONTROL_POSITIONS.put(CONTROL_LINKS[9], "财务管理部门负责人、分管领导");
        CONTROL_POSITIONS.put(CONTROL_LINKS[10], "财务管理部门负责人、分管领导");
        CONTROL_POSITIONS.put(CONTROL_LINKS[11], "审计管理部门负责人、分管领导");
        CONTROL_POSITIONS.put(CONTROL_LINKS[12], "财务管理部门负责人、分管领导");
        CONTROL_POSITIONS.put(CONTROL_LINKS[13], "财务管理内部控制评价部门负责人、分管领导");
        CONTROL_POSITIONS.put(CONTROL_LINKS[14], "财务管理内部控制评价部门负责人、分管领导");
        CONTROL_POSITIONS.put(CONTROL_LINKS[15], "财务管理内部控制评价部门负责人、分管领导");
    }
    
    // 测试步骤
    public static final Map<String, List<String>> TEST_STEPS = new HashMap<>();
    static {
        TEST_STEPS.put(CONTROL_LINKS[0], Arrays.asList(
            "（1）是否有制度规定",
            "（2）单位有关部门或岗位财务管理职能设置是否符合相互分离规定",
            "（3）通过观察、询问以及查阅有关工作文档等方式检查单位财务管理组织体系中的决策、执行与监督职能是否实现了分离"
        ));
        TEST_STEPS.put(CONTROL_LINKS[1], Arrays.asList(
            "（1）是否有制度规定",
            "（2）单位财务管理岗位设置与职责划分是否符合不相容岗位相互分离规定",
            "（3）通过观察、询问以及查阅有关工作文档等方式检查财务管理岗位不相容职务是否实现了分离"
        ));
        TEST_STEPS.put(CONTROL_LINKS[2], Arrays.asList(
            "（1）是否有制度规定",
            "（2）财务管理岗位配备的人员是否符合任职资质要求",
            "（3）重要财务管理岗位人员的专业背景、工作经验及有关执业资质是否能够胜任岗位工作需要"
        ));
        TEST_STEPS.put(CONTROL_LINKS[3], Arrays.asList(
            "（1）是否有制度规定",
            "（2）通过观察、询问以及查阅有关工作文档等方式检查财务管理关键岗位是否进行了轮岗或采取了其他替代措施"
        ));
        TEST_STEPS.put(CONTROL_LINKS[4], Arrays.asList(
            "（1）是否有制度规定",
            "（2）通过观察、询问以及查阅有关工作文档等方式检查单位财务管理业务流程中的各个审批（核）环节的操作是否符合授权审批（核）规定"
        ));
        TEST_STEPS.put(CONTROL_LINKS[5], Arrays.asList(
            "（1）是否有制度规定",
            "（2）通过观察、询问以及查阅有关工作文档等方式检查单位财务管理重大事项是否由领导层集体研究决定或会签，且研究决定或会签记录内容完整"
        ));
        TEST_STEPS.put(CONTROL_LINKS[6], Arrays.asList(
            "（1）是否有制度规定",
            "（2）通过观察、询问以及查阅有关工作文档等方式检查单位会计核算流程是否符合制度规定",
            "（3）通过观察、询问以及查阅有关工作文档等方式检查单位是否有专职岗位负责会计档案保管，且档案文件保管情况良好"
        ));
        TEST_STEPS.put(CONTROL_LINKS[7], Arrays.asList(
            "（1）是否有制度规定",
            "（2）通过观察、询问以及查阅有关工作文档等方式检查单位是否按规定进行了信息系统的开发、运行和维护以及用户管理与数据备份"
        ));
        TEST_STEPS.put(CONTROL_LINKS[8], Arrays.asList(
            "（1）是否有制度规定",
            "（2）通过观察、询问以及查阅有关工作文档等方式检查单位财务管理有关重要事项是否通过会议、内部报告或会签等方式进行信息沟通"
        ));
        TEST_STEPS.put(CONTROL_LINKS[9], Arrays.asList(
            "（1）是否有制度规定",
            "（2）通过观察、询问以及查阅有关工作文档等方式检查单位是否进行了财务管理风险的识别、评估与预防工作"
        ));
        TEST_STEPS.put(CONTROL_LINKS[10], Arrays.asList(
            "（1）是否有制度规定",
            "（2）通过观察、询问以及查阅有关工作文档等方式检查单位是否对出现的财务风险进行了应对，并采取了控制措施"
        ));
        TEST_STEPS.put(CONTROL_LINKS[11], Arrays.asList(
            "（1）是否有制度规定",
            "（2）是否设置了独立的审计部门或审计岗位",
            "（3）通过观察、询问以及查阅有关工作文档等方式检查单位内审部门是否定期或不定期对财务管理业务进行审计与监督检查",
            "（4）通过观察、询问以及查阅有关工作文档等方式检查单位内审部门能否及时发现财务管理中的问题，督促整改"
        ));
        TEST_STEPS.put(CONTROL_LINKS[12], Arrays.asList(
            "（1）是否有制度规定",
            "（2）通过观察、询问以及查阅有关工作文档等方式检查单位员工是否知晓财务管理舞弊的举报投诉制度和举报人保护制度",
            "（3）通过观察、询问以及查阅有关工作文档等方式检查单位对于举报投诉的财务管理舞弊事件与问题是否及时进行了处置"
        ));
        TEST_STEPS.put(CONTROL_LINKS[13], Arrays.asList(
            "（1）是否有制度规定",
            "（2）是否设立或指定有财务管理内部控制评价的职能部门与岗位",
            "（3）通过观察、询问以及查阅有关工作文档等方式检查单位是否有财务管理内部控制评价工作计划与工作要求",
            "（4）通过观察、询问以及查阅有关工作文档等方式检查单位是否按计划开展了财务管理内部控制评价工作，促进了单位财务管理内部控制体系的建立健全"
        ));
        TEST_STEPS.put(CONTROL_LINKS[14], Arrays.asList(
            "（1）是否有制度规定",
            "（2）通过观察、询问以及查阅有关工作文档等方式检查单位对于发现的内部控制缺陷是否及时通报与跟踪",
            "（3）通过观察、询问以及查阅有关工作文档等方式检查单位对于发现的缺陷是否及时进行了整改"
        ));
        TEST_STEPS.put(CONTROL_LINKS[15], Arrays.asList(
            "（1）是否有制度规定",
            "（2）通过观察、询问以及查阅有关工作文档等方式检查单位的考核制度中是否将财务管理内部控制实施情况列入了考核内容中",
            "（3）通过观察、询问以及查阅有关工作文档等方式检查单位在实际进行考核中对财务管理内部控制实施情况的考核内容"
        ));
    }
    
    // 关键词权重
    public static final Map<String, Integer> KEYWORD_WEIGHTS = new HashMap<>();
    static {
        KEYWORD_WEIGHTS.put("内部控制", 10);
        KEYWORD_WEIGHTS.put("财务管理", 9);
        KEYWORD_WEIGHTS.put("不相容职务分离", 9);
        KEYWORD_WEIGHTS.put("授权审批", 8);
        KEYWORD_WEIGHTS.put("集体决策", 8);
        KEYWORD_WEIGHTS.put("会计档案", 7);
        KEYWORD_WEIGHTS.put("信息系统", 7);
        KEYWORD_WEIGHTS.put("风险识别", 8);
        KEYWORD_WEIGHTS.put("风险评估", 8);
        KEYWORD_WEIGHTS.put("内部审计", 9);
        KEYWORD_WEIGHTS.put("反舞弊", 9);
        KEYWORD_WEIGHTS.put("内部控制评价", 8);
        KEYWORD_WEIGHTS.put("岗位轮岗", 7);
        KEYWORD_WEIGHTS.put("考核体系", 7);
    }
    
    private AuditContent8InternalControlConstants() {
        // 防止实例化
    }
}