@pacp/spec
v1.0.0
Published
PACP - Padrão Aberto de Catálogo e Precificação. Schema, profiles e validador para catálogos de produtos.
Maintainers
Readme
pacp
Schema, profiles e validador do PACP (Padrão Aberto de Catálogo e Precificação) como pacote npm.
Instalação
npm install pacpPara usar a função validate(), instale também as peer dependencies:
npm install pacp ajv ajv-formatsUso
Schema e profiles (sem dependências extras)
import { schema, profiles, profileIds, SPEC_VERSION } from 'pacp';
// JSON Schema completo do PACP v1.0.0
console.log(schema.$id); // "https://pacp.dev/spec/1.0.0/pacp.schema.json"
// Versão da spec
console.log(SPEC_VERSION); // "1.0.0"
// Extension profiles disponíveis
console.log(profileIds); // ["moveis", "iluminacao", "pisos-revestimentos", "fiscal-br"]
// Acessar profile específico
console.log(profiles.moveis.title); // "PACP Profile: Moveis e Alta Decoracao"Validação de documentos
import { validate } from 'pacp';
const catalogDocument = {
spec: '1.0.0',
document_type: 'CATALOG',
catalog: { id: 'meu_catalogo' },
rulesets: [
{
id: 'rs_base',
target: 'BASE',
rules: [{ id: 'rule_setup', operation: 'ADD', value: 10 }],
},
],
};
const result = validate(catalogDocument);
if (result.valid) {
console.log('Documento PACP válido!');
} else {
for (const issue of result.issues) {
console.error(`[${issue.code}] ${issue.path}: ${issue.message}`);
}
}Tipos TypeScript
Todos os tipos do PACP estão disponíveis:
import type {
CatalogDocument,
ProductDocument,
PacpDocument,
Product,
Ruleset,
Rule,
Table,
Constraint,
Dependency,
Context,
Option,
ImageRef,
Measure,
DimensionsObj,
ValidationResult,
} from 'pacp';
const product: Product = {
id: 'prod_mesa',
name: 'Mesa de Jantar',
sku: 'MES-001',
manufacturer: 'Moveis Artisan',
brand: 'Artisan Home',
base_price: 2500,
weight: { value: 45, unit: 'kg' },
dimensions: { width: 160, height: 78, depth: 90, unit: 'cm' },
options: [
{ id: 'opt_madeira', attributeId: 'material', value: 'CARVALHO' },
],
'x-finish': 'Natural envernizado',
'x-warranty_months': 24,
};Acesso direto aos JSONs
Se preferir usar os JSONs diretamente (sem TypeScript):
// Schema principal
const schema = require('pacp/schema.json');
// Profiles
const moveis = require('pacp/profiles/moveis.json');
const iluminacao = require('pacp/profiles/iluminacao.json');
const pisos = require('pacp/profiles/pisos-revestimentos.json');
const fiscal = require('pacp/profiles/fiscal-br.json');O que está incluído
| Export | Descrição |
|--------|-----------|
| schema | JSON Schema completo do PACP v1.0.0 |
| profiles | Objeto com todos os profiles oficiais |
| profileIds | Array com IDs dos profiles: moveis, iluminacao, pisos-revestimentos, fiscal-br |
| validate() | Função de validação (requer ajv + ajv-formats) |
| SPEC_VERSION | Constante "1.0.0" |
| Tipos TS | CatalogDocument, ProductDocument, Product, Rule, Table, etc. |
Extension Profiles
| Profile | Vertical | Campos |
|---------|----------|--------|
| moveis | Móveis e Alta Decoração | x-assembly_required, x-load_capacity, x-finish, x-warranty_months, ... |
| iluminacao | Iluminação | x-lumens, x-color_temp_k, x-voltage, x-dimmable, ... |
| pisos-revestimentos | Pisos e Revestimentos | x-pei, x-slip_resistance, x-rectified, x-usage, ... |
| fiscal-br | Fiscal Brasil | x-ncm, x-origem, x-cest, x-cfop, ... |
Links
Licença
MIT
