优化工作底稿索引,调整格式为:["文件ID||文件名||下载地址"]

This commit is contained in:
2026-01-07 17:58:43 +08:00
parent 02bdd456f4
commit d2fe476b1a
21 changed files with 161 additions and 102 deletions

View File

@@ -192,7 +192,8 @@ public class AuditContent10PartyConductConstants {
obj.put("detailCategory", detailCategory); obj.put("detailCategory", detailCategory);
obj.put("content", content); obj.put("content", content);
obj.put("executionStatus", ""); obj.put("executionStatus", "");
obj.put("workPaperIndex", "[\"实际存在的完整文件名1\", \"实际存在的完整文件名2\", \"...\"]"); // obj.put("workPaperIndex", "[\"实际存在的完整文件名1\", \"实际存在的完整文件名2\", \"...\"]");
obj.put("workPaperIndex", "[\"实际存在的完整FileId1\", \"实际存在的完整FileId2\", \"...\"]");
FIXED_ORDER_EXAMPLE_DATA.add(obj); FIXED_ORDER_EXAMPLE_DATA.add(obj);
} }

View File

@@ -37,7 +37,7 @@ public class AuditContent1ExpenseConstants {
"- budgetRatio占年初预算比例%\n" + "- budgetRatio占年初预算比例%\n" +
"- remark备注信息\n" + "- remark备注信息\n" +
"- dataSource数据来源文件\n" + "- dataSource数据来源文件\n" +
"- workPaperIndex相关文件索引"; "- workPaperIndex[相关文件FileId]";
// 关键词权重 // 关键词权重
public static final Map<String, Integer> KEYWORD_WEIGHTS = new HashMap<>(); public static final Map<String, Integer> KEYWORD_WEIGHTS = new HashMap<>();

View File

@@ -32,7 +32,7 @@ public class AuditContent1LeaderListConstants {
"- tenurePeriod任职期间格式YYYY.MM-YYYY.MM\n" + "- tenurePeriod任职期间格式YYYY.MM-YYYY.MM\n" +
"- mainResponsibilities主要工作责任\n" + "- mainResponsibilities主要工作责任\n" +
"- remark备注信息\n" + "- remark备注信息\n" +
"- workPaperIndex相关文件索引"; "- workPaperIndex[相关文件FileId]";
// 关键词权重 // 关键词权重
public static final Map<String, Integer> KEYWORD_WEIGHTS = new HashMap<>(); public static final Map<String, Integer> KEYWORD_WEIGHTS = new HashMap<>();

View File

@@ -91,7 +91,7 @@ public class AuditContent4TargetConstants {
"7. selfCompletion: 自定完成情况\n" + "7. selfCompletion: 自定完成情况\n" +
"8. selfReason: 自定未完成原因\n" + "8. selfReason: 自定未完成原因\n" +
"9. remark: 备注\n" + "9. remark: 备注\n" +
"10. workPaperIndex: 工作底稿索引"; "10. workPaperIndex: [相关文件FileId]";
// 获取分类的简要审计框架概述 // 获取分类的简要审计框架概述
public static String getBriefAuditFrameworkForCategory(String category) { public static String getBriefAuditFrameworkForCategory(String category) {
@@ -113,7 +113,7 @@ public class AuditContent4TargetConstants {
FIELD_DISPLAY_NAMES.put("selfCompletion", "自定完成情况"); FIELD_DISPLAY_NAMES.put("selfCompletion", "自定完成情况");
FIELD_DISPLAY_NAMES.put("selfReason", "自定未完成原因"); FIELD_DISPLAY_NAMES.put("selfReason", "自定未完成原因");
FIELD_DISPLAY_NAMES.put("remark", "备注"); FIELD_DISPLAY_NAMES.put("remark", "备注");
FIELD_DISPLAY_NAMES.put("workPaperIndex", "工作底稿索引"); FIELD_DISPLAY_NAMES.put("workPaperIndex", "工作底稿索引FileId");
} }
// 审计证据要求 // 审计证据要求
@@ -139,7 +139,7 @@ public class AuditContent4TargetConstants {
" \"selfCompletion\": \"自定目标完成情况(已完成/部分完成/未完成)\",\n" + " \"selfCompletion\": \"自定目标完成情况(已完成/部分完成/未完成)\",\n" +
" \"selfReason\": \"自定目标未完成原因(如已完成,填'无未完成原因'\",\n" + " \"selfReason\": \"自定目标未完成原因(如已完成,填'无未完成原因'\",\n" +
" \"remark\": \"备注\",\n" + " \"remark\": \"备注\",\n" +
" \"workPaperIndex\": [\"实际存在的完整文件名1\", \"实际存在的完整文件名2\", ...]\n" + " \"workPaperIndex\": [\"实际存在的完整FileId1\", \"实际存在的完整FileId2\", ...]\n" +
" }\n" + " }\n" +
"]\n\n" + "]\n\n" +
"重要说明:\n" + "重要说明:\n" +

View File

@@ -176,7 +176,7 @@ public class AuditContent5BudgetExecutionConstants {
" \"additionalBudgetAmount\": \"追加预算数\",\n" + " \"additionalBudgetAmount\": \"追加预算数\",\n" +
" \"actualAppropriation\": \"实际拨款数\",\n" + " \"actualAppropriation\": \"实际拨款数\",\n" +
" \"indicatorBalance\": \"指标结余\",\n" + " \"indicatorBalance\": \"指标结余\",\n" +
" \"workPaperIndex\": [\"实际存在的完整文件名1\", \"实际存在的完整文件名2\", ...]\n" + " \"workPaperIndex\": [\"实际存在的完整FileId1\", \"实际存在的完整FileId2\", ...]\n" +
" }\n" + " }\n" +
"]\n\n" + "]\n\n" +
"**重要说明:**\n" + "**重要说明:**\n" +
@@ -215,7 +215,7 @@ public class AuditContent5BudgetExecutionConstants {
FIELD_DISPLAY_NAMES.put("additionalBudgetAmount", "追加预算数"); FIELD_DISPLAY_NAMES.put("additionalBudgetAmount", "追加预算数");
FIELD_DISPLAY_NAMES.put("actualAppropriation", "实际拨款数"); FIELD_DISPLAY_NAMES.put("actualAppropriation", "实际拨款数");
FIELD_DISPLAY_NAMES.put("indicatorBalance", "指标结余"); FIELD_DISPLAY_NAMES.put("indicatorBalance", "指标结余");
FIELD_DISPLAY_NAMES.put("workPaperIndex", "工作底稿索引"); FIELD_DISPLAY_NAMES.put("workPaperIndex", "工作底稿索引FileId");
} }
// 获取分类的简要审计框架概述 // 获取分类的简要审计框架概述

View File

@@ -186,7 +186,7 @@ public class AuditContent5BudgetManageConstants {
" \"governmentProcurement\": \"政府采购\",\n" + " \"governmentProcurement\": \"政府采购\",\n" +
" \"payableToUnit\": \"应拨单位款\",\n" + " \"payableToUnit\": \"应拨单位款\",\n" +
" \"other\": \"其他(可简要说明审计发现)\",\n" + " \"other\": \"其他(可简要说明审计发现)\",\n" +
" \"workPaperIndex\": [\"实际存在的完整文件名1\", \"实际存在的完整文件名2\", ...]\n" + " \"workPaperIndex\": [\"实际存在的完整FileId1\", \"实际存在的完整FileId2\", ...]\n" +
" }\n" + " }\n" +
"]\n\n" + "]\n\n" +
"**重要说明:**\n" + "**重要说明:**\n" +
@@ -235,7 +235,7 @@ public class AuditContent5BudgetManageConstants {
FIELD_DISPLAY_NAMES.put("governmentProcurement", "政府采购"); FIELD_DISPLAY_NAMES.put("governmentProcurement", "政府采购");
FIELD_DISPLAY_NAMES.put("payableToUnit", "应拨单位款"); FIELD_DISPLAY_NAMES.put("payableToUnit", "应拨单位款");
FIELD_DISPLAY_NAMES.put("other", "其他(审计发现)"); FIELD_DISPLAY_NAMES.put("other", "其他(审计发现)");
FIELD_DISPLAY_NAMES.put("workPaperIndex", "工作底稿索引"); FIELD_DISPLAY_NAMES.put("workPaperIndex", "工作底稿索引FileId");
} }
// 获取分类的简要审计框架概述 // 获取分类的简要审计框架概述

View File

@@ -103,7 +103,7 @@ public class AuditContent6StateAssetsConstants {
" \"approvalDoc\": \"国有资产出租的审批文件(如未出租填'未出租'\",\n" + " \"approvalDoc\": \"国有资产出租的审批文件(如未出租填'未出租'\",\n" +
" \"inBudget\": \"是否纳入预算(是/否)\",\n" + " \"inBudget\": \"是否纳入预算(是/否)\",\n" +
" \"remark\": \"备注(包含资产状态、使用情况、审计发现等)\",\n" + " \"remark\": \"备注(包含资产状态、使用情况、审计发现等)\",\n" +
" \"workPaperIndex\": [\"实际存在的完整文件名1\", \"实际存在的完整文件名2\", ...]\n" + " \"workPaperIndex\": [\"实际存在的完整FileId1\", \"实际存在的完整FileId2\", ...]\n" +
" }\n" + " }\n" +
"]\n\n" + "]\n\n" +
"重要说明:\n" + "重要说明:\n" +
@@ -141,7 +141,7 @@ public class AuditContent6StateAssetsConstants {
FIELD_DISPLAY_NAMES.put("approvalDoc", "国有资产出租的审批文件"); FIELD_DISPLAY_NAMES.put("approvalDoc", "国有资产出租的审批文件");
FIELD_DISPLAY_NAMES.put("inBudget", "是否纳入预算"); FIELD_DISPLAY_NAMES.put("inBudget", "是否纳入预算");
FIELD_DISPLAY_NAMES.put("remark", "备注"); FIELD_DISPLAY_NAMES.put("remark", "备注");
FIELD_DISPLAY_NAMES.put("workPaperIndex", "工作底稿索引"); FIELD_DISPLAY_NAMES.put("workPaperIndex", "工作底稿索引FileId");
} }
// 获取分类的简要审计框架概述 // 获取分类的简要审计框架概述

View File

@@ -1,5 +1,6 @@
package com.gxwebsoft.ai.controller; package com.gxwebsoft.ai.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.gxwebsoft.ai.dto.AuditContentRequest; import com.gxwebsoft.ai.dto.AuditContentRequest;
@@ -88,6 +89,8 @@ public abstract class BaseAuditContentController extends BaseController {
JSONObject result = generateFunction.apply(params); JSONObject result = generateFunction.apply(params);
if(result.getBoolean("success")) { if(result.getBoolean("success")) {
// 转换workPaperIndex原数据["FileId1", "FileId2"],转换后:["文件名1" + "||" + "下载地址1", "文件名2" + "||" + "下载地址2"]
convertWorkPaperFileInfo(result);
// 保存到历史记录 // 保存到历史记录
saveToHistory(request, interfaceName, requestHash, result, loginUser); saveToHistory(request, interfaceName, requestHash, result, loginUser);
} }
@@ -101,6 +104,40 @@ public abstract class BaseAuditContentController extends BaseController {
} }
} }
private void convertWorkPaperFileInfo(JSONObject result) {
JSONArray data = result.getJSONArray("data");
for (int i = 0; i < data.size(); i++) {
JSONObject obj = data.getJSONObject(i);
JSONArray workPaperIndexFileIds = obj.getJSONArray("workPaperIndex");
if (workPaperIndexFileIds == null || workPaperIndexFileIds.isEmpty()) {
continue;
}
// 先查询所有文件
List<AiCloudFile> aiCloudFiles = aiCloudFileService.list(new LambdaQueryWrapper<AiCloudFile>().in(AiCloudFile::getFileId, workPaperIndexFileIds));
// 创建文件ID到文件的映射便于查找
Map<String, AiCloudFile> fileMap = aiCloudFiles.stream().collect(Collectors.toMap(AiCloudFile::getFileId, file -> file));
// 创建转换后的数组(保持原顺序)
JSONArray transformedArray = new JSONArray();
for (Object fileIdObj : workPaperIndexFileIds) {
String fileId = (String) fileIdObj;
AiCloudFile file = fileMap.get(fileId);
if (file != null) {
String transformed = file.getFileId() + "||" + file.getFileName() + "||" + file.getFileUrl();
transformedArray.add(transformed);
}else {
transformedArray.add(fileIdObj);
}
}
// 将转换后的数据塞回原字段
obj.put("workPaperIndex", transformedArray);
}
}
/** /**
* 生成请求哈希 * 生成请求哈希
*/ */

View File

@@ -151,7 +151,9 @@ public abstract class AbstractAuditContentService {
} }
String docName = extractDocumentName(node); String docName = extractDocumentName(node);
String formattedText = String.format("《%s》%s", docName, text); String docId = extractDocumentId(node);
// String formattedText = String.format("《%s》%s", docName, text);
String formattedText = String.format("【FileId:%s】《%s》%s", docId, docName, text);
results.add(formattedText); results.add(formattedText);
} catch (Exception e) { } catch (Exception e) {
@@ -178,6 +180,25 @@ public abstract class AbstractAuditContentService {
return "相关文档"; return "相关文档";
} }
/**
* 提取文档Id通用方法
*/
protected String extractDocumentId(RetrieveResponseBodyDataNodes node) {
try {
Object metadataObj = node.getMetadata();
if (metadataObj instanceof Map) {
Map<?, ?> metadata = (Map<?, ?>) metadataObj;
Object docIdObj = metadata.get("doc_id");
if (docIdObj != null) {
return docIdObj.toString();
}
}
} catch (Exception e) {
log.debug("提取文档名称失败", e);
}
return "相关文档";
}
/** /**
* 构建成功响应通用方法 * 构建成功响应通用方法
*/ */

View File

@@ -248,7 +248,7 @@ public class AuditContent1EightRegServiceImpl extends AbstractAuditContentServic
context.append("- content审计内容具体中共中央八项规定/具体中央八项规定实施细则)\n"); context.append("- content审计内容具体中共中央八项规定/具体中央八项规定实施细则)\n");
context.append("- testContent审计检查的证据需详细描述查阅过程、查阅的具体文件和内容\n"); context.append("- testContent审计检查的证据需详细描述查阅过程、查阅的具体文件和内容\n");
context.append("- result审计测试的结果通过/不通过),严格判断,从严掌握通过标准\n"); context.append("- result审计测试的结果通过/不通过),严格判断,从严掌握通过标准\n");
context.append("- workPaperIndex相关《参考文件》,必须是实际存在的完整文件,不能使用附表标题,确保能在文件夹中搜索到\n"); context.append("- workPaperIndex相关《参考文件FileId》,必须是实际存在的完整文件FileId,不能使用附表标题,确保能在文件夹中搜索到\n");
context.append("\n注意\n"); context.append("\n注意\n");
context.append("1. 请根据知识库内容尽可能全面地生成所有相关制度规定和检查点\n"); context.append("1. 请根据知识库内容尽可能全面地生成所有相关制度规定和检查点\n");
context.append("2. 工作底稿索引必须准确对应实际文件名称,避免使用附表或章节标题\n"); context.append("2. 工作底稿索引必须准确对应实际文件名称,避免使用附表或章节标题\n");

View File

@@ -73,9 +73,9 @@ public class AuditContent1ExpenseServiceImpl extends AbstractAuditContentService
} }
// 确保数据完整性至少16条记录 // 确保数据完整性至少16条记录
if (enhancedData.size() < 16) { // if (enhancedData.size() < 16) {
enhancedData = supplementMissingExpenseData(enhancedData); // enhancedData = supplementMissingExpenseData(enhancedData);
} // }
log.info("数据增强完成 - 原始记录数: {}, 增强后记录数: {}", originalData.size(), enhancedData.size()); log.info("数据增强完成 - 原始记录数: {}, 增强后记录数: {}", originalData.size(), enhancedData.size());
return enhancedData; return enhancedData;
@@ -116,73 +116,73 @@ public class AuditContent1ExpenseServiceImpl extends AbstractAuditContentService
} }
// 确保工作底稿索引是数组格式 // 确保工作底稿索引是数组格式
if (!expenseData.containsKey("workPaperIndex") || expenseData.get("workPaperIndex") == null) { // if (!expenseData.containsKey("workPaperIndex") || expenseData.get("workPaperIndex") == null) {
JSONArray workPaperIndex = new JSONArray(); // JSONArray workPaperIndex = new JSONArray();
workPaperIndex.add("" + expenseData.getString("year") + "年度部门决算报表》"); // workPaperIndex.add("《" + expenseData.getString("year") + "年度部门决算报表》");
workPaperIndex.add("" + expenseData.getString("year") + "年预算执行情况分析》"); // workPaperIndex.add("《" + expenseData.getString("year") + "年预算执行情况分析》");
expenseData.put("workPaperIndex", workPaperIndex); // expenseData.put("workPaperIndex", workPaperIndex);
} // }
} }
/** /**
* 补充缺失的支出数据 * 补充缺失的支出数据
*/ */
private JSONArray supplementMissingExpenseData(JSONArray existingData) { // private JSONArray supplementMissingExpenseData(JSONArray existingData) {
JSONArray supplementedData = new JSONArray(); // JSONArray supplementedData = new JSONArray();
supplementedData.addAll(existingData); // supplementedData.addAll(existingData);
//
// 获取已存在的数据组合 // // 获取已存在的数据组合
Set<String> existingCombinations = new HashSet<>(); // Set<String> existingCombinations = new HashSet<>();
for (int i = 0; i < existingData.size(); i++) { // for (int i = 0; i < existingData.size(); i++) {
JSONObject item = existingData.getJSONObject(i); // JSONObject item = existingData.getJSONObject(i);
String key = item.getString("expenseType") + "_" + item.getString("year"); // String key = item.getString("expenseType") + "_" + item.getString("year");
existingCombinations.add(key); // existingCombinations.add(key);
} // }
//
// 补充缺失的数据 // // 补充缺失的数据
String[] expenseTypes = { // String[] expenseTypes = {
AuditContent1ExpenseConstants.EXPENSE_TYPE_RECEPTION, // AuditContent1ExpenseConstants.EXPENSE_TYPE_RECEPTION,
AuditContent1ExpenseConstants.EXPENSE_TYPE_OVERSEAS, // AuditContent1ExpenseConstants.EXPENSE_TYPE_OVERSEAS,
AuditContent1ExpenseConstants.EXPENSE_TYPE_VEHICLE, // AuditContent1ExpenseConstants.EXPENSE_TYPE_VEHICLE,
AuditContent1ExpenseConstants.EXPENSE_TYPE_MEETING // AuditContent1ExpenseConstants.EXPENSE_TYPE_MEETING
}; // };
//
String[] years = {"2020", "2021", "2022", "2023"}; // String[] years = {"2020", "2021", "2022", "2023"};
//
for (String expenseType : expenseTypes) { // for (String expenseType : expenseTypes) {
for (String year : years) { // for (String year : years) {
String key = expenseType + "_" + year; // String key = expenseType + "_" + year;
if (!existingCombinations.contains(key)) { // if (!existingCombinations.contains(key)) {
JSONObject newItem = createDefaultExpenseRecord(expenseType, year); // JSONObject newItem = createDefaultExpenseRecord(expenseType, year);
supplementedData.add(newItem); // supplementedData.add(newItem);
} // }
} // }
} // }
//
return supplementedData; // return supplementedData;
} // }
/** /**
* 创建默认的支出记录 * 创建默认的支出记录
*/ */
private JSONObject createDefaultExpenseRecord(String expenseType, String year) { // private JSONObject createDefaultExpenseRecord(String expenseType, String year) {
JSONObject record = new JSONObject(); // JSONObject record = new JSONObject();
record.put("expenseType", expenseType); // record.put("expenseType", expenseType);
record.put("year", year); // record.put("year", year);
record.put("finalStatementAmount", "0.00"); // record.put("finalStatementAmount", "0.00");
record.put("initialBudgetAmount", "0.00"); // record.put("initialBudgetAmount", "0.00");
record.put("changePercentage", "0.0%"); // record.put("changePercentage", "0.0%");
record.put("budgetRatio", "0.0%"); // record.put("budgetRatio", "0.0%");
record.put("remark", "根据年度财务报告数据生成"); // record.put("remark", "根据年度财务报告数据生成");
record.put("dataSource", year + "年度部门决算报表"); // record.put("dataSource", year + "年度部门决算报表");
//
JSONArray workPaperIndex = new JSONArray(); // JSONArray workPaperIndex = new JSONArray();
workPaperIndex.add("" + year + "年度部门决算报表》"); // workPaperIndex.add("《" + year + "年度部门决算报表》");
workPaperIndex.add("" + year + "年预算执行情况分析》"); // workPaperIndex.add("《" + year + "年预算执行情况分析》");
record.put("workPaperIndex", workPaperIndex); // record.put("workPaperIndex", workPaperIndex);
//
return record; // return record;
} // }
/** /**
* 计算缺失的百分比字段 * 计算缺失的百分比字段

View File

@@ -119,11 +119,11 @@ public class AuditContent1LeaderListServiceImpl extends AbstractAuditContentServ
} }
// 确保工作底稿索引是数组格式 // 确保工作底稿索引是数组格式
if (!leaderData.containsKey("workPaperIndex") || leaderData.get("workPaperIndex") == null) { // if (!leaderData.containsKey("workPaperIndex") || leaderData.get("workPaperIndex") == null) {
JSONArray workPaperIndex = new JSONArray(); // JSONArray workPaperIndex = new JSONArray();
workPaperIndex.add("《千汇发20256号千汇公司关于领导班子成员工作分工的通知》"); // workPaperIndex.add("《千汇发20256号千汇公司关于领导班子成员工作分工的通知》");
leaderData.put("workPaperIndex", workPaperIndex); // leaderData.put("workPaperIndex", workPaperIndex);
} // }
} }
/** /**

View File

@@ -217,7 +217,7 @@ public class AuditContent2StrategyServiceImpl extends AbstractAuditContentServic
context.append("1. auditContent: 具体审计内容(基于框架,结合企业实际)\n"); context.append("1. auditContent: 具体审计内容(基于框架,结合企业实际)\n");
context.append("2. checkEvidence: 检查证据(引用企业具体文件)\n"); context.append("2. checkEvidence: 检查证据(引用企业具体文件)\n");
context.append("3. testResult: 测试结果(通过/不通过)(基于充分证据严格判断)\n"); context.append("3. testResult: 测试结果(通过/不通过)(基于充分证据严格判断)\n");
context.append("4. workPaperIndex: 工作底稿索引(具体文件\n\n"); context.append("4. workPaperIndex: 工作底稿索引(具体文件FileId\n\n");
// 6. 法规和案例参考 // 6. 法规和案例参考
if (!knowledgeSources.get("regulation").isEmpty()) { if (!knowledgeSources.get("regulation").isEmpty()) {

View File

@@ -194,7 +194,7 @@ public class AuditContent3TripleServiceImpl extends AbstractAuditContentService
context.append("- companyFormulation公司层面的三重一大相关制度规定及执行情况需包含详细分析过程和查阅依据\n"); context.append("- companyFormulation公司层面的三重一大相关制度规定及执行情况需包含详细分析过程和查阅依据\n");
context.append("- checkEvidence审计检查的证据需详细描述查阅过程、查阅的具体文件和内容\n"); context.append("- checkEvidence审计检查的证据需详细描述查阅过程、查阅的具体文件和内容\n");
context.append("- testResult审计测试的结果通过/不通过),严格判断,从严掌握通过标准\n"); context.append("- testResult审计测试的结果通过/不通过),严格判断,从严掌握通过标准\n");
context.append("- workPaperIndex相关《参考文件名》必须是实际存在的完整文件,不能使用附表标题,确保能在文件夹中搜索到\n"); context.append("- workPaperIndex相关《参考文件名FileId》,必须是实际存在的完整文件FileId,不能使用附表标题,确保能在文件夹中搜索到\n");
context.append("\n注意\n"); context.append("\n注意\n");
context.append("1. 请根据知识库内容尽可能全面地生成所有相关制度规定和检查点\n"); context.append("1. 请根据知识库内容尽可能全面地生成所有相关制度规定和检查点\n");
context.append("2. 公司执行情况分析需包含:查阅了哪些文件、发现了什么内容、与制度的差异点、分析判断过程\n"); context.append("2. 公司执行情况分析需包含:查阅了哪些文件、发现了什么内容、与制度的差异点、分析判断过程\n");

View File

@@ -177,7 +177,7 @@ public class AuditContent4TargetServiceImpl extends AbstractAuditContentService
// 9. 特别提醒(新增关键优化点) // 9. 特别提醒(新增关键优化点)
context.append("## 特别提醒\n"); context.append("## 特别提醒\n");
context.append("1. 审计证据必须包含具体的查阅过程:查阅了哪些文件、文件中发现了什么内容\n"); context.append("1. 审计证据必须包含具体的查阅过程:查阅了哪些文件、文件中发现了什么内容\n");
context.append("2. workPaperIndex必须填写实际存在的完整文件,确保能在文件夹中搜索到\n"); context.append("2. workPaperIndex必须填写实际存在的完整文件FileId,确保能在文件夹中搜索到\n");
context.append("3. 完成情况判定必须基于充分证据:只有证据充分且完全符合要求才能判定为已完成\n"); context.append("3. 完成情况判定必须基于充分证据:只有证据充分且完全符合要求才能判定为已完成\n");
context.append("4. 对于执行不到位、效果不佳、证据不充分的情况必须在备注中说明\n"); context.append("4. 对于执行不到位、效果不佳、证据不充分的情况必须在备注中说明\n");
context.append("5. 尽可能识别知识库中所有相关年度,生成对应的审计记录\n"); context.append("5. 尽可能识别知识库中所有相关年度,生成对应的审计记录\n");
@@ -315,13 +315,13 @@ public class AuditContent4TargetServiceImpl extends AbstractAuditContentService
} }
// 确保工作底稿索引是数组格式 // 确保工作底稿索引是数组格式
if (!item.containsKey("workPaperIndex") || !(item.get("workPaperIndex") instanceof JSONArray)) { // if (!item.containsKey("workPaperIndex") || !(item.get("workPaperIndex") instanceof JSONArray)) {
JSONArray workPaperIndex = new JSONArray(); // JSONArray workPaperIndex = new JSONArray();
String year = item.getString("year"); // String year = item.getString("year");
workPaperIndex.add(year + "年度目标责任书"); // workPaperIndex.add(year + "年度目标责任书");
workPaperIndex.add(year + "年度工作总结报告"); // workPaperIndex.add(year + "年度工作总结报告");
item.put("workPaperIndex", workPaperIndex); // item.put("workPaperIndex", workPaperIndex);
} // }
processedData.add(item); processedData.add(item);
} }

View File

@@ -237,7 +237,7 @@ public class AuditContent5BudgetExecutionServiceImpl extends AbstractAuditConten
context.append("1. 必须全面分析预算执行全过程,包括执行进度、执行效果、执行合规性\n"); context.append("1. 必须全面分析预算执行全过程,包括执行进度、执行效果、执行合规性\n");
context.append("2. 重点关注预算执行率、资金到位率、预算执行偏差等关键指标\n"); context.append("2. 重点关注预算执行率、资金到位率、预算执行偏差等关键指标\n");
context.append("3. 金额字段应填写具体数值,如\"1,000,000.00\",不能填写简单的\"\"\"\"\n"); context.append("3. 金额字段应填写具体数值,如\"1,000,000.00\",不能填写简单的\"\"\"\"\n");
context.append("4. workPaperIndex必须填写实际存在的完整文件\n"); context.append("4. workPaperIndex必须填写实际存在的完整文件FileId\n");
context.append("5. 对于无数据的字段,可填写\"-\"或留空,但不能填写\"\"\n"); context.append("5. 对于无数据的字段,可填写\"-\"或留空,但不能填写\"\"\n");
context.append("6. 基于预算执行全流程进行审计分析,包括月度、季度、年度执行情况\n"); context.append("6. 基于预算执行全流程进行审计分析,包括月度、季度、年度执行情况\n");
context.append("7. 重点关注预算执行偏差原因分析和整改措施\n"); context.append("7. 重点关注预算执行偏差原因分析和整改措施\n");

View File

@@ -237,7 +237,7 @@ public class AuditContent5BudgetManageServiceImpl extends AbstractAuditContentSe
context.append("1. 必须全面识别知识库中所有预算科目,包括:基本支出、项目支出、人员经费、公用经费等\n"); context.append("1. 必须全面识别知识库中所有预算科目,包括:基本支出、项目支出、人员经费、公用经费等\n");
context.append("2. 每个独立的预算科目都要生成独立的审计记录,不限制数量,尽可能多地生成\n"); context.append("2. 每个独立的预算科目都要生成独立的审计记录,不限制数量,尽可能多地生成\n");
context.append("3. 金额字段应填写具体数值,如\"1,000,000.00\",不能填写简单的\"\"\"\"\n"); context.append("3. 金额字段应填写具体数值,如\"1,000,000.00\",不能填写简单的\"\"\"\"\n");
context.append("4. workPaperIndex必须填写实际存在的完整文件\n"); context.append("4. workPaperIndex必须填写实际存在的完整文件FileId\n");
context.append("5. 对于无数据的字段,可填写\"-\"或留空,但不能填写\"\"\n"); context.append("5. 对于无数据的字段,可填写\"-\"或留空,但不能填写\"\"\n");
context.append("6. 基于预算编制、调整、执行的全流程进行审计分析\n"); context.append("6. 基于预算编制、调整、执行的全流程进行审计分析\n");
context.append("7. 重点关注预算调整的合规性和预算执行的真实性\n\n"); context.append("7. 重点关注预算调整的合规性和预算执行的真实性\n\n");

View File

@@ -192,7 +192,7 @@ public class AuditContent6StateAssetsServiceImpl extends AbstractAuditContentSer
context.append("1. 必须全面识别知识库中所有国有资产,包括:房屋、土地、车辆、机械设备、办公设备、电子设备、家具、无形资产等\n"); context.append("1. 必须全面识别知识库中所有国有资产,包括:房屋、土地、车辆、机械设备、办公设备、电子设备、家具、无形资产等\n");
context.append("2. 每个独立的资产都要生成独立的审计记录,不限制数量,尽可能多地生成\n"); context.append("2. 每个独立的资产都要生成独立的审计记录,不限制数量,尽可能多地生成\n");
context.append("3. 即使资产信息不完整,也要基于现有信息生成审计记录\n"); context.append("3. 即使资产信息不完整,也要基于现有信息生成审计记录\n");
context.append("4. workPaperIndex必须填写实际存在的完整文件\n"); context.append("4. workPaperIndex必须填写实际存在的完整文件FileId\n");
context.append("5. 对于未出租资产,承租方、合同金额等字段填写\"未出租\"\n"); context.append("5. 对于未出租资产,承租方、合同金额等字段填写\"未出租\"\n");
context.append("6. 备注中应详细说明资产状况、使用情况、合规性评价\n"); context.append("6. 备注中应详细说明资产状况、使用情况、合规性评价\n");
context.append("7. 不能填写简单的\"\",要提供有意义的描述\n\n"); context.append("7. 不能填写简单的\"\",要提供有意义的描述\n\n");
@@ -320,12 +320,12 @@ public class AuditContent6StateAssetsServiceImpl extends AbstractAuditContentSer
} }
// 确保工作底稿索引是数组格式 // 确保工作底稿索引是数组格式
if (!item.containsKey("workPaperIndex") || !(item.get("workPaperIndex") instanceof JSONArray)) { // if (!item.containsKey("workPaperIndex") || !(item.get("workPaperIndex") instanceof JSONArray)) {
JSONArray workPaperIndex = new JSONArray(); // JSONArray workPaperIndex = new JSONArray();
String assetName = item.getString("assetName"); // String assetName = item.getString("assetName");
workPaperIndex.add(assetName + "资产登记台账"); // workPaperIndex.add(assetName + "资产登记台账");
item.put("workPaperIndex", workPaperIndex); // item.put("workPaperIndex", workPaperIndex);
} // }
processedData.add(item); processedData.add(item);
} }

View File

@@ -227,7 +227,7 @@ public class AuditContent7InvestmentServiceImpl extends AbstractAuditContentServ
context.append(" • 通过:证据充分且完全符合要求\n"); context.append(" • 通过:证据充分且完全符合要求\n");
context.append(" • 不通过:制度不一致、执行不到位、证据不充分\n"); context.append(" • 不通过:制度不一致、执行不到位、证据不充分\n");
context.append(" • 待检查:无法确定,需要进一步检查\n"); context.append(" • 待检查:无法确定,需要进一步检查\n");
context.append("- **workPaperIndex**:相关《工作底稿索引》,必须是实际存在的完整文件,确保能在文件夹中搜索到\n"); context.append("- **workPaperIndex**:相关《工作底稿索引FileId》,必须是实际存在的完整文件FileId,确保能在文件夹中搜索到\n");
context.append("- **fileIndex**:相关《文件索引》,关联的支持文件\n\n"); context.append("- **fileIndex**:相关《文件索引》,关联的支持文件\n\n");
// 5. 审计内容模板(提供参考) // 5. 审计内容模板(提供参考)

View File

@@ -233,7 +233,7 @@ public class AuditContent8InternalControlServiceImpl extends AbstractAuditConten
context.append("- testSteps测试步骤**只包含当前步骤内容**,如\"1是否有制度规定\"\n"); context.append("- testSteps测试步骤**只包含当前步骤内容**,如\"1是否有制度规定\"\n");
context.append("- checkEvidence检查证据针对当前测试步骤的详细检查证据\n"); context.append("- checkEvidence检查证据针对当前测试步骤的详细检查证据\n");
context.append("- testResult测试结果基于当前测试步骤的检查证据严格判断只有证据充分且完全符合要求才能判定为\"通过\",否则必须判定为\"不通过\"\n"); context.append("- testResult测试结果基于当前测试步骤的检查证据严格判断只有证据充分且完全符合要求才能判定为\"通过\",否则必须判定为\"不通过\"\n");
context.append("- workPaperIndex工作底稿索引实际存在的完整文件,确保能在文件夹中搜索到\n\n"); context.append("- workPaperIndex工作底稿索引FileId):实际存在的完整文件FileId,确保能在文件夹中搜索到\n\n");
context.append("**生成规则:**\n"); context.append("**生成规则:**\n");
context.append("1. **每个测试步骤单独生成一条完整记录**\n"); context.append("1. **每个测试步骤单独生成一条完整记录**\n");

View File

@@ -259,7 +259,7 @@ public class AuditContent9PersonnelServiceImpl extends AbstractAuditContentServi
context.append("- auditTarget固定为'").append(subContent.getAuditTarget()).append("'\n"); context.append("- auditTarget固定为'").append(subContent.getAuditTarget()).append("'\n");
context.append("- auditEvidence固定为'").append(subContent.getAuditEvidence()).append("'\n"); context.append("- auditEvidence固定为'").append(subContent.getAuditEvidence()).append("'\n");
context.append("- generationResult审计发现和结论\n"); context.append("- generationResult审计发现和结论\n");
context.append("- workPaperIndex工作底稿索引具体的文件数组\n\n"); context.append("- workPaperIndex工作底稿索引具体的文件FileId数组\n\n");
context.append("## generationResult格式\n"); context.append("## generationResult格式\n");
context.append("标题:在审计期间,[具体单位名称]存在[具体问题]\n\n"); context.append("标题:在审计期间,[具体单位名称]存在[具体问题]\n\n");