@m3r/sdk 0.5.0
ctx.m3r
A extensão chama o Core. Hoje só sales está ligado. Regras de pedido, estoque e fiscal continuam no ERP.
ctx.m3r é request/response. Não aborta um save que o usuário já disparou no ERP — para isso use ctx.entryPoints.
Nesta versão o client só expõe ctx.m3r.sales. purchase, stock, financial e fiscal estão no catálogo como planned — ctx.m3r.purchase não existe.
Permissões
Declare em m3r.json → permissions[]. Use SdkScope, não string solta. m3r validate recusa scope fora do catálogo. O Core recusa método sem o scope na credencial RUN.
SdkScope | Métodos |
|---|---|
sales.order.read | get, find, items, getFulfillment, cancelPreview, getDeliveryAddress |
sales.order.create | create |
sales.order.update | update, assignCustomer, updateDeliveryAddress |
sales.order.fulfill | fulfill |
sales.order.cancel | cancel |
sales.order.write | atalho aceito no validate |
Sem o scope: o host devolve 403. A filial tem de pertencer à empresa da credencial.
orders — contrato público
O Core não devolve a entidade TypeORM. O shape é SdkSalesOrder.
| Campo | Tipo | Nota |
|---|---|---|
id | string | ID público (hash). |
code | string | Código do pedido. |
status | string | Status do Core. |
filialId | string | Obrigatório em find / create. |
customerId | string | null | |
customerName | string | |
amount | number | Total. |
date | string | ISO. |
deliveryDate | string | null | |
observation | string | null | Também patchável em IP. |
items | SdkSalesOrderItem[] | Quando o Core incluir. |
Item: id, productId, name, qtdPackage, amount, discount, total, fulfilledQty.
Métodos de pedido
| Método | Entrada | Pode |
|---|---|---|
get(id) | id público | Ler um pedido do tenant. |
find(query) | filialId obrigatório; status?, customerId?, limit?, cursor? | Listar. cursor é página numérica do Core. |
create(input) | filialId, customerType, items[] (productId, qtdPackage, amount) | Criar. Motor de preço/estoque do Core vale. |
update(id, input) | observation?, customerName?, deliveryDate?, status?, customerId? | Patch restrito. Não manda item por aqui. |
items(id) | Linhas. | |
fulfill(id, { items, creditAmount? }) | salesOrderItemId + quantity | Fatura pelo fluxo do ERP. |
cancel(id, { justificativa?, confirmed? }) | Estorno do Core. | |
cancelPreview(id) | Impacto antes de confirmar. | |
convertQuote / convertToQuote | Orçamento ↔ pedido. | |
assignCustomer(id, customerId) | Troca de cliente. | |
getDeliveryAddress / updateDeliveryAddress | addressId do cliente | Endereço de entrega. |
groupPreview / group | filialId + salesOrderIds | Agrupar pedidos. |
Apoio ao ciclo
Leitura (e returns.create) no mesmo módulo. Contrato estável e testado: orders.
| Client | Métodos |
|---|---|
sales.customers | find({ search?, limit? }) |
sales.products | find({ search?, limit?, filialId? }) |
sales.paymentConditions | find(filialId) |
sales.priceTables | find(filialId) |
sales.sellers | find() |
sales.returns | find(filialId), create({ filialId, … }) |
Pode / não pode
Pode
- Criar e alterar pedido com as mesmas regras do ERP.
- Paginar com
cursor. - Depois do
create, reagir emctx.events.
Não pode
- Passar
filialIdde outro tenant. - Mandar SQL, join ou campo interno da entidade (
~30relations). - Recusar o save do usuário com um
update— use IP. - Chamar
ctx.m3r.purchase/stock/financialnesta versão.
