Calculations and BOM formulas
The Calculations section has three pages, plus the per item type Quantity tab inside the product catalog. To reach the Calculations pages, open Configuration in the app's left navigation; they are grouped under Calculations in the sidebar.
How the engine fits together
- The customer answers Storefront Questions (mount type, manufacturer, panel count, and so on).
- Solvera computes Calculated Values from those answers (total panels, row length, number of attachments, and many more).
- Each item type's Quantity formula uses those values to decide how many to include.
- Match criteria decide which specific product is chosen for each item type.
You can adjust any of these layers.
Storefront Questions Growth+
Open Calculations > Storefront Questions.
This page is a reference and override center for the inputs that come from your storefront questions (the questions themselves are managed elsewhere - see Where storefront questions are created below). It is organized by module tabs (Racking, Inverters, BOS, and any custom modules), and each tab shows two groups:
- System Inputs: the built in values that storefront questions feed, such as total panels, span, and mount type. Each one is shown as a card with its key, description, and default value or formula. You can add an override to any numeric input (described below) so the value changes under specific conditions. The choice questions (Inverter Type, Battery Backup, Phase Type, Rapid Shutdown, Monitoring System, BOS component selection) take no override; to force one of those answers for a class of customers, hide the question with a Show when rule and set its Value when hidden.
- Custom Inputs: a read only list of the custom variables that come from your own storefront questions, showing each one's label, key, type, and scope, plus the Conditional badge and hidden value of any question that has a Show when rule. These are created elsewhere (see Where storefront questions are created below), so the list here is for reference, with an Edit link back to the owning page.
A Test Calculator lets you enter sample values and see how every input and calculated value resolves. It runs the same calculation as the storefront, including your overrides: it picks real inverter products from your catalog, marks values that came from an override with a ⚡, and greys out an input once an override has taken it over ("Set by an override for these inputs"). Its panel inputs include Voc (V) and Min T (°F), and on a string inverter system a String Inverter (DC strings) block shows the cold Voc, the panels per string and the string count that follow from them; see String sizing.
Overrides
An override changes a built in input or calculated value under a condition you define. For example, you might force a different value when a particular mount type or manufacturer is selected. Click + Add Override on a card, build the condition on the When row, then give the formula or fixed value to use when it holds. Overrides are optional. Without one, the value uses its default.
The When row is the same condition editor as a visibility rule: several conditions joined by "and", "is one of" on choice questions, chips such as "Mount Type = Carport", and Always when there is no condition. It can use any answer up to and including the inverters step, your own questions from those steps, and the calculated values that already exist when the card is computed (a racking card is never offered an inverter value). Mount Type offers your custom racking sub-modules next to the built in mount types.
One difference from a visibility rule, on purpose: a rule whose condition cannot be decided yet (the customer has not reached that question) shows its item; an override whose condition cannot be decided yet does not apply until it can. The storefront re-evaluates every override on every answer, so it applies the moment the condition can be decided. The modal says the same thing under the row: "All conditions must hold. While a condition cannot be decided yet (a question the customer has not reached), the override does not apply."
Overrides apply on the storefront and in the Test Calculator, and they propagate downstream, never upstream: overriding Attachment Span changes the attachments per row and everything counted from them, while overriding Microinverter Quantity moves the microinverter line and nothing before it. Two cards carry a note because their override changes the shape of the calculation: overriding Total Rows or Panels Per Row "replaces the drawn rows with uniform rows for calculation; the layout editor still shows what the customer drew". Total Panels, rails, clamps, attachments, the System Overview count and inverter sizing all follow the overridden shape. Overriding Total Panels changes the panel count and what is sized from it, never the rows.
Where storefront questions are created
The questions themselves live in two places, not on this page:
- Built in questions (mount type, manufacturer, roof type, and so on) are part of the engine. You do not create them, but you can change their wording, order, visibility, and images using content editing in Preview Professional, and their choices come from the products and properties in your catalog. On this page's Inverters tab you can also hide a built in question under a condition with Show when; see Visibility rules. Growth+
- Custom questions are created on a module's own product catalog page, on its Storefront Questions tab. The Racking, Inverters and BOS pages each have this tab, as does every custom module and every custom racking sub-module. Solar Panels is the exception and has no Storefront Questions tab. Type the question as the customer will read it, choose its type (number, text, yes/no, a choice from a list, or an image choice), and add the options. Solvera derives a short name for the formula palette and a key ("Used in formulas as num_carports") from the question text; both can be changed under Advanced, and the key is fixed once saved. A preview shows the question as the customer will see it. It then appears in the configurator and shows up as a Custom Input on this page. Growth+
Conditional questions and notes
Under Visibility, the question modal has a Show when row: click + Add Condition, pick an earlier question, an operator and a value, and the condition appears as a chip, for example "Mount Type = Ground". Add more conditions and all of them must hold; choice questions also offer "is one of". The modal restates the rule under the storefront preview ("Shown when Mount Type = Ground") so you can check it reads the way you meant. Only answers from earlier in the wizard, and from earlier in the same step, can be used, so a condition can never depend on a question the customer has not reached yet. Once a condition exists, a Value when hidden control sets the answer the configurator uses while the question is hidden. The same tab also lets you add a note (plain, info, or warning) that appears in the step, under the same kind of condition. The full behaviour is on the Visibility rules page.
This works on the built in modules, not just custom ones. To ask a Racking question that only some systems need, add it on the Racking page's Storefront Questions tab and give it a condition. A question only pitched roofs need is "Mount Type = Pitched Roof"; the three built in mount types are Pitched Roof, Flat Roof and Ground Mount, and any custom racking sub-module of yours is offered next to them. Conditions can also use the follow up questions, so a question can be narrowed further with "Pitched Roof Type = Metal Roof" or "Flat Roof Subtype = Ballasted".
A number question also has Number settings for its default, and an optional minimum and maximum.
A question that is still in use cannot be deleted. Clicking delete opens a dialog that lists every use grouped by kind (Products (match criteria), Formulas and rule conditions, Calculated value overrides, Visibility rules) so you can remove them first. When nothing blocks it, the delete is queued in the page's save bar: the question is removed when you save, and Discard brings it back.
A condition on a custom question decides whether that one question is asked, and it comes with the question: it needs no plan beyond whatever the question itself needs. To hide a whole item type or product group under a condition (so it drops out of the storefront and the bill of materials together), or to hide a built in question, use a visibility rule on that item type, group or question instead; those require Growth or above. See Visibility rules.
Calculated Values Growth+
Open Calculations > Calculated Values.
Solvera includes a large library of built in calculation variables, such as total panels, row length, number of attachments, pier count, microinverter quantity, and panels per DC string. These are the values your quantity formulas use.
Each variable shows its default formula. You can override any variable's formula using the chip based expression editor, where variables appear as colored, atomic tokens and you insert them from a palette. Every override applies on the storefront, in the quote and in the Test Calculator, under the condition you give it; see Overrides for how conditions and propagation work. Panel Wattage and System Size (kW) are cards here too, and Number of Arrays (a Storefront Questions input) can be overridden as well. A real time test calculator panel lets you plug in sample inputs and see the result immediately.
String sizing on string inverter systems
On a string inverter system the number of DC strings decides how many string fuses, combiners and connectors a quote carries, so it is worth knowing how it is worked out. Two cards on the Inverters tab do it, in the String Inverters group:
- Inverter Max Input Voltage (V) is read from the selected string inverter's Max Input Voltage property. It sets how many panels fit in series on one string.
- Panels per DC String is the inverter's max input voltage divided by the panel's Voc corrected to the site's minimum temperature (the customer's Minimum Temperature answer), rounded down. The correction uses the panel's Voc temperature coefficient; a panel without one uses -0.3 %/°C.
The DC String Count is then the total number of panels divided by Panels per DC String, rounded up. If the inverter has no Max Input Voltage or the panel has no Voc, Solvera falls back to one string per MPPT input and the Test Calculator says so ("Fallback: one string per MPPT input"). To change how strings are counted, override Panels per DC String; DC String Count itself has no override.
Each inverter path has its own count, and a formula should use the one for its path:
- MI Branch Circuits: microinverter systems only. The number of AC trunk cable branches the microinverters are packed into. It can be overridden, and it drives the MI cable footage, combiner and connector counts.
- DC String Count: string and optimizer systems only. The series strings described above.
- String Inverter Units: string and optimizer systems only. How many string inverter units the quote carries. Microinverter systems use Microinverter Quantity instead.
Off its own path a count has no value, so a formula that names it is not used there; it is never read as 0. Older formulas may still show String Count (either path) or Inverter Units (either path): those are the earlier names, which give the branch count (or the microinverter quantity) on a microinverter system and the string count (or unit count) otherwise. They keep working exactly as before. The default formulas that apply to one path only were moved to that path's count, and the numbers do not change. A formula with no inverter type condition keeps the either path name, because it runs on both kinds of system.
Because one product property now drives the count, the Inverters page checks it for you. Above a String Inverters table with a doubtful value it shows a banner headed "Check Max Input Voltage on N string inverters." and names each row: no value at all (strings fall back to one per MPPT input, so the balance of system is under-quoted), a value at or below the inverter's Min MPPT Voltage, or a value under 150 V (both put one panel per string and over-quote it). Take the PV input voltage from the datasheet; a figure that low is usually a battery-side value or a typo.
Custom Variables Growth+
Open Calculations > Custom Variables.
Create your own variables: a name, a key and a formula. Solvera calculates each one for every system the customer configures, and you can then use it in any quantity formula and any accessory quantity, on every item type and every catalog page; it appears in the formula palette under Custom Variables. Use one to capture business specific logic once, for example the usable length of a carport frame, and reuse it in every formula that needs it.
A custom variable's formula can use the customer's answers, the Calculated Values (including the panel and inverter values) and other custom variables. It has one value per system, so two kinds of value are not allowed: per row values (Panels in Row, Row Length, Attachments per Row, Rail Pieces per Row) and Total Piers, which is counted while the bill of materials is built. Saving a formula that uses one of them is refused with a message saying why. A key cannot repeat the key of a built in variable or of one of your storefront questions, and two custom variables cannot depend on each other in a loop.
While an input is not known yet (the customer has not reached that question, or has not picked an inverter), the variable has no value and formulas that use it wait, the same way they wait for an unanswered question. If the formula cannot be calculated at all (a division by zero, or a name that no longer exists), the line that uses it is left out and Preview lists the problem under BOM integrity issues: "Custom variable "Usable Length" could not be calculated", followed by the reason. In Preview, Explain BOM shows the value a line used, for example "Usable Length = 520 (custom variable)", and the Test Calculator lists every custom variable with its value.
A custom variable reaches your storefront and Sales Mode when you next Publish; Preview uses it at once. A variable that a formula, an accessory, an override or another custom variable still uses cannot be deleted: the delete is refused with the list of places to change first.
Formula values are in feet and inches on every store, whatever measurement system the store uses: Row Length is in feet, Panel Width in inches, Attachment Span in feet. The labels say so. On a Metric store you enter lengths in mm and m in the product tables, the settings and the Test Calculator, and Solvera converts them, so the formula still sees feet and inches; the formula pages show the note "Formulas calculate in feet and inches. Numbers you type in a formula are feet and inches, even on a metric store." Temperatures are the one exception the customer sees: the storefront asks for them in °C on a metric store and Solvera converts the answer.
BOM Quantity formulas (per item type)
Each item type has a Quantity tab inside its product card (in the Racking, Inverters, BOS, or custom module pages). This is where you control how many of that item are added to the BOM.
Formula rules
An item type can have one or more formula rules. Rules are evaluated top to bottom and the first matching rule wins. A default rule with no condition acts as the fallback. A rule you add goes to the end of the list.
Built in item types come with rules the app wrote. Once you change one of those rules' condition or any formula setting, including a Fixed Qty value, ↺ Reset to default appears at the right of the rule's header. Reset puts back the app's condition and formula and leaves the item type's match criteria alone. It goes to the save bar like any other edit, so Discard undoes it. Reset is not offered on rules you added or on the built in Ground Mount item types, and a rule of the app's that you deleted cannot be brought back this way.
The available formula types cover real solar quantity logic:
- Fixed quantity: a constant number.
- Custom expression: any formula using calculated values and variables.
- Per row: computed for each panel row.
- Per attachment: computed per roof attachment point.
- Ratio: one item per N of something.
- Rail optimization: optimizes rail cuts to minimize waste, cost, or piece count.
- Pier count: ground mount pier quantity from spacing tables.
- Microinverter string packing: accurate microinverter count from the panel layout.
- Gender aware connector: automatic pair, male, or female resolution for MC4 connectors.
A custom expression can use a number from the product it quotes. On a built in item type the formula palette offers that item type's numeric product properties. MI Raw Cable, for example, ships with ceil(totalFeetNeeded / spool_length_ft), the cable footage divided by the spool length. The value comes from the product the rule picks, the first matching product in table order, so when products differ only in length (spools, say) their order in the table decides which length is used. A calculated value or a customer's answer with the same name takes precedence over the product property. Explain BOM marks such an input "(from the matched product)". This change reaches customers at your next Publish.
A formula that names something that is not a variable leaves its item out of the quote, and Solvera says so. The Quantity tab checks a saved formula when it opens and shows, for example, ""spool_len" is not a variable - this item is left out of every quote until the formula is fixed". In Preview, the BOM integrity issues banner lists the same item: "MI Raw Cable left out: its formula uses "spool_len", which is not a variable." A storefront question the customer has not answered yet is not an error.
Look up a variable
Click any variable chip in a formula (on a Quantity tab, in an accessory quantity, in an override or in a custom variable) to open a small panel about it. It shows the variable's name and key, what it means, its unit, and where its value comes from: a Calculated Value with its default formula, the customer's answer to a storefront question, a property of the product the line quotes, one of your custom variables with its formula, or a value the configurator calculates itself, which cannot be changed. When the value can be changed, a link opens the card where you change it, scrolled into view and highlighted. Press Escape or click elsewhere to close the panel. Each variable has one name everywhere it appears: in the palette, in a formula and on its card.
The cards on the Calculated Values, Storefront Questions and Custom Variables pages work the other way round: each ends with a Used in line listing every quantity formula, rule condition, accessory, override and custom variable that uses it, each a link to where it is edited, or "Not used in any formula".
Conditional rules
Add conditions to a rule so it only applies in certain cases. For example, one rule can apply only when the mount type is Flat Roof and another can cover every other system. Conditions reference variables and use simple comparisons. Built in variables such as mount type, roof type, manufacturer, or attachment style offer a dropdown of the values in your catalog, so a typo cannot create a rule that never fires; numeric variables take a number. Your own storefront questions appear in the variable list under Custom Storefront Questions, limited to questions asked at or before that module's step.
Per manufacturer overrides
Different suppliers package and count parts differently. You can override a formula for a specific manufacturer without changing the default. You can also:
- Exclude an item type for a manufacturer who does not sell it (an N/A flag).
- Force a property value for a specific manufacturer.
A manufacturer override replaces the quantity formula only. If the base rule has a condition, the override inherits it (shown read-only above the formula) and cannot carry a condition of its own. On a Ground Mount card, the built in ground item types show "Applies to <architecture> cards only (set by the card's Architecture Family)" instead, and their formula stays editable.
On a manufacturer card (Ballasted, Tilt Legs, Ground Mount), ↺ Reset to default on the Quantity tab appears once the card has its own formula. It removes that formula, so the card follows the item type's default rule again. When a manufacturer has several product lines, the override, the N/A flags and the forced values belong to one line, and the Quantity tab names it: "Applies to IronRidge · Line 2 only. IronRidge · Line 1 has its own."
Pack sizes
If a product has a quantity per pack property, the default formula automatically buys whole packs (rounding up), so customers are quoted realistic order quantities.
Match Criteria Editor
For each item type you choose which customer selections participate in matching the right product. For example, rails might match on manufacturer, profile, and color, while a grounding kit matches on manufacturer only. Your own storefront questions can be match criteria too: tick one and a matching column appears in the product table (a Yes/No column for a checkbox question, a number column for a numeric one). A question is available to the module it belongs to and to modules later in the wizard.
You also set the Product selection mode per item type, on the item type's Settings tab:
- Auto-select: Solvera picks the product automatically based on the customer's earlier answers.
- Customer picks: the customer sees a product grid and chooses, and their choice flows into the BOM.
Built in solar engineering
Several calculations are built into the engine and require no setup beyond adding the right product properties:
- Rail cut optimization: chooses rail lengths to minimize waste, cost, or piece count, with a preferred rail length tiebreaker.
- Microinverter string packing: computes microinverter counts from the actual panel layout, including mid row transitions.
- Wire gauge auto selection: selects PV wire gauge from the panel current using a code compliant ampacity calculation.
- MC4 connector resolution: automatically chooses a pair, or splits into male and female line items.
- Temperature corrected voltage filtering: filters microinverters for cold weather voltage compliance.
- Pier spacing tables: ground mount pier spacing from built in engineering data based on pipe size, wind speed, and snow load.
These give you accurate, professional quotes without building the logic yourself.
Recommended approach
- Launch with the defaults.
- Run a few real configurations and compare the BOM to what you would quote manually.
- Adjust only the item types where your products or suppliers differ from the defaults.
- Use per manufacturer overrides for supplier specific differences instead of changing the global default.