Customização do ERP

Quatro canais oficiais. Extensão TypeScript, IPs no meio do fluxo, eventos depois do commit, tabelas declarativas.

Customizar o M3R não é copiar tela nem abrir SQL. O Core persiste; o ERP pinta; a extensão declara.

Os quatro canais

CanalQuandoPode abortar a operação?
API HTTPoutro sistema cria/consulta com as regras do ERPa API recusa o request
Eventosdepois do commitnão
Pontos de interaçãono meio da tela ou do savesim, se o IP canDeny e estiver wired
ctx.exttabela, tela, menu, relatório da extensãonão substitui o documento fiscal

Não misturar com Flow Engine (automação interna do tenant) nem com feature flags (mudam o Core para todos os documentos do tipo).

Onde a extensão vive

PeçaOnde
Manifest + handlerspacote @m3r/sdk, m3r.json, defineExtension
Catálogo tipadoSDK_CATALOG 0.5.0 — catálogo SDK
Catálogo do CoreENTRY_POINT_CATALOG em farmus-api
Registro tenantFADEV04 (inscrição), FADEV05 (auditoria de invocação)
UI declarativaFADEV06–FADEV10, host /apps/extensions/[code]
Tabela físicaFAX0001–FAX9999 criadas pelo Core
Pacote assinadoFADEV11 / FADEV12 — m3r deploy
Liga/desligaFADEV13 — Configurações → Extensões

Gestão: Gestão no ERP. Ciclo: ciclo de vida.

Wired ≠ catalogado

O m3r validate aceita todo código do catálogo. O host só chama wired: true. Compras, estoque e financeiro têm IP no catálogo e não estão no dispatcher ainda. Confira sempre:

GET /api/developer/sdk/catalog

e ctx.capabilities.entryPoints.

O que a extensão não pode

SQL, React no ERP, TypeORM, iframe, coluna JSON livre, inventar código de IP, patchear preço/item/campo fora da allowlist de vendas (observation, customerName, deliveryDate).