@perrylink/dsh-einvoice 0.2.0-alpha.1 → 0.2.0-alpha.2
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.
- package/LICENSE +0 -0
- package/NOTICE +0 -0
- package/README.md +32 -32
- package/THIRD-PARTY-NOTICES +0 -0
- package/cordis.patch.yml +0 -0
- package/lib/adapters/ofd-zip-xml.d.ts +0 -0
- package/lib/adapters/ofd-zip-xml.js +0 -0
- package/lib/core/invoice.d.ts +0 -0
- package/lib/core/invoice.js +0 -0
- package/lib/plugin/index.d.ts +0 -0
- package/lib/plugin/index.js +0 -0
- package/lib/plugin/storage.d.ts +0 -0
- package/lib/plugin/storage.js +0 -0
- package/lib/plugin/tools.d.ts +0 -0
- package/lib/plugin/tools.js +0 -0
- package/lib/registry/parsers.d.ts +0 -0
- package/lib/registry/parsers.js +0 -0
- package/package.json +8 -3
package/LICENSE
CHANGED
|
File without changes
|
package/NOTICE
CHANGED
|
File without changes
|
package/README.md
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
# @perrylink/dsh-einvoice
|
|
2
2
|
|
|
3
|
-
File-level Chinese e-invoice ingest, parse and
|
|
3
|
+
File-level Chinese e-invoice (OFD/XML) ingest, parse, dedup and local archive for DeepSeek Harness.
|
|
4
4
|
|
|
5
|
-
> **Status:
|
|
6
|
-
> This package does **not** implement OCR/scanning, tax-bureau verification/receipt, tax filing, 30-year archive compliance, or real-invoice accuracy claims. `invoice.review_queue` / `invoice.record_receipt` are local-only; the legacy names are deprecated aliases. Customer-evidence work (2 enterprises + 1 bookkeeping firm + 100 real invoices) is **permanently out of scope**. This package is public-only; its acceptance rows are `not counted`. Do not describe it as GA-ready.
|
|
5
|
+
> **Status: alpha / public-synthetic / partial / not counted / not GA.** No customer evidence, customer data, or production-readiness claim. All acceptance rows are `counted=false`.
|
|
7
6
|
|
|
8
7
|
## Install
|
|
9
8
|
|
|
@@ -12,60 +11,61 @@ dsh plugin --profile <profile> add @perrylink/dsh-einvoice
|
|
|
12
11
|
dsh --profile <profile> --dump-config | grep dsh-einvoice
|
|
13
12
|
```
|
|
14
13
|
|
|
15
|
-
|
|
14
|
+
Requires DSH `>=0.2.1-rc.3 <0.3.0` and Node `>=24.9 <25`.
|
|
16
15
|
|
|
17
|
-
|
|
16
|
+
<details>
|
|
17
|
+
<summary>中文摘要</summary>
|
|
18
|
+
|
|
19
|
+
文件级中国电子发票(OFD/XML)入库、解析、去重与本地归档。 安装:`dsh plugin --profile <profile> add @perrylink/dsh-einvoice`。公开/合成、alpha、非 GA。
|
|
20
|
+
|
|
21
|
+
</details>
|
|
22
|
+
|
|
23
|
+
## Tools
|
|
18
24
|
|
|
19
25
|
| Tool | What it does | Risk |
|
|
20
26
|
|---|---|---|
|
|
21
|
-
| `invoice.ingest` | Ingest one local OFD/XML
|
|
22
|
-
| `invoice.parse` | Parse old OFD `Attachs/original_invoice.xml` or 数电票 `Tags/CustomTag.xml
|
|
23
|
-
| `invoice.query` | Query the
|
|
24
|
-
| `invoice.dedup` | Group duplicates by invoice number or seller+date+total | R0 |
|
|
25
|
-
| `invoice.review_queue` | Queue parsed invoices for manual local review; optional buyer-tax-id mismatch flags
|
|
26
|
-
| `invoice.record_receipt` | Hash a local receipt, append it
|
|
27
|
-
| `invoice.redlink` | Bind a negative red invoice to its blue invoice
|
|
27
|
+
| `invoice.ingest` | Ingest one local OFD/XML, compute SHA-256, store the original, idempotent by bytes | R1 local write |
|
|
28
|
+
| `invoice.parse` | Parse old OFD `Attachs/original_invoice.xml` or 数电票 `Tags/CustomTag.xml`; return eight fields, lines, evidence and unknown fields | R0 |
|
|
29
|
+
| `invoice.query` | Query the local pool by entity, period, lifecycle or text | R0 |
|
|
30
|
+
| `invoice.dedup` | Group duplicates by invoice number or seller + date + total | R0 |
|
|
31
|
+
| `invoice.review_queue` | Queue parsed invoices for manual local review; optional buyer-tax-id mismatch flags | R1 local write |
|
|
32
|
+
| `invoice.record_receipt` | Hash a local receipt, append it and move lifecycle; `verification_source=local_receipt`, `tax_verified=false` | R1 local write |
|
|
33
|
+
| `invoice.redlink` | Bind a negative red invoice to its blue invoice and store deltas | R1 local write |
|
|
28
34
|
| `invoice.archive` | Build a manifest + originals + receipts ZIP under the local archive directory | R1 local write |
|
|
29
35
|
| `invoice.check` | Verify manifest/member hashes, missing files and traversal | R0 |
|
|
30
36
|
| `invoice.restore` | Restore a verified archive into the local restore root | R1 local write |
|
|
31
37
|
|
|
32
|
-
|
|
38
|
+
## Input / output
|
|
33
39
|
|
|
34
|
-
|
|
40
|
+
**Input:** one local OFD/XML invoice per `invoice.ingest` call. **Output:** a local invoice pool, review/receipt state, red/blue links, and a deterministic archive ZIP. `invoice.check` verifies the archive; `invoice.restore` restores it locally.
|
|
35
41
|
|
|
36
42
|
## Configuration
|
|
37
43
|
|
|
38
44
|
| Env | Default | Meaning |
|
|
39
45
|
|---|---|---|
|
|
40
46
|
| `DSH_EINVOICE_HOME` | `$DSH_HOME/storages/dsh-einvoice` | originals directory and local pool base |
|
|
41
|
-
| `DSH_EINVOICE_INPUT_ROOTS` | current working directory | `path.delimiter`-separated allowlist for `invoice.ingest` |
|
|
47
|
+
| `DSH_EINVOICE_INPUT_ROOTS` | `current working directory` | `path.delimiter`-separated allowlist for `invoice.ingest` |
|
|
42
48
|
|
|
43
|
-
|
|
49
|
+
## Limits / non-claims
|
|
44
50
|
|
|
45
|
-
|
|
51
|
+
- No OCR/scanning, tax-bureau verification/receipt, tax filing, 30-year archive compliance, or real-invoice accuracy claim.
|
|
52
|
+
- `invoice.record_receipt` is local-only: `verification_source=local_receipt`, `tax_verified=false`.
|
|
53
|
+
- No IMAP/email fetching, ERP posting, e-signature legal opinion, or Client UI.
|
|
54
|
+
- S1 accepts one local file per `invoice.ingest`; directory batches are not part of this package.
|
|
55
|
+
- Public samples with PII are kept outside the tarball; do not paste raw invoice output into logs or public issues.
|
|
56
|
+
- No customer evidence, customer data, or production-readiness claim; all fixtures are public/synthetic.
|
|
46
57
|
|
|
47
|
-
|
|
48
|
-
- S1 accepts one local file per `invoice.ingest` call; directory batches are S2.
|
|
49
|
-
- `unknown_fields`/`field_evidence` are stored locally and may contain the same sensitive fields as the invoice; keep the pool local and do not paste raw output into logs or public issues.
|
|
50
|
-
- Public samples with PII are kept in `.tmp` only; they are not shipped in the tarball.
|
|
58
|
+
## Public sample
|
|
51
59
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
Errors are thrown as `E_INV_*` (`E_INV_FILE_UNREADABLE`, `E_INV_PATH_NOT_ALLOWED`, `E_INV_OFD_UNSUPPORTED`, `E_INV_XML_SCHEMA_DRIFT`, `E_INV_FIELD_MISSING`, `E_INV_DOC_NOT_FOUND`, `E_INV_DUP_CONFLICT`, `E_INV_STORAGE_FAILED`, `E_INV_UNKNOWN_IMPL`). DSH renders thrown errors as tool errors; they are not returned as successful `{ok:false}` values.
|
|
60
|
+
Synthetic invoice XML/OFD fixtures; `ACCEPTANCE.csv` lists 7 public checks (one is `out_of_scope`). No real invoice is included.
|
|
55
61
|
|
|
56
62
|
## Development
|
|
57
63
|
|
|
58
64
|
```sh
|
|
59
65
|
pnpm install --frozen-lockfile
|
|
60
|
-
pnpm build
|
|
61
|
-
pnpm lint
|
|
62
|
-
pnpm typecheck
|
|
63
|
-
pnpm test
|
|
64
|
-
pnpm gate:sku04
|
|
66
|
+
pnpm build && pnpm lint && pnpm typecheck && pnpm test && pnpm gate:sku04
|
|
65
67
|
```
|
|
66
68
|
|
|
67
|
-
See `docs/architecture.md`, `docs/plugin-development.md`, `docs/configuration.md`, `FIXTURES.md`, `BUILD-PLAN-04.md`.
|
|
68
|
-
|
|
69
69
|
## License
|
|
70
70
|
|
|
71
|
-
Apache-2.0.
|
|
71
|
+
Apache-2.0. See `LICENSE`, `NOTICE`, `THIRD-PARTY-NOTICES`.
|
package/THIRD-PARTY-NOTICES
CHANGED
|
File without changes
|
package/cordis.patch.yml
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/lib/core/invoice.d.ts
CHANGED
|
File without changes
|
package/lib/core/invoice.js
CHANGED
|
File without changes
|
package/lib/plugin/index.d.ts
CHANGED
|
File without changes
|
package/lib/plugin/index.js
CHANGED
|
File without changes
|
package/lib/plugin/storage.d.ts
CHANGED
|
File without changes
|
package/lib/plugin/storage.js
CHANGED
|
File without changes
|
package/lib/plugin/tools.d.ts
CHANGED
|
File without changes
|
package/lib/plugin/tools.js
CHANGED
|
File without changes
|
|
File without changes
|
package/lib/registry/parsers.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@perrylink/dsh-einvoice",
|
|
3
|
-
"version": "0.2.0-alpha.
|
|
4
|
-
"description": "File-level Chinese e-invoice (OFD/XML) ingest, parse and
|
|
3
|
+
"version": "0.2.0-alpha.2",
|
|
4
|
+
"description": "File-level Chinese e-invoice (OFD/XML) ingest, parse, dedup and local archive.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/plugin/index.js",
|
|
7
7
|
"types": "./lib/plugin/index.d.ts",
|
|
@@ -45,7 +45,8 @@
|
|
|
45
45
|
"einvoice",
|
|
46
46
|
"invoice",
|
|
47
47
|
"ofd",
|
|
48
|
-
"perrylink"
|
|
48
|
+
"perrylink",
|
|
49
|
+
"finance"
|
|
49
50
|
],
|
|
50
51
|
"repository": {
|
|
51
52
|
"type": "git",
|
|
@@ -80,5 +81,9 @@
|
|
|
80
81
|
"@deepseek-ai/schemastery": "3.18.5",
|
|
81
82
|
"@types/node": "^24.0.0",
|
|
82
83
|
"typescript": "7.0.2"
|
|
84
|
+
},
|
|
85
|
+
"homepage": "https://github.com/PerryLink/dsh-einvoice#readme",
|
|
86
|
+
"bugs": {
|
|
87
|
+
"url": "https://github.com/PerryLink/dsh-einvoice/issues"
|
|
83
88
|
}
|
|
84
89
|
}
|