@m3r/sdk 0.5.0
Regras e limites
O que a extensão não pode fazer e os tetos do catálogo 0.5.0.
A plataforma fecha o conjunto. Se não está no catálogo, não compile, não valide e não rode.
Proibido
| Proibição | Por quê |
|---|---|
| SQL | Isolamento multi-tenant. O Core persiste. Tabela física (storage: physical) o Core cria como FAX#### — a extensão não emite DDL. |
TypeORM / pg | Idem. |
| React no ERP | O host pinta DataTable, Modal e PageHeader. |
| iframe | Não há host iframe nesta versão. |
| Gerador Python da extensão | PDF usa o tabular do farmus-reports. |
Coluna json livre | Use string, text, number, boolean, date, enum. |
m3r validate recusa o import. Runtime também.
Slugs
| Coisa | Regex | Exemplo |
|---|---|---|
Tabela name / coluna | ^[a-z][a-z0-9_]{1,47}$ | demo_auditoria, pedido_codigo |
Tela / nav / relatório code | ^[a-z][a-z0-9_.-]{1,62}$ | demo.auditoria.novo |
| Tabela física | ^FAX[0-9]{4}$ | FAX0001 — só no retorno do ensure ou em physicalName |
Não use FAX#### como name lógico. Reservados (não declare): id, company_id, extension_id, created_by, created_at, updated_at, delete_date, table_id.
Unique e soft delete
| Storage | Como o unique vale | remove |
|---|---|---|
document | Core compara as linhas JSONB vivas (FADEV07) | softRemove — some do find |
physical | CREATE UNIQUE INDEX … WHERE delete_date IS NULL na FAX#### | delete_date = NOW() |
Linha apagada libera o unique. find / tela / relatório não devolvem soft-deleted.
physicalName omitido: sequence fadev_physical_table_seq. Se o número já estiver ocupado (meta ou tabela no Postgres), o Core pula e tenta o próximo. Depois do primeiro ensure, o nome não muda.
Isolamento: companyId + extensionId. Ambiente FADEV02 não separa dado.
Limites de ctx.ext
| Recurso | Teto |
|---|---|
| Tabelas por extensão / tenant | 20 |
| Colunas por tabela | 30 |
| Bytes por linha | 64 KB |
| Itens de menu | 20 |
| Relatórios | 10 |
Validação em três camadas
- TypeScript —
SdkEntryPoint,SdkEvent,SdkScope,SdkMenuParent. - Runtime —
ctx.entryPoints.on("IP.SALES.ORDR…")lançaSdkValidationError. m3r validate—permissions,events,entryPointsexistem no catálogo;tables/screens/nav/reportsbatem 1:1 com o código.
Wired ≠ catalogado
IPs de compras, estoque, financeiro e NF-e existem no catálogo para você declarar no manifest. O Core só invoca os que estão wired. Confira em GET /developer/sdk/catalog e em ctx.capabilities.
Gestão no tenant
Desativar em Configurações → Extensões não é drop. Tabela, record e pacote assinado ficam. Menu, IP e credencial RUN param.
Versão
Esta documentação descreve @m3r/sdk 0.5.0 (SDK_CATALOG.version) e o ciclo do Core em volta (deploy, FADEV11–FADEV13). Troque a versão no seletor da sidebar quando houver snapshot de uma release anterior.
