Files
shanxia2.0/web-admin/src/utils/crm-invoice-paste-recognize.test.ts
T
2026-08-21 09:35:11 +08:00

68 lines
3.0 KiB
TypeScript

import assert from 'node:assert/strict'
import { describe, it } from 'node:test'
import {
CRM_INVOICE_PASTE_SAMPLE_ANQING,
CRM_INVOICE_PASTE_SAMPLE_JIANGFENG,
parseCrmInvoicePaste,
mergeInvoiceRemark
} from './crm-invoice-paste-recognize'
describe('parseCrmInvoicePaste · 安庆山峡样例', () => {
it('maps core fields and packs extra into remarkParts', () => {
const r = parseCrmInvoicePaste(CRM_INVOICE_PASTE_SAMPLE_ANQING)
assert.equal(r.companyName, '安庆市山峡化工有限公司')
assert.equal(r.taxNo, '9134080006084212XH')
assert.equal(r.bankName, '中国建设银行安庆分行城中支行')
assert.equal(r.bankAccount, '34050168860800000121')
assert.equal(r.companyAddress, '安徽省安庆市高新区霞虹路5号')
assert.equal(r.phoneFax, '0556-5348918')
assert.ok(r.filledCount >= 6)
assert.ok(r.remarkParts.some((p) => p.includes('银行行号') && p.includes('105368000056')))
assert.ok(r.remarkParts.some((p) => p.includes('邮编') && p.includes('246000')))
assert.ok(r.remarkParts.some((p) => p.includes('邮寄') && p.includes('汪璇')))
// 邮寄块内地址不得覆盖单位地址
assert.equal(r.companyAddress, '安徽省安庆市高新区霞虹路5号')
})
})
describe('parseCrmInvoicePaste · 江峰生物样例', () => {
it('handles spaced labels, spaced account, and 地址及电话', () => {
const r = parseCrmInvoicePaste(CRM_INVOICE_PASTE_SAMPLE_JIANGFENG)
assert.equal(r.companyName, '安徽江峰生物科技有限公司')
assert.equal(r.taxNo, '91340200MA8PYJNB8X')
assert.equal(r.bankName, '中国建设银行芜湖经开区支行')
assert.equal(r.bankAccount, '34050167880800002481')
assert.ok((r.companyAddress || '').includes('安徽省芜湖市'))
assert.ok(!(r.companyAddress || '').includes('0553'))
assert.equal(r.phoneFax, '0553-5201019')
assert.ok(r.remarkParts.some((p) => p.includes('银行行号') && p.includes('105362050066')))
})
})
describe('parseCrmInvoicePaste · 边界', () => {
it('returns empty filledCount for blank text', () => {
const r = parseCrmInvoicePaste(' \n ')
assert.equal(r.filledCount, 0)
assert.ok(r.warnings.length > 0)
})
it('does not treat 名称 inside unrelated prose without colon as company', () => {
const r = parseCrmInvoicePaste('请查收开票资料,谢谢')
assert.equal(r.filledCount, 0)
})
})
describe('mergeInvoiceRemark', () => {
it('appends new parts without duplicating existing', () => {
const next = mergeInvoiceRemark('已有备注', ['银行行号:105', '邮编:246000'])
assert.equal(next, '已有备注;银行行号:105;邮编:246000')
const again = mergeInvoiceRemark(next, ['银行行号:105', '邮寄:张三'])
assert.equal(again, '已有备注;银行行号:105;邮编:246000;邮寄:张三')
})
it('returns existing when parts empty', () => {
assert.equal(mergeInvoiceRemark('x', []), 'x')
assert.equal(mergeInvoiceRemark('', ['a']), 'a')
})
})