@huicai/cli 2026.714.0 → 2026.721.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/README.md +2 -1
  2. package/bin/huicai.js +83 -0
  3. package/package.json +2 -2
  4. package/skills/ab-testing/SKILL.md +58 -0
  5. package/skills/ab-testing/scripts/__pycache__/ab_test.cpython-312.pyc +0 -0
  6. package/skills/ab-testing/scripts/ab_test.py +71 -0
  7. package/skills/academic-writing/SKILL.md +54 -0
  8. package/skills/accounting-ops/SKILL.md +68 -0
  9. package/skills/accounting-ops/scripts/__pycache__/acct_tools.cpython-312.pyc +0 -0
  10. package/skills/accounting-ops/scripts/acct_tools.py +89 -0
  11. package/skills/ai-agent/SKILL.md +85 -0
  12. package/skills/ai-agent/references/tool-design-checklist.md +51 -0
  13. package/skills/ai-aiops/SKILL.md +73 -0
  14. package/skills/ai-aiops/references/aiops-rollout-checklist.md +36 -0
  15. package/skills/ai-coding/SKILL.md +89 -0
  16. package/skills/ai-coding/references/task-brief-template.md +48 -0
  17. package/skills/ai-compliance/SKILL.md +74 -0
  18. package/skills/ai-compliance/references/genai-compliance-checklist.md +40 -0
  19. package/skills/ai-eval/SKILL.md +80 -0
  20. package/skills/ai-eval/scripts/eval-runner.py +150 -0
  21. package/skills/ai-llm-app/SKILL.md +90 -0
  22. package/skills/ai-llm-app/references/llm-integration-checklist.md +39 -0
  23. package/skills/ai-mlops/SKILL.md +72 -0
  24. package/skills/ai-mlops/scripts/token-cost-calc.py +108 -0
  25. package/skills/ai-multimodal/SKILL.md +86 -0
  26. package/skills/ai-multimodal/scripts/field-validate.py +182 -0
  27. package/skills/ai-prompt/SKILL.md +75 -0
  28. package/skills/ai-prompt/references/prompt-template.md +46 -0
  29. package/skills/ai-rag/SKILL.md +76 -0
  30. package/skills/ai-rag/scripts/chunk-inspect.py +129 -0
  31. package/skills/anomaly-detection/SKILL.md +54 -0
  32. package/skills/anomaly-detection/scripts/__pycache__/anomaly.cpython-312.pyc +0 -0
  33. package/skills/anomaly-detection/scripts/anomaly.py +99 -0
  34. package/skills/api-integration/SKILL.md +74 -0
  35. package/skills/api-integration/references/signing-recipes.md +141 -0
  36. package/skills/arch-design/SKILL.md +57 -0
  37. package/skills/arch-distributed/SKILL.md +81 -0
  38. package/skills/arch-distributed/references/idempotency-review.md +43 -0
  39. package/skills/arch-multitenant/SKILL.md +73 -0
  40. package/skills/arch-multitenant/references/tenant-isolation-checklist.md +34 -0
  41. package/skills/audit-assist/SKILL.md +63 -0
  42. package/skills/audit-assist/scripts/__pycache__/audit_sampling.cpython-312.pyc +0 -0
  43. package/skills/audit-assist/scripts/audit_sampling.py +93 -0
  44. package/skills/audit-chain/SKILL.md +60 -0
  45. package/skills/banking-credit/SKILL.md +59 -0
  46. package/skills/banking-credit/scripts/__pycache__/credit_metrics.cpython-312.pyc +0 -0
  47. package/skills/banking-credit/scripts/credit_metrics.py +53 -0
  48. package/skills/brand-design/SKILL.md +56 -0
  49. package/skills/business-plan/SKILL.md +56 -0
  50. package/skills/capital-ops/SKILL.md +52 -0
  51. package/skills/cicd-pipeline/SKILL.md +85 -0
  52. package/skills/cicd-pipeline/references/pipeline-review-checklist.md +39 -0
  53. package/skills/content-creation/SKILL.md +56 -0
  54. package/skills/corporate-governance/SKILL.md +56 -0
  55. package/skills/crawl-chain/SKILL.md +61 -0
  56. package/skills/customer-service/SKILL.md +51 -0
  57. package/skills/data-analysis/SKILL.md +46 -0
  58. package/skills/data-analysis/scripts/cjk_font.py +56 -0
  59. package/skills/data-chain/SKILL.md +54 -0
  60. package/skills/data-governance/SKILL.md +54 -0
  61. package/skills/data-report-pro/SKILL.md +65 -0
  62. package/skills/data-report-pro/scripts/__pycache__/bigdata.cpython-312.pyc +0 -0
  63. package/skills/data-report-pro/scripts/bigdata.py +79 -0
  64. package/skills/data-streaming/SKILL.md +87 -0
  65. package/skills/data-streaming/references/job-checklist.md +36 -0
  66. package/skills/data-wrangling/SKILL.md +52 -0
  67. package/skills/data-wrangling/scripts/__pycache__/join_tools.cpython-312.pyc +0 -0
  68. package/skills/data-wrangling/scripts/join_tools.py +99 -0
  69. package/skills/db-es/SKILL.md +68 -0
  70. package/skills/db-es/scripts/es-health.sh +72 -0
  71. package/skills/db-migration/SKILL.md +72 -0
  72. package/skills/db-migration/scripts/checksum-mysql.sql +46 -0
  73. package/skills/db-migration/scripts/checksum-postgres.sql +39 -0
  74. package/skills/db-migration/scripts/compare-reports.py +98 -0
  75. package/skills/db-mysql/SKILL.md +78 -0
  76. package/skills/db-mysql/scripts/mysql-health.sql +80 -0
  77. package/skills/db-postgres/SKILL.md +86 -0
  78. package/skills/db-postgres/scripts/pg-health.sql +67 -0
  79. package/skills/db-redis/SKILL.md +83 -0
  80. package/skills/db-redis/scripts/redis-health.sh +92 -0
  81. package/skills/dev-cpp/SKILL.md +94 -0
  82. package/skills/dev-cpp/references/cmake-sanitizer-snippets.md +56 -0
  83. package/skills/dev-cross-platform/SKILL.md +73 -0
  84. package/skills/dev-cross-platform/references/capability-matrix-template.md +39 -0
  85. package/skills/dev-csharp/SKILL.md +96 -0
  86. package/skills/dev-csharp/references/review-checklist.md +37 -0
  87. package/skills/dev-frontend/SKILL.md +91 -0
  88. package/skills/dev-frontend/scripts/bundle-budget.py +106 -0
  89. package/skills/dev-go/SKILL.md +88 -0
  90. package/skills/dev-go/scripts/go-triage.sh +54 -0
  91. package/skills/dev-harmony/SKILL.md +64 -0
  92. package/skills/dev-harmony/references/harmony-checklist.md +40 -0
  93. package/skills/dev-java/SKILL.md +77 -0
  94. package/skills/dev-java/scripts/jvm-triage.sh +84 -0
  95. package/skills/dev-mobile/SKILL.md +82 -0
  96. package/skills/dev-mobile/references/store-compliance-checklist.md +33 -0
  97. package/skills/dev-node/SKILL.md +82 -0
  98. package/skills/dev-node/scripts/node-triage.sh +78 -0
  99. package/skills/dev-php/SKILL.md +86 -0
  100. package/skills/dev-php/scripts/fpm-calc.py +48 -0
  101. package/skills/dev-python/SKILL.md +81 -0
  102. package/skills/dev-python/scripts/venv-doctor.sh +75 -0
  103. package/skills/dev-rust/SKILL.md +84 -0
  104. package/skills/dev-rust/references/cargo-ci-snippets.md +50 -0
  105. package/skills/dev-toolchain/SKILL.md +78 -0
  106. package/skills/dev-toolchain/scripts/secret-scan.sh +83 -0
  107. package/skills/doc-chain/SKILL.md +58 -0
  108. package/skills/doc-compare/SKILL.md +44 -0
  109. package/skills/doc-compare/scripts/compare.py +93 -0
  110. package/skills/docx-author/SKILL.md +39 -0
  111. package/skills/docx-author/scripts/docx_doc.py +161 -0
  112. package/skills/ecommerce-ops/SKILL.md +54 -0
  113. package/skills/ecommerce-ops/scripts/__pycache__/gmv_decompose.cpython-312.pyc +0 -0
  114. package/skills/ecommerce-ops/scripts/gmv_decompose.py +61 -0
  115. package/skills/education-training/SKILL.md +53 -0
  116. package/skills/ehs-safety/SKILL.md +63 -0
  117. package/skills/email-writing/SKILL.md +52 -0
  118. package/skills/eng-ai/SKILL.md +74 -0
  119. package/skills/eng-ai/references/ai-feature-checklist.md +36 -0
  120. package/skills/eng-architecture/SKILL.md +85 -0
  121. package/skills/eng-architecture/scripts/capacity-calc.py +100 -0
  122. package/skills/eng-automation/SKILL.md +84 -0
  123. package/skills/eng-automation/references/automation-inventory.md +38 -0
  124. package/skills/eng-automation/references/routine-presets.md +73 -0
  125. package/skills/eng-collaboration/SKILL.md +76 -0
  126. package/skills/eng-collaboration/references/collab-templates.md +43 -0
  127. package/skills/eng-complex-env/SKILL.md +84 -0
  128. package/skills/eng-complex-env/references/env-dossier-template.md +52 -0
  129. package/skills/eng-complex-env/scripts/env-recon.sh +152 -0
  130. package/skills/eng-data-platform/SKILL.md +81 -0
  131. package/skills/eng-data-platform/references/table-spec-template.md +39 -0
  132. package/skills/eng-database/SKILL.md +79 -0
  133. package/skills/eng-database/references/schema-review-checklist.md +37 -0
  134. package/skills/eng-develop/SKILL.md +76 -0
  135. package/skills/eng-develop/references/dod-checklist.md +43 -0
  136. package/skills/eng-docs/SKILL.md +71 -0
  137. package/skills/eng-docs/references/runbook-template.md +57 -0
  138. package/skills/eng-efficiency/SKILL.md +75 -0
  139. package/skills/eng-efficiency/scripts/dora-calc.py +104 -0
  140. package/skills/eng-infra/SKILL.md +81 -0
  141. package/skills/eng-infra/references/production-readiness.md +46 -0
  142. package/skills/eng-integration/SKILL.md +82 -0
  143. package/skills/eng-integration/references/integration-dossier-template.md +38 -0
  144. package/skills/eng-legacy/SKILL.md +81 -0
  145. package/skills/eng-legacy/references/modernization-workbook.md +46 -0
  146. package/skills/eng-observability/SKILL.md +78 -0
  147. package/skills/eng-observability/scripts/slo-calc.py +82 -0
  148. package/skills/eng-ops/SKILL.md +74 -0
  149. package/skills/eng-ops/references/postmortem-template.md +67 -0
  150. package/skills/eng-performance/SKILL.md +73 -0
  151. package/skills/eng-performance/scripts/perf-baseline.py +110 -0
  152. package/skills/eng-planning/SKILL.md +79 -0
  153. package/skills/eng-planning/scripts/schedule-calc.py +101 -0
  154. package/skills/eng-quality/SKILL.md +74 -0
  155. package/skills/eng-quality/references/test-plan-templates.md +46 -0
  156. package/skills/eng-release/SKILL.md +78 -0
  157. package/skills/eng-release/references/release-plan-template.md +36 -0
  158. package/skills/eng-reliability/SKILL.md +72 -0
  159. package/skills/eng-reliability/references/resilience-review.md +43 -0
  160. package/skills/eng-requirements/SKILL.md +86 -0
  161. package/skills/eng-requirements/references/story-templates.md +47 -0
  162. package/skills/eng-research/SKILL.md +73 -0
  163. package/skills/eng-research/references/research-templates.md +42 -0
  164. package/skills/eng-security/SKILL.md +73 -0
  165. package/skills/eng-security/references/security-review-checklist.md +33 -0
  166. package/skills/eng-ux/SKILL.md +85 -0
  167. package/skills/eng-ux/references/ux-review-checklist.md +36 -0
  168. package/skills/engineering-chain/SKILL.md +101 -0
  169. package/skills/engineering-chain/references/eng-health-review.md +37 -0
  170. package/skills/env-offline/SKILL.md +81 -0
  171. package/skills/env-offline/scripts/bundle-manifest.sh +94 -0
  172. package/skills/env-private-deploy/SKILL.md +72 -0
  173. package/skills/env-private-deploy/references/delivery-templates.md +35 -0
  174. package/skills/env-xinchuang/SKILL.md +73 -0
  175. package/skills/env-xinchuang/references/adaptation-matrix-template.md +41 -0
  176. package/skills/equipment-tpm/SKILL.md +56 -0
  177. package/skills/equipment-tpm/scripts/oee.py +58 -0
  178. package/skills/esg-report/SKILL.md +58 -0
  179. package/skills/esg-report/scripts/carbon_calc.py +61 -0
  180. package/skills/event-management/SKILL.md +51 -0
  181. package/skills/excel-analysis-chain/SKILL.md +73 -0
  182. package/skills/file-ingest/SKILL.md +51 -0
  183. package/skills/file-ingest/scripts/__pycache__/file_toolkit.cpython-312.pyc +0 -0
  184. package/skills/file-ingest/scripts/file_toolkit.py +404 -0
  185. package/skills/finance-analysis/SKILL.md +60 -0
  186. package/skills/finance-analysis/references/ratios.md +54 -0
  187. package/skills/finance-analysis/scripts/fin_ratios.py +132 -0
  188. package/skills/finance-chain/SKILL.md +59 -0
  189. package/skills/financial-modeling/SKILL.md +58 -0
  190. package/skills/financial-modeling/scripts/fin_model.py +123 -0
  191. package/skills/foreign-trade/SKILL.md +54 -0
  192. package/skills/funnel-cohort/SKILL.md +53 -0
  193. package/skills/funnel-cohort/scripts/__pycache__/funnel.cpython-312.pyc +0 -0
  194. package/skills/funnel-cohort/scripts/funnel.py +105 -0
  195. package/skills/gov-document/SKILL.md +57 -0
  196. package/skills/hr-chain/SKILL.md +51 -0
  197. package/skills/hr-operations/SKILL.md +53 -0
  198. package/skills/info-disclosure/SKILL.md +56 -0
  199. package/skills/infra-gateway/SKILL.md +85 -0
  200. package/skills/infra-gateway/references/golive-checklist.md +36 -0
  201. package/skills/infra-k8s/SKILL.md +78 -0
  202. package/skills/infra-k8s/scripts/k8s-triage.sh +84 -0
  203. package/skills/infra-mq/SKILL.md +87 -0
  204. package/skills/infra-mq/references/mq-review-checklist.md +36 -0
  205. package/skills/insurance-advisory/SKILL.md +57 -0
  206. package/skills/internal-audit/SKILL.md +66 -0
  207. package/skills/ip-management/SKILL.md +54 -0
  208. package/skills/ipo-listing/SKILL.md +60 -0
  209. package/skills/it-audit/SKILL.md +56 -0
  210. package/skills/itsm-ops/SKILL.md +55 -0
  211. package/skills/knowledge-sop/SKILL.md +51 -0
  212. package/skills/legal-chain/SKILL.md +55 -0
  213. package/skills/legal-contract/SKILL.md +58 -0
  214. package/skills/legal-contract/references/contract-checklists.md +59 -0
  215. package/skills/litigation-support/SKILL.md +53 -0
  216. package/skills/logistics-warehouse/SKILL.md +53 -0
  217. package/skills/logistics-warehouse/scripts/freight_check.py +71 -0
  218. package/skills/long-doc-analysis/SKILL.md +52 -0
  219. package/skills/management-accounting/SKILL.md +57 -0
  220. package/skills/management-accounting/scripts/__pycache__/costing.cpython-312.pyc +0 -0
  221. package/skills/management-accounting/scripts/costing.py +90 -0
  222. package/skills/manufacturing-chain/SKILL.md +57 -0
  223. package/skills/manufacturing-quality/SKILL.md +57 -0
  224. package/skills/manufacturing-quality/scripts/__pycache__/spc.cpython-312.pyc +0 -0
  225. package/skills/manufacturing-quality/scripts/spc.py +86 -0
  226. package/skills/marketing-analytics/SKILL.md +59 -0
  227. package/skills/marketing-analytics/scripts/__pycache__/rfm.cpython-312.pyc +0 -0
  228. package/skills/marketing-analytics/scripts/rfm.py +60 -0
  229. package/skills/marketing-chain/SKILL.md +57 -0
  230. package/skills/meeting-minutes/SKILL.md +55 -0
  231. package/skills/metrics-system/SKILL.md +55 -0
  232. package/skills/negotiation-prep/SKILL.md +56 -0
  233. package/skills/obs-prometheus/SKILL.md +74 -0
  234. package/skills/obs-prometheus/references/promql-cheatsheet.md +78 -0
  235. package/skills/office-automation/SKILL.md +54 -0
  236. package/skills/okr-review/SKILL.md +44 -0
  237. package/skills/ops-fleet/SKILL.md +69 -0
  238. package/skills/ops-fleet/scripts/batch-exec-guard.sh +119 -0
  239. package/skills/ops-linux/SKILL.md +69 -0
  240. package/skills/ops-linux/scripts/quick-triage.sh +138 -0
  241. package/skills/optimization-solver/SKILL.md +53 -0
  242. package/skills/optimization-solver/scripts/__pycache__/solver.cpython-312.pyc +0 -0
  243. package/skills/optimization-solver/scripts/solver.py +107 -0
  244. package/skills/pdf-toolkit/SKILL.md +43 -0
  245. package/skills/pdf-toolkit/scripts/pdf_ops.py +137 -0
  246. package/skills/pivot-crosstab/SKILL.md +44 -0
  247. package/skills/pivot-crosstab/scripts/__pycache__/pivot_tools.cpython-312.pyc +0 -0
  248. package/skills/pivot-crosstab/scripts/pivot_tools.py +90 -0
  249. package/skills/policy-analysis/SKILL.md +47 -0
  250. package/skills/portfolio-analysis/SKILL.md +56 -0
  251. package/skills/portfolio-analysis/scripts/__pycache__/portfolio.cpython-312.pyc +0 -0
  252. package/skills/portfolio-analysis/scripts/portfolio.py +78 -0
  253. package/skills/ppt-chain/SKILL.md +61 -0
  254. package/skills/pptx-author/SKILL.md +48 -0
  255. package/skills/pptx-author/scripts/pptx_deck.py +193 -0
  256. package/skills/pr-comms/SKILL.md +58 -0
  257. package/skills/pr-comms/references/pr-templates.md +54 -0
  258. package/skills/procurement-supply/SKILL.md +47 -0
  259. package/skills/procurement-supply/scripts/__pycache__/supply.cpython-312.pyc +0 -0
  260. package/skills/procurement-supply/scripts/supply.py +71 -0
  261. package/skills/product-design/SKILL.md +66 -0
  262. package/skills/product-design/references/prd-framework.md +60 -0
  263. package/skills/production-planning/SKILL.md +56 -0
  264. package/skills/production-planning/scripts/__pycache__/mrp_capacity.cpython-312.pyc +0 -0
  265. package/skills/production-planning/scripts/mrp_capacity.py +70 -0
  266. package/skills/project-management/SKILL.md +53 -0
  267. package/skills/project-management/scripts/__pycache__/cpm.cpython-312.pyc +0 -0
  268. package/skills/project-management/scripts/cpm.py +84 -0
  269. package/skills/project-proposal/SKILL.md +54 -0
  270. package/skills/project-proposal/scripts/budget_sheet.py +90 -0
  271. package/skills/qa-api-automation/SKILL.md +67 -0
  272. package/skills/qa-api-automation/references/three-layer-skeleton.md +61 -0
  273. package/skills/qa-mobile-automation/SKILL.md +70 -0
  274. package/skills/qa-mobile-automation/references/device-matrix-template.md +34 -0
  275. package/skills/qa-ui-automation/SKILL.md +80 -0
  276. package/skills/qa-ui-automation/references/stability-conventions.md +41 -0
  277. package/skills/quant-analysis/SKILL.md +60 -0
  278. package/skills/quant-analysis/scripts/__pycache__/quant.cpython-312.pyc +0 -0
  279. package/skills/quant-analysis/scripts/quant.py +102 -0
  280. package/skills/real-estate-property/SKILL.md +51 -0
  281. package/skills/real-estate-property/scripts/__pycache__/property_calc.cpython-312.pyc +0 -0
  282. package/skills/real-estate-property/scripts/property_calc.py +106 -0
  283. package/skills/regression-forecast/SKILL.md +52 -0
  284. package/skills/regression-forecast/scripts/__pycache__/regress.cpython-312.pyc +0 -0
  285. package/skills/regression-forecast/scripts/regress.py +106 -0
  286. package/skills/retail-store-ops/SKILL.md +57 -0
  287. package/skills/retail-store-ops/scripts/store_ops.py +57 -0
  288. package/skills/risk-compliance/SKILL.md +51 -0
  289. package/skills/sec-auth/SKILL.md +89 -0
  290. package/skills/sec-auth/references/auth-review-checklist.md +38 -0
  291. package/skills/sec-compliance/SKILL.md +74 -0
  292. package/skills/sec-compliance/references/dengbao-checklist.md +43 -0
  293. package/skills/securities-chain/SKILL.md +69 -0
  294. package/skills/securities-research/SKILL.md +58 -0
  295. package/skills/securities-research/scripts/__pycache__/valuation.cpython-312.pyc +0 -0
  296. package/skills/securities-research/scripts/valuation.py +93 -0
  297. package/skills/slides-html/SKILL.md +50 -0
  298. package/skills/slides-html/scripts/template.html +117 -0
  299. package/skills/statistical-testing/SKILL.md +51 -0
  300. package/skills/statistical-testing/scripts/__pycache__/stat_tests.cpython-312.pyc +0 -0
  301. package/skills/statistical-testing/scripts/stat_tests.py +131 -0
  302. package/skills/strategy-planning/SKILL.md +53 -0
  303. package/skills/supply-chain/SKILL.md +53 -0
  304. package/skills/tax-compliance/SKILL.md +57 -0
  305. package/skills/tax-compliance/scripts/tax_calc.py +90 -0
  306. package/skills/tech-research/SKILL.md +55 -0
  307. package/skills/tech-research/references/research-framework.md +50 -0
  308. package/skills/tender-bidding/SKILL.md +65 -0
  309. package/skills/tender-bidding/references/bid-checklist.md +44 -0
  310. package/skills/translation-pro/SKILL.md +44 -0
  311. package/skills/treasury-mgmt/SKILL.md +56 -0
  312. package/skills/treasury-mgmt/scripts/__pycache__/cashflow_forecast.cpython-312.pyc +0 -0
  313. package/skills/treasury-mgmt/scripts/cashflow_forecast.py +51 -0
  314. package/skills/web-scraping/SKILL.md +81 -0
  315. package/skills/web-search/SKILL.md +67 -0
  316. package/skills/xlsx-analysis/SKILL.md +96 -0
  317. package/skills/xlsx-analysis/scripts/__pycache__/xlsx_toolkit.cpython-312.pyc +0 -0
  318. package/skills/xlsx-analysis/scripts/xlsx_style.py +71 -0
  319. package/skills/xlsx-analysis/scripts/xlsx_toolkit.py +335 -0
  320. package/src/agent.js +1 -1
  321. package/src/api.js +1 -1
  322. package/src/codeindex.js +1 -1
  323. package/src/commands.js +1 -1
  324. package/src/config.js +1 -1
  325. package/src/context.js +1 -1
  326. package/src/doccache.js +1 -0
  327. package/src/doctor.js +1 -1
  328. package/src/executors.js +1 -1
  329. package/src/input.js +1 -1
  330. package/src/permissions.js +1 -1
  331. package/src/pyruntime.js +1 -0
  332. package/src/repl.js +1 -1
  333. package/src/scan.js +1 -1
  334. package/src/tools.js +1 -1
  335. package/src/tui/app.js +1 -1
@@ -0,0 +1,57 @@
1
+ ---
2
+ name: arch-design
3
+ description: 架构设计与决策(架构方案、ADR 决策记录、非功能需求清单、容量估算、技术债台账)。当用户说"设计架构/技术方案/选型定了怎么记/系统能扛多少/技术债"时使用。工程技能链之设计环。
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # 架构设计与决策(工程技能链 · 设计环;全景见 engineering-chain)
8
+
9
+ ## 架构方案文档(先约束后方案)
10
+
11
+ 结构:业务背景与目标 → **非功能需求清单**(见下,先于方案锁定)→ 现状与约束
12
+ (存量系统/团队栈/预算/合规)→ 方案总览(分层图文字版:组件-职责-依赖-数据流)→
13
+ 关键设计决策(每个引 ADR)→ 备选方案与否决理由(**没有备选=没有设计,只是实现**)→
14
+ 演进路径(一期二期边界)→ 风险与预案。
15
+ 评审对着非功能清单过,不对"我喜欢微服务"过。
16
+
17
+ ## 非功能需求清单(逐项给数字,"高可用"不是需求)
18
+
19
+ 性能(P99 延迟/吞吐 QPS,给业务依据)/ 可用性(SLO 几个 9 + 错误预算,联动 itsm-ops)/
20
+ 扩展性(数据量与流量的 18 个月预估)/ 一致性(强一致还是最终一致,哪些环节可降级)/
21
+ 安全合规(认证鉴权/数据分级 data-governance/审计留痕)/ 可观测(日志指标追踪三件套要求)/
22
+ 成本(月度预算上限)/ 运维性(发布频率/回滚时长要求)。
23
+
24
+ ## ADR 架构决策记录(决策的版本控制)
25
+
26
+ 一事一条,格式:
27
+ ```
28
+ # ADR-NNN: <决策一句话>
29
+ 状态: 提议/已接受/已废弃(被 ADR-MMM 取代)
30
+ 背景: 什么问题逼出这个决策(含当时的约束与数字)
31
+ 选项: A/B/C 各自的利弊(诚实写,别把否决项写成稻草人)
32
+ 决策: 选了什么 + 决定性理由(1-2 条,不是 10 条)
33
+ 后果: 正面 + 负面(负面必须写——没有代价的决策不存在)+ 触发重估的条件
34
+ ```
35
+ 纪律:**推翻旧决策必须新增 ADR 引用旧编号**,不许默默改;新人读完 ADR 目录应能理解系统为什么长这样。
36
+
37
+ ## 容量估算(信封背面算法,量级对就够)
38
+
39
+ 流量入手:DAU × 人均请求 ÷ 86400 × 峰值系数(3–10 按业务)= 峰值 QPS;
40
+ 存储:日增记录 × 行大小 × 保留期 × 副本数(+索引膨胀 ~50%);
41
+ 带宽:QPS × 平均响应体;连接数/线程池按小学算术推;
42
+ **给出计算过程与假设**,拍脑袋容量是事故预定单;与压测对照(估算是设计输入,压测是验收)。
43
+
44
+ ## 技术债台账(还债要立项,先记账)
45
+
46
+ 字段:债项/引入原因(当时的合理性——**技术债多数是当时正确的权衡**,记录避免猎巫)/
47
+ 影响(开发效率/故障率/扩展受阻,量化最好)/ 利息(每月为它多付出什么)/
48
+ 还债方案与工作量 / 优先级(影响×利息÷成本);
49
+ 节奏:每季评审,迭代容量的 10–20% 固定还债(写进排期,project-management);
50
+ 新债审批:明知引入的债必须记账并给还期。
51
+
52
+ ## 验收自查
53
+
54
+ - [ ] 非功能逐项有数字与依据
55
+ - [ ] 每个关键决策有 ADR 且含否决项与负面后果
56
+ - [ ] 容量估算给了过程,与压测计划挂钩
57
+ - [ ] 技术债有台账与还债排期
@@ -0,0 +1,81 @@
1
+ ---
2
+ name: arch-distributed
3
+ description: 分布式系统链(第一判据能单机别分布式→分布式事务判据表(2PC/TCC/SAGA/outbox,默认最终一致+对账)→幂等四模式→分布式 ID 与时钟回拨→物理时钟不可信与逻辑顺序→CAP 按业务分级实务→共识"用不自研"→读己之写等用户可感知一致性清单→部分失败测试)。eng-architecture 的分布式孙链:跨服务事务设计、数据不一致排查、分布式方案评审、"要不要上分布式锁"时载入。
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # 分布式系统链
8
+
9
+ eng-architecture 的分布式孙链。分布式的一切复杂度来自一件事:**部分失败**(消息发了不知到没到、对方活着但很慢、各节点时钟各说各话)。
10
+ 第一判据:**能单机别分布式**——单库事务能解决的,别拆成需要分布式事务的架构(拆分判据回 eng-architecture 模式表)。
11
+
12
+ ## 分布式事务判据表(默认最终一致+对账兜底)
13
+
14
+ | 方案 | 适用 | 代价(签约前认清) |
15
+ |---|---|---|
16
+ | 单库事务 | 永远的首选 | 拆库前先问:这两张表真要分家吗 |
17
+ | **outbox/本地消息表** | 跨服务最终一致(默认推荐) | 秒级不一致窗口;实现细则 eng-integration/infra-mq |
18
+ | SAGA | 长流程多步骤(订单履约) | **补偿要业务设计**(每步配反向操作;不可补偿步骤放最后);中间态对外可见要处理 |
19
+ | TCC | 资金类要资源预留(冻结额度) | 开发量三倍(Try/Confirm/Cancel 各写);空回滚/悬挂/幂等三防必做 |
20
+ | 2PC/XA | 同进程内跨库短事务 | 同步阻塞+协调者单点;**跨服务禁用**(可用性乘法崩塌) |
21
+ | 最大努力通知 | 对外方通知(支付回调我方) | 重试+对方幂等+**主动查询兜底**(eng-integration) |
22
+
23
+ 总纪律:**强一致收窄到单库内**(账户余额扣减单库事务),跨边界一律最终一致+**对账兜底**(eng-integration 三层对账)——
24
+ "最终"不会自动到来,是对账任务与修复工具保证的。
25
+
26
+ ## 幂等四模式(分布式的地基,每个写接口过一遍)
27
+
28
+ 唯一约束兜底(业务键 INSERT 冲突即重复,eng-database)/状态机单向(晚到的旧状态推不动新状态)/
29
+ 幂等 token 预取(客户端先取 token 提交带上,服务端一次性核销——防表单重复提交与重试)/
30
+ 版本号乐观锁(带版本更新,旧版本拒绝);
31
+ 判据:**网络超时后的重试是常态而非异常**(eng-reliability 重试的前提),没有幂等的重试=资损预定;
32
+ 幂等结果要一致:重复请求返回**同样的成功响应**(不是报"重复错误"让调用方懵)。
33
+
34
+ ## 分布式 ID
35
+
36
+ 判据承 eng-database 主键节,分布式补三点:
37
+ 雪花系**时钟回拨处理**必须有(回拨=重复 ID:等待/备用位/换号段,库默认行为要查);
38
+ 号段模式(DB 批量取段,缓存本地)——中庸稳妥,双 buffer 防取段抖动;
39
+ **业务含义 ID 谨慎**(带日期/地区的单号:含义变更与超容都是坑,展示号与主键分离)。
40
+
41
+ ## 时钟与顺序(物理时钟不可信)
42
+
43
+ NTP 漂移与回拨是常态(ops-linux 时钟节)——**跨节点比较时间戳判先后=错误设计**;
44
+ "同时发生"在分布式里是幻觉:先后靠**逻辑序**(单调版本号/序列号/DB 自增)不靠 timestamp;
45
+ 超时判死的哲学:你无法区分"死了"和"慢"——所以一切"独占"要带租约(有效期+续期),锁与主选举同理(db-redis 锁五要素的理论根);
46
+ 跨系统对时敏感逻辑(缓存过期/token 校验)留偏移容忍(sec-auth 时钟偏移同拍)。
47
+
48
+ ## CAP 实务(按业务分级,不是全系统一个选择)
49
+
50
+ 分区(网络断)必然发生,发生时二选一:
51
+ **CP**(拒绝服务保一致):配置中心写入/分布式锁/库存扣减——错数据比不可用更贵的场景;
52
+ **AP**(降级可用容忍旧数据):商品展示/内容浏览/推荐——不可用比旧数据更贵的场景;
53
+ 落地=按接口分级标注(读多写少的读路径通常 AP+缓存,写路径 CP),预案里写清分区时各接口的行为(eng-reliability 韧性评审 what-if);
54
+ PACELC 补一句:没分区时也在权衡延迟与一致(副本同步等不等)。
55
+
56
+ ## 共识:用,不自研
57
+
58
+ 需要共识的场景识别:选主/配置一致/分布式锁/成员管理——**一律用成熟件**(etcd/zk/云服务),自研共识=学术自由生产事故;
59
+ 用也要懂契约:线性一致读的成本(走 leader/read index)、租约会话失效语义(zk 会话断=临时节点没=锁没了,持锁方要能感知,db-redis 红锁认知同源);
60
+ 共识件是 CP 件:它不可用时你的"依赖它的功能"怎么降级,预案先写(eng-reliability 强弱依赖)。
61
+
62
+ ## 用户可感知一致性清单(比理论有用的四个词)
63
+
64
+ **读己之写**(我发的帖我立刻要看到):会话粘性/关键读走主/写后短暂读主(eng-database 读写分离落点);
65
+ **单调读**(刷新不能忽新忽旧):同用户固定读同副本;
66
+ 因果一致(回复不能先于原帖出现):消息带因果键分区(infra-mq 局部有序);
67
+ 评论区数字对不上(计数最终一致):产品话术与 UI 设计吸收(eng-ux)——**有些一致性问题的最优解在产品层不在架构层**。
68
+
69
+ ## 部分失败测试
70
+
71
+ 时序穿插用例:超时后成功到达/重复到达/乱序到达三件套进集成测试(eng-quality 状态迁移用例的分布式版);
72
+ 故障注入:依赖超时/慢响应/断连注入验证降级与幂等真的работ(eng-reliability 混沌实验清单来源);
73
+ **对账演练**:人为制造不一致→对账任务发现→修复工具修复,全链路走通才算有兜底(修复工具与对账任务同日交付,eng-integration)。
74
+
75
+ **作业包**:`references/idempotency-review.md`(部分失败三问/事务方案判据勾选/幂等评审表/重试放大自查/CAP 分级标注/对账登记)。
76
+
77
+ ## 使用纪律
78
+
79
+ 方案评审三问:哪里可能部分失败/失败后谁发现(对账?告警?)/怎么修(工具?人工?);
80
+ 每个"分布式聪明设计"先找成熟件与更笨的单机解;跨服务写操作幂等评审必查;
81
+ 每次不一致事故回写:模式(丢/重/乱序)与兜底缺口——**分布式的成熟度=对账发现问题的速度比用户投诉快多少**。
@@ -0,0 +1,43 @@
1
+ # 分布式设计评审单(arch-distributed 落笔件:跨服务写操作方案必过)
2
+
3
+ ## 1. 部分失败三问(方案评审开场)
4
+
5
+ | 问 | 答(写具体) |
6
+ |---|---|
7
+ | 哪里可能部分失败?(消息发了不知到没到/对方慢≠死) | |
8
+ | 失败后谁发现?(对账任务/告警/用户投诉——最后者=设计失败) | |
9
+ | 怎么修?(修复工具/人工流程;工具与对账任务同日交付) | |
10
+
11
+ ## 2. 事务方案判据(强一致收窄到单库内)
12
+
13
+ - 本方案跨边界写:__ → 选型:□单库事务(首选,先问真要分家吗) □outbox/本地消息表(默认)
14
+ □SAGA(补偿逐步设计:__;不可补偿步骤放最后) □TCC(资金预留;空回滚/悬挂/幂等三防:__) □最大努力通知
15
+ - [ ] 禁用确认:跨服务无 2PC/XA;无双主双写
16
+
17
+ ## 3. 幂等评审表(每个写接口一行,四模式至少其一)
18
+
19
+ | 接口 | 幂等模式(唯一约束/状态机单向/token 预取/版本号) | 重复请求返回(同样成功响应,非报错) | 验证用例 |
20
+ |---|---|---|---|
21
+
22
+ ## 4. 超时重试配置(分布式放大自查)
23
+
24
+ - [ ] 每外部调用有超时且层层收紧(入口 __ > 内部 __ > 叶子 __)
25
+ - [ ] 重试仅幂等+可恢复错误;**层数核过**(3 层×3 次=27 倍放大;只在一层重试:__ 层)
26
+ - [ ] 跨节点无时间戳比较判先后(逻辑序:版本号/序列 __)
27
+
28
+ ## 5. CAP 分级标注(按接口,不是全系统一个选择)
29
+
30
+ | 接口/路径 | 分区时行为(CP 拒服务保一致 / AP 降级供旧数据) | 依据 |
31
+ |---|---|---|
32
+
33
+ ## 6. 用户可感知一致性核对
34
+
35
+ - [ ] 读己之写:我写的我立刻可见(方案:__) - [ ] 单调读:刷新不忽新忽旧(方案:__)
36
+ - [ ] 计数/列表最终一致的产品话术已对齐(有些一致性最优解在产品层)
37
+
38
+ ## 7. 对账兜底登记
39
+
40
+ | 数据面 | 对账任务(频率/口径) | 差异告警阈值 | 修复工具 | Owner |
41
+ |---|---|---|---|---|
42
+
43
+ > "最终一致"的"最终"是对账保证的,不会自动到来;时序穿插用例(超时后到达/重复/乱序)进集成测试。
@@ -0,0 +1,73 @@
1
+ ---
2
+ name: arch-multitenant
3
+ description: 多租户 SaaS 架构链(隔离模型判据表(共表/分 schema/独库与混合形态)→租户上下文贯穿与数据层强制过滤→noisy neighbor 配额治理→计量计费(用量埋点=资金数据)→按租户灰度与定制边界(配置化>代码分叉)→租户数据生命周期(导出/退租删除证明)→租户开通自动化与健康看板)。eng-architecture 的多租户孙链:SaaS 平台设计、大客户独立部署评估、跨租户风险治理、租户定制失控时载入。
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # 多租户 SaaS 架构链
8
+
9
+ eng-architecture 的多租户孙链。多租户的两难永恒:**共享省成本,隔离保安全卖大客户**——
10
+ 架构要让两头都能走(混合形态),红线只有一条:**跨租户数据泄露=P0,没有商量**。
11
+
12
+ ## 隔离模型判据表
13
+
14
+ | 模型 | 适用 | 代价 |
15
+ |---|---|---|
16
+ | 共库共表+租户列(默认) | 长尾中小租户 | 隔离靠纪律(见强制过滤);单租户导出/删除成本高;大租户拖慢邻居 |
17
+ | 共库分 schema | 中等隔离诉求 | schema 数量上限与迁移放大(千 schema×DDL=千次) |
18
+ | 独库 | KA 大客户/合规要求(数据独立存放) | 成本与运维放大;版本升级要批量编排 |
19
+ | 独立部署(专有云) | 监管硬要求 | 版本碎片化风险最大,**发布流水线必须统一**(eng-release 一次构建) |
20
+
21
+ **混合形态是常态**:长尾共表+KA 独库——架构要预留"租户搬家"通道(共表→独库迁移工具:按租户导出/导入/校验/切流,建系统时就做,后补=停机搬家);
22
+ 判据数字化:租户数据量/QPS 超阈值或年费超阈值触发独库评估(拍脑袋会拖到搬不动)。
23
+
24
+ ## 租户上下文贯穿(越租户防线的工程化)
25
+
26
+ 入口解析:域名(tenant.example.com)/路径/token 声明(sec-auth 租户声明)三选一为主,**解析结果与登录身份必须互验**(URL 改租户 ID 就换库=经典越权);
27
+ 上下文贯穿:线程/协程本地(async 场景用对应机制:AsyncLocalStorage/contextvars/ThreadLocal 装饰,dev-* 各链)——**手工层层传参必漏**;
28
+ **数据层强制过滤**:ORM 全局 filter/拦截器自动拼租户条件+行级安全兜底(PG RLS,db-postgres)——依赖业务代码"记得加 where tenant_id"=必出事;
29
+ 双保险审计:SQL 审计抽查无租户条件的查询(上线扫描+慢日志抽检);后台任务/定时任务/消息消费同样要租户上下文(**异步链路是越租户高发区**:批处理循环里串了租户);
30
+ 测试防线:跨租户用例进回归(qa-api-automation 越权用例的租户维),新资源类接口必配。
31
+
32
+ ## noisy neighbor 治理
33
+
34
+ 租户级限流配额三层:API QPS/存储容量/任务并发(导出、报表、AI 调用——ai-mlops 租户 token 配额同拍);
35
+ 大租户隔离:重任务独立队列(一个租户导出百万行不能堵死全平台,infra-mq 隔离队列)/资源池分级;
36
+ 公平调度:批任务按租户轮转不按提交顺序(防单租户刷屏);
37
+ **按租户可观测**:核心指标带租户维度(eng-observability 基数控制前提下取 TOP:大租户单独看板)——"平台没事但某大客户很卡"要能被看见。
38
+
39
+ ## 计量计费
40
+
41
+ 用量埋点=**资金数据**规格(eng-integration 对账精度):席位/API 次数/存储/AI token(ai-mlops 归因)埋点幂等防重算,计量管道与账单对账例程;
42
+ 计费口径与产品条款同源(超量降级还是超量计费,预先声明,eng-ai 成本预算同构);
43
+ 配额耗尽体验设计(提前预警→宽限→限制,禁静默断服,eng-ux 防错);
44
+ 免费/试用租户回收策略(僵尸租户占资源,生命周期见下)。
45
+
46
+ ## 版本、灰度与定制边界
47
+
48
+ 按租户灰度是多租户的超能力(eng-release 人群灰度的天然分桶):内部租户→友好客户→全量;
49
+ **定制边界铁律:配置化>插件点>代码分叉**——按租户 if 是滑坡,租户专属分支=死路(版本永久分裂);
50
+ 定制需求收敛:配置项(开关/字段/流程模板)满足 80%,插件/回调机制满足 15%,剩下 5% 谈商务(要么进产品要么不接);
51
+ 定制项也是产品资产:配置 schema 化+文档化(eng-docs),散装 JSON 配置堆=下一个失控点;
52
+ schema 变更多租户放大:共表 DDL 影响全体(变更窗口),独库要批量编排工具(db-mysql online DDL×N 租户)。
53
+
54
+ ## 租户数据生命周期
55
+
56
+ **导出义务**:租户数据可完整导出(格式文档化)——合规要求+"退出成本"的诚意(eng-research 反向视角);
57
+ 退租流程:冻结(只读宽限期)→删除(所有存储:库/缓存/ES/对象存储/备份策略内标记)→**删除证明**(合规文档:何时删了什么);
58
+ 备份中的已退租数据:保留期声明+到期随备份轮转消亡(法务口径对齐,legal-chain);
59
+ 数据驻留要求(数据不出某地域)进隔离模型判据(独库/独部署的触发器)。
60
+
61
+ ## 平台工程视角
62
+
63
+ **租户开通全自动**:注册→初始化(库/配置/示例数据)→可用,分钟级零人工(eng-automation 脚手架思维用于租户;开通步骤有一步手工=规模化即瓶颈);
64
+ 租户健康看板:按租户的用量/错误率/活跃度(客户成功与运维共用);
65
+ 租户配置中心化:租户元数据(套餐/开关/配额)单一事实源,各服务订阅——散在各服务配置里=开通不全的怪病之源。
66
+
67
+ **作业包**:`references/tenant-isolation-checklist.md`(租户贯穿逐条核查(异步链路专项)/开通检查/定制三关/退租与删除证明)。
68
+
69
+ ## 使用纪律
70
+
71
+ 跨租户用例进每次回归;无租户条件 SQL 上线扫描;异步任务租户上下文评审必查;
72
+ 定制需求先过"配置化>插件>拒绝"三关;退租删除有证明;
73
+ 每次租户投诉"卡/错/看到别人数据"按 P 级走 eng-ops 且回写本链——**多租户的口碑=最坏那一次隔离事故,防线要配得上这个赌注**。
@@ -0,0 +1,34 @@
1
+ # 多租户隔离防线检查单(arch-multitenant 落笔件:跨租户=P0,防线配得上赌注)
2
+
3
+ ## 1. 租户上下文贯穿核查(逐条勾,漏一处=越租户)
4
+
5
+ - [ ] 入口解析(域名/token 声明)与登录身份**互验**(URL 改租户 ID 直接换库=经典越权)
6
+ - [ ] 上下文用线程/协程本地机制贯穿(async 场景确认:__;禁手工层层传参)
7
+ - [ ] **数据访问层强制过滤**:ORM 全局 filter/拦截器自动拼租户条件(机制:__);行级安全兜底(PG RLS): □
8
+ - [ ] **异步链路专项**(越租户高发区):定时任务 __ /消息消费 __ /批处理 __ 都带租户上下文;批量循环内未串租户
9
+ - [ ] 缓存键含租户前缀(db-redis 键规范);ES/搜索检索层带租户过滤(ai-rag 权限过滤同拍)
10
+ - [ ] SQL 审计:无租户条件的查询上线扫描(工具/流程:__)
11
+ - [ ] 跨租户用例进每次回归(qa-api-automation 越权用例的租户维):□
12
+
13
+ ## 2. 新租户开通检查(分钟级零人工是验收标准)
14
+
15
+ - [ ] 开通全自动:注册→初始化(库/配置/示例数据)→可用,实测 __ 分钟
16
+ - [ ] 租户元数据入配置中心(套餐/开关/配额单一事实源),各服务订阅
17
+ - [ ] 配额三层生效:API QPS __ /存储 __ /任务并发 __(含 AI token,ai-mlops)
18
+ - [ ] 按租户可观测:大租户看板/租户维度指标(基数控制下取 TOP)
19
+
20
+ ## 3. 定制需求三关(配置化>插件>拒绝)
21
+
22
+ | 需求 | 配置项可满足? | 插件点可满足? | 结论(禁客户分支!) |
23
+ |---|---|---|---|
24
+
25
+ ## 4. 数据生命周期
26
+
27
+ - [ ] 导出能力可用(格式文档化,合规义务)
28
+ - [ ] 退租流程:冻结只读 __ 天→全存储删除(库/缓存/ES/对象存储/备份标记)→**删除证明**出具
29
+ - [ ] 数据驻留要求核过(触发独库/独部署否):__
30
+
31
+ ## 5. 隔离模型与搬家通道
32
+
33
+ - 当前模型:□共表 □分 schema □独库 □混合;KA 触发独库阈值(量/费):__
34
+ - [ ] 租户搬家工具(共表→独库:导出/导入/校验/切流)已具备或有计划:__
@@ -0,0 +1,63 @@
1
+ ---
2
+ name: audit-assist
3
+ description: 审计辅助(审计计划/实质性程序/抽样/底稿/函证管理/期后事项)。当用户说"审计/抽凭/底稿/函证/穿行测试/内控测试/年审"时使用。仅辅助执业过程,不出具鉴证结论。
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # 审计辅助(经 run_python 抽样与底稿;辅助执业者,不是替代签字)
8
+
9
+ ## 定位红线(先说清)
10
+
11
+ 产出一律标注「辅助性工作底稿,供项目组复核」;**不生成审计意见/鉴证结论措辞**;
12
+ 重大错报判断、意见类型是注册会计师的职业判断。
13
+
14
+ ## 按审计阶段提供什么
15
+
16
+ ### 1) 计划阶段
17
+ - **重要性水平计算**:基准(税前利润 5%、收入 0.5–1%、资产 0.5–1% 按业务性质选)→ 整体重要性 →
18
+ 实际执行重要性(50–75%)→ 明显微小错报(5%);给出选择理由段。
19
+ - **风险评估矩阵**:科目 × 认定(存在/完整/准确/截止/计价/权利义务/列报)打 高/中/低,
20
+ 高风险组合给对应程序建议(收入截止→截止测试双向抽 15+15 等)。
21
+
22
+ ### 2) 执行阶段(抽样是核心工具)
23
+ `read_skill_file` 读 `scripts/audit_sampling.py`:
24
+ - **MUS 货币单位抽样**:`mus_sample(df, 金额列, 重要性, 信赖系数)` ——大额必选 + 系统抽样,
25
+ 输出样本清单(含抽样间隔/随机起点,**可复算**)与覆盖率;
26
+ - **属性抽样**(内控测试):`attribute_sample_size(总体, 可容忍偏差率, 预计偏差率)` 给样本量;
27
+ - **简单随机/分层抽样**:`random_sample(df, n, seed)`(seed 必填,底稿要可重现)。
28
+ - 凭证抽查底稿模板:序号/凭证号/日期/摘要/金额/核对项(原始单据|审批|入账科目|期间)/结果/异常说明。
29
+
30
+ ### 3) 分析程序
31
+ 用 finance-analysis 的比率与勾稽,但口径转为审计视角:预期值 → 实际 → 差异 → 可接受差异额 →
32
+ 超限科目进一步程序清单。波动分析必须"先定预期再看实际",不许倒推解释。
33
+
34
+ ### 4) 函证管理
35
+ 函证台账(xlsx):对象/类型(银行|应收|往来)/金额/发函日/回函日/回函结果(相符|不符|未回)/
36
+ 替代程序。统计回函率(金额口径+笔数口径),未回函清单自动生成替代程序待办。
37
+
38
+ ### 5) 常见错报知识(按循环,详见程序执行时逐条对照)
39
+ - 收入循环:截止错报(期后发货提前确认)、总额净额、买断式与代销混淆;
40
+ - 采购付款:暂估长期挂账、发票与入库不匹配;
41
+ - 存货:监盘差异、跌价计提不足(库龄长+毛利稳=红旗)、在产品成本分摊;
42
+ - 货币资金:未达账项长期未清、受限资金未披露、大额存单质押;
43
+ - 费用:跨期、资本化费用化边界(研发/借款费用);
44
+ - 关联方:未识别关联方(股权穿透+异常价格双查)。
45
+
46
+ ## 底稿产出规范
47
+
48
+ 每份底稿固定头:被审计单位/期间/科目/编制人(AI 辅助,待复核)/编制日期/程序目标;
49
+ 固定尾:结论(程序层面的发现,非意见)/遗留事项/索引号。Excel 底稿用 xlsx-analysis 样式,
50
+ 抽样底稿必须含**可复算参数**(seed/间隔/起点)。
51
+
52
+ ## 验收自查
53
+
54
+ - [ ] 所有输出带"辅助底稿待复核"标注,无鉴证措辞
55
+ - [ ] 抽样参数完整可复算,大额已 100% 覆盖
56
+ - [ ] 重要性计算有基准选择理由
57
+ - [ ] 异常事项进了"遗留事项"而不是被解释掉
58
+
59
+ ## 附件
60
+
61
+ - `scripts/audit_sampling.py` — MUS/属性样本量/分层随机 三种抽样 + 台账统计;可直接执行自测
62
+
63
+ > 本技能属**财务技能链**——岗位路由与端到端工作流(月结 · 审计 · 资金 · 投资)见 `finance-chain`。
@@ -0,0 +1,93 @@
1
+ # 审计抽样件(经 run_python 执行):MUS 货币单位抽样 / 属性抽样样本量 / 分层随机抽样 / 函证台账统计。
2
+ # 所有抽样可复算(seed/间隔/起点全部输出并写入底稿)。直接执行本文件 = 自测。
3
+ import numpy as np
4
+ import pandas as pd
5
+
6
+ # 属性抽样样本量表(信赖度 90%/95%,预计偏差率=0 的常用简表;超出范围用公式法并注明)
7
+ _ATTR_TABLE = { # (可容忍偏差率%, 信赖度%) -> n
8
+ (5, 90): 45, (5, 95): 59, (10, 90): 22, (10, 95): 29, (15, 90): 15, (15, 95): 19,
9
+ }
10
+
11
+
12
+ def mus_sample(df, amount_col, performance_materiality, confidence_factor=3.0, seed=42):
13
+ """货币单位抽样:间隔=实际执行重要性/信赖系数;≥间隔的大额 100% 必选,余下系统抽样。
14
+ 返回 (样本DataFrame, 参数dict)。"""
15
+ d = df.reset_index(drop=True).copy()
16
+ d[amount_col] = d[amount_col].abs()
17
+ interval = performance_materiality / confidence_factor
18
+ big = d[d[amount_col] >= interval]
19
+ rest = d[d[amount_col] < interval].reset_index(drop=True)
20
+ rng = np.random.default_rng(seed)
21
+ start = float(rng.uniform(0, interval))
22
+ cum = rest[amount_col].cumsum()
23
+ hits, pick = [], start
24
+ total_rest = float(cum.iloc[-1]) if len(cum) else 0.0
25
+ while pick <= total_rest:
26
+ idx = int(np.searchsorted(cum.values, pick))
27
+ if idx < len(rest):
28
+ hits.append(idx)
29
+ pick += interval
30
+ sampled = pd.concat([big, rest.loc[sorted(set(hits))]]).drop_duplicates()
31
+ params = {'interval': round(interval, 2), 'start': round(start, 2), 'seed': seed,
32
+ 'big_n': len(big), 'sys_n': len(set(hits)), 'coverage%':
33
+ round(sampled[amount_col].sum() / d[amount_col].sum() * 100, 1)}
34
+ print(f'[MUS] 间隔={params["interval"]} 起点={params["start"]} seed={seed} | '
35
+ f'大额必选 {params["big_n"]} + 系统抽 {params["sys_n"]} | 金额覆盖 {params["coverage%"]}%')
36
+ return sampled, params
37
+
38
+
39
+ def attribute_sample_size(tolerable_rate_pct, confidence_pct=95, expected_rate_pct=0):
40
+ """属性抽样样本量(内控测试)。常用组合查表;预计偏差率>0 或超表用泊松近似并注明。"""
41
+ key = (int(tolerable_rate_pct), int(confidence_pct))
42
+ if expected_rate_pct == 0 and key in _ATTR_TABLE:
43
+ n = _ATTR_TABLE[key]
44
+ print(f'[属性] 可容忍 {tolerable_rate_pct}% 信赖 {confidence_pct}% 预计 0% -> n={n}(查表)')
45
+ return n
46
+ factor = 3.0 if confidence_pct >= 95 else 2.3 # 泊松信赖系数近似
47
+ n = int(np.ceil(factor / (tolerable_rate_pct / 100 - expected_rate_pct / 100 * 1.5)))
48
+ print(f'[属性] 泊松近似 -> n={n}(预计偏差率 {expected_rate_pct}%,需在底稿注明方法)')
49
+ return n
50
+
51
+
52
+ def random_sample(df, n, seed, strata=None):
53
+ """简单随机/分层随机(strata=分层列名,按层内占比分配,至少每层 1 个)。seed 必填以可复算。"""
54
+ if strata:
55
+ parts = []
56
+ for k, gdf in df.groupby(strata, observed=True):
57
+ take = max(1, round(n * len(gdf) / len(df)))
58
+ parts.append(gdf.sample(min(take, len(gdf)), random_state=seed))
59
+ out = pd.concat(parts)
60
+ else:
61
+ out = df.sample(min(n, len(df)), random_state=seed)
62
+ print(f'[随机] n={len(out)} seed={seed}' + (f' 分层={strata}' if strata else ''))
63
+ return out
64
+
65
+
66
+ def confirm_stats(ledger):
67
+ """函证台账统计:回函率(笔数/金额双口径)+ 未回函清单(供替代程序)。
68
+ 需列:对象/金额/回函结果(相符|不符|未回)。"""
69
+ total_n, total_amt = len(ledger), ledger['金额'].sum()
70
+ back = ledger[ledger['回函结果'].isin(['相符', '不符'])]
71
+ unre = ledger[ledger['回函结果'] == '未回']
72
+ print(f'[函证] 回函率 笔数 {len(back)}/{total_n}={len(back) / total_n:.0%} · '
73
+ f'金额 {back["金额"].sum() / total_amt:.0%} | 不符 {len(ledger[ledger["回函结果"] == "不符"])} 笔 | 未回 {len(unre)} 笔')
74
+ return {'reply_rate_n': len(back) / total_n, 'reply_rate_amt': back['金额'].sum() / total_amt,
75
+ 'unreplied': unre}
76
+
77
+
78
+ if __name__ == '__main__':
79
+ rng = np.random.default_rng(1)
80
+ pop = pd.DataFrame({'凭证号': [f'V{i:04d}' for i in range(500)],
81
+ '金额': np.round(rng.lognormal(8, 1.2, 500), 2)})
82
+ s, prm = mus_sample(pop, '金额', performance_materiality=150_000, seed=42)
83
+ assert (pop[pop['金额'] >= prm['interval']]['凭证号'].isin(s['凭证号'])).all(), '大额必须全选'
84
+ s2, prm2 = mus_sample(pop, '金额', performance_materiality=150_000, seed=42)
85
+ assert list(s['凭证号']) == list(s2['凭证号']), '同参数必须可复算'
86
+ assert attribute_sample_size(10, 95) == 29
87
+ r = random_sample(pop, 30, seed=7)
88
+ assert len(r) == 30
89
+ ledger = pd.DataFrame({'对象': list('ABCDE'), '金额': [100, 200, 300, 400, 500],
90
+ '回函结果': ['相符', '未回', '不符', '相符', '未回']})
91
+ st = confirm_stats(ledger)
92
+ assert len(st['unreplied']) == 2
93
+ print('OK audit_sampling.py')
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: audit-chain
3
+ description: 审计技能链总控(外审配合/内审项目/舞弊调查/外部检查应对四条端到端工作流、审计自动化例程)。当审计诉求跨环节("年审从头配合到出报告""这个线索查到底")或不确定用哪个技能时先载入。
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # 审计技能链总控
8
+
9
+ ## 场景路由表
10
+
11
+ | 审计场景 | 高频事项 | 技能 |
12
+ |---|---|---|
13
+ | 外审配合(被审方/助审) | 重要性/抽样/函证/底稿 | **audit-assist** |
14
+ | 内部审计 | 年度计划/项目实施/整改闭环/经责 | **internal-audit** |
15
+ | IT 审计 | ITGC/自动化控制/数据审计 | **it-audit** |
16
+ | 财务分析性程序 | 勾稽/比率/红旗 | finance-analysis |
17
+ | 数据筛查 | 全量规则/关联比对/反连接 | data-report-pro |
18
+ | 内控体系 | 矩阵/缺陷分级/五定整改 | risk-compliance |
19
+ | 取证与移交 | 证据目录/时间线 | litigation-support |
20
+ | 税务检查 | 稽查应对/自查底稿 | tax-compliance |
21
+
22
+ ## 端到端工作流
23
+
24
+ ### ① 年审配合链(被审计单位视角,年初)
25
+ 预审准备(finance-analysis 先自查勾稽与红旗——**审计师会跑的你先跑**)→ 资料包
26
+ (audit-assist 底稿口径:序时账/余额表/合同台账,accounting-ops 结账产物直接复用)→
27
+ 函证配合(台账与回函跟踪)→ 调整分录承接(audit 调整 → 账套落账 → 与汇算清缴
28
+ tax-compliance 口径核对一致)→ 报告披露核对(报表附注数字与账面逐项勾稽)→
29
+ 管理建议书回复(整改承诺进 risk-compliance 台账,别签完就忘——明年审计师会翻旧账)。
30
+
31
+ ### ② 内审项目链(内审部门视角)
32
+ 年度计划(internal-audit 风险打分)→ 项目实施五步(进点前 data-report-pro 先行分析 +
33
+ 现场 audit-assist 抽样 + 涉系统 it-audit ITGC)→ 发现五要素与签认 → 报告分级 →
34
+ **整改闭环**(证据验证/超期升级/重复发现单列)→ 年度述职(整改率/重复率/价值量化:
35
+ 挽回损失与堵漏金额)。
36
+
37
+ ### ③ 舞弊调查链(线索驱动,保密优先)
38
+ 线索受理分级 → 保密圈最小化(**先固证后惊动**:系统日志/门禁/邮件按 litigation-support
39
+ 证据规范即刻固定)→ 数据筛查(it-audit 规则库 + audit-assist 反舞弊线索)→
40
+ 外围取证(工商穿透/资金流向)→ 核心访谈(两人在场/纪要签认/不承诺不威胁)→
41
+ 调查报告(事实-证据对应表,只陈述不定性)→ 移交决策(内部处分走 HR 合规流程/
42
+ 司法移交带证据清单)→ 控制修复(该案暴露的漏洞进内控矩阵——**查案的终点是补制度**)。
43
+
44
+ ### ④ 外部检查应对链(税务稽查/监管进场)
45
+ 进场通知评估(范围/期间/风险预判,tax-compliance 自查先行)→ 资料室与口径统一
46
+ (**单一出口**:指定对接人,所有资料过登记台账,口径答复先内部对齐——七嘴八舌是自爆)→
47
+ 过程台账(提供资料/询问笔录/承诺事项逐日记录)→ 初步意见反馈(事实性异议限期提出,
48
+ 带证据)→ 处理决定应对(申辩/听证/复议路径提示,重大事项律师介入)→ 整改与回头看。
49
+
50
+ ## 自动化例程配方
51
+
52
+ - 整改台账周检:到期未整改自动升级提醒;
53
+ - 权限月度巡检:账号 vs 花名册反连接(it-audit 口径),离职未禁用即时告警;
54
+ - 函证跟踪:发函 15 天未回自动列催函清单;
55
+ - 年审日历:预审/进场/报告节点倒排提醒。
56
+
57
+ ## 使用纪律
58
+
59
+ 独立性与保密贯穿全链;所有结论证据可指;分级标准(发现/缺陷/线索)事先公布事后不改;
60
+ 内审报告与外审底稿的措辞边界各自遵守(internal-audit/audit-assist 红线)。
@@ -0,0 +1,59 @@
1
+ ---
2
+ name: banking-credit
3
+ description: 信贷与授信分析(授信调查报告、偿债能力测算、现金流覆盖、担保分析、贷后检查、5C 框架)。当用户说"授信报告/信贷审查/还款能力/贷后检查/尽调这家借款企业"时使用。
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # 信贷授信分析(现金流为王,报告按审贷会问题写)
8
+
9
+ ## 定位红线
10
+
11
+ 产出为**信贷分析辅助材料**,授信决策由行内审批流程作出;数据以借款人提供及征信/公开渠道为准,
12
+ 存疑数据标注核实方式。
13
+
14
+ ## 5C 框架组织调查(授信报告的隐骨架)
15
+
16
+ 品格 Character(实控人背景/涉诉/征信/关联复杂度)→ 能力 Capacity(**还款来源测算,核心**)→
17
+ 资本 Capital(真实权益,剔水分)→ 担保 Collateral(第二还款来源)→ 环境 Conditions(行业周期/
18
+ 区域/政策)。
19
+
20
+ ## 还款能力测算(`read_skill_file` 读 `scripts/credit_metrics.py`)
21
+
22
+ - **第一还款来源=经营现金流**:`dscr()` 偿债覆盖率 =(EBITDA−必要资本开支−税)/(本期到期本息),
23
+ <1.2 要给明确的补充还款来源说明;
24
+ - `cash_gap()` 现金缺口测算:经营现金流入-流出-到期债务的期间瀑布,定位最紧张月份;
25
+ - 授信额度合理性:按用途测算(流贷=营运资金缺口法:存货+应收−应付−自有,给计算过程;
26
+ 项目贷=项目资本金比例与现金流覆盖)——**额度倒推用途=红旗**;
27
+ - 财务真实性交叉验证(转 finance-analysis 勾稽+红旗):重点核 收入-增值税申报匹配、
28
+ 水电费/工资与产能匹配、银行流水与账面收入匹配(口径差异列明)。
29
+
30
+ ## 担保分析
31
+
32
+ - 抵押物:价值(评估价打折:住宅 7 折/商铺 5–6 折/机器设备 3–5 折,行内标准为准)、
33
+ 变现能力(区位/通用性)、权属瑕疵(共有/查封/顺位),`ltv()` 抵押率计算;
34
+ - 保证人:**代偿能力**(保证人自身负债与或有负债穿透,互保圈识别——A 保 B、B 保 C、C 保 A 画出来);
35
+ - 担保覆盖率 =(抵押折后值+保证可代偿额)/授信敞口,给计算表。
36
+
37
+ ## 授信报告结构(按审贷会问题组织)
38
+
39
+ 借款人概况与股权穿透 → 经营分析(商业模式/上下游集中度/订单支撑)→ 财务分析(真实性验证+
40
+ 三年趋势)→ 还款来源测算(第一/第二,DSCR 表)→ 担保分析 → 风险点与缓释措施
41
+ (**每个风险配缓释,配不出=如实写不可缓释**)→ 授信方案建议(品种/额度/期限/利率/条件/贷后要求)。
42
+
43
+ ## 贷后检查
44
+
45
+ 检查清单:资金用途凭证(受托支付轨迹)/经营指标环比(用电/开票/主要客户)/担保物复查
46
+ (价值重估+权属再查)/征信与涉诉更新/预警信号表(对外担保激增/实控人变更/税务欠缴/
47
+ 主要账户流水骤降)——触发预警给分级处置建议(关注/压退/保全)。
48
+
49
+ ## 验收自查
50
+
51
+ - [ ] DSCR 与现金缺口测算有过程,<1.2 有补充说明
52
+ - [ ] 额度按用途正算,非倒推
53
+ - [ ] 财务真实性做了至少两组交叉验证
54
+ - [ ] 每个风险点有缓释或如实标注不可缓释
55
+ - [ ] 互保/关联关系画了穿透图
56
+
57
+ ## 附件
58
+
59
+ - `scripts/credit_metrics.py` — dscr / cash_gap / ltv / 担保覆盖率;可直接执行自测
@@ -0,0 +1,53 @@
1
+ # 信贷测算件(经 run_python 执行):偿债覆盖率 DSCR / 期间现金缺口 / 抵押率 LTV / 担保覆盖率。
2
+ # 直接执行本文件 = 自测。
3
+ import pandas as pd
4
+
5
+
6
+ def dscr(ebitda, capex_required, tax, debt_service):
7
+ """偿债覆盖率 =(EBITDA − 必要资本开支 − 税)/ 本期到期本息。<1.2 提示补充还款来源。"""
8
+ if debt_service <= 0:
9
+ raise ValueError('到期本息须为正')
10
+ v = (ebitda - capex_required - tax) / debt_service
11
+ print(f'[DSCR] ({ebitda}-{capex_required}-{tax})/{debt_service} = {v:.2f}'
12
+ + (' ⚠ <1.2:需明确补充还款来源' if v < 1.2 else ''))
13
+ return round(v, 2)
14
+
15
+
16
+ def cash_gap(months, inflow, outflow, debt_due):
17
+ """期间现金瀑布:净流=流入-流出-到期债务,累计现金定位最紧张月份。三列表等长。"""
18
+ df = pd.DataFrame({'月份': months, '经营流入': inflow, '经营流出': outflow, '到期债务': debt_due})
19
+ df['净流'] = df['经营流入'] - df['经营流出'] - df['到期债务']
20
+ df['累计'] = df['净流'].cumsum()
21
+ worst = df.loc[df['累计'].idxmin()]
22
+ print(df.to_markdown(index=False))
23
+ print(f"[缺口] 最紧张:{worst['月份']}(累计 {worst['累计']:.0f})"
24
+ + (' ⚠ 存在缺口月,需安排接续融资/调整还款计划' if (df['累计'] < 0).any() else ''))
25
+ return df
26
+
27
+
28
+ def ltv(loan, collateral_value, haircut):
29
+ """抵押率 = 授信额 /(评估值×折率)。haircut 如住宅 0.7。"""
30
+ eligible = collateral_value * haircut
31
+ v = loan / eligible if eligible > 0 else float('inf')
32
+ print(f'[LTV] {loan}/({collateral_value}×{haircut}) = {v:.1%}' + (' ⚠ >100%:抵押不足值' if v > 1 else ''))
33
+ return round(v, 4)
34
+
35
+
36
+ def guarantee_coverage(exposure, collateral_after_haircut, guarantor_capacity):
37
+ """担保覆盖率 =(抵押折后值 + 保证人可代偿额)/ 授信敞口。"""
38
+ v = (collateral_after_haircut + guarantor_capacity) / exposure if exposure > 0 else float('inf')
39
+ print(f'[担保覆盖] ({collateral_after_haircut}+{guarantor_capacity})/{exposure} = {v:.1%}'
40
+ + (' ⚠ <100%:存在敞口缺口' if v < 1 else ''))
41
+ return round(v, 4)
42
+
43
+
44
+ if __name__ == '__main__':
45
+ assert dscr(ebitda=800, capex_required=150, tax=90, debt_service=400) == 1.4
46
+ low = dscr(800, 300, 90, 400)
47
+ assert low < 1.2
48
+ df = cash_gap(['1月', '2月', '3月'], [500, 450, 700], [420, 480, 500], [0, 200, 50])
49
+ assert (df['累计'] < 0).any() and df.loc[1, '累计'] == 80 - 230
50
+ assert ltv(loan=700, collateral_value=1000, haircut=0.7) == 1.0
51
+ cov = guarantee_coverage(exposure=1000, collateral_after_haircut=600, guarantor_capacity=300)
52
+ assert cov == 0.9
53
+ print('OK credit_metrics.py')