{"id":13522604,"url":"https://github.com/deb-sig/double-entry-generator","last_synced_at":"2025-03-31T22:31:58.269Z","repository":{"id":39652966,"uuid":"213560328","full_name":"deb-sig/double-entry-generator","owner":"deb-sig","description":"Rule-based double-entry bookkeeping importer (from Alipay/WeChat/Huobi etc. to Beancount/Ledger).","archived":false,"fork":false,"pushed_at":"2025-03-16T19:15:58.000Z","size":2122,"stargazers_count":562,"open_issues_count":21,"forks_count":86,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-03-16T20:26:40.130Z","etag":null,"topics":["alipay","alipay-records","beancount","double-entry-accounting","double-entry-bookkeeping","hacktoberfest","ledger","wechat"],"latest_commit_sha":null,"homepage":"https://github.com/deb-sig/double-entry-generator","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/deb-sig.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["gaocegege"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2019-10-08T06:00:41.000Z","updated_at":"2025-03-16T19:05:41.000Z","dependencies_parsed_at":"2024-11-02T06:31:45.873Z","dependency_job_id":"64f89a73-5aaa-40a1-a3ea-dcb779b653e7","html_url":"https://github.com/deb-sig/double-entry-generator","commit_stats":null,"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deb-sig%2Fdouble-entry-generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deb-sig%2Fdouble-entry-generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deb-sig%2Fdouble-entry-generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deb-sig%2Fdouble-entry-generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/deb-sig","download_url":"https://codeload.github.com/deb-sig/double-entry-generator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246552879,"owners_count":20795830,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alipay","alipay-records","beancount","double-entry-accounting","double-entry-bookkeeping","hacktoberfest","ledger","wechat"],"created_at":"2024-08-01T06:00:49.829Z","updated_at":"2025-03-31T22:31:58.258Z","avatar_url":"https://github.com/deb-sig.png","language":"Go","funding_links":["https://github.com/sponsors/gaocegege"],"categories":["Tools","Go"],"sub_categories":["Misc"],"readme":"# double-entry-generator\n\n根据账单生成复式记账语言的代码。目前账单支持：\n\n- 支付宝\n- 微信\n- 火币-币币交易\n- 海通证券\n- 中国工商银行\n- 中信银行信用卡\n- Toronto-Dominion Bank\n- Bank of Montreal\n\n目前记账语言支持：\n\n- BeanCount\n- Ledger\n\n架构支持扩展，如需支持新的账单（如银行账单等），可添加 [provider](pkg/provider)。如需支持新的记账语言，可添加 [compiler](pkg/compiler)。\n\n```\n┌───────────┐  ┌──────────┐  ┌────┐  ┌──────────┐  ┌──────────┐\n│ translate │-\u003e│ provider │-\u003e│ IR │-\u003e│ compiler │-\u003e│ analyser │\n└───────────┘  └──────────┘  └────┘  └──────────┘  └──────────┘\n                  alipay               beancount      alipay\n                  wechat               ledger         wechat\n                  huobi                               huobi\n                  htsec                               htsec\n                  icbc                                icbc\n                  td                                  td\n                  bmo                                 bmo\n```\n\n## 安装\n\n### Homebrew\n\n使用 Homebrew 安装：\n\n```bash\nbrew install deb-sig/tap/double-entry-generator\n```\n\n使用 Homebrew 更新软件：\n\n```bash\nbrew upgrade deb-sig/tap/double-entry-generator\n```\n\n### 二进制安装\n\n在 [GitHub Release](https://github.com/deb-sig/double-entry-generator/releases) 页面中下载相应架构的二进制文件到本地即可。\n\n### 源码安装\n\n```bash\ngo get -u github.com/deb-sig/double-entry-generator\n```\n\n## 使用\n\n请见[使用文档](doc/double-entry-generator_translate.md)\n\n## 示例\n\n### Beancount\n\n#### 支付宝\n\n```bash\ndouble-entry-generator translate \\\n  --config ./example/alipay/config.yaml \\\n  --output ./example/alipay/example-alipay-output.beancount \\\n  ./example/alipay/example-alipay-records.csv\n```\n\n其中 `--config` 是配置文件，默认情况下，使用支付宝作为提供方，也可手动指定 `--provider`。具体参考[使用文档](doc/double-entry-generator_translate.md)。默认生成的文件是 `default_output.beancount`，若有 `--output` 或 `-o` 指定输出文件，则会输出到指定的文件中。如上述例子会将转换结果输出至 `./example/alipay/example-alipay-output.beancount` 文件中。\n\n#### 微信\n\n```bash\ndouble-entry-generator translate \\\n  --config ./example/wechat/config.yaml \\\n  --provider wechat \\\n  --output ./example/wechat/example-wechat-output.beancount \\\n  ./example/wechat/example-wechat-records.csv\n```\n\n#### Huobi Global (Crypto)\n\n```bash\ndouble-entry-generator translate \\\n  --config ./example/huobi/config.yaml \\\n  --provider huobi \\\n  --output ./example/huobi/example-huobi-output.beancount \\\n  ./example/huobi/example-huobi-records.csv\n```\n\n#### 海通证券\n\n```bash\ndouble-entry-generator translate \\\n  --config ./example/htsec/config.yaml \\\n  --provider htsec \\\n  --output ./example/htsec/example-htsec-output.beancount \\\n  ./example/htsec/example-htsec-records.xlsx\n```\n\n#### 中国工商银行\n\n```bash\ndouble-entry-generator translate \\\n  --config ./example/icbc/credit/config.yaml \\\n  --provider icbc \\\n  --output ./example/icbc/credit/example-icbc-credit-output.beancount \\\n  ./example/icbc/credit/example-icbc-credit-records.csv\n```\n\n#### Toronto-Dominion Bank\n\n```bash\ndouble-entry-generator translate \\\n  --config ./example/td/config.yaml \\\n  --provider td \\\n  --output ./example/td/example-td-output.beancount \\\n  ./example/td/example-td-records.csv\n```\n\n#### Bank of Montreal\n\n```bash\ndouble-entry-generator translate \\\n  --config ./example/bmo/credit/config.yaml \\\n  --provider bmo \\\n  --output ./example/bmo/credit/example-bmo-output.beancount \\\n  ./example/bmo/credit/example-bmo-records.csv\n```\n\n#### 中信银行信用卡\n\n```bash\ndouble-entry-generator translate \\\n  --config ./example/citic/credit/config.yaml \\\n  --provider citic \\\n  --output ./example/citic/credit/example-icbc-credit-output.beancount \\\n  ./example/citic/credit/example-citic-credit-records.xls\n```\n\n### Ledger\n\n#### 支付宝\n\n```bash\ndouble-entry-generator translate \\\n  --config ./example/alipay/config.yaml \\\n  --target ledger \\\n  --output ./example/alipay/example-alipay-output.ledger \\\n  ./example/alipay/example-alipay-records.csv\n```\n\n#### 微信\n\n```bash\ndouble-entry-generator translate \\\n  --config ./example/wechat/config.yaml \\\n  --provider wechat \\\n  --target ledger \\\n  --output ./example/wechat/example-wechat-output.ledger \\\n  ./example/wechat/example-wechat-records.csv\n```\n\n#### Huobi Global (Crypto)\n\n```bash\ndouble-entry-generator translate \\\n  --config ./example/huobi/config.yaml \\\n  --provider huobi \\\n  --target ledger \\\n  --output ./example/huobi/example-huobi-output.ledger \\\n  ./example/huobi/example-huobi-records.csv\n```\n\n#### 海通证券\n\n```bash\ndouble-entry-generator translate \\\n  --config ./example/htsec/config.yaml \\\n  --provider htsec \\\n  --target ledger \\\n  --output ./example/htsec/example-htsec-output.ledger \\\n  ./example/htsec/example-htsec-records.xlsx\n```\n\n#### 中国工商银行\n\n```bash\ndouble-entry-generator translate \\\n  --config ./example/icbc/credit/config.yaml \\\n  --provider icbc \\\n  --target ledger \\\n  --output ./example/icbc/credit/example-icbc-credit-output.ledger \\\n  ./example/icbc/credit/example-icbc-credit-records.csv\n```\n\n#### Toronto-Dominion Bank\n\n```bash\ndouble-entry-generator translate \\\n  --config ./example/td/config.yaml \\\n  --provider td \\\n  --target ledger \\\n  --output ./example/td/example-td-output.ledger \\\n  ./example/td/example-td-records.csv\n```\n\n#### Bank of Montreal\n\n```bash\ndouble-entry-generator translate \\\n  --config ./example/bmo/debit/config.yaml \\\n  --provider bmo \\\n  --target ledger \\\n  --output ./example/bmo/debit/example-bmo-output.ledger \\\n  ./example/bmo/debit/example-bmo-records.csv\n```\n\n#### 中信银行信用卡\n\n```bash\ndouble-entry-generator translate \\\n  --config ./example/citic/credit/config.yaml \\\n  --provider citic \\\n  --target ledger \\\n  --output ./example/citic/credit/example-citic-credit-output.ledger \\\n  ./example/citic/credit/example-citic-credit-records.csv\n```\n\n## 账单下载与格式问题\n\n### 支付宝\n\n#### 下载方式\n\n`v1.0.0` 及以上的版本请参考[此文章](https://blog.triplez.cn/posts/bills-export-methods/#%e6%94%af%e4%bb%98%e5%ae%9d)获取支付宝账单。\n\n`v0.2.0` 及以下版本请使用此方式获取账单：登录 PC 支付宝后，访问 [这里](https://consumeprod.alipay.com/record/standard.htm)，选择时间区间，下拉到页面底端，点击下载查询结果。注意：请下载查询结果，而非[收支明细](https://cshall.alipay.com/lab/help_detail.htm?help_id=212688)。\n\n#### 格式示例\n\n[example-alipay-records.csv](./example/alipay/example-alipay-records.csv)\n\n\u003e 此示例为从「支付宝」APP 获取的账单格式。\n\n转换后的结果示例：[exmaple-alipay-output.beancount](./example/alipay/example-alipay-output.beancount).\n\n### 微信\n\n#### 下载方式\n\n微信支付的下载方式[见此](https://blog.triplez.cn/posts/bills-export-methods/#%e5%be%ae%e4%bf%a1%e6%94%af%e4%bb%98)。\n\n#### 格式示例\n\n[example-wechat-records.csv](./example/wechat/example-wechat-records.csv)\n\n转换后的结果示例：[exmaple-wechat-output.beancount](./example/wechat/example-wechat-output.beancount).\n\n### Huobi Global (Crypto)\n\n目前该项目只保证币币交易订单的转换，暂未测试合约、杠杆等交易订单。\n\n\u003e PR welcome :)\n\n#### 下载方式\n\n登录[火币 Global 网站](https://www.huobi.com/)，进入[币币订单的成交明细](https://www.huobi.com/zh-cn/transac/?tab=2\u0026type=0)页面，选择合适的时间区间后，点击成交明细右上角的导出按钮即可。\n\n#### 格式示例\n\n[exmaple-huobi-records.csv](./example/huobi/example-huobi-records.csv)\n\n转换后的结果示例：[exmaple-huobi-output.beancount](./example/huobi/example-huobi-output.beancount).\n\n### 海通证券\n\n#### 下载方式\n\n登录e海通财PC独立交易版PC客户端，左侧导航栏选择查询-交割单，右侧点击查询按钮导出交割单excel文件。\n\n#### 格式示例\n\n[example-htsec-records.csv](./example/htsec/example-htsec-records.xlsx)\n\n转换后的结果示例：[exmaple-htsec-output.beancount](./example/htsec/example-htsec-output.beancount).\n\n### 中国工商银行\n\n#### 下载方式\n\n中国工商银行账单的下载方式[见此](https://blog.triplez.cn/posts/bills-export-methods/#%e4%b8%ad%e5%9b%bd%e5%b7%a5%e5%95%86%e9%93%b6%e8%a1%8c)。\n\n#### 格式示例\n\n\u003e `double-entry-generator` 能够自动识别出中国工商银行的账单类型（借记卡/信用卡）。\n\n借记卡账单示例： [example-icbc-debit-records.csv](example/icbc/debit/example-icbc-debit-records.csv)\n\n借记卡账单转换后的结果示例：[example-icbc-debit-output.beancount](example/icbc/debit/example-icbc-debit-output.beancount).\n\n信用卡账单示例： [example-icbc-credit-records.csv](example/icbc/credit/example-icbc-credit-records.csv)\n\n信用卡账单转换后的结果示例：[example-icbc-credit-output.beancount](example/icbc/credit/example-icbc-credit-output.beancount).\n\n### Toronto-Dominion Bank\n\n1. 登录TD 网页版本: https://easyweb.td.com/\n2. 点击指定的账户\n3. 选择账单范围 -\u003e \"Select Download Format\" -\u003e Spreadsheet(.csv) -\u003e Download\n\n#### 格式示例\n\n[example-td-records.csv](./example/td/example-td-records.csv)\n\n+ Beancount 转换的结果示例: [example-td-out.beancount](./example/td/example-td-output.beancount)\n+ Ledger 转换的结果示例: [example-td-out.ledger](./example/td/example-td-output.ledger)\n\n### Bank of Montreal\n\n1. 登录 BMO 网页版本: https://www.bmo.com/en-ca/main/personal/\n2. 选择指定账户\n3. Transactions -\u003e Download 选择时间范围\n\n#### 格式示例\n\n[example-bmo-record.csv](./example/bmo/debit/example-bmo-records.csv)\n\n+ Beancount 转换的结果示例: [example-bmo-out.beancount](./example/bmo/debit/example-bmo-output.beancount)\n+ Ledger 转换的结果示例: [example-bmo-out.ledger](./example/bmo/debit/example-bmo-output.ledger)\n\n### 京东\n\n1. 打开京东手机 APP\n2. 前往我的 -\u003e 我的钱包 -\u003e 账单\n3. 点击右上角 Icon(三条横杠)\n4. 选择“账单导出（仅限个人对账）”\n\n#### 格式示例\n\n[example-jd-records.csv](./example/jd/example-jd-records.csv)\n\n\n### 中信银行信用卡\n\n#### 下载方式\n1. 打开中信银行信用卡 PC 官网\n2. 使用手机 App 扫码登录\n3. 选择账单查询标签页\n4. 选择卡片及账单月份\n5. 点击“账单下载”\n\n#### 格式示例\n\n\u003e `double-entry-generator` 目前只支持中信银行的信用卡，如果你有储蓄卡欢迎提供账单样本或者直接贡献代码。\n\n\n信用卡账单示例： [example-citic-records.csv](example/citic/credit/example-citic-records.xls)\n\n信用卡账单转换后的结果示例：[example-citic-output.beancount](example/citic/credit/example-citic-output.beancount).\n\n\n## 配置\n\n### 支付宝\n\n\u003cdetails\u003e\n\u003csummary\u003e\n  支付宝配置文件示例\n\u003c/summary\u003e\n\n```yaml\ndefaultMinusAccount: Assets:FIXME\ndefaultPlusAccount: Expenses:FIXME\ndefaultCurrency: CNY\ntitle: 测试\nalipay:\n  rules:\n    - category: 日用百货\n      targetAccount: Expenses:Groceries\n    - category: 餐饮美食\n      time: 11:00-14:00\n      targetAccount: Expenses:Food:Lunch\n    - category: 餐饮美食\n      time: 16:00-22:00\n      targetAccount: Expenses:Food:Dinner\n\n    - peer: 滴露\n      targetAccount: Expenses:Groceries\n    - peer: 苏宁\n      targetAccount: Expenses:Electronics\n    - item: 相互宝\n      targetAccount: Expenses:Insurance\n\n    - method: 余额\n      fullMatch: true\n      methodAccount: Assets:Alipay\n    - method: 余额宝\n      fullMatch: true\n      methodAccount: Assets:Alipay\n    - method: 招商银行(9876)\n      fullMatch: true\n      methodAccount: Assets:Bank:CN:CMB-9876:Savings\n\n    - type: 收入 # 其他转账收款\n      targetAccount: Income:FIXME\n      methodAccount: Assets:Alipay\n    - type: 收入 # 收款码收款\n      item: 商品\n      targetAccount: Income:Alipay:ShouKuanMa\n      methodAccount: Assets:Alipay\n\n    # 交易类型为其他\n    - type: 其他\n      item: 收益发放\n      methodAccount: Income:Alipay:YuEBao:PnL\n      targetAccount: Assets:Alipay\n    - type: 其他\n      item: 余额宝-单次转入\n      targetAccount: Assets:Alipay\n      methodAccount: Assets:Alipay\n\n    - peer: 基金\n      type: 其他\n      item: 黄金-买入\n      methodAccount: Assets:Alipay\n      targetAccount: Assets:Alipay:Invest:Gold\n    - peer: 基金\n      type: 其他\n      item: 黄金-卖出\n      methodAccount: Assets:Alipay:Invest:Gold\n      targetAccount: Assets:Alipay\n      pnlAccount: Income:Alipay:Invest:PnL\n    - peer: 基金\n      type: 其他\n      item: 买入\n      methodAccount: Assets:Alipay\n      targetAccount: Assets:Alipay:Invest:Fund\n    - peer: 基金\n      type: 其他\n      item: 卖出\n      methodAccount: Assets:Alipay:Invest:Fund\n      targetAccount: Assets:Alipay\n      pnlAccount: Income:Alipay:Invest:PnL\n```\n\n\u003c/details\u003e\u003c/br\u003e\n\n`defaultMinusAccount`, `defaultPlusAccount` 和 `defaultCurrency` 是全局的必填默认值。其中 `defaultMinusAccount` 是默认金额减少的账户，`defaultPlusAccount` 是默认金额增加的账户。 `defaultCurrency` 是默认货币。\n\n`alipay` is the provider-specific configuration. Alipay provider has rules matching mechanism.\n\n`alipay` 蚂蚁账单相关的配置。它提供基于规则的匹配。可以指定：\n- `peer`（交易对方）的完全/包含匹配。\n- `item`（商品说明）的完全/包含匹配。\n- `type`（收/支）的完全/包含匹配。\n- `method`（收/付款方式）的完全/包含匹配。\n- `category`（交易分类）的完全/包含匹配。\n- `time`（交易时间）的区间匹配。\n  \u003e 交易时间可写为以下两种形式：\n  \u003e - `11:00-13:00`\n  \u003e - `11:00:00-13:00:00`\n  \u003e 24 小时制，起始时间和终止之间之间使用 `-` 分隔。\n- `minPrice`（最小金额）和 `maxPrice`（最大金额）的区间匹配。\n\n在单条规则中可以使用分隔符（sep）填写多个关键字，在同一对象中，每个关键字之间是或的关系。\n\n在单条规则中可以使用 `fullMatch` 来设置字符匹配规则，`true` 表示使用完全匹配(full match)，`false` 表示使用包含匹配(partial match)，不设置该项则默认使用包含匹配。\n\n在单条规则中可以使用 `tag` 来设置流水的 [Tag](https://beancount.github.io/docs/beancount_language_syntax.html#tags)，使用 `sep` 作为分隔符。\n\n在单条规则中可以使用 `ignore` 来设置是否忽略匹配上该规则的交易，`true` 表示忽略匹配上该规则的交易，`fasle` 则为不忽略，缺省为 `false` 。\n\n匹配成功则使用规则中定义的 `targetAccount` 、 `methodAccount` 等账户覆盖默认定义账户。\n\n规则匹配的顺序是：从 `rules` 配置中的第一条开始匹配，如果匹配成功仍继续匹配。也就是后面的规则优先级要**高于**前面的规则。\n\n支付宝提供了“交易方式”字段来标识资金出入账户。这样就可以直接通过“交易方式”，并辅以“收/支”字段确认该账户为增加账户还是减少账户。而复式记账法每笔交易至少需要两个账户，另一个账户则可通过“交易对方”（peer）、“商品”（item）、“收/支”（type）以及“交易方式”（method）的多种包含匹配得出。匹配成功则使用规则中定义的 `targetAccount` 和 `methodAccount` ，并通过确认该笔交易是收入还是支出，决定 `targetAccount` 和 `methodAccount` 的正负关系，来覆盖默认定义的增减账户。\n\n`targetAccount` 与 `methodAccount` 的增减账户关系如下表：\n\n\n| 收/支 | 交易分类 | minusAccount  | plusAccount   |\n| ----- | -------- | ------------- | ------------- |\n| 收入  | *        | targetAccount | methodAccount |\n| 收入  | 退款     | targetAccount | methodAccount |\n| 支出  | *        | methodAccount | targetAccount |\n| 其他  | *        | methodAccount | targetAccount |\n| 其他  | 退款     | targetAccount | methodAccount |\n\n\u003e 当交易类型为「其他」时，需要自行手动定义借贷账户。此时本软件会认为 `methodAccount` 是贷账户，`targetAccount` 是借账户。\n\n### 微信\n\n\u003cdetails\u003e\n\u003csummary\u003e\n  微信配置文件示例\n\u003c/summary\u003e\n\n```yaml\ndefaultMinusAccount: Assets:FIXME\ndefaultPlusAccount: Expenses:FIXME\ndefaultCommissionAccount: Expenses:Commission:FIXME\ndefaultCurrency: CNY\ntitle: 测试\nwechat:\n  rules:\n    # type (additional condition)\n    - type: 收入 # 微信红包\n      method: /\n      item: /\n      targetAccount: Income:Wechat:RedPacket\n    - type: / # 转入零钱通\n      txType: 转入零钱\n      peer: /\n      item: /\n      targetAccount: Assets:Digital:Wechat:Cash\n    - type: / # 零钱提现\n      txType: 零钱提现\n      targetAccount: Assets:Digital:Wechat:Cash\n      commissionAccount: Expenses:Wechat:Commission\n    - type: / # 零钱充值\n      txType: 零钱充值\n      targetAccount: Assets:Digital:Wechat:Cash\n    - type: / # 零钱通转出-到工商银行(9876)\n      txType: 零钱通转出-到工商银行(9876)\n      targetAccount: Assets:Bank:CN:ICBC:Savings\n\n    - peer: 云膳过桥米线,餐厅\n      sep: ','\n      time: 11:00-15:00\n      targetAccount: Expenses:Food:Meal:Lunch\n    - peer: 云膳过桥米线,餐厅\n      sep: ','\n      time: 16:30-21:30\n      targetAccount: Expenses:Food:Meal:Dinner\n    - peer: 餐厅\n      time: 23:55-00:10 # test T+1\n      targetAccount: Expenses:Food:Meal:MidNight\n    - peer: 餐厅\n      time: 23:50-00:05 # test T-1\n      targetAccount: Expenses:Food:Meal:MidNight\n\n    - peer: 房东\n      type: 支出\n      targetAccount: Expenses:Housing:Rent\n\n    - peer: 用户\n      type: 收入\n      targetAccount: Income:Service\n\n    - peer: 理财通\n      type: /\n      targetAccount: Assets:Trade:Tencent:LiCaiTong\n\n    - peer: 建设银行\n      txType: 信用卡还款\n      targetAccount: Liabilities:Bank:CN:CCB\n\n    - method: / # 一般为收入，存入零钱\n      methodAccount: Assets:Digital:Wechat:Cash\n    - method: 零钱\n      fullMatch: true\n      methodAccount: Assets:Digital:Wechat:Cash\n    - method: 零钱通\n      fullMatch: true\n      methodAccount: Assets:Digital:Wechat:Cash\n    - method: 工商银行\n      methodAccount: Assets:Bank:CN:ICBC:Savings\n    - method: 中国银行\n      methodAccount: Assets:Bank:CN:BOC:Savings\n\n```\n\n\u003c/details\u003e\u003c/br\u003e\n\n`defaultMinusAccount`, `defaultPlusAccount` 和 `defaultCurrency` 是全局的必填默认值。其中 `defaultMinusAccount` 是默认金额减少的账户，`defaultPlusAccount` 是默认金额增加的账户。 `defaultCurrency` 是默认货币。\n\n\u003e `defaultCommissionAccount` 是默认的服务费账户，若无服务费相关交易，则不需要填写。但笔者还是建议填写一个占位 FIXME 账户，否则遇到带服务费的交易，转换器会报错退出。\n\n`wechat` is the provider-specific configuration. WeChat provider has rules matching mechanism.\n\n`wechat` 是微信相关的配置。它提供基于规则的匹配。可以指定：\n- `peer`（交易对方）的完全/包含匹配。\n- `item`（商品名称）的完全/包含匹配。\n- `type`（收/支）的完全/包含匹配。\n- `txType`（交易类型）的完全/包含匹配。\n- `method`（支付方式）的完全/包含匹配。\n- `time`（交易时间）的区间匹配。\n  \u003e 交易时间可写为以下两种形式：\n  \u003e - `11:00-13:00`\n  \u003e - `11:00:00-13:00:00`\n  \u003e 24 小时制，起始时间和终止之间之间使用 `-` 分隔。\n- `minPrice`（最小金额）和 `maxPrice`（最大金额）的区间匹配。\n\n在单条规则中可以使用分隔符（sep）填写多个关键字，在同一对象中，每个关键字之间是或的关系。\n\n在单条规则中可以使用 `fullMatch` 来设置字符匹配规则，`true` 表示使用完全匹配(full match)，`false` 表示使用包含匹配(partial match)，不设置该项则默认使用包含匹配。\n\n在单条规则中可以使用 `tag` 来设置流水的 [Tag](https://beancount.github.io/docs/beancount_language_syntax.html#tags)，使用 `sep` 作为分隔符。\n\n在单条规则中可以使用 `ignore` 来设置是否忽略匹配上该规则的交易，`true` 表示忽略匹配上该规则的交易，`fasle` 则为不忽略，缺省为 `false` 。\n\n匹配成功则使用规则中定义的 `targetAccount` 、 `methodAccount` 等账户覆盖默认定义账户。\n\n规则匹配的顺序是：从 `rules` 配置中的第一条开始匹配，如果匹配成功仍继续匹配。也就是后面的规则优先级要**高于**前面的规则。\n\n微信账单提供了“交易方式”字段来标识资金出入账户。这样就可以直接通过“交易方式”，并辅以“收/支”字段确认该账户为增加账户还是减少账户。而复式记账法每笔交易至少需要两个账户，另一个账户则可通过“交易对方”（peer）、“商品”（item）、“收/支”（type）以及“交易方式”（method）的多种包含匹配得出。如支付宝配置类似，匹配成功则使用规则中定义的 `targetAccount` 和 `methodAccount` ，并通过确认该笔交易是收入还是支出，决定 `targetAccount` 和 `methodAccount` 的正负关系，来覆盖默认定义的增减账户。\n\n`targetAccount` 与 `methodAccount` 的增减账户关系如下表：\n\n| 收/支 | minusAccount  | plusAccount   |\n| ----- | ------------- | ------------- |\n| 收入  | targetAccount | methodAccount |\n| 支出  | methodAccount | targetAccount |\n\n### Huobi Global (Crypto)\n\n\u003cdetails\u003e\n\u003csummary\u003e\n  火币-币币交易配置文件示例\n\u003c/summary\u003e\n\n```yaml\ndefaultCashAccount: Assets:Huobi:Cash\ndefaultPositionAccount: Assets:Huobi:Positions\ndefaultCommissionAccount: Expenses:Huobi:Commission\ndefaultPnlAccount: Income:Huobi:PnL\ndefaultCurrency: USDT\ntitle: 测试\nhuobi:\n  rules:\n    - item: BTC/USDT,BTC1S/USDT  # multiple keywords with separator\n      type: 买入\n      txType: 币币交易\n      fullMatch: true\n      sep: ','  # define separator as a comma\n      cashAccount: Assets:Rule1:Cash\n      positionAccount: Assets:Rule1:Positions\n      CommissionAccount: Expenses:Rule1:Commission\n      pnlAccount: Income:Rule1:PnL\n```\n\n\u003c/details\u003e\u003c/br\u003e\n\n`defaultCashAccount`, `defaultPositionAccount`, `defaultCommissionAccount`, `defaultPnlAccount` 和 `defaultCurrency` 是全局的必填默认值。\n\n`huobi` is the provider-specific configuration. Huobi provider has rules matching mechanism.\n\n`huobi` 是火币相关的配置。它提供基于规则的匹配。可以指定：\n- `item`（交易对）的完全/包含匹配。\n- `type`（交易方向）的完全/包含匹配。\n- `txType`（交易类型）的完全/包含匹配。\n- `time`（交易时间）的区间匹配。\n  \u003e 交易时间可写为以下两种形式：\n  \u003e - `11:00-13:00`\n  \u003e - `11:00:00-13:00:00`\n  \u003e 24 小时制，起始时间和终止之间之间使用 `-` 分隔。\n\n在单条规则中可以使用分隔符（sep）填写多个关键字，在同一对象中，每个关键字之间是或的关系。\n\n在单条规则中可以使用 `fullMatch` 来设置字符匹配规则，`true` 表示使用完全匹配(full match)，`false` 表示使用包含匹配(partial match)，不设置该项则默认使用包含匹配。\n\n在单条规则中可以使用 `ignore` 来设置是否忽略匹配上该规则的交易，`true` 表示忽略匹配上该规则的交易，`fasle` 则为不忽略，缺省为 `false` 。\n\n匹配成功则使用规则中定义的 `cashAccount`, `positionAccount`, `commissionAccount` 和 `pnlAccount` 覆盖默认定义。\n\n规则匹配的顺序是：从 `rules` 配置中的第一条开始匹配，如果匹配成功仍继续匹配。也就是后面的规则优先级要**高于**前面的规则。\n\n其中：\n- `defaultCashAccount` 是默认资本账户，一般用于存储 USDT。\n- `defaultPositionAccount` 是默认持仓账户。\n- `defaultCommissionAccount` 是默认手续费账户。\n- `defaultPnlAccount` 是默认损益账户。\n- `defaultCurrency` 是默认货币。\n\n### 海通证券\n\n\u003cdetails\u003e\n\u003csummary\u003e\n  海通证券交割单配置文件示例\n\u003c/summary\u003e\n\n```yaml\ndefaultCashAccount: Assets:Htsec:Cash\ndefaultPositionAccount: Assets:Htsec:Positions\ndefaultCommissionAccount: Expenses:Htsec:Commission\ndefaultPnlAccount: Income:Htsec:PnL\ndefaultCurrency: CNY\ntitle: 测试\nhtsec:\n  rules:\n    - item: 兴业转债\n      type: 卖\n      sep: ','\n      cashAccount: Assets:Rule1:Cash\n      positionAccount: Assets:Rule1:Positions\n      CommissionAccount: Expenses:Rule1:Commission\n      pnlAccount: Income:Rule1:PnL\n```\n\n\u003c/details\u003e\u003c/br\u003e\n\n`defaultCashAccount`, `defaultPositionAccount`, `defaultCommissionAccount`, `defaultPnlAccount` 和 `defaultCurrency` 是全局的必填默认值。\n\n`htsec` is the provider-specific configuration. Htsec provider has rules matching mechanism.\n\n`htsec` 是海通证券相关的配置。它提供基于规则的匹配。可以指定：\n- `item`（交易方向-证券编码-证券市值）的完全/包含匹配。\n- `type`（交易方向）的完全/包含匹配。\n- `time`（交易时间）的区间匹配。\n  \u003e 交易时间可写为以下两种形式：\n  \u003e - `11:00-13:00`\n  \u003e - `11:00:00-13:00:00`\n      \u003e 24 小时制，起始时间和终止之间之间使用 `-` 分隔。\n\n在单条规则中可以使用分隔符（sep）填写多个关键字，在同一对象中，每个关键字之间是或的关系。\n\n在单条规则中可以使用 `fullMatch` 来设置字符匹配规则，`true` 表示使用完全匹配(full match)，`false` 表示使用包含匹配(partial match)，不设置该项则默认使用包含匹配。\n\n在单条规则中可以使用 `ignore` 来设置是否忽略匹配上该规则的交易，`true` 表示忽略匹配上该规则的交易，`fasle` 则为不忽略，缺省为 `false` 。\n\n匹配成功则使用规则中定义的 `cashAccount`, `positionAccount`, `commissionAccount` 和 `pnlAccount` 覆盖默认定义。\n\n规则匹配的顺序是：从 `rules` 配置中的第一条开始匹配，如果匹配成功仍继续匹配。也就是后面的规则优先级要**高于**前面的规则。\n\n其中：\n- `defaultCashAccount` 是默认资本账户，一般用于存储证券账户可用资金。\n- `defaultPositionAccount` 是默认持仓账户。\n- `defaultCommissionAccount` 是默认手续费账户。\n- `defaultPnlAccount` 是默认损益账户。\n- `defaultCurrency` 是默认货币。\n\n### 中国工商银行\n\n\u003cdetails\u003e\n\u003csummary\u003e\n  中国工商银行配置文件示例\n\u003c/summary\u003e\n\n```yaml\ndefaultMinusAccount: Assets:FIXME\ndefaultPlusAccount: Expenses:FIXME\ndefaultCashAccount: Liabilities:Bank:CN:ICBC\ndefaultCurrency: CNY\ntitle: 测试\nicbc:\n  rules:\n    - peer: 财付通,支付宝\n      ignore: true\n    - peer: 广东联合电子收费股份\n      targetAccount: Expenses:Transport:Highway\n    - txType: 人民币自动转帐还款\n      targetAccount: Assets:Bank:CN:ICBC:Savings\n    - peer: XX旗舰店\n      targetAccount: Expenses:Joy\n```\n\n\u003c/details\u003e\u003c/br\u003e\n\n`defaultMinusAccount`, `defaultPlusAccount`, `defaultCashAccount` 和 `defaultCurrency` 是全局的必填默认值。其中 `defaultMinusAccount` 是默认金额减少的账户，`defaultPlusAccount` 是默认金额增加的账户， `defaultCashAccount` 是该配置中默认使用的银行卡账户（等同于支付宝/微信中的 `methodAccount` ）。 `defaultCurrency` 是默认货币。\n\n`icbc` 是中国工商银行相关的配置。它提供基于规则的匹配。可以指定：\n- `peer`（交易对方）的完全/包含匹配。\n- `type`（收/支）的完全/包含匹配。\n- `txType`（交易类型）的完全/包含匹配。\n\n在单条规则中可以使用分隔符 `sep` 填写多个关键字，在同一对象中，每个关键字之间是或的关系。\n\n在单条规则中可以使用 `fullMatch` 来设置字符匹配规则，`true` 表示使用完全匹配(full match)，`false` 表示使用包含匹配(partial match)，不设置该项则默认使用包含匹配。\n\n在单条规则中可以使用 `tag` 来设置流水的 [Tag](https://beancount.github.io/docs/beancount_language_syntax.html#tags)，使用 `sep` 作为分隔符。\n\n在单条规则中可以使用 `ignore` 来设置是否忽略匹配上该规则的交易，`true` 表示忽略匹配上该规则的交易，`fasle` 则为不忽略，缺省为 `false` 。\n\n匹配成功则使用规则中定义的 `targetAccount` 账户覆盖默认定义账户。\n\n规则匹配的顺序是：从 `rules` 配置中的第一条开始匹配，如果匹配成功仍继续匹配。也就是后面的规则优先级要**高于**前面的规则。\n\n中国工商银行账单中的记账金额中存在收入/支出之分，通过这个机制就可以判断银行卡账户在交易中的正负关系。如支付宝配置类似，匹配成功则使用规则中定义的 `targetAccount` 和全局值 `defaultCashAccount` ，并通过确认该笔交易是收入还是支出，决定 `targetAccount` 和 `defaultCashAccount` 的正负关系，来覆盖默认定义的增减账户。\n\n`targetAccount` 与 `defaultCashAccount` 的增减账户关系如下表：\n\n| 收/支 | minusAccount       | plusAccount        |\n| ----- | ------------------ | ------------------ |\n| 收入  | targetAccount      | defaultCashAccount |\n| 支出  | defaultCashAccount | targetAccount      |\n\n### Toronto-Dominion Bank\n\n\u003cdetails\u003e\n\u003csummary\u003e\n  TD银行配置文件示例\n\u003c/summary\u003e\n\n```yaml\ndefaultMinusAccount: Assets:FIXME\ndefaultPlusAccount: Expenses:FIXME\ndefaultCashAccount: Assets:DebitCard:TDChequing\ndefaultCurrency: CAD\ntitle: 测试\ntd:\n  rules:\n    - item: \"T T\"\n      targetAccount: Expenses:Grocery\n      tag: tt_tag\n    - item: \"DOLLARAMA\"\n      targetAccount: Expenses:Grocery\n      tag: grocery_tag1,cheap_tag2\n    - item: \"DEVELOPM MSP\"\n      targetAccount: Income:Salary\n    - type: 收入\n      item: \"SEND E-TFR\"\n      targetAccount: Income:FIXME\n\n```\n\n\u003c/details\u003e\u003c/br\u003e\n\n`defaultMinusAccount`, `defaultPlusAccount`, `defaultCashAccount` 和 `defaultCurrency` 是全局的必填默认值。其中 `defaultMinusAccount` 是默认金额减少的账户，`defaultPlusAccount` 是默认金额增加的账户， `defaultCashAccount` 是该配置中默认使用的银行卡账户（等同于支付宝/微信中的 `methodAccount` ）。 `defaultCurrency` 是默认货币。\n\n`td` 是 Toronto-Dominion Bank相关的配置。它提供基于规则的匹配。因为TD本身的账单较简单，所以可以指定的规则不多：\n- `item`:（交易商品）的完全/包含匹配。\n- `type`:（收/支）的完全/包含匹配。\n\n在单条规则中可以使用分隔符 `sep` 填写多个关键字，在同一对象中，每个关键字之间是或的关系。\n\n在单条规则中可以使用 `fullMatch` 来设置字符匹配规则，`true` 表示使用完全匹配(full match)，`false` 表示使用包含匹配(partial match)，不设置该项则默认使用包含匹配。\n\n在单条规则中可以使用 `tag` 来设置流水的 [Beancount Tag](https://beancount.github.io/docs/beancount_language_syntax.html#tags)或[Ledger Meta Tag](https://ledger-cli.org/doc/ledger3.html#Metadata-tags)，使用 `sep` 作为分隔符。\n\n在单条规则中可以使用 `ignore` 来设置是否忽略匹配上该规则的交易，`true` 表示忽略匹配上该规则的交易，`fasle` 则为不忽略，缺省为 `false` 。\n\n匹配成功则使用规则中定义的 `targetAccount` 账户覆盖默认定义账户。\n\n规则匹配的顺序是：从 `rules` 配置中的第一条开始匹配，如果匹配成功仍继续匹配。也就是后面的规则优先级要**高于**前面的规则。\n\nTD账单中的记账金额中存在收入/支出之分，通过这个机制就可以判断银行卡账户在交易中的正负关系。如支付宝配置类似，匹配成功则使用规则中定义的 `targetAccount` 和全局值 `defaultCashAccount` ，并通过确认该笔交易是收入还是支出，决定 `targetAccount` 和 `defaultCashAccount` 的正负关系，来覆盖默认定义的增减账户。\n\n`targetAccount` 与 `defaultCashAccount` 的增减账户关系如下表：\n\n| 收/支 | minusAccount       | plusAccount        |\n| ----- | ------------------ | ------------------ |\n| 收入  | targetAccount      | defaultCashAccount |\n| 支出  | defaultCashAccount | targetAccount      |\n\n#### Bank of Montreal\n\n\u003cdetails\u003e\n\u003csummary\u003e\n  BMO银行配置文件示例\n\u003c/summary\u003e\n\n```yaml\ndefaultMinusAccount: Assets:FIXME\ndefaultPlusAccount: Expenses:FIXME\ndefaultCashAccount: Assets:DebitCard:BMOChequing\ndefaultCurrency: CAD\ntitle: 测试\nbmo:\n  rules:\n    - item: \"T T\"\n      targetAccount: Expenses:Grocery\n      tag: tt_tag\n    - item: \"DOLLARAMA\"\n      targetAccount: Expenses:Grocery\n      tag: grocery_tag1,cheap_tag2\n    - item: \"DEVELOPM MSP\"\n      targetAccount: Income:Salary\n    - type: 收入\n      item: \"SEND E-TFR\"\n      targetAccount: Income:FIXME\n\n```\n\n\u003c/details\u003e\u003c/br\u003e\n\n`defaultMinusAccount`, `defaultPlusAccount`, `defaultCashAccount` 和 `defaultCurrency` 是全局的必填默认值。其中 `defaultMinusAccount` 是默认金额减少的账户，`defaultPlusAccount` 是默认金额增加的账户， `defaultCashAccount` 是该配置中默认使用的银行卡账户（等同于支付宝/微信中的 `methodAccount` ）。 `defaultCurrency` 是默认货币。\n\n`bmo` 是 Toronto-Dominion Bank相关的配置。它提供基于规则的匹配。因为BMO本身的账单较简单，所以可以指定的规则不多：\n- `item`:（交易商品）的完全/包含匹配。\n- `type`:（收/支）的完全/包含匹配。\n\n在单条规则中可以使用分隔符 `sep` 填写多个关键字，在同一对象中，每个关键字之间是或的关系。\n\n在单条规则中可以使用 `fullMatch` 来设置字符匹配规则，`true` 表示使用完全匹配(full match)，`false` 表示使用包含匹配(partial match)，不设置该项则默认使用包含匹配。\n\n在单条规则中可以使用 `tag` 来设置流水的 [Beancount Tag](https://beancount.github.io/docs/beancount_language_syntax.html#tags)或[Ledger Meta Tag](https://ledger-cli.org/doc/ledger3.html#Metadata-tags)，使用 `sep` 作为分隔符。\n\n在单条规则中可以使用 `ignore` 来设置是否忽略匹配上该规则的交易，`true` 表示忽略匹配上该规则的交易，`fasle` 则为不忽略，缺省为 `false` 。\n\n匹配成功则使用规则中定义的 `targetAccount` 账户覆盖默认定义账户。\n\n规则匹配的顺序是：从 `rules` 配置中的第一条开始匹配，如果匹配成功仍继续匹配。也就是后面的规则优先级要**高于**前面的规则。\n\nBMO账单中的记账金额中存在收入/支出之分，通过这个机制就可以判断银行卡账户在交易中的正负关系。如支付宝配置类似，匹配成功则使用规则中定义的 `targetAccount` 和全局值 `defaultCashAccount` ，并通过确认该笔交易是收入还是支出，决定 `targetAccount` 和 `defaultCashAccount` 的正负关系，来覆盖默认定义的增减账户。\n\n`targetAccount` 与 `defaultCashAccount` 的增减账户关系如下表：\n\n| 收/支 | minusAccount       | plusAccount        |\n| ----- | ------------------ | ------------------ |\n| 收入  | targetAccount      | defaultCashAccount |\n| 支出  | defaultCashAccount | targetAccount      |\n\n### 京东\n\n```yaml\ndefaultMinusAccount: Assets:FIXME\ndefaultPlusAccount: Expenses:FIXME\ndefaultCurrency: CNY\ntitle: 测试\njd:\n  rules:\n    - method: 京东白条\n      methodAccount: Liabilities:Baitiao\n    - method: 小金库零用钱\n      methodAccount: Assets:EPay:JD\n    - item: 椰子\n      targetAccount: Expenses:Food\n    - item: 京东小金库-转入\n      peer: 京东金融\n      targetAccount: Assets:EPay:JD\n    - category: 美妆个护\n      targetAccount: Expenses:MakeUp\n    - item: \"食品酒饮\"\n      targetAccount: Assets:Food\n    - peer: 亲密卡\n      targetAccount: Expenses:Prpaid\n    - item: 白条,还款\n      targetAccount: Liabilities:Baitiao\n    - item: 京东小金库收益\n      fullMatch: true\n      targetAccount: Income:PnL:JD\n      methodAccount: Assets:EPay:JD\n```\n\n京东账单的格式总体上和[支付宝](#支付宝-3)类似。\n\n京东账单在交易类别为`不计收支`时，账户的处理分为两种情况：\n\n1. 一般情况：`收/付款方式`（即`method`匹配的字段） 一般为支出账户, `交易分类`（即 `category` 匹配的字段）一般为收入账户。例如银行卡资金转入京东小金库时，`收/付款方式` 为银行卡，`交易分类` 为小金库; 白条还款时，`收/付款方式` 为银行卡或小金库零用钱，`交易分类` 为白条。\n\n2. 特殊情况：`交易说明`（即`item`匹配的字段）的前缀为`冻结-`或`解冻-`时为`不计收支`的特殊情况。`冻结-`情形下, `收/付款方式`为支出账户; `解冻-`情形下 `收/付款方式`为收入账户但是金额为 0。目前所有和`冻结` , `解冻` 相关的交易会被忽略。\n\n`targetAccount` 与 `methodAccount` 的增减账户关系如下表：\n\n| 收/支    | minusAccount  | plusAccount   |\n| -------- | ------------- | ------------- |\n| 收入     | targetAccount | methodAccount |\n| 支出     | methodAccount | targetAccount |\n| 不计收支 | methodAccount | targetAccount |\n\n### 中信银行信用卡\n\n\u003cdetails\u003e\n\u003csummary\u003e\n  中信银行信用卡配置文件示例\n\u003c/summary\u003e\n\n```yaml\ndefaultMinusAccount: Assets:FIXME\ndefaultPlusAccount: Expenses:FIXME\ndefaultCashAccount: Liabilities:CreditCard:CITIC\ndefaultCurrency: CNY\ntitle: 测试\ncitic:\n  rules:\n    - item: 三快\n      targetAccount: Expenses:Food\n    - item: 电子商务,天猫,京东,特约商户\n      targetAccount: Expenses:Shopping\n    - item: 电费,网上国网\n      targetAccount: Expenses:Electricity\n    - item: 滴滴出行,嘀嘀,中国石油\n      targetAccount: Expenses:Transport\n    - item: 现金奖励\n      targetAccount: Income:Rewards\n    - item: 财付通(银联云闪付)\n      ignore: true\n    - item: 财付通还款\n      targetAccount: Assets:WeChat\n```\n\n\u003c/details\u003e\u003c/br\u003e\n\n`defaultMinusAccount`, `defaultPlusAccount`, `defaultCashAccount` 和 `defaultCurrency` 是全局的必填默认值。其中 `defaultMinusAccount` 是默认金额减少的账户，`defaultPlusAccount` 是默认金额增加的账户， `defaultCashAccount` 是该配置中默认使用的银行卡账户（等同于支付宝/微信中的 `methodAccount` ）。 `defaultCurrency` 是默认货币。\n\n`citic` 是中信银行信用卡相关的配置。它提供基于规则的匹配。可以指定：\n- `item`（交易描述）的完全/包含匹配。\n\n在单条规则中可以使用分隔符 `sep` 填写多个关键字，在同一对象中，每个关键字之间是或的关系。\n\n在单条规则中可以使用 `fullMatch` 来设置字符匹配规则，`true` 表示使用完全匹配(full match)，`false` 表示使用包含匹配(partial match)，不设置该项则默认使用包含匹配。\n\n在单条规则中可以使用 `tag` 来设置流水的 [Tag](https://beancount.github.io/docs/beancount_language_syntax.html#tags)，使用 `sep` 作为分隔符。\n\n在单条规则中可以使用 `ignore` 来设置是否忽略匹配上该规则的交易，`true` 表示忽略匹配上该规则的交易，`fasle` 则为不忽略，缺省为 `false` 。\n\n匹配成功则使用规则中定义的 `targetAccount` 账户覆盖默认定义账户。\n\n规则匹配的顺序是：从 `rules` 配置中的第一条开始匹配，如果匹配成功仍继续匹配。也就是后面的规则优先级要**高于**前面的规则。\n\n中信银行信用卡账单中的记账金额中存在收入/支出之分，通过这个机制就可以判断银行卡账户在交易中的正负关系。如支付宝配置类似，匹配成功则使用规则中定义的 `targetAccount` 和全局值 `defaultCashAccount` ，并通过确认该笔交易是收入还是支出，决定 `targetAccount` 和 `defaultCashAccount` 的正负关系，来覆盖默认定义的增减账户。\n\n`targetAccount` 与 `defaultCashAccount` 的增减账户关系如下表：\n\n| 收/支 | minusAccount       | plusAccount        |\n| ----- | ------------------ | ------------------ |\n| 收入  | targetAccount      | defaultCashAccount |\n| 支出  | defaultCashAccount | targetAccount      |\n\n\n## Special Thanks\n\n- [dilfish/atb](https://github.com/dilfish/atb) convert alipay bill to beancount version\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeb-sig%2Fdouble-entry-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeb-sig%2Fdouble-entry-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeb-sig%2Fdouble-entry-generator/lists"}