@m3r/sdk 0.5.0

Catálogo da SDK

Fonte de verdade do que a extensão pode implementar — módulos, IPs, eventos, scopes, limites e proibições.

Versão desta doc: 0.5.0 (SDK_CATALOG.version). O catálogo vive em @m3r/sdk (SDK_CATALOG / ctx.capabilities). A API anexa só o que está ligado (wired) em GET /developer/sdk/catalog.

Não copie listas. Importe o const.

Plataforma em cima do 0.5.0

O catálogo da SDK não mudou de versão. O Core e o ERP já fecham o ciclo em volta dele:

  • Deploy assinado: m3r deploy → FADEV11 / FADEV12. Production recusa RUN sem install.
  • Gestão no ERP: ativas / inativas / logs (FADEV13 + FADEV05).
  • Sample 0.6.1: pastas por domínio; AFTER_SAVE grava ctx.ext.records; openReport: nas actions da tela.
  • Padrões: árvore, slugs, unique documento vs físico, SdkMenuParent.

Novidades 0.5.0

  • Tabela com storage: physical: o Core cria FAX0001…FAX9999 (FarmusBaseEntity + company_id). A extensão não emite DDL. physicalName é opcional; omitido = Core atribui e devolve.
  • Colunas reservadas: id, company_id, extension_id, created_by, created_at, updated_at, delete_date, table_id.
  • Evolução só aditiva. storage não muda depois do ensure.

Novidades 0.4.0

  • Relatório: filtro dateRange / enum / text na coluna declarada (string ou { type, column?, label? }).
  • Relatório: export PDF e Excel do mesmo recorte (GET .../xlsx).
  • Tela: ui.hideField no ON_LOAD e screen.actions com opens para outra tela/modal.
  • Tela aberta a partir de venda leva documentId / documentCode; o ON_LOAD recebe o documento.
  • IPs ligados no host: ACTION.FULFILL, ACTION.CANCEL, QUICK_SALE.SCREEN.ON_LOAD.

Canais

  • m3r — dados de negócio
  • events — depois do fato
  • entryPoints — no meio do fluxo
  • ext — tabela, tela, menu, relatório

Módulos em ctx.m3r

MóduloStatus
salesdisponível
purchase, stock, financial, fiscalplanejado (IPs já existem no catálogo)
developerdisponível só em ctx.ext / IP.EXT.*

Const enums

Use o objeto, não o literal:

@m3r/sdk
import {
  SdkEntryPoint,
  SdkEvent,
  SdkMenuParent,
  SdkNavTarget,
  SdkFormBind,
  SdkReportFilter,
  SdkScope,
  SdkColumnType,
  SdkScreenKind,
  SdkTableStorage
} from "@m3r/sdk";

code de tabela, tela, menu e relatório da sua extensão continua string — é o identificador que você inventa. Tudo que é plataforma é enum.

Limites de ctx.ext

  • 20 tabelas por extensão / tenant
  • 30 colunas por tabela
  • 64 KB por linha
  • 20 itens de menu
  • 10 relatórios
  • tipos de coluna: string, text, number, boolean, date, enum
  • storage: document (JSONB) ou physical (tabela FAX#### criada pelo Core)
  • physicalName opcional (FAX0001–FAX9999); omitido = Core atribui e devolve
  • binds de formulário: document.id, code, status, observation, customerName, customerId, deliveryDate, orderDocType

Proibido

SQL, React no ERP, TypeORM, iframe, gerador Python próprio, coluna json livre.

Validação

  1. TypeScript — o handler de um IP recebe o payload daquele código.
  2. Runtime — ctx.entryPoints.on("IP.SALES.ORDR…") lança SdkValidationError.
  3. m3r validate — permissions, events e entryPoints do m3r.json precisam existir no catálogo; tables / screens / nav / reports batem 1:1 com o código.
  4. Testes de exaustão — catálogo SDK × mapa tipado × catálogo da API.