Open core: don’t reinvent the wheel — build your fenestration software on ours.

Skip to main content

Company Preferences are the system-wide settings under Administration. Many also show
an info (ⓘ) tooltip in the admin screen. Order-status fields
(onhold, ordered, confirmed, …) hold the internal
status id used for that workflow stage rather than a user toggle.

What, where, who, when, why

What The field reference for the system-wide Company Preferences
settings: workflow status ids, AI assistant / vision / read-drawing keys, and the rest of
the Administration tabs.
Where Administration and Setup → Company
Preferences
.
Who The system administrator — one person or a small group;
these settings apply to everyone in the company.
When At initial setup, and afterwards only when a policy actually
changes (new workflow status mapping, enabling an AI feature, changing order behavior).
Most fields are set once and left alone.
Why it matters These are company-level defaults that every screen
silently reads — the order-status ids decide which status means “on
hold” or “confirmed”, and a wrong value here misroutes the whole
workflow. Nothing here is per-user.

AI Assistant & drawing LLM

OpenJanela uses AI models in three separate places, each with its own settings
block on the AI Assistant tab of Company Preferences. They do not share keys —
each feature reads only its own API-key field:

  1. AI Assistant (text) — the in-app chatbot.
  2. Vision (images) — used when the chatbot is sent an image and the primary
    text provider can’t natively read it.
  3. Read-Drawing LLM — interprets an uploaded shop drawing into a design
    (see Reading window & door drawings). This is completely
    independent of the AI Assistant and has no fallback to the assistant’s keys.
Field Meaning
aiAssistantEnabled Master on/off for the AI Assistant (UI, embedded chatbot button, model calls). There is no separate “vision enabled” toggle — vision is selected automatically when this is on, the request carries an image, and the primary provider can’t read images.
aiAssistantProvider / aiAssistantModel Text-assistant provider (e.g. anthropic) / model id. Recommended model: claude-opus-4-8.
aiAssistantApiKey API key for the text assistant. Masked (write-only): leaving it blank on save keeps the existing key.
aiAssistantBaseUrl / aiAssistantApiUrl Text-model API base URL / ERP-chatbot back-end API URL.
aiAssistantMaxTokens / aiAssistantTemperature Max tokens per response (rec. 8192) / sampling randomness 0.0–1.0 (rec. 0.1).
aiAssistantVisionProvider / aiAssistantVisionModel Vision (image) provider (default anthropic) / model id. Used only when the primary provider is not vision-capable.
aiAssistantVisionBaseUrl / aiAssistantVisionApiKey Vision API base URL / vision API key. If the vision key is blank and the vision provider matches the primary provider, it falls back to aiAssistantApiKey; if they differ and the vision key is blank, the vision call has no valid key.
drawingLlmEnabled Master toggle for the Read-Drawing LLM feature. When off, drawing interpretation returns “Drawing LLM not enabled for this company”.
drawingLlmProvider / drawingLlmModel Provider (default anthropic) / model id for interpreting drawing images into designs. Recommended model: claude-opus-4-8.
drawingLlmApiKey API key for the Read-Drawing LLM, encrypted at rest. Masked (write-only): blank on save keeps the existing key. (There is no drawingLlmBaseUrl.)

Setting up the AI Assistant, Vision & Read-Drawing

All three features use an Anthropic API key (provider anthropic).
Obtain one from the Anthropic Console — this is separate from any Claude.ai subscription
and needs a funded account:

  1. Sign in at console.anthropic.com and make sure the organization has billing
    set up.
  2. Go to Settings → API Keys and click Create Key. Copy the value
    (it starts with sk-ant-) immediately — it is shown only once.
  3. Paste it into the relevant key field on the AI Assistant tab and Save.
    The same key can be reused across the text, vision, and drawing key fields.
Valid model ids. Use the exact model string with
no date suffix — a suffixed id will fail with a 404. Current Anthropic ids:
claude-opus-4-8 (recommended), claude-sonnet-5,
claude-haiku-4-5, claude-fable-5.
For the Read-Drawing LLM specifically, stay with claude-opus-4-8,
claude-sonnet-5, claude-haiku-4-5 or claude-fable-5:
the drawing request requires structured output, which is not supported on
claude-opus-4-7/4-6 or claude-sonnet-4-6.
“Drawing LLM API key is missing or could not be decrypted”.
The drawing key is stored encrypted. If the server can’t decrypt it you get this message even
when a key is set. Two causes: (1) the key is genuinely blank — re-enter and save; or
(2) the key was saved by a session using a different value of the JVM system property
-Doj.drawing.crypto.secret than the running server. The reliable fix is to leave
-Doj.drawing.crypto.secret unset on both the client and the server, then
re-save the key so it is re-encrypted with the default secret.

Order entry & pricing

Field Meaning
defaultUom Default unit of measure: 1=Metric, 2=Imperial Decimal, 3=Imperial Fraction.
defaultseries Default product series id for new line items.
defaultLayoutView Default elevation view: 1=View Out, 2=View In.
verifyOverallWh Overall auto-width: 0=off, 1=auto-recompute, 2=prompt.
recalculate When ON, always recalculate order items on every save/change.
priceByOrder Default pricing mode for a new order: OFF starts on Price by Item, ON starts on Price by Order. Only the default — an existing order keeps the mode it was saved with, and a user without the change-base-price right stays locked to per-item pricing.
priceChangeDialog When ON, prompt to confirm an automatic price update when a design changes.
roundprice / roundtotal / rounddiscountedprice Rounding of line prices / order totals / post-discount prices.
useDiscountLevels When ON, use tiered discount levels instead of a single discount.
matrixOutOfRange When ON, raise an error when a matrix lookup falls outside its limits.
sisterSashPrompt Web configurator: after a mullion is added inside one pane of a multi-pane sash (for example a multi-slide door), or a horizontal mullion is moved there, ask whether to do the same in the other panes. ON by default; OFF keeps each change in its one pane without asking.

Egress (emergency-escape minimums)

Field Meaning
egressWM / egressWI Minimum clear opening width — metric (mm/100) / imperial (64ths).
egressHM / egressHI Minimum clear opening height — metric / imperial.
egressM / egressI Minimum clear opening area — metric / imperial.

NFRC energy-rating derivation

Field Meaning
useGridFamilyForNFRC Derive NFRC ratings using the grid family.
useSpacerFamilyForNFRC Derive NFRC ratings using the spacer family.
useOpeningClassForNFRC Derive NFRC ratings using the opening class/type family.
userGlassNFRCCodeForNFRC Derive NFRC ratings using the glass product NFRC code.

Numbering & email

Field Meaning
nextorder / nextquote / nextinvoice / nextship / nextproject / nextcredit / nexttemplate Next number to assign for each document type; auto-incremented after each is created.
smtpServer / smtpPort / smtpssl Outgoing mail host / port (rec. 587) / security mode (0=none, 1=STARTTLS, 2=SSL/TLS).
popServer / popPort Incoming mail host / port.
activeSyncMail / timeSyncMail Background email sync on/off / interval in minutes (0=disabled).

Scheduling — how long production takes

These live on the separate Scheduling Preferences screen (not the main Company
Preferences tabs), under the Scheduling rules group.

Field Meaning
use_std_prod_lt
Use a standard production lead time
OFF (default) — the production duration is worked out from real capacity: OpenJanela adds up the Mfg. Capacity lines on the item’s bill of materials and spends them against each station’s daily capacity, one working day at a time, until the work fits. However many days that takes is the production time.
ON — that calculation is skipped and production simply takes a fixed number of days, taken from Min Days to Manufacture on the production line.
forward_sched Whether dates are worked out forwards from the start of the process or backwards from the delivery date. With the standard lead time ON, backward gives production start = production finish − N days and forward gives production finish = production start + N days.
When to turn it on
Use a standard lead time when your capacity is not the thing that limits you — you can always
find the hours, and a job takes about the same number of days regardless of how much is on the
floor. Quoting a dependable “x working days to build” is then both simpler and more honest than
a capacity calculation whose inputs nobody maintains. Leave it off if you genuinely
schedule against a bottleneck and want busy periods to push dates out.
Where the number of days comes from
Setup → Production Lines → Min Days to Manufacture, on each line. There is no
separate “standard lead time” field — this one is reused.

  • If an order runs across several production lines, the longest of their
    Min Days to Manufacture values is used. The slowest line governs the build.
  • If no line on the order has a value set, OpenJanela falls back to the capacity
    calculation rather than treating production as taking no time at all. So turning the switch
    on and forgetting to fill the field in cannot silently collapse your dates — but it also
    means nothing appears to change until you set it.
Min Days to Manufacture changes meaning when this is on.
Normally it is a floor: production is never scheduled shorter than this, but a heavily
loaded line can take longer, and the floor is only applied when scheduling forwards. With
Use a standard production lead time ON it stops being a minimum and becomes the
duration itself, in both scheduling directions. Set it to the number of days a job should
actually take, not to a lower bound.
Checking what happened
Every date decision is recorded in the order’s lead-time trace. A line reading
LT-PRODLINE-STD means the standard lead time was used and shows how many days;
LT-PRODLINE-CAPACITY means the dates came from the capacity calculation. If you
expected the standard lead time and see the capacity line instead, the usual cause is Min Days
to Manufacture still being 0 on every line the order touches.

Production Status Board — Large Glass thresholds

Three fields, curated in the Scheduling group of the reflection-driven Preferences
tab, set when a glass pane counts as Large on the
Production Status Board‘s Large Glass column:

Field Meaning
largeGlassWeightKg A pane heavier than this, in kilograms, is Large. Weight comes from the glass BOM line’s weight (kg per piece — the sealed-unit type’s weight per m² × area), whatever unit the item was ordered in.
largeGlassWidthMm A pane wider than this, in millimetres, is Large.
largeGlassHeightMm A pane taller than this, in millimetres, is Large.
Any one limit, not all three
A pane is Large when it is over any of the three limits — weight OR width OR height, not
all of them together. A limit left at 0 is ignored; with all three at 0, nothing counts
as Large.