Inputs, outputs, and bindings

Each node parameter receives a value under a typed contract. Ormuz distinguishes a configured value, a direct context binding, and a transformation expression; the editor checks compatibility before the process can be used.

Three parameterization modes

value literal or template
binding input · node · var · env
expression transformation
Typed parameter
Executed node

All three modes converge on the same parameter contract: the type expected by the node remains the final authority.

ModeWhen to useBehavior
valueValue configured in the definitionSuitable for constants and structured content known at design time. Strings and structures may also contain `{{ ... }}` interpolations resolved at runtime when the parameter allows them.
bindingDirectly reuse a context valueReads an `input`, `node`, `var`, or `env` source without transformation. This is the preferred mode for passing platform objects and already-typed values.
expressionCalculate or transform a valueEvaluates a JSONata expression over available context. Reserve it for calculations, coalescing, aggregation, and transformations that a direct binding cannot express.
Dynamic text: stay in value mode when interpolation is enough

A message such as Send to {{ env.support_email }} remains a value keeps its structure defined in the process and renders placeholders at runtime. Switch to expression when the value genuinely needs to be calculated or transformed.

A node inspector presents its typed parameters and available input modes.
A node inspector presents its typed parameters and available input modes. Enlarge

Type system

Each parameter declares the type or types it accepts. The editor compares the source type with the expected type and rejects incompatible wiring. This check notably covers object subtypes: a platform.company is not interchangeable with a platform.invoice.

Types primitifs

TypeDescription
stringText, optionally enriched with a semantic subtype or enum.
integerInteger, optionally bounded.
numberDecimal number, optionally bounded.
booleanBoolean true/false.
objectStructured object: platform object, draft, common object, or extension object.
array<T>Collection whose element type is declared and checked.

Examples of semantic subtypes

Subtypes add semantics and validation rules to a base type. The list below is deliberately representative, not exhaustive; the schema and type reference is the entry point for detailed public contracts.

SubtypeMeaning
common.emailEmail address.
common.phonePhone number.
common.urlHTTP or HTTPS URL.
common.datetimeISO 8601 date and time.
common.dateDate ISO 8601.
common.durationISO 8601 duration, for example `P7D` or `PT2H`.
common.country_codeCode pays ISO 3166-1 alpha-2.
common.currency_codeISO 4217 currency code.
common.addressStructured postal address.

Platform objects

Platform objects use a subtype such as platform.company, platform.invoice or platform.order. When a parameter expects a persisted platform object, it normally receives that object through a binding or expression; it is not free-form JSON to re-enter in the process.

Drafts use the same business object with type mode draft. They remain distinct from a persisted resource carrying an id.

Binding sources

A binding reads directly from one of the four execution-context scopes. It adds no calculation: the read value must already be compatible with the target parameter.

ScopeSourceDescriptionExample
inputProcess inputValue supplied when the instance starts.input.invoice
nodeNode outputValue produced by an upstream node guaranteed on the current path.nodes.resolve_contact.selected_contact
varProcess variableMutable value carried by the instance to share or accumulate explicit state.vars.company_draft
envVariable d’environnementValue configured for the merchant environment and captured in execution context.env.approval_limit

Object relationships

When a source is a typed platform object, a binding may traverse a declared relationship without turning the identifier into implicit access. For example, from an invoice the editor can offer the relationship to its buyer company. Ormuz then explicitly resolves the target of that relationship within the process's authorized scope.

The picker shows upstream sources, compatible values, and the type expected by the target parameter.
The picker shows upstream sources, compatible values, and the type expected by the target parameter. Enlarge

Resource references

Some parameters expect only the typed identity of a resource, conceptually written ref(T), rather than the complete object platform.T.

A complete object can feed a reference of the same type: Ormuz then projects its id without an additional read. The reverse is never automatic: knowing an identifier does not grant access to resource content. Use an explicit read node when the process needs the object.

SourceDestinationCompatibility
platform.Tref(T)Yes, project the ID.
ref(T)platform.TNo, an explicit read is required.

Extension-configuration references are also qualified by extension: knowing a configuration identity reveals neither its content nor its secrets.

Guaranteed ancestors

A node output can be used only when the source node is a guaranteed ancestor of the current node on the relevant routing paths. A conditional branch that may be skipped therefore does not provide a safe output after convergence merely because it appears visually upstream.

This check prevents a valid process from depending at runtime on an output that does not exist on the path actually taken.

  • Move the calculation before the branch when this value can be produced before the decision.
  • Design convergence explicitly when each branch must provide a compatible value.
  • Use a process variable only when the process model genuinely guarantees it will be initialized before reading.

Process variables

Process variables carry an explicit value throughout an instance's lifetime. They are useful when state must be shared across several steps without depending directly on one node's output.

Some primitives can create a variable; others can update an existing one. A common pattern is to evolve a typed draft through several interactions, then explicitly materialize it once the business contract is complete.

Variables d’environnement

Merchant- or environment-specific values are available under the envscope. They can be used directly by a binding, referenced in a template value or consumed by an expression as needed.

A reference such as env.approval_limit must identify its key statically so Ormuz can record the process dependency and validate its type before deployment. Configuration details are described in Accounts, merchants, and environments.

Data classification

Wiring preserves the data-protection class on which it depends. A sensitive or secret value remains protected when passed directly, placed in a variable, or used in an expression.

When a transformation depends on several sources, the result inherits the classification needed to protect those dependencies. An explicit classification reduction may require consent when saving the process.

See Data protection in processes for the complete propagation, downgrade, and targeted-reveal model.