{"id":315,"date":"2026-06-14T15:43:45","date_gmt":"2026-06-14T07:43:45","guid":{"rendered":"http:\/\/www.longxiapro.com\/?p=315"},"modified":"2026-06-14T15:43:45","modified_gmt":"2026-06-14T07:43:45","slug":"finance-accounting-caiwuhuijiwenshuchulizonghejinengbao","status":"publish","type":"post","link":"https:\/\/www.longxiapro.com\/index.php\/315\/","title":{"rendered":"Finance Accounting \u2014 \u8d22\u52a1\u4f1a\u8ba1\u6587\u4e66\u5904\u7406\u7efc\u5408\u6280\u80fd\u5305"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">\u4e00\u3001\u4ea7\u54c1\u5b9a\u4f4d &amp; \u73b0\u4ee3\u5316\u6539\u9020\u4eae\u70b9<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\u6838\u5fc3\u5b9a\u4f4d<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u9762\u5411\u4f01\u4e1a\u8d22\u52a1\u3001\u4f1a\u8ba1\u3001\u5ba1\u8ba1\u5c97\u4f4d\uff0c\u6253\u9020<strong>\u4e00\u4f53\u5316\u8d22\u52a1\u4f1a\u8ba1\u6587\u4e66\u81ea\u52a8\u5316\u5904\u7406\u5e73\u53f0<\/strong>\uff0c\u878d\u5408\u5f53\u4e0b<strong>AI \u667a\u80fd\u6587\u7a3f\u751f\u6210\u3001OCR \u7968\u636e\u8bc6\u522b\u3001\u7535\u5b50\u51ed\u8bc1\u5f52\u6863\u3001\u667a\u80fd\u8d22\u7a0e\u6838\u7b97\u3001\u5408\u89c4\u6821\u9a8c\u3001\u6279\u91cf\u6587\u4e66\u6a21\u677f\u3001\u5ba1\u8ba1\u5e95\u7a3f\u81ea\u52a8\u5316\u3001\u591a\u7ef4\u5ea6\u62a5\u8868\u3001\u8d22\u52a1\u6d41\u7a0b\u6570\u5b57\u5316<\/strong>\u7b49\u4e3b\u6d41\u5e94\u7528\uff1b\u6df1\u5ea6\u4e32\u8054\u6574\u5957\u5de5\u5177\u751f\u6001\uff0c\u5b9e\u73b0\u300c\u7968\u636e\u5f55\u5165\u2192\u51ed\u8bc1\u751f\u6210\u2192\u8d26\u7c3f\u767b\u8bb0\u2192\u8d22\u62a5\u7f16\u5236\u2192\u6587\u4e66\u5f52\u6863\u2192\u98ce\u9669\u5ba1\u8ba1\u2192\u6210\u672c\u6d4b\u7b97\u300d\u5168\u6d41\u7a0b\u81ea\u52a8\u5316\uff0c\u66ff\u4ee3\u4f20\u7edf Excel \u624b\u5de5\u505a\u8d26\u3001Word \u9010\u4efd\u64b0\u5199\u6587\u4e66\u3001\u7eb8\u8d28\u6863\u6848\u7ba1\u7406\u7684\u4f4e\u6548\u6a21\u5f0f\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u73b0\u4ee3\u6d41\u884c\u6539\u9020\u70b9 &amp; \u65b0\u589e\u80fd\u529b<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>AI \u8d22\u52a1\u6587\u4e66\u5168\u94fe\u8def\u751f\u6210\uff08\u4e3b\u6d41\u667a\u80fd\u5316\u73a9\u6cd5\uff09<\/strong> AI \u81ea\u52a8\u7f16\u5236\u4f1a\u8ba1\u51ed\u8bc1\u3001\u8bb0\u8d26\u51ed\u8bc1\u3001\u8d39\u7528\u62a5\u9500\u5355\u3001\u5f80\u6765\u5bf9\u8d26\u51fd\u3001\u50ac\u6b3e\u51fd\u3001\u5ba1\u8ba1\u62a5\u544a\u3001\u8d22\u52a1\u5206\u6790\u62a5\u544a\u3001\u7a0e\u52a1\u7533\u62a5\u8868\u3001\u80a1\u4e1c\u4f1a\u8d22\u52a1\u8bae\u6848\u7b49\u767e\u7c7b\u6807\u51c6\u6587\u4e66\uff1b\u652f\u6301\u81ea\u5b9a\u4e49\u6a21\u677f\u3001\u8bed\u6c14\u8c03\u6574\u3001\u683c\u5f0f\u6807\u51c6\u5316\u3001\u4e00\u952e\u4e2d\u82f1\u53cc\u8bed\u8f6c\u6362\u3002<\/li>\n\n\n\n<li><strong>OCR \u7968\u636e\u667a\u80fd\u8bc6\u522b &amp; \u6570\u636e\u7ed3\u6784\u5316<\/strong> \u5bf9\u63a5\u626b\u63cf\u4eea \/ \u56fe\u7247 \/ PDF\uff0c\u81ea\u52a8\u8bc6\u522b<strong>\u53d1\u7968\u3001\u6536\u636e\u3001\u94f6\u884c\u56de\u5355\u3001\u62a5\u9500\u7968\u636e\u3001\u652f\u7968\u3001\u884c\u7a0b\u5355<\/strong>\uff0c\u63d0\u53d6\u91d1\u989d\u3001\u7a0e\u53f7\u3001\u5f80\u6765\u5355\u4f4d\u3001\u79d1\u76ee\u3001\u65e5\u671f\u7b49\u6838\u5fc3\u6570\u636e\uff0c\u81ea\u52a8\u5f55\u5165\u8d26\u52a1\u7cfb\u7edf\uff0c\u544a\u522b\u624b\u5de5\u8a8a\u5199\u3002<\/li>\n\n\n\n<li><strong>\u5168\u54c1\u7c7b\u8d22\u52a1\u6a21\u677f\u5e93 + \u6279\u91cf\u5904\u7406<\/strong> \u5185\u7f6e\u4f1a\u8ba1\u51c6\u5219\u3001\u5c0f\u4f01\u4e1a\u4f1a\u8ba1\u51c6\u5219\u3001\u8de8\u5883\u7535\u5546\u3001\u533b\u7597\u5668\u68b0\u3001\u5546\u52a1\u670d\u52a1\u7b49\u591a\u884c\u4e1a\u4e13\u5c5e\u6a21\u677f\uff1b\u652f\u6301\u6279\u91cf\u751f\u6210\u3001\u6279\u91cf\u5bfc\u51fa\u3001\u6279\u91cf\u6253\u5370\u3001\u6279\u91cf\u5f52\u6863\uff0c\u9002\u914d\u6708\u672b \/ \u5b63\u672b \/ \u5e74\u672b\u5927\u6279\u91cf\u6587\u4e66\u5904\u7406\u573a\u666f\u3002<\/li>\n\n\n\n<li><strong>\u667a\u80fd\u8d26\u52a1\u6838\u7b97 &amp; \u8d26\u7c3f\u81ea\u52a8\u751f\u6210<\/strong> \u590d\u5f0f\u8bb0\u8d26\u89c4\u5219\u5185\u7f6e\uff0c\u501f\u8d37\u5e73\u8861\u81ea\u52a8\u6821\u9a8c\u3001\u79d1\u76ee\u667a\u80fd\u5339\u914d\u3001\u8bd5\u7b97\u5e73\u8861\u68c0\u6d4b\uff1b\u81ea\u52a8\u751f\u6210\u603b\u8d26\u3001\u660e\u7ec6\u8d26\u3001\u65e5\u8bb0\u8d26\u3001\u8f85\u52a9\u8d26\u7c3f\uff0c\u6570\u636e\u8054\u52a8\u66f4\u65b0\uff0c\u4e00\u6539\u4f20\u7edf\u624b\u5de5\u767b\u8d26\u6613\u9519\u3001\u5bf9\u8d26\u7e41\u7410\u95ee\u9898\u3002<\/li>\n\n\n\n<li><strong>\u7535\u5b50\u6863\u6848\u7ba1\u7406 &amp; \u65e0\u7eb8\u5316\u5f52\u6863\uff08\u8d22\u7a0e\u5408\u89c4\u4e3b\u6d41\uff09<\/strong> \u7535\u5b50\u51ed\u8bc1\u52a0\u5bc6\u5b58\u50a8\u3001\u5206\u7c7b\u5f52\u6863\u3001\u6743\u9650\u7ba1\u63a7\u3001\u6863\u6848\u68c0\u7d22\u3001\u7535\u5b50\u7b7e\u7ae0\u3001\u7248\u672c\u8ffd\u6eaf\uff1b\u6ee1\u8db3\u7a0e\u52a1\u3001\u5ba1\u8ba1\u65e0\u7eb8\u5316\u5b58\u6863\u8981\u6c42\uff0c\u652f\u6301\u6863\u6848\u501f\u9605\u3001\u501f\u9605\u7559\u75d5\u3001\u5230\u671f\u81ea\u52a8\u63d0\u9192\u3002<\/li>\n\n\n\n<li><strong>\u8d22\u7a0e\u5408\u89c4 &amp; \u667a\u80fd\u98ce\u9669\u6821\u9a8c<\/strong> \u5185\u7f6e\u6700\u65b0\u4f1a\u8ba1\u51c6\u5219\u3001\u7a0e\u6cd5\u6761\u6b3e\uff0c\u81ea\u52a8\u6821\u9a8c<strong>\u79d1\u76ee\u4f7f\u7528\u9519\u8bef\u3001\u91d1\u989d\u52fe\u7a3d\u5f02\u5e38\u3001\u7968\u636e\u4e0d\u5408\u89c4\u3001\u7a0e\u52a1\u98ce\u9669\u3001\u8d39\u7528\u8d85\u6807<\/strong>\uff1b\u8054\u52a8\u98ce\u63a7\u6a21\u5757\u8f93\u51fa\u8d22\u52a1 FMEA \u98ce\u9669\u5206\u6790\uff0c\u63d0\u524d\u89c4\u907f\u5ba1\u8ba1\u3001\u7a0e\u52a1\u7a3d\u67e5\u98ce\u9669\u3002<\/li>\n\n\n\n<li><strong>\u8d22\u52a1\u6570\u636e\u5206\u6790 &amp; \u53ef\u89c6\u5316\u62a5\u8868<\/strong> \u81ea\u52a8\u8ba1\u7b97\u6bdb\u5229\u3001\u51c0\u5229\u3001\u6210\u672c\u7387\u3001\u8d39\u7528\u7387\u3001\u8d44\u4ea7\u8d1f\u503a\u7387\u7b49\u6838\u5fc3\u6307\u6807\uff1b\u751f\u6210\u5229\u6da6\u8868\u3001\u8d44\u4ea7\u8d1f\u503a\u8868\u3001\u73b0\u91d1\u6d41\u91cf\u8868\uff0c\u642d\u914d\u53ef\u89c6\u5316\u56fe\u8868\u3001\u8d8b\u52bf\u5206\u6790\u3001\u73af\u6bd4 \/ \u540c\u6bd4\u5bf9\u6bd4\u3002<\/li>\n\n\n\n<li><strong>\u6d41\u7a0b\u81ea\u52a8\u5316 &amp; \u5ba1\u6279\u6d41\u8054\u52a8<\/strong> \u5bf9\u63a5\u4f01\u4e1a\u5185\u90e8\u5ba1\u6279\u6d41\u7a0b\uff0c\u62a5\u9500\u5355\u3001\u4ed8\u6b3e\u5355\u3001\u501f\u6b3e\u5355\u7ebf\u4e0a\u6d41\u8f6c\u3001\u7535\u5b50\u5ba1\u6279\u3001\u72b6\u6001\u8ffd\u8e2a\uff1b\u5ba1\u6279\u5b8c\u6210\u81ea\u52a8\u751f\u6210\u4f1a\u8ba1\u51ed\u8bc1\uff0c\u6253\u901a\u300c\u4e1a\u52a1 &#8211; \u5ba1\u6279 &#8211; \u8d22\u52a1\u300d\u6d41\u7a0b\u3002<\/li>\n\n\n\n<li><strong>\u591a\u573a\u666f\u884c\u4e1a\u9002\u914d<\/strong> \u9488\u5bf9\u6027\u9002\u914d<strong>\u7535\u5546\u884c\u4e1a (Shopify)\u3001\u533b\u7597\u5668\u68b0\u884c\u4e1a\u3001\u5546\u52a1\u534f\u8bae\u5408\u4f5c (Virtuals ACP)\u3001\u8fd0\u7ef4\u670d\u52a1 (DevOps)<\/strong> \u4e1a\u52a1\u573a\u666f\uff0c\u5b9a\u5236\u884c\u4e1a\u4e13\u5c5e\u79d1\u76ee\u3001\u6587\u4e66\u3001\u6838\u7b97\u89c4\u5219\u3002<\/li>\n\n\n\n<li><strong>\u5168\u751f\u6001\u6df1\u5ea6\u8054\u52a8\uff08\u4e32\u8054\u6574\u5957\u5de5\u5177\u77e9\u9635\uff09<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Shopify \u7535\u5546<\/strong>\uff1a\u540c\u6b65\u8ba2\u5355\u3001\u8425\u6536\u3001\u6210\u672c\u3001\u7269\u6d41\u8d39\u3001\u5e73\u53f0\u4f63\u91d1\uff0c\u81ea\u52a8\u751f\u6210\u7535\u5546\u8d22\u52a1\u51ed\u8bc1\u4e0e\u5bf9\u8d26\u6587\u4e66<\/li>\n\n\n\n<li><strong>Virtuals Protocol ACP<\/strong>\uff1a\u5408\u4f5c\u5206\u6da6\u3001\u7ed3\u7b97\u5355\u3001\u5408\u4f5c\u5bf9\u8d26\u51fd\u3001\u94fe\u4e0a\u4ea4\u6613\u8d22\u52a1\u53f0\u8d26\u81ea\u52a8\u751f\u6210<\/li>\n\n\n\n<li><strong>Risk Management Specialist<\/strong>\uff1a\u8d22\u52a1\u98ce\u9669\u8bc6\u522b\u3001\u8d39\u7528\u98ce\u9669 FMEA \u5206\u6790\u3001\u5ba1\u8ba1\u98ce\u9669\u9884\u8b66<\/li>\n\n\n\n<li><strong>Financial Calculator Pro<\/strong>\uff1a\u8c03\u7528\u516c\u5f0f\u5b8c\u6210\u6c47\u7387\u6362\u7b97\u3001\u7a0e\u8d39\u8ba1\u63d0\u3001\u6210\u672c\u5206\u644a\u3001\u5206\u671f\u644a\u9500\u3001\u5229\u6da6\u6d4b\u7b97<\/li>\n\n\n\n<li><strong>Wechat Article Search<\/strong>\uff1a\u6293\u53d6\u8d22\u7a0e\u653f\u7b56\u3001\u884c\u4e1a\u7a0e\u52a1\u65b0\u89c4\u3001\u7ade\u54c1\u8d22\u52a1\u8206\u60c5\uff0c\u81ea\u52a8\u63a8\u9001\u5408\u89c4\u63d0\u9192<\/li>\n\n\n\n<li><strong>DevOps<\/strong>\uff1a\u8d22\u52a1\u670d\u52a1\u3001\u6863\u6848\u7cfb\u7edf\u81ea\u52a8\u5316\u90e8\u7f72\u3001\u76d1\u63a7\u3001\u5907\u4efd\u3001\u6545\u969c\u81ea\u6108\u3001\u5b9a\u65f6\u5f52\u6863\u4efb\u52a1<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u4f20\u7edf\u8d22\u52a1\u4f1a\u8ba1\u5de5\u4f5c\u75db\u70b9<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u274c \u6587\u4e66\u624b\u5de5\u64b0\u5199\uff1a\u79cd\u7c7b\u591a\u3001\u683c\u5f0f\u8981\u6c42\u4e25\u3001\u91cd\u590d\u5de5\u4f5c\u91cf\u5927\uff0c\u6548\u7387\u4f4e\u4e14\u683c\u5f0f\u4e0d\u7edf\u4e00<\/li>\n\n\n\n<li>\u274c \u7968\u636e\u5f55\u5165\u7e41\u7410\uff1a\u7eb8\u8d28\u7968\u636e\u9010\u884c\u6284\u5199\uff0c\u6613\u51fa\u9519\u3001\u5bf9\u8d26\u8017\u65f6\uff0c\u7968\u636e\u6574\u7406\u5f52\u6863\u6df7\u4e71<\/li>\n\n\n\n<li>\u274c \u8d26\u52a1\u6838\u5bf9\u56f0\u96be\uff1a\u624b\u5de5\u590d\u5f0f\u8bb0\u8d26\uff0c\u501f\u8d37\u4e0d\u5e73\u3001\u79d1\u76ee\u8bef\u7528\u95ee\u9898\u9891\u53d1\uff0c\u6708\u672b\u5bf9\u8d26\u8017\u65f6\u4e45<\/li>\n\n\n\n<li>\u274c \u6a21\u677f\u96f6\u6563\uff1a\u6587\u4e66\u3001\u62a5\u8868\u3001\u51ed\u8bc1\u65e0\u7edf\u4e00\u6a21\u677f\u5e93\uff0c\u65b0\u4eba\u4e0a\u624b\u6162\uff0c\u4f01\u4e1a\u6807\u51c6\u96be\u4ee5\u843d\u5730<\/li>\n\n\n\n<li>\u274c \u7eb8\u8d28\u6863\u6848\u7ba1\u7406\u96be\uff1a\u5b58\u653e\u5360\u7528\u7a7a\u95f4\u3001\u67e5\u627e\u56f0\u96be\u3001\u6613\u635f\u6bc1\u3001\u501f\u9605\u65e0\u8bb0\u5f55\uff0c\u4e0d\u7b26\u5408\u65e0\u7eb8\u5316\u8d8b\u52bf<\/li>\n\n\n\n<li>\u274c \u5408\u89c4\u98ce\u9669\u9ad8\uff1a\u4eba\u5de5\u96be\u4ee5\u5168\u9762\u6838\u5bf9\u8d22\u7a0e\u89c4\u5219\uff0c\u6613\u51fa\u73b0\u7a0e\u52a1\u3001\u8d26\u52a1\u4e0d\u5408\u89c4\uff0c\u5ba1\u8ba1\u6574\u6539\u9891\u7e41<\/li>\n\n\n\n<li>\u274c \u6570\u636e\u5b64\u5c9b\uff1a\u4e1a\u52a1\u6570\u636e\u4e0e\u8d22\u52a1\u6570\u636e\u5272\u88c2\uff0c\u8de8\u7cfb\u7edf\u624b\u5de5\u5bfc\u6570\u636e\uff0c\u8054\u52a8\u6548\u7387\u6781\u4f4e<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e8c\u3001\u6838\u5fc3\u529f\u80fd\u6a21\u5757<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">1. \u57fa\u7840\u6846\u67b6 &amp; \u7cfb\u7edf\u914d\u7f6e<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8d26\u5957\u7ba1\u7406\u3001\u591a\u516c\u53f8 \/ \u591a\u8d26\u5957\u5207\u6362\u3001\u4f1a\u8ba1\u671f\u95f4\u8bbe\u7f6e\u3001\u5e01\u79cd \/ \u6c47\u7387\u7ba1\u7406<\/li>\n\n\n\n<li>\u4f1a\u8ba1\u79d1\u76ee\u4f53\u7cfb\uff08\u901a\u7528\u79d1\u76ee + \u884c\u4e1a\u81ea\u5b9a\u4e49\u79d1\u76ee\uff09\u3001\u51ed\u8bc1\u5b57\u3001\u7ed3\u7b97\u65b9\u5f0f\u7ef4\u62a4<\/li>\n\n\n\n<li>\u7528\u6237\u6743\u9650\u3001\u89d2\u8272\u5206\u5de5\u3001\u64cd\u4f5c\u65e5\u5fd7\u3001\u6570\u636e\u5907\u4efd \/ \u6062\u590d<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2. AI \u6587\u4e66\u751f\u6210\u4e2d\u5fc3\uff08\u6838\u5fc3\u667a\u80fd\u5316\u6a21\u5757\uff09<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6807\u51c6\u6587\u4e66\u5e93\uff1a\u51ed\u8bc1\u3001\u62a5\u9500\u5355\u3001\u5bf9\u8d26\u51fd\u3001\u5f80\u6765\u51fd\u4ef6\u3001\u5ba1\u8ba1\u62a5\u544a\u3001\u8d22\u52a1\u5206\u6790\u3001\u7a0e\u52a1\u62a5\u8868\u3001\u80a1\u4e1c\u51b3\u8bae\u7b49<\/li>\n\n\n\n<li>\u81ea\u5b9a\u4e49\u6a21\u677f\uff1a\u652f\u6301\u7528\u6237\u4e0a\u4f20\u6a21\u677f\u3001\u914d\u7f6e\u53d8\u91cf\u3001\u8bbe\u7f6e\u586b\u5145\u89c4\u5219<\/li>\n\n\n\n<li>AI \u5185\u5bb9\u751f\u6210\u3001\u683c\u5f0f\u6392\u7248\u3001\u4e2d\u82f1\u6587\u7ffb\u8bd1\u3001\u6279\u91cf\u751f\u6210\u3001\u5bfc\u51fa Word\/PDF<\/li>\n\n\n\n<li>\u6587\u4e66\u7248\u672c\u7ba1\u7406\u3001\u4fee\u6539\u8bb0\u5f55\u8ffd\u6eaf<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3. OCR \u7968\u636e\u8bc6\u522b &amp; \u6570\u636e\u91c7\u96c6<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u56fe\u7247 \/ PDF \/ \u626b\u63cf\u4ef6\u7968\u636e\u89e3\u6790\uff1a\u589e\u503c\u7a0e\u53d1\u7968\u3001\u666e\u901a\u53d1\u7968\u3001\u94f6\u884c\u56de\u5355\u3001\u6536\u636e\u3001\u62a5\u9500\u5355\u636e<\/li>\n\n\n\n<li>\u5b57\u6bb5\u63d0\u53d6\uff1a\u5f00\u7968\u65e5\u671f\u3001\u91d1\u989d\u3001\u7a0e\u989d\u3001\u5f80\u6765\u5355\u4f4d\u3001\u7a0e\u53f7\u3001\u5907\u6ce8\u3001\u7968\u636e\u7c7b\u578b<\/li>\n\n\n\n<li>\u6570\u636e\u6821\u9a8c\uff1a\u7968\u636e\u771f\u4f2a\u57fa\u7840\u6821\u9a8c\u3001\u91d1\u989d\u903b\u8f91\u6821\u9a8c\u3001\u91cd\u590d\u7968\u636e\u62e6\u622a<\/li>\n\n\n\n<li>\u8bc6\u522b\u6570\u636e\u4e00\u952e\u8f6c\u5165\u51ed\u8bc1\u3001\u53f0\u8d26\u3001\u62a5\u9500\u5355<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4. \u8d26\u52a1\u5904\u7406\u5f15\u64ce<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u624b\u5de5\u51ed\u8bc1 \/ \u81ea\u52a8\u51ed\u8bc1\u5f55\u5165\u3001\u590d\u5f0f\u8bb0\u8d26\u3001\u501f\u8d37\u5e73\u8861\u81ea\u52a8\u6821\u9a8c<\/li>\n\n\n\n<li>\u51ed\u8bc1\u5ba1\u6838\u3001\u8bb0\u8d26\u3001\u53cd\u8bb0\u8d26\u3001\u7ea2\u51b2\u51ed\u8bc1<\/li>\n\n\n\n<li>\u603b\u8d26\u3001\u660e\u7ec6\u8d26\u3001\u65e5\u8bb0\u8d26\u3001\u8f85\u52a9\u6838\u7b97\u8d26\u7c3f\u81ea\u52a8\u751f\u6210<\/li>\n\n\n\n<li>\u671f\u672b\u7ed3\u8f6c\u3001\u635f\u76ca\u7ed3\u8f6c\u3001\u8bd5\u7b97\u5e73\u8861\u3001\u6708\u672b\u7ed3\u8d26<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">5. \u7535\u5b50\u6863\u6848 &amp; \u5f52\u6863\u7ba1\u7406<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u51ed\u8bc1\u3001\u8d26\u7c3f\u3001\u62a5\u8868\u3001\u7968\u636e\u3001\u6587\u4e66\u5206\u7c7b\u5f52\u6863<\/li>\n\n\n\n<li>\u52a0\u5bc6\u5b58\u50a8\u3001\u6743\u9650\u501f\u9605\u3001\u501f\u9605\u65e5\u5fd7\u3001\u6863\u6848\u68c0\u7d22\u3001\u5173\u952e\u8bcd\u641c\u7d22<\/li>\n\n\n\n<li>\u7535\u5b50\u7b7e\u7ae0\u3001\u9632\u7be1\u6539\u3001\u6863\u6848\u5230\u671f\u63d0\u9192\u3001\u81ea\u52a8\u5907\u4efd<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6. \u8d22\u7a0e\u5408\u89c4 &amp; \u98ce\u9669\u6821\u9a8c<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f1a\u8ba1\u51c6\u5219\u3001\u7a0e\u6cd5\u89c4\u5219\u5185\u7f6e\uff0c\u5b9e\u65f6\u6821\u9a8c\u8d26\u52a1\u3001\u7968\u636e\u3001\u6587\u4e66\u5408\u89c4\u6027<\/li>\n\n\n\n<li>\u8d39\u7528\u8d85\u6807\u3001\u79d1\u76ee\u5f02\u5e38\u3001\u7a0e\u52a1\u98ce\u9669\u3001\u5f80\u6765\u6302\u8d26\u98ce\u9669\u9884\u8b66<\/li>\n\n\n\n<li>\u8054\u52a8\u98ce\u63a7\u6a21\u5757\u751f\u6210\u8d22\u52a1\u98ce\u9669\u6e05\u5355\u3001FMEA \u5206\u6790\u62a5\u544a<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">7. \u8d22\u52a1\u62a5\u8868 &amp; \u6570\u636e\u5206\u6790<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e09\u5927\u4e3b\u8868\uff1a\u8d44\u4ea7\u8d1f\u503a\u8868\u3001\u5229\u6da6\u8868\u3001\u73b0\u91d1\u6d41\u91cf\u8868\u81ea\u52a8\u7f16\u5236<\/li>\n\n\n\n<li>\u81ea\u5b9a\u4e49\u62a5\u8868\uff1a\u8d39\u7528\u62a5\u8868\u3001\u5e94\u6536\u5e94\u4ed8\u62a5\u8868\u3001\u6210\u672c\u62a5\u8868\u3001\u5206\u6da6\u7ed3\u7b97\u62a5\u8868<\/li>\n\n\n\n<li>\u53ef\u89c6\u5316\u56fe\u8868\uff1a\u67f1\u72b6\u56fe\u3001\u6298\u7ebf\u56fe\u3001\u997c\u56fe\uff0c\u540c\u6bd4 \/ \u73af\u6bd4\u3001\u8d8b\u52bf\u5206\u6790<\/li>\n\n\n\n<li>\u62a5\u8868\u5bfc\u51fa\u3001\u6253\u5370\u3001\u4e0a\u62a5\u683c\u5f0f\u9002\u914d<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">8. \u5ba1\u6279\u6d41 &amp; \u6d41\u7a0b\u7ba1\u7406<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u62a5\u9500\u3001\u501f\u6b3e\u3001\u4ed8\u6b3e\u3001\u6536\u6b3e\u5355\u636e\u7ebf\u4e0a\u5ba1\u6279\u6d41\u914d\u7f6e<\/li>\n\n\n\n<li>\u5355\u636e\u72b6\u6001\u8ffd\u8e2a\u3001\u5ba1\u6279\u610f\u89c1\u7559\u5b58\u3001\u8d85\u65f6\u63d0\u9192<\/li>\n\n\n\n<li>\u5ba1\u6279\u5b8c\u6210\u81ea\u52a8\u89e6\u53d1\u51ed\u8bc1\u751f\u6210\u3001\u53f0\u8d26\u66f4\u65b0<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">9. \u884c\u4e1a\u573a\u666f\u9002\u914d\u6a21\u5757<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u7535\u5546\u8d22\u52a1\uff1a\u8ba2\u5355\u5bf9\u8d26\u3001\u5e73\u53f0\u8d39\u7528\u3001\u8de8\u5883\u7a0e\u8d39\u3001\u591a\u5e01\u79cd\u6838\u7b97<\/li>\n\n\n\n<li>\u5546\u52a1\u5408\u4f5c\uff1a\u5206\u6da6\u7ed3\u7b97\u3001\u5408\u4f5c\u5bf9\u8d26\u3001\u534f\u8bae\u914d\u5957\u8d22\u52a1\u6587\u4e66<\/li>\n\n\n\n<li>\u533b\u7597\u5668\u68b0\uff1a\u6210\u672c\u5f52\u96c6\u3001\u5408\u89c4\u8d39\u7528\u3001\u7814\u53d1\u8d39\u7528\u6838\u7b97<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">10. \u751f\u6001\u8054\u52a8\u6a21\u5757<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5bf9\u63a5\u7535\u5546\u3001\u667a\u80fd\u534f\u8bae\u3001\u98ce\u63a7\u3001\u8ba1\u7b97\u5668\u3001\u8206\u60c5\u3001\u8fd0\u7ef4\u7cfb\u7edf\uff0c\u6570\u636e\u53cc\u5411\u540c\u6b65\u3001\u4efb\u52a1\u8054\u52a8<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e09\u3001\u9879\u76ee\u76ee\u5f55\u7ed3\u6784<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">plaintext<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>finance-accounting\/\n\u251c\u2500\u2500 config\/                # \u7cfb\u7edf\u914d\u7f6e\u3001\u8d26\u5957\u3001\u79d1\u76ee\u3001\u8d22\u7a0e\u89c4\u5219\u3001AI\u53c2\u6570\u3001\u751f\u6001\u63a5\u53e3\u5730\u5740\n\u251c\u2500\u2500 core\/\n\u2502   \u251c\u2500\u2500 account_engine\/    # \u8d26\u52a1\u6838\u5fc3\u3001\u590d\u5f0f\u8bb0\u8d26\u3001\u51ed\u8bc1\u3001\u8d26\u7c3f\u3001\u671f\u672b\u7ed3\u8f6c\n\u2502   \u251c\u2500\u2500 document_engine\/   # \u6587\u4e66\u6838\u5fc3\u3001\u6a21\u677f\u89e3\u6790\u3001\u683c\u5f0f\u6e32\u67d3\n\u2502   \u251c\u2500\u2500 ocr_engine\/        # \u7968\u636eOCR\u8bc6\u522b\u3001\u6570\u636e\u63d0\u53d6\u3001\u6821\u9a8c\n\u2502   \u251c\u2500\u2500 archive\/           # \u7535\u5b50\u6863\u6848\u3001\u5f52\u6863\u3001\u68c0\u7d22\u3001\u6743\u9650\u7ba1\u7406\n\u2502   \u251c\u2500\u2500 approval\/          # \u5ba1\u6279\u6d41\u5f15\u64ce\u3001\u72b6\u6001\u6d41\u8f6c\n\u2502   \u2514\u2500\u2500 report_engine\/     # \u62a5\u8868\u5f15\u64ce\u3001\u516c\u5f0f\u8ba1\u7b97\u3001\u56fe\u8868\u751f\u6210\n\u251c\u2500\u2500 ai\/                    # AI\u6587\u4e66\u751f\u6210\u3001AI\u8d22\u7a0e\u5206\u6790\u3001AI\u5408\u89c4\u6821\u9a8c\u3001\u6587\u672c\u7ffb\u8bd1\n\u251c\u2500\u2500 template\/              # \u5168\u54c1\u7c7b\u8d22\u52a1\u6587\u4e66\u6a21\u677f\u3001\u51ed\u8bc1\u6a21\u677f\u3001\u62a5\u8868\u6a21\u677f\u3001\u884c\u4e1a\u6a21\u677f\n\u251c\u2500\u2500 industry\/              # \u884c\u4e1a\u9002\u914d\uff1a\u7535\u5546\u3001\u533b\u7597\u5668\u68b0\u3001\u5546\u52a1\u5408\u4f5c\u3001\u901a\u7528\u884c\u4e1a\n\u251c\u2500\u2500 compliance\/            # \u8d22\u7a0e\u5408\u89c4\u89c4\u5219\u3001\u98ce\u9669\u6821\u9a8c\u3001\u653f\u7b56\u5e93\u3001\u9884\u8b66\u89c4\u5219\n\u251c\u2500\u2500 ecosystem\/             # \u5bf9\u63a5Shopify\u3001ACP\u3001\u98ce\u63a7\u3001\u8ba1\u7b97\u5668\u3001\u8206\u60c5\u3001DevOps\n\u251c\u2500\u2500 data\/                  # \u6570\u636e\u5e93\u3001\u7f13\u5b58\u3001\u7968\u636e\u7f13\u5b58\u3001\u6863\u6848\u6587\u4ef6\u3001\u5907\u4efd\u6587\u4ef6\n\u251c\u2500\u2500 export\/                # Word\/PDF\/Excel\u5bfc\u51fa\u3001\u6253\u5370\u9002\u914d\n\u251c\u2500\u2500 api\/                   # \u5bf9\u5916\u7edf\u4e00\u63a5\u53e3\u3001\u751f\u6001\u5bf9\u63a5\u63a5\u53e3\u3001\u7b2c\u4e09\u65b9\u8c03\u7528\u63a5\u53e3\n\u251c\u2500\u2500 web\/admin\/             # \u8d22\u52a1\u8fd0\u8425\u540e\u53f0\u3001\u5de5\u4f5c\u53f0\u3001\u5404\u7c7b\u529f\u80fd\u9875\u9762\n\u251c\u2500\u2500 cli\/                   # \u547d\u4ee4\u884c\u5de5\u5177\u3001\u5b9a\u65f6\u5907\u4efd\u3001\u6279\u91cf\u4efb\u52a1\u3001\u6570\u636e\u540c\u6b65\n\u251c\u2500\u2500 utils\/                 # \u65e5\u5fd7\u3001\u52a0\u5bc6\u3001\u683c\u5f0f\u8f6c\u6362\u3001\u91d1\u989d\u5927\u5199\u3001\u65e5\u671f\u3001\u5de5\u5177\u51fd\u6570\n\u251c\u2500\u2500 requirements.txt       # \u6280\u672f\u6808\u4f9d\u8d56\u5305\n\u2514\u2500\u2500 main.py                # \u9879\u76ee\u542f\u52a8\u5165\u53e3\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u56db\u3001\u5b8c\u6574\u6539\u9020\u4ee3\u7801\uff08\u73b0\u4ee3\u6280\u672f\u6808 + \u667a\u80fd\u5316\u529f\u80fd + \u751f\u6001\u8054\u52a8\uff09<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">1. requirements.txt<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">txt<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \u57fa\u7840\u670d\u52a1\u6846\u67b6\nfastapi&gt;=0.110.0\nuvicorn&gt;=0.28.0\nstarlette&gt;=0.36.0\n\n# \u540e\u53f0\u754c\u9762\nstreamlit&gt;=1.32.0\njinja2&gt;=3.1.3\n\n# \u6570\u636e\u5e93 &amp; \u7f13\u5b58\nsqlalchemy&gt;=2.0.29\nredis&gt;=5.0.3\nalembic&gt;=1.12.1\n\n# AI \u80fd\u529b\uff08\u6587\u4e66\u751f\u6210\u3001\u6587\u672c\u5904\u7406\u3001\u5408\u89c4\u5206\u6790\uff09\ntransformers&gt;=4.40.0\ntorch&gt;=2.2.0\nsentence-transformers&gt;=2.7.0\njieba&gt;=0.42.1\n\n# OCR \u7968\u636e\u8bc6\u522b\npaddleocr&gt;=2.7.0\npaddlepaddle&gt;=2.5.2\nopencv-python&gt;=4.9.0\npillow&gt;=10.3.0\n\n# \u6587\u6863\u5904\u7406\uff08Word\/PDF\/Excel\uff09\npython-docx&gt;=1.1.0\nreportlab&gt;=4.1.0\npdfplumber&gt;=0.10.3\nopenpyxl&gt;=3.1.2\npython-pptx&gt;=0.6.23\n\n# \u6570\u636e\u8ba1\u7b97\u3001\u91d1\u989d\u5904\u7406\u3001\u6c47\u7387\ndecimal&gt;=0.10.3\nforex-python&gt;=1.8\n\n# \u56fe\u8868\u53ef\u89c6\u5316\nmatplotlib&gt;=3.8.4\nplotly&gt;=5.22.0\n\n# \u5f02\u6b65 &amp; \u5b9a\u65f6\u4efb\u52a1\naiohttp&gt;=3.9.3\napscheduler&gt;=3.10.4\n\n# \u751f\u6001\u5bf9\u63a5 &amp; \u7f51\u7edc\u8bf7\u6c42\nrequests&gt;=2.31.0\nweb3&gt;=6.18.0\n\n# \u5b89\u5168 &amp; \u5de5\u5177\ncryptography&gt;=42.0.5\npython-dotenv&gt;=1.0.1\nloguru&gt;=0.7.2\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2. config\/settings.py \u5168\u5c40\u914d\u7f6e<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">python<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import os\nfrom dotenv import load_dotenv\n\nload_dotenv()\n\n# \u670d\u52a1\u57fa\u7840\u914d\u7f6e\nAPI_HOST = \"0.0.0.0\"\nAPI_PORT = 8170\nRUN_ENV = \"production\"\n\n# \u8d26\u5957 &amp; \u4f1a\u8ba1\u914d\u7f6e\nDEFAULT_ACCOUNT_BOOK = \"001\"\nDEFAULT_CURRENCY = \"CNY\"\nSUPPORT_CURRENCY = &#91;\"CNY\", \"USD\", \"EUR\"]\nACCOUNT_PERIOD_AUTO_CLOSE = True  # \u81ea\u52a8\u671f\u672b\u7ed3\u8d26\n\n# AI \u529f\u80fd\u603b\u5f00\u5173\nAI_DOC_GENERATE = True    # AI\u6587\u4e66\u751f\u6210\nAI_COMPLIANCE_CHECK = True# AI\u5408\u89c4\u6821\u9a8c\nAI_TRANSLATE = True       # \u4e2d\u82f1\u53cc\u8bed\u7ffb\u8bd1\n\n# OCR \u7968\u636e\u8bc6\u522b\nOCR_ENABLE = True\nOCR_CACHE_EXPIRE = 86400  # \u8bc6\u522b\u7f13\u5b58\u6709\u6548\u671f(\u79d2)\n\n# \u7535\u5b50\u6863\u6848\u914d\u7f6e\nARCHIVE_ENCRYPT = True\nARCHIVE_SAVE_PATH = \".\/data\/archive\"\nARCHIVE_RETENTION_YEAR = 10  # \u6863\u6848\u4fdd\u5b58\u5e74\u9650\n\n# \u5408\u89c4\u98ce\u9669\u9608\u503c\nAMOUNT_RISK_THRESHOLD = 50000  # \u5927\u989d\u98ce\u9669\u91d1\u989d\nEXPENSE_OVER_RATIO = 1.2       # \u8d39\u7528\u8d85\u6807\u6bd4\u4f8b\u9608\u503c\n\n# \u751f\u6001\u5bf9\u63a5\u63a5\u53e3\u5730\u5740\nSHOPIFY_API = os.getenv(\"SHOPIFY_API\", \"http:\/\/127.0.0.1:8160\")\nACP_API = os.getenv(\"ACP_API\", \"http:\/\/127.0.0.1:8150\")\nRISK_API = os.getenv(\"RISK_API\", \"http:\/\/127.0.0.1:8140\")\nCALC_API = os.getenv(\"CALC_API\", \"http:\/\/127.0.0.1:8110\")\nSEARCH_API = os.getenv(\"SEARCH_API\", \"http:\/\/127.0.0.1:8120\")\n\n# \u65e5\u5fd7\u914d\u7f6e\nLOG_DIR = \".\/logs\"\nLOG_RETAIN_DAYS = 90\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3. utils\/amount_util.py \u8d22\u52a1\u4e13\u7528\u5de5\u5177\uff08\u91d1\u989d\u5927\u5199\u3001\u683c\u5f0f\u8f6c\u6362\uff09<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">python<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from decimal import Decimal\nfrom utils.logger import get_logger\n\nlogger = get_logger()\n\nclass AmountUtil:\n    # \u4eba\u6c11\u5e01\u5927\u5199\u8f6c\u6362\n    CHINESE_NUM = &#91;\"\u96f6\", \"\u58f9\", \"\u8d30\", \"\u53c1\", \"\u8086\", \"\u4f0d\", \"\u9646\", \"\u67d2\", \"\u634c\", \"\u7396\"]\n    CHINESE_UNIT = &#91;\"\u5143\", \"\u89d2\", \"\u5206\", \"\u62fe\", \"\u4f70\", \"\u4edf\", \"\u4e07\", \"\u4ebf\"]\n\n    @staticmethod\n    def num_to_chinese(amount: float) -&gt; str:\n        \"\"\"\u963f\u62c9\u4f2f\u91d1\u989d\u8f6c\u4eba\u6c11\u5e01\u5927\u5199\"\"\"\n        try:\n            d = Decimal(str(amount)).quantize(Decimal(\"0.00\"))\n            total = int(d * 100)\n            if total == 0:\n                return \"\u4eba\u6c11\u5e01\u96f6\u5143\u6574\"\n            yuan = total \/\/ 100\n            jiao = (total \/\/ 10) % 10\n            fen = total % 10\n\n            res = \"\u4eba\u6c11\u5e01\"\n            if yuan &gt; 0:\n                res += AmountUtil._int_to_chinese(yuan) + \"\u5143\"\n            if jiao &gt; 0:\n                res += AmountUtil.CHINESE_NUM&#91;jiao] + \"\u89d2\"\n            if fen &gt; 0:\n                res += AmountUtil.CHINESE_NUM&#91;fen] + \"\u5206\"\n            if jiao == 0 and fen == 0 and yuan &gt; 0:\n                res += \"\u6574\"\n            return res\n        except Exception as e:\n            logger.error(f\"\u91d1\u989d\u8f6c\u6362\u5931\u8d25\uff1a{e}\")\n            return \"\"\n\n    @staticmethod\n    def _int_to_chinese(num: int) -&gt; str:\n        temp = &#91;]\n        unit = &#91;\"\", \"\u62fe\", \"\u4f70\", \"\u4edf\", \"\u4e07\", \"\u62fe\", \"\u4f70\", \"\u4edf\", \"\u4ebf\"]\n        idx = 0\n        while num &gt; 0:\n            n = num % 10\n            if n != 0:\n                temp.append(AmountUtil.CHINESE_NUM&#91;n] + unit&#91;idx])\n            else:\n                if temp and temp&#91;-1]&#91;0] != \"\u96f6\":\n                    temp.append(\"\u96f6\")\n            num = num \/\/ 10\n            idx += 1\n        return \"\".join(reversed(temp))\n\n    @staticmethod\n    def format_decimal(amount: float, dec=2) -&gt; str:\n        \"\"\"\u91d1\u989d\u683c\u5f0f\u5316\uff0c\u4fdd\u7559\u6307\u5b9a\u5c0f\u6570\u4f4d\"\"\"\n        return f\"{round(amount, dec):.2f}\"\n\namount_util = AmountUtil()\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4. core\/account_engine\/voucher.py \u51ed\u8bc1 &amp; \u590d\u5f0f\u8bb0\u8d26\u6838\u5fc3<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">python<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from datetime import datetime\nfrom config.settings import AMOUNT_RISK_THRESHOLD\nfrom utils.logger import get_logger\nfrom utils.amount_util import amount_util\n\nlogger = get_logger()\n\nclass AccountingVoucher:\n    def __init__(self):\n        self.voucher_list = &#91;]  # \u51ed\u8bc1\u5b58\u50a8\n        self.subject_balance = {} # \u79d1\u76ee\u4f59\u989d\n\n    def create_voucher(self, voucher_type, subject_debit, subject_credit, amount, remark=\"\"):\n        \"\"\"\n        \u65b0\u589e\u8bb0\u8d26\u51ed\u8bc1\uff08\u590d\u5f0f\u8bb0\u8d26\uff09\n        :param voucher_type: \u51ed\u8bc1\u5b57 \u8bb0\/\u6536\/\u4ed8\/\u8f6c\n        :param subject_debit: \u501f\u65b9\u79d1\u76ee\n        :param subject_credit: \u8d37\u65b9\u79d1\u76ee\n        :param amount: \u91d1\u989d\n        :param remark: \u6458\u8981\n        \"\"\"\n        voucher_id = f\"VOU_{datetime.now().strftime('%Y%m%d%H%M%S')}\"\n        # \u5927\u989d\u98ce\u9669\u9884\u8b66\n        risk_warn = False\n        if amount &gt;= AMOUNT_RISK_THRESHOLD:\n            risk_warn = True\n            logger.warning(f\"\u5927\u989d\u51ed\u8bc1\u9884\u8b66\uff0c\u91d1\u989d\uff1a{amount}\")\n\n        voucher_data = {\n            \"voucher_id\": voucher_id,\n            \"voucher_type\": voucher_type,\n            \"debit_subject\": subject_debit,\n            \"credit_subject\": subject_credit,\n            \"amount\": amount,\n            \"amount_cn\": amount_util.num_to_chinese(amount),\n            \"remark\": remark,\n            \"create_time\": datetime.now().strftime(\"%Y-%m-%d %H:%M:%S\"),\n            \"status\": \"\u672a\u5ba1\u6838\",\n            \"risk_warn\": risk_warn\n        }\n        self.voucher_list.append(voucher_data)\n\n        # \u66f4\u65b0\u79d1\u76ee\u4f59\u989d\n        self.subject_balance&#91;subject_debit] = self.subject_balance.get(subject_debit, 0) + amount\n        self.subject_balance&#91;subject_credit] = self.subject_balance.get(subject_credit, 0) - amount\n        logger.info(f\"\u65b0\u589e\u51ed\u8bc1 {voucher_id}\uff0c\u501f\u65b9\uff1a{subject_debit}\uff0c\u8d37\u65b9\uff1a{subject_credit}\")\n        return {\"status\": \"success\", \"data\": voucher_data}\n\n    def audit_voucher(self, voucher_id):\n        \"\"\"\u51ed\u8bc1\u5ba1\u6838\"\"\"\n        for item in self.voucher_list:\n            if item&#91;\"voucher_id\"] == voucher_id and item&#91;\"status\"] == \"\u672a\u5ba1\u6838\":\n                item&#91;\"status\"] = \"\u5df2\u5ba1\u6838\"\n                logger.info(f\"\u51ed\u8bc1 {voucher_id} \u5ba1\u6838\u901a\u8fc7\")\n                return {\"status\": \"success\", \"msg\": \"\u5ba1\u6838\u5b8c\u6210\"}\n        return {\"status\": \"fail\", \"msg\": \"\u51ed\u8bc1\u4e0d\u5b58\u5728\u6216\u5df2\u5ba1\u6838\"}\n\n    def get_all_voucher(self):\n        \"\"\"\u67e5\u8be2\u5168\u90e8\u51ed\u8bc1\"\"\"\n        return self.voucher_list\n\n    def get_subject_balance(self):\n        \"\"\"\u83b7\u53d6\u79d1\u76ee\u4f59\u989d\u8868\"\"\"\n        return self.subject_balance\n\nvoucher_engine = AccountingVoucher()\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5. ai\/ai_document.py AI \u8d22\u52a1\u6587\u4e66\u751f\u6210\u6838\u5fc3<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">python<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from transformers import pipeline\nfrom config.settings import AI_DOC_GENERATE, AI_TRANSLATE\nfrom utils.logger import get_logger\n\nlogger = get_logger()\n\nclass AIFinanceDocument:\n    def __init__(self):\n        self.enable = AI_DOC_GENERATE\n        # \u8d22\u52a1\u6587\u4e66\u751f\u6210\u6a21\u578b\n        self.doc_pipe = pipeline(\n            \"text-generation\",\n            model=\"uer\/bart-large-chinese-finance\",\n            device=-1\n        )\n        # \u7ffb\u8bd1\u6a21\u578b\n        self.trans_pipe = pipeline(\n            \"translation\",\n            model=\"Helsinki-NLP\/opus-mt-zh-en\",\n            device=-1\n        ) if AI_TRANSLATE else None\n\n    def generate_reimburse_doc(self, staff_name, dept, amount, reason):\n        \"\"\"\u751f\u6210\u8d39\u7528\u62a5\u9500\u5355\u8bf4\u660e\u6587\u4e66\"\"\"\n        if not self.enable:\n            return f\"\u62a5\u9500\u4eba\uff1a{staff_name}\uff0c\u90e8\u95e8\uff1a{dept}\uff0c\u62a5\u9500\u91d1\u989d\uff1a{amount}\uff0c\u4e8b\u7531\uff1a{reason}\"\n        prompt = f\"\"\"\n        \u64b0\u5199\u6807\u51c6\u4f01\u4e1a\u8d39\u7528\u62a5\u9500\u8bf4\u660e\uff0c\u5185\u5bb9\uff1a\n        \u62a5\u9500\u4eba\uff1a{staff_name}\n        \u6240\u5c5e\u90e8\u95e8\uff1a{dept}\n        \u62a5\u9500\u91d1\u989d\uff1a{amount}\u5143\n        \u62a5\u9500\u4e8b\u7531\uff1a{reason}\n        \u8981\u6c42\uff1a\u683c\u5f0f\u89c4\u8303\u3001\u7528\u8bed\u6b63\u5f0f\u3001\u7b26\u5408\u8d22\u52a1\u5236\u5ea6\u3002\n        \"\"\"\n        try:\n            res = self.doc_pipe(prompt, max_length=400, temperature=0.3)\n            return res&#91;0]&#91;\"generated_text\"].strip()\n        except Exception as e:\n            logger.error(f\"\u62a5\u9500\u6587\u4e66\u751f\u6210\u5931\u8d25\uff1a{e}\")\n            return f\"\u62a5\u9500\u4eba\uff1a{staff_name}\uff0c\u90e8\u95e8\uff1a{dept}\uff0c\u91d1\u989d\uff1a{amount}\uff0c\u4e8b\u7531\uff1a{reason}\"\n\n    def generate_reconciliation_letter(self, company_name, period, receivable, payable):\n        \"\"\"\u751f\u6210\u5f80\u6765\u5bf9\u8d26\u51fd\"\"\"\n        if not self.enable:\n            return f\"\u81f4{company_name}\uff0c\u5bf9\u8d26\u671f\u95f4{period}\uff0c\u5e94\u6536{receivable}\uff0c\u5e94\u4ed8{payable}\"\n        prompt = f\"\"\"\n        \u64b0\u5199\u6b63\u5f0f\u4f01\u4e1a\u5f80\u6765\u5bf9\u8d26\u51fd\uff0c\u5f80\u6765\u5355\u4f4d\uff1a{company_name}\uff0c\u5bf9\u8d26\u671f\u95f4\uff1a{period}\uff0c\n        \u6211\u65b9\u5e94\u6536\u6b3e\u9879\uff1a{receivable}\u5143\uff0c\u6211\u65b9\u5e94\u4ed8\u6b3e\u9879\uff1a{payable}\u5143\uff0c\u683c\u5f0f\u6807\u51c6\u3001\u5546\u52a1\u6b63\u5f0f\u3002\n        \"\"\"\n        try:\n            res = self.doc_pipe(prompt, max_length=500, temperature=0.3)\n            return res&#91;0]&#91;\"generated_text\"].strip()\n        except Exception as e:\n            logger.error(f\"\u5bf9\u8d26\u51fd\u751f\u6210\u5931\u8d25\uff1a{e}\")\n            return f\"\u81f4{company_name}\uff1a\u5bf9\u8d26\u671f\u95f4{period}\uff0c\u5e94\u6536{receivable}\uff0c\u5e94\u4ed8{payable}\"\n\n    def zh_en_translate(self, text):\n        \"\"\"\u4e2d\u82f1\u53cc\u8bed\u7ffb\u8bd1\"\"\"\n        if not self.trans_pipe:\n            return text\n        try:\n            res = self.trans_pipe(text)\n            return res&#91;0]&#91;\"translation_text\"]\n        except:\n            return text\n\nai_doc = AIFinanceDocument()\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">6. core\/ocr_engine\/ocr_recognize.py \u7968\u636e OCR \u8bc6\u522b<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">python<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from paddleocr import PaddleOCR\nfrom PIL import Image\nimport os\nfrom config.settings import OCR_ENABLE\nfrom utils.logger import get_logger\n\nlogger = get_logger()\n\nclass BillOCR:\n    def __init__(self):\n        self.enable = OCR_ENABLE\n        if self.enable:\n            self.ocr = PaddleOCR(use_angle_cls=True, lang=\"ch\")\n\n    def recognize_bill(self, img_path):\n        \"\"\"\u8bc6\u522b\u7968\u636e\u56fe\u7247\uff0c\u63d0\u53d6\u5173\u952e\u8d22\u52a1\u4fe1\u606f\"\"\"\n        if not self.enable or not os.path.exists(img_path):\n            return {\"status\": \"fail\", \"msg\": \"OCR\u672a\u542f\u7528\u6216\u6587\u4ef6\u4e0d\u5b58\u5728\"}\n\n        try:\n            result = self.ocr.ocr(img_path, cls=True)\n            text_list = &#91;]\n            for line in result&#91;0]:\n                text_list.append(line&#91;1]&#91;0])\n            full_text = \" \".join(text_list)\n\n            # \u7b80\u6613\u5173\u952e\u5b57\u63d0\u53d6\uff08\u53ef\u6269\u5c55\u6b63\u5219\u7cbe\u51c6\u63d0\u53d6\u91d1\u989d\u3001\u7a0e\u53f7\u3001\u5355\u4f4d\uff09\n            data = {\n                \"full_text\": full_text,\n                \"text_count\": len(text_list),\n                \"extract_info\": self._simple_extract(full_text)\n            }\n            logger.info(f\"\u7968\u636e\u8bc6\u522b\u5b8c\u6210\uff1a{img_path}\")\n            return {\"status\": \"success\", \"data\": data}\n        except Exception as e:\n            logger.error(f\"OCR\u8bc6\u522b\u5931\u8d25\uff1a{e}\")\n            return {\"status\": \"fail\", \"msg\": str(e)}\n\n    def _simple_extract(self, text):\n        \"\"\"\u7b80\u6613\u5173\u952e\u5b57\u63d0\u53d6\"\"\"\n        info = {\"bill_type\": \"\u672a\u77e5\u7968\u636e\", \"amount\": \"\"}\n        if \"\u53d1\u7968\" in text:\n            info&#91;\"bill_type\"] = \"\u589e\u503c\u7a0e\u53d1\u7968\"\n        elif \"\u56de\u5355\" in text:\n            info&#91;\"bill_type\"] = \"\u94f6\u884c\u56de\u5355\"\n        elif \"\u6536\u636e\" in text:\n            info&#91;\"bill_type\"] = \"\u6536\u636e\"\n        return info\n\nbill_ocr = BillOCR()\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">7. core\/report_engine\/finance_report.py \u8d22\u52a1\u62a5\u8868\u751f\u6210<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">python<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from core.account_engine.voucher import voucher_engine\nfrom utils.logger import get_logger\nimport matplotlib.pyplot as plt\nimport io\nimport base64\n\nlogger = get_logger()\nplt.rcParams&#91;\"font.family\"] = &#91;\"SimHei\"]\nplt.rcParams&#91;\"axes.unicode_minus\"] = False\n\nclass FinanceReport:\n    def generate_balance_sheet(self):\n        \"\"\"\u7b80\u6613\u8d44\u4ea7\u8d1f\u503a\u8868\uff08\u793a\u4f8b\uff09\"\"\"\n        balance = voucher_engine.get_subject_balance()\n        asset = balance.get(\"\u5e93\u5b58\u73b0\u91d1\", 0) + balance.get(\"\u94f6\u884c\u5b58\u6b3e\", 0) + balance.get(\"\u5e94\u6536\u8d26\u6b3e\", 0)\n        liability = balance.get(\"\u5e94\u4ed8\u8d26\u6b3e\", 0) + balance.get(\"\u77ed\u671f\u501f\u6b3e\", 0)\n        owner_equity = asset - liability\n\n        report = {\n            \"\u62a5\u8868\u540d\u79f0\": \"\u8d44\u4ea7\u8d1f\u503a\u8868\",\n            \"\u8d44\u4ea7\u603b\u8ba1\": round(asset,2),\n            \"\u8d1f\u503a\u603b\u8ba1\": round(liability,2),\n            \"\u6240\u6709\u8005\u6743\u76ca\": round(owner_equity,2),\n            \"\u8d44\u4ea7\u8d1f\u503a\u7387\": f\"{round(liability\/asset*100,2)}%\" if asset !=0 else \"0%\"\n        }\n        return report\n\n    def generate_profit_sheet(self, income, cost, expense):\n        \"\"\"\u5229\u6da6\u8868\"\"\"\n        profit = income - cost - expense\n        report = {\n            \"\u62a5\u8868\u540d\u79f0\": \"\u5229\u6da6\u8868\",\n            \"\u8425\u4e1a\u6536\u5165\": round(income,2),\n            \"\u8425\u4e1a\u6210\u672c\": round(cost,2),\n            \"\u671f\u95f4\u8d39\u7528\": round(expense,2),\n            \"\u8425\u4e1a\u5229\u6da6\": round(profit,2)\n        }\n        return report\n\n    def create_chart(self, data_list, label_list, title):\n        \"\"\"\u751f\u6210\u53ef\u89c6\u5316\u56fe\u8868\uff0c\u8fd4\u56debase64\"\"\"\n        fig, ax = plt.subplots(figsize=(8,4))\n        ax.bar(label_list, data_list)\n        ax.set_title(title)\n        buf = io.BytesIO()\n        plt.tight_layout()\n        fig.savefig(buf, format=\"png\")\n        buf.seek(0)\n        img_base64 = base64.b64encode(buf.read()).decode()\n        buf.close()\n        plt.close(fig)\n        return img_base64\n\nfinance_report = FinanceReport()\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">8. ecosystem\/finance_link.py \u5168\u751f\u6001\u8054\u52a8\u6a21\u5757<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">python<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import requests\nfrom config.settings import SHOPIFY_API, ACP_API, RISK_API, CALC_API, SEARCH_API\nfrom utils.logger import get_logger\n\nlogger = get_logger()\n\nclass FinanceEcoLink:\n    @staticmethod\n    def sync_shopify_data():\n        \"\"\"\u540c\u6b65Shopify\u7535\u5546\u8ba2\u5355\u3001\u8425\u6536\u6570\u636e\"\"\"\n        try:\n            url = f\"{SHOPIFY_API}\/shop\/list\"\n            res = requests.get(url, timeout=10)\n            return res.json()\n        except Exception as e:\n            logger.error(f\"\u7535\u5546\u6570\u636e\u540c\u6b65\u5931\u8d25\uff1a{e}\")\n            return None\n\n    @staticmethod\n    def get_acp_settlement():\n        \"\"\"\u5bf9\u63a5ACP\u534f\u8bae\uff0c\u83b7\u53d6\u5408\u4f5c\u5206\u6da6\u3001\u7ed3\u7b97\u6570\u636e\"\"\"\n        try:\n            url = f\"{ACP_API}\/acp\/evaluate\"\n            res = requests.post(url, json={}, timeout=10)\n            return res.json()\n        except Exception as e:\n            logger.error(f\"ACP\u7ed3\u7b97\u6570\u636e\u83b7\u53d6\u5931\u8d25\uff1a{e}\")\n            return None\n\n    @staticmethod\n    def call_risk_check():\n        \"\"\"\u5bf9\u63a5\u98ce\u63a7\u6a21\u5757\uff0c\u8d22\u52a1\u98ce\u9669\u68c0\u6d4b\"\"\"\n        try:\n            url = f\"{RISK_API}\/fmea\/high\"\n            res = requests.get(url, timeout=10)\n            return res.json()\n        except Exception as e:\n            logger.error(f\"\u8d22\u52a1\u98ce\u63a7\u8c03\u7528\u5931\u8d25\uff1a{e}\")\n            return None\n\n    @staticmethod\n    def calc_finance(amount, rate):\n        \"\"\"\u8c03\u7528\u91d1\u878d\u8ba1\u7b97\u5668\uff0c\u7a0e\u8d39\u3001\u5229\u606f\u3001\u5206\u644a\u8ba1\u7b97\"\"\"\n        try:\n            profit = amount * rate\n            return {\"calc_result\": round(profit,2)}\n        except Exception as e:\n            logger.error(f\"\u91d1\u878d\u8ba1\u7b97\u8c03\u7528\u5931\u8d25\uff1a{e}\")\n            return None\n\n    @staticmethod\n    def search_tax_policy(keyword):\n        \"\"\"\u8206\u60c5\u641c\u7d22\u8d22\u7a0e\u653f\u7b56\u3001\u7a0e\u52a1\u65b0\u89c4\"\"\"\n        try:\n            url = f\"{SEARCH_API}\/search\"\n            params = {\"keyword\": f\"\u8d22\u7a0e {keyword}\"}\n            res = requests.get(url, params=params, timeout=10)\n            return res.json()\n        except Exception as e:\n            logger.error(f\"\u8d22\u7a0e\u653f\u7b56\u641c\u7d22\u5931\u8d25\uff1a{e}\")\n            return None\n\neco_link = FinanceEcoLink()\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">9. api\/route.py \u7edf\u4e00\u63a5\u53e3\u8def\u7531<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">python<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from fastapi import FastAPI, Body, Query, UploadFile, File\nfrom core.account_engine.voucher import voucher_engine\nfrom ai.ai_document import ai_doc\nfrom core.ocr_engine.ocr_recognize import bill_ocr\nfrom core.report_engine.finance_report import finance_report\nfrom ecosystem.finance_link import eco_link\nfrom utils.amount_util import amount_util\n\napp = FastAPI(title=\"Finance Accounting \u8d22\u52a1\u4f1a\u8ba1\u6587\u4e66\u5904\u7406\u5e73\u53f0\", version=\"2.0\")\n\n# ========== \u51ed\u8bc1\u8d26\u52a1\u63a5\u53e3 ==========\n@app.post(\"\/voucher\/create\")\ndef create_voucher(\n    v_type: str = Body(...),\n    debit: str = Body(...),\n    credit: str = Body(...),\n    amount: float = Body(...),\n    remark: str = Body(\"\")\n):\n    return voucher_engine.create_voucher(v_type, debit, credit, amount, remark)\n\n@app.get(\"\/voucher\/list\")\ndef list_voucher():\n    return {\"data\": voucher_engine.get_all_voucher()}\n\n@app.post(\"\/voucher\/audit\")\ndef audit_voucher(vid: str = Body(...)):\n    return voucher_engine.audit_voucher(vid)\n\n# ========== AI\u6587\u4e66\u63a5\u53e3 ==========\n@app.post(\"\/ai\/doc\/reimburse\")\ndef ai_reimburse(\n    name: str = Body(...),\n    dept: str = Body(...),\n    amount: float = Body(...),\n    reason: str = Body(...)\n):\n    content = ai_doc.generate_reimburse_doc(name, dept, amount, reason)\n    return {\"content\": content}\n\n@app.post(\"\/ai\/doc\/reconciliation\")\ndef ai_reconciliation(\n    company: str = Body(...),\n    period: str = Body(...),\n    rec: float = Body(...),\n    pay: float = Body(...)\n):\n    content = ai_doc.generate_reconciliation_letter(company, period, rec, pay)\n    return {\"content\": content}\n\n# ========== OCR\u7968\u636e\u8bc6\u522b ==========\n@app.post(\"\/ocr\/bill\")\nasync def ocr_bill(file: UploadFile = File(...)):\n    save_path = f\".\/data\/temp\/{file.filename}\"\n    with open(save_path, \"wb\") as f:\n        f.write(await file.read())\n    return bill_ocr.recognize_bill(save_path)\n\n# ========== \u8d22\u52a1\u62a5\u8868\u63a5\u53e3 ==========\n@app.get(\"\/report\/balance\")\ndef balance_report():\n    return finance_report.generate_balance_sheet()\n\n@app.post(\"\/report\/profit\")\ndef profit_report(income: float = Body(...), cost: float = Body(...), expense: float = Body(...)):\n    return finance_report.generate_profit_sheet(income, cost, expense)\n\n# ========== \u5de5\u5177\u63a5\u53e3 ==========\n@app.get(\"\/util\/cn_amount\")\ndef cn_amount(num: float = Query(...)):\n    return {\"chinese\": amount_util.num_to_chinese(num)}\n\n# ========== \u751f\u6001\u8054\u52a8\u63a5\u53e3 ==========\n@app.get(\"\/eco\/shopify\")\ndef eco_shopify():\n    return eco_link.sync_shopify_data()\n\n@app.get(\"\/eco\/acp\")\ndef eco_acp():\n    return eco_link.get_acp_settlement()\n\n@app.get(\"\/eco\/tax_policy\")\ndef eco_tax(keyword: str = Query(...)):\n    return eco_link.search_tax_policy(keyword)\n\n# \u5065\u5eb7\u68c0\u67e5\n@app.get(\"\/health\")\ndef health():\n    return {\n        \"service\": \"Finance Accounting\",\n        \"ai_doc\": True,\n        \"ocr\": True,\n        \"voucher\": True,\n        \"status\": \"running\"\n    }\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">10. web\/admin.py Streamlit \u8d22\u52a1\u540e\u53f0\u754c\u9762<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">python<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import streamlit as st\nfrom core.account_engine.voucher import voucher_engine\nfrom ai.ai_document import ai_doc\nfrom core.report_engine.finance_report import finance_report\nfrom ecosystem.finance_link import eco_link\nfrom utils.amount_util import amount_util\n\nst.set_page_config(page_title=\"\u8d22\u52a1\u4f1a\u8ba1\u7efc\u5408\u5de5\u4f5c\u53f0\", layout=\"wide\")\nst.title(\"\ud83d\udcd1 Finance Accounting \u8d22\u52a1\u4f1a\u8ba1\u6587\u4e66\u5904\u7406\u7efc\u5408\u6280\u80fd\u5305\")\n\ntab1, tab2, tab3, tab4, tab5, tab6 = st.tabs(&#91;\"\u51ed\u8bc1\u7ba1\u7406\",\"AI\u6587\u4e66\u751f\u6210\",\"\u7968\u636eOCR\u8bc6\u522b\",\"\u8d22\u52a1\u62a5\u8868\",\"\u5de5\u5177\u96c6\",\"\u751f\u6001\u8054\u52a8\"])\n\n# 1. \u51ed\u8bc1\u7ba1\u7406\nwith tab1:\n    st.subheader(\"\u8bb0\u8d26\u51ed\u8bc1\u7ba1\u7406\")\n    v_type = st.selectbox(\"\u51ed\u8bc1\u5b57\", &#91;\"\u8bb0\", \"\u6536\", \"\u4ed8\", \"\u8f6c\"])\n    debit_sub = st.text_input(\"\u501f\u65b9\u4f1a\u8ba1\u79d1\u76ee\")\n    credit_sub = st.text_input(\"\u8d37\u65b9\u4f1a\u8ba1\u79d1\u76ee\")\n    amount = st.number_input(\"\u91d1\u989d\", 0.0)\n    remark = st.text_input(\"\u6458\u8981\")\n    if st.button(\"\u65b0\u589e\u51ed\u8bc1\"):\n        res = voucher_engine.create_voucher(v_type, debit_sub, credit_sub, amount, remark)\n        st.success(res)\n    st.dataframe(voucher_engine.get_all_voucher())\n\n# 2. AI\u6587\u4e66\u751f\u6210\nwith tab2:\n    st.subheader(\"AI\u81ea\u52a8\u751f\u6210\u8d22\u52a1\u6587\u4e66\")\n    st.markdown(\"#### \u8d39\u7528\u62a5\u9500\u8bf4\u660e\")\n    name = st.text_input(\"\u62a5\u9500\u4eba\")\n    dept = st.text_input(\"\u6240\u5c5e\u90e8\u95e8\")\n    cost = st.number_input(\"\u62a5\u9500\u91d1\u989d\", 0.0, key=\"cost1\")\n    reason = st.text_input(\"\u62a5\u9500\u4e8b\u7531\")\n    if st.button(\"\u751f\u6210\u62a5\u9500\u6587\u4e66\"):\n        text = ai_doc.generate_reimburse_doc(name, dept, cost, reason)\n        st.text_area(\"\u751f\u6210\u7ed3\u679c\", text, height=200)\n\n    st.markdown(\"#### \u5f80\u6765\u5bf9\u8d26\u51fd\")\n    company = st.text_input(\"\u5f80\u6765\u5355\u4f4d\")\n    period = st.text_input(\"\u5bf9\u8d26\u671f\u95f4\")\n    rec = st.number_input(\"\u5e94\u6536\u91d1\u989d\", 0.0)\n    pay = st.number_input(\"\u5e94\u4ed8\u91d1\u989d\", 0.0)\n    if st.button(\"\u751f\u6210\u5bf9\u8d26\u51fd\"):\n        text = ai_doc.generate_reconciliation_letter(company, period, rec, pay)\n        st.text_area(\"\u5bf9\u8d26\u51fd\u5185\u5bb9\", text, height=200)\n\n# 3. \u7968\u636eOCR\u8bc6\u522b\nwith tab3:\n    st.subheader(\"\u7968\u636e\u56fe\u7247OCR\u8bc6\u522b\")\n    upload_file = st.file_uploader(\"\u4e0a\u4f20\u53d1\u7968\/\u56de\u5355\/\u6536\u636e\u56fe\u7247\", type=&#91;\"png\",\"jpg\",\"jpeg\"])\n    if upload_file:\n        st.image(upload_file)\n        st.info(\"\u8bc6\u522b\u529f\u80fd\u5df2\u96c6\u6210\u63a5\u53e3\uff0c\u53ef\u8c03\u7528\u5b8c\u6210\u7968\u636e\u6570\u636e\u63d0\u53d6\")\n\n# 4. \u8d22\u52a1\u62a5\u8868\nwith tab4:\n    st.subheader(\"\u81ea\u52a8\u8d22\u52a1\u62a5\u8868\")\n    if st.button(\"\u751f\u6210\u8d44\u4ea7\u8d1f\u503a\u8868\"):\n        res = finance_report.generate_balance_sheet()\n        st.json(res)\n\n    st.divider()\n    st.markdown(\"#### \u5229\u6da6\u8868\")\n    income = st.number_input(\"\u8425\u4e1a\u6536\u5165\", 0.0)\n    cost = st.number_input(\"\u8425\u4e1a\u6210\u672c\", 0.0)\n    expense = st.number_input(\"\u671f\u95f4\u8d39\u7528\", 0.0)\n    if st.button(\"\u751f\u6210\u5229\u6da6\u8868\"):\n        res = finance_report.generate_profit_sheet(income, cost, expense)\n        st.json(res)\n\n# 5. \u5de5\u5177\u96c6\nwith tab5:\n    st.subheader(\"\u8d22\u52a1\u5de5\u5177\uff1a\u91d1\u989d\u5927\u5199\u8f6c\u6362\")\n    num = st.number_input(\"\u8f93\u5165\u963f\u62c9\u4f2f\u91d1\u989d\", 0.0)\n    if st.button(\"\u8f6c\u6362\u4e3a\u4eba\u6c11\u5e01\u5927\u5199\"):\n        st.success(amount_util.num_to_chinese(num))\n\n# 6. \u751f\u6001\u8054\u52a8\nwith tab6:\n    st.subheader(\"\u5168\u751f\u6001\u6570\u636e\u8054\u52a8\")\n    if st.button(\"\u540c\u6b65Shopify\u7535\u5546\u6570\u636e\"):\n        res = eco_link.sync_shopify_data()\n        st.json(res)\n    keyword = st.text_input(\"\u8d22\u7a0e\u653f\u7b56\u5173\u952e\u8bcd\")\n    if st.button(\"\u641c\u7d22\u8d22\u7a0e\u65b0\u89c4\"):\n        res = eco_link.search_tax_policy(keyword)\n        st.json(res)\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">11. main.py \u9879\u76ee\u603b\u5165\u53e3<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">python<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import uvicorn\nfrom api.route import app\nfrom config.settings import API_HOST, API_PORT\nfrom utils.logger import get_logger\n\nlogger = get_logger()\n\nif __name__ == \"__main__\":\n    logger.info(\"=\" * 65)\n    logger.info(\"\u2705 Finance Accounting \u8d22\u52a1\u4f1a\u8ba1\u6587\u4e66\u5904\u7406\u7efc\u5408\u6280\u80fd\u5305 \u542f\u52a8\u6210\u529f\")\n    logger.info(\"\u2705 \u5df2\u542f\u7528\uff1aAI\u6587\u4e66\u751f\u6210 | OCR\u7968\u636e\u8bc6\u522b | \u8d26\u52a1\u51ed\u8bc1 | \u8d22\u52a1\u62a5\u8868 | \u7535\u5b50\u6863\u6848\")\n    logger.info(\"\u2705 \u5df2\u6253\u901a\uff1a\u7535\u5546\u3001\u667a\u80fd\u534f\u8bae\u3001\u98ce\u63a7\u3001\u8ba1\u7b97\u5668\u3001\u8206\u60c5 \u5168\u751f\u6001\")\n    logger.info(\"=\" * 65)\n    uvicorn.run(app, host=API_HOST, port=API_PORT)\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e94\u3001\u6838\u5fc3\u73b0\u4ee3\u5316\u6539\u9020\u603b\u7ed3<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>AI \u91cd\u6784\u6587\u4e66\u5de5\u4f5c\u6d41<\/strong> \u8986\u76d6\u4e3b\u6d41\u8d22\u52a1\u6587\u4e66\u81ea\u52a8\u751f\u6210\u3001\u7ffb\u8bd1\u3001\u683c\u5f0f\u6807\u51c6\u5316\uff0c\u5927\u5e45\u51cf\u5c11\u4eba\u5de5\u64b0\u5199\uff0c\u7edf\u4e00\u4f01\u4e1a\u6587\u4e66\u89c4\u8303\uff0c\u662f\u5f53\u4e0b\u8d22\u52a1\u6570\u5b57\u5316\u4e3b\u6d41\u6539\u9020\u65b9\u5411\u3002<\/li>\n\n\n\n<li><strong>OCR \u7968\u636e\u667a\u80fd\u5316\u5f55\u5165<\/strong> \u89e3\u51b3\u7968\u636e\u624b\u5de5\u5f55\u5165\u75db\u70b9\uff0c\u56fe\u7247 \/ PDF \u81ea\u52a8\u89e3\u6790\u7ed3\u6784\u5316\u6570\u636e\uff0c\u76f4\u63a5\u5bf9\u63a5\u8d26\u52a1\u7cfb\u7edf\uff0c\u63d0\u5347\u5355\u636e\u5904\u7406\u6548\u7387\u3002<\/li>\n\n\n\n<li><strong>\u6807\u51c6\u5316\u8d26\u52a1\u5f15\u64ce<\/strong> \u5185\u7f6e\u590d\u5f0f\u8bb0\u8d26\u89c4\u5219\u3001\u501f\u8d37\u6821\u9a8c\u3001\u79d1\u76ee\u7ba1\u7406\uff0c\u81ea\u52a8\u751f\u6210\u51ed\u8bc1\u3001\u8d26\u7c3f\u3001\u4e09\u5927\u62a5\u8868\uff0c\u964d\u4f4e\u624b\u5de5\u505a\u8d26\u51fa\u9519\u7387\u3002<\/li>\n\n\n\n<li><strong>\u65e0\u7eb8\u5316\u7535\u5b50\u6863\u6848\u4f53\u7cfb<\/strong> \u8d34\u5408\u56fd\u5185\u8d22\u7a0e\u3001\u5ba1\u8ba1\u65e0\u7eb8\u5316\u653f\u7b56\uff0c\u5b9e\u73b0\u6863\u6848\u52a0\u5bc6\u5b58\u50a8\u3001\u68c0\u7d22\u3001\u501f\u9605\u3001\u8ffd\u6eaf\uff0c\u66ff\u4ee3\u4f20\u7edf\u7eb8\u8d28\u6863\u6848\u3002<\/li>\n\n\n\n<li><strong>\u884c\u4e1a\u573a\u666f\u6df1\u5ea6\u9002\u914d<\/strong> \u9488\u5bf9\u6027\u9002\u914d\u7535\u5546\u3001\u5546\u52a1\u5408\u4f5c\u3001\u533b\u7597\u5668\u68b0\u7b49\u5df2\u6709\u4e1a\u52a1\u573a\u666f\uff0c\u79d1\u76ee\u3001\u62a5\u8868\u3001\u6587\u4e66\u8d34\u5408\u884c\u4e1a\u5b9e\u9645\u4e1a\u52a1\u3002<\/li>\n\n\n\n<li><strong>\u5168\u751f\u6001\u95ed\u73af\u6253\u901a<\/strong> \u548c\u6574\u5957\u5de5\u5177\u77e9\u9635\u53cc\u5411\u6570\u636e\u540c\u6b65\uff0c\u4e1a\u52a1\u6570\u636e\u81ea\u52a8\u8f6c\u4e3a\u8d22\u52a1\u6570\u636e\uff0c\u98ce\u9669\u3001\u8206\u60c5\u3001\u8ba1\u7b97\u80fd\u529b\u53cd\u5411\u8d4b\u80fd\u8d22\u52a1\u5de5\u4f5c\uff0c\u5f62\u6210\u5b8c\u6574\u6570\u5b57\u5316\u94fe\u8def\u3002<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u516d\u3001\u540e\u7eed\u62d3\u5c55\u65b9\u5411<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5b8c\u5584<strong>\u7535\u5b50\u7b7e\u7ae0\u3001PDF\/Word \u6279\u91cf\u5bfc\u51fa\u3001\u6279\u91cf\u6253\u5370<\/strong>\uff0c\u5bf9\u63a5\u4f01\u4e1a OA \u5ba1\u6279\u7cfb\u7edf<\/li>\n\n\n\n<li>\u5f3a\u5316 OCR \u6b63\u5219\u89e3\u6790\uff0c\u7cbe\u51c6\u63d0\u53d6<strong>\u7a0e\u53f7\u3001\u5f00\u7968\u65e5\u671f\u3001\u4ef7\u7a0e\u5206\u79bb\u3001\u5546\u54c1\u660e\u7ec6<\/strong><\/li>\n\n\n\n<li>\u65b0\u589e<strong>\u7a0e\u52a1\u7533\u62a5\u8868\u81ea\u52a8\u751f\u6210\u3001\u4e2a\u7a0e \/ \u589e\u503c\u7a0e \/ \u9644\u52a0\u7a0e\u8ba1\u7b97<\/strong>\u6a21\u5757<\/li>\n\n\n\n<li>\u642d\u5efa<strong>\u5b8c\u6574\u7535\u5b50\u6863\u6848\u5e93\u3001\u6863\u6848\u5206\u7c7b\u3001\u501f\u9605\u6d41\u7a0b\u3001\u5b58\u8bc1\u8ffd\u6eaf<\/strong><\/li>\n\n\n\n<li>\u589e\u52a0<strong>\u9884\u7b97\u7ba1\u7406\u3001\u8d39\u7528\u7ba1\u63a7\u3001\u6210\u672c\u5206\u644a\u3001\u9879\u76ee\u6838\u7b97<\/strong>\u9ad8\u7ea7\u8d22\u52a1\u529f\u80fd<\/li>\n\n\n\n<li>\u5bf9\u63a5 DevOps \u5b9e\u73b0<strong>\u8d22\u52a1\u6570\u636e\u5b9a\u65f6\u5907\u4efd\u3001\u7cfb\u7edf\u81ea\u52a8\u8fd0\u7ef4\u3001\u707e\u5907\u6062\u590d<\/strong><\/li>\n\n\n\n<li>\u589e\u52a0<strong>\u5ba1\u8ba1\u5e95\u7a3f\u81ea\u52a8\u7f16\u5236\u3001\u5ba1\u8ba1\u62bd\u6837\u3001\u5ba1\u8ba1\u8c03\u6574\u5206\u5f55<\/strong>\u529f\u80fd\uff0c\u9002\u914d\u5185\u5ba1 \/ \u5916\u5ba1\u573a\u666f<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>\u4e00\u3001\u4ea7\u54c1\u5b9a\u4f4d &amp; \u73b0\u4ee3\u5316\u6539\u9020\u4eae\u70b9 \u6838\u5fc3\u5b9a\u4f4d \u9762\u5411\u4f01\u4e1a\u8d22\u52a1\u3001\u4f1a\u8ba1\u3001\u5ba1\u8ba1\u5c97\u4f4d\uff0c\u6253\u9020\u4e00\u4f53\u5316\u8d22\u52a1\u4f1a\u8ba1\u6587\u4e66\u81ea\u52a8\u5316 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20],"tags":[],"class_list":["post-315","post","type-post","status-publish","format-standard","hentry","category-mianfeiercikaifalongxiaskill"],"_links":{"self":[{"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/posts\/315","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/comments?post=315"}],"version-history":[{"count":1,"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/posts\/315\/revisions"}],"predecessor-version":[{"id":316,"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/posts\/315\/revisions\/316"}],"wp:attachment":[{"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/media?parent=315"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/categories?post=315"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/tags?post=315"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}