60 lines
2.2 KiB
Markdown
60 lines
2.2 KiB
Markdown
# OpenSpec Change: enterprise-barcode
|
|
|
|
- **Change ID**: enterprise-barcode
|
|
- **Package**: `@suaveplan/barcode`
|
|
- **Category**: universal
|
|
- **Target path**: `universal/media/barcode`
|
|
- **Status**: PROPOSED
|
|
- **Date**: 2026-04-19
|
|
- **Reference spec**: `/mnt/s/web/suaveplan/enterprise/barcode.md`
|
|
|
|
## Summary
|
|
|
|
Greenfield rebuild of `@suaveplan/barcode` — dependency-free barcode generator and reader with support for Code 39, Code 93, Code 128, ITF, EAN-13, UPC-A, Data Matrix, PDF417. Pure-TS encoders/decoders; no native bindings. Ships a `BarcodeGenerator`, `readBarcode`, and `generateBatch`.
|
|
|
|
## Current-state audit (genesis)
|
|
|
|
Package does not exist yet — fresh build.
|
|
|
|
## Dependencies
|
|
|
|
- Workspace: `@suaveplan/error`, `@suaveplan/types`
|
|
- External (via catalog): `zod`, `tslib`, `@opentelemetry/api`
|
|
- Dev (via catalog): `vitest`, `@vitest/coverage-istanbul`, `fast-check`, `mitata`
|
|
|
|
## Preserved public surface
|
|
|
|
### Generator / reader
|
|
|
|
- `BarcodeGenerator`, `calculateEan13CheckDigit`, `calculateUpcaCheckDigit`
|
|
- `readBarcode`, `ReadResult`
|
|
- `generateBatch`, `BatchItem`, `BatchItemResult`, `BatchOptions`, `BatchResult`
|
|
|
|
### Formats
|
|
|
|
- Code 93: `encodeCode93`, `validateCode93`
|
|
- Data Matrix: `encodeDataMatrix`, `validateDataMatrix`, `DataMatrixOptions`, `DataMatrixResult`
|
|
- ITF: `calculateItfCheckDigit`, `encodeItf`, `validateItf`
|
|
- PDF417: `encodePdf417`, `validatePdf417`, `Pdf417Options`, `Pdf417Result`
|
|
|
|
### Errors
|
|
|
|
- `BarcodeError`, `BarcodeErrorCode`, `BarcodeErrorContext`, `BARCODE_ERROR_METADATA`, `registerBarcodeErrorCodes`
|
|
- `checksumFailed`, `decodeFailed`, `encodeFailed`, `imageInvalid`, `invalidData`, `invalidFormat`, `unsupportedCharacter`
|
|
|
|
### Types / constants
|
|
|
|
`BarcodeFormat`, `BarcodeOptions`, `BarcodeResult`, `CODE39_CHARS`, `DEFAULT_BARCODE_OPTIONS`, `VALID_FORMATS`.
|
|
|
|
## New genesis additions
|
|
|
|
- Extend code registry with `BARCODE.BATCH_PARTIAL` for partial batch failures.
|
|
- Zod schemas for every option type.
|
|
- OTel counter `barcode.encode.total{format, outcome}`, `barcode.decode.total{format, outcome}`; histograms for durations.
|
|
- Property tests: `readBarcode(BarcodeGenerator.generate(x)) === x` for every format on valid payloads.
|
|
|
|
## Impact
|
|
|
|
- Adds one new package: `universal/media/barcode`
|
|
- Adds one new spec capability: `barcode`
|