Catálogo de pontos de interação

Todos os IPs do Core: código, const SDK, tela, serviço, wired, canDeny e timeout.

Fonte: ENTRY_POINT_CATALOG (farmus-api) alinhado a SdkEntryPoint (@m3r/sdk 0.5.0). Timeout de processo 2000 ms; tela/ação de vendas 400 ms (exceto IP.EXT.SCREEN.ON_LOAD, 2000 ms).

Patch allowlist em vendas (header): observation, customerName, deliveryDate. Demais módulos: lista vazia (observam; não patcheiam documento).

Wired = o Core invoca hoje. Sem handler, fail-open (allow: true), salvo IPs BEFORE/ACTION de vendas (failPolicy: closed no catálogo do host).

Declare no m3r.json com o código IP.… ou o const; o validate resolve os dois.

Como ler a tabela

ColunaSignificado
Aliascódigo PE legado (PE410SV)
Telascreen no catálogo (host UI)
Serviçoquem chama invoke no backend
Wwired
NcanDeny

Vendas — processo

CódigoConstAliasServiçoWN
IP.SALES.ORDER.BEFORE_CREATESalesOrderBeforeCreatePE410INCSalesOrderServicesimsim
IP.SALES.ORDER.AFTER_CREATESalesOrderAfterCreatePE410INC2SalesOrderServicesimnão
IP.SALES.ORDER.BEFORE_SAVESalesOrderBeforeSavePE410SVSalesOrderServicesimsim
IP.SALES.ORDER.AFTER_SAVESalesOrderAfterSavePE410SV2SalesOrderServicesimnão
IP.SALES.ORDER.VALIDATESalesOrderValidatePE410TOK—nãosim
IP.SALES.ORDER.BEFORE_DELETESalesOrderBeforeDeletePE410DEL—nãosim
IP.SALES.ORDER.BEFORE_FULFILLSalesOrderBeforeFulfillPE410FATSalesOrderServicesimsim
IP.SALES.ORDER.AFTER_FULFILLSalesOrderAfterFulfillPE410FAT2SalesOrderServicesimnão
IP.SALES.ORDER.BEFORE_CANCELSalesOrderBeforeCancelPE410CANSalesOrderServicesimsim
IP.SALES.ORDER.AFTER_CANCELSalesOrderAfterCancelPE410CAN2SalesOrderServicesimnão
IP.SALES.ORDER.BEFORE_CONVERT_QUOTESalesOrderBeforeConvertQuotePE410ORC—nãosim
IP.SALES.ORDER.AFTER_CONVERT_QUOTESalesOrderAfterConvertQuotePE410ORC2—nãonão
IP.SALES.ORDER.BEFORE_ASSIGN_CUSTOMERSalesOrderBeforeAssignCustomerPE410CLI—nãosim
IP.SALES.ITEM.BEFORE_ADDSalesItemBeforeAddPE410ITM—nãosim
IP.SALES.ITEM.VALIDATESalesItemValidatePE410ITV—nãosim
IP.SALES.ITEM.PRICE_RESOLVESalesItemPriceResolvePE410PRC—nãonão
IP.SALES.RETURN.BEFORE_CREATESalesReturnBeforeCreatePE070INCReturnsServicesimsim
IP.SALES.PDV.BEFORE_CLOSESalesPdvBeforeClosePEPDV1PdvServicesimsim
IP.SALES.PDV.AFTER_CLOSESalesPdvAfterClosePEPDV2PdvServicesimnão
IP.SALES.EXIT.BEFORE_CONFIRMSalesExitBeforeConfirmPE003CNFExitDocumentServicenãosim
IP.SALES.GROUP.BEFORE_CREATESalesGroupBeforeCreatePE410GRP—nãosim
IP.SALES.PRICE.BEFORE_RELEASESalesPriceBeforeReleasePE410LIBPriceReleaseServicenãosim

Permissões típicas: sales.order.create|update|fulfill|cancel, sales.return.create, sales.pdv.finish, sales.quote.convert, sales.exit.confirm, sales.price.release.

Vendas — tela e ação

Tela ERP: pedido /apps/sales, /apps/sales/add, /apps/sales/[id]; lista /apps/sales; faturar /apps/sales/fulfill; Pedido Rápido; PDV /apps/pdv. Hook useInteractionPoint no web.

CódigoConstAliasscreenWN
IP.SALES.ORDER.SCREEN.ON_LOADSalesOrderScreenOnLoadPE410PBOsales.ordersimnão
IP.SALES.ORDER.SCREEN.ON_FIELD_CHANGESalesOrderScreenOnFieldChangePE410FLDsales.ordersimnão
IP.SALES.ORDER.SCREEN.BEFORE_SUBMITSalesOrderScreenBeforeSubmitPE410PAIsales.ordersimsim
IP.SALES.ORDER.ACTION.SAVESalesOrderActionSavePE410BTNsales.ordersimsim
IP.SALES.ORDER.ACTION.FULFILLSalesOrderActionFulfillPE410BFATsales.fulfillsimsim
IP.SALES.ORDER.ACTION.CANCELSalesOrderActionCancelPE410BCANsales.ordersimsim
IP.SALES.ORDER.TOOLBARSalesOrderToolbarPE410BARsales.ordersimnão
IP.SALES.ORDER.TABSalesOrderTabPE410TABsales.ordernãonão
IP.SALES.LIST.ON_LOADSalesListOnLoadPE410LSTsales.listsimnão
IP.SALES.LIST.ROW_ACTIONSalesListRowActionPE410ROWsales.listsimnão
IP.SALES.FULFILL.SCREEN.ON_LOADSalesFulfillScreenOnLoadPE410FSCsales.fulfillsimnão
IP.SALES.QUICK_SALE.SCREEN.ON_LOADSalesQuickSaleScreenOnLoadPE410QSsales.quick-salesimnão
IP.SALES.APPROVAL.SCREEN.ON_LOADSalesApprovalScreenOnLoadPE410APRsales.approvalnãonão
IP.SALES.FUTURE_DELIVERY.SCREEN.ON_LOADSalesFutureDeliveryScreenOnLoadPE410FUTsales.future-deliverynãonão
IP.SALES.PDV.SCREEN.ON_LOADSalesPdvScreenOnLoadPEPDVSCsales.pdvnãonão

Compras (catalogado, host ainda não chama)

Tela: /apps/purchase. Permissão purchase.order.update. Timeout 2000 ms.

CódigoConstAliasWN
IP.PURCHASE.ORDER.BEFORE_SAVEPurchaseOrderBeforeSavePE120SVnãosim
IP.PURCHASE.ORDER.AFTER_SAVEPurchaseOrderAfterSavePE120SV2nãonão

Quando o Core ligar: mesmo entryPoints.invoke(code, payload) do dispatcher de vendas. Não copiar dispatcher.

Estoque (catalogado, host ainda não chama)

Writer: StockService.postMovementInTransaction. Tela de movimentos / kardex. Permissão stock.movement.create.

CódigoConstAliasWN
IP.STOCK.MOVEMENT.BEFORE_POSTStockMovementBeforePostPE020MOVnãosim
IP.STOCK.MOVEMENT.AFTER_POSTStockMovementAfterPostPE020MOV2nãonão

Financeiro (catalogado, host ainda não chama)

Tela: /apps/financeiro/contas-a-pagar e contas-a-receber. Permissões financial.title.create, financial.payment.create.

CódigoConstAliasWN
IP.FINANCIAL.TITLE.BEFORE_CREATEFinancialTitleBeforeCreatePE012INCnãosim
IP.FINANCIAL.PAYMENT.BEFORE_REGISTERFinancialPaymentBeforeRegisterPE012PAGnãosim

Fiscal (wired, fail-open, canDeny=false, contract v1)

Permissão padrão fiscal.nfe.emit. Não alteram base/vNF na Onda 0. NFS-e não reutiliza códigos NFE e não patcheia XML.

CódigoConstAliasWNNota
IP.FISCAL.CALC.BEFOREFiscalCalcBeforePE055CBsimnãoantes do cálculo do item
IP.FISCAL.CALC.AFTERFiscalCalcAfterPE055CAsimnãotrilha já montada
IP.FISCAL.VALIDATEFiscalValidatePE055VALsimnãoCST×CFOP, ST sem CEST, DIFAL
IP.FISCAL.ITEM.BEFORE_SAVEFiscalItemBeforeSavePE055IBSsimnãopersistir impostos
IP.FISCAL.ITEM.AFTER_SAVEFiscalItemAfterSavePE055IASsimnão
IP.FISCAL.LANCAMENTO.BEFORE_CREATEFiscalLancamentoBeforeCreatePE055LBCsimnãorascunho FAY002
IP.FISCAL.LANCAMENTO.AFTER_CREATEFiscalLancamentoAfterCreatePE055LACsimnãonão dispara no no-op de idempotência
IP.FISCAL.LANCAMENTO.AFTER_STATUSFiscalLancamentoAfterStatusPE055LASsimnãoconferido/cancelado/estornado
IP.FISCAL.NFE.BEFORE_SIGNFiscalNfeBeforeSignPE055XMLnãosimfail-closed; sem hosting
IP.FISCAL.NFE.AFTER_AUTHORIZEFiscalNfeAfterAuthorizePE055AUTsimnãolançamento → conferido
IP.FISCAL.NFE.AFTER_REJECTFiscalNfeAfterRejectPE055REJsimnãolançamento → cancelado
IP.FISCAL.NFE.AFTER_CANCELFiscalNfeAfterCancelPE055CANsimnãoorigem estornada
IP.FISCAL.NFE.AFTER_INUTILIZEFiscalNfeAfterInutilizePE055INUsimnão
IP.FISCAL.ENTRY.BEFORE_CLASSIFYFiscalEntryBeforeClassifyPE055ECLsimnãoitem de entrada
IP.FISCAL.APURACAO.BEFORE_CLOSEFiscalApuracaoBeforeClosePE055ABCsimnãoFAY002 conferido → apurado
IP.FISCAL.APURACAO.AFTER_CLOSEFiscalApuracaoAfterClosePE055AACsimnão
IP.FISCAL.NFSE.BEFORE_TRANSMITFiscalNfseBeforeTransmitPE056XMLsimnãonão altera XML
IP.FISCAL.NFSE.AFTER_AUTHORIZEFiscalNfseAfterAuthorizePE056AUTsimnão
IP.FISCAL.NFSE.AFTER_REJECTFiscalNfseAfterRejectPE056REJsimnão
IP.FISCAL.NFSE.AFTER_CANCELFiscalNfseAfterCancelPE056CANsimnão

Extensão (UI declarativa)

CódigoConstAliasscreenWN
IP.EXT.SCREEN.ON_LOADExtScreenOnLoadPEEXTPBOextensionsimnão

Payload: screen, table, values e document se a tela abriu a partir de um pedido. Permissão extension.storage.read. Host: /apps/extensions/[code].

Exemplo (save de pedido)

import { SdkEntryPoint } from "@m3r/sdk";

ctx.subscriptions.add(
  ctx.entryPoints.on(SdkEntryPoint.SalesOrderBeforeSave, (payload) => {
    if (!payload.document?.observation) {
      return {
        allow: false,
        messages: [{ severity: "error", text: "Informe a observação.", field: "observation" }]
      };
    }
    return { allow: true };
  })
);

Typo no código → SdkValidationError. Inventar IP.SALES.ORDR… não compila.

Admin: GET /developer/entry-points/subscriptions e /invocations. Extensão desligada (FADEV13) some do menu e o host não invoca IP.