Below are the general rules for building formulas in the SchemeServe Document area (Template Editor / endorsement wording / display logic). This is the “same thing” as the rating-file rules, but tailored to how documents actually evaluate fields, formatting, and HTML/CSS.
General rules for SchemeServe document formulas
1) Know the three “contexts” you can write formulas in
Document logic usually appears in one of these places:
-
Inline token formulas wrapped in
## ... ##
Used to print values or run calculations directly in the document body. -
Display/hide logic inside HTML/CSS, typically:
style="display:##IF(...,'','none')##"
Used to show/hide paragraphs, table rows, divs, etc. -
Non-
##DisplayIf blocks (used when text formatting must be preserved):<DisplayIf Formula="..."> ... </DisplayIf>
Especially useful for multi-paragraph textbox content that collapses into one line when pulled via ##...##.
2) Inline formulas must be wrapped in ##
If you want the system to evaluate the expression and print the output, you must wrap it:
3) Use square brackets for field references
All dynamic fields are referenced using [ ... ].
Common examples:[Record.Type], [Record.Status], [Record.CreatedDate][Policy.InceptionDate], [Policy.OriginalInceptionDate][Client.ClientId], [Agent.AccountRef][QuestionID_Value], [QuestionID_Cover], [QuestionID_DateValue]
4) Use the correct suffix (_Value, _Cover, _DateValue, _ResultBefore)
Same idea as rating files, but with some doc-specific gotchas:
Suffix/Modifier
| _Cover | Numeric/Money - e.g. the amount entered in a Calculation question |
| _Value | Text - e.g. the answer Yes/No |
| _Fee | Numeric/Money - e.g. the Fee you've set some rows above in your rating file |
| _Result |
Numeric/Money - e.g. the result of your total Premium 'TotalPremium_Result' i.e the obtained result of a % applied to £XX Sum Insured |
| _DateValue | Date |
| _CoverBefore | Pull through the previous record´s answer on a calculation question |
| _Rate | Numeric/Money - e.g. the Rate you've set some rows above in your rating file |
5) Text needs quotes; numbers don’t
Text comparisons: "Yes", "Renewal", “On Cover”
Numeric comparisons: 0, 1000, 30.5
6) Dates: formatting and comparisons use different techniques
A) Comparing against a fixed date
Use hash-wrapped dates:##IF([Policy.InceptionDate] >= #2021-07-12#,1','0')##
B) Printing a date in a specific format
Use .ToString(...):##[Policy.InceptionDate].ToString("dd MMMM yyyy")##
C) Adding/subtracting time
Use .AddYears(), .AddDays(), etc.:##[CompletionDate_DateValue].AddYears(10).ToString("dd MMMM yyyy")##
7) Converting numbers into readable formats (currency, decimals, percentages)
You’ll commonly format numeric outputs using .ToString(...):
Currency (no decimals):##[PLIndemnity_Cover].ToString("C0")##
Currency (2 decimals):##[BasicPremium_Result].ToString("C2")##
Number with 1 decimal:##(([TotalCommission_IndexLevel0_Result]/[TotalPremiumNet_Result])*100).ToString("N1")## %
8) Show/hide content using display:##IF(...)##
This is the standard pattern:<tr style="display:##IF([Record.Type]='Renewal','','none')##">
How it works:
IF true → return '' (blank) → normal display
IF false → return 'none' → hidden
9) Multi-field “one line address” pattern: build strings safely
When concatenating fields, protect optional lines by checking if they contain real text:
10) Tables and MP: know when you need row indexing or GroupBy
To pull a specific row:##[Table_Name_Row#0_Value]##
For MultiPage (MP) documents, use [GroupBy ...] ... [/GroupBy] and MP fields like:##[MP_RowNumber]## (inside groupby)##[MP_SystemID_Cover]## (combined totals outside groupby, with limitations)
11) Keep document formulas readable and maintainable
Best practice in templates:
Keep formula blocks short and repeatable
Prefer hidden fields in rating when the doc logic becomes complex (docs are for presentation)
Use consistent patterns for display toggles ('' vs 'none')

