---
title: Document Template Object Reference
description: "Some of the SolarNexus template variables described in the Available Variables list on the template editor screen are objects that contain sub-properties. Covers Date, Examples, User, Solution Element (aka \"Services\")."
---

[Skip to content](https://help.gosolo.io/solarnexus/document-template-object-reference#main-content)

English

Show submenu for translations

[![Solarnexus logo-1](https://help.gosolo.io/hs-fs/hubfs/Solarnexus%20logo-1.png?width=350&height=71&name=Solarnexus%20logo-1.png)](https://app.solarnexus.com/)

Open main navigation

Close main navigation

- English
  
  Show submenu for translations

 How can we help you?

- There are no suggestions because the search field is empty.

1. [SolarNexus Help Center](https://help.gosolo.io/solarnexus?hsLang=en)
2. [Documents: Templates and DocuSign](https://help.gosolo.io/solarnexus/documents-templates-and-docusign?hsLang=en)

January 16, 2026

# Document Template Object Reference

## Many Doc Template Variables are objects with sub-properties that can be output. These objects and sub-properties are described here.

Some of the SolarNexus template variables described in the Available Variables list on the template editor screen are objects that contain sub-properties. For example, the *salesperson* variable is a *User* object with properties corresponding to the project sales owner's name, phone, email, etc.

This article describes each type of SolarNexus template object and the properties it contains.

To output an object-type variable in a template, use the syntax {{object.property}}. For example, to output the sales owner's full name, write {{salesperson.full\_name}}.

**Types of Objects include:**

- Date
- Milestone
- User
- Solution Element
- Item
- Finance Option
- PV Array
- PV Inverter

### Date

This type of object is used to report dates and times of events defined in SolarNexus. Events are scheduled milestones or subtasks.

The properties on a Date object include:

- start\_at, with the following sub-properties: 
    - raw
    - full\_date
    - short\_date
    - day\_of\_week
    - day\_of\_month
    - ordinal\_day\_of\_month
    - year
    - time
    - full\_date\_with\_time
- completed\_at (has same set of sub-properties as start\_at above)
- has\_duration
- duration\_hours
- duration\_minutes

#### Examples:

**scheduled milestones**

For milestones, use the name of the milestone "before completion" as the object's name. So for example, if your scheduled milestone is "Sales Appointment," you would use "sales\_appointment" as the object. If you wanted to provide the scheduled start date and time of the Sales Appointment in a paragraph in your template, that could be:

```
{{sales_appointment.start_at.short_date}} at {{sales_appointment.start_at.time}}
```

 

**scheduled subtasks**

For subtask events defined in a given milestone's definition, you may refer to that predefined subtask using the milestone's name and including that subtask's index (first subtask's index = 0). So let's say you have an milestone called "Install Work" with a scheduled subtask called "Start PV Install" listed second in the defined subtasks (index=1).

```
{{install_work.subtask(1).start_at.short_date}} at {{install_work.subtask(1).start_at.time}}
```

 

**"scheduled"** object- This is a special instance of a Date object that refers to the most recently scheduled milestone OR subtask, rather than a named milestone or subtask. When scheduling an event (milestone or subtask) in the SolarNexus UI, the user may check a box to send out a notification email to the customer using a selected Email template. This feature is handy when the job process does not have formal milestone for scheduling a future milestone When used, the scheduled object will fill in the information about the milestone or subtask that the user is scheduling at that time.

- scheduled.name
- scheduled.name\_before\_completion (not available for subtasks)
- scheduled.name\_after\_completion (not available for subtasks)
- scheduled.owner and scheduled.owner\_or\_salesperson (User objects): 
    - scheduled.owner.full\_name
    - scheduled.owner.first\_name
    - scheduled.owner.last\_name
    - scheduled.owner.title
    - scheduled.owner.phone
    - scheduled.owner.email
- scheduled.start\_at (Date object): 
    - scheduled.start\_at.raw
    - scheduled.start\_at.full\_date\_with\_time

- - scheduled.start\_at.full\_date
    - scheduled.start\_at.short\_date
    - scheduled.start\_at.day\_of\_week
    - scheduled.start\_at.ordinal\_day\_of\_month
    - scheduled.start\_at.year
    - scheduled.start\_at.time
- scheduled.has\_duration
- scheduled.duration\_hours
- scheduled.duration\_minutes

The scheduled object may also be used with specific milestones and predefined subtasks by using the milestone name and subtask index. The following shows an example using a milestone named "Schedule and Install PV System" with 2 pre-defined subtasks: a) "schedule install" (index=0), and b) "PV Install-Day 1" (index=1). The email template may use the following for notification of the scheduled start time for the "PV Install-Day 1" event:

- schedule\_and\_install\_pv\_ystem.subtasks(1).start\_at.raw
- schedule\_and\_install\_pv\_system.subtasks(1).start\_at.full\_date\_with\_time
- schedule\_and\_install\_pv\_system.subtasks(1).start\_at.full\_date
- schedule\_and\_install\_pv\_system.subtasks(1).start\_at.short\_date
- schedule\_and\_install\_pv\_system.subtasks(1).start\_at.day\_of\_week
- schedule\_and\_install\_pv\_system.subtasks(1).start\_at.ordinal\_day\_of\_month
- schedule\_and\_install\_pv\_system.subtasks(1).start\_at.year
- schedule\_and\_install\_pv\_system.subtasks(1).start\_at.time

 

### User

Set of properties for any User type of object. These include project roles (owner\_or\_salesperson, project\_manager, etc), as well as assigned event task owner (e.g. see "scheduled" Date event above). Properties include:

- full\_name, e.g. {{owner\_or\_salesperson.full\_name}}
- first\_name
- last\_name
- title
- phone
- email

### Solution Element (aka "Services")

The user interface refers to Services, but the associated template variables use the term "solution\_elements." Solution\_elements is an array of solution\_element objects containing all solution elements, regardless of type, **ordered by user-specified position**. Each solution\_element object has:

- type - The top level categories of elements. Its a predefined enumeration of these values: PV System, Storage System, Efficiency Measure, and General Service
- subtype - This is known as the "Service Type" in the SolarNexus UI. It is a set of Admin defined values
- name - This is the user provided name for any "General Element" or "Efficiency Measure" type element. PV and storage element types are auto-named "PV System" and "Storage System"
- description - the short description of the scope of work for this solution element.
- items - items is an array of product items in the solution\_element, each with: 
    - type (REMOVED)
    - category - This is the Company Catalog's product category
    - sub-category - This is the subcategory within the Company Catalog where the product resides. Note that some Catalog categories do note have subcategories.
    - provider - In case of materials/products, this is the manufacturer. But items can also represent services or labor, so provider covers both.
    - model\_name - Product model number, or the name of the service/labor item.
    - quantity
    - img\_url - outputs the url for the first image associated with the item (i.e. a product in the Company Catalog can have an image uploaded).
- cost object properties, a solution\_element's cost object includes: 
    - subtotal
    - adjusted\_subtotal
    - preliminary\_contract\_price
    - unit\_price
    - cost\_item\_groups. Each cost item **group object** has: 
          - sub\_total\_price
          - name
          - description
          - optional cost\_items (if enabled for the group). Each cost item object has: 
                  - provider
                  - model\_name
                  - variation
                  - quantity
                  - unit
                  - cost
- plus any other properties specific to the element type
- EE element-specific values: 
    - electric\_savings\_annual
    - electric\_savings\_annual\_percent
    - non-electric\_savings\_annual
    - non-electric\_savings\_annual\_percent

We also provide the following objects that define specific solution elements, or subsets of solution elements:

- Existing ee\_measures object variable becomes a subset of solution\_elements of type "Efficiency Measure."
- general\_solution\_elements is subset of solution\_elements of type "General Service"
- pv\_solution\_element object only includes properties of the one and only one PV system element (type = "PV System")
- storage\_solution\_element object only includes properties of the one and only one storage system element (type = "Storage System")

Object name is solution\_element. Also have special specific solution\_elements: pv\_solution\_element and storage\_solution\_element. There is a collection (solution\_elements) that you can loop through. And special solution\_element collections that are a subset of elements: ee\_measures, and general\_solution\_elements.

 

### **Item**

Object is named item, an object within a solution\_element. (for item in solution\_element.items)

 

### **Finance Option**

Object is named fin\_opt. An analysis can generate an array of up to 3 finance option objects. There is a collection (fin\_opts) that you can loop through.

 

### **PV Array**

Used in the pv\_arrays array variable.

 

### **PV Inverter**

Used in the pv\_inverters array variable

 

### Using Objects in Liquid Directives

**Object Indices**

The objects in a collection have an index from 0, 1, 2 (first, second, third position)

It’s OK to reference an indexed object in a conditional directive {% %}, but not in a simple evaluation {{ }}. For example, You can do this:

{% assign [loan\_one.name](http://loan_one.name?hsLang=en) = fin\_opt\_loans\[0\].name %}   
loan 1: {{loan\_one.name}}

But not this:

loan 1: {{fin\_opt\_loans\[0\].name}}

Due to the way the template is parsed during evaluation, you can’t reference a non-existent array index inside {{ }}, even if that is enclosed within an {% if %} that would prevent it from being evaluated. I think it parses all the expressions in {{ }} prior to evaluating the conditionals, and in the process of parsing an expression involving an array, it tries to access the referenced index, which is where it’s failing.

Assigning fin\_opt\_loans\[0\] to fin\_opt\_pre allows it to work because it’s ok to reference object properties inside of {{ }} even if that object might not exist. When initially parsing that expression, it doesn’t check if the object exists.

- [Application Overview](https://help.gosolo.io/solarnexus/application-overview?hsLang=en)
- [Tips and Tricks](https://help.gosolo.io/solarnexus/tips-and-tricks?hsLang=en)
- [Integrating SolarNexus with Other Applications](https://help.gosolo.io/solarnexus/integrating-solarnexus-with-other-applications?hsLang=en)
- [Incentives and Finance Programs](https://help.gosolo.io/solarnexus/incentives-and-finance-programs?hsLang=en)
- [Documents: Templates and DocuSign](https://help.gosolo.io/solarnexus/documents-templates-and-docusign?hsLang=en)
- [Shared Company Resources](https://help.gosolo.io/solarnexus/shared-company-resources?hsLang=en)
- [Reporting](https://help.gosolo.io/solarnexus/reporting?hsLang=en)
- [Project Data](https://help.gosolo.io/solarnexus/project-data?hsLang=en)
- [Resources](https://help.gosolo.io/solarnexus/resources?hsLang=en#main-content)

    - [Products and Catalogs](https://help.gosolo.io/solarnexus/resources?hsLang=en#products-and-catalogs)
    - [Service Offerings, Pricing, & Solution](https://help.gosolo.io/solarnexus/resources?hsLang=en#service-offerings-pricing-solution)
- [Project Milestones and Workflow Management](https://help.gosolo.io/solarnexus/project-milestones-and-workflow-management?hsLang=en)
- [Account and User Management](https://help.gosolo.io/solarnexus/account-and-user-management?hsLang=en)
- [Managing Sold Projects](https://help.gosolo.io/solarnexus/managing-sold-projects?hsLang=en)
- [Energy and Financial Analysis](https://help.gosolo.io/solarnexus/energy-and-financial-analysis?hsLang=en)
- [PV Systems, Energy Storage, and Efficiency Measure](https://help.gosolo.io/solarnexus/pv-systems-energy-storage-and-efficiency-measure?hsLang=en)
- [Manage Sales Opportunities](https://help.gosolo.io/solarnexus/manage-sales-opportunities?hsLang=en)
- [Create and Manage Jobs (Projects and Work Orders)](https://help.gosolo.io/solarnexus/create-and-manage-jobs-projects-and-work-orders?hsLang=en)
- [Misc](https://help.gosolo.io/solarnexus/misc?hsLang=en)
- [User Account Maintenance](https://help.gosolo.io/solarnexus/user-account-maintenance?hsLang=en)
- [Utility Bills](https://help.gosolo.io/solarnexus/utility-bills?hsLang=en)
- [Managing Company Catalog](https://help.gosolo.io/solarnexus/managing-company-catalog?hsLang=en)
- [Managing Projects](https://help.gosolo.io/solarnexus/managing-projects?hsLang=en)
- [Financial Analysis](https://help.gosolo.io/solarnexus/financial-analysis?hsLang=en)
- [PV System Design and Production Estimates](https://help.gosolo.io/solarnexus/pv-system-design-and-production-estimates?hsLang=en)
- [Video - Webinars and Tutorials](https://help.gosolo.io/solarnexus/video-webinars-and-tutorials?hsLang=en)
- [Update Notes](https://help.gosolo.io/solarnexus/update-notes?hsLang=en)
- [Contact Support](https://help.gosolo.io/solarnexus/contact-support?hsLang=en)

[![Untitled Drawing (1)](https://help.gosolo.io/hs-fs/hubfs/Untitled%20Drawing%20(1).png?width=250&height=97&name=Untitled%20Drawing%20(1).png "Untitled Drawing (1)")](http://www.gosolo.io)

Copyright © 2026, Solo