# @cellarnode/finance 中文文档

规范地址：https://npmcn.com/package/%40cellarnode/finance/

版本：0\.5\.0
npm 元数据更新时间：2026-10-20T09:10:45.763Z
中文译文更新时间：2026-11-09T08:46:18.475Z
软件包许可：UNLICENSED

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40cellarnode/finance
原文对照：https://npmcn.com/package/%40cellarnode/finance/?lang=original
项目主页：https://github.com/CellarNode/finance#readme
源码仓库：https://github.com/CellarNode/finance

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：78.3 kB，47 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=20\.19\.0
- 运行依赖：1 个
- peer 依赖：zod ^3\.25\.0 \|\| ^4\.0\.0
- 首次发布：2026-04-24T06:27:42.441Z
- 最新版本发布：2026-10-20T09:10:45.308Z
- 近 30 天下载量：3353（2026-10-10 至 2026-11-08，npm 官方下载统计）
- 已发布版本数：9（近 12 个月 9 个）

## 中文简介

Canonical price-range Zod schemas, BASIS enum, CellarNode (无头型Script)的货币助手.

## 安装

```sh
npm install @cellarnode/finance
```

也可以使用：`pnpm add @cellarnode/finance`、`yarn add @cellarnode/finance`、`bun add @cellarnode/finance`

## README

# @ cellarnode/ 财务

Canonical price-range Zod schemas, BASIS enum, 货币助手,格式助手,以及 CellarNode 的继承助手. 无头类型脚本——无回放,无UI分解.

## 安装

```bash
pnpm add @cellarnode/finance zod
# or
npm install @cellarnode/finance zod
# or
bun add @cellarnode/finance zod
```

`zod` 是同级依赖.

## 出口

```typescript
import {
  // BASIS
  BASIS, type Basis,

  // Price ranges
  priceRangeSchema, type PriceRange,
  fingerprintRange,

  // Chosen price ranges (with rangeRef + label)
  chosenPriceRangeSchema, type ChosenPriceRange,

  // Inheritance
  resolveEffective,
  type DefaultPriceProfile,
  type EffectiveRange,

  // Currency
  isValidCurrencyCode,
  getCurrencyName,
  getMinorUnits,

  // Formatting
  formatMoney,
  formatBasis,
  formatPriceRange,
} from "@cellarnode/finance";
```

## 快速实例

### 验证一个价格范围

```typescript
import { priceRangeSchema } from "@cellarnode/finance";

const range = priceRangeSchema.parse({
  min: 12.0,
  max: 18.0,
  currency: "EUR",
  basis: "per_unit",
  priceTypeId: "fob",
  priceTypeOther: null,
  basisNote: null,
});
```

审定规则`superRefine`:

-   `max >= min`
-   `priceTypeId` 财务报告和审定财务报表 `priceTypeOther` 相互排斥,相互排斥
-   `basisNote` 如果需要的话f `basis === "other"`

### 从组合配置中继承默认值

```typescript
import { resolveEffective } from "@cellarnode/finance";

const range = { min: 1, max: 2, currency: null, basis: null, priceTypeId: null, priceTypeOther: null, basisNote: null };
const profile = { currency: "EUR", basis: "per_unit", priceTypeId: "fob" };
const effective = resolveEffective(range, profile);
// → { min:1, max:2, currency:"EUR", basis:"per_unit", priceTypeId:"fob", ... }
```

### 格式化显示的价格范围

```typescript
import { formatPriceRange } from "@cellarnode/finance";

formatPriceRange({ min: 12, max: 18, currency: "EUR", basis: "per_unit", ... });
// → "€12.00 - €18.00 per unit"
```

### 比较正常价格金额

```typescript
import { compareNormalizedPriceAmount } from "@cellarnode/finance";

const result = compareNormalizedPriceAmount({
  amount: 7.5,
  min: null,
  max: 10,
  fromBasis: "per_unit",
  toBasis: "per_litre",
  packageVolumeMl: 750,
  fxRate: 1,
});
// { ok: true, relation: "within", comparisonAmount: 10 }
```

边界是包容性的、有限度的、非否定性的和有秩序的; `null` 打开一边. 两个界限都不能是 `null`. 数量必须是有限度的、非负的,以及FX率 必须是正和有限度的(通过) `1` (对同一种货币而言) 供应的软件包 数量必须是正的和有限度的,并且在基数不同时需要. 只有条子 `per_unit` 财务报告和审定财务报表 `per_litre` 基础被输入类型接受.

每一行都意味着 `String(number)` 十进制拼写,包括缩写. 关系使用精确的理性算法,不进行货币四舍五入或容忍. 资料 `comparisonAmount` 在 JavaScript 编号后方圆 比较;即使确切的关系不在其中,它也可能等同于约束. 流出或正结果四舍五入为零 `{ ok: false, reason: "unrepresentable_amount" }`其他失败原因有: `invalid_amount`, (中文(简体) ), `invalid_bounds`, (中文(简体) ), `invalid_fx_rate`,以及 `invalid_package_volume`。 。 。 . 无 BigInt 值离开帮助者 .

呼叫者拥有货币身份, FX 选择/新鲜度, 信任的包量, (c) 合格的案件身份,以及不受限制的处理范围。 此助手执行 没有I/O,变异,评分或政策评价.

## 为什么是这个包裹?

在此之前 `@cellarnode/finance`{\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}这只犬的价程是Zod schema的 `cellarnode-backend-v2/src/features/opportunities/price-range-schema.ts`3个仪表板(管理人员、生产商、进口商)重复了验证规则——在Spec 1执行期间已经观察到一次漂移。 这个软件包拥有有线格式的端到端,因此所有消费者保持同步.

## 发展

```bash
make build       # clean + typecheck + compile
make test        # vitest run
make test-watch  # vitest watch
make typecheck   # tsc --noEmit
make check-exports  # publint + arethetypeswrong
```

## 出版

发布至npm (公众访问 - `publishConfig.access: "public"`见CEL-1983 **npm 信任出版(OIDC)** —— 说 `.github/workflows/publish.yml` 在合并时自动发布到 `main` 变化 `package.json`'"版本. 出版工作没有长生不老的npm符号, 没有人运行 `npm publish` 手边。 这是私人财产 所以不像 `@cellarnode/beverage-utils`, npm 会 不生成此软件包的出处证明 .

切出一个本地发布,然后降落通过一个正常的PR:

```bash
make release-patch   # bump patch, commit, tag
make release-minor   # bump minor, commit, tag
make release-major   # bump major, commit, tag
```

目标撞了 `package.json`、建设、承诺和标记——它们不出版。 推开 分支,打开 PR,并合并到 `main` 启动CI的发布工作.

## 许可证

UNLICENSED——版权(c) Cellar节点. 版权所有。 这个软件包是 为 CellarNode 自己的申请而公布; 不给许可证 其他用途.

## 常见问题

### @cellarnode/finance 是什么？

Canonical price-range Zod schemas, BASIS enum, CellarNode \(无头型Script\)的货币助手\.

### 如何安装 @cellarnode/finance？

在项目目录运行 npm install @cellarnode/finance，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：zod（^3\.25\.0 \|\| ^4\.0\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @cellarnode/finance 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @cellarnode/finance 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @cellarnode/finance 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=20\.19\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @cellarnode/finance 可以商用吗？

@cellarnode/finance 使用 UNLICENSED 许可。作者声明为 UNLICENSED，即不授予公开使用许可（与公共领域的 Unlicense 不同）。使用前需获得作者授权。以上为概括，不构成法律意见，请以许可原文为准。

### @cellarnode/finance 的下载量有多少？

根据 npm 官方下载统计，@cellarnode/finance 在 2026/10/10 – 2026/11/08 这 30 天内被下载 3,353 次，日均约 112 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @cellarnode/finance 还在维护吗？

最新版本 0\.5\.0 发布于 2026/10/20（20 天前）；至今共发布 9 个版本，其中过去 12 个月发布了 9 个；首次发布于 2026/04/24。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

