How Can We Help?
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:
- AI Assistant (text) — the in-app chatbot.
- Vision (images) — used when the chatbot is sent an image and the primary
text provider can’t natively read it. - 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:
- Sign in at console.anthropic.com and make sure the organization has billing
set up. - Go to Settings → API Keys and click Create Key. Copy the value
(it starts withsk-ant-) immediately — it is shown only once. - 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.
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.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, thenre-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_ltUse 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. |
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.
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.
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.
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 youexpected 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. |
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.