44 lines
2.0 KiB
Python
44 lines
2.0 KiB
Python
from __future__ import annotations
|
||
|
||
from review_agent.models import ApplicationFormFillBatch, ExportedSummaryFile
|
||
|
||
|
||
def build_assistant_summary(batch: ApplicationFormFillBatch, exports: list[ExportedSummaryFile]) -> str:
|
||
word_exports = [export for export in exports if export.export_type == ExportedSummaryFile.ExportType.WORD]
|
||
trace_exports = [
|
||
export
|
||
for export in exports
|
||
if export.export_type in {ExportedSummaryFile.ExportType.EXCEL, ExportedSummaryFile.ExportType.JSON}
|
||
]
|
||
lines = ["已生成申报模板自动填表文件。", "", "| 文件 | Word | PDF |", "| --- | --- | --- |"]
|
||
if word_exports:
|
||
for export in word_exports:
|
||
lines.append(f"| {export.file_name} | [下载](/api/review-agent/file-summary/exports/{export.pk}/download/) | 待增强 |")
|
||
else:
|
||
lines.append("| 自动填表结果 | 未生成 | 待增强 |")
|
||
|
||
conflicts = batch.conflict_summary or []
|
||
if conflicts:
|
||
lines.extend(["", "| 冲突字段 | 采用值 | 冲突来源 | 处理 |", "| --- | --- | --- | --- |"])
|
||
for item in conflicts:
|
||
conflict_sources = ";".join(
|
||
f"{_compact_table_text(value.get('source_file', ''))}:{_compact_table_text(value.get('value', ''))}"
|
||
for value in item.get("conflict_values", [])
|
||
)
|
||
lines.append(
|
||
f"| {_compact_table_text(item.get('field_label', item.get('field_key', '')))} | {_compact_table_text(item.get('selected_value', ''))} | {_compact_table_text(conflict_sources or '-')} | {_compact_table_text(item.get('handling', ''))} |"
|
||
)
|
||
|
||
if trace_exports:
|
||
lines.append("")
|
||
for export in trace_exports:
|
||
lines.append(f"[下载{export.file_name}](/api/review-agent/file-summary/exports/{export.pk}/download/)")
|
||
return "\n".join(lines).strip()
|
||
|
||
|
||
def _compact_table_text(value: object, *, limit: int = 80) -> str:
|
||
text = " ".join(str(value or "").replace("|", " ").split())
|
||
if len(text) <= limit:
|
||
return text
|
||
return f"{text[:limit]}..."
|