文件智能管理系统
登 录
没有账号? 去认证服务注册 忘记密码
{{ loginCodeCooldown > 0 ? loginCodeCooldown + ' 秒后可重新发送' : '重新发送验证码' }} 完成登录
⏳

账号 {{ pendingDialog.username }} 正在等待管理员审核授权

审核通过后即可登录,如有疑问请联系管理员

文件智能管理系统
数据更新中…({{ (fetchTask.progress || []).length }} 项完成) 发票下载中…({{ (downloadTask.progress || []).length }} 项) 归档中…({{ uploadTask.done || 0 }}/{{ uploadTask.total || 0 }}) 上传文件 {{ (me.username || '?').slice(0, 1).toUpperCase() }} {{ me.username }} {{ isAdmin ? '管理员' : '普通用户' }} ▾
{{ it.label }}
系统升级中:服务可能短暂不可用,完成后自动恢复使用 系统维护准备中:业务已暂停(只读),查询仍可用,请保存手头工作
{{ archiveCenterTab === 'recycle' ? '文件回收站' : '往期资料' }} 被删除的资料按批次保留在这里,可整批恢复 往期资料=结账时转入跨月补打 / 待入账的资料
待补打 / 待入账明细 共 {{ carryoverRows.length }} 项 · 每行标注原属期
往期资料加载失败:{{ carryoverError }} 重试
回收批次 按批次恢复;删除超过保留期的记录由定时任务清理
回收站加载失败:{{ recycleError }} 重试
扫描文件 扫描下载目录,把还没登记的发票原件与其他资料登记进系统;已有记录不会被改写
{{ scanStatus.status === 'running' ? '扫描中…' : '重新扫描文件' }}
扫描进度 目标目录:{{ scanStatus.root || '—' }}
已扫描 {{ scanStatus.scanned || 0 }} / {{ scanStatus.total || '—' }} 个文件 新登记 {{ scanStatus.registered || 0 }} 个 正在扫描… 扫描完成,用时 {{ scanStatus.duration }} 秒({{ scanStatus.finished_at }}) 扫描失败:{{ scanStatus.error }} 尚未扫描,点右上角「重新扫描文件」开始
说明
  • 扫描范围是整个下载目录,不只是 PDF:发票原件(PDF / OFD / XML)、表格(xlsx / xls)、 文档(doc / docx)、图片(jpg / png / bmp 等)和压缩包(zip / rar / 7z)都会登记。
  • 已经登记过的文件不会重复登记,类别、打印状态以系统里的记录为准。
  • 从电子税务局下载时会自动登记;只有手工往下载目录拷了文件、或上次扫描中断时,才需要手动重扫。
  • 扫描在后台执行,可以随时离开本页,回来还能看到进度。
操作日志 登录、下载、打印、结账等关键动作留痕,可按操作人 / 动作 / 关键字 / 日期筛选
查询 重置
操作日志加载失败:{{ logsError }} 重试
资产与摊销按公司 + 账期管理 员工档案与工资单按公司 + 月份管理
只显示当月 批量打印 月度统计 发票明细 导入已打印确认 复核 ▾ 批量下载 下载发票 同步发票明细 生成资产卡片 生成摊销项目 已选 {{ selectedFiles.length }} 个文件
资料加载失败:{{ filesError }} 重试
归档月份 税费所属期 入退库日期 填发日期
查询 导出汇总 导出明细 查重冲突
{{ t.tax_name }} {{ t.amount }}({{ t.documents }}张) 已确认合计 {{ taxStats.confirmed_amount }}
完税证明加载失败:{{ taxError }} 重试
{{ taxDetailRow.company_name }} {{ taxDetailRow.document_type_label }} 号码 {{ taxDetailRow.certificate_no_raw || taxDetailRow.ticket_no || '未识别' }} 归档月 {{ taxDetailRow.archive_months || '待确定' }} {{ taxReviewLabel(taxDetailRow) }} {{ taxMatchLabel(taxDetailRow) }} 顺延至 {{ taxDetailRow.defer_month }}
原件对照 下载原件 打印本证明
{{ taxDetailRow.certificate_no_raw || '未识别' }} {{ taxDetailRow.taxpayer_name_raw || '—' }} {{ taxDetailRow.taxpayer_id_raw || '—' }} {{ taxDetailRow.issue_date || '—' }} {{ taxDetailRow.face_total || '—' }} v{{ taxDetailRow.current_revision }}(保存时校验版本)
税额合计 {{ taxDetailRow.face_total || '—' }} 明细合计 {{ taxDetailRow.computed_total || '—' }} 已匹配 {{ taxDetailRow.matched_amount || '0.00' }}
候选回单 {{ (taxMatchInfo && taxMatchInfo.candidates && taxMatchInfo.candidates.length) || 0 }} 条
修订记录

{{ taxPrintRow.document_type_label || '完税证明' }}

公司:{{ taxPrintRow.company_name }} 号码:{{ taxPrintRow.certificate_no_raw || taxPrintRow.ticket_no || '未识别' }} 纳税人:{{ taxPrintRow.taxpayer_name_raw || '—' }} 填发日期:{{ taxPrintRow.issue_date || '—' }} 归档月:{{ taxPrintRow.archive_months || '待确定' }}
#税费种类品目所属期 入库日期金额
{{ idx + 1 }} {{ item.tax_name }} {{ item.item_name_raw }} {{ item.period_start ? (item.period_start + ' ~ ' + (item.period_end || item.period_start)) : '未注明' }} {{ item.treasury_date || '未注明' }} {{ item.amount }}
明细合计 {{ taxPrintRow.computed_total || '—' }} | 票面合计 {{ taxPrintRow.face_total || '—' }}
仅显示该公司资产卡片
最近生成:{{ assetStats.last_generated || '—' }} 本月折旧{{ monthPrint.depreciation.printed ? '已打印' : '未打印·需打印' }} 本月摊销{{ monthPrint.amortization.printed ? '已打印' : '未打印·需打印' }} 本期无折旧/摊销数据,无需打印 打印资产卡片 已打印{{printCounts.asset_cards}}次 A5 横向 新增资产卡片 导入Excel 下载导入模板
资产卡片
{{ assetStats.count }} 张
在用 {{ assetStats.in_use }}
资产原值合计
¥{{ fmtMoney(assetStats.original) }}
累计折旧合计
¥{{ fmtMoney(assetStats.accumulated) }}
本月计提 ¥{{ fmtMoney(assetStats.month_amount) }}
期末净值合计
¥{{ fmtMoney(assetStats.net) }}
资产数据加载失败:{{ assetError }} 重试
仅显示该公司折旧记录(账期取该公司)
✓ {{ assetDeprAlert }}
{{ assetDeprRows.length ? (assetDeprPrintStatus.printed ? '已打印' : '未打印') : '本期无数据' }} 打印时间 {{ assetDeprPrintStatus.printed_at.slice(0,16) }} 本期有折旧数据,请打印存档 删除后可用「生成/补算」重新生成 {{ assetDeprPrintStatus.printed ? '取消已打印' : '标记已打印' }} 清空本期 生成/补算 打印本期明细 已打印{{printCounts.depreciation}}次 A5 横向
仅显示该公司摊销项目;摊销包含房租、装修等费用,与固定资产分开管理
最近生成:{{ prepayStats.last_generated || '—' }} 新增摊销项目 导入Excel 下载导入模板 打印摊销卡片 已打印{{printCounts.prepaid_cards}}次
摊销中项目
{{ prepayStats.active }}
已摊完 {{ prepayStats.done }} · 已终止 {{ prepayStats.terminated }}
本月摊销额
¥{{ fmtMoney(prepayStats.month_amount) }}
{{ assetPeriod }} 期间
累计已摊销
¥{{ fmtMoney(prepayStats.accumulated) }}
剩余待摊合计
¥{{ fmtMoney(prepayStats.remaining) }}
仅显示该公司摊销记录(账期取该公司)
✓ {{ amortAlert }}
{{ amortRows.length ? (amortPrintStatus.printed ? '已打印' : '未打印') : '本期无数据' }} 打印时间 {{ amortPrintStatus.printed_at.slice(0,16) }} 本期有摊销数据,请打印存档 删除后可用「生成/补算」重新生成 {{ amortPrintStatus.printed ? '取消已打印' : '标记已打印' }} 清空本期 生成/补算 打印本期明细 已打印{{printCounts.amortization}}次 A5 横向
处置损益 = 处置收入 − 处置时净值
报表数据来自资产处置记录,随处置操作自动更新 刷新报表
本期处置
{{ disposalStats.count }} 笔
收益 {{ disposalStats.gain }} · 损失 {{ disposalStats.loss }}
处置收入合计
¥{{ fmtMoney(disposalStats.income) }}
处置损益合计
¥{{ fmtMoney(disposalStats.pnl) }}
损失资产净值合计
¥{{ fmtMoney(disposalStats.loss_net) }}
查询 新增员工 导入员工花名册 批量设置部门 已选 {{ payrollEmpSelection.length }} 人 按个税申报员工信息导出
员工总数
{{ payrollEmpStats.total }} 人
在职 {{ payrollEmpStats.active }} · 离职 {{ payrollEmpStats.left }}
本月应发合计
¥{{ payrollMoney(payrollEmpStats.gross) }}
{{ payrollEmpStats.month_count }} 人有工资记录
本月代扣个税
¥{{ payrollMoney(payrollEmpStats.tax) }}
本月实发合计
¥{{ payrollMoney(payrollEmpStats.net) }}
未参保人数
{{ payrollEmpStats.no_base }} 人
社保未参保 {{ payrollEmpStats.no_ssi }} · 公积金未参保 {{ payrollEmpStats.no_hf }}
1上传证件
2核对识别结果
3确认建档
上传证件可一次多选:身份证正反面、银行卡可混在一起,也支持多人的证件
先做文字识别(百度高精度 OCR,PDF 直传不转图),再由 AI 整理成员工信息;确认后才会建档,未确认的文件按现有规则自动清理。
⬆
把证件拖到这里,或点击选择文件
支持 JPG / PNG / BMP / WebP / PDF,可一次多选
PDF 直接送百度识别(不转图片);单文件 ≤20MB,单次 ≤12 个文件
待识别文件共 {{ payrollOcrFiles.length }} 个,可逐个移除
核对识别结果已核对 {{ payrollOcrVerifiedCount() }} / 共 {{ payrollOcrEmployees.length }} 条 · 对照左侧原图逐项核对;确认建档后证件图片会永久留档到该员工名下
请对照左侧原图核对右侧识别结果(AI 可能识别错字)。确认建档后证件图片会永久留档到该员工名下。 (本次为缓存结果)
AI 提示:{{ payrollOcrWarnings.join(';') }}
员工 {{ i + 1 }} · {{ e.name || '未识别姓名' }}
{{ e.skip ? '已跳过' : (e.verified ? '✓ 已核对' : '待核对') }} · {{ (e.pages || []).length }} 页证件 · 身份证号校验未通过 · 未选归属员工
未识别到员工,请核对图片后重新上传
原始证件共 {{ payrollOcrShownPages.length }} 页 · 确认后永久留档
AI 未返回该员工的页码,这里展示本次上传的全部证件页,请人工核对归属
第 {{ idx }} 页 · {{ (payrollOcrPages.find(p => p.index === idx) || {}).name || '' }}
原图加载中…
识别结果可直接修改;带 ★ 为必填
{{ (payrollOcrEmployees[payrollOcrCurrent].checks || {}).id_number ? payrollOcrEmployees[payrollOcrCurrent].checks.id_number.message : '' }}
户籍地址 发薪信息(工资卡)
{{ (payrollOcrEmployees[payrollOcrCurrent].checks || {}).bank_account ? payrollOcrEmployees[payrollOcrCurrent].checks.bank_account.message : '' }}
建档后补充
我已核对本员工的原图与信息
已建档
{{ payrollOcrResult.count }} 人
归档证件
{{ payrollOcrResult.files }} 个
已跳过
{{ payrollOcrResult.skipped }} 条
证件已永久归档到对应员工名下;未确认的暂存文件已按现有规则清理。
按公司缴费比例测算个人与单位缴纳,个人三险一金计入个税专项扣除 比例设置 重新测算
个人三险一金合计
¥{{ payrollMoney(payrollSocialStats.p_total) }}
{{ payrollSocialStats.n }} 人参保
单位五险一金合计
¥{{ payrollMoney(payrollSocialStats.c_total) }}
计入用工成本
单位合计用工成本
¥{{ payrollMoney(payrollSocialStats.total_cost) }}
社保基数合计
¥{{ payrollMoney(payrollSocialStats.ssi_base) }}
公积金基数合计
¥{{ payrollMoney(payrollSocialStats.hf_base) }}
复制上月工资 导入工资单 计算个税并生成工资单 {{ payrollPeriodLocked ? '取消确认工资单' : '确认工资单' }} 打印工资单 导出工资单
本期工资单:{{ payrollPeriod.payroll_status }} 本期个税:{{ payrollPeriod.tax_status }} 待计算个税:{{ payrollPeriod.tax_pending }} 人 {{ payrollPeriodLocked ? '数据已锁定:如需修改请先「取消确认工资单」;打印、导出与申报已开放。' : (payrollPeriod.tax_pending > 0 ? ('还有 ' + payrollPeriod.tax_pending + ' 人未计算个税:请先执行「计算个税并生成工资单」,通过后才能确认工资单。') : '确认工资单后才会锁定本月数据,确认后才能打印、导出工资单与个税申报数据。') }}
应发工资合计
¥{{ payrollMoney(payrollRecordStats.gross) }}
{{ payrollRecordStats.n }} 人
个人三险一金
¥{{ payrollMoney(payrollRecordStats.ssi) }}
专项附加扣除
¥{{ payrollMoney(payrollRecordStats.sp) }}
代扣个税
¥{{ payrollMoney(payrollRecordStats.tax) }}
实发合计
¥{{ payrollMoney(payrollRecordStats.net) }}
双击工资格可直接修改并自动保存;双击「实发工资」填写目标值,会自动反推基本工资与个税。
查询 列名与《正常工资薪金所得》税局模板一致,可直接导入扣缴端 {{ payrollPeriod.tax_status === '已确认申报' ? '取消确认申报' : '确认申报' }} 导出个税申报数据
本期工资单:{{ payrollPeriod.payroll_status }} 本期个税:{{ payrollPeriod.tax_status }} {{ !payrollPeriodLocked ? '工资单确认后才会显示申报数据;未确认时本页为空。' : (payrollPeriod.tax_status === '已确认申报' ? '本所属期申报已确认:现在可以导出个税申报数据。如需修改:先取消确认申报 → 再取消确认工资单 → 改数据后重新确认。' : '请先点「确认申报」;确认之后才能导出个税申报数据。') }}
申报人数
{{ payrollTaxStats.count }} 人
待申报 {{ payrollTaxStats.pending }}
本期收入合计
¥{{ payrollMoney(payrollTaxStats.income) }}
三险一金合计
¥{{ payrollMoney(payrollTaxStats.ssi) }}
本期专项扣除
累计专项附加
¥{{ payrollMoney(payrollTaxStats.sp) }}
本期应扣缴税额
¥{{ payrollMoney(payrollTaxStats.tax) }}
回单加载失败:{{ receiptError }} 重试
重新匹配发票 批量打印({{ receiptPickedCount }}) 批量下载 银行账号管理 重算账号归属 交易明细
明细比对(明细为行) 行 = 交易明细每一笔;缺回单的行可「补回单」或「忽略」;期初=明细表头优先、没有则按第一笔反推(可手工录入) {{ statementVerifyBadge.text }}
明细 {{ statementTotals().count }} 笔 · 借 {{ fmtMoney(statementTotals().debit) }} · 贷 {{ fmtMoney(statementTotals().credit) }} · 期末 {{ statementTotals().final ? fmtMoney(statementTotals().final) : '—' }} · 已配 {{ statementTotals().matched }} / 缺 {{ statementTotals().missing }} · 结转验算:{{ statementTotals().initial ? fmtMoney(statementTotals().initial) : '—' }} + 贷 {{ fmtMoney(statementTotals().credit) }} − 借 {{ fmtMoney(statementTotals().debit) }} = 期末 {{ statementTotals().final ? fmtMoney(statementTotals().final) : '—' }} 期初余额:{{ statementTotals().initial ? fmtMoney(statementTotals().initial) : '未设置' }}(修改) {{ statementInitialSourceLabel }} 月份不连续 / 期初不一致 批量忽略 刷新 月份连续性 {{ statementFilterHint }} 清除筛选
AI 管理中心加载失败:{{ aiCenterError }} 重试
AI 管理中心 统一管理 AI 调用:概览 · 任务与提示词 · 分类规则模板 · 调用账本
刷新概览
Key 状态
{{ aiHealth && aiHealth.key_configured ? '已配置' : '未配置' }}
{{ aiHealth ? aiHealth.model : '' }}
今日调用
{{ aiHealth ? aiHealth.today_calls : 0 }}
上限 {{ aiHealth && aiHealth.daily_limit ? aiHealth.daily_limit : '不限' }}
7 天调用 / 缓存命中
{{ aiStats && aiStats.total ? aiStats.total.calls : 0 }} / {{ aiStats && aiStats.total ? aiStats.total.cached : 0 }}
命中缓存不花钱
失败次数
{{ aiStats && aiStats.total ? aiStats.total.failed : 0 }}
超时 / 额度 / 解析失败
token 合计
{{ aiStats && aiStats.total ? aiStats.total.tokens : 0 }}
OCR 引擎
{{ AI_OCR_LABELS[aiOcrForm.provider] || '百度优先 + 本地兜底' }}
{{ aiOcr ? (aiOcr.accounts || []).length + ' 个百度账号' : '未读取' }} · 最近有本地兜底
预算与限额 月 / 周 / 日三级预算,任一触顶即完全停止 AI 调用并降级(规则 → 本地 OCR → 人工)
本月预算
¥ {{ aiBudget.monthly_limit || '不限' }}
已用 ¥ {{ (aiBudgetUsage.month || {}).cost || 0 }}
本周预算
¥ {{ aiBudget.weekly_limit || '不限' }}
已用 ¥ {{ (aiBudgetUsage.week || {}).cost || 0 }}
今日预算
¥ {{ aiBudget.daily_limit || '不限' }}
已用 ¥ {{ (aiBudgetUsage.day || {}).cost || 0 }}
当前状态
{{ aiBudgetCheck.allowed ? '可调用' : '已停止' }}
{{ aiBudgetCheck.allowed ? '按单价表计费,缓存命中不计费' : ('触顶周期:' + (aiBudgetCheck.period || '')) }}
月预算
周预算
日预算
告警比例
保存预算 填 0 表示该周期不限制
识别引擎(OCR) 改了立即生效、不用重启;「百度优先 + 本地兜底」时掉到本地会提示人工检查百度额度
OCR 引擎
保存引擎设置 百度账号:{{ (aiOcr.accounts || []).join('、') || '未配置' }} · 冷却中:{{ Object.keys(aiOcr.cooldown).join('、') }}
最近一次本地兜底:{{ aiOcr.fallback_at }} · {{ aiOcr.fallback_note || '百度识别失败' }} 标记已处理
文件文本缓存 / 切割结果缓存 按文件内容 sha256 关联:同一份文件再上传,跳过 OCR、跳过 PDFCut 切割识别
文件文本缓存:共 {{ aiTextCache.total || 0 }} 份 · 占用 {{ aiTextCache.mb || 0 }} MB · 命中 {{ aiTextCache.hits || 0 }} 次 ({{ (aiTextCache.by_provider || []).map(p => p.provider + ' ' + p.count).join('、') }})
清理 30 天前 全部清理 切割缓存:共 {{ aiPdfcutCache.total || 0 }} 份 · 占用 {{ aiPdfcutCache.mb || 0 }} MB · 处理版本 {{ aiPdfcutCache.pipeline_version || '—' }} 清空切割缓存
切割缓存默认一直保留、不自动清理;改了切割 / 裁白 / 字段口径后,把处理版本号 +1 旧缓存就自动失效(也可在这里手工清空)。
AI 缓存
清理 N 天前 全部清理
共 {{ aiCache.total || 0 }} 条 · 占用 {{ aiCache.kb || 0 }} KB。 缓存不自动过期;改了提示词或模型后旧缓存会自动失效。
腾讯 OCR(回单 / 交易明细)
刷新状态
状态读取失败:{{ tencentOcrError }}
回单识别
明细表格
回单纯切割
未配置时默认开启(腾讯优先)
强制云优先(回单)
强制云优先(明细)
云失败回落本地
改完立即生效并写入 .env,重启后沿用;「强制云优先」只改识别顺序(先走腾讯云), 白名单/凭据/预算闸门不变,关闭即回现状;「未配置时默认开启」关掉后,上面三个识别开关没显式配置的一律按关闭
日用量上限 0 = 不限(仍记当日用量)
月用量上限 自然月严格上限,超限停止云调用转待人工
保存用量上限 今日已用 {{ tencentOcr.budget.day_used }}/{{ tencentOcr.budget.day_unlimited ? '不限' : tencentOcr.budget.day_limit }} · 本月已用 {{ tencentOcr.budget.month_used }}/{{ tencentOcr.budget.month_limit }} (剩余 {{ tencentOcr.budget.month_remaining }})
凭据 {{ tencentOcr.credentials_configured ? '已配置' : '缺失' }} SDK {{ tencentOcr.sdk_installed ? '已安装' : '未安装' }} 回单实际可用 {{ tencentFlagText(tencentOcr.receipt.available) }} 明细实际可用 {{ tencentFlagText(tencentOcr.statement.available) }} 灰度白名单:{{ (tencentOcr.bank_whitelist || []).join('、') || '全部' }} · 版式白名单:{{ (tencentOcr.layout_whitelist || []).join('、') || '全部' }} · 调用 {{ tencentOcr.stats.calls }}(缓存命中 {{ tencentOcr.stats.cache_hits }}, 失败 {{ tencentOcr.stats.errors }},退避 {{ tencentOcr.stats.retries }})· 页号基准 {{ tencentOcr.page_base }} · 映射版本 {{ tencentOcr.mapping_version }}
{{ tencentOcr.receipt.reason || tencentOcr.statement.reason }}
AI 任务管理
刷新
提示词 / 模型 / 缓存 / 启停:改完立即生效,可回滚。
如 deepseek-flash 开=同一内容第二次进来不花钱(分类/抽字段建议开;与当期台账相关的任务建议关) 停用后调用直接返回 TASK_DISABLED,不花钱
分类规则
新增规则 灌入默认规则
按银行 / 按票种 / 按公司 / 全局匹配;命中即不调 AI(0 成本)。
规则命中就不调用 AI(0 成本);判不出来才走 AI 兜底。人工在复核台改判时会累加“误判”, 这里能直接看到哪条规则需要优化。Key 在平台 .env 里配置(DEEPSEEK_API_KEY),界面永不显示明文。
匹配模板 新建模板
AI 自学习:命中即 0 次 AI,同类文件直接套用。
健康度:共 {{ aiTemplateHealth.total }} 条 · 命中 {{ aiTemplateHealth.hits }} · 失效 {{ aiTemplateHealth.misses }} · 需关注 {{ aiTemplateHealth.risky }} 条 · 连续失效已自动停用 {{ aiTemplateHealth.autoDisabled }} 条 · 停用候选(需管理员补字段并人工启用,不再按次数自动启用) {{ aiTemplateHealth.learning }} 条
命中与失效都会留样(文本截断保存)。重学时会用这些历史样本回放校验, 所以不用等新文件凑数。
草稿试跑(不保存、不计命中/样本)
试跑草稿 {{ aiTemplateEdit.testResult }}
版本(改动前自动留存,可回滚)
拖入或点击选择样本(PDF/图像/可解析的明细 Excel/CSV; 单份 ≤ 20MB,单次 ≤ 20 份)
上传样本 已保存 {{ (ttWizard.uploadResult.saved || []).length }} 份 · 跳过 {{ (ttWizard.uploadResult.skipped || []).length }} 份 可从多个有权限的公司分别上传;同一「银行×类型×版式」自动汇聚为一个池, 公司只作来源审计与权限,不参与版式身份与匹配范围。
样本分桶(按银行 → 资料类型 → 版式;跨公司汇聚,阶段只提示不自动启用)
{{ g.bank }} 样本来自 {{ g.companies }} 家公司(可跨公司汇聚)
回放:训练 {{ ttWizard.replay.summary.train }} (通过率 {{ (ttWizard.replay.summary.train_pass_rate * 100).toFixed(0) }}%)· 验证 {{ ttWizard.replay.summary.validation }} ({{ (ttWizard.replay.summary.validation_pass_rate * 100).toFixed(0) }}%)· 关键错误 {{ ttWizard.replay.summary.critical_errors }} · 训练/验证重复 {{ ttWizard.replay.summary.duplicates.length }} · 已因关键错误自动停用,请核查已影响的新资料
样本明细(脱敏;可校准类型/银行/训练或验证分组与真值)
{{ ttWizard.samplesScope === 'pool' ? '版式池全部来源公司样本(管理员视图)' : '本公司样本' }} 来源公司仅作审计,不参与版式身份与匹配范围 返回本公司样本
老模板盘点(只读;停用后再启用/编辑/扩大范围走新门禁)
共 {{ (ttWizard.inventory || []).length }} 条 · 老启用模板 {{ ttWizard.legacyCount || 0 }} 条(保持原行为,可逐条复核) 刷新
开始试跑 试跑只在本机跑模板规则,不调用 AI、不影响数据
抽到的字段
未抽到:{{ aiTemplateTest.missing.join('、') }}
同一家公司可以有多个银行账号;账号维护后,回单按账号自动关联到对应公司(支持"分账号显示")。
{{ receiptAccountForm.id ? '保存修改' : '新增账号' }} 清空
{{ statementMonthsSummary }}
公司:{{ receiptCompany || '—' }} · 月份:{{ receiptStatementMonth || '全部' }} · 共 {{ (receiptStatementRows || []).length }} 个明细文件。 「打印版」是平台处理过(裁白)的版本,PDF 可在线看;「原件」是银行导出的原样文件(Excel / OFD 直接下载)。 显示回收站
{{ receiptDetail.trade_date }} {{ receiptDetail.direction }} {{ fmtMoney(receiptDetail.amount) }} {{ receiptDetail.payer_name || '—' }} {{ receiptDetail.payee_name || '—' }} {{ receiptDetail.counterparty_name || '—' }} {{ receiptDetail.receipt_no || '—' }} {{ receiptDetail.serial_no || '—' }} {{ receiptDetail.voucher_no || '—' }} {{ receiptDetail.summary || '—' }} {{ receiptDetail.provider || '—' }}(置信度 {{ receiptDetail.confidence || 0 }}) {{ receiptDetail.batch_id }} {{ receiptDetail.payer_bank || '—' }} {{ receiptDetail.payee_bank || '—' }} {{ receiptDetail.notes }}
查看回单原件 | 下载回单 · 本批次共 {{ receiptDetail.files.length }} 个文件(含切割前原件)
完税证明占用 {{ receiptDetail.tax_allocations.length }} 条 | 合计 {{ ((receiptDetail.tax_allocated_minor || 0) / 100).toFixed(2) }}
匹配候选(对方名称 + 金额,不加日期容差)
{{ (payrollEmpForm.name || '新').slice(0, 1) }}
{{ payrollEmpForm.name || '新员工' }}{{ payrollEmpForm.emp_code }}
{{ payrollEmpForm.department || '未填部门' }} · {{ payrollEmpForm.position || '未填职务' }} · 入职 {{ payrollEmpForm.hire_date || '—' }}
{{ payrollEmpForm.employment_status || '在职' }} 社会保险{{ Number(payrollEmpForm.ssi_base) > 0 ? '已参保' : '未参保' }} 公积金{{ Number(payrollEmpForm.hf_base) > 0 ? '已参保' : '未参保' }} 单独比例
{{ s.label }}
基本信息带 * 为个税申报必填(必填项加粗);性别与出生日期按身份证自动带出
身份证号码与本公司已有员工重复:{{ payrollDupText(payrollEmpDup.id_number) }} —— 同一公司不能重复建档,请直接编辑已有档案。 本公司已有同名员工:{{ payrollDupText(payrollEmpDup.name) }}(身份证号不同可以继续保存) 本公司已有同手机号员工:{{ payrollDupText(payrollEmpDup.phone) }}
任职信息
户籍与发薪(工资卡)
社保与公积金
填 0 或留空 = 未参加社保
默认 5000,按实际情况调整
与社保基数一致
填 0 或留空 = 未参加公积金
社保公积金比例(选填)
默认全公司按「比例设置」计算;只给个别员工单独设置时再填这里,填了以这里为准,填 0 = 该险种不缴(例如只缴医保就把养老、失业填 0)。 恢复公司默认
专项附加扣除金额(按月)
备注
证件资料身份证、银行卡、学历证书等图片 / PDF,直接关联到该员工名下
新员工请先保存,保存后回到这里即可上传并关联资料。
应发工资
{{ payrollMoney(payrollRecordForm.gross_salary) }}
个人三险一金
{{ payrollMoney(payrollRecordForm.ssi_total) }}
本期个税
{{ payrollMoney(Number(payrollRecordForm.income_tax) + Number(payrollRecordForm.annual_bonus_tax)) }}
实发工资
{{ payrollMoney(payrollRecordForm.net_salary) }}
收入项
全年一次性奖金
扣除项
自动测算(保存后重算)
个人三险一金
{{ payrollMoney(payrollRecordForm.ssi_total) }}
专项附加扣除
{{ payrollMoney(payrollRecordForm.sp_total) }}
累计应纳税所得额
{{ payrollMoney(payrollRecordForm.taxable_income) }}
应发工资
{{ payrollMoney(payrollRecordForm.gross_salary) }}
本期个税
{{ payrollMoney(Number(payrollRecordForm.income_tax) + Number(payrollRecordForm.annual_bonus_tax)) }}
实发工资
{{ payrollMoney(payrollRecordForm.net_salary) }}
这里是公司默认比例:员工档案里单独填过比例的,按员工自己的比例计算;基数填 0 表示该项未参保,允许社保或公积金只参一项。
险种单位比例(%)个人比例(%)
基本养老保险养老待遇
基本医疗保险不含生育
失业保险
工伤保险单位承担 —
生育保险单位承担 —
住房公积金单位与个人同比例
单位比例合计
{{ payrollMoney(payrollSettingsTotalCompany) }}%
个人比例合计
{{ payrollMoney(payrollSettingsTotalPersonal) }}%
基本减除费用(每月 5000 或按实际情况)在「编辑员工」里按人维护;保存后对新测算生效,已申报月份的工资记录不会被改动。
选择文件支持 .xlsx;税局模板与系统模板都能识别
逐行校验并回读核对,失败行不写库;失败原因会写回原表,可下载修改后重传。
⬆
把 Excel 拖到这里,或点击选择文件
一次一个文件;选好后点右下角「开始导入」
已选择:{{ payrollImportFile.name }} 清除
把自然人电子税务局最新的模板上传并确认一次映射,之后导入与导出都按这套列名执行:税局改列名、加列、调顺序都不用改程序。
上传税局模板 已映射 {{ payrollTplMappedCount }} / {{ payrollTplColumns.length }} 列
{{ payrollTplWarning }}
保存映射(默认覆盖所有公司)
已保存的模板
所属年度与截止期跨年自动重置,期初按年度分开保存
这里填「进入本系统之前」的累计数,用于累计预扣法:本期个税 =(期初累计 + 本系统各月)× 税率 − 速算扣除数 − 期初已缴 − 系统内已扣。留空按 0 处理。
备注
保存后会重算该员工当年度全部月份的个税;若该年度有已确认期间,会自动退回「未确认」,需要重新确认。
成功 {{ payrollFailResult.ok }} 条(新增 {{ payrollFailResult.created }} · 更新 {{ payrollFailResult.updated }}) 失败 {{ payrollFailResult.failed }} 条 忽略空行/示例行 {{ payrollFailResult.skipped }} 条
下载带结果的原表
没有任何数据写入数据库。请按每行「失败原因」修改后重新导入。 未识别的列(已忽略):{{ payrollFailResult.unmatched.join('、') }}
失败的行不会写入系统。「下载带结果的原表」会保留你的原始数据并追加一列「导入结果」:成功行标绿、失败行标红并写明原因,改完直接重新导入即可(已成功的行会按身份证号/工号识别并更新,不会重复建档)。
只改「部门」一个字段,其他档案信息、工资、社保、期初都不动;新部门保存后会自动进入常用部门列表。
查询 查看原件
已关联:{{ assetInvoiceInfo.ticket_type || assetInvoiceInfo.invoice_type || '发票' }} · 项目名称 {{ assetInvoiceInfo.item_name || '—' }} · 开票日期 {{ (assetInvoiceInfo.invoice_date || '').slice(0,10) }} · 金额 {{ assetInvoiceInfo.amount || '—' }} · 税额 {{ assetInvoiceInfo.tax || '—' }} · 价税合计 {{ assetInvoiceInfo.total_amount || '—' }} · 销售方 {{ assetInvoiceInfo.sales_name || assetInvoiceInfo.counterparty_name || '—' }} · 原件:{{ assetInvoiceInfo.file_name }} · 未找到原件文件
折旧年限按税法最低标准预填:房屋建筑物 240 月、机器设备 120 月、运输工具 48 月、电子设备 36 月;残值率默认 5%;折旧方法可选“基于原值和预计使用月份”或“基于净值和剩余使用月份”;资产编号由系统自动生成(公司内 6 位顺序号);开始计提月份默认购置次月,保存后按公司所属期自动计提;填写发票号可关联平台发票并带出税额。
处置资产:{{ assetDispose.asset_name }}
处置当月照常计提折旧,次月起停止;处置损益 = 处置收入 − 处置时净值。
按代码/号码查询 查看发票原件 查询后自动带出金额、税额、收款方、日期与原件 PDF
已关联:{{ prepayInvoiceInfo.ticket_type || prepayInvoiceInfo.invoice_type || '发票' }} · 项目名称 {{ prepayInvoiceInfo.item_name || '—' }} · 开票日期 {{ (prepayInvoiceInfo.invoice_date || '').slice(0,10) }} · 金额 {{ prepayInvoiceInfo.amount || '—' }} · 税额 {{ prepayInvoiceInfo.tax || '—' }} · 价税合计 {{ prepayInvoiceInfo.total_amount || '—' }} · 收款方 {{ prepayInvoiceInfo.sales_name || prepayInvoiceInfo.counterparty_name || '—' }} · 原件:{{ prepayInvoiceInfo.file_name }} · 未找到原件文件
摊销月数建议:年付房租 12 个月、装修费用按受益期(如 36 个月);摊销方法可选“基于原值和预计使用月份”或“基于净值和剩余使用月份”;每月摊销 = 总金额 ÷ 月数(或按剩余金额 ÷ 剩余月数),最后一期自动结清,保存后按公司所属期自动生成摊销记录。
项目:{{ prepayTerminate.item_name }}
终止当月正常摊销,剩余金额不再摊销。
发票号码{{ invoiceDetailMaster.invoice_no || invoiceDetailMaster.digital_invoice_no || '—' }}
发票代码{{ invoiceDetailMaster.invoice_code || '—(数电票无)' }}
开票日期{{ (invoiceDetailMaster.invoice_date || '').slice(0,19) || '—' }}
发票来源{{ invoiceDetailMaster.source_db || '—' }}
销售方{{ invoiceDetailMaster.sales_name || invoiceDetailMaster.counterparty_name || '—' }} {{ invoiceDetailMaster.sales_tax_no || invoiceDetailMaster.counterparty_tax_no || '' }}
开票人{{ invoiceDetailMaster.drawer || '—' }}
购买方{{ invoiceDetailMaster.buyer_name || '—' }} {{ invoiceDetailMaster.buyer_tax_no || '' }}
销方开户{{ invoiceDetailMaster.seller_addr }} {{ invoiceDetailMaster.seller_tel }} {{ invoiceDetailMaster.seller_bank }} {{ invoiceDetailMaster.seller_account }}
金额合计(不含税)
¥{{ fmtMoney(invoiceDetailStats.amount) }}
税额合计
¥{{ fmtMoney(invoiceDetailStats.tax) }}
价税合计
¥{{ fmtMoney(invoiceDetailStats.total_amount) }}
明细行数
{{ invoiceDetailStats.count }} 行
来源:{{ invoiceDetailMaster.detail_source === 'xml' ? '数电票 XML' : (invoiceDetailMaster.detail_source === 'xlsx' ? '下载明细 Excel' : '未导入') }}
发票原件: {{ f.file_type.toUpperCase() }} 未关联原件文件
资产卡片 / 摊销项目的默认名称 = 明细第一行去掉 *分类* 前缀(本票 → {{ invoiceDetailItems.length ? invoiceDetailItems[0].goods_short : '—' }})。
共选择 {{ assetFromInvoiceRows.length }} 张发票;发票号码、金额、销售方、原件会自动关联到卡片,同一发票已建卡片的会自动跳过。
共选择 {{ prepayFromInvoiceRows.length }} 张发票;金额、税额、收款方、发票原件会自动关联到项目,同一发票已生成过项目的会自动跳过。适合房租、装修等待摊费用。
AI记账 生成凭证草稿 → 逐张复核 → 导出柠檬云 Excel → 成套打印
模板 v{{ vTemplate.version }} 未入库模板 账期已结账锁定 公司与所属期与「资料管理 / 一键打印」同步
未展开的字段(自动过账、阈值、AI 任务)保存时原样保留,不会被默认值覆盖。
XLS
{{ vTemplate.file_name }}
版本 v{{ vTemplate.version }} · 科目 {{ vTemplate.subject_count }} · 辅助 {{ vTemplate.aux_count }} · 入库 {{ vTemplate.uploaded_at || '—' }}
查看科目 更多 ▾
📄 {{ vTemplateFile.name }} 移除 未选择文件:拖入或点击上面的区域选择 {{ vTemplate ? '更换模板(上传并预览)' : '导入模板(上传并预览)' }} 选文件 → 解析 → 看结构与版本差异 → 确认后才入库;.xls 与 .xlsx 都支持。
下载当前模板 更新参考表并下载 新建二级科目 刷新
按路径预览 路径预览同样要确认后才入库;客户原件不动。
历史版本 {{ (vTemplateVersions || []).length }} 个: {{ (vTemplateVersions || []).slice(0, 6).map(v => 'v' + v.version + '(' + v.subject_count + '科目)').join(' · ') || '—' }}
按本公司会计准则生成
借贷必平、科目在本公司科目表内;AI 出不来或不过硬校验就转人工,不用兜底科目凑平衡。
默认
学习本公司的记账习惯
达标的本公司习惯交给 AI 参考;只学科目偏好与辅助用法,摘要不学习(统一按系统规则生成);与本次原件冲突时以原件为准。
规则与学习记录
生效规则、命中次数、学习评估、历史凭证导入与回滚(支持拖拽上传);规则按公司各存一套。
管理规则
0 = 不限额;借贷平衡、科目在册、数据隔离、审计留痕属于硬规则,任何公司都不能关闭。
查看阈值建议 刷新审计

待记账原始凭证

{{ f.label }} {{ f.count }} 先到「设置」补齐:{{ vConfigMissing.join('、') }} 一键生成全部 删除凭证 回收站({{ vHomeRecycleCount }}) 刷新
{{ vHomeProgress.done }} / {{ vHomeProgress.total }} 成功 {{ vHomeStats.ok }} · 待人工 {{ vHomeStats.manual }} · 失败 {{ vHomeStats.failed }} · {{ vHomeElapsedText }} 暂停 继续 停止 导出日志
{{ m }}
共 {{ vHomeFilteredRows.length }} 组
已选 {{ vHomeSelected.length }} 组 · 待生成 {{ vHomePendingCount }} 组 · 共 {{ vHomeRows.length }} 组资料 生成已选({{ vHomeSelected.length }})
将把勾选的 {{ vHomeSelectedVouchers.length }} 张凭证移入回收站(软删除,可恢复): 记-{{ vHomeSelectedVouchers.map(v => v.voucher_no).join('、记-') }}
已审核 {{ vHomeCounts.confirmed }} 张、已过账 {{ vHomeCounts.posted }} 张, 不会被删除(勾到也会逐条提示跳过)。回收站不占用正式凭证号; 恢复时若原号已被占用,按顺序重新补号。
刷新 恢复已选({{ vHomeRecycleSelected.length }}) 彻底删除 回收站不占正式号;彻底删除才释放编号
上一批 {{ vLastExportBatch.file_name }} 反审核 凭证列表 {{ vExporting ? '导出中…' : '导出柠檬云 Excel' }} 刷新全部数据
排序与合规问题({{ vSortCheck.issues.length }} 条)
{{ it.voucher_no }} · {{ it.message }}
原始凭证 {{ (vDeskDocs || []).length }} 份 · {{ (vDeskCard.attachment_pages || 0) }} 页 放大 改归属
{{ deskDocLabel(d, i) }}
正在加载原始单据…
- {{ vDeskZoom === 100 ? '整页' : vDeskZoom + '%' }} · 适应整页 +
记账凭证 {{ statusName(vDeskCard.status) }} 有未保存改动 硬拦 {{ vDeskHardBlock }} 借贷不平 第 {{ vDeskIndexText }} 张
记 账 凭 证
记 - {{ vDeskCard.voucher_no }} {{ vDeskDateText }} 附单据 {{ vDeskAttachText }}
行 摘要 借方金额 贷方金额
{{ u }} {{ u }}
{{ row.seq }}
没有匹配的本公司科目
+ 新增科目
{{ deskAuxText(row) }}
{{ deskTotalText(row[f]) }} −
{{ vDeskEntries.length + n }}
合计:{{ vDeskTotalUpper }}
{{ d }}
{{ deskTotalText(vDeskDebit) }}−
{{ d }}
{{ deskTotalText(vDeskCredit) }}−
制单:{{ vDeskCard.created_by || '系统(AI)' }} 人民币 · 元
+ 加一行 - 删末行 金额已改动:保存后会重跑质检并退回待复核 改动会沉淀为该公司规则(≥3 次转候选)
{{ c.text }}
{{ c.level === 'pass' ? '✔' : (c.level === 'hard' ? '✖' : '!') }} {{ c.rule }} {{ c.name }}{{ c.message && c.message !== '通过' ? (' · ' + c.message) : '' }}
识别证据:{{ vDeskEvidence }} 自动过账:{{ vDeskAutopost.allowed ? '可自动通过' : '转人工' }} ({{ vDeskAutopost.stage_detail || '—' }})
按本公司模板辅助档案选择,也可直接输入新值:{{ vAuxKinds.join(' / ') }}
已定位:{{ vDeskFocus }}
‹ 上一张 下一张 › 第 {{ vDeskIndexText }} 张 {{ vDeskBalanced ? '✓ 借贷平衡' : '✖ 借贷不平' }} 保存 复核通过并下一张
导入记账凭证 打印已选({{ vKitSelected.length }}) 刷新 更多 ▾
导入柠檬云回传件后自动匹配并生成成套:只有已确认、已配对、无差异、原件齐全的凭证才能打印;缺件会逐张写明原因。
全选可打印 {{ vPrintVisibleRows.length }} 套
记 - {{ k.voucher_no || '—' }} {{ k.state_label }}
{{ k.summary || '—' }} · {{ k.amount_text }}
{{ k.detail_text }}
处理匹配 ›
成套预览 {{ vKitViewLabel }} 下载 PDF 新窗口打开
已选 {{ vKitSelected.length }} 套 · {{ vKitSelectedPages }} 页 {{ vLastPrintBatch ? ('待登记批次:' + vLastPrintBatch.label) : '先「打印已选」再登记' }} 登记打印完成
{{ vVoucherAllSelected ? '取消全选' : '全选' }}({{ vVoucherQueryRows.length }}) 批量审核({{ vVoucherSelected.length }}) 批量反审核
刷新 新建二级科目
辅助档案 {{ (vAux || []).length }} 条: {{ (vAux || []).slice(0, 12).map(a => a.kind + ' ' + a.code + ' ' + a.name).join(';') || '—' }}
刷新规则 刷新学习状态 刷新批次 生效规则 {{ vLearnMeta.active }} 条 · {{ vLearnMeta.active ? '参与生成' : '不参与生成' }} 一键回退纯准则
来源四类:本公司模板科目表 / 管理员底线 / 历史凭证学习 / 复核修改沉淀;命中 ≥3 次转候选,管理员确认或命中率 ≥95% 才生效。规则不跨公司。
生效规则
{{ vLearnDash.active_rules || 0 }}
共 {{ vLearnDash.rules_total || 0 }} 条 / 启用 {{ vLearnDash.rules_enabled || 0 }} 条
人工改动率
{{ ((vLearnDash.manual_change_rate || 0) * 100).toFixed(1) }}%
被动过 {{ vLearnDash.changed_vouchers || 0 }} / 已确认 {{ vLearnDash.confirmed_vouchers || 0 }}
科目不一致率
{{ ((vLearnDash.subject_change_rate || 0) * 100).toFixed(1) }}%
科目被改 {{ vLearnDash.subject_changes || 0 }} 次
自动回退次数
{{ vLearnDash.auto_rollbacks || 0 }}
学习运行 {{ vLearnDash.learn_runs || 0 }} 次 / 失败 {{ vLearnDash.failed_runs || 0 }} 次
历史凭证学习(导入 → 评估 → 启停 / 回滚)
待上传列表为空:拖入或点击上面的区域选择文件
📄 {{ f.name }} {{ (f.size / 1024 / 1024).toFixed(1) }} MB 移除
上传并学习 清空待上传
按路径导入
点「上传并学习」才开始解析与学习;同一份文件重复上传不会重复累计;被纠偏器硬拦的样本只进问题清单,不参与学习。摘要不学习:统一按系统规则生成。
做账习惯:摘要文风 {{ (vProfile.summary_templates || []).length }} 种 · 分录模板 {{ (vProfile.entry_templates || []).length }} 个 · 带辅助比例 {{ vProfile.with_aux_ratio }}
历史样本试跑(只读,不落库)
试跑历史样本 按本公司已导入的历史凭证模拟命中范围与改前/改后差异;无样本时显示“未验证”。
版本(改动前自动留存,可回滚)
缺口:{{ vPrintIssue.missing || '—' }}
{{ vPrintIssue.message || '回传件与系统不一致,需人工逐张核对。' }}
确认匹配(人工核对通过) 标记不符
该凭证的原始资料
清空本期凭证并解锁
重跑排序与合规检查 资料按一键打印顺序分 {{ (vMaterials.groups || []).length }} 组;资料与顺序变化要重新生成
待人工:{{ item.key }} · {{ item.reason }}
待确认资料及位置:{{ item.title }}(文件 {{ item.file_id }})· {{ item.reason }}
跑原始资料匹配 刷新回传件核对 回单 {{ vDocMatch.counts.receipts || 0 }} 份 · 发票 {{ vDocMatch.counts.invoices || 0 }} 张 · 已配对(回单页) {{ vDocMatch.counts.linked || 0 }} · 自动 {{ vDocMatch.counts.auto || 0 }} · 待确认 {{ vDocMatch.counts.pending || 0 }}
确认匹配会写回回单页配对:打印清单、记账清单共用这一份标签。
回传件核对(逐张差异)
一对一 {{ (vLemon.pairs || []).length }} · 待处理 {{ (vLemon.pending || []).length }} · 系统有草稿但回传缺 {{ (vLemon.unmatched_drafts || []).length }}
刷新导出历史 显示回收站 删除=移入回收站(文件保留、可恢复);移入回收站后该账期才能清空重排
保存后系统会自动生成科目编码。
文件:{{ vTemplatePreview.parsed.file_name }} · 真实格式 {{ vTemplatePreview.parsed.file_format }} · 当前版本 v{{ vTemplatePreview.current.version }}{{ vTemplatePreview.current.file_name ? '(' + vTemplatePreview.current.file_name + ')' : '' }} · {{ vTemplatePreview.diff.is_first ? '首次入库' : ('与当前版本比较:新增科目 ' + vTemplatePreview.diff.subjects.added_count + ' / 删除 ' + vTemplatePreview.diff.subjects.removed_count + ' / 改名 ' + vTemplatePreview.diff.subjects.renamed_count) }}
这份模板与当前版本内容完全一致:确认后不会新建版本,只保留现有 v{{ vTemplatePreview.current.version }}。
差异明细:新增科目 {{ (vTemplatePreview.diff.subjects.added || []).slice(0, 12).join('、') || '无' }} ;删除科目 {{ (vTemplatePreview.diff.subjects.removed || []).slice(0, 12).join('、') || '无' }} ;辅助新增 {{ (vTemplatePreview.diff.aux.added || []).slice(0, 10).join('、') || '无' }} ;列结构{{ vTemplatePreview.diff.columns.same ? '未变' : ('变化:' + vTemplatePreview.diff.columns.old_count + ' → ' + vTemplatePreview.diff.columns.new_count + ' 列') }}
批次:{{ vBatchDetail.file_name }} · 状态 {{ vBatchDetail.status }} · 凭证 {{ vBatchDetail.voucher_count }} 张 · 问题 {{ vBatchDetail.issue_count }} 条 · 硬拦凭证 {{ (vBatchDetail.blocked_vouchers || []).length }} 张
{{ vBatchDetail.issues_note }}
这个批次没有问题记录。
填要并入当前凭证的金额(默认全额);借贷两边差额必须为 0,否则会被服务端拦下。
分摊合计:借 {{ mergeAllocateDebit.toFixed(2) }} · 贷 {{ mergeAllocateCredit.toFixed(2) }}
把选中的凭证整张并入当前凭证(记-{{ vDeskCard.voucher_no || '' }});被并入的凭证按作废占号处理,号序保持连续。
资料:{{ vDocRow ? (vDocRow.file_name || vDocRow.doc_key) : '—' }} · {{ vDocRow ? (vDocRow.category || vDocRow.role) : '' }} · {{ vDocRow ? (vDocRow.pages || 1) : 0 }} 页
两张凭证的附件页数会按实际资料重新计算,并各自重跑质检。
缺口:{{ (vKitDetail.missing || []).join(';') }}
该套资料齐全,可下载成套 PDF。
{{ row.message }}
样本 {{ vSuggest.vouchers }} 张 · 与人工结果一致率 {{ vSuggest.consistency }}
路径导入与上传走同一套解析与匹配,不会绕过成套门禁。
一键打印 ① 银行业务组 → ② 未匹配回单 → ③ 开具发票 → ④ 取得发票 → ⑤ 工资表 → ⑥ 交易明细 → ⑦ 统计预览
本期未打印 重新打印 自选 显示历史待处理
清单 {{ oneClickTotals.count || 0 }} 份 已选 {{ oneClickSelectedCount }} 份 未打印 {{ oneClickTotals.unprinted || 0 }} 已打印 {{ oneClickTotals.printed || 0 }} 跨月待确认 {{ oneClickTotals.cross_month || 0 }} 需处理 {{ oneClickTotals.blocked || 0 }} 公司标签拦截 {{ oneClickTotals.company_blocked }} 已结账待归档 {{ oneClickTotals.locked }} 历史待处理 {{ oneClickTotals.history }}
刷新打印清单 打印排序 AI辅助排序及合规 生成打印包({{ oneClickSelectedCount }}) 按组导出 PDF(含已打印) 恢复默认排序 更多 ▾ 打印排序不调用 AI;AI辅助排序及合规在规则结果上补充判断。排序只写建议与结论,不自动改打印状态。
排序完成 · 建议打印 {{ oneClickReviewSummary.print }} · 无需打印 {{ oneClickReviewSummary.hold }} · 待核对 {{ oneClickReviewSummary.review }} · 来源:{{ oneClickReviewSummary.source }} · 调整顺序 {{ oneClickReviewSummary.moved }} 处(“关联 / 提示”列已标注)
{{ seg.name }}({{ seg.items.length }})
加载历史待处理
刷新打印清单 打印排序 AI辅助排序及合规 生成打印包({{ oneClickSelectedCount }}) 更多 ▾ 全选可打印({{ oneClickHistorySelectable }}) 清空已选(历史) 历史资料默认不勾选;勾选后随本次打印包一起输出。
排序完成 · 建议打印 {{ oneClickReviewSummary.print }} · 无需打印 {{ oneClickReviewSummary.hold }} · 待核对 {{ oneClickReviewSummary.review }} · 来源:{{ oneClickReviewSummary.source }}
{{ oneClickHistorySegment.name }}({{ oneClickHistorySegment.items.length }})
没有历史待处理资料(早于所选月份、仍未打印的资料会出现在这里)
刷新批次
打印排序与 AI 辅助排序的结论都记录在这里,按「来源」列区分;只写建议与结论,不自动改打印状态。 刷新记录
合规复核按这里的口径判断开票内容符不符合公司业务。
当前公司未单独保存要求,默认使用通用规则;保存后只对当前公司生效。
本批共 {{ oneClickPreview.items.length }} 份资料、 {{ oneClickPreview.page_count }} 页, {{ oneClickPreview.group_count }} 个原始凭证组。 请点「打印」调用浏览器打印, 打印完成后在弹窗里确认实际完成情况(打开 PDF 不等于打印成功)。
第 {{ it.seq }} 份 · {{ it.title }} · 第 {{ it.page_start }}–{{ it.page_end }} 页
- {{ it.zoomAuto ? "适应宽度" : (it.zoom + "%") }} + 按页码补打
{{ it.error || '加载中…' }}
只有确认完成的资料才会记入打印次数;未完成项保留在清单里,可以之后再打。
全部完成 部分完成(勾选未完成的资料) 全部未完成
未完成 第 {{ it.seq }} 项 · {{ it.title }} 第 {{ it.page_start }}-{{ it.page_end }} 页
下载中心 选公司发起下载;任务进度里看每一家公司的结果,失败可单独修复
所属期 全局 刷新
管理公司
{{ dcCompanyRows.length }}
当前筛选范围
已选
{{ dcSelectedCount }}
勾选后批量下载
未绑定账号
{{ dcUnboundCount }}
下载前需先绑定税局账号
下载失败
{{ dcFailedCount }}
最近任务里的失败公司
待下载
{{ dcWaitTotal }}
税局有票、原件未入库
共 {{ dcCompanyRows.length }} 家 · 待下载 {{ dcWaitTotal }} 份
无头模式(后台静默运行) 强制重新查询并核验(含此前记录为 0 的月份;已齐原件不重复下载)
下载范围默认按上方全局所属期整月;也可单独调整开始/结束日期, 或勾选无头模式 / 强制重采(与旧「下载发票」弹窗一致)。
已选 {{ dcSelectedCount }} 家 · 预计下载 {{ dcSelectedWait }} 份 清空 批量下载{{ dcSelectedCount ? '(' + dcSelectedCount + ')' : '' }}
有记录公司
{{ dcHistory.length }}
最近 500 条记录内
今日下载
{{ dcHistoryToday }}
今天有下载记录的公司
无数据
{{ dcHistoryNoData }}
最近一次查询为空
最近下载
{{ dcHistoryLatest || '—' }}
最近一次下载时间
可下载份数
{{ dcHistoryEligible }}
各公司最近一次记录合计
共 {{ dcHistoryRows.length }} 家公司 · 每行显示最近一次下载
打印中心 按属期看打印进度:哪些公司还差多少没打印;一键打印与批次记录都在这里
所属期 全局 刷新 一键打印
待打印
{{ pcUnprintedTotal }}
涉及 {{ pcPendingCompanies }} 家公司
已打印
{{ pcPrintedTotal }}
当前属期累计
本月顺延
{{ pcDeferredTotal }}
本月不打印,下月自动带出
今日批次
{{ pcTodayBatches }}
今天创建的打印批次
完成率
{{ pcDonePercent }}%
(已打印+顺延+不打印)/ 合计
共 {{ pcRows.length }} 家 · 待打印 {{ pcUnprintedTotal }} 份 · 不打印 {{ pcNoPrintTotal }} 份
按全局所属期 {{ globalYm }} 过滤 · 共 {{ pcBatches.length }} 个批次
季度核对 把税局季度统计 Excel 与系统库逐票核对:销售 / 取得分开; 一致的显示「一致」,异常的展开看缺失明细;文件缺失 / 过期 / 无效单独标出,不当作一致; 当季尚未结束只提示「尚未到最终核对时间」
刷新 开始核对 任务历史 补季度统计 批量补齐已选({{ qcSelectedRows.length }})
一致
{{ qcSummary.consistent || 0 }}
张数与金额(金额/税额/价税合计)都一致
异常
{{ qcSummary.diff || 0 }}
展开看缺失 / 多余发票明细
未找到文件
{{ qcSummary.missing || 0 }}
该公司该类型还没下载季度统计
文件无效或过期
{{ qcSummary.invalid || 0 }}
解析失败 / 内容越界 / 重复票号 / 文件名不符
待重核 / 待更新
{{ (qcSummary.stale || 0) + (qcSummary.pending || 0) + (qcSummary.not_due || 0) }}
当季未结束、文件早于季末/同步或空表
仅看异常
公司
关键词
已选 {{ qcSelectedRows.length }} 项(跨页保留) 清空选择 复制差异清单 后台核对中 {{ qcJob.done }}/{{ qcJob.total }}… 正在后台核对,列表稍后自动刷新 显示上次结果,后台正在更新… 后台核对失败:{{ qcJob.error || '未知原因' }} 核对时间 {{ qcCheckedAt || '—' }} · 共 {{ qcTotal }} 项
页面口径:核对本身只读;「补季度统计」只补季度统计与税局 0 行证据, 不重下发票原件、不生成月度任务、不跳转下载中心;原「去下载」弹窗保留。 销售与取得分别核对;文件是快照——当季尚未结束显示「尚未到最终核对时间」(只可选到上一季度), 季度已结束但文件早于季末生成显示「文件过期或待重核,请重新导出」,文件时间无法识别则提示重新导出; 空文件、解析失败、内容越界都不显示「一致」。
所属期 {{ qcYear }} 年 {{ qcQuarter }} 季度 · 完整区间 {{ (qcRepairPre && qcRepairPre.start_date) || qcQuarterRange()[0] }} ~ {{ (qcRepairPre && qcRepairPre.end_date) || qcQuarterRange()[1] }} (服务端按所属期计算,页面不可改)
只补「季度统计 Excel + 税局 0 行证据」:不重新下载发票原件、不生成月度统计任务、 不跳转下载中心;发票原件与月度统计仍走下载中心原弹窗。
{{ qcRepairPickLabel() }} 销售发票(开具) 取得发票 忽略已有有效结果重新查询并留证(留审计记录)
预检结果 共 {{ (qcRepairPre.items || []).length }} 项 · 本次真正执行 {{ qcRepairPre.to_execute || 0 }} 项 · 凭据 {{ qcRepairPre.expires_in || 600 }} 秒内有效 重新预检
{{ g.label }} {{ g.items.length }} 已按分组筛选,点同一个标签取消筛选
没有需要真正执行的项:已有有效季度结果会跳过,不创建空任务。
任务进度 {{ qcRepairTaskMeta.label }} 已完成 {{ qcRepairTaskDone }}/{{ (qcRepairTask.items || []).length }} 项 · 当前 {{ qcRepairTaskCurrent }} · {{ qcRepairPolling ? '刷新中…' : (qcRepairTask.updated_at || '') }} 取消(安全点停止) 只重试失败项({{ qcRepairTaskFailedCount }})
关闭 本次真正执行 {{ (qcRepairPre && qcRepairPre.to_execute) || 0 }} 项
公司 {{ qcEvidenceMeta.company }} · {{ qcEvidenceMeta.invoice_type }} · {{ qcEvidenceMeta.period_key }}:历次查询全部保留,最新有效版本用于核对; 截图走受控接口,不开放目录直链。
该季度三个月的月度同步状态与月度查询证据;缺证据或同步非 0 的月份不能作为 「季度无票」的依据。
查询截图
汇总数据加载失败:{{ summaryError }} 重试
开票汇总与预警 按属期统计各公司开票情况,接近额度上限时预警(列表公司默认显示简称)
查询 同步电子税务局数据 只同步勾选公司 已勾选 {{ summarySelected.length }} 家公司
工商年报 按年度维护各公司工商年报资料(列表公司默认显示简称)
查询 重置
共 {{ arSummary.total || 0 }} 家 已填报 {{ arSummary.reported || 0 }} 未填报 {{ arSummary.unreported || 0 }} 正常 {{ arSummary.normal || 0 }} 异常 {{ arSummary.abnormal || 0 }} 待检查 {{ arSummary.pending || 0 }}
版本与更新 版本来源:云效代码库(正式发布标签)。更新由本机独立代理执行,全程留痕。
检查更新
开发机默认关闭本功能;正式机需在 invoice-platform/.env 设置 UPDATE_ENABLED=1 并重启服务。
发现新版本 {{ systemUpdateState.target_version || '—' }}。 准备阶段已完成,业务当前处于只读状态。
预计停服时间约 1 分钟;期间所有页面暂不可用,完成后自动恢复使用。
将更新到 {{ systemUpdateState.target_version || '—' }}。 业务已暂停,确认后进入停服窗口,预计 1 分钟。
{{ systemUpdateLogText }}
用户授权 查看用户并分配可访问的公司范围;账号与权限点在认证平台维护
去认证平台管理用户权限 →
用户-公司授权
查询
用户列表加载失败:{{ authUsersError }} 重试
公司列表加载失败:{{ companiesError }} 重试
公司管理 公司主数据、回收站、登录账号与地区网址(按权限显示,列表默认显示简称)
新增公司
取消同步 查看明细 消失的公司不会自动处理,确认后才移入回收站;新增公司请补全联系人等信息
{{ companySyncTask.sms_reinput ? '验证码错误,请重新输入后再提交(不会重发短信):' : '税局已发送短信验证码,请在此输入:' }} 提交验证码
查询 重置
导入信息 立即同步公司名单 批量设置账号 移入回收站 已选 {{ companySelected.length }} 家公司
新增 = 本次同步在账号名单里新出现的公司(需要补全信息); 疑似移除 = 公司已不在账号名单里,确认后才移入回收站。

选择该公司的电子税务局登录账号;相同账号+地区会复用登录状态。

为选中的 {{ companySelected.length }} 家公司统一绑定同一个账号。

查询 重置 恢复所选 彻底删除所选 共 {{ recycledCompanies.length }} 家(历史数据保留,可恢复)
新增账号 相同账号+地区复用登录状态;密码加密存储,仅任务使用。
代理登录 企业登录
新增地区 刷新 地区/网址保存在数据库,登录与下载直接使用这里的配置

暂无关联公司

已填报 未填报 正常 异常 待检查
jpg/png/webp,≤10MB,每年 1 张;重新选择即覆盖
{{ customerPrintForm.company_name }} {{ customerPrintForm.invoice_type }} {{ customerPrintForm.invoice_no || customerPrintForm.digital_invoice_no || '—' }} {{ customerPrintForm.invoice_code || '—' }} {{ (customerPrintForm.invoice_date || '').slice(0, 10) || '—' }} {{ customerPrintForm.counterparty_name || '—' }} {{ customerPrintForm.total_amount || customerPrintForm.amount || '—' }}
拖入或选择一批文件(回单 PDF / 交易明细 Excel·PDF·OFD,一次最多 50 份)。 类型按文件格式与内容硬约束判定;公司优先按内容证据自动匹配, 未匹配到时可以人工选择(人工选择会记录操作日志)。
把文件拖到这里,或 点击选择(最多 50 份)
开始识别({{ unifiedFiles.length }} 份) 关闭
归档结果:成功 {{ unifiedResult.archived }} 份 · {{ it.file_name }}({{ unifiedKindLabel(it.kind) }}
失败:{{ unifiedResult.failed.map(f => f.file_name + '(' + f.reason + ')').join(';') }}
相同文件跳过({{ unifiedSkipped.length }} 份,不进入复核/归档)
{{ it.file_name }}:{{ it.reason }}
已有资料: {{ e.company }} · {{ e.category }} · {{ e.state === 'recycled' ? '在回收站(可恢复)' : '活跃' }} 查看
系统存在内容相同的文件(本次跳过;无权查看详情,请联系管理员核对)
查重失败({{ unifiedFailedPrechecks.length }} 份,未识别、未归档)
{{ it.file_name }}:{{ it.reason }}
状态:{{ uploadTaskStatusLabel(uploadTask.status) }} · 成功 {{ uploadTask.archived || 0 }} 份 · 失败 {{ uploadTask.failed }} 份 (共 {{ uploadTask.total || 0 }} 份) · {{ uploadTask.error }}
未受理:{{ (uploadTask.rejected || []).map(r => (r.file_name || '') + '(' + (r.reason || '未受理') + ')').join(';') }}
公司:{{ importPrintedResult.company || '—' }} 月份:{{ importPrintedResult.month || '—' }} 合计:{{ importPrintedResult.total }} 项 可确认:{{ importPrintedResult.ready_count }} 项 缺失:{{ importPrintedResult.missing_count }} 项
缺失 {{ importPrintedResult.missing.length }} 项(系统里没有这张票,或没有原件文件)
{{ u.invoice_no }} ({{ u.invoice_code }}) {{ u.reason_text }} 备注:{{ u.remark }} 上传原件
可确认 {{ importPrintedResult.ready.length }} 项(确认后把下列文件标记为已打印,与发票列表显示的文件一致)
{{ m.invoice_no }} {{ m.counterparty_name || '' }} {{ m.file_name }} {{ m.print_count ? ('已打印 ' + m.print_count + ' 次') : '未打印' }}

确认时间:{{ importPrintedResult.confirmed_at }}  操作人:{{ importPrintedResult.operator }}

{{ importPrintedResult.already_count }} 项此前已是已打印(未重复计数)
{{ u.invoice_no }} {{ u.file_name }} 已打印 {{ u.print_count }} 次
已跳过 {{ importPrintedResult.skipped.length }} 项(未标记为已打印)
{{ u.invoice_no }} {{ u.reason_text }}
已确认清单与跳过清单可下载为「确认明细」表格,包含确认时间与操作人。

请确认打印机是否已经成功打印 {{ currentFile?.file_name }}?

共 {{ batchDoneList.length }} 份,是否全部打印完成?

请勾选没有打印完成的份(未勾选的视为已打印完成):

{{ it.label }}
{{ h.status === 'success' ? '已打印' : '取消' }} - {{ h.operator }} {{ h.note }} 无头模式(后台静默运行,不显示浏览器窗口) 强制重采(忽略“已完整一致/数量没变”判断,重新整段采集;含此前记录为 0 的月份,已齐原件不重复下载)
{{ fetchTask.sms_reinput_note || '验证码错误,请重新输入(还可重试 1 次)' }}
{{ fetchTask.sms_reinput ? '重新输入验证码后再点“提交验证码”,本次不会重发短信' : (fetchTask.sms_waiting ? '短信验证码已发送:如自动转发失败,请手动输入收到的验证码' : '等待系统发送短信验证码…(发送后才能输入)') }}
提交验证码
关闭 停止 开始更新
拖拽文件到此处,或点击选择(支持 PDF/OFD/XML/图片/Excel/Word/压缩包)
  • {{ f.name }}
识别结果确认(可修改后确认上传)
勾选该用户可见的公司(普通用户只能查看/操作授权公司的数据)
全选 已选 {{ ucCompanies.length }} / {{ companies.length }} 家
{{ c.name }}
该用户可见 {{ ucViewCompanies.length }} 家公司
{{ c }} 未分配公司
未找到电子税务局下载的发票明细/统计文件
当前月份没有明细/统计文件(取消勾选“只显示当月”可查看全部)

勾选需要下载的格式(只下载所选行中存在的对应格式原件,可多选):

全部格式 {{ fmtName(fmt) }}
按开票日期自动归入对应所属期归档,无需手动选择所属期。
发起前预检 正在预检… 预检 {{ downloadPrecheck.checked_at }} · 可复用 {{ (downloadPrecheck.summary || {}).reuse_items || 0 }} 项 (对应少查税局 / 少输入日期)· 需重查 {{ (downloadPrecheck.summary || {}).requery_items || 0 }} 项 重新预检
{{ downloadPrecheck.error }}
选好公司与日期后自动预检:自检通过的默认复用;当期、缺失或自检不通过的重查。
资料状态(与下载中心同一预检) {{ downloadPrecheck.flightError }} 共 {{ (downloadPrecheck.flight.summary || {}).total || 0 }} 项 · 已齐将跳过 {{ (downloadPrecheck.flight.summary || {}).complete || 0 }} · 缺项待处理 {{ (downloadPrecheck.flight.summary || {}).missing || 0 }} · 待就绪续接 {{ (downloadPrecheck.flight.summary || {}).waiting || 0 }}
无头模式(后台静默运行,不显示浏览器窗口) 强制重采 / 仍要重新查询并核验(含此前记录为 0 的月份;已有发票原件仍跳过,不重复下载;季度统计是否重导见任务结果)
公司处理进度:共 {{ downloadTask.company_total || 0 }} 家,剩余 {{ downloadTask.company_remaining || 0 }} 家 (已完成 {{ (downloadTask.company_total || 0) - (downloadTask.company_remaining || 0) }} 家)
当前公司 {{ downloadLive.current || '—' }} · 阶段 {{ downloadLive.phase || '—' }} · 已生成待二阶段下载 {{ downloadLive.pending2 }} 项 · 最近有效进度 {{ downloadTask.updated_at || '—' }} · 下一次可执行时间 {{ downloadTask.next_check_at }}
{{ downloadTask.cancel_note || '停止请求已发送,等待当前步骤到安全点…' }} · {{ downloadTask.stalled_note || '疑似停滞:长时间无新进度(未自动失败,未自动重跑)' }}
{{ downloadTask.sms_reinput_note || '验证码错误,请重新输入(还可重试 1 次)' }}
{{ downloadTask.sms_reinput ? '重新输入验证码后再点“提交验证码”,本次不会重发短信' : (downloadTask.sms_waiting ? '短信验证码已发送:如自动转发失败,请手动输入收到的验证码' : '等待系统发送短信验证码…(发送后才能输入)') }}
提交验证码
完整性校验明细 “有问题 1” = 一个公司 × 月份的校验项;修复时分统计文件 / 压缩包 / 票号格式 仅看问题
资料明细 关闭 停止 开始下载
共 {{ dcDetailTotal }} 项:已完整 {{ dcDetailSummary.complete || 0 }} · 缺项 {{ dcDetailSummary.missing || 0 }} · 待就绪 {{ dcDetailSummary.waiting || 0 }} · 未绑定账号公司 {{ dcDetailSummary.unbound_accounts }} 家 · 失败分组 {{ dcDetailSummary.group_failures }} 个 (流程结束不等于资料齐全;缺项请按行核对后再补)