Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
A questionnaire ("Q&A") is an optional, additional layer on top of an existing document or binder.
The document or binder will then be transferred to a new questionnaire, and this questionnaire will be opened in the Design Q&A mode. You will notice that the main menu at the top of the screen will change accordingly.
Within Design Q&A, you will see the main toolbar at the top of the screen:
These four buttons allow you to switch between the three main contexts of the Design Q&A Mode: the File Manager Context, the Options Context, the Editing Context and the Simulation Context.
Save the current questionnaire. If the questionnaire was not yet saved before, the main context will be switched to the File Manager Context.
Switch the language of the questionnaire.
Make invisible text in the underlying document visible or invisible.
(only visible in the editing context) Determine how many different panes are visible in the Editing Context, as further explained below
Reload the underlying document or binder. This button should only be used when some changes made by you or some other user, are not yet reflected in the preview.
(only visible in the editing context) Undo or redo
In the Editing Context, you can choose between having a single, two or three different “panes” visible on the screen. Each of these panes can show one of the following types of contents, as determined by the blue button in the upper left corner of the screen:
Cards
for creating and editing “cards” with groups of questions
Changes
for creating and editing changes to the underlying Document or Binder, typically in reaction to the answers given by the user
Cond. & options
edit conditions and options of a selected card, question or charge
Batch create
allows you to quickly create “cards” in batch, on the basis of the datafields in the underlying document or binder
Import cards/changes
allows you to copy cards and changes between different questionnaires
Edit clauses
allows you to change the contents of a clause selected in the document/binder preview pane
Base document/binder
previews the (unmodified) underlying document or binder
Test cards
previews the cards you created through the cardspane
Test document
previews the changes to the underlying document or binder
Repository
allows you to centrally define links to files used in the questionnaire, conditions used in multiple situations and custom programming functions
Notes
provides you with a notepad in which you can write internal comments about the questionnaire, for your colleages or your future self
Checks
shows a panel that performs sanity checks on the structure of your questionnaire
Dependencies
shows which items depend on a selected card/questionnaire
External data input
allows you to specify how external data can be dropped onto the questionnaire (e.g., data stored in an Excel-file)
Test external data input
allows you to test the import of external data
A typical setup is to use two panes: at the left side the document/binder preview pane, and at the right side the cards or changes pane. This allows you to scroll through the underlying document or binder, while tweaking the cards or changes at the right side.
When a questionnaire becomes more complicated, it could become interesting to use three panes at once. Three panes will then be shown side-by-side. Of course, this can only work comfortably when your monitor is sufficiently wide — you'll not enjoy this on a 13-inch laptop screen!
It is even possible to show the same pane twice (or even in triple). For example, in the screenshot below the Cards pane is shown at both the left and the right side. This can for example be useful when you are editing a card that is somewhat similar to another card in the questionnaire, and you want to be able to inspect the second card while editing the first card.
In order to create a questionnaire, you therefore first need to open a saved document or binder, click on the menu at the right side of the screen, and choose the Send to Q&A command.
Clause9 offers two different modes to create legal documents. Typically you will first start in the document assembly mode (Assemble Document menu), where you will either start from scratch or from an existing template, interactively stacking and swapping building blocks, changing data and changing legal terminology to arrive at a new document.
The second mode (the Q&A mode) builds on the document created in the first mode, and presents a list of interactive questions to users. Using the answers given by the users, the underlying document is then interactively filled and modified where necessary.
Due to the deliberate constraints imposed by the questions & answers, interactive templates built using the Q&A mode can allow anyone — even users completely unfamiliar with the legal domain — to quickly create a document in an environment that offers legal guidance through user-friendly questions & answers.
While the Q&A mode and the document assembly mode are separate modes, they are strongly connected with each other.
As explained above, you build a questionnaire on top of a document created earlier in the document assembly mode. However, the other way around is also possible: you can send a document created in the Q&A mode to the document assembly mode.
For example, once a business user has provided answers, legal experts can also transfer the filled-in template back to the document assembly mode, to apply further customisations that were not allowed in the constrained Q&A mode.
The document or binder will then be transferred to a new questionnaire, and this questionnaire will be opened in the Design Q&A mode. You will notice that the main menu at the top of the screen will change accordingly.
The questionnaire's document will then be transferred to the Assemble document mode, where you can change it however you like. Or even send that modified document once again to the Design Q&A mode to create a new questionnaire.
Clause9 is an advanced legal document drafting platform designed to improve the contract drafting process. Clause9 rests on three pillars:
Improving your organisation’s contract drafting knowledge management by centrally storing intelligent clauses and templates in a library.
Increasing contract drafting efficiency by quickly stacking intelligent clauses on top of each other while Clause9 takes care of all the clean-up work.
Outsourcing contract creation via template questionnaires.
When you start working with Clause9, you first need to upload clauses to the platform. You can do this individually per clause, or by importing them from a Microsoft Word document. At that stage, you can choose the desired level of intelligence you wish to add to the clauses. Examples include:
Creating defined terminology and setting up cross-references via concepts
Indicating variable fields of information
Adding conditions
Introducing grammatical flexibility
And much more!
There are three levels to Clause9 clause libraries:
an organisation-wide library that is accessible to every user of the customer’s company / law firm, even if some users may not have editing rights
a group-based library for, for example, different departments or cross-departmental practice groups that can only be seen and accessed by members of the group
a private library that is only accessible to an individual user
Deciding how to structure your clause libraries and where to put your clauses is a strategy that will have to be decided at administrator-level. The following is a list of important questions that need to be asked at the outset in that regard:
Who will have the responsibility to vet clauses that enter the organisation-wide library or group-wide library?
Who will be given which access rights? Can everyone access and edit? Or are editing rights limited to a group of more experienced users?
It is important to assign the proper roles to the right people so that the entire organisation is aligned on how to use Clause9.
In order to create a questionnaire, you therefore first need to open a saved document or binder, click on the menu at the right side of the screen, and choose the Send to Q&A command.
When you have completed a questionnaire and saved its answers, you can click on the menu at the right side and choose Open as editable document.
If this is your first time working with Clause9, we suggest you head over to the where you can find the tutorials specifically tailored to the user profile your organisation has chosen for you.
Is it your intention to make certain clauses available and usable across the entire organisation? Or will you be creating separate silos for different departments? (See also the ).
We offer a library of sample clauses that illustrate how the various features of Clause9 can be used.
Access to this library is protected. You can access it by:
Navigating to Assemble document.
Clicking on the Help menu.
Clicking on Clause samples.
And finally clicking on the hyperlink that appears at the bottom of the screen.
An important factor is how to shape the content of your clauses. This consideration essentially comes down to the question whether you will primarily use the Q&A mode or the Assemble Document mode for the document.
If you are primarily using Q&A mode to highly automate several key documents that are used by business users, it is generally good practice to provide a high level of intelligence for individual clauses in the form of clause- and text enabling conditions so that you can switch between alternative clauses and sentences at the click of a button. Since the focus for your organisation is more on the (business) users using your questionnaires, only the advanced users maintaining and updating the clauses need to be able to interact with the clauses “under the hood”.
If the emphasis of your organisation’s use of Clause9 is on Assemble Document mode, then you should focus on creating and structuring clauses in a way that they are very easy to interact with. This means limiting the amount of interactions you can do with a given clause, as normal users will typically assume that, when inserting a clause, what they see is what they get. You may also want to prioritise assignment of attributes more than you would under the Q&A approach, as more users are working with the individual clauses.
For example: say you want to create two alternatives of a pricing clause: one needs to just show the price of the product, the other needs to state that the price is listed in an annex to the contract.
The text of the clause listing the price could be:
The text of the clause referring to the pricing annex could then be:
With the Q&A-focused approach, you would want to put the two sentences in the same clause, separated by a condition that triggers one sentence or the other. Without going into too much detail on the Clause9 grammar just yet, conceptually, that could look something like this:
If the answer to the question “where is the product price listed?” equals “contract”, show the following sentence: The Product shall be priced at [insert price here]. If the answer to the question “where is the product price listed?” equals “annex”, show the following sentence: The price for the Product shall be as established in the price list as attached to this Contract.
In the Assemble Document-focused approach, you would want to make two separate clauses and link them together as alternatives using the “links” functionality that each clause has. This allows users to quickly switch between available alternatives at the click of a button.
if nothing is selected, the new item will be inserted at the end of the document
if a clause is selected, then:
the new item will be inserted below the currently selected clause
if Shift is held the new item will be inserted as the last sub-clause of the selected clause
if Alt is held (Option on Mac) the new item will be inserted above the currently selected clause
You can deselect a clause by either clicking the space between two clauses, or by clicking above the first or below the last clause.
Definition list
Inserts a new definition list clause into the document.
Note that nothing will stop you from inserting multiple definition lists into a single document. Please let us know if you would be aware of a use case for such multiplicity of definition lists inside a single document.
New ad-hoc clause
Inserts an ad-hoc clause into the document, i.e. a clause that is not intended to be reused outside the document in which it is contained.
New library clause
Inserts a new library clause, i.e. a clause intended to be reused in multiple documents.
Existing library clause
Allows you to select an existing library clause to insert into the document
Removes all the selected clauses from the document.
Note that this action will not delete the (library) clauses themselves from the library. The only exception is when an ad hoc clause is removed from a document. This will effectively delete the ad hoc clause itself as well because it does not exist as a separate clause in the library.
These buttons cut, copy and paste the selected clause from Clause9's clipboard from/into the current document.
In Clause9, you can only increase the level of a clause if some other clause precedes it, which can then become an ancestor clause. In Microsoft Word, you can increase the indentation level of any paragraph.
In Microsoft Word, increasing the indent inherently causes the left margin to increase. In Clause9, it will depend on the document styling whether or not the left margin will increase. In other words, please be aware that if styling applies that does not increase the left margin between paragraph levels, increasing or decreasing the clause level will not cause any visual differences.
You can, however, check whether a clause is a descendant of some other clause, by selecting the presumed ancestor clause — selecting a clause in Clause9 will automatically select descendant clauses as well.
Moves the selected clauses above or below their neighbours.
Shows / hides the clause’s numbering.
Shows / hides the clause’s title.
Allows you to export the document to an MS Word file (DOCX), PDF file, text on the clipboard (copy), or email. There are many options you can configure.
This recalculates the already-available content. This may sometimes become necessary when some updates are not immediately reflected, although generally this is not needed. Please contact us when you notice that you repetitively need to press this button in order to reflect certain changes, because using this option should be fairly exceptional.
The shortcut for recalculating contents is Shift-Ctrl-E.
Recalculate contents does not work the same way as reload contents (available in the Visibility settings & actions menu).
Reload contents re-fetches the entire document, and all its clauses, from the server, and then recalculates the entire document. This is roughly similar to closing the document and re-opening it again. This should only be used on rare occasions, e.g. when you know that a colleague has changed a clause in his/her own browser, and you want to fetch those changes.
Recalculate contents does not load any contents from the server, and merely recalculates the already available content.
See the dedicated article on the menu with visibility settings and actions. This menu is opened by clicking the button in the top right hand corner.
This allows you to, for example, create a definition list in every subdocument of the binder, whereby each definition list will only contain the terms that are unique for the subdocument it is situated in. You can even create a separate subdocument that would then aggregate all the definitions, across all of the sub-documents that themselves also contain their own definition lists.
These buttons may look somewhat similar to the “increase indent” and “decrease indent” buttons in Microsoft Word , but there are quite some differences:
Clause9 provides many options when exporting documents, available from the Document Toolbar:
Clause9 currently supports the following export formats:
DOCX
Exports to a Microsoft Word (DOCX) file
Exports to Portable Document Format (PDF)
Copy to clipboard
Copies the text on your computer’s clipboard, so you can paste it in other software Depending on the browser you are using and the software you are pasting the software in, this may result in some formatting (particularly line indents) getting lost. If you require strong layout fidelity, please do not use this copy operation: instead export to MS Word and copy/paste from within MS Word.
Email attachment
Embeds the document as an attachment (either DOCX or PDF) of an email If you are using Windows, Clause9 actually exports towards a .MSG email file intended for consumption by Microsoft Outlook (and some email programs as well). On other operating systems, Clause9 exports to a .EML file, which can be read by many different email programs.
It is possible that exporting a document as an email attachment is not possible in your orgnanisation’s network due to security settings. Please contact your administrator if you are having problems exporting a document in this manner.
ClauseBase allows you to export a multi-language document into two or more columns.
The typical use case is a situation where one of the parties to a contract does not understand the main language of the contract — for example in an employment context with a foreign employee, or in situations where for regulatory reasons a contract needs to have a different language than the parties’ language.
You can export multiple languages by checking one or two additional languages besides the currently active language. Optionally, you can then also configure:
When borders is checked, borders will be inserted in between the columns.
When landscape rotation is checked, the page will always be rotated towards landscape, irrespective of the current page style settings. In most cases, this will be preferred for legibility reasons.
In exceptional cases — typically the signature boxes — you may want to export a specific clause in a single language only, instead of being printed in two different columns. If such is desired, then select the clause in question and under advanced check don’t translate in multi-language output. (If you are the clause author and would like this single-output to be the default, then check the identically named option under the clause’s custom styling). In the example below, you can see that the signature table is only printed once (with the employee’s signature at the left side and the employer’s signature at the right side). After all, if this document would actually get signed, then it would make little sense to have a cramped, two-column table at the left side and an identically cramped table at the right side.
If this option is selected, all legal comments will be printed in the document, through MS Word’s comments functionality.
The document should be saved at least once before this option will be visible.
This setting configures whether any changes vis-à-vis the original template should be shown in the output.
export with no changes is the default: no changes will be visible at all
export with changes will export a single file, with changes visible through MS Word’s markup feature (track changes)
export with changes & without changes will export two files (combined in a ZIP file): one with no changes visible (aka the “clean version”), and another with the changes visible
export with changes in PDF & version without changes will also export two files (combined a ZIP) file, but will force the version with changes to always be outputted as PDF. This option will be equal to the previous option when you would choose PDF as the output format, i.e. when you would press the button.
This setting allows you to define whether the outputted MS Word file should receive some sort of protection.
Do not apply protection in .docx is the default: anyone can edit the file, without restrictions, and without any change tracking
Do not allow changes: will not allow any changes to be made to the MS Word file without the password
Allow only comments: only allows comments to be made (no other types of edits) without the password
Only allow completing forms: allows you to protect a document, with the exception of certain forms that can still be filled out. This functionality is enabled through the use of the textbox special functions
Enforce tracking of changes: allows all edit operations to be made, but will always track those changes (i.e., without the password, it will not be possible for the receiver of the file to turn off track changes in MS Word)
A clause hierarchy is a file type that contains a set of clauses in a fixed structure. Clause hierarchies can come in handy when you want one clause with its different levels of subclauses to be available in your clause library as one set. Users can then insert the hierarchy with one single click instead of having to find each individual clause and inserting each one separately.
Except for the special locking & unlocking mechanisms described below, a clause hierarchy acts like any regular set of clauses when it comes to numbering, cross-references, layout, and so on.
Clause hierarchies can even be nested within other clause hierarchies, any level deep. They can therefore constitute an interesting alternative to using subdocuments, e.g. because subdocuments inherently start on a new page and restart their numbering by default (except if Restart numbering is turned off in the page styling).
The end result is that you created a library clause (or, rather, a hierarchy of clauses) and that your current selection will be replaced by a reference to that library clause.
Within Browse files, you can see that hierarchies have a special icon, to indicate that they're actually a stack of clauses bundled together.
After inserting the hierarchy in a document, it will be easily recognisable as a clause hierarchy by the frame surrounding the hierarchy and the lock symbol.
The frame around the hierarchy can be clicked to select the clause hierarchy. When selected, the clause hierarchy can be moved in its entirety using the arrow buttons in the document toolbar. Make sure you have actually selected the entire hierarchy and not just the parent clause inside the hierarchy.
Clause hierarchies – when first inserted – are locked. The fact that the hierarchy is “locked” means the structure of the hierarchy cannot be changed. That means the relative positions of the clauses part of the hierarchy cannot be changed. While changes can still be made to the content and other properties of any library clause, ad hoc clauses cannot be changed. This is due to the fact that the ad hoc clause is tied to the hierarchy itself, while a library clause exists independent of the hierarchy.
After unlocking, ad hoc clauses can be edited and the structure of the clauses inside the hierarchy can be freely changed.
You can edit an existing clause hierarchy as follows:
First unlock the hierarchy by clicking on the lock-icon.
Make relevant changes to the structure (e.g., by adding/removing clauses, changing their order or indentation etc.).
Select the top-clause again.
You will notice that the hierarchy gets its lock-icon again after the save.
Note that Clause9 will not automatically update existing instances of the clause hierarchies in currently opened documents. You will therefore have to close & reopen documents and Q&As that make use of the clause hierarchy that was updated.
Clause9 offers a special mode — called “Focus Mode” — that optimizes your workflow for dealing with a complex clause in Assemble Document.
Tip: when you hold down Shift when clicking the button, you will immediately go to the Raw Submode instead of the Preview Submode (see below for an explanation).
You will notice that the the focus-button will get highlighted, and that several other tools will become unavailable on the screen.
Preview Submode shows you a preview of your clause, similar to what you normally see at the left side in Assemble Document.
Raw Submode shows an alternative version of the “raw” content of your clause, roughly similar to what you normally see in the editor at the right side, but with a few changes optimized to deal with complex clauses.
Even better is that you can play what-if scenarios by temporarily changing the datafields. Any change you make here, will be lost when you exit focus mode. This means that you assign new values, remove values, etc. to see the impact on your clause, without “really” changing the datafields.
As is the case with the datafields, any changes you make are merely temporarily. Once you leave Focus Mode, your concept-labels will return to their previous state.
Preview Submode displays how your clause will look like, similar to how it is typically displayed at the left side when using Assemble Document in Normal (non-focus) Mode.
Compared to Normal Mode, however, the Preview Submode will display changes to your clause a few milliseconds after you made them at the right side — no need to save your clause! This level of interactivity allows you to really “play” with complex clauses without any delays at all.
In Raw Submode, the “raw” contents of your clause will be shown at the left side.
At first sight, this Submode may seem to offer almost no advantages over what you see on the right side. However, read on to see why the first impression is wrong.
Raw Submode offers you the ability to “trace” parts of your raw clause, so you quickly know which parts are disabled.
In the screenshot above, you will note that some parts are displayed much lighter than others — those parts are currently disabled due to certain conditions not being met.
For example, in the screenshot above, you can immediately see in the third line that the word transferable is disabled. When you then click on any of these words, you get the following explanation:
Another reason to use the Raw Submode, is that it offers an “integrated” view of your raw clause.
For example, have a look at the sample clause below:
the left side shows the “final” version, with all snippets being integrated into a coherent text
the right side shows the editor, in which the external snippet #object-of-the-license and internal snippet ALPHA are visible, but not “integrated”.
The Raw Submode offers you an integrated view of the raw text, that allows you to understand how Clause9 “sees” your text when combining everything:
You can see that both snippets (surrounded by a subtle grey border) are fully expanded, so you can check whether this was indeed the integration result you were looking for. This will be particularly interesting when dealing with placeholders, where things can quickly get so complex that you lose track of the clause:
When creating complex clauses that contain internal or external snippets, it can often help to isolate a particular snippet. You can do so by clicking on the isolation buttons that will appear automatically when you are using the preview mode, and a clause contains at least one internal or external snippet:
Full (normal view):
Isolated view:
Besides merely removing distractions, the snippet isolation mode also allows you to understand how the software interprets a particular snippet. Have a look at the following examples, and notice how the software shows you at the left side that the result of a certain snippet is a number, date, condition, text snippet, etc.
This information can be particularly useful when you do not understand why a certain snippet does not “behave” correctly. For example, the software interprets the following snippet ALPHA
as an “expression” of 5 augmented by 4, i.e. the number 9. Accordingly, you could use this result for further calculations, as shown in the second screenshot:
When placeholders are used in isolation mode, you can temporarily assign a value to those placeholders by clicking the green button:
Due to technical limitations in modern browsers, it's not possible to activate the spell check mode everywhere. However, we have activated the browser's spell check within the Focus mode.
When you click within the clause's preview field, you will see the typical red underlining in potentially misspelled words.
When you click on the options button in the toolbar, you see a host of options that configure how your document will be exported. Note that not all options apply in all situations.
A clause hierarchy can be created by selecting a clause in the Assemble Document mode that has at least one clause as its “child” – i.e. at least one subclause. Click the button in the Document Toolbar and select Hierarchy of clauses > Save hierarchy as separate library clause. Choose the location where you want to save the hierarchy and give it an appropriate file name.
Clause hierarchies can be inserted in a document in the same way normal clauses are, i.e. by going to the Search pane or Browse pane and inserting it by clicking . When selecting the hierarchy in the browse pane, a user can also choose to only add one clause that is part of the hierarchy.
To show that it is locked, a clause hierarchy will contain a lock symbol on the frame surrounding it. To unlock the clause hierarchy, click the lock symbol itself: .
Click on the button in the Document Toolbar and select Hierarchy of clauses > Save updated clause hierarchy
Focus Mode can be activated by selecting a single clause and clicking on the button in the main toolbar. Alternatively, you can select a clause and hit the Ctrl-Shift-O shortcut.
Focus Mode offers two different sub-modes, that have different purposes: Preview Submode and Raw Submode. You can switch between both modes by clicking on the button in the Focus Mode toolbar. Both modes are discussed in great detail below:
In both Preview Submode and Raw Submode, the bottom left side will show an overview of all the datafields that are somehow used in the current clause — no need to go to the Data Dashboard. You can toggle the visibility of these datafields by clicking on the button in the Focus Mode toolbar.
Similar to simulating the impact of datafields, Focus Mode also allows you to simulate the impact of different concept labels, through the small pane at the right side. You can toggle the visibility of this pane by clicking on the button int he Focus Mode toolbar.
You can click on a concept-label to change its contents (using the familiar concept-label editor). If you want to experiment with the single and plural version of an existing concept-label, you can even avoid the concept-label editor by clicking on any of the buttons at the left side of a concept-label.
In this case, it is obvious that the reason why this part of the clause got disabled. In other situations, however, this is much less clear. In such cases, it can help to click on the button to get a detailed explanation in a popup balloon.
When you isolate a particular snippet, only that snippet will be shown in the preview at the left side, removing any distractions from the other parts of the clause. You can leave the isolation mode by either clicking again on the currently active (i.e., blue-colored) isolation button, or by clicking on the button at the right of the isolation bar.
When you have saved your clause or made significant changes, it may sometimes be necessary to “refresh” your Focus Mode environment. You can do achieve this either by closing Focus Mode and re-opening it, or by clicking on the refresh button in the toolbar .
Clause9 allows you to generate a large amount of documents based on a single intelligent template created in either Assemble Document or Q&A mode.
To do so, you can request Clause9 to generate an Excel sheet containing all the questions (or, if in Assemble Documents, the datafields) present in the document template. Each row in that Excel sheet represents a separate document being generated.
Be aware that, even though Excel certainly provides an easy way to quickly fill out large amounts of information, it is a fairly primitive way to complete forms — as anyone who had to fill in administrative forms in Excel would know. Generating documents in Clause9's Q&A within a browser should be preferred whenever possible, because there are dozens of facilities offered in this browser mode that Excel simply cannot match.
By way of example: it is notoriously difficult to enter multiple lines in an Excel cell. Make sure to read the guidance below to see how to effectively fill out this information so that Clause9 can interpret it.
To download this Excel sheet directly from Clause9, open the document you want to bulk generate and navigate to the datafields menu. From there, click “bulk” on the right-hand side of the screen and then click “Excel with datafields for bulk generation”.
This will trigger the download of an Excel sheet. Once you have filled the Excel sheet out with all the necessary information, click “Excel to generate document in bulk” to upload it to Clause9 and receive a ZIP file containing the separate documents in the format (PDF or DOCX) of your choice.
In Q&A mode, a Bulk export button will be visible in the rightmost button of the export dropdown button in the toolbar.
When you choose Bulk export, the following dialog box will be presented:
In this dialog box, you can download the Excel file. Once completed, you can then re-upload it, either by clicking on or dragging over the Choose file button. (The Choose file button may look different in each browser.)
When you create the Excel sheet, you will see that Clause9 alphabetically orders the information that needs to be filled out based on (1) the alphabetical order of the concepts to which the individual datafields belong and (2) the order of the datafields in each concept.
You are free to play around with this structure — e.g. assign different fonts or colors —, provided you follow the ground rules below:
You can remove row 1 containing the concept (or card) to which the questions or datafields belong.
Row 2 (containing the question titles or datafield names) should however always be present, either as the first or as the second row. You are allowed to rephrase it — however, for currency-based datafields, the cell should somewhere mention the currency between parentheses (e.g., “(EUR)” or “(USD)”).
You will notice in the screenshot that row 3 is hidden. That row should not be removed or altered, as it contains the internal datafield number, that will be used by the software to match input with each datafield.
You can change the order of the columns in any way you like (the datafields of a concept should not necessarily stay together, as they are matched on the basis of the hidden datafield number in hidden row 3).
You can include a second Excel worksheet in the document explaining how the information should be filled out. However, the first worksheet should always contain the datafields themselves, so make sure any additional information is included in the second or subsequent worksheet.
You can remove certain columns (i.e.: datafields) if you do not want them to be filled out. This will cause that information to simply be omitted from the final documents, but does not prevent the documents from being generated.
You can add comments to a cell to assist users in filling out the Excel sheet. These will have no effect on the final output from Clause9.
You can add an optional filename in the very last column (coloured in black & white); if such filename is not included, a default one (using an incrementing number) will be added by the software . Do not add the filename extension (.PDF or .DOCX), because that extension will be automatically generated.
For text, number and currency fields/questions, the software will present the user the predefined values at the bottom of row 2 in the Excel file. (For example, in the screenshot above, predefined values Belgian, Dutch and French are mentioned in column A.)
If no predefines are defined at the level of the question (or if the export is done from Assemble Document), the predefined values of the datafield within the concepts will be taken.
Datafield type
How to fill out cells containing this datafield
Text
A simple text value should be included here.
Note that if this text datafield is used to enable or disable conditional text, you should inform your users of the selection of values that should be filled out here. The predefined values for this datafield are a good place to start.
True/false
The word “true”/”yes” or “false”/”no” (its capitalisation does not matter) should be filled out here. Note that this is language-sensitive so that you may also fill the equivalent in your own language out. (However, English is always accepted.) For example:
French: “vrai”/”oui” or “faux”/”non” Dutch: “juist”/”ja” or “fout”/”nee” German: “wahr”/”ja” or “falsch”/”nein” Lithuanian: “teisingai”/”taip” or “neteisingai”/”ne”
Number
A number should be filled here. For example: “3” (but not “three”).
Date
A date can be filled out here in any (Excel-legible) format you prefer. For example: “1 October 2021” or “2021-10-01”. Excel will automatically configure the appropriate date notation format based on your input.
Duration
Here you should fill out a number along with the duration value of your choice. For example: 3 months, 5 years, etc. Note that this is language-sensitive so that you may also fill the equivalent in your own language out.
As a reminder, Clause9 uses 5 duration values to choose from: years, quarters, months, weeks, and days.
Floating point number
A number with any amount of numbers after the comma can be filled out here. Excel will automatically configure the appropriate notation format based on your input.
Currency
A number should be filled out here. You can can configure the cell settings directly in Excel to choose the currency you would like to apply (e.g. USD, EUR, GBP, etc.)
List of texts
A simple text value should be included here. Note that you can fill out multiple text values (as is the nature of the list of texts datafield) by separating each answer with a line break (using Alt + Enter (Windows) or Cmd + Enter (Mac)).
Repeating list
Not supported (ignored).
Tip: you can “promote” the Bulk export button, so that it is shown more prominently in the Q&A toolbar. You can do so by setting the Global Placeholder “Promote Bulk Export” button to true
. Example:
In the file pane of the Assemble Document operations panel, you can save the document you are making in a location of your choosing, or save a new copy of a document that was already saved elsewhere.
This pane will only be visible if you are editing a clause (or e.g. a concept) inside the Assemble Document mode, for example after creating a new library or ad hoc clause or after having double clicked an existing clause in the document.
In this tab, you can edit a clause or concept the same way you would in the Browse Files mode.
This page describes how to insert images in the body text of a document, through the special grammar of Clause9.
You can upload .PNG or .JPG image files, but also .PDF files. The image files can be directly inserted as part of the header or footer of the page styling. The PDF files can be used for different purposes (including pages before/after the main content, inserting graphics-heavy headers/footers, including watermaks, etc). This is not further discussed here.
Images are just another type of file that you can create in the file system, similar to how clauses, documents, binders and concepts are also files.
Give the image a descriptive File name.
Perform the actual upload under the Upload tab. Both .PNG and .JPG file types are accepted.
You can insert the image in a clause by use the @image(file)
special function, optionally complemented by one or more optional additional parameters.
The file-parameter is one of the following
a hashtag and a reference to the image-file, similar to how you would refer to a #concept (i.e., the software will invite you to specify which file you are actually referring to)
a URL (enclosed in single or double quotes)
a text datafield containing a URL (e.g., #corporate-logo^url)
a text datafield containing the image data itself, uploaded through an “image” question in the Q&A
The optional parameters can be one of the following:
maximum width/height
maximum width/height, border-width and color
width, height
width, height, border-width and color
To be used as follows:
the maximum width, width, height and border width can be expressed in centimeters (“cm”), millimeters (“mm”), inches (“i), points (“pt”) or pixels (“px”). If no unit type is specified, then pixels will be assumed
the maximum width/height refers to one measurement, which will be used to determine either the maximum width (if the image is wider than high) or the maximum height (if the image is higher than wide)
for example, a 10cm x 5cm image will be scaled down to 6cm x 3cm when using @image(#some-file, 6cm)
the color should be expressed in the so-called “hex” format, a set of six characters — many software programs and color pickers will show you this format when selecting a color, alternatively you can use a website such as www.color-hex.com or www.w3schools.com/colors/colors_picker.asp
alternatively, you can also use one of the following human-readable colors: black, grey, gray, white, salmon, red, pink, orange, gold, yellow, lavender, violet, fuchsia, purple, green, olive, teal, cyan, blue, navy, brown or maroon
don’t forget to enclose the color in quotes!
@image(#cb-logo)
@image(#cb-logo, 3cm)
@image(#cb-logo, 280px, 160px)
@image(#cb-logo, 3cm, 4pt, "black")
@image(#cb-logo, 3cm, 4pt, "#ff6666")
The right part of the Assemble Document mode (next to the document preview on the left) is the operations panel. In this panel, you can edit and further customize the document. This article contains a short explanation of each of the tabs of the operations panel.
Under the file tab, you can save the document you are making in a location of your choosing, or save a copy of a document that was already saved elsewhere.
This tab will only be visible if you are editing a clause (or e.g. a concept) inside the Assemble Document mode, for example after creating a new library or ad hoc clause or after having double clicked an existing clause in the document.
In this tab, you can edit a clause or concept the same way you would in the Browse Files mode.
The document title will only be visible if you are editing a document and not a binder. Refer to Binder below for information on the binder tab.
Under the document tab, you can edit various properties of the document itself.
The binder tab will only be visible if you are editing a binder and not a document. Refer to Document above for information on the document tab.
Please refer to the article on the binder pane for more information.
In the search tab, you can look for a clause based on its title or contents. The results can be filtered based on attributes, the location of the clause or any links the clauses contain.
The “browse” tab works in much the same way as the Browse Files page does. The main differences are that:
you can add a clause directly to your document
you cannot create, edit or move files when in the Assemble Document mode (you can create new folders, however)
In the Terms pane, you will be shown an overview of all concepts used in the active document.
You can click on each term to change the concept label tied to that concept. Additionally, you can change the definitions of each concept.
Under the Datafields pane (also called the Data dashboard), you get an overview of all datafields used in the active document.
In the styling pane, the custom styling of the document (not any selected clause) can be adapted or removed. Please refer to the styling pane for more information.
The advanced pane is only visible when a clause is selected. It allows you to specify the layout of specific instances of a clause, and to configure other advanced options relating to clauses.
In the mirror pane, you can see another view of the active document or binder. In addition, the top slider enables you to hide certain levels of the document hierarchy. Setting it to “1” will only show the top level clauses. “2” will also show the first level of subclauses, “3” the next level, etc.
This feature can provide you with a handy higher level overview of the document or binder you are editing.
Under the document tab, you can edit various properties of the document itself.
Clause9 can automatically generate a table of contents in the exported document. You can choose how many levels such table of contents has…
… and also indicate where the TOC should be inserted:
Clicking the Properties button
will open the document’s properties as a separate item under the edit tab. Here, you can adjust the file name, description, category, attributes, links, conditions for enabling the document (for use in binders), legal comments, custom styling (which is the same as editing the document’s styling under the styling tab) and access rights.
Mapping is a feature that gives you more flexibility in using clauses and makes clauses more re-usable. Specifically, document mapping is used to re-map entire concepts or specific datafields used in an entire document to other concepts or datafields in that document.
For example, suppose we are making a commercial agency agreement with two parties: the principal and the agent. The document contains three concepts: principal, agent and agreement.
Let’s say we need a governing law clause. This clause is already available in our library, but specifically made for a share purchase agreement. The clause makes use of the concepts “buyer” and “seller”:
This will result in the following text: “The Buyer and the Seller agree that this Agreement will be governed by Belgian law.”
Using mapping, we can ensure that in this document only, the concepts buyer and seller are replaced by principal and agent by mapping from buyer to principal and from seller to agent as follows:
Click the Mapping button.
You will see this:
If a concept that is mapped to another concept contains a datafield that the other concept does not have, that datafield will remain visible under the old concept in the data dashboard.
Mapping datafields works in exactly the same way, but only maps a specific datafield to another.
Instead of the “document” button in the operations panel, binders will replace this with a “binder” button, which looks like this when opening a new, empty binder:
In this menu, you can insert new or existing documents, rearrange their order and provide them with short titles for easy referencing (e.g.: “Annex 1” or “Pricing Schedule”).
Uploading an existing document lets you choose a document from your library to insert into the binder. Inserting a new document occurs in exactly the same way as you would create a new document outside the context of a binder. When you insert an existing document into a binder, you are essentially creating a copy of that document that communicates with the original document but does not communicate back to it. For example: if you switch the order of a few clauses in the original document, those changes will be reflected in the binder. If you do the same in the binder, those changes will not be reflected in the original document. For important adjustments to be made to the base document, it is therefore recommended to do this outside the context of the binder.
However, if you would eventually want to re-use this document either as an independent standalone document or as an existing document in another binder, you can save the document as an independent document by clicking the relevant option here:
As usual, numbering can easily get quite complex within legal documents, due to a mix of inherent complexity and limitations in MS Word. The numbering of subdocuments is no different, but Clause9 offers multiple approaches to cope with situations.
In what follows, we go deliberately quite deep into this subject, so you can completely understand what's going on, and also know how to maintain the resulting DOCX files after they have been generated by Clause9.
Essentially, when creating a cross-reference, MS Word requires you to either target an automatically numbered paragraph, or to target some bookmark. Both approaches have advantages and disadvantages
Bookmarks around title paragraphs have the advantage that they're more flexible. They have the disadvantage that it takes more knowledge and time to assign such bookmark to document titles once you're maintaining your MS Word file after it was generated by Clause9. Bookmarks also have the disadvantage that you have to create two separate bookmarks in MS Word (one around the number of the document title, one around its body text) when you want to sometimes refer to just the number of the document's title, and sometimes to both the number and the text of the document's title.
Automatically numbered paragraphs can be created using MS Word styles that are assigned to title paragraphs. This approach works well when the automatic numbering system is not too difficult — which may not always be the case, e.g. when Annexes & Schedules have complex or strange numbering requirements for historical reasons. They have the advantage of being easy to assign in MS Word to document title paragraphs.
Clause9's approach is designed around the possibilities of MS Word for cross-references of automatically numbered titles. By default, Clause9 uses the bookmarking system. The automatic numbering system is an optional setting that can be activated, as described below.
Let's take a simple example and use it to explain the different options that are available, as well as the rationale behind Clause9's title/numbering approach.
Suppose we have a simple binder with three subdocuments: a main body and two annexes.
Clause9 will automatically create bookmarks around each of the three subdocument titles. You can see these bookmarks when going to the Bookmarks option in the Insert tabsheet of the MS Word ribbon. (The bookmark names are deducted from the crosstags or the short/long titles assigned to a subdocument in the binder configuration, but MS Word constrains which characters can be used inside of the bookmark names.)
Inside of MS Word, you can create a cross-reference to a bookmark by going to the Reference tabsheet of the MS Word ribbon, clicking on Cross-reference and then choosing "Bookmark" in the upper-left corner of the dialog box that appears.
Inside of this dialog box, you can then choose the relevant target subdocument and hit the Insert button at the bottom of the dialog box. This will insert a clickable cross-reference to the target subdocument; in its default configuration, MS Word displays such cross-references in light grey on the screen.
When you would change the wording of the title of the subdocument, the cross-reference will automatically change when you update the cross-references (e.g., by printing the document, or by selecting everything and then hitting either F9 on your keyboard or right-clicking and choosing Update Field).
In the example above, the numbers of the subdocuments were hardcoded, i.e. the author typed in the 1 in "Annex 1 - Pricing" and the 2 in "Annex 2 - Technical configuration".
This is fine when the numbering of your subdocuments is known in advance. However, Clause9 can also automatically assign numbers to subdocuments. You can do so by inserting curly braces within the Full title / Short title of subdocuments in the binder configuration.
Clause9 will then automatically assign a number to each subdocument — e.g., skipping the number of a subdocument that happens to be disabled due to some condition not being met.
Within the curly braces, you can insert up to two special numbers — either the number "1", or the capital roman letter "I", or the capital letter "A". In addition, you can add any other characters or symbols you would wish, e.g. a period or parenthesis. This way, you can add multiple types of subdocuments, with up to two levels of completely automatically generated numbers. For example, you could create the following configuration:
Annex {1} - Pricing in general
Annex {1.1} - Hardware pricing
Annex {1.1} - Software pricing
Schedule {A} - Technical details
Schedule {A} - Contact details
Schedule {A.1} - Emergency contacts
Annex {1} - Security
This will create the following subdocument titles:
Annex 1 - Pricing in general
Annex 1.1 - Hardware pricing
Annex 1.2 - Software pricing
Schedule A - Technical details
Schedule B - Contact details
Schedule B.1 - Emergency contacts
Annex 2 - Security
Another example:
Annex {(1)} - Pricing
Schedule {1°,1} - Hardware pricing
Form {#A} - Contact details
Form {#A} - Emergency contacts
Docket {"I"} - Security configuration
Docket {"I"} - Security requirements
Subdocket {I.A} - Security requirements for Windows
Subdocket {I.A} - Security requirements for Mac
will result in:
Annex (1) - Pricing
Schedule 1°,1 - Hardware pricing
Form #A - Contact details
Form #B - Emergency contacts
Docket "I" - Security configuration
Docket "II" - Security requirements
Subdocket II.A - Security requirements for Windows
Subdocket II.B - Security requirements for Mac
The downside of the bookmark-based cross-referencing approach is that the entire text of the target paragraph — e.g., Annex 1 - Pricing — will always be inserted as such in the cross-reference.
This is probably OK with short titles such as "Pricing", but may be less desirable when the subdocument's title is long — e.g., Schedule 23 - Technical configuration of the customer's custom configuration — because this entire title will get repeated every time you insert a cross-reference towards the subdocument. Many legal professionals will instead want to refer to subdocuments by only their number — e.g. "Annex 1" or "Schedule 23".
Unfortunately, there is no possibility in MS Word to create a cross-reference with a caption that differs from the target paragraph. This is also the reason why the sample binder we created above, will contain plain text for short cross-references:
If you would instead switch to long cross-references, the DOCX file will include bookmark-based cross-references, because such is technically possible with MS Word:
Using its default settings, Clause9 will only create bookmark-based cross-references towards subdocument titles when you are using the full-title cross-references (or when the full title happens to be identical to the short title). When, instead, the full title and short title would differ from each other and you are inserting short-title cross-references to a subdocument, plain text will be inserted in the DOCX-file.
The underlying reason is that the bookmark-based approach would simply not work in the DOCX-file for short-title cross-references, as the target paragraph (i.e., the subdocument title) would contain different text. If you don't like this setting, you should enable the automatically numbered Word-styles for subdocument titles, as explained in the next section.
Clause9 offers another solution: automatically numbered subdocument title paragraphs.
You can activate this through the checkbox Use automatically numbered Word-styles for subdocument titles, situated below the subdocuments in the Binder:
When you activate this mode, Clause9 will use custom subdocument MS Word title styles with automatically assigned numbers (i.e. with curly braces) in the generated DOCX file. It will create such a style for each of the subdocuments for which you insert automatic numbers through curly braces {...} inside of the binder settings.
Clause9 will automatically split the full title into a numbering section (everything from the start of the full title up to the closing curly brace) and into the body text (everything from the closing curly brace up to the end). For example, if you would enter Annex {1} - Hardware pricing, then (if the annex would be third one) the short title would for example be Annex 3, while the long title would be Annex 3 - Hardware pricing. The entire short title will then be used as the numbering configuration in the custom numbering setup in MS Word for the subdocument.
Clause9's only requirement is that the "prefix" (i.e., what comes before the opening curly brace) remains the same across subdocuments with the same numbering format between the curly braces. If you don't respect this, you will get a warning, because your DOCX-file will then get strange numbering as a result, due to the limitations of MS Word:
For example, if we would use the following settings in our sample binder...
... then the resulting MS Word file would look as follows:
... with the subdocument titles having a special MS Word style called "Annex title" assigned to them, which contains an automatically generated number.
Clause9 will create custom subdocument-title-styles for each combination of subdocument with automatic numbering (i.e., with curly braces). For example, when the following full titles would be used:
Annex {(1)} - Pricing
Schedule {1°,1} - Hardware pricing
Form {#A} - Contact details
Form {#A} - Emergency contacts
Docket {"I"} - Security configuration
Docket {"I"} - Security requirements
Subdocket {I.A} - Security requirements for Windows
Subdocket {I.A} - Security requirements for Mac
Then the following subdocument-title-styles are created in MS Word. They will all have the same formatting, but differ in their numbering:
A generic "Document title" and "Subdocument title" (not numbered)
Annex Title, with automatic numbering "Annex (1)", "Annex (2)", "Annex (3)", etc.
Schedule Title, with automatic numbering "Schedule 1°.A,", "Schedule 1°.B", etc. Note that its first (decimal) number is retrieved from the parent subdocument-title-style Annex Title.
Docket Title, with automatic numbering "Docket I", "Docket II", "Docket III", etc.
Subdocket Title, with automatic numbering "Subdocket I.A,", "Subdocket I.B", etc. Note that its first (upper Roman) number is retrieved from the parent subdocument-title-style Docket Title.
Form Title, with automatic numbering "Forma A", "Form B", "Form C", etc.
Conversely, when inserting cross-references, Clause9 can use either the full-title text or the short-title text.
You can configure whether to use full-title cross references or instead short-title cross-references, by changing the setting Referring to another document in a binder in the References styling:
This setting simultaneously configures the cross-references for referring to clauses in other subdocuments, and referrenting to other subdocuments as such. As explained in the ?-popup, if you use the placeholder "SHORT-DOCTITLE", then short-title cross-references will be used by default; if instead you use the placeholder LONG-DOCTITLE, then long-title cross-references will be used.
You can however manually override the default setting per cross-reference, by wrapping your cross-reference in a @long-ref
or @short-ref
. For example, if the cross-references styling would default to short-title cross-references, then cross-references like the following...
... will contain the short-title text in the resulting DOCX-file:
Conversely, when you would wrap the cross-references in a @long-ref
...
... then the resulting DOCX-file will use full-title references (which usually will become true bookmarks):
Usually you want to enable the Print title checkbox for subdocuments, as this causes Clause9 to automatically generate a subdocument title as the first paragraph of each subdocument.
However, there are situations where you do not want this behaviour, e.g. if you want to subject the entire subdocument's title to some condition, or if you want to dynamically control the text of the title.
In such scenario, you must disable the Print title checkbox, and instead format some clause with a Custom styling for which the Format as document title setting is enabled.
ClauseBuddy will then render this clause with the same MS Word style as the subdocument titles for which Print title is enabled.
As explained by the info-popup, the clause will get an automatically calculated number if all the following conditions are met:
you format the clause as a document-title
you enabled Use automatically numbered Word-styles for subdocument titles in the binder-settings for the subdocument in which the clause is situated
the clause happens to be the first in the subdocument
Because Clause9 is limited by what is possible in MS Word, you should be aware of a few surprises:
When you enable Export subdocuments as separate files, a binder will be exported as a bundle of separate DOCX/PDF files. Because it's not possible to create bookmarks towards paragraphs in other files, Clause9 will use plain text cross-references when you refer to other subdocuments.
When you are using a binder for which Use automatically numbered Word-styles for subdocument titles is enabled:
If you insert cross-references towards an automatically numbered subdocument , then Clause9 must insert two cross-references next to each other: one towards the number of the target subdocument title, and and one with the text of that subdocument title. You should be aware that MS Word sometimes inserts a double space, or drops a period in such situations.
If you include a cross-reference towards a subdocument for which Print title is not enabled, and there's no clause present (& enabled as per its conditions) in that subdocument for which Format as document-title is enabled, then your subdocument-numbering will become erroneous, because MS Word's numbering for the subdocuments will depend on having exactly one paragraph in each subdocument that is formatted with the special MS Word style for that subdocument title. Clause9 will however warn you for this situation in the binder-configuration.
Go to Browse files, click on and select Image / PDF / MS Word DOCX.
Adding a clause to your document can be done by one of these plus signs next to the relevant clause.
Having browsed to the clause you want to add, clicking it will show a preview of its title and body text in the bottom pane. You can then add it by clicking one of the plus signs as explained above under the Search pane above.
The document title will only be visible if you are editing a document and not a binder. Refer to for information on the binder pane.
The document should have a title (e.g. “share purchase agreement”). You can choose whether or not the document title should be printed, i.e. shown in the exported document. The position & formatting of the document title can be adapted in the page section of the pane.
If you desire more control over how the TOC is inserted (e.g., because you want it to be inserted at a different location — e.g., before a particular subdocument in a Binder — or you want to be able to dynamically define whether a TOC should be inserted, then you should have a look at the @toc
.
If your users encounter problems when updating the TOC in MS Word, you consider using the @toc-o1
instead, which tries to circumvent an unfortunate technical limitation of MS Word.
In the drop-down list “map from”, choose the concept you wish to replace, e.g. “buyer”. Then in the list “map to”, choose the concept that you want to actually be used in the document, e.g. “principal”. After clicking the button, all instances (including their datafields) of the “from” concept will be mapped to the “to” concept. In our example, “The Buyer” will be replace by “The Principal”.
There is also the possibility to add a "new document". Choosing this means that you are creating a document in this binder that functions similarly to an . The newly created document will only exist inside of this document and will not be accessible as a separate document in the library. It will therefore also be "" by default.
For a deep dive into automatic numbering in MS Word, see our .
The main document references the two other subdocuments through simple assigned to those subdocuments:
The full title of the subdocument will always be used when printing the title of the subdocument (except in the situation described below ).
Instead of hard-coding the title of the subdocument within the Title-part of the clause, you can also use the @subdoc-title
. This will insert the text of the subdocument (as configured in the binder-settings) into the clause; when used within a binder for which Use automatically numbered Word-styles for subdocument titles is enabled, the {...} automatic numbering will also be dropped, because that numbering would otherwise get duplicated due to the MS Word that gets assigned to that clause in such situation.
In the search tab, you can search for files. While the interface can be used in a very straightforward manner, it actually contains quite a lot of power.
When you first arrive at the search pane, it will invite you to search using keywords:
For example, you could look for files containing the word affiliate
by simply entering that word in the content box. Clause9 will then not only retrieve files that contain that exact word — in the file name, or in the clause title or clause body — but also:
Files that have differently capitalised versions of that word — e.g. searching for house
will also find files that contain the word House
or HOUSE
.
Files that have unaccented versions of that word — e.g., searching for repeter
in French will also find files that contain répéter
, and vice versa.
Files that contain synonyms of #concepts. For example, if you have a concept #vendor
and have assigned it the concept labels vendor, supplier, seller and retailer in English, then searching for any of these words will return clauses that contain the concept #vendor
.
Files that contain alternative forms of that word, depending on the language. For example, when searching for affiliates
in English, or contrats
in French, the platform will also find files using the singular versions affiliate
and contract
, respectively.
When you use a keyword that is used in many different clauses — e.g., liability — you may get a lot of unwanted results. Clause9 provides several tools to narrow down your search results:
Clause9 When you type multiple words, Clause9 will only show files that contain all of these words. For example, searching for liability damage
will only show files that contain both the word liability
and the word damage
.
You can exclude clauses that contain a certain word by putting a hyphen in front of that word. For example, searching for liability -damage
will only show files that contain the word liability
, but not the word damage
.
You can put double quotes around words to make sure they are found next to each other. For example, while searching for liability damage
would also find files where the word liability and damage are twenty-five words apart from each other, searching for "liability damage"
(with quotes) will only find files where those two words are near each other. (Note that unimportant stop words between them would be ignored — for example, a file containing the three words liability the damage
, in that order, would also be found, because the
will be ignored.)
As described above, Clause9 will optimise your keyword searches by searching for word variations and synonyms, replacing concepts with synonyms, dropping words that have little significance (such as articles), etc. Usually this smart behaviour is exactly what you want, but there are situations where you want to search without these optimisations.
By choosing bare search in the dropdown box at the right (instead of a regular language such as English) Clause9 will perform an advanced search:
Your search input is taken “as is”, i.e. without any optimisations. Any character you type — even a quote, curly brace, angular bracket, etc. — will need to be present exactly “as is” in the clause in order to be found.
Your search is performed across all languages at once.
Clause9 will not only search within the filename and (for a clause) title and body, but also in the legal comments, description and enabled condition.
You can combine multiple queries using the operators _AND_
/ _OR_
/ _NOT_
.
You can use the %
operator in your input to leave out certain characters. For example, searching for optimi%ation
would not only find files with the word optimization
(US spelling), but also files with the word optimisation
(UK spelling). Be aware that the number of characters that is dropped is unlimited, so this may also find files containing optimi
se the efficiency of the organis
ation
.
This is particularly interesting when you want to search for the special Clause9 grammar — e.g. special @functions that were used, or certain curly braces { … } or conditions. For example, if you want to search for all clauses containing @assigned
and #vendor
— even if only used in the enabled condition — you could do a bare search on @assigned _AND_ #vendor
For example, when searching for confidentiality clauses using the generic keyword confidentiality
, it could be useful to filter on the attribute mutual?
to only show mutual confidentiality clauses.
Note that when you add multiple attributes, they must be simultaneously met in order for a clause to show up in the results list.
If you have found a relevant clause, you will obviously want to insert it into your document.
The purple plus icon adds the clause to your document with the title visible.
Clicking these plus signs will show a drop-down menu that lets you choose where the clause will be inserted. If you have not selected a clause, only the following choices will be visible:
However, having selected a clause in the document on the left side gives you more options:
Note that this checkbox has no effect on clauses that are not yet versioned.
These saved searches are also essential when using action buttons that allow other users to re-execute a search you saved.
For example, you may create a set of search criteria that search for liability clauses in French within a certain subfolder — by saving these search criteria and then offering them to other users as part of an action button, you allow those other users to re-perform the search in the future. When new clauses would get added in the meantime, they will show up in these feature searches.
For performance reasons, Clause9 currently limits the number of search results to 50. Please be aware that it can be unpredictable which files get truncated from the result list.
Sometimes keyword searches are simply not the right search tool — particularly when you are using fairly general keywords that are used in many different clauses. Considering browsing for clauses instead: digging through a subject-based taxonomy is often more in line with how legal experts “think” about certain clauses.
The “browse” pane works in much the same way as the Browse Files page does. The main differences are that:
you can add a clause directly to your document
you cannot create, edit or move files when in the Assemble Document mode (you can create new folders, however)
In the styling pane, the custom styling of the entire document or binder (i.e., not a specific clause) can be adapted or removed.
Using this pane, you can quickly apply custom stylings, either on the basis of a predefined styling template, or using some completely customised settting.
For example, the following document is currently shown in in its base state, without any custom styles:
If you then apply one of the style templates that were predefined by the customer’s administrator (in casu the Colorful template), the result will be as follows, with a single click of a button.
This pane is only visible when a clause is selected. As an exception to the other tabs of the Assemble Document mode, the actions in this tab only apply to the selected clause.
This checkbox will be hidden when no title is available in the selected clause.
For example, if the body of a clause contains:
then enabling this setting will cause this clause’s instance to appear as if the following had been written instead:
This possibility is particularly useful to foster the reusability of a clause.
In the MS Word output, you will notice that a single-row table with two 50% width cells will be created.
Within Clause9, the two clauses will be shown next to each other with a red dotted line in between.
This setting is similar to what is achieved (for all clause instances) with the “page break before” setting in the custom styling > text flow settings of each paragraph part of the edit pane.
Here you can edit if and how the numbering and title of the selected clause is being shown, make sure the clause is being shown as the left column of the clause that follows, make sure a new page is started before the selected clause, add custom styling to the title and/or body parts of the selected clause etc.
In the layout subtab you can also make sure a clause is repeated. The drop-down list under “repeat clause” will show a list of all “list of texts”, “number” or “repeating list” types of datafields included in the document.
The clause will then be shown as many times as the number of items contained in the selected datafield. If, for example, the datafield “name” of the concept “party” is a repeating list that is selected under “repeat clause”, and three items were inserted into “name”, the clause will be shown three times.
Typical use cases for this functionality are party description clauses and signature blocks which can be repeated for as many times as there are parties (i.e. items entered into a repeating list datafield under the concept of your choice).
This checkbox is only relevant when a document is exported in multiple languages at once. It allows you to specify that a certain clause should not be translated in such case, and should instead span across the different columns of the page.
This is typically only relevant for signature boxes in multi-language documents that actually get signed by the parties. Obviously, in such a scenario, the signature boxes should not be translated.
Under the terms tab, you will be shown an overview of all concepts used in the active document.
Clicking the term itself enables you to change the concept label tied to that concept. You can:
Definitions are separate file types which can be created in the Browse Files mode and linked to concepts. These will be shown in the document if you insert a definition list.
When you click on the button, you can add one or more attributes to search on.
When you click on the button, you are invited to specify the folder where a certain file must be located. Only files that are found within the specified folder, or any of its subfolders, will show up in the results list.
When you click on the button, you can filter on a file’s type — e.g., only folders, or only images, or only binders.
In Clause9, a clause can establish links to other clauses, to establish that a clause in an implementation of a certain concept, a definition for a certain concept, or constitutes an alternative for another clause. By clicking on the button, you can filter the results to only show files with a certain link.
Similarly, buy clicking on the button, you can enter one or more cross-tags that need to be implemented by the resulting clauses.
Adding a clause to your document can be done by one of these plus signs next to the relevant clause.
The green plus icon only adds the body text without making the title visible (this can be toggled afterwards as well by clicking the button in the document toolbar).
Clause9 allows you to archive old versions of a clause, e.g. when legislation changes and certain wording needs to be changed for contracts as from a certain date. By default, all versions of a clause will show up (assuming they meet the search criteria that were specified). When you only want to show the current version of a clause, uncheck the checkbox.
All your search criteria can be saved together for later re-use by clicking this button next to the “search” button.
The button can be toggled to show or hide the location of the search results and their attributes.
Having browsed to the clause you want to add, clicking it will show a preview of its title and body text in the bottom pane. You can then add it by clicking one of the plus signs .
You can then further customise the styling by clicking on the button. Please refer to the for more information about the actual contents of all those styles.
At first glance, several of the options available in this pane — such as visibility, numbering, custom styling, etc. — may seem to overlap with the settings available in the , so you may be wondering which one to choose.
The option allows you to temporily hide a clause (and its children). The effect is similar to checking the option in the Enabled? part of a clause.
If the invisible clauses option is checked in the visibility options (see the popup-list accessible through the button at the right side of the screen), the clause will nevertheless be visible, but redlined.
The checkbox allows you to toggle the visibility of the optional title of the selected clause’s instance. Toggling this checkbox is identical to toggling the button in the operations toolbar.
The checkbox allows you to hide all the numbering in the selected clause instance and its descendant clause instances. Toggling this checkbox is identical to toggling the button in the operations toolbar.
When you enable this checkbox, a secondary option will become visible. If this secondary checkbox is enabled, then the numbering of the (sub)titles will remain numbered.
As its description implies, the checkbox converts numbered headings into bullets.
The checkbox is intended as a shortcut for quickly creating two columns next to each other.
When enabled, the checkbox will cause its clause instance to be the first paragraph on a page.
Enabling “page break before” in MS Word is often (Ctrl-Enter, or through the Insert > Page break toolbar button), because this setting will be associated with the paragraph in question, so will always move together with the paragraph.
Tip: you may want to use the @in-language
and @multi-language
to insert conditions and translate certain concept-labels or datafields in such uni-language paragraph.
This works similar to the document mapping function available under the , except in this case the mapping is only applied to the selected clause. Two additional buttons are shown:
Clicking the button next to a term will show you in which clauses the term is used. Clicking on any of the clauses will make the document preview on the left scroll to and highlight the place of the clause.
Clicking the button on the right side next to a term will show you any existing definitions linked to the concept or give you the opportunity to create a new one (which will not be saved in the library) by clicking . If no definition should be visible in the definition list, you can click . Finally, the selected definition can be removed from the list by clicking the button.
show mappings that are ‘inherited’ from encompassing clauses
This toggles the visibility of mappings that are already applied either in the document itself or in the ‘parent’ clause of the selected clause (i.e. the clause of which the selected clause is a subclause).
‘map from’ selection only
By unchecking this, the ‘map from’ section will also contain concepts used in the document which are not used in the selected clause.
Under the datafields pane (also called the data dashboard), you get an overview of all datafields used in the active document, grouped by default by:
the concepts to which the datafields are connected; and
the categories to which the different concepts belong.
Each datafield that does not have a value assigned yet, will have an icon showing the type of the datafield and may be assigned a color by the creator of the datafield (dark grey is the default color).
When you click on a datafield that does not yet have a value, a default value will be assigned to it. You can then modify the value anyway you like.
When some value is assigned to a datafield, you can click on the label of the datafield to scroll to and highlight the first clause where this value is currently used in the document/binder.
When you hold Shift and click on a datafield that does not yet have a value assigned, you will also be scrolled to and highlight the first clause where this value is currently used.
When clicking on this icon (located in the top left corner of the Data dashboard), you will be shown a popup-menu that enables you to toggle the following options:
toggle grouping of datafields by category
toggle showing of datafields without a value assigned
clear all datafields
save and reload the values currently assigned to the datafields as a standard set
select one of the saved sets of datafield values (cf. previous bullet)
copying and pasting datafield values
Do not underestimate the power of saving & reloading sets of datafield values, as made possible by this popup-menu. These features enable you to quickly simulate how your clauses react to certain combinations of datafields. By saving sets of datafield values, you can then switch between entire contexts to see how your various clauses “react” to the values.
Tip: you can also copy/paste datafield values between different documents/binders — if the source document/binder contains certain datafields that are not present in the target document/binder, then those will simply be ignored.
You can even copy/paste datafield values between a Q&A and a document/binder, in both directions. For the Q&A, only questions with an associated datafield will be taken into account for the matching. See Copying & pasting answers for more information.
When this option is enabled, Clause9 will include all datafields that are mentioned somewhere in a clause. When this options is disabled (the default), Clause9 will only include datafields that are actually currently used.
Toggling this option will show/hide datafields that act as clause enablers, i.e. datafields used in the “enabled?” condition of a clause.
Toggling this option will show/hide datafields that act as text enablers, i.e. datafields used within conditions that are used in the title or body text of clauses to show/hide parts of a clause.
Toggling this option will show/hide datafields that do not act as clause or text enablers.
For example, if the body of a clause contains the following text: Alpha #contract^value beta
, then #contract^value
will qualify as “other” datafield.
This button — only visible for advanced users — brings you to a mode where you can interact with (and prepare for) the Clause9 API, e.g. by inspecting the datafields present in the document.
When the document is saved, all values that have been entered in the data dashboard will be saved as well. This has three important consequences to keep in mind:
When you close and re-open the document, those values will still be there.
If the document is used in one or more binders, those values will also be used in that binder unless another value was assigned to that datafield in the binder.
Any Q&As attached to that document will also implicitly have that value assigned for the relevant datafield.
Values saved in a document will therefore affect the 'starting position' of the Q&A: until the user of the Q&A has answered the question with the relevant datafield, that datafield will contain the value saved in the document which means the document will be affected (e.g. because a condition will be triggered or because some information has been completed on the basis of that datafield).
In the mirror pane, you can see another view of the active document or binder. In addition, the top slider enables you to hide certain levels of the document hierarchy. Setting it to “1” will only show the top level clauses. “2” will also show the first level of subclauses, “3” the next level, etc.
This feature can provide you with a handy higher level overview of the document or binder you are editing.
At the left of each datafield, you will also see a magnifying glass icon . When you click on it, you will see a popup-list that provides an exhaustive list of all the clauses where the datafield is used.
If a clause is selected, clicking this button will bring you to the location of the relevant clause (in your clause library) in the Browse pane of the operations panel.
(Assuming you have the right to create Q&As) this button will be enabled as soon as you have saved your document at least once. It sends the document (including any inputs to datafields) to the Design Q&A mode.
Reload contents re-fetches the entire document, and all its clauses, from the server, and then recalculates the entire document. This is roughly similar to closing the document and re-opening it again. This should only be used on rare occasions, e.g. when you know that a colleague has changed a clause in his/her own browser, and you want to fetch those changes.
The difference with recalculate contents (part of the document toolbar) is that recalculate contents (Ctrl-Shift-E) does not load any contents from the server, and merely recalculates the already-available content in your browser.
Clicking this button will show what changes your last action (adding/removing a clause, changing a datafield,…) has made in the document in a manner that is similar to the track changes view in Microsoft Word. This view can also be triggered by holding the Alt-key (Option-key on the Mac) and clicking inside the document.
Enabled by default. Toggles whether invisible clauses are shown (in red strikethrough) in your document. Invisible clauses are clauses that are included in the document but that will not be visible in any export because the conditions for their visibility (included in its Enabled? property) have not been fulfilled, or because their “ancestor clauses” are not visible.
Disabled by default. Toggles whether any text is visible (with a dark blue background) that is not currently visible because the shrinking level is set too high.
Disabled by default. Toggles the reporting mode that may hide or modify the contents of certain clauses to present a different — often shorter — view of the document.
Enabled by default. Toggles the visibility of the light blue vertical bar shown to the left of certain clauses.
The performance subsection contains settings that can be disabled to improve the speed of working in Clause9 with very large documents.
Enabled by default, you should probably only ever change this if you are working with very long documents.
Enabled by default. Toggles whether Clause9 always recalculates the numbering of clauses on-the-fly. When disabled, clause numbering will not be automatically adapted when inserting, removing, enabling or disabling clauses or when changing the position of clauses.
Probably the only situation in which you want to disable this setting, is when you are in the process of bulk inserting clauses in a very long document, and the actual numbering/cross-referencing/definitions are not relevant to you at that point in time.
Enabled by default. Toggles whether Clause9 (re)calculates any cross-references inside the document/binder. See the technical details above to understand why this (re)calculation may take time, and when you may occasionally want to disable this setting.
Enabled by default. Toggles whether Clause9 automatically recalculates the definition list. See the technical details above to understand why this (re)calculation may take time, and when you may occasionally want to disable this setting.
In traditional documents, you can insert a definition list as a separate clause by automatically generating it using the document toolbar.
However, such functionality is often not enough:
In binders, you may run into the situation of having certain defined terms in one document and other defined terms in another.
In some jurisdictions, it is customary to have “local” definition lists containing only those terms that are present in a specific clause.
Clause9 allows this kind of flexibility: for each definition list, you can define the scope and interactions with any other definitions lists present in the document/binder. To tweak these options, you should simply select the definition list, and visit the Advanced menu at the right side of your screen.
These eight (!) different options should allow you sufficient flexibility to meet all your definition needs!
Clicking the toggle button to the left will allow you to customize this option. You can choose to write “DOCTITLE” or “SHORT-DOCTITLE” to choose whether the full title of the document is used or a short title (as you will remember: you have the option to define both these kinds of titles in the “binder” menu of the operations panel). Depending on your choice you could for example choose to refer to an article from a different document with in the same binder as:
“article 2 of Schedule 2”; or
“article 2 of Schedule 2 – Pricing details of the Services”.
When in Assemble Document mode, the top right corner of the document toolbar contains a symbol. Clicking this symbol triggers the “visibility settings & actions menu”. Below is a summary of what each of these settings or actions does.
Enabled by default. Toggles the symbol that, if enabled, will be shown to the left of a clause that contains a legal comment.
Disabled by default. Toggles the symbol that will be shown to the right of a clause that contains shrinking opportunities — i.e. text that can be shown/hidden by changing the shrinking level by using the Shrink or expand text menu-option in the upper-right menu.
Enabled by default. Toggles the that will be shown to the right of a clause that has one or more alternatives (based on the incoming/outgoing links that that clause has).
If this setting is disabled, you can still force Clause9 to recalculate the numbering of the current document by pressing the recalculate contents button (shortcut Ctrl-Shift-E).
If this setting is disabled, you can still force Clause9 to recalculate cross-references by pressing the recalculate contents button (shortcut Ctrl-Shift-E).
If this setting is disabled, you can still force Clause9 to recalculate definitions by pressing the recalculate contents button (shortcut Ctrl-Shift-E).
The traditional way of cross-referencing within a single document works exactly the same as it does for binders. However, you may want to fine-tune the manner in which clauses are referenced from one document to the other. To do so, go to the “styling” tab of the operations panel and then go to the “references” sub-tab. Then click and you will see the following option:
Binders are bundles of single documents that follow the same styling, terminology, definitions, etc. (binders typically take the form of a a main agreement with several annexes attached to it, like a master services agreement with a number of statements of work or a share purchase agreement with schedules attached to it).
You will quickly note that binders are virtually identical to documents in the way that they are presented in the document toolbar and the operations pane. For example, the “terms” and “datafield” menu of the operations panel function in the exact same way for binders as they do for documents.
How to manage (existing and new) documents in a binder is described more in detail here.
Documents and binders can have many properties similar to clauses.
File name — Allows you to set the file name of the document or binder file, optionally in multiple languages. Similar to the file names you would use on your Windows pc or Mac, file names should not be too long, to allow users to quickly glance over lists of files.
Description — An optional pane that allows you to provide a description of a file. Users typically store either a summary of the document, and/or store practical guidelines on how to use the document — e.g. how this file is different from another file. This content can later be searched on. Unlike file names, there is no real limit to the length of the description you can provide.
Attributes — Allows you to assign various attributes to the document, to make it easier for users to check whether the document is appropriate for their purposes.
Links — Allows you to create relationships between files. For example, if a document is an implementation of a certain concept, that is a link you would make here. This pane can also be used to create cross-references.
Enabled? — Allows you to define conditions to define when the document will be visible or invisible in a binder.
Legal comment — Allows you to create comments for the users of the document.
Custom styling — Allows you to define custom styling for this document which will be applied each time this clause is used. This page configures the same settings as the styling pane in the Assemble Document mode. Please use with caution: see our tips on the use of styling for more information.
Access rights — Allows you to manually determine who the owner of a file will be (if you want to designate someone other than yourself) who will then have editing rights over this file. You can also determine access rights for everyone except the owner.
Cross-tags — Another way (other than using links to clauses implementing a certain concept) to create cross-references within the document/binder. For more information, see Cross-references.
To open a binder, click on the button on the top right-hand side of the screen when in Assemble Document mode and choose New Binder.
To do so, go to the “binder” tab of the operations panel. Scroll down to “advanced” and click , then select the document you wish to adjust the properties of. This will then prompt a menu that is virtually identical to the menu that is shown when editing clauses.
You can also adjust the properties of the entire binder by clicking and then selecting “binder”. While enabling and disabling the binder based on certain conditions may not be useful, there are plenty of other properties that may be worth adjusting for a specific binder. For example, you may want to provide a description, add certain attributes or provide certain legal comments to your users.
Please read this page carefully prior to unlocking a document in a binder as doing so may have serious consequences.
When working in a binder, you may notice that some (or all) of the documents making up the binder contain a lock symbol.
The lock symbol means the document is currently locked, i.e. that its structure cannot be changed. While the document is locked, the following actions are disabled:
Inserting clauses in the document
Removing clauses in the document
Re-ordering clauses in the document
Increasing or decreasing clause indentation
Enabling or disabling numbering or clause title
Editing any "Advanced" settings of a clause in the document
Documents can be unlocked by clicking the lock symbol itself. However, unlocking a document must not be done lightly!
A binder is a collection of documents. Those documents can both be existing documents and documents created specifically for the binder.
Existing documents exist separately and can be updated. An existing document that has been included in a binder (without unlocking and changing it) will follow any changes made to the ‘original’ document. This is, of course, the preferred situation as any changes to the original template are also made to any binders where this template has been included.
Unlocking a document in a binder and then changing the structure (i.e. taking any of the actions listed above) removes that link. That means that as soon as the document included in a binder is changed, that document will no longer be linked to the original document and any changes brought to it will not be reflected in the document included in the binder.
A document being locked does not mean it becomes entirely unusable. On the contrary. All of the following (and more) is still possible:
changing datafields
changing terms & definitions
exporting to pdf/docx/e-mail
changing the document title
changing styling (on the level of the binder)
change the locked document’s properties, such as:
custom styling
enabled? conditions
links
cross-tags
editing the content & properties of library clauses used in the document
etc.
When you create a Binder — i.e., a collection of individual subdocuments — the question arises how each subdocument should be shown when there are discrepancies between the styling settings of the Binder and the styling settings of one or more subdocuments.
Clause9 assumes that the subdocuments of a Binder will generally have to look similar, and therefore takes the following approach:
Only page-related styling settings can be different between subdocuments. This, for example, allows you to have subdocuments that have different headers, footers or numbers of columns.
For those page-related styling settings, the settings of the Binder will serve as the starting point for each subdocument, and will be complemented by the specific page-settings of each subdocument.
Note that the document-title is not considered part of the page-related styling settings, even though its setting is listed under “page”.
All other styling settings (including the document title) will be identical across all individual subdocuments of a Binder.To determine which styling setting will take precedence, the following rules are used:
the Binder’s setting for a specific styling element will always take precedence
if the Binder does not contain a setting for this styling element, the main subdocument’s setting will be taken
if neither the Binder nor the main subdocument contains a setting for the styling element, the default styling for the user (perhaps determined by central customer or group styling settings) will be used.
The Binder contains a setting for the base left spacing (10 mm) and for the center header (“dummy center binder heading”).
The main subdocument contains a setting for the base left spacing (20mm), font name (Courier) and color (green), as well as a left header setting (“dummy main left heading”) and center heading (“main subdocument center heading”).
The second subdocument contains a setting for the base font name (Impact), as well as a left header setting (“dummy second left heading”). Its number of columns in the page-settings is set to 3, and its page orientation is landscape.
The third subdocument contains a setting for the base font size (12pt), as well as a left header setting (“dummy third left heading”).
No customer or group styling settings apply.
This will result in the following document:
Base left spacing: 10mm (the Binder takes precedence over the main subdocument’s 20mm left spacing).
The base font used everywhere will be Courier: this is the value taken from the main subdocument (font Impact specified in the second subdocument is ignored).
The color of the base font will be green (taken from the main subdocument, and not overridden by any of the other subdocuments).
The base font size will be 10pt, i.e. the system default size, because neither the Binder nor the main subdocuments specify the font size. Note that the 12pt size of the third subdocument is ignored.
Center heading: “dummy center binder heading” (taken from the Binder) for the second and third subdocument, because they do not contain a center heading themselves. The center heading for the main subdocument will be “main subdocument center heading”.
The left header setting will be different for each subdocument, because this is a setting that can be different between subdocuments.
The number of columns will be one (default) for the main subdocument and third subdocument, but three for the second subdocument.
The page orientation will be portrait for the main subdocument and third subdocument, but landscape for the second subdocument.
All settings that are not mentioned, will be taken from a combination of the customer’s setting, group settings, user settings, etc.
Documents created specifically for the binder are (i) the default document that is included when you create a new binder or (ii) any document that is added to the binder by using the button. Think of these documents as similar to ad-hoc clauses, which are also tied to the document in which they are located.
The complexity described below is a hint that you should try to avoid, as much as possible, to embed custom styling settings into subdocuments. Ideally, neither the Binder nor any of the subdocuments contains any styling information, so that all styling information emanates from the customer’s or user’s individual settings.
There might be circumstances where the presence of a certain subdocument should be conditional. There are two main ways to achieve this:
Via conditional logic in the enabled? field of a document itself.
Via the “Disable subdocument” change set in Q&A mode.
Inserting condition logic into a document is very similar to how you would approach this for a clause. Navigate to binder > properties and click on the subdocument that shall be made conditional.
A new file pops up in the Edit menu, which is where the properties of the subdocument are changed. In the enabled? pane, the file can be enabled or disabled based on a certain condition.
You could use a general condition like #share-transfer-agreement^consent-letter-applicable = true
to activate or deactive the Annex Form of Consent Letter (see screenshot above). Just fill it out, hit save and the datafield for this condition should be visible under the “Datafields” menu.
You could also make the inclusion of a subdocument conditional on whether or not a clause is included in the binder somewhere (i.e.: whether a concept or cross-tag has been implemented). Thus, we need to use the special function @implemented
to create this condition. For example:
To make a document conditional on the inclusion of a clause that implements the concept of #confidential-information, use @implemented(#confidential-information)
To make a document conditional on the inclusion of a clause that has a crosstag by the name of “confidential-information”, use @implemented(confidential-information)
For a more detailed overview of cross-references, please consult this article and this How To.
Then, simply choose the document that needs to be disabled under a given circumstance and attach a condition to this change set to activate or deactivate the document in question.
For more information on how to attach conditions to change sets, check out this article.
When choosing your preferred approach, the main thing you should be concerned with is whether you need flexibility or clarity:
Flexibility: choose the Q&A approach. You will not encumber your documents with conditions that lock them into a specific legal nuance, meaning you can reuse them in different situations in Document Assembly mode later on.
Clarity: choose the conditional logic approach. You will disable this document to all potential inappropriate use and lock it into one specific legal nuance.
Create a Disable subdocument change set for your Q&A by going to the Changes panel, clicking on and choosing Disable subdocument.
What is a clause, and which pieces of information are stored along with it?
As a clause in any real life contract, a clause in Clause9 is a text fragment that can be re-used in other documents. However, a well written Clause9 clause is much more flexible and dynamic: when it is re-used in any number of different contexts, it will adapt itself to its context without having to amend the actual text.
Not all Clause9 clauses contain only text. A Clause9 clause can also be made into a signature block, a table, a clause can contain images, etc.
When you create a new clause, you are presented with several options to provide information about it (see the column on the right-hand side in the image above). Below, we go over each pane.
File name — The pane currently shown by the screenshot. It allows you to set the file name of the clause file, optionally in multiple languages. Similar to the file names you would use on your Windows pc or Mac, file names should not be too long, to allow users to quickly glance over lists of files.
Content title — Allows you to create a (sub)title for the clause, optionally in multiple languages. When users insert the clause into a document, they can choose whether or not to show the title.
Content body — Here is where the text of the clause itself should be inserted, optionally in multiple languages.
Description — An optional pane that allows you to provide a description of a file. Users typically store either a summary of the clause, and/or store practical guidelines on how to use the clause — e.g., in which types of documents this file should be used, or how this file is different from another file. This content can later be searched on. Unlike file names, there is no real limit to the length of the description you can provide.
Attributes — Allows you to assign various attributes to the clause, to make it easier for users to check whether the clause is appropriate for their document.
Links — Allows you to create relationships between files. For example, if a clause contains a definition for a certain concept, that is a link you would make here. This pane can also be used to create cross-references.
Enabled? — Allows you to define conditions to define when the clause will be visible or invisible in a document.
Legal comment — Allows you to create comments for the users of the clause. The comment will be shown in the Assemble Document mode as an information symbol next to the clause which, when the mouse pointer is hovered over the symbol, shows the content of the legal comment.
Reporting — Here the text which is shown in the reporting mode should be entered.
Position — Allows you to define a place where the clause should – ideally – be used in a document. When inserting the clause in the document, this location will be suggested to the user.
Custom styling — Allows you to define custom styling for this clause which will be applied each time this clause is used. Please use with caution: see our tips on the use of styling for more information.
Action button — Allows you to create a button which will be shown below the clause when using it in a document. Can be used as a shortcut to a folder, as a dropdown list of clauses or to execute a saved search.
Access rights — Allows you to manually determine who the owner of a file will be (if you want to designate someone other than yourself) who will then have editing rights over this file. You can also determine access rights for everyone except the owner.
Cross-tags — Another way (other than using links to clauses implementing a certain concept) to create cross-references within the document. For more information, see Cross-references.
Constituent elements of a clause: numbered paragraphs, bullets and blank lines.
This page explains how to structure your clause, i.e. how to use clause numbering, blank lines, bullets, etc. This page does not go into styling of headings/paragraph numbering and bullets, which is explained elsewhere.
Any new clause will automatically include a default paragraph number (1.
) in its content body. The number 1.
denotes the first numbered paragraph. Similarly, the next numbered paragraph would have to be numbered 2.
and so on.
The period is essential, as a number alone (without a period) will not trigger a new numbered paragraph.
It is best practice to always start new paragraphs with paragraph numbering. Users of your clause can still choose to disable numbering by clicking the numbering button in the Document Toolbar. Conversely, if there are no numbered paragraphs numbering cannot be enabled by users of the clause.
The actual number a paragraph will receive is influenced by its position inside the document. A clause with three numbered paragraphs can, for example, be numbered 2.2, 2.3 and 2.4 if it was inserted (without a title) as subclause of clause 2 that has a single paragraph. Or it could be numbered 2.1.1, 2.1.2 and 2.1.3 if it was inserted as a subclause to the first paragraph of clause 2.
A clause can contain subparagraphs as well. This is done by adding an additional number to the number of the main paragraph number, i.e. the first subparagraph to the first numbered paragraph would be numbered 1.1.
, the second subparagraph would be numbered 1.2.
etc.
If you want to return to the original paragraph level after your subparagraphs (i.e. without starting a new numbered paragraph), you have to re-enter the original paragraph’s numbering. An example:
This results in the following output — notice the second-to-last paragraph!
A blank line can be inserted by entering two returns (i.e. hitting the Enter-key twice). One return does not suffice: Clause9 will ignore this and show the text as if there was no return present. Conversely, more than two consecutive returns will be ignored as well. Still only one blank line will be shown in that case.
Blank lines can be used to start a new subparagraph that should never be numbered (as absent the paragraph number, no number can ever be attributed in Clause9).
A line break can be inserted in Clause9 by typing %%
. The text after %%
will be started on a new line. A line break ut will not start a new paragraph, similar to how line breaks work (“soft returns”) work in Microsoft Word. Multiple consecutive line breaks can be inserted.
Normal paragraph numbering can be replaced by bullets. Instead of entering a paragraph number (e.g. 1.
), start the paragraph with an asterisk *
.
Similar to subparagraphs, sub-bullets can be inserted as well by adding an additional asterisk, i.e. **
for sub-bullets to the first level of bullets.
The numbering of bullets (in accordance with the enumeration styling settings) will continue until a new heading or (sub)paragraph is encountered. It will therefore be the case that two clauses (on the same level) which only contain bullets will be numbered continuously, e.g. (a), (b), (c) — if that would be the styling chosen in the enumeration styling settings.
You can force bullets (inserted by using the asterisks mentioned above) into an enumerated list using “and” or “or” before the final bullet. This is done by inserting * AND
or * OR
(as applicable) on a separate line before the first bullet. For example:
Results in:
This enumeration will follow enumeration styling settings.
Paragraphs without a number or bullet will be inserted with the same indentation as the closest preceding numbered/bulleted paragraph. For example:
will be printed as follows:
If in this example you want to add another line that needs to “jump back” to the indentation of the first number (“1. I like the following fruits:”), instead of the indentation of the last bullet, then you need to repeat the paragraph number you want to match it to. For example:
will be printed as:
Or yet another example:
will be printed as:
For truly complex clauses, it can be helpful to insert comments that describe what you are doing, or why you took a certain approach. (While things may seem very obvious at the moment you are drafting it, you would be surprised how non-obvious it may be for the person who comes after — or for yourself, 6 months in the future!)
You can insert such comments by preceding a paragraph with a double forward slash:
The comment will be completely ignored by the software, so you can basically write anything you want in there.
When inserting predefined values in a datafield or predefined answers in a Q&A question, it can be very tempting to use wording that can be inserted as such in the text of a document. For example, when a transport contract allows a delivery to be made in three different countries, you would be tempted to use the name of those three countries as the predefined value/answer.
This is not problematic when drafting a short, single-language document where the names of those three countries are only inserted into one specific clause. However, this approach has several drawbacks:
In a multi-lingual document, you would have to use predefined values/answers per language, because the names of the countries differ per language.
Writing condition statements in the body text of a clause becomes much more complex, because the conditions would change per language. For example, {#country^name = "United Kingdom": ... | "Germany": ... }
becomes {#country^name = "Royaume-Uni": ... | "Allemagne": ... }
in French.
Writing enabled-conditions for a clause becomes almost impossible in a multi-lingual context, because enabled-conditions can only be drafted for a single language.
Even in a single-language context, writing conditions becomes much more error-prone, because of the length and complexity of the names. For example, the likelihood of misspelling Czechoslovakia (French: Tchécoslovaquie) is quite high. Also, different variations of country names are used — for example, should you use “the Netherlands” or instead “Netherlands” ?
With long values, reading condition statements becomes much harder because the condition part can get quite long.
Managing small changes becomes much harder and error-prone.
For example, assume that a transport contract allows the user to choose between normal delivery and premium delivery. The text that needs to be inserted into the document would then be either “delivery in accordance with the national carriers’ service levels” and “two-day guaranteed delivery at a premium rate”.
Now assume that the delivery term is lowered to one-day delivery. Suddenly you will have to manually search for every occurrence of the text parts above, and manually change them — not only in the clauses, but potentially also in (conditions within the) Q&A.
Text fragments cannot contain any conditions, concept-labels or datafields. Accordingly, those text fragments will not reflect changes in styling, concepts, datafields contents, etc.
The solution is to use codes instead of text fragments, optionally paired with labels and text snippets.
For example, in the transport contract referred to above, the normal delivery option could be referred to with code normal-delivery
, and the premium delivery option with premium-delivery
. Inside a clause, you would then write:
This indirection through a special code may seem like more work, but will not suffer from the scalability and management disadvantages outlined above:
a code is much shorter, and therefore takes less time to type, and are less error-prone
the document text associated with a code can be independently and centrally modified
codes are language-independent, and can therefore also be used in enabled-conditions
When you frequently have to insert the same text fragment in conjunction with a certain code, it is beneficial from a management point of view to turn the text fragment into an external snippet, because such snippets allow for central updating. (If the entire conditional statement is frequently repeated, it is probably also a good idea to turn that entire statement in its entirety into an external snippet.)
Another tip is to associate (possibly translated) labels with the predefined value or answer. This avoids that the code itself would be presented to the end-user.
Please also consult the other Grammar style guide, for various best practices related to choosing the right code.
Example: assume you only want to show some text when a property is located in any of the following cities: Antwerp, Amsterdam, Paris or Barcelona.
The long way to write this is:
The shorter and more readable way to write this:
The wrong way to write this:
In other words, because in the wrong example above, for Amsterdam/Paris/Barcelona the comparison misses a second part, the software will implicitly “fill up” this second party with “= true”. Because the words “Amsterdam”, “Paris” and “Barcelona” obviously contain at least one character, these parts will always be true. The end result is that this condition will always be considered true, even when the property’s location is not filled in, and even when the property’s location would for example by “New York”.
Example: assume you do not want to show a certain piece of text for a property located in Moscow or Milan.
The long and probably incorrect way to write this:
The above example is probably wrong, because it will also show the piece of text when no value has been assigned to the property’s location, or when the property’s location has been assigned an empty text value. This is probably not what you want. To take this situation into account, you would have to write an even longer version:
This new condition first checks whether some non-empty value is assigned. If so, then it will check whether that value is not equal to either “Moscow” or “Milan”. This works, but is a bit long. This can be shortened to:
or even shorter:
Example: a certain bonus is awarded when an employee’s collective labour agreement (CLA) is either nr. 123 or 456, while at the same time the employee’s status must be active or on parental leave.
The double wrong way to write this:
The first error is that, due to the short-hand comparison described earlier on this page, the software will actually interpret this as (#employee^cla = 123) or (456 = true) and (#employee^status = "active") or ("parental-leave" = true)
. This expression will always be true, because any number other than zero (such as 456) and any piece of non-empty text (such as “parental-leave”) will be considered “true” by the software.
The less wrong (but still wrong) way to write this:
This is still wrong, because it is very unpredictable for human beings to remember how this will be interpreted by the software, due to the concatenation of AND and OR. Will the software interpret this as (CLA = 123 OR CLA = 456) AND (status = "active" OR status = "parental-leave)
? Or instead as (CLA = 123) OR (CLA = 456 AND status = "active") OR (status = "parental-leave)
? Or even in some other way?
There exist “precedence” rules for this, but many people have problem remembering the precedence rules for addition and multiplication of numbers, so even if you remember correctly what the precedence rules are for AND/OR/NOT, the person who comes after you to update your texts will probably make a mistake in the interpretation. In any case, the above condition is hard to read.
A correct solution using parentheses is for example:
A shorter version, which drops the concatenation of AND/OR:
Example: a piece of text must be shown when an employee’s fringe benefits (a “list of text” datafield) includes both meals and tuition:
The very wrong way to write this condition:
This not only suffers from the short-circuiting issue described above, but will also result in an error because you are comparing a list of items (i.e., the “list of texts” datafield #employee^benefits
) to a single text item (“meals”). For the software, this boils down to comparing apples to oranges, hence the error.
A less wrong (but still wrong) way:
This will in many cases be wrong, because it will only be true if the benefits include only meals and tuition — i.e. if the list on the left side and the list on the right side are exactly equal and include exactly the same elements. If any other benefit would have been assigned to the employees, then this condition will erroneously become false.
Even when the employee’s benefits consist of only meals and tuition, the above condition may erroneously result in false, when the tuition happened to come before the meals in the datafield, i.e. if the ordering is different. The reason is that list-of-text datafields take ordering into account — after all, in certain contracts, the order of appearance of the elements may be very important.
A correct way to write this condition:
or, somewhat shorter (but also more fancy and probably less readable):
The reason the above condition does not work, is that — due to the feature — the software will actually interpret this as #property^location = "Antwerp" OR "Amsterdam"
= true
OR "Paris"
= true
OR "Barcelona"
= true
, similar to how the software would interpret a condition such as {#property^location: ...}
as meaning “if some value is assigned to this datafield, then show the following text: ….
Clause9 encourages you to minimise the amount of styling you embed in a clause. Ideally, clauses do not contain any styling — such as bold, italic and underline — because all styling will then be completely determined by the user of the clause.
This encourages reusability of clauses, since different departments (or even different clients of a law firm) can all use the same clause, but with widely different styling.
Even so, there are situations where you can be really sure that some styling must be applied. In such situations, it can come in handy to force certain parts of the text to be bold, italic or underline. Other styling deviations (e.g., coloring, borders, line spacing) are also possible.
You can force text parts to become bold by enclosing them in ~ tildes ~
:
You can force text parts to become italic by enclosing them in ``backticks`
You can force text parts to become bold by enclosing them in \ backslashes \:
You can combine bold, italic and underline any way you like. For example:
When you are drafting clauses in ClauseBase, you will occasionally want to add some intelligence to them.
In order for the options not to become overwhelming, we created a handy one-pager that features all the special symbols ClauseBase uses when you want to work with concepts, conditions, mathematical equations, special functions and more.
Be sure to keep this one-pager close by, as it is your (completely legitimate) cheat sheet!
Click the link below to take a look:
Several special grammatical structures within Clause9 allow you to write conditions.
For example, in the following conditional text, the condition #applicable-law^name
expresses the objective that the text that follows after the colon should only be shown if the datafield name of concept #applicable-law
is equal to the word “belgian”
.
For a list of examples, go to assemble document mode and click “help”. Then navigate to “clause samples” and you will be given a link to access the samples library. This library contains a number of examples that explain how certain kinds of conditions work.
In their most basic appearance, conditions follow the structure:
left value comparison operator right value
The left value and right value can be any of the following value types:
type
explanation
examples
number
whole number, or floating-point number (with decimal part)
51234
123.5
text
either between single quotes (‘) or double quotes (“)
‘Brussels’
“Paris”
date
should be expressed as year_month_day
2000_12_23
(23 Dec 2000)
2016_1_5
(5 Jan 2016)
currency
a (potentially fractional) number and one of the supported currencies (EUR, USD, JPY or GBP)
5 EUR
6.78 JPY
duration
a number and a time unit (week, year, day, quarter, or year)
5 weeks
3 months
4 years
true/false
the truth value true or false
true
false
list
a uniform or mixed list of elements
@list(5, 6, 7)
@list(‘Brussels, ‘Amsterdam’)
@list(5, ‘Brussels’, 6 days)
Floating-point numbers and currencies are supported with up to four numbers after the decimal operator. (You can type in more decimal numbers than four, but they will be ignored. For example, when 5.34789
would be typed in, Clause9 will use 5.3478.)
The maximum number Clause9 can store is 99.999.999.999,9999 (99 billion etc).
The comparison operator can be any of the following:
type
description
example
=
equal to
#applicable-law^name = ‘belgian’
!=
not equal to
#parties^amount != 2
<
smaller than
#contract^value < 2000 EUR
>
larger than
#contract^value > 2000 EUR
<=
smaller than, or equal to
#contract^value <= 2000 EUR
>=
larger than, or equal to
#contract^value >= 2000 EUR
in
present in the list (or, for texts, text is contained in other text)
#competent-court^name in @list(‘Brussels’, ‘Amsterdam’)
#department^name in "Accounts payable"
!in
not present in the list (or, for texts, text is not contained in other text)
#product^type !in @list(‘typeA’, ‘typeB’, ‘typeC’)
#department^name !in "Accounts payable"
When building conditions for clauses, you can either use static values (e.g., 5 weeks
or 234.5 EUR
), or use dynamic values by referring to datafields through the syntax #concept^datafield
(e.g., #applicable-law^name
).
Dynamic values can also be obtained through the advanced topic of Data-expressions.
Unlike a static value, the actual value of a datafield is not known by the clause author, and will instead be determined by the clause user — e.g., by submitting a value in the data dashboard, or by selecting a value in a Q&A session. At the moment Clause9 is about to show a clause, it will look up the current value, and use it in subsequent calculations.
Datafields will always take on one of the value types above (number, text, currency, duration, etc.). This value type needs to be selected upfront when constructing a Concept.
When the user has not yet assigned a value to a datafield, the value of that datafield is said to be undefined. When drafting clauses, you should take into account the possibility of such undefined values.
Numerical values can be combined in larger structures through the basic mathematical operations (+, -, / and *). Examples:
Note that parentheses can be used to clarify which parts of the formula should be taken first. If no parentheses are used, then the well-known mathematical rules of precedence are used — i.e., multiplication and division take precedence over addition and subtraction, so that 1 + 2 * 3
is equal to 7 (not 9).
If the operator and right value of a comparison are omitted, then the comparison will result in true if the left value:
is equal to true
is equal to a non-empty text value
is equal to a number or currency that is different from zero
is equal to a duration higher than zero
is equal to a non-empty list
In other words, the comparison will be false if the left value:
is undefined
is equal to false
is equal to empty text (“”)
is equal to a number or currency that is equal to zero
is an empty list
This allows you to for example write the following shorthand conditions:
In all of these examples, the … will only be shown if the preceding datafield is assigned a decent value. If in the first example the contract value would not have been assigned, or be equal to zero, then the … will not be shown. Similarly, if the duration would not have been assigned, or be equal to zero, or if the employee’s name would not have been assigned, or be set to an empty text, then the … will not be shown in the second and third example.
To a limited extent, values of different types can be combined with each other in comparisons or mathematical operations. The following rules apply:
VALUE TYPE 1
VALUE TYPE 2
RESULT
DESCRIPTION OR EXAMPLE
number
currency
currency
3000 EUR + 200
results in 3200 EUR
duration
duration
duration, with the time unit converted to the most relevant one (*)
5 months + 3 months
results in 8 months
1 month + 3 days
results in 34 days
1 year + 1 month
results in 13 months
1 year + 3 days
results in 368 days
date
duration
date
2018_7_1 + 1 month
results in 2018_8_1
, while 2018_7_1 + 2 weeks + 1 year
results in 2019_7_15
Be aware that chains of mathematical operations on durations can lead to multiple conversions, which can lead to multiple rounding errors.
(*) For example, 1 year + 1 month + 1 day
will be evaluated in two steps, ultimately resulting in 396 days.
– first 1 year + 1 month
(= converted to 13 months)
– then 13 months + 1 day
(= (13 * average of 30.417 days) + 1 = 396 days)
The following mathematical operations will lead to errors in Clause9.
dividing a number by zero
mixing different currencies (e.g., 300 EUR + 500 USD
)
adding or subtracting dates (e.g., 2018_7_15 + 2018_1_1
)
mixing a date/duration and a number (e.g., 2018_7_15 + 14
, or 5 weeks + 6
)
mixing texts with other types (e.g., 5 July 2018 + ‘Brussels’
, or 500 EUR + ‘2 cents’
)
While it is not possible to perform mathematical operations with dates, it is possible to perform mathematical calculations between dates and durations, and compare the result.
For example, if you would have two dates available and would like to check whether the duration between them is beyond a certain threshold, you could write #concept^date1 + 3 months < #concept^date2
.
Clause9 will automatically convert undefined values to values that make sense in comparisons or mathematical operations:
OTHER TYPE
UNDEFINED WILL BE CONVERTED INTO
EXAMPLE
number
0
5 + undefined
results in 5
5 * undefined
results in 0
currency
0 (same valuta)
5 EUR + undefined
results in 5 EUR
5 EUR * undefined
results in 0 EUR
duration
duration with length 0
5 days + undefined
results in 5 days
text
empty text
("" = undefined)
evaluates to true
list
empty list
(@empty-list() = undefined)
results in true
It is not possible to compare a date to an undefined value. (After all, a “zero date” makes little sense…)
Different sub-conditions can be combined through AND, OR and NOT.
For example, the following combination of sub-conditions will only apply if Dutch law applies, and the competent court is simultaneously set to Amsterdam:
Computer users who first encounter AND/OR conditions, are often confused by them, because they seem to express the opposite of common language.
For example, the sentence “Marie will go to the city when it is Tuesday and when John calls” will usually be understood as “Marie will go on Tuesday, but will also go on other days when John calls”. Hence, in everyday language, the word “and” can sometimes express that something applies when any of the sub-parts apply. Whether this is indeed the case — or whether “and” should instead be interpreted as “only apply when both sub-parts apply at the same time” — can usually be inferred from the context.
In most situations, this linguistical ambiguity is not a problem, because the context will be clear or because the consequences of the wrong interpretation are negligible. However, such ambiguities are sometimes also found in contracts and laws, and then the context may not always be clear, and/or the consequences may be significant
When building conditions in Clause9, such ambiguities will not arise, because the word “AND” means “both sub-conditions must apply”, and is thereby clearly opposed to the word “OR”, which means “it is sufficient if any of the sub-conditions applies”.
Much more complex combinations of sub-conditions are possible. The following combination will only apply if either of the following two bullets applies:
Dutch law applies and the competent court is simultaneously set to Amsterdam; or
the contract value is higher than 5.000 EUR
Please note that the way parentheses are used, is very important. The following example is identical to the previous one, with the exception of the parentheses:
The change in parentheses causes a significant change in meaning, because the sub-conditions between parentheses will be evaluated first, before evaluating the other sub-conditions. The combination of sub-conditions will now only apply if both of the following sub-conditions simultaneously apply:
the applicable law is Dutch
the competent court is Amsterdam AND, in addition, the contract value is higher than 5000 EUR
There is no need to put parentheses within a “chain” of AND sub-conditions. For example:
#applicable-law^name = ‘belgian’ AND #competent-court^location = ‘Brussels’ AND #contract^value > 5000 EUR
Similarly, it is also fine to create a chain of OR conditions without any parentheses.
What is problematic, however, is to chain AND and OR conditions without parentheses. For example:
#applicable-law^name = ‘belgian’ AND #competent-court^location = ‘Brussels’ OR #contract^value > 5000 EUR
should this be understood as: “apply in any of the following situations: (1) Belgian law applies and simultaneously the competent court is Brussels; (2) the contract value is higher than 5000 EUR”, or should it instead be understood as “only apply when both of the following situations apply: (1) Belgian law applies; (2) either the court of Brussels is competent, or the contract value is 5000 EUR”?
There are rules of precedence that dictate how the software will evaluate this combination of sub-conditions. However, these rules are rather counter-intuitive, so that it is always better to uses parentheses with any mix of AND and OR.
NOT sub-conditions should always be surrounded by parentheses. Example:
This combination of sub-conditions will apply when the following combination of situations does not simultaneously apply:
Belgian law applies
the competent court is Brussels
the contract value is higher than 5000 EUR
In other words, this combination of sub-conditions will apply when Belgian law would not apply, or when the competent could would not be Brussels, or when the contract value would be lower than (or equal to) 5000 EUR.
Note that AND / OR can always be converted to each other with the help of NOT:
NOT(A OR B)
is equal to ((NOT A) AND (NOT B))
NOT(A AND B)
is equal to ((NOT A) OR (NOT B))
The previous example with a chain of ANDs can therefore also be converted to a chain of OR, with the operators (= and >) reversed:
#applicable-law^name != ‘belgian’ OR #competent-court^location != ‘Brussels’ OR #contract^value <= 5000 EUR
Please note that Clause9 will stop evaluating a condition as soon as it can.
In the example below, the second part (“beta”) will never be used, because:
either the contract value is higher than 5000, in which case the first part (“alpha”) will be used and the second part subsequently gets ignored
or the contract value is lower than 5000, in which case both the first and second part will be skipped
New users of Clause9 are sometimes confused by this behaviour, but this so-called “short-circuiting” is actually a handy feature you can make use of. For instance, when testing with certain clauses or conditions, you can quickly prepend a true: ...
condition to temporarily avoid that any of the other conditions would get evaluated. In the example below, the second and third part will be completely ignored by the software, because the first part (the short-hand condition true
) will always be true, so the software can immediately stop its evaluation of the condition.
Similarly, you can for safely write
Without the short-circuiting functionality, the software would throw a “divide by zero” error when the interest would happen to be equal to zero. With the short-circuiting functionality, however, you can rest assured that the second limb of the AND will be completely skipped when the interest would happen to be zero, because in such case the software knows that an AND-condition will result in false
as soon as one of its limbs is false.
Of course, the same is not true for an OR-condition: the software needs to evaluate each of the limbs of an OR-expression to search for any limb that happens to be true
.
If you want to start a certain word on the next line, it is not sufficient in Clause9 to simple hit Return/Enter, because Clause9 ignores a single Return/Enter characters, and starts a new paragraph when you insert two or more Return/Enter characters.
You can however insert a forced line-break by inserting two percentage-signs (%%). For example:
The following items will be purchased: %% alpha %% beta %% gamma.
Will be printed as follows:
In Microsoft Word, you can insert a line break by pressing Shift-Enter/Return (as opposed to simply pressing Enter/Return, which will create a new paragraph).
In principle, all paragraphs within the same clause (file) will be styled in the same manner. While you can apply different styling through the “custom styling” settings of a file, all of this custom styling will be applied to all paragraphs.
In most cases, this is exactly what you want. However, there are situations when you want one of the paragraphs to receive a special styling that deviates from the other paragraphs of the same file. For such special situations, you can insert formatting codes between % ... %
, right after the bullet (*) or numbering (1., 2.1., …) of the paragraph. If you want to apply multiple exceptions at once, separate them by comma’s. For example:
It is possible to add deviating styles to paragraphs that are included as internal snippets. However, you then have to make sure that the snippet is treated as an entire paragraph (instead of a mere part of a paragraph) by starting the content with a number. For example, in the code below, paragraph number 1.
must be added to ensure that the % page break before %
is recognised.
Most contracts will contain a signature section, which will typically involve printing a dotted line.
Inserting such dotted line is actually not so easy to do correctly in Microsoft Word.
Clause9 allows you to easily insert such a dotted line, by inserting % signature %
at the start of the paragraph, right after the number or asterisk. This will not only ensure that the dotted line is inserted, but also that sufficient space above & below the paragraph is available to make room for large signatures.
For example,
Will be printed as follows:
Instead of using % signature %
you can also use % dotted %
. This will also insert the dotted line, but does not automatically create space above & below the paragraph.
When you insert a datafield — e.g. #employee^name
— it will be replaced by its value. However, when no value has been assigned yet, the result will be that:
a yellow placeholder box will be inserted when the datafield was used within body text, to invite the end-user to provide a value
the datafield will be replaced by the value undefined
, when used inside conditions and calculations (depending on the condition or calculation, this may or may not lead to an error)
You can reverse this behaviour by adding an exclamation mark just before the datafield-name, e.g. #employee^!name
. Accordingly, the following will happen:
inside body text, in most cases* no more yellow placeholder box will be shown when no value has yet been assigned to the datafield — in other words, the datafield is simply skipped in the resulting text
inside a condition or calculation, a yellow box will be shown, to invite the end-user to provide a value
This exclamation mark helps to resolve the following situations:
in body text, it is not always necessary that a datafield has a value assigned to it, so you may not always want to force the end-user to submit a value
Example: in some countries, only some citizens will have a middle name. When you include something like #employee^first-name #employee^middle-name #employee^last-name
in the body text, you may want to force the end-user to fill in a first name and last name (because those must always be submitted in order for a contract to make sense), but you may not want to show a yellow box for the middle name, because employees with a middle name are an exception in your country. In such situation, the missing middle name will not trigger a yellow box, but it can still be submitted in other ways (e.g., in the data dashboard, or through a question in the questionnaire)
Some conditions and calculations only make sense when a certain value is available. If that value is not available, the calculation should immediately stop, and the user should be invited to submit the missing value.
Suppose, for example, that in a contract with a defined duration, you would like to calculate the termination date through {#contract^start-date + #contract^duration}
. If either the start date or the duration is missing, Clause9 will show a “missing value” error. It will be much more friendly to instead invite the user to submit the missing value — which will be the case when you use {#contract^!start-date + #contract^!duration}
instead.
Careful thought must be given to the combination of an “else” block in a (set of) condition(s) and the use of an exclamation mark. In principle, the text behind the “else” block should be shown in case the other condition(s) in the set are not fulfilled.
However, the exclamation mark forces the user to assign a value to the relevant datafield. This means that the condition(s) will only be evaluated (and the relevant text shown) after the value has been assigned. As a result, the text in the “else” block will not be shown until a value has been assigned to the relevant datafield. Take this into account as this may, in some cases, not be the behaviour you intended.
Tables are collection of cells, organised in rows (horizontally) and columns (vertically). The first row can optionally be assigned the status of a header row, which will be repeated on each page if a table spans multiple pages. All the other rows are called body rows.
In Clause9, a simple table with one header row and is created as follows:
This will result in the following table:
A more complex example:
Some general notes:
Each cell is separated by a double pipe symbol (||).
Rows are separated by a newline (i.e., pressing Enter).
It is no problem for a row to span multiple lines in the text editor, e.g. because there are too many columns to fit on one line of Clause9's text editor.
You can have maximum one blank line between rows of the same table. If you insert at least two blank lines between rows, then a new table will be started.
It is not necessary to line up the double pipe symbols between lines, although it will of course be much cleaner to like at in the editor. In the .DOCX or .PDF file, this will however not make any difference.
The first row will be treated as a header row if it is followed by a divider row that contains cells with either multiple dashes (—-), or multiple equal-signs (====). There should be at least three dashes / equal-signs, but no upper limit applies.
If a column in the divider row contains equal-signs, then all the cells in that column will have a light grey background. In the example above, this is the case for the first column.
Whether the table contains borders, and whether it is left-aligned, center-aligned, right-aligned or instead stretched across the entire width of the page, can be changed in the base styling.
You can automatically reformat how a table looks inside the Clause9 grammar:
by pressing “reformat tables” in the popup-menu at the right side:
becomes
If you want to insert multiple paragraphs into a single cell, you have to use the internal inclusions mechanism. After all, remember that inserting a newline (Enter) would start a new row of the table…
Example:
results in:
The dashes or equal-signs in the divider row can optionally contain a colon (:) before the first dash/equal-sign and/or after the first dash/equal-sign. The presence of these colons will cause all the cells in that column to be left, center or right-aligned, respectively. For example:
:—--
or :===
will cause the cells to be left-aligned
:—--:
or :===:
will cause the cells to be center-aligned
---:
or ===:
will cause the cells to be right-aligned
no colon will cause the cells to receive the general alignment specified in the styling (typically left-aligned or justified).
A cell can optionally span multiple columns. This can be achieved by inserting one or more larger-than symbols (>) immediately after the double pipe (without any space in between).
Example:
will be outputted as:
A cell can optionally be merged with the cell above it. This can be achieved by inserting a caret symbol (^) after the double-pipes. The cell must not contain any other content. Example:
will be outputted as:
Note that horizontal and vertical merging can be combined. The cell that contains the caret will then have the same horizontal merging amount as the above cell it is merged with. Example:
will be outputted as:
Each body row can optionally contain a condition that will determine whether or not the row will be shown. This condition can be any valid condition, needs to be surrounded by curly brackets, and needs to be inserted after the last set of double-pipes. For example:
Example:
In this example, the row with cells gamma and delta will only be shown if the #deal^value data-field happens to be larger than 5000 EUR. If not, the row with epsilon and zeta will be shown.
Similar to rows, columns can also be made conditional, by inserting a condition in curly brackets on the first row of the table. For example:
The first column will not be shown if the #deal^value data-field contains a value lower than 5000 EUR.
A row will be automatically repeated if it contains at least one repeating data-field (hence the name of this type of data-field). The row will then be repeated for as many times as there are values in the repeating data-field. (If multiple repeating data-fields are used, then the repetition-amount will be equal to the amount of the repeating data-field with the largest amount of repeating data-fields)
For example, assume that the #item^name, #item^price and #item^quantity data-fields are all repeating-fields, containing the following values:
#item^name: alpha, beta, gamma and delta
#item^price: 100 EUR, 200 EUR, 300 EUR and 400 EUR
#item^quantity: 1, 2 and 3.
The following table:
will then result in the following output:
Notice that the quantity of delta is not filled in, because the #item^quantity data-field only contained three items.
Do not use repeating fields from multiple concepts in the same row, as this is ambiguous (you will get an error message about “multiple repeating-lists in the same row”). After all, which of the concepts data should then be used to calculate the number of rows?
There is a huge difference between inserting a line break and starting a new paragraph. A new paragraph will insert another paragraph number, and may also receive extra spacing due to the . Conversely, a line break simply moves new text back to the left side of the paragraph, while technically remaining within the same paragraph.
The following formatting codes are available — note that they all correspond to the :
In the “Table Settings” of the (which you can always add to a specific clause through the option) you can specify various options for tables, such as a table’s alignment, width, borders, background and text flow.
align left
left-align the paragraph
align left first line
left-align the paragraph, with the first line indented
align left hanging
left-align the paragraph, with the bullet or number “hanging” at the left
align right
right-align the paragraph
align center
center the paragraph
align justified
justify the paragraph
align justified first line
justify the paragraph, with the first line indented
align justified hanging
justify the paragraph, with the bullet or number “hanging” at the left
indent left xxx cm/mm/pt/i
set the left indentation (or the first line indentation) of the paragraph
bold true
(or simply bold
)
make the text bold
bold false
make the text non-bold
italic true
(or simply italic
)
make the text italic
italic false
make the text non-italic
underline true
(or simply underline
)
underline the text
underline false
remove any underlining from the text
regular caps
print the text with regular caps
small caps
print the text in small-capitals
all caps
print the text in all-capitals
keep with next true
(or simply keep with next
)
keep the paragraph together with the next paragraph, on the same page
keep with next false
don’t force the paragraph to be printed on the same page as the next one
keep lines together true
(or simply keep lines together
)
ensure that all lines of the paragraph are printed together on the same page
keep lines together false
don’t force the lines of the paragraph to be printed together on the same page
line spacing xxx
set the line spacing to the specified amount (as a percentage, e.g. 100, 150 or 200)
page break before true
(or simply page break before
)
ensure that this paragraph is started on a new page
page break false
don’t force this paragraph to be started on a new page
space above xxx cm/mm/pt/i
insert the specified amount of spacing above the paragraph
space below xxx cm/mm/pt/i
insert the specified amount of spacing below the paragraph
space left xxx cm/mm/pt/i
insert the specified amount of spacing at the left of the paragraph
note that any such space will be additional space, added on top of the left-indentation that already happens to apply to the paragraph
space right xxx cm/mm/pt/i
set the right-indentation of the paragraph to the specified amount
font size xxx cm/mm/pt/i
set the font-size to the specified amount (typically in points — pt)
font xxx
(or simply font
)
set the font (xxx
can be Arial, Arial Black, Calibri, Cambria, Courier, Georgia, Gill Sans, Impact, Lato, Lora, Montserrat, Noto Sans, Noto Serif, Palatino, Roboto, Source Sans Pro, Times, Tahoma or Verdana)
font color #xxx
(or simply font #xxx
)
set the font color to the specified colorThe font color is specified in so-called CSS hex format, which is a combination of either 3 or 6 hex characters (a number or a / b / c / d / e). For example, #FF0000 is pure red, while #22B61E is a green variant.
There are numerous websites and software programs that can help you find the right color — see for example https://htmlcolorcodes.com/ or https://www.w3schools.com/colors/colors_hexadecimal.asp
marginal
Inserts a marginal number at the left side of the paragraph (as if @marginal
would have been invoked)
Note that the number will only be shown in body paragraphs or headings for which the numbering is hidden.
seq "xxx"
inserts a sequential number of the specified list-name at the left side of the paragraph (as if @seq(xxx)
would have been invoked)
For example, % seq "figures" %
would insert a sequential number for the increasing list figures.
Note that the number will only be shown in body paragraphs or headings for which the numbering is hidden.
The enabled? tab in a clause file allows you to set conditions that determine whether or not a clause is shown. This means that, when you insert a clause containing an enabled?-condition, you first need to activate said condition to actually show it (unless the document in which the clause is being inserted already has this condition set to active).
This is a useful feature for when you want to:
guide users into inserting the right clauses; or
create a template document or questionnaire that can rapidly switch between alternative clauses.
The enabled? tab works by simply filling out a condition that will act as the key to showing or hiding that clause. If the condition is met, the clause is shown. If it is not met, the clause is hidden.
Since the enabled? tab by definition houses a condition, it is not necessary to surround it with curly braces, as you would normally do for conditions that are contained in clauses. It is also not necessary to provide multiple language versions for the condition as the condition contained in the enabled? tab applies to the entire clause either way, regardless of chosen language.
While it is allowed to use curly braces around the enabled-condition, it is not allowed to use the { condition : body text }
structure within the enabled-condition.
The reason is that when the condition within such structure is met, the result is some body text component. Having a body text component inside a condition is not allowed, because a condition should only consist of expressions that that are true or false (e.g., “contract value > 100” or “gender = ‘male’ “). From the software’s perspective, including body text inside a condition is similar to asking what color Tuesday is, or how many moons can be found in the number 46. It makes no sense, in other words, hence the error.
In this example, the clause on the left-hand side is hidden as is evident from the red strike-through lines. Navigating to the datafields tab, we see that a clause enabler condition is active. The question that the condition poses is whether the agent has an exclusive relationship with the principal or not. Since the user has not yet determined whether this is true or false, Clause9 assumes by default that it is false. If we click the grey question bar, thereby indicating that the condition is true, article 1.3 in this document will be shown.
Do note that adding this extra layer of drafting protection means that you are burdening your users with an additional hurdle to assembling their contract. You will therefore have to think about striking the right balance between intelligence and usability of the clause. Depending on the overarching strategy your organisation has decided to adopt in utilising Clause9, it could be that adding these conditions complicates things for your users and should therefore only be used in limited circumstances.
Documents, binder, clauses and concepts can contain “links”. Links are Clause9's way of making certain types of connections between files.
Links can have any of the following purposes:
mark a clause/document/binder as implementing a certain concept, enabling users to use the link as a cross-reference
mark a clause/document/binder as containing a definition for a certain concept, thereby making sure the (automatically generated) definition list contains a reference to the relevant clause/document/binder
kind of
See the video below for a short overview of how to use alternative clauses:
An additional advantage of using links is that – when searching for a clause/document/binder/concept, you can filter based on the link that the relevant file contains.
Edit the clause/document/binder/concept of your choosing. Go to the links page by clicking Linksin the navigation menu on the right.
On this page, you can see an overview of all existing incoming and outgoing links for that file as well as any implicit alternatives based on existing links.
Finally, choose the type of link you wish to create by clicking the dropdown menu in the outgoing link you just created.
Incoming links are the mirror image of outgoing links. When another file has created an outgoing link to the file you are viewing, it will be listed as an ‘incoming link’ in the latter file.
Example of an incoming link of a concept being implemented by a clause.
Under the ‘links’ pane, you can also find implicit alternatives (if there are any). Implicit alternatives are files that contain the same link. They are “implicit” alternatives since there is no explicit “alternative for” type link. However, in view of the fact that the files contain the exact same link to another file, they can be considered to be alternatives implicitly and will be treated as such by Clause9.
In Microsoft Word, you refer to other clauses by their numbering. In Clause9, how you refer to other clauses will depend on the location of the target — whether this target is located in the same clause file, or whether it is located in some other file.
In the discussions below, the following sample clause is used:
because of preceding articles in a hypothetical document, that clause happens to render as follows:
In the discussions below, we assume that the References Styling for English is set to use “article” for referring to clauses.
To refer to some other numbered sub-clause, you use §number
. For example, to refer to 2. Beta
, you would use §2
. Clause9 will then replace it by a proper cross-reference to that subclause (in the example case “article XI”).
If you want to start this reference with a capital (e.g., at the beginning of a sentence), then use special function @capitalize
. In the example above, @capitalize(§2)
will result in “Article XI”.
It is not possible to refer to numbered sub-clauses across internal snippets. For example, the following will not work:
The reason this does not work, is that each internal snippet can have its own internal numbers, which may perfectly overlap with the numbering of the top-level clause. For example, in the screenshot below, the reference to §1 would be ambiguous if it could also refer to the top-level paragraph.
In contracts, you frequently refer to the clause itself, e.g. when expressing “As set forth below in this clause XXX, the Buyer will …”.
To insert such a reference, you use §this
to refer to the current numbered subclause, and §this-title
to refer to the encompassing title of the entire clause file (assuming that title is currently visible).
For example, if you would insert §this
within 2. Beta
, the reference would become “this article XI”.
When you insert §this-title
, Clause9 will refer to the number of the title associated with the clause file.
To capitalise these cross-references, use a capital T. In the example above, §This
will for example result in “This article 2.1”.
Within a bullet (asterisks) list, you can refer to the current bullet using §*
, the next bullet with §*+
and the previous bullet using §*-
.
Concepts are the most powerful method to refer to clauses outside the current clause file. When using §#concept
, Clause9 will replace that part of the text with a cross-reference to the first clause that implements that clause, i.e. that contains an implements link towards that Concept.
This is a very powerful mechanism, because it allows you to create cross-references on a subject-basis instead of on a numbering-basis (as is the case in Microsoft Word, which causes much more brittle cross-references). Clause9 will even be as helpful to show a list of those clauses that are accessible to the user and implement the specified concept, when no such clause is yet available in the document.
Using concepts and §#concept cross-references is the recommended approach, because it allows you to create a central repository of clauses that implement certain legal subjects.
Sometimes, however, the concepts-approach is somewhat burdensome, because it does require you to create a concept for each and every cross-reference you want to establish towards other clause files.
If all you want is a simple, one-time cross-reference to some specific clause in your document, it is probably easier to use the so-called cross-tags:
Assign some cross-tag (e.g., “liability”) to the target clause, using the cross-tags section of the clause. Don’t use any spaces inside a cross-tag.
Insert a cross-reference to that cross-tag in some other clause using §tag
(e.g. §liability
).
To capitalise these cross-references, start them with a capitalised letter. In the example above, §Liability
will for example result in “Article 2.3” if that article happens to implement tag liability
.
You can insert a cross-reference to the definition of a concept using §$#concept
.
Similar to cross-references to other clauses, you can refer to other subdocuments with a hashtag. For example, if some subdocument is specified to implement Concept #pricing, you can refer to this subdocument with §#pricing
.
Note that several settings determine the way references are styled:
the word to use (e.g., in English, article vs. clause vs. section)
how you refer to clauses in other subdocuments (i.e., whether & how the title of that other subdocument should then be shown)
whether to use the title between parentheses after the target article’s number — e.g. “see article 5 (liability)“. Note that such part between parentheses will only be inserted if §#concept
or §tag
references are used, and if the target clause effectively contains a visible title.
“Position” is one of the properties of clause files. It can be used to suggest the appropriate positioning of a clause to users of the clause.
A clause can be assigned an (approximate) preferred position within a document. Five types of preferred positions are possible:
at the very beginning of a document
towards the beginning
somewhere in the middel
towards the end
at the very end
When a preferred position has been assigned to a clause, a user wanting to insert that clause in his/her document will be able to choose “automatic position” instead of the standard options for inserting clauses.
“Automatic position” will be suggested when inserting a clause with a preferred position.
When editing a clause, navigate to Position in the navigation menu on the right hand side. You can now select one of the five options listed above for your clause.
Dropdown list to choose a preferred position.
If you want the clause to no longer have a preferred position, pick choose “N/A”.
Snippets are ways of making writing new clauses more efficient and/or more readable. They are re-usable pieces of text that can either be used inside one clause (internal snippets) or as part of all clauses (external snippets).
Snippets work similar to variables in mathematics or programming languages. They are referenced by a name and represent a piece of text.
Internal snippets are pieces of text that can be used multiple times inside the same clause. They will not be available outside the clause where they are defined.
Internal snippets are defined at the bottom of a clause as follows: NAME-SNIPPET = content snippet
. Insert the name by which you want to refer to the snippet in all caps, e.g. NAME-SNIPPET. Then, after the equals symbol (=
), insert the text you want to be inserted in all places where the snippet is referenced.
Referring to an internal snippet (i.e. showing Clause9 where the snippet text should be placed) is done by taking the name of the snippet and adding an “at” symbol @
. For example:
Will result in the following:
Snippets may contain all types of text, datafields or conditions. They can even refer to other (internal or external) snippets, making multi-tiered snippets possible.
Always leave at least one blank line between each definition of an internal snippet.
External snippets are similar to internal snippets. They are, however, defined and referenced differently.
Because an external snippet should be made available to all clauses inside your library, it should be defined outside a normal clause. It is defined by creating a normal clause which will be used as a kind of special purpose vehicle.
Enter the text for your snippet as the clause’s content body.
While internal snippets are referenced by simply adding a @
-prefix, external snippets are referenced differently. After the @
, a hashtag has to be added as well: @#
. For example: @#external-snippet
.
Snippets can make writing clauses more efficient and consistent. Using snippets, you can easily create a piece of text that is used in many spots at once. This also saves time when that piece of text must be changed or updated: just change the snippet and all places where that snippet is referenced will automatically incorporate that change (which is much the same way a library clause functions).
A snippet can also make reading clause grammar more easy. For example, conditional text may become very complex if multiple conditions have to be evaluated at the same time. Long/complex grammar may make the structure of the clause grammar difficult to read. Replacing the most complex bits of grammar with snippets will improve readability.
This may not be obvious at first sight, but you can actually use snippets within snippets, any level deep. For example, you can write:
From a mental point of view, all these snippets facilitate easier reading, because you don’t have to nest conditions and curly braces, which becomes difficult to keep track of as from the second level deep.
Although you can go any level deep, you should be aware not to introduce circular references between snippets — e.g., snippet @A incorporating snippet @B, while snippet @B incorporates @C, and @C on its turn incorporates @A. This last part would cause an endless cycle that will cause an error.
The following grammar is rather difficult to read:
Using internal snippets, we can improve this grammar:
Alternatively, using external snippets, we would have the following three clauses:
A snippet called cps-seller:
And a snippet called cps-purchaser:
These final two external snippets can be used in other clauses as well by using the references @#cps-seller
and @#cps-purchaser
.
While most snippets will contain text, it is also possible to use snippets as containers for data-values and calculations. For example:
Instead of repeating the fairly complex interest-calculation all over the contract, you can store it in an (internal or external) snippet and reuse it.
Internal snippets cannot only store values and expressions, but also conditions. For example, instead of repeating the same logic over and over again:
…. you can store the condition in an internal snippet, and reuse it everywhere, thereby increasing readability and consistency:
Sometimes it is useful to switch between values in the middle of a calculation.
For example, assume that in a certain contract the price of the tomatoes that are sold, depends on the country, the weather and the volume:
price = base-price * country-factor * weather-factor * volume
If, for example, there are 4 possible countries (NL / FR / DE / UK) and 3 possible weather-conditions (dry / humid / stormy), you would end up with a huge number of if/then/else parts:
In such situations, it is much cleaner to use the following:
Another possibility is to use the @switch
special function. However, when the amount of cases gets high, it is probably cleaner to split calculations in several parts, using the if/then/else constructs above.
For even greater reuse of text blocks, you can optionally use placeholders (called 'parameters') in both internal and external snippets.
For legal experts who are first confronted with this idea, this will seem like a far-fetched idea. However, its usefulness should quickly become clear with the use of some examples.
Assume that you have a datafield #employee^gender
that can either contain "female"
or "male"
as a value. In your paragraphs, you want to alternate between “Mr.” and “Mrs.”, depending on the gender. This is of course very easy:
Let’s make this a little bit more complex. Assume that you not only have #employee^gender
, but also #manager^gender
and #consultant^gender
, and you also want to alternate between “Mr”. and “Mrs.” for these datafields:
This is still easy, but quickly becomes quite verbose, with a lot of repetition. The structure of the three conditions is actually identical, the only difference is the datafield that is being referenced.
To avoid this repetitiveness, you can use placeholders within a snippet:
As you know by now, the software will replace each reference to @MR-MRS
, by the contents of the snippet. If you also specify one or more placeholders between parentheses, then the software will additionally replace each placeholder with the specified content.
For example, @MR-MRS(?GENDER := #employee^gender)
will be converted into {#employee^gender = "female": Mrs. | else: Mr.}
, because the ?GENDER
placeholder within the snippet is being replaced with the value #employee^gender.
As a result, you can use the very same snippet for three different datafields, by having the software swap the placeholder.
You can also use multiple placeholders for snippets. For example, let’s also include the last name in the snippet:
In this short paragraph, this may not seem like a huge advantage. However, from a maintenance perspective — particularly when using external snippets — this is a significant improvement, because the way that a person’s title and name are being represented, can then be centrally organised. If ever you want to change the way persons are inserted in the documents (e.g., a new corporate policy would require to say “MR. SMITH” instead of “Mr. Smith”) then you only have to change one small piece of text, instead of having to “hunt” in many different files for potentially hundreds of instances.
To reduce the amount of text you have to insert, Clause9 allows you to omit ?PLACEHOLDER :=
The example above can thus be shortened to:
When no explicitly named placeholders are being used, Clause9 will assume that your placeholders are being named ?A
, ?B
, ?C
, … corresponding to the first, second, third, … parameter in the invocation of the snippet.
Action buttons are a good way of making a clause more user friendly in documents. They can have three functions:
execute a saved search
browse a folder of your choosing
present preselected clauses
This way, when the clause with the action button was included in a document, the action button gives the user a shortcut to add further relevant (sub)clauses to the document.
Start editing a clause (either in the Browse Files mode or in Assemble Document). In the navigation menu on the right, go to Action Button.
button caption — Create a caption for the button (i.e. the text that will be visible on the button), optionally in multiple languages.
button position — Where the button should be positioned relative to this clause’s subclauses.
hide button when — The button can optionally be hidden when at least one subclause exists.
action — Choose one of the three options described above.
Action buttons are especially suited for use when a clause can have several optional subclauses.
When there is a high number of optional subclauses, it is preferable to use the option to browse to a folder. The contents of that folder can be easily managed (by removing or adding clauses to it) as well.
You will be able to quickly see whether a clause is subjected to an enabled? condition if you have switched on the “invisible clauses” option under the assemble documents menu contained under the menu on the right-hand side of the Assemble Document screen. Disabled clauses will then be shown as struck through in red. If you select such a clause and then navigate to the Datafields tab of your operations panel, you can see which condition(s) is(/are) included in the enabled? tab by selecting clause enablers. For example:
mark a clause as an alternative, making it easy to switch to an alternative clause in Assemble Document mode by clicking the button next to the clause
Hit in the search pane to add the link filter. Select the type of link you are looking for in the dropdown list and choose the file that the link is pointing to.
Click and Clause9 will show you all files containing the link you selected.
Outgoing links are the links created in the file you are editing. You can create a new (outgoing) link by hitting and choosing the file you want to link to in the browser that pops up.
An example to illustrate: let’s say in your Clause9 library you have two clauses containing a purchase price provision. Both of these clauses contain an “implements” link to the “purchase-price” concept that you created as well. In view of the fact that both of these clauses implement the same concept, Clause9 considers these clauses to be ‘implicit alternatives’. When implementing either of these clauses in a document, you will be shown the icon to switch between the different alternatives.
Hit to save your changes.
Naming an external snippet follows the same rules as the naming of . The file name of the clause that will serve as an external snippet may, e.g., not contain any spaces as that would make referring to the external snippet impossible (see below). It is not necessary to use all caps when naming an external snippet.
Note: When storing a value or calculation in an external snippet, you should wrap it in curly braces { ... }
to avoid that the contents of the snippet would be treated as clause text. (As explained in , clause text cannot be used to perform calculations.)
It is not possible to use external snippets for storing conditions. If you want to reuse conditions across clauses, you can however use .
Note that you have to wrap the numbers within curly braces, otherwise they would be treated as text (see the for an explanation), so that an error would be produced.
Click .
Example:
When no shrinking is applied, the existence of the special function will simply be ignored, and this clause will be shown in full:
The Supplier will acknowledge and agree that timing is of the essence.
However, when full shrinking is applied, the part within the special function will be dropped:
The Supplier will agree that timing is of the essence.
The typical use case of the clause shrinking feature is to hide text that can be assumed to add relatively little legal content to a paragraph. This may, for example, be the case with:
sentences that are inserted “for the avoidance of doubt”
synonyms of words that are mainly inserted because of legal tradition
text for which all the words may be mandatory / recommended under a certain jurisdiction, but that would be considered extraneous in other jurisdictions (e.g., under many continental European law systems, “acknowledge and agree” instead of simply “agree”)
This way, you can create alternative versions of a single clause, without having to create separate “light”, “medium”, “strong” versions.
Similarly, while datafields can be used to achieve similar effects (and much more), they require more effort to insert.
Clause9 currently allows up to four levels of nested superfluousness-text. Shrinking level 1 will discard any text within the @superfluous
call, while shrinking level 2 will also show the text within the first call, and shrinking level 3 will also show the text within the second (i.e., inner) call. And so on.
By way of example:
This will result in the following possible paragraphs:
Shrinking level 1 — The Supplier will agree that timing is of the essence.
Shrinking level 2 — The Supplier will acknowledge and agree that timing is of the essence.
Shrinking level 3 — The Supplier will explicitly acknowledge and agree that timing is of the essence.
Shrinking level 4 — The Supplier will explicitly and before the commencement date acknowledge and agree that timing is of the essence.
Full text — The Supplier will explicitly and, if so requested by the Client, before the commencement date acknowledge and agree that timing is of the essence.
The shrinking level applies to all clauses within a clause file. However, to allow a shrinking level to be applied to many clauses at once, the shrinking levels are inherited between clause files, except if a descendant would define its own shrinking level.
For example, assume that in the following example the five clauses (Alpha, Beta, Gamma, Delta and Epsilon) are all stored in separate files.
Assume that Alpha is set to shrinking level 1. Then both Beta and Gamma will inherit this shrinking level (because they are the descendants of Alpha), and will thus also show their text at shrinking level 1. Delta, on the other hand, is a sibling of Alpha, and will therefore not inherit the shrinking level of Alpha. The same applies to Epsilon.
Now assume that Beta is set to level 3. This will cause its descendant Gamma to also show its text at level 3, except if Gamma would define its own level. Note that changing the level of Beta or Gamma will never impact Alpha, Delta or Epsilon.
If no clause is selected when changing the shrinking level, then the shrinking level of the entire document will be set. Note that the document acts as an ancestor of all clauses, so that — except if some clause (or one of its ascendants) would define its own shrinking level — all clauses will inherit the shrinking level of the Document. This allows you to quickly “compress” a document.
Avoid superflousness-calls at the beginning of a sentence: if such part would get omitted, then the remaining part of the sentence would be shown without a capital.
Be aware that, if several sets of square brackets would be used in a single clause file, all of those sets will show and omit their text in lockstep.
If you want a table to deviate from the styling settings applied at a higher level (e.g., the level of a clause, document, or user defaults), you can insert an optional very first row, in which the only cell contains one or more (each separated by a comma) of the settings listed in this article between % … %.
align left, align right, align center or align full width — set the alignment
align left, align center and align right can be followed by a number between 1 and 100 to set the relative width vis-à-vis the page (e.g., align right 30 results in a right-aligned table of 30% page width)
background #hex — sets the background of the table — i.e., every cell but the cells of the header row and header columns — to the specified color
for example, background #00ff00 would set the background color of those cells to pure green
borders amount unit — sets the width of the outside borders
for example, borders 5px sets the four outside borders to 5 pixels
borders #hex — sets the color of the outside borders to the specified hex color
for example, borders #aabbcc would set the colors of the outside borders to blueish gray
borders true and borders false enables or disables the outside borders
borders horizontal/vertical amount unit — sets the width of either the horizontal lines between each row or the vertical lines between the columns
for example, borders horizontal 1mm would set each inside horizontal line to 1 millimeter
borders vertical 0 would remove the inside vertical lines
borders horizontal/vertical #hex — sets the color of either the horizontal lines between each row or the vertical lines between the columns
for example, borders vertical #fff would set each inside vertical line to white
cell padding left/right/top/bottom — sets the inner padding for each cell
distribution auto — results in a table with an automatic width, determined to fit its contents
distribution evenly — results in a table where all the columns have an equal width
distribution 10, distribution 20, distribution 30 or distribution 50 — results in a table where the first column has the specified relative width percentage, while all the other columns equally share the rest of the available space
for example, distribution 10 in a table with four columns would result in a table where the first column has 10% of the width, while the second, third and fourth column would each have 30% of the width
distribution x/y/z… — results in a table where the first column has width x%, the second column relative width y%, the third column relative width z% etc.
for example, distribution 20/30/40/50 results in a table where the first column has 20% width, the second 30%, the third 40% and the fourth 50%
header background #hex — sets the background-color of the header rows and header columns (i.e., columns for which a ======= was inserted in the divider row)
for example, header background #aaa would set the header background to medium gray
indent — sets the table’s left indent amount (relative to the indent type described below, e.g. calculated from the paper’s left margin or the previous heading’s left margin)
indent from left side — sets the table’s left indent type to the paper’s left margin
indent from heading — sets the table’s left indent type to the preceding heading’s left side
indent from heading text — sets the table’s left indent type to the preceding heading’s text position (i.e., after the heading’s number, if any)
indent from body — sets the table’s left indent type to the preceding body paragraph’s left side
indent from body text — sets the table’s left indent type to the preceding body paragraph’s text position (i.ie., after the body’s bullet, if any)
indent from paragraph — sets the table’s left indent type to the preceding paragraph’s left side (which can be either a heading or a body paragraph)
indent from paragraph text — sets the table’s left indent type to the preceding paragraph’s text position (i.e., after the number of bullet)
width x — sets the width of the table relative to the page
for example, width 30 sets the width to 30% of the page width
Clause9 also allows you specify the styling of several cells at once, by specifying a location and a styling.
The locations can be any of the following:
top left cell, top right cell, bottom left cell and bottom right cell
first row refers to all the cells of the top row
last row refers to all the cells of the last row
first column refers to all the cells of the leftmost column of the table
last column refers to all the cells of the rightmost column of the table
odd rows refers to all the cells of every odd row (i.e., the first row, third row, fifth row, etc.)
even rows refers to all the cells of every even row (i.e., the second, fourth, sixth, etc. row)
odd columns refers to all the cells of every odd column (i.e., the first, third, fifth columns, etc.)
even columns refers to all the cells of every even column (i.e., the second, fourth, sixth, etc. column)
The styling can be any of the following:
italic true / false sets the style to italic (you can also leave out the true, it is implied)
bold true / false sets the style to bold (you can also leave out the true, it is implied)
underline true / false sets the style to underlined (you can also leave out the true, it is implied)
font #hex sets the font color
font font-name sets the font family (font-name can be either Arial, Arial Black, Arial Narrow, Cambria, Calibri, Courier, Georgia, Gill Sans, Impact, Palatino, Tahoma, Times, Trebuchet or Verdana)
background #hex sets the background-color of each cell
border left/right/top/bottom #hex sets the color of the specified border, while border #hex sets the color of all four borders at once
border left/right/top/bottom amount unit sets the width of the specified border, while border amount unit sets the width of all four borders at once
borders horizontal/vertical #hex sets the color of either the horizontal lines between each row, or the vertical lines between each column
borders horizontal/vertical amount unit sets the width of either the horizontal lines between each row, or the vertical lines between each column
The following code sets the first row to bold, not underlined, with a red background and white letters: (The underline false is only relevant if some other styling setting with less precedence — e.g., the default styling of the company — would specify underlining by default.
The following code sets the width of the left border of the top row to 4mm and ensures at the same time that all the cells of the last row will have a red background:
Enumerations (French: énumération / Dutch: opsomming / German: Aufzähung) are used to create lists of items. Depending on the applicable styling settings for enumerations and the content of each item, those items will then be formatted either as an “inline” list of items, or as a bullet-list, as shown in the next example:
You may wonder why you would want to use the special enumeration code, instead of manually typing in the items. The benefits of using the special codes include:
The formatting will be automatically determined, through a combination of the length of each item and the applicable styling settings for enumerations. Without having to change legal content, you will be able to accommodate both users who want a traditional list of romanette items — (i) … (ii) … (iii) … — and users who want a more modern, bullet-style list.
You will never have to worry again about numbering: Clause9 will automatically ensure that the right numbers are inserted, sequentially, without any gaps or duplicates. If a certain item is subjected to a condition that happens not to be fulfilled, then that item will not be shown, and all numbers following it will be adapted accordingly.
Suffixes are automatically inserted: depending on the chosen styling settings for enumerations and the type of list, a semicolon, full stop (.), &, “and”, “or”, or “and/or” will be inserted.
The basic structure of an enumeration is as follows:
{ AND | item1 | item2 | item3 }
Right after the opening accolade you have to choose the type of enumeration — AND, OR, AND/OR or LIST. This will respectively result in a list that uses suffix “and”, suffix “or”, suffix “and/or”, or no suffix at all after the item(s).
You can also choose AND-SKIPFINAL, OR-SKIPFINAL, AND/OR-SKIPFINAL or LIST-SKIPFINAL as the enumeration type. If the enumeration happens to get outputted as a bullet-list, then the final item will not get a suffix. The example above (if it would happen to get printed as a bullet-list) would then look as follows:
In principle, whether an enumeration is printed inline or as bullets, depends on the applicable styling settings for enumerations. However, you can force an enumeration to always be printed as bullets — so irrespective of the layout-settings — by adding an exclamation-mark after the list type. For example:
{ AND! | item1 | item2 | item3 }
{ AND-SKIPFINAL! | item1 | item2 | item3 }
Each item should be separated by the pipe symbol ( | ).
Right after the pipe symbol, you can optionally insert a number. If the enumeration then happens to get printed as an inline list, each item of the enumeration will be preceded by a sequential number. For example:
{ OR | 1. alpha | 2. beta | 3. gamma }
as an inline list, this will result in the following output (assuming that romanettes are chosen in the styling settings for enumerations):
(i) alpha, (ii) beta; and (iii) gamma
If you subject the content of an item to a condition, then the item may get skipped, depending on whether the condition is fulfilled. Clause9 will automatically ensure that the right numbering is used. For example:
{AND | 1. {#employee^gender = "male": alpha } | 2. beta | 3. gamma }
If #employee^gender happens to be false, then the enumeration would be shown as follows (assuming that the styling settings allow for an inline list):
(i) alpha; (ii) beta; and (iii) beta
If, instead, #employee^gender happens to be true, then the enumeration would get printed as follows:
(i) beta; and (ii) beta
Enumerations can also be created using one of the following special function calls:
@enumerate — taking as a parameter a list. Whether the enumeration is printed inline or as bullets, depends on the styling settings and the contents of the items.
@bullets — like @enumerations, but always prints the enumeration as a bulleted list, similar to using an exclamation mark after the list type
Both special functions have some variations (see @bullets-and,
@enumerate-numbered
, etc.)— see the detailed explanations for both functions.
Using these special functions is most useful when the items you want to print, happen to be stored in a datafield. For example, if #employee^items-to-return is a datafield that contains a list of items to be returned, then @enumerate-numbered-and
would print such list as follows (assuming that inline printing applies per the styling settings):
(i) key card; (ii) confidential documents; (iii) car; and (iv) car keys.
If your clause should contain actual bullets (i.e. with asterisks), you can still force the bullets into an enumerated list by inserting * AND
or * OR
as the very first bullet. For example:
When a part of a paragraph is wrapped in @superfluous
, users of the clause can shrink down the clause with the Shrink or expand text button of the menu in the upper right corner, in order to hide that wrapped part.
In the actual document (left side) of Assemble Documents, it is possible to show green indicators, by enabling “clause shrinking opportunities” in the options button at the right side of the toolbar. By default, these indicators are not shown.
Thanks to Clause9's centralised approach, any change in a library clause will immediately show up in all documents and binders that make use of that clause. Usually, this is exactly what you want, because it avoids that you would have to apply the same change in many different files, as is the case in Microsoft Word and other template-based editors.
While you can easily create a copy of a library clause, modify that copy and then use that modified copy it in future contracts, it can be very useful to indicate that certain clauses are historically linked to each other. This is what clause versioning is all about in Clause9.
A typical use case for clause versioning is when legislation changes — e.g., a certain requirement becomes blacklisted, or a certain duration is extended from 6 months to 2 years. Another use case is when internal policies change — e.g., the default payment term is shortened from 2 months to 1 month.
Clauses are not versioned by default: you explicitly need to initiate the versioning. You do so by clicking on the versioning button (right side of the clause editor).
You will then see the following popup, from which you choose the bottom option Initiate Versioning
Next, you need to specify a name for this version, which — presumably — will be the old version. A potential name is, for example, “June 2020 version”.
When you save this version, the version name will be shown in green in the file browser:
You can then create another version of the same file by, once again, clicking on the versioning button. In the popup that appears, choose “create new version”.
Clause9 will then create a new version of the file. This new version will, by default, receive the current date as its version name, but you can change it to any name that makes sense.
Note that the newly created version is not yet set as the active version. In the file browser, the new version will therefore be shown with a grey label.
In order to set a certain version as the active version, click on the versioning button and choose “set as the active version”:
From a technical point of view, each version of a clause is essentially just a clause. Anything you can do with a regular clause (insert in Assemble Document, move, delete, rename, etc.), you can also do to versioned clauses.
The only special feature of a versioned clause is that it contains a version-link to its other versions, which is visible in the file browser by way of the green or grey version label. Also, by choosing Show other versions, you can open the other versions in Browse files.
Another special behaviour is that the Search pane contains a checkbox all versions that allows you to specify whether all versions of a file should be shown (assuming they each meet the search criteria), or whether instead only the active version should be shown.
Except for their grey label, old versions of a file are regular files that behave like any other files. In other words:
they can still be inserted into documents by users
they can still be modified (whereby their changes will immediately be reflected in all documents that make use of them)
they can be moved independently to other folders, irrespective of the location of the other versions
Accordingly, the mere act of labelling a clause as an old version, will not cause it to become immutable — so changes are still possible if a user has the right to do so. If you really want to avoid that an old version gets changed, then change its access rights, e.g. by moving it to a write-protected folder.
It is probably a good idea to move old versions to a separate folder, e.g. called “archived versions”.
Clause9 allows you to easily create automatic cross-references to other parts of your document. However, there are a few situations when you want to refer in an abstract way to an “article” or “section” of your document. Examples:
The buyer shall buy the assets in the manner set forth in the articles above.
or
The articles of this contract shall be construed in accordance with …
You may be tempted to hard-code the word “articles” here. However, this may impede reusability, as some lawyers will want to use the word “section”, “paragraph”, or perhaps an abbreviation such as “art.”, or perhaps a word that always has a starting capital.
Clause9 allows you to instead use a special expression, that will output in accordance with the styling settings found under “References”.
The special expression essentially consists of the word “article” (for singular) or “articles” (for plural), but actually depends on the language:
Bulgarian
__клауза_
__клаузи_
Czech
_bod_
_body_
Danish
_klausul_
_klausuler_
Dutch
_artikel_
_artikels_
English
_article_
_articles_
Estonian
_klausel_
_klauslid_
Finnish
_lauseke_
_lausekkeet_
French
_article_
_articles_
German
_artikel_
_artikeln_
Hungarian
_záradék_
_záradékok_
Italian
_clausola_
_clausole_
Latvian
_klauzula_
_klauzulas_
Lithuanian
_straipsnis_
_straipsniai_
Norwegian
_klausulen_
_klausulene_
Polish
_klauzula_
_klauzule_
Portuguese
_cláusula_
_cláusulas_
Romanian
_clauza_
_clauzele_
Russian
_пункт_
_пункты_
Slovak
_doložka_
_doložky_
Slovenian
_klavzula_
_klavzuli_
Spanish
_cláusula_
_cláusulas_
Swedish
_klausul_
_klausulerna_
By default, the word will be outputted with a defined article (no pun intended), but this can be modulated in the same way as concepts. For example, for English, assuming the styling setting is set to “Section”:
default: _article_
is outputted as “the section”, while _articles_
is outputted as “the sections”
omitting: _-article_
is outputted as “section”, while _-articles_
is outputted as “sections”
undefined: _?article_
is outputted as “a section”, while _?articles°_
is outputted as “sections”
this: _°article_
is outputted as “this section”, while _°articles_
is outputted as “these sections”
The _article_
expression can be useful in a few very specific circumstances. However, its use cases are actually fairly limited:
Please do not use it to hard-code references to other parts of your document — e.g. when you would be tempted to write ... as set forth in _-article_ 13.5
to refer to some article 13.5 in your document, you will almost certainly want to use real cross-references instead.
Please do not use it to refer to articles/sections/clauses of external material, such as legislation, as the word that will be outputted will then change in accordance with a user’s styling preferences.
For example, European Directives and Regulations are typically numbered as “articles”. If you need to refer to the part of the EU General Data Protection Regulation that lists all the definition, please do not say ... as defined in _-article 4_ of the GPDR ...
, as this could get outputted as “… as defined in Section 4 of the GDPR”, depending on a user’s styling preferences. This is one of the few areas where you really need to hard-code your reference, by simply stating .... as defined in article 4 of the GDPR...
One of the most powerful features of Clause9 is its grammatical knowledge, which allows you to automatically conjugate articles, verbs, adjectives and nouns to accommodate changes in conceptlabels.
This page explains how to use these conjugations within the Clause9 grammar.
The basic idea is that you wrap both the #concept and the word that potentially needs adjustment in <angular brackets>. When the concept-label of the concept changes, the adjustments will then be automatically made (if no ambiguity exists).
For example:
<#Buyer> <negotiates> a deal
will be printed as “The Buyer negotiates a deal” in singular, and as “The Buyers negotiate a deal” in plural
<#Buyer> <sells> <his> assets
will be printed as “The Buyer sells her assets” in singular female, and “The Buyers sell their assets” in plural.
There is no need to wrap a verb/article/adjective/… in angular brackets when you can determine in advance that it will never change, either because of grammatical reasons of because of contractual/legal reasons. For example:
In English, a verb in the infinitive or the present continuous tense will not change when the subject (noun) it is associated with, would change. For example, “He is singing” and “They are singing” both use exactly the same present continuous “singing”. Similarly, an auxiliary such as “will” — unlike has/have — does not need to change when its subject changes from singular to plural, so does not need to ever be wrapped in angular brackets.
In many contracts, it will not make sense to anticipate that a certain concept will ever be put in singular or plural (or male or female). For example, if a company always delivers at least 100 kilogram of apples, there is no need to anticipate the singular version of “apple” in the delivery-clause.
For language such as German and Lithuanian that support cases — nominative, genitive, dative, accusative, instrumental, locative — you can add the case after the concept.
For example <#Buyer: g>
or <#Buyer: genitive>
would indicate that the concept’s noun should be conjugated in the genitive case. Similarly, you can also write <adjective: #buyer g>
to associate a certain adjective with the concept #buyer
, but also put the adjective in the genitive form. Third example: <pronoun: #buyer a 2>
would put a certain pronoun in the accusative plural, taking the gender from the #buyer
concept.
If you want to spell out the cases completely, please consult the following table:
Bulgarian
nominative – dative – accusative
Czech
nominativ – genitiv – dativ – akuzativ – lokal – instrumental
Danish
nominativ – genitiv
German
nominativ – akkusativ – dativ – genitiv
Greek
nominative – genitive – accusative
Estonian
nominatiiv – genitiiv – partitiiv – illatiiv – inessiiv – elatiiv – allatiiv – adessiiv – ablatiiv – translatiiv- terminatiiv – essiiv – abessiiv – komitatiiv
Finnish
nominatiivi – genetiivi – akkusatiivi – partitiivi – inessiivi – elatiivi – illatiivi – adessiivi – ablatiivi – allatiivi – essiivi – translatiivi – instruktiivi – abessiivi – komitatiivi
Croatian
nominativ – genitiv – dativ – akuzativ – lokativ – instrumental
Hungarian
nominative – accusative – dative – instrumental – causal – translative – terminative – essive – inessive – superessive – adessive – illative – sublative – allative – elative – delative – ablative
Lithuanian
nominative – genitive – dative – accusative – instrumental – locative
Latvian
nominativs – genitivs – dativs – akuzativs – lokativs – instrumentalis
Norwegian
nominativ – genitiv
Polish
mianownik – biernik – wolacz – miejscownik – celownik – dopelniacz – narzednik
Romanian
nominativ – genitiv – acuzativ – dativ
Russian
nominative – genitive – dative – accusative – instrumental – prepositional
Slovak
nominativ – genitiv – dativ – akuzativ – lokalny – instrumental
Slovenian
nominativ – genitiv – dativ – akuzativ – lokalni – instrumental
Swedish
nominativ – genitiv
Turkish
nominative – accusative – dative – locative – ablative – genitive – instrumental
Instead of using the angular brackets to enforce a certain case, you can also use the @case
special function. For example, @case(#Buyer, "g")
or @case(#Buyer, "gen")
will roughly have the same effect as <#Buyer: g>
or <#Buyer: genitive>
. However:
Unlike the <...>
, the @case
special function can be combined with other special functions, while still ending up as a defined term that can serve as the input for other special functions. For example, you can write either @plural(@case(#Buyer, "g"))
or @case(@plural(#Buyer), "g"))
to ensure that a certain concept-label is forced into the genitive plural. You can then “feed” that construction into yet other special functions — e.g. @uppercase
(@case(@plural(#Buyer), "g")))
would cause the concept-label to be shown in genitive, plural, uppercase.
While it is possible to write <#Buyer: g 2>
to force the buyer’s concept label into the genitive plural, it is not possible to feed that structure into other special functions, such as @uppercase
Native speakers often do not know the grammatical case of words in their mother tongue. To help you finding the grammatical case of a certain word, Clause9 offers an artificial intelligence (AI) based grammatical function estimator.
In languages with cases, you can click on the Grammatical estimation button, and then position your cursor on any word. Below the input box, you will then see the estimated grammatical case (and gender, number, etc.) of the word.
You can force the use of singular or plural by inserting the number 1 (for singular) or 2 or 3 (for plural) after the colon.
For example, <#buyer: 2>
would force the buyer to be put in plural (similar to what @plural(#buyer)
would achieve), while <#buyer: gen 2>
would force the buyer to be put in both plural and the genitive case. You can also apply this to verbs/adjectives/pronouns — for example, <#buyer: 2> <has: buyer 2>
would force both the concept and the verb (to have) to be put in plural.
Real-life clauses are usually more complex than the two simple examples above.
A first obstacle is that multiple concepts may be present in the same clause, which cause ambiguity: does the verb causes have to conjugate with buyer or seller in the example If <#buyer> <causes> <#seller> to ...
?
Clause9 offers two different solutions to group words together:
You can use multiple angular brackets to associate a concept with other words — e.g. If <<#buyer>> <<causes>> <#seller> to ...
.
You can theoretically use any number of angular brackets, but in practice you probably want to limit this to three levels at most.
You can explicitly type in the concept after each associated word — e.g. If <#buyer> <causes: buyer> <#seller> to ...
It is possible but not necessary to type in the hashtag. So both <causes: #buyer>
and <causes: buyer>
are OK in the second example above.
Conjugating a verb is the most typical scenario. However, depending on the language, conjugating other types of words can also be useful:
Articles — while Clause9 allows you to configure, at the level of the concept-label, which article to use (a / the / this / no article), there are situations when the article and the concept are separated from each other — e.g. <this> considerable <#defect> shall be fixed
will become “these considerable defects shall be fixed” in plural.
Adjectives (currently only supported in French) — e.g. <ce: objet> <grand> <#-objet>
will be printed as “cette grande Table” for concept-label “Table”.
Pronouns — e.g. <#Employee> shall convert <his> assets
Nouns — e.g. #Supplier shall deliver the goods to <#employee>. <This> <person> shall then subject the goods to a quality-inspection.
will print as:
singular employee: “Supplier shall deliver the goods to the Employee. This person shall then subject the goods to a quality-inspection.”
plural employees: “Supplier shall deliver the goods to the Employees. These persons shall then subject the goods to a quality-inspection.”
If multiple words that require conjugation are next to each other, then you can group them together.
For example, instead of writing the following in German:
you can also write the following, shorter version:
Specifically for German, where certain prepositions always invoke a certain case in certain constructions, you can also include the special proposition within the group, and leave out the trailing case marker (“g” in the example above):
In both examples, the result will be conjugated with the genitive case: … wenn dies wegen des zweiten Käufers geschieht, dan …
The grammatical function of a word is often ambiguous. For example, in English, the word “table” can be both a noun and a transitive verb (“to place on the agenda”). <#Employee> shall sell <her> car
Unfortunately, software cannot determine a word’s grammatical function with 100% certainty. As even the most advanced artificial intelligence makes mistakes in this area — particularly in languages other than English — you will need to help Clause9 to determine the word function.
Tip: often you can avoid ambiguity by putting a non-ambiguous conjugation of the word between the angular brackets. For example, stating <#Employee> shall sell <her> car
is ambiguous, because the word “her” can be both an indirect object (female equivalent of “him”) and a possessive pronoun (female equivalent of “his”).
It is easier to use the non-ambiguous male versions: <#Employee> shall sell <his> car
and <#Buyer> shall give <him: employee> the keys of the house
.
Similarly verbs in languages other than French, it can be easier to simply use the opposite number (singular instead of plural) or different gender to avoid the ambiguities, even when grammatically speaking this does not make sense in the editor. For example, instead of writing <#Employé> <demeure>
(which is ambiguous because “demeure” can be both a noun and a verb), you can simply write the plural version of the verb <#Employé> <demeurent>
, which is not ambiguous, even though it may look weird that the singular employé is combined with the plural verb demeurent.
When a word’s function is ambiguous according to Clause9 's internal dictionary, Clause9 will highlight problems in red:
… following which you can resolve inspect the problem, by positioning your cursor on the word in red:
Clause9 uses a dictionary with hundreds of thousands of lemmas for each language. However, some words will simply not be present in the dictionary. For those exceptional situations, you can however, add custom conjugations to a clause.
Those custom conjugations can be added in two ways: either with a mini-dictionary, or inline.
(currently only available for Danish, Dutch, English, French, German, Italian, Lithuanian, Norwegian, Polish, Portuguese, Spanish and Swedish)
You will automatically be invited to add a word to the custom dictionary of a clause when you wrap an unknown word in angular brackets. For example:
After you choose the right grammatical function (in casu verb), Clause9 will then switch to the conjugations pane and allow you to enter the various conjugations for the relevant verb.
Instead of the mini-dictionary approach, you can also add custom conjugations “inline” (i.e., in the clause itself), by separating the conjugated forms by pipes.
Several inline conjugations are available:
<singular | plural>
<singular male | singular female | plural both genders>
<singular male | singular female | plural male | plural female>
<MF | male | female>
Some examples:
<#Employee> <agrees | agree>
will be printed as “The Employee agrees” in singular, or as “The Employees agree” in plural.
<#Employee> <is|are> <a man | a woman | men | women>
will be printed as “The Employee is a man” in singular male, as “The Employees are men” in plural male, as “The Employee is a woman” in singular female, and as “The Employees are women” in plural female.
<#Employee> is <MF | a man | a woman>
will be printed as “The Employee is a man” in male, and as “The Employee is a woman” in female.
For some languages (such as English and Dutch) which adapt a defined term itself to indicate a possessive form, Clause9 can automatically output the correct possessive form based on the relevant singular/plural concept label. This is described on the page on concept labels.
You may want to add a clause that repeats itself, for example for the party descriptions or signature blocks.
Instead of having to add these clauses separately manually, Clause9 can do this for you by using the “repeat clause” functionality in the Advanced tab of the Assemble Document mode. The Advanced tab will become visible when you select the clause you want to repeat.
Scroll to the following part:
The clause will then be shown as many times as the number of items contained in the selected datafield. If, for example, the datafield “name” of the concept “party” is a repeating list that is selected under “repeat clause”, and three items were inserted into “name”, the clause will be shown three times.
Typical use cases for this functionality are party description clauses and signature blocks which can be repeated for as many times as there are parties.
Ad-hoc clauses are stored in a specific document as opposed to your organisation’s clause library. To create an ad-hoc clause, you therefore first need to open a document to create it in.
With your document open, first click the clause you want the ad-hoc clause to appear under. If you do not select a clause, it will automatically appear as the last clause in the document.
Using the @for
and @for-calc
functions, you can generate a list of items (snippets of text, numbers, dates, …) by iterating through another list of values. Programmers will be very familiar with this idea, as for-loops are essential ingredients of most programming languages. For legal professionals, this idea will sound much more abstract — we will therefore explain the idea through relevant examples.
When using @for
and @for-calc
, you have to specify three different parameters: a placeholder, a list of elements to iterate (“loop”) with, and an internal snippet that will be used in each iteration. For example,
This code will loop through the bottom snippet three different times, each time replacing the placeholder ?X
with the next element of the list. Accordingly, the result will be a list of texts containing “this is element alpha”, “this is element beta” and “this is element gamma”. You can then use this resulting list in any way possible, for example convert it into bullets using @bullets( ... )
or into an inline-enumeration using @enumerate
.
The difference between @for
and @for-calc
is that @for
will always resulting in a list of text snippets (i.e., a word, a part of a sentence, or even entire paragraphs), while @for-calc
will result in a list of values, whereby each value must be a whole/floating number, a currency value, a duration, undefined, or a list itself. If @for-calc
cannot extract such value (e.g., because the intermediate result is a text snippet), then it will result in an error.
In addition to the placeholder you specify yourself (?X
in the example above), the software will also allow you to use the following implicit placeholders:
?INDEX
will contain the current iteration number, starting from 1 and increased with each iteration.
?MAX-INDEX
will contain the total number of iterations that will be performed. Note that this value will remain constant throughout all iterations.
?PREVIOUS
will contain the result of the previous iteration
?ACC
(for “accumulator”) will contain the list of results up to (but not yet including) the current iteration
In the example below, three iterations are shown, whereby ?X
will be assigned the value 10, 11 and 12 respectively, while the ?INDEX
will be assigned the value 1, 2 and 3 respectively. Note that the ?PREVIOUS
value will not contain a value in the first iteration (for obvious reasons). In the second iteration, it will contain the bullet that resulted from the previous iteration; in the third iteration, it will contain the bullet of the first iteration, as well as the sub-bullet of the second iteration. The example in the screenshot below is contrived, but you will see in the real examples below how the ?PREVIOUS
value can be used.
In a loan agreement, we want to create a list of bullets that contains an overview of all the monthly repayment dates, starting from a certain commencement. The parameters of the loan are saved into the datafields loan^start-date
, #loan^frequency
(a duration — e.g., one month or 2 weeks) and #loan^instalments
(the number of repayments, e.g. 5).
Using a for-loop, we could then write:
In human language, this roughly means the following:
create a list (range) of items, starting from 1, up to (but including) the number of instalments — e.g. from 1 to 5
create a resulting list in memory, that will hold all the intermediate results
do the following 5 times:
set placeholder ?INSTALMENT-NR
to the current item (i.e., the first time set it to 1, the next time to 2, etc.)
take internal snippet @BULLET
, and replace placeholder ?INSTALMENT-NR
with its current value
put the intermediate result into the resulting list
take the resulting list, and convert it into bullets.
Let’s assume that in a rental agreement you need to show the indexed rent amount over a certain period. For example, with a starting amount 1000 EUR and a yearly indexation of 5%, you may be tempted to write the following:
Unfortunately, this is not how most real-world indexation clauses work, as the indexation should take the then-applicable amount as the starting point each time. This can be solved using the ?PREVIOUS
placeholder. In the example below, we use @for-calc
to calculate a list of all rental amounts, which is then shown in another @for
-loop. (The reason being that a @for
loop results in a piece of text, that cannot be used in further mathematical calculations):
The AMOUNT
snippet essentially says “if no previous value exists (i.e., we are at the first iteration), then simply use the base amount; however, if a previous value exists (which should be the case as from the second iteration), then use the previous value and apply the indexation to it”.
Note that we use curly braces around the result in the AMOUNT
snippet in order to force the result to become a number. If you leave these curly braces, you immediately get errors, because the software would then treat the result of that snippet as a piece of text, while@for-calc
can only work with a number / currency value / duration / list / undefined value.
As another example, let’s assume that a contract wants to show a table that illustrates how an amount of 1000 EUR is paid back over five months. The calculation per period is deliberately kept very simple, but the idea is clear that you could also use the various types of mortgage payment calculations here.
What we’re doing here, essentially, is to construct a table that consists of six different rows (a header row, and one row per repayment-period), merged together using @merge-tables
. Each repayment period’s row then contains a cell with the calculated date, the amount (in the example always 200), and then a cell with the remaining value. The remaining value is extracted using @get
from a list of repayment amounts that is generated by the @AMOUNTS-LIST
snippet, which uses a simple @for-calc
loop.
Note that when the loan amount, number of periods, starting date, etc. are placed in datafields, this kind of table can even be interactively shown within a Q&A, allowing end-users to experiment with these values.
One of Clause9's strongest assets, is how it handles multiple languages. In this article, you can learn all about advanced features.
When all the clauses of a document are available in multiple languages, you can easily export a document in multiple columns by checking one or more languages in the export settings of Assemble Document.
The Q&A options discussed above cannot be subjected to conditions. If you need more fine-grained control, you can insert two types of changes.
A first change is the “Change the save/export settings“, which contains a subsection that allows you to specify which languages (if any) need to be exported in columns.
When at least one extra language is checked, you can also specify dynamically the orientation and the optional borders between columns:
A second type of change is the “Change various Q&A options“, which allows you to dynamically change the language of the user interface.
In a Q&A, there are two types of conditions that allow you to only show certain cards/questions/answers when certain languages are visible.
For example a condition such as @english AND #contract^value > 1000 EUR
would only be shown when the contract is currently being printed in English, and the contract’s value is simultaneously higher than 1000 EUR. Note that when a contracting would be exported in multiple languages at the same time (e.g., English and French), this may cause the clause to be shown in the French column, but be hidden in the English column.
It may happen that your clause does not contain any language-specific content, so that exactly the same contents should be shown in all available languages. You can of course copy-paste the same contents in each of the language boxes, but from a clause management perspective, this will cause extra work when you want to update that clause, as you will need to make the same changes to each of the languages.
Instead of copy/pasting, you can insert // Use English
into the other language boxes to copy the contents from the English box. (Similarly, you could type // Use French
to copy from the French language box.)
You could even mix-and-match the language content to reuse. For example, on the server above (which supports English, Dutch, German and Lithuanian), you could provide English content, insert // Use English
in Dutch and French (so that Dutch and French language versions of the document will show the English contents of this clause), but also provide a German version and insert // Use German
in the Lithuanian version.
Even when a clause would have multiple language versions, you can force a certain instance of the clause to always show up in another language. (This can also be useful when certain content is only available in one specific language — instead of hiding that content in the other languages, or having errors show up, you can select this option to always print that one specific language.)
You can do so in Assemble Document by selected a clause and activating Force clause to always show in: in the Advanced pane at the right side.
Even when you want to export a document with a column per language, there are certain clauses where you want to avoid this behaviour. The typical example is the signature block, which is usually not translated because it merely contains the names of the parties.
To enable this behaviour for every instance of a clause, you can activate Don’t translate in multi-language output under the custom styling of a clause.
If, instead, you only want to enable this behaviour for one specific instance of a clause, you can add custom styling for that specific instance through the Advanced pane at the right side of Assemble Document.
@multi-language
returns true
when the document is currently exported (to MS Word or PDF) in multiple languages. You may, for example, use this special function to only show a warning such as “Please note that even though this document contains both English and German content, only the German content is legally binding.” when the document is effectively printed in multiple languages.
Sometimes a clause in a multi-language document may need to refer to a specific concept-label or datafield in another language. For example, in a signature box (for which the Don’t translate in multi-language output is enabled, as per the discussion above) you may want to insert the title of the chairman in multiple languages. For such situations, @in-language
will be of great help:
#president / @in-language(#president, "en")
Similarly, you may want to print a certain city (inserted by the end-user as a multi-language answer in the Q&A) in two different languages next to each other:
#signature^location / @in-language(#signature^location, "en")
For both technical performance and content management reasons, each Clause9 server is dynamically configured to support a certain number of languages. For example, fr.clause9.com supports French and English, while eu.clause9.com currently supports 22 different languages and int.clause9.com even supports 27 different languages.
While some customers may require simultaneous access to all those languages, most users will want to work with only a subset of those languages. Clause9 therefore offers support for disabling languages, in multiple locations.
In the user’s account preferences, you can enable/disable and reorder the languages made available to the user. The list of languages selected here will be used as the basis to determine which languages to show/hide in Assemble Document, Q&A and at the clause level.
In the Document or Binder panel you can enable and disable languages for a particular Document or Binder. In addition, you can choose which language should be displayed when the Document/Binder is opened by a user.
Note that the only effect of disabling a language here, is that a language will disappear from the languages dropdown in the toolbar. At the level of an individual clause, you will continue to see all the languages that are enabled by the user. (After all, it may be the case that you are composing a document for use in three languages, using clauses that happen to be translated in many more languages.)
In the options panel of the Q&A, you can specify which languages should be available to the end-user — both with respect to the user interface (cards & questions) and for the actual document contents.
Checking or unchecking output languages will avoid that users can output documents in this language. On a practical level, this means that the dropdown menu in the Document language question — which you can insert similar to how a text-based or number-based question is inserted into a Card— will only show the selected languages.
If you want to completely disable the possibility for the end-user to export multiple languages, you can instead check the Multi-language export option at the bottom of the options panel of the Q&A.
While drafting clauses in Clause9 is certainly not “programming” in the traditional sense, Clause9 borrows some best-practices from traditional programming languages. Legal experts who have never done any traditional programming are often confused by these practices.
One such issue is the concept of data types — aka the issue of not mixing apples and oranges. This page deliberately takes a deep-dive into dealing with these types, to fully explain how they work in Clause9.
A first important idea to grasp is the distinction between natural language mode and conditions/calculations mode.
The standard mode in Clause9 is the natural language mode. This is the mode you will implicitly arrive in when starting to type something in a clause. It will consist of “human” language stuff, such as words in English/French/Dutch, punctuation and numbering, etc. For example, the following clause entirely consists of the natural language mode elements:
A clause that consists entirely of natural language mode elements will be completely static, i.e. aside from the numbering and formatting of the clause, this clause will not change appearance. To insert dynamic elements, you insert conditions and calculations, for example:
As soon as you type in an opening accolade {
you will leave the natural language mode, and enter either
the condition mode, for which the result’s type is always true or false); or
the calculation mode (for which the result’s type depends on the kind of calculation being made).
In the example above, #contract^value < 500 EUR
and #contract^value < 2000 EUR
are written in the condition mode, while apples^amount * #apples^unit-price
is written in the calculation mode.
After the closing accolade }
you will in any case leave these modes, and return to the natural language mode. However, the switch between the modes is more complex than just looking at the opening and closing accolade. For example, in paragraph 1. above, the parts between the colon (:
) and the vertical bar (|
) are once again in the natural language mode, i.e. the words low and medium and high.
As the name implies, calculation mode expects to perform calculations. The input to these calculations consists of a mix of countable elements and optional operators — e.g. 5 + 24
or 5 * 4.5 EUR
, but also 12 months * 4
or 2020_11_23 + 3 days
, because you can perform interesting calculations with durations and dates.
Instead of using directly countable elements, you can also work with elements that ultimately boil down to numbers. For example, in apples^amount * #apples^unit-price
, the datafields “amount
” and “unit-price
” can be assumed to contain countable things. When, for example, the number 5 would be assigned to apples^amount
and the #apples^unit-price
would be assigned the value 0.4 EUR, Clause9 will happily perform the calculation for you and return the result (2 EUR).
Note that natural text cannot, as such, be used in calculation mode. After all, text is — as such such — not countable. It does not make sense to, for example, perform a calculation to divide the words “the Buyer buys an apple” by the words “the Seller sells a pear”.
Writing in the condition mode will be writing in calculation mode, with one exception. Condition mode is meant to ultimately result in true or false, and will therefore contain a left side with a calculation, a comparison operator and a right side with yet another calculation.
For example, in the condition apples^amount * #apples^unit-price < 2000 EUR
, you will see a left side (containing a calculation on apples), a comparison-operator (smaller than <), and a right side (with a single currency-value).
In Clause9, as in most programming languages, you can only calculate with elements of the same data type, and you can only compare elements of the same data type. For example, it does not make sense to add 25 EUR to a date, or to compare the text “alpha” to the duration of 5 months.
Clause9 offers the following basic data types:
In addition, the following special data types are also offered.
The three different modes result in three different data types:
Clause9 currently supports the following currencies:
While it is not possible to perform calculations or comparisons with elements of different data types, it is possible to convert an element to another data type. This conversion can either be done explicitly or implicitly.
Most special functions will perform something more than solely converting an argument from one data type to another data type. Examples:
@round
and @floor
will convert the floating point number passed to them, and then either round that number or truncate the decimal part, returning a whole number
@comma-split
will take a text element and return a list element that contains individual text elements (e.g. @comma-split("alpha, beta, gamma")
will return a list with text elements "alpha"
, "beta"
and "gamma"
.
It would be cumbersome to always have to explicitly convert data types — e.g., imagine that in order to take 5.5 times the duration of a contract, you would have to write 5.5 * @float(@months-in(#contract^duration))
To avoid these situations, Clause9 will implicitly perform conversions for you when no ambiguity is involved:
(*) When mixing a date with a duration, note that the order and operation matters. The conversion will only be applied with date +/- duration
. If you change the ordering (e.g., duration first) or the operation (e.g. multiplication), the result will be an error.
(**) When mixing a list with, the order and operation matters: the conversion will only be applied with list +/- element
, not with element +/- list
.
When using the -
operator, the element(s) at the right side are removed from the list at the left side. For example, @list("alpha", "beta") - "alpha"
and @list("alpha", "beta") - @list("alpha")
both result in @list("beta")
.
When using the +
operator, the result depends on the right-side:
If both the left & right side are lists, then the result will be a concatenation of the two lists, with all the elements of the right list appended to the left list, irrespective of whether they were already present in the left list. For example, @list("alpha", "beta", "gamma") + @list("alpha", "delta")
will result in @list("alpha", "beta", "gamma", "alpha", "delta")
. (If you want a union of the list, where elements-already-present are not added again, use the @union
special function instead of +).
If the right side is not a list, then it will be added as a new element of the left list, irrespective of whether the right side element was already present in the list. For example, @list("alpha", "beta") + "alpha"
will result in @list("alpha", "beta", "alpha")
. (If you want a union of the list and the single element, where the right-side element is not added again to the left list, use the @union
special function instead of +).
When using datafields, values will often not be present, because they have not (yet) been filled in by the end-user. Within a calculation/condition, to avoid errors, Clause9 will try to convert this undefined value to a sensible default value:
Note that the date field is missing from the table above: an undefined will never be implicitly converted to a date field. (After all, there exists no date that would make sense here: what could possibly be considered “date zero”?)
In condition mode, the following implicit conversions are carried out to convert a data type to true/false:
Note that in an if-then-else condition, you can omit the operator and right-hand side of the comparison for the sake of brevity; Clause9 will then automatically insert = true
. For example:
Instead of writing {#contract^is-dutch-law = true: ... }
you can also write {#contract^is-dutch-law: ... }
. If the datafield is-dutch-law
is a true/false datafield, then no implicit conversions will occur.
Instead of writing {#contract^value > 0: ... }
you can also write {#contract^value = true: ... }
or the shorter version{#contract^value: ... }
. In both of these cases, the contract-value
whole number datafield will be converted into a true/false, meaning it will result in true if a non-zero value is assigned to this datafield; it will instead result in false when no value is assigned at all, or when the value that is assigned to this datafield, is equal to zero.
When combining duration elements of different units in a calculation, conversions may be necessary — e.g., when you add 2 days
to 3 months
. You should be aware that such conversions will in many cases result in rounding errors and unexpected results, because a duration does not contain any context about the month or year it relates to.
Clause9 will convert durations with different units into the lowest time unit, e.g. year + months will be converted to months, year + days will be converted into days, and months + weeks will be converted into weeks. Clause9 tries to use sensible averages during this conversion, but unexpected results are bound to happen due to the lack of context.
The bottom line is that you should try to avoid these implicit conversions as much as possible.
Clause9 allows you insert a datafield directly into natural text. For example:
While perhaps not immediately obvious, this is also a situation where apples (clause text) are combined with oranges (number datafield). To avoid that you would have to insert all kinds of ugly codes to allow this, Clause9 will implicitly convert this datafield into clause text for you.
In most situations, this conversion will be very straightforward. However, do note the following.
A (whole/floating point/currency) number and a date value be converted into text in accordance with the locale styling rules (e.g., for the decimals style, currency symbol placement, short/long date format, etc.).
A true/false value will get translated — e.g., Alpha {true}.
will be converted into Alpha true
in English and Alpha vrai
in French.
A list value will have its elements printed consequentially with spaces in between — e.g. @list("alpha", "beta", "gamma")
will be converted into alpha beta gamma
. If you want to have comma’s plus and/or etc. in such list, or perhaps convert it into a bullet-list, then you need to use one of the special functions — e.g., @enumerate-andor(@list("alpha", "beta", "gamma"))
.
Some conversions are deliberately not performed, because they would be ambiguous:
Adding a (whole/floating/currency) number to a duration or date. For example, 3 months + 3
results in an error because it will be difficult for the software to figure out whether you want the result to be a duration (6 months) or a whole number instead (6).
Adding a number to a date. For example, 2020_04_07 + 3
results in an error, because it is not clear whether you would like to add 3 years, 3 months, 3 weeks or 3 days instead.
Other conversions are deliberately not performed because they make no sense:
Mixing text and whole/floating/currency numbers. It will usually be obvious that this does not make sense — e.g. "alpha" + 6
— but this may not always be intuitive to those new to Clause9.
For example, if you create a text datafield #contract^value
, then Clause9 will treat the contents of this datafield as text, and issue an error when you try to do a calculation such as #contract^value * 2
. This error will make perfect sense when the end-user would type in “real” text (such as the word “Paris”), because you can obviously not multiply Paris by two. However, when an end-user would type in a number (e.g., 3500), then it will not be so obvious why the software is complaining.
While not a data type conversion issue, you should also note that some operations are not allowed between elements of the same data type:
You cannot mix different currencies — e.g., adding {200 EUR + 300 USD}
results in an error.
You cannot add dates to each other — e.g. {2020_04_03 + 2020_05_3}
results in an invalid operation error.
An if/then/else construction will normally result in clause text. For example,
However, it is also possible to use the if/then/else construction to return other data values. You can do this by wrapping the content of the if/then/else after the colon (:) between curly braces. For example:
It is interesting to analyse why you will get a “value is not a number” error when you omit the two pairs of curly braces in the if/then/else construction:
The reason is that Clause9 will do the following:
When encountering the {@INTEREST * 1.5}
, it will replace the @SNIPPET with the contents of the internal snippet, arriving at {#contract^jurisdiction = "dutch": 0.05 * #contract^value | else: 0.08 * #contract^value } * 1.5
It will then execute the if/then/else construction, and check whether the contract’s jurisdiction is equal to “dutch”. Assuming this is indeed the case, Clause9 will notice that the associated fragment it has to insert into the main part of the clause is 0.05 * #contract^value
.
Because this fragment is not wrapped in curly braces, Clause9 will treat the fragment as clause text. For example, if the contract’s value is currently set to 1000, and the current styling happens to be metric, it would convert the fragment into the text “0.05 * 1.000” . Notice that:
because the fragment is treated as clause text, Clause9 will treat the 0.05 literally, i.e. not consider it to be a number. Accordingly, despite the fact that the styling settings are set to metric (so that a floating point number such as 0.05 would be printed with a comma as “0,05”), Clause9 will print it as “0.05”
the contract’s value (1000) is a whole number that is inserted into clause text, and will therefore get converted to clause text, respecting all the styling settings (such as the metric style’s dot between the 1 and the three zeroes)
Next, it will try to multiply the clause text “0.05 * 1.000” by the number 1.5, which obviously does not make sense because you cannot multiply text by a number. It will therefore issue a warning “value is not a number”.
Pursuant to article 3§4 of the Civil Code, #Buyer shall ...
Why is shall pay 10.20 EUR
printed as “shall pay 10.20 EUR”, while my styling settings dictate metric style with a euro-symbol?
Why do I see an error message with Pursuant to article 3§4 of the Civil Code, #Buyer shall ...
?
I get an “incompatible argument types” error when using the following clause:
#Buyer shall pay interest equal to @days-between(#contract^start-date, @today)
The software does not accept the following clause (shows a yellow error):
#Buyer shall pay interest equal to @days-between({#contract^prolonged: #contract^prolongation-date | else: #contract^start-date}, @today)
The drop-down list under “repeat clause” will show a list of all “list of texts”, “number” or “repeating list” included in the document.
Click at the top left-hand of your screen and select New ad-hoc clause. Fill out the content body of the clause and optionally give the clause a file name before pressing to save your clause.
The results can be seen in the following screenshot, when using the . You are strongly recommended to use this focus mode, because it allows you to interactively experiment with the for-loops.
Particularly interesting in the focus mode is its ability to a particular snippet. For example, when you isolate snippet @BULLET
, and then assign values to the ?INSTALMENT-NR
placeholder through the button, you can interactively “step through” each iteration. (Programmers sometimes call this “debugging”, i.e. a mode dedicated to removing potential “bugs” from their software code).
Within a Q&A, the end-user can instead go button in the upper-right corner, and activate the same options from the popup-menu. Note that, unlike Assemble Document (for which the user interface is always in English), you can optionally translate the cards, questions and predefined options of a Q&A, and allow the end-user to switch the relevant language on-the-fly.
By subjecting the surrounding change-set to conditions, you can determine in which circumstances certain languages must be (de)activated. More detailed information can be found .
When drafting a clause, you can use a series of , such as @english
and @french
(or any other language supported by the server you are using), to enable/disable certain clauses or snippets of text.
Checking or unchecking cards & questions languages will cause the language-submenu of the button in the upper-right corner to show only the selected questions.
Explicit conversions can be achieved using . For example, the special function @extract-number
will take a currency number (e.g., 5.5 EUR
) and return the floating point number (5.5
). Similarly, the sole purpose of the special function @str
is to convert the argument passed to it into text — e.g. @str(3 months)
will, depending on the styling settings, result in the text 3 months
when the active language is English.
Tip: when you do not like these implicit conversions of unavailable values inside a calculation, you may want to use .
For example, while you may be happy with {#apples^amount * 0.2 EUR}
resulting in 0 EUR when the amount of apples has not yet been completed by the end-user, it may equally be the case that you absolutely need the user to fill in this amount. If so, then use {#apples^!amount * 0.2 EUR}
instead — this will result in a box that invites the user to fill in this value, signaling that the calculation simply cannot be completed without a value assigned to the amount of apples.
The contents of the CONTRACT will be clause text, because its sole element is an if/then/else construction between curly braces. Such clause text can be inserted into the main body of the clause without any conversion being necessary.
whole number
0
; 5
; 21456
floating point number
4.56
; 2457.8975
currency number
0 EUR
; 56.34 EUR
text
"alpha"
; "Main Street 56 Brussels"
date
5 January 2020
; 8 July 2022
duration
3 years
; 4 months
; 2 days
true/false
true
list of elements (any of the other types allowed)
5
, 6 EUR
, 3 January 2020
clause text
1. Alpha
* Beta
** Gamma
clause part
@ALPHA
defined term
#contract
datafield reference
#contract^value
nothing / undefined
natural language mode
always results in clause text
calculation mode
result type will depend on the elements used — e.g. 3 + 3
results in a whole number
condition mode
always results in true/false
euros
EUR
British pound
GBP
United States dollar
USD
Japanese Yen
JPY
Australian dollar
AUD
Canadian dollar
CAD
Swiss franc
CHF
yuan
CNY
Kenyan shilling
KSH
Hong Kong dollar
HKD
New Zealand dollar
NZD
Swedish krona
SEK
South Korean won
KRW
Singapore dollar
SGD
Norwegian krone
NOK
Mexican peso
MXN
Indian rupee
INR
Russian ruble
RUB
South African rand
ZAR
Turkish lira
TRY
Brazilian real
BRL
New Taiwan dollar
TWD
Danish krone
DKK
Polish złoty
PLN
Thai baht
THB
Indonesian rupiah
IDR
Hungarian forint
HUF
Czech koruna
CZK
Israeli shekel
ILS
Chilean peso
CLP
Phillipine peso
PHP
UAE dirham
AED
Colombian peso
COP
Saudi riyal
SAR
Malaysian ringgit
MYR
Romanian leu
RON
whole nr
floating point nr
floating point nr
5 + 5.5
results in 10.5
whole nr
currency nr
currency nr
200 + 300 EUR
results in 500 EUR
floating point nr
currency nr
currency nr
229.5 + 300 EUR
results in 529.5 EUR
date (*)
duration
date
2018_7_12 + 1 month
results in 2018_8_12
list (**)
(any data type)
list
@list("alpha", "beta") + "gamma"
results in @list("alpha", "beta", "gamma")
Datatype
Converted into
Example
number
0
55 * undefined
results in 0
currency
0 (same valuta)
5 EUR + undefined
results in 5 EUR
5 EUR * undefined
results in 0 EUR
duration
duration with length 0
5 days + undefined
results in 5 days
text
empty text
empty text is simply ignored in the output
list
empty list
@list("alpha") + undefined
results in @list("alpha")
Data type
Converts to true when
Converts to false when
Text
Non-empty text value
Equal to the empty-text value (“”)
(Whole/floating/currency) number
Not equal to 0
Equal to 0
Duration
Amount higher than 0
Amount equal to 0
List
Not empty
Empty (no elements)
Date
Assigned some value
Never
Undefined (e.g., datafield without value)
Never
Always
Let’s say that your concept’s file name is very long, e.g. non-sollicitation-senior-management-key-employees. It then becomes rather burdensome to refer to it in the Clause9 grammar by using the full file name every time.
You can make your life easier by typing a shortcut or abbreviation of your choice in the clause editor, e.g. #non-sollicitation-smke
. Clause9 will initially not recognise the concept as there is no file name corresponding to it and will therefore display the concept in red below the text field.
Line breaks are inserted by using the special code %%
. The text after %%
will start on a new line. This command will not insert a new paragraph. However, by inserting multiple line breaks a new paragraph can be created.
There are two ways you can implement a page break. The first way is to use a setting which will be applied and saved at the document level and the second way is tied to a clause and will therefore be applied to all documents that clause appears in.
Select the clause that you want to appear on a new page and navigate to Advanced > Layout.
Multiple layout options for the selected clause will appear.
By way of a reminder: it may seem like some of the options under Advanced and under Styling are overlapping. However, there is a difference between those two settings: changes made under the Styling tab will be applied to the whole document. Under the Advanced tab, any changes will be applied to the currently selected clause. A walkthrough of the Advanced tab can be found here.
If all instances of a clause should be accompanied by a page break, there are three ways of doing this:
apply custom styling
use the special code % page break before %
use the special function @page-break
Edit the clause that should have a page break inserted before it. Go to in the menu on the right, click on Custom styling at the right, navigate to Title and then click on the green + Custom styling button.
Scroll down to Text flow settings of each paragraph and enable Page break before by clicking the slider and then click the checkbox to enable it.
You could also insert a page break before every single paragraph of a clause by enabling the same setting outlined above under “non-title parts” of the custom styling settings.
If you insert the special code % page break before %
before any paragraph, ClauseBase will insert a page break before that paragraph. That also means that inserting this special code before the text in the clause’s content title, means the page break will be inserted before the clause, including its title.
Using this special code will thus give you some flexibility in choosing where the page break should be inserted – whether before the title or before any other paragraph of that clause.
The special function @page-break will insert a page break at the location the special function is 'invoked'. This is therefore the most flexible option, enabling you to choose the exact location in a clause or document for the page break to be inserted.
Note that the special function @page-break can not be used in a table. If @page-break is included in a table, Clause9 will simply ignore it and output the table without a page break.
There are two ways to create library clauses:
Via the Browse Files menu
Via the Assemble Document menu
Go to Browse files by clicking at the top of your screen.
From there, navigate to the correct folder by first choosing the proper library on the left-hand side of the screen, i.e.: either the organisation-wide library, a specific group’s library of your private library.
Go to the Assemble document mode by clicking at the top of your screen or open an existing document from your library.
From the menu that pops up, navigate to the correct folder by first choosing the proper library on the left-hand side of the screen, i.e.: either the organisation-wide library, a specific group’s library of your private library.
One or more clauses in your document will contain lists that have some predefined options but allow for user input as well. In many cases, as a template creator you may not be able to provide for all options exhaustively. There may, therefore, be a need for users to choose both from a predefined list of options as well as have the option to provide his/her own input. How would you create such a clause in Clause9?
To avoid cluttering your production account, it is advisable following these steps in your Clause9 Sandbox account. If you do not have such Sandbox account, please contact your administrator.
Let’s take a conditions precedent clause in a loan agreement as an example. Typically there are a number of conditions precedent (abbreviated to “CPs” for ease of reference) that will be included in any deal, such as (i) corporate documents approving the transaction, (ii) validly executed security documents and (iii) legal opinions. We will be creating a mockup conditions precedent clause with each of these predefined CPs as well as the option for a user to provide additional CPs freely. We will be implementing the following basic clause:
For the remainder of this tutorial, you will need the following concepts:
#lender
, with concept label “lender”
#borrower
, with concept label “borrower”
#loan-agreement
, with concept label “loan agreement”
#finance-document
, with concept label “finance document”
#security-document
, with concept label “security document”
Create a new clause. Under content title in the navigation menu on the right, enter “Conditions precedent” as the title of our clause. Head to content body.
The main paragraph of the clause requires the use of the concept #lender
in its possessive form. In Clause9 grammar, this can be implemented simply by appending 's
to the concept reference.
In addition, the reference to “this Loan Agreement” is easy to implement in Clause9 grammar: after the hashtag, enter a degree symbol °
as follows: #°loan-agreement
. The initial paragraph will then look as follows:
Our next challenge is making sure our list both caters for the predefined options and the free input. The obvious way to make a list is by using a combination of:
The bulleted enumeration can be created in three ways:
by using the {AND! | alpha | beta | gamma}
grammar. The use of the exclamation mark forces Clause9 to make a bulleted list of the three elements alpha, beta and gamma.
by using * AND
grammar, followed by individual bullets preceded by an asterisk *
.
To be able to create our list with predefines, we will need to make use of the * AND
grammar. Why is this the case?
When the user chooses an option, Clause9 must enable some text (i.e. the actual plain text containing the CP language) based on this option. These options will be implemented as predefines inside of a list of texts type datafield. This way we can make the text of each bullet (each asterisk in our grammar) conditional on the relevant predefine being selected.
Technically we could reach the same result with the {AND! | … | …}
grammar. Further on in this tutorial, however, we will discover why this is not the ideal solution.
As mentioned above, we want our end user to be able to select CPs from a predefined list which will be implemented in Clause9 making use of a “list of texts” type datafield. Create such datafield called conditions-precedent in the concept #loan-agreement
.
If you are working in the Assemble Document mode, you don’t have to switch to the Browse Files mode to edit concepts (or other file types). A quicker way to edit a concept is to open it by double clicking on that concept in the list below your clause editor.
We want to assign a predefine for each option, i.e. for each CP. Let’s create three predefines for the conditions-precedent datafield:
corporate-docs for the board resolution CP
security-docs for the executed security document CP
legal-opinion for the final legal opinion CP
Leave only the predefined values can be stored (no free values) unchecked for now.
Having made the predefines, we can continue writing our clause grammar. Each subparagraph should be subject to the condition that the relevant predefine was included in the datafield #loan-agreement^conditions-precedent
. In Clause9 grammar, this looks as follows: {"predefine" in #loan-agreement^conditions-precedent: text that should be shown}
.
Note that the grammar for writing conditions is different for the text type datafield and the list of texts type datafield. This is due to the fact that the latter type may contain more than one input, while the text type datafield can only contain one input.
Implementing this for our CP predefines, the grammar will look like this:
Before starting work on the possibility for free input of new CPs, we will be looking at ways of fine-tuning our clause grammar to make sure it will adapt to various different contexts.
Our clause grammar looks like this at the moment:
Reading through this, you will note that the concepts #security-document
and #finance-document
are singular (unless you have changed this setting when creating the concept labels), but our text refers to them as if they were plural. For example in the legal opinion CP, the text says “that the Finance Document are binding upon the Borrower” as our original text assumed that there was more than one Finance Document.
Clause9 offers you the possibility to adapt this text automatically to the context of the agreement: whether there is more than one Finance Document or Security Document. We do this by adding some additional grammar, i.e. by surrounding both the words that should change and the word on the basis of which they should change with “greater than” and “less than” symbols: <>
.
As there are two concepts on the basis of which the text should be changed, we should give Clause9 some tips on the basis of which it can determine which change to make. This is done by including the concept on the basis of which the change should be made between the <>
symbols as follows: <text: concept-reference>
. Implementing this for our specific grammar, we get the following result:
Some words have multiple meanings in a language. In our language, this is the case for the word “copies”. “Copies” can be both a verb and a noun. However to be able to make the right changes, Clause9 must know which type of word “copies” is.
There is an easy way to see whether there is an ambiguity like this in your clause: the affected word will be shown in red. By clicking on the word, you can choose between the relevant options:
Choose the noun option. Now our text will adapt automatically to whether #finance-document
and #security-document
are being used in singular or in plural form.
Finally, let’s finish our clause by building a way for the end user to add his/her own CPs.
So far, we have created a clause that works perfectly with our 3 predefined options. However, we wanted to give an additional option to provide additional CPs as bullets in this same list.
One obvious solution would be to use the existing datafield (#loan-agreement^conditions-precedent
) to provide for additional input. This would be implemented be just adding a reference to that datafield as the final bullet, i.e.:
Implement this in your clause and save it. As you input values into your datafield (including the predefines), it will be immediately clear why this doesn’t work. The final bullet contains all inputs to the datafield, including the predefines that already triggered the conditional bullets above.
In view of the above, we have to use a separate datafield. Let’s create one (list of texts type) named conditions-precedent-free. We won’t be adding any predefines to this datafield.
Should we now just add this datafield as a separate, final bullet? No. A similar problem would occur: the final bullet would just contain a comma-separated list instead of adding separate bullets.
Any inputs added to #loan-agreement^conditions-precedent-free
will be added as separate bullets on the same level as our predefined bullets.
As discussed above, one of the options for creating bulleted lists is using {AND! | alpha | beta}
grammar, with alpha and beta being forced into separate bullets.
This option will work for our predefined options, where we would include the CPs subject to their relevant conditions as elements, e.g.: {AND! | {"corporate-docs" in #loan-agreement^conditions-precedent: a resolution of the board of directors of #borrower approving the transactions contemplated by #finance-document} | ...}
.
However, we would not be able to add our free input option. If we include @bullets(#loan-agreement^conditions-precedent-free)
as the final element, Clause9 will include the inputs to this datafield as a separate bulleted list on the next level, i.e. as sub-bullets to the final element of the original list. This is obviously not how we want to implement the additional CPs.
We also did not write {AND! | #loan-agreement^conditions-precedent-free}
to implement the free input option. Consider for a moment what that would look like.
Using the {AND | … | …}
grammar, each element must be separated by a pipe symbol |
. Therefore Clause9 would interpret the inputs to the list of texts datafield as one single bullet. The result would be one bullet with the inputs to the datafield included as a comma-separated list.
To show or hide a paragraph or bullet, based on the (non-)fulfillment of a condition, follow these steps:
type the paragraph number or bullet asterisk
write the condition elements based on which the text will appear or disappear
write the text of the paragraph/bullet
In practice, that could look something like this:
Make sure not to put the number or asterisk preceding the text of the paragraph or bullet, respectively, inside the condition, as Clause9 will be unable to recognise that these symbols mean the start of a paragraph or bullet and will instead think they are merely ordinary text.
To avoid cluttering your production account, it is advisable following these steps in your Clause9 Sandbox account. If you do not have such Sandbox account, please contact your administrator.
For the purposes of this How To, please create the following clauses and any concepts (with concept labels) and datafields included in there:
Clause title: “Lease”
Clause title: “Notices”
Insert both clauses in a new document.
What we want to accomplish now is that the notice clause we inserted refers to “the Lessor” and “the Lessee” instead of “the Buyer” and “the Seller”. This can be done by using a technique called “mapping”. We can make a concept in a clause (or an entire document) map to another concept, i.e. act as if it were another concept. How do we do this?
Now check out your clause again. Where it said “the Seller”, it will now say “the Lessor”! Do the same for buyer and lessee.
You will notice that in this case the datafields in #buyer
and #seller
were mapped automatically to the relevant #lessor
and #lessee
datafields as well. Clause9 will automatically do this if the datafields have the same name and are of the same type.
This underlines the importance of having a consistent naming policy throughout your organisation for concepts and datafields. Datafields will be mapped automatically to other datafields.
Datafields can be mapped manually as well if their names are not identical. The mapping tab contains a map datafields section under the map concepts section. Similarly to mapping concepts, you can select a datafield (in map from) that should act as another datafield (in map to), i.e. take any inputs given to that other datafield.
Mapping datafields will remove the need to enter the same information multiple times in the same document, further adding to time saved by automating your documents!
Whereas snippets already enable you to replace a piece of text that is used multiple times across a clause or across several clauses/documents, combining snippets with parameters further upgrades the re-usability of a snippet by enabling you to replace the placeholder(s) in a snippet with different input each time you use the snippet.
Parameters are written starting with a question mark, followed by a name of your choice in all caps. For example: ?NAME
or ?TYPE
. Written as such, the parameter should be used in the (internal or external) snippet as a placeholder for input that can be chosen elsewhere (i.e. where the snippet itself is being referenced).
Without a value, the parameter in the snippet itself will give an error message (the name of the parameter surrounded with a purple background). So to be of any use, it should be assigned a value. That is done in the snippet reference.
The grammar for this is as follows: insert the snippet reference, followed by left parenthesis (
. Insert the name of the (first) parameter. To assign it a value, insert :=
followed by the relevant value. Multiple parameters can be assigned a value in one snippet reference by separating them with a comma. Close the reference off with right parenthesis )
. The result looks like this:
for an internal snippet: @SNIPPET-REFERENCE(?PARAMETER1 := value1, ?PARAMETER2 := value2)
for an external snippet: @#snippet-reference(?PARAMETER1 := value1, ?PARAMETER2 := value2)
(The only difference between these references is the way internal and external snippets themselves are referenced)
Examples of values:
a concept reference
a datafield
a special function
An example of a very simple notice clause will illustrate this:
Using the button however, you can ‘teach’ Clause9 that this abbreviation refers to a concept of your choosing. Browse to your concept and click select concept. From now on, when typing #non-sollicitation-smke
Clause9 will automatically make the link between your abbreviation and the original concept.
Under General, tick the box that says . In the document, a blue dotted line will appear in place of the page break. The page break will be inserted right before the clause you selected.
Double-click the correct folder, if any, to navigate into it. When you have arrived at the correct location to create your clause, click and then to create the clause. Assign the clause a file name and click to save it.
First select the existing clause you want your new library clause to be created under, then press the icon at the top left of the screen and select New library clause.
Double-click the correct folder, if any, to navigate into it or simply select it by clicking once and then press to drop the clause into that folder. From the edit menu on the right hand side of your screen, assign the clause a file name and click to save it.
the to enable the user to choose multiple options, and
a form of that forces use of a bulleted list.
by using (a variation of) the @bullets
.
Check out the of both options for our list. Before clicking to the next page, consider for a moment how you would go about creating our list.
Here we can make use of another enumeration option that we listed initially: the @bullets
. This function make a bulleted list of the inputs of the datafield that it contains. So as our final bullet, we add: * @bullets(#loan-agreement^conditions-precedent-free)
. Our final clause grammar looks like this:
Let’s say you are drafting a lease agreement and you are looking for a notice clause. Using the inside the Assemble Document mode, you find the perfect clause. But there’s one problem. That clause was written for a share purchase agreement, with parties being referred to as the Seller and the Buyer…
No problem! In Clause9, you can easily adapt your clause to the document you are drafting by using .
First, select the notice clause, i.e. the clause you want to adapt itself. Selecting the clause will reveal a new pane in the on the right: the pane. This pane has two tabs: Layout (selected by default) and Mapping. Click on Mapping.
In the Mapping tab, we can choose to map concepts and datafields. In this case, we want the #buyer
and #seller
concepts to act as if they were #lessor
and #lessee
. The Map from selector lets you choose a concept that should be changed into another concept (selected in map to). Let’s start with the #seller
concept. In Map from, select seller. In Map to, select lessor. To apply the mapping from seller to lessor, click the button.
Parameters are a tool that can be used in Clause9 grammar to make the use of even more flexible. They function as a kind of placeholder.
The parameter can get nearly any value that results in a piece of text. The most important limitations are that a parameter value itself cannot be (i) plain text or (ii) a condition (however, note that use of the @if
is allowed).
In the document properties of a DOCX file, you can specify data such as the author, company, etc. — as well as a variety of other information, such as comments, the relevant manager, and even custom information.
ClauseBase supports setting such data through the system of Global Placeholders. Have a look at the section Using placeholders to set MS Word document properties in particular to learn how to specify such system.
Please note that only administrators can currently define these properties.
Drafting an agreement — or sometimes other types of documents — means that, somewhere in the document, you will have to add a signature block. There should be at least as many signature blocks as there are parties, containing their names and titles. How to go about this?
Let’s go over a step-by-step example. We will be making a signature block for a lease agreement between two parties (legal entities), each being represented by max. two persons (who may be acting in various capacities). We will be working in the Assemble Document mode for the purposes of this How To.
We need at least 4 rows (name of the party, space for the signature, name of the representative and his/her title) and 2 columns (one for each representative). Following the rules of making tables in the ClauseBase grammar, that would look as follows:
Any new clause will contain a paragraph number already (“1.”). If a clause contains only a table, this number has to be removed. A table on itself cannot be a numbered paragraph — it can, however, be part of a numbered paragraph or clause if text is added before the table and an empty line is left between the text and the table.
Our signature block must contain the following information:
the name of each representative
the title / capacity of each representative
In normal circumstances, you would have already made the concepts and datafields implementing the parties and their information. For the purposes of this tutorial however, we will do it from scratch. If you are familiar with creating concepts and datafields, please skip ahead to Populating the table.
Concepts can be created in various ways. We will be creating them from inside the Assemble Document mode. The first party signing our agreement will be the lessor, so let’s create a concept for the lessor by typing #Lessor
in the top left cell. If this concept does not exist yet, you will be shown a red alert underneath the clause editor:
Click on #lessor and select create a new Concept.
While still in the concept editor, navigate to datafields in the menu on the right. We need four different datafields: one for each representative’s name and one for each representative’s capacity. As these are textual inputs, we will choose text type datafields.
Hit the save in library button in the bottom left corner.
Our table is still mostly empty for now, so let’s start giving it some actual content. The first row already contains #Lessor
.
Capitalising the first letter of #Lessor
makes sure that any article being added in front of it will be capitalised. That is why capitalising a reference to a concept should only be done in the beginning of a sentence (or in any other case where you would want the first letter of the article to be capitalised as well).
The third and fourth rows should contain the names and capacities of the representatives of the Lessor. The #lessor
concept should already contain the relevant datafields (if this is not yet the case, please follow the instructions in Adding datafields). Add these datafields to the relevant cell by appending the name of the datafield behind #lessor
and adding a ^ symbol in between. Our table will now look like this:
Tip: when creating a table, the text can start looking messy. However, ClauseBase has a feature to make your source text more easily viewable. Click the three dots in the top right corner of the clause editor and choose reformat tables. Now your source text will be reformatted to look more like the actual table.
Having added the datafields, any user can complete the details of both representatives in the table.
But there are undoubtedly cases where the Lessor will be represented by only one representative (e.g. in case of a power of attorney granted to one person). How can we avoid having a placeholder in our text if the details of only one representative have been completed?
We can do this by adding a condition to the details of our second representative. In this case, we want the second column of our table not to be shown unless the name of the second representative has been completed. To achieve this, we will make use of the @assigned
special function. This function will evaluate whether a datafield was assigned a value or not and will on that basis return true or false.
To make our column conditional, we have to add an additional row on top of our table, which contains the condition for a column to be shown in the relevant column.
A condition in ClauseBase is always written between curly brackets ({ }
). The condition we will be using is: if #lessor^representative2-name
was assigned a value, only then the column should be shown. In ClauseBase grammar, the cell on top of the column would then look as follows: {@assigned(#lessor^representative2-name)}
. Technically, @assigned
will return “true” if #lessor^representative2-name
was assigned a value and “false” if it wasn’t. If the condition evaluates to false, the column will not be shown. Adding this to our table (and reformatting it) results in the following:
Now our table contains an empty row where the signatures should go. However, we need an indicator where each representative should sign.
We can make use of the % signature %
functionality included in ClauseBase. Typing % signature %
in both cells of the third row. This will make sure a dotted line is inserted, with sufficient space above and below the line for a (large) signature. Check out the article on Special codes for more information.
Alternatively, you could make use of the @tab-u special function in the third row to create a full line instead of a dotted line.
Now that the content of our table is ready, let’s make sure it looks good as well. For the purposes of our tutorial, we want a table that is aligned to the left, with the name of the party in all caps and bold and without any borders.
Adding styling to a table can be done either by modifying the custom styling of the clause containing the table or by adding deviating styling to our table itself. We will go with the second option in this tutorial.
To do this, we need to add a new row with one single cell on top of our table. This cell will contain our styling settings for the entire table, each separated by a comma, as follows: || % align left, borders false, borders horizontal false, borders vertical false % ||
.
Next we add the bold and all caps deviating styling to our (now) third row between % symbols: % bold true, all caps %
. The entire table should now look as follows:
The signature block for the Lessor is now complete. Duplicating it for the Lessee should now be easy: just copy/paste your Lessor table and replace the #lessor
concept by #lessee
, after having created the relevant datafields.
For a more advanced exercise, you can try to make the signature block repeat itself. This can be handy in case it is possible the agreement will be entered into between multiple lessors and/or lessees.
First, replace all text datafields for the names of the lessors/lessees, their representatives and the capacities of their representatives by repeating list type datafields of type text. This will make sure the input can be different between the various repeating instances of your signature blocks. In addition, instead of only referring to the concept label of #lessor or #lessee, the signature block should probably now also refer to the individual name of the relevant lessor/lessee to make sure on whose behalf the agreement is being signed.
After having done so, select your clause and click the advanced tab in the operations panel. Under repeat clause, choose a datafield on the basis of which the clause should repeat itself (e.g. the repeating list datafield containing the names of the lessors/lessees). If done correctly, the signature block should now be repeated for as many times as there are inputs assigned to the datafield of your choosing.
But how do you designate which clauses are linked together as alternatives?
What you see then should look something like this example:
Note that ClauseBase recognizes the fact that you have linked two clauses together and so will automatically designate the two as alternatives since that is the only relation two clauses can have. If on the other hand you would like a concept to a clause, you could choose between different possible relations.
Also note that the link created in this example designates an outgoing link from the seller-friendly clause to the buyer-friendly clause. If you take a look at the links tab from the clause you linked to, in this case the buyer-friendly version of the clause, you will see this:
This “incoming link” shows you the link that was made from the seller-friendly clause and also shows you that the relationship with this clause is that is is an alternative of the former. This way you do not have to make the connection from the two sides.
Clause9 distinguishes between three different kinds of cross-references:
To a clause within the same clause file
To another clause within the same document
To a document within the same binder
§number
is used to refer to a numbered sub-clause within the same clause file. For example, use §2
to refer to 2. Beta
. In the document, it will say Clause 2.
Under the reference styling settings, you can change the word used for “Clause” in the document (e.g. “Article” or “Section”).
§this
is used to refer to the current numbered subclause. §this-title
refers to the title of the entire clause.
In the above example, if you were to insert §this
into 2. Beta, the reference in the document would show as this Clause 2. By inserting §this-title
into * element 1
, Clause9 will convert the code to this Clause 2 since Clause 2 is the associated clause title.
If the title is currently not visible, an error will appear.
If you created a regular bullet list (using asterisks), referring to the previous bullet is done with the command §*-
, the next bullet with §*+
and the current bullet with §*
.
More information on how to create enumerations can be found here.
There are two different methods of cross-referencing:
One-time reference to another clause using cross-tags
Content-based reference to another clause using concepts
This type of cross-reference will work both when the target clause is located in the same document and when it is located in another document of the same binder.
This allows you to insert a reference to another clause using its cross-tag. In order to insert a cross-tag, first, navigate to the clause the reference should be directed to. The cross-tag-name is assigned under cross-tags and entered by hitting the enter key.
Now, the cross-tag can be inserted in the clause content body by typing §cross-tag-name
(e.g. §this-is-the-cross-tag-name
).
This command allows you to insert a reference to the first clause in the document that implements a specific concept. Concepts are implemented under the links tab of a clause.
In order to insert the reference, type §#concept
(e.g. §#client
).
It is highly prefereable to use cross-tags to insert cross-references. Unless there is a good reason to use a concept (e.g. the target clause already implements a certain existing concept), cross-tags should be used. Cross-tags are much faster (in terms of document loading time) and do not require a separate file to be created in the clause library.
Inserting a cross-reference to another document in the binder is very similar to inserting a cross-reference to a clause. A document can contain cross-tags or implementing links to concepts much like a clause can.
In the Binder panel, click the Properties button at the button and then click the target document (the document you would like to refer to) in the pop-up menu.
Now you will be able to edit that document’s properties. Insert a cross-tag (or an implementing link to a concept), similar to creating a cross-reference to another clause, and save the document by clicking save in library or update adhoc doc (as relevant).
Which of the two approaches you should use, mainly depends on the question whether you are already using that concept as a defined legal term in the document. If that is not the case, then it’s much faster to use a cross-tag reference, as this avoids that you have to create a new concept. It also avoids that you litter your database with single-use concepts.
Furthermore, cross-tags are a lot easier to process for Clause9 so especially when you are working in long, complex documents, performance will be significantly increased if you primarily rely on cross-tags as opposed to concepts.
Clauses introducing the parties to a contract or other legal document are often some of the more complex clauses you can draft in Clause9. This is because there are an enormous amount of permutations clauses like these can have.
Below, we will create a party introduction clause for a sale and purchase agreement in which there is at least one seller and at least one purchaser, with the option to designate additional ones. Each seller and each purchaser can in turn be either a legal person or a natural person and different datafields should be shown depending on this qualification (e.g.: a natural person does not have a company number).
First, we must decide how we will structure the party introduction. Two things are important to take into account here:
We know that there are 4 basic permutations of the parties, i.e.: (i) seller – legal person, (ii) seller – natural person, (iii) purchaser – legal person, and (iv) purchaser – natural person
We need to be able to repeat these 4 basic permutations with differing input depending on the user’s preference.
For each individual permutation, we will have to create a separate clause and then enable/disable/repeat them as is necessary. This means we will be working with repeating list datafields. For a primer/reminder on how these work. This also means we will be working with the “enabled?” tab of the clause files.
Below, we go through the example for the seller – legal person and seller – natural person. This exercise can then be repeated for the purchaser – legal person and purchaser – natural person.
The final product for these clauses could look like this:
Seller – legal person
Seller – natural person
* Acme Ltd, a company incorporated in Belgium, having its registered office at Church Street 4 and registered with the Crossroads Bank for Enterprises under company number 12345689, duly represented for the purpose of this Agreement by John Doe, CEO;
* Jane Doe, born on 1 January 1985, national registry number 123456789, residing at Church Street 4, Belgium;
Transformed to ClauseBase grammar, they would look something like this:
Seller – legal person
Seller – natural person
* #seller^company-name #seller^company-type, a company incorporated in #seller^country-of-incorporation, having its registered office at #seller^seat-address and registered with #seller^national-company-register under company number #seller^company-number, duly represented for the purpose of #°contract by #seller^representative-name, #seller^representative-function
* #seller^first-name #seller^last-name, born on #seller^date-of-birth, national registry number #seller^national-registry-number, residing at #seller^residence-address, #seller^country-of-residence
If any of these datafields have already been assigned in your Clause9 library and are not repeating list datafields, please choose different ones. It is important to create new datafields, as will be demonstrated below.
For the repeating list datafields to function propertly, it is important not to reuse datafields between the legal person clause and the natural person clause. Otherwise, it will be difficult to assign the proper datafield to the proper clause.
Create the concept #seller
by clicking the red error notification (assuming this concept does not already exist in your library), clicking “create a new Concept“, and navigating to the desired folder to place it in. Next, each individual datafield should be created and designated as a repeating list datafield. To do this quickly, simply click a datafield as displayed in red next to the concept and select repeating list.
The reason we are creating repeating list datafields and not text datafields is because we know that there may potentially be two or even more legal person sellers. We want to be able to fill information like the company name out multiple times instead of only once.
When you have created each individual repeating list datafield, navigate to the concept file of “#seller” by Alt + clicking (Windows) or ⌥ + clicking (MacOS) it. Then, for each individual datafield, you need to assign the type of repeating list it will be. For the datafields that we have assigned, change element type to text for all of them except for #seller^date-of-birth
, which should have the element type “date”.
Next, we need to designate the datafield which will cause the clauses to be repeated. It makes sense to choose the company name/first name for the legal person/natural person respectively as the clauses need to be repeated for each name that is filled out.
Select the “seller – legal person” clause in the interactive preview on the left-hand side of the screen and navigate to the advanced tab of the operations panel. Under the dropdown menu of heading “repeat clause“, choose the company-name datafield. Do the same for the “seller – natural person” clause but choose the first-name datafield.
Activating this repeat clause option means that every single time a new name is filled out, the clause will be repeated and the datafields therein will be filled with the values that have been provided for each entry. For example, if you fill out three names, there will be three entries under the datafields tab of the operations panel. If you then start filling out addresses, the first address entry will follow the first name entry, the second address entry will follow the second name entry and so on.
Your clauses are now capable of being repeated for as many parties as you wish to identify. However, both the “legal person” and the “natural person” clauses are always visible under the current set-up. What if, for example, there are only legal persons in the document you want to create? For this, you need to define a condition that enables the clause upon fulfillment.
For each individual clause, open up the file by double-clicking the preview on the left-hand side of the screen then navigate to the “enabled?” tab of the clause file. The condition that we need to input here should essentially say “only if a company/first name of a legal/natural person has been filled in, can this clause be shown.” To achieve this, we will make use of the @assigned
special function. This function will evaluate whether a datafield was assigned a value or not and will on that basis return true or false:
Seller – legal person
Seller – natural person
@assigned(#seller^company-name)
@assigned(#seller^first-name)
When you have performed the above steps, you can test out what you have created by going to the datafields tab of the operations panel and interacting with the datafields you have created. You should be able to see the following:
Both clauses are disabled by default (since no name has been entered yet).
Entering in a single seller – company name enables the seller – legal person clause and fills out the company name.
Entering additional company names repeats the seller – legal person clause as many times as you entered in company names.
The same goes for the seller – natural person clause.
If the clauses react the way they should based on your input, you can repeat the exercise for the purchaser clauses by copying the content of the seller clauses and replacing #seller
with #purchaser
.
Note: the icon next to “table” is the same icon as that of repeating list datafields.
For the purpose of this tutorial, let’s create a new card for each clause. To do so, follow these steps:
Name the card (e.g.: “Seller – legal person”) and the question (e.g.: “Identification information”).
Assign a datafield to each individual column with the help of the dropdown menu.
Repeat this exercise for the three other clauses.
In many documents, annexes/schedules must be added based on certain options or clauses being chosen in the main body of the document.
A good example would be a consent form annex to a share transfer agreement, which is what we will be implementing here. We want the consent form to be included if the share transfer agreement contains a clause requiring a consent form to be included. The annex must also be included if the target company is a company type to which transfer restrictions apply by law. For this latter category, we will take as an example the Belgian law BV/SRL (besloten vennootschap/société à responsabilité limitée).
Prior to starting this tutorial, please create the following concepts if you do not have them yet:
#buyer
, concept label buyer
#seller
, concept label seller
#company
, concept label company and datafield named company-type with one predefine: BV/SRL
#agreement
, concept label agreement
Make a clause with content title “Consent” and the following content body:
Create a new document with document title “Share Transfer Agreement”. The document title can be configured under the document pane of the Assemble Document operations panel.
Create another document with document title “Annex Form of Consent Letter”. While in a real situation we would add clauses to this document, for the purposes of this tutorial we will leave it empty.
How can we make sure the annex only appears when required? As a reminder, these are the conditions on which the annex should appear:
the consent clause was implemented; or
the company type of the target company is BV/SRL.
In Clause9 grammar, the second condition is easy to implement: {#company^company-type = "BV/SRL"}
. But how can we implement the first condition?
There are two ways of doing this. Either we add an “implements” link to a concept to our clause, or we add a so-called cross-tag. The Cross-references article provides some guidance on when to use the link and when to use cross-tags. For the purposes of this tutorial, we will be using a cross-tag.
Edit the “Consents” clause you created in the beginning. Navigate to cross-tags in the navigation menu on the right. Add “consent-required” as a cross-tag and press Enter.
To make the annex subdocument conditional on the clause with the cross-tag being included and visible in another subdocument in the binder, we can make use of the @crosstag-implemented
special function. This function takes a cross-tag and checks whether the document or binder contains a clause (that is currently visible) with such cross-tag. If it does, the function returns true. Else it returns false.
Let’s implement this. In the binder pane, edit the Annex Form of Consent Letter document properties. You can do this by clicking the Properties button under the Advanced heading of the Binder pane.
Now we can edit this subdocument’s properties. Go to Enabled? in the navigation menu on the right and write the condition using the @crosstag-implemented
special function. It will look like this:
In the enabled? section, conditions are written without curly brackets. As this section can only contain conditions, curly brackets are not needed.
However, we want our other condition (i.e. the company being a BV/SRL) to trigger the annex as well. How can we combine both of these conditions? We can make use of ways of combing conditions: AND, OR or NOT. Consider which one we want to use here.
As either of our conditions should trigger the annex, we will make use of OR:
We also want to be able to refer to the annex dynamically in our clause. We can do this by using cross-tags as well (or, again, by creating links). Let’s add a cross-tag to our annex subdocument: “annex-form-of-consent-letter”.
Now how do we refer to the subdocument in our “Consents” clause? We make use of the §
symbol. Let’s implement this in our clause:
Under default styling settings the clause text will refer to the annex using its short document title, if there is one. If you have not chosen a short document title, the full title will be used. We can make Clause9 always use the full title by going to the styling pane of the operations panel. Under the tab “references”, you can choose what cross-references look like by changing this setting:
However, let’s keep this setting as it is – using the short title.
One final tweak we can make is giving our subdocument dynamic numbering. Let’s assume our agreement can contain more than one annex. In such case, we will want to number our annexes. But the numbering should of course adapt automatically to annexes being added/deleted. There’s an easy way of doing this in Clause9.
Clause9's placeholder for dynamic numbering of document titles is {1}
. Add {1}
to the document title you use for cross-references. In your document, {1}
will be changed to the actual number of the relevant subdocument in the binder.
There you go – you have now made a binder of two documents where one document will be enabled based on one of two conditions being fulfilled in another document. In practice, these conditions can be anything you want them to be. And you can use more complex combinations of conditions as well. Good luck!
Create a new library clause by clicking the button and selecting New library clause. First we must decide how to structure our signature block. Signature blocks are usually structured as two separate blocks next to each other (either for two parties or for two representatives of some party). There should be some space for the actual signature to go. That’s why a table seems to be the most appropriate way of structuring the signature block. Let’s set up a basic table.
Now we have to choose a location for our concept. Typically this would be a special concepts folder (which can be created by holding Shift and clicking ) in the appropriate place in your clause library. Browse to the location of your choosing and click select current folder. A new tab will now be opened in our editor to complete the properties of our newly created concept “lessor”. Navigate to the concept labels property of the concept (in the navigation menu on the right).
Add an English concept-label by clicking the button. Singular will be “lessor” and plural “lessors”. Choose “neutral” for the gender. The other options are fine: a defined article (“the”) must be used, by default this concept label should be singular and its capitalization may be adapted to the applicable grammar & styling.
Click the button and select text. Give your datafield a name, e.g. representative1-name. Repeat this for each of the four datafields (representative1-name, representative1-title, representative2-name and representative2-title).
In Assemble Document mode, the alternative symbol shows you which alternatives are available for a given clause. Clicking this symbol gives you a shortlist of available alternatives which you can then insert by simply clicking one.
If this symbol is not visible, you must enable it in the document’s options menu at the right side.
Start by opening a clause in the clause editor, then navigate to the links tab on the right-hand side. Click the button. This will open a prompt allowing you to navigate to the clause you wish to indicate as the alternative. Do so and when you have found it, select to create a link between the two clauses.
Let’s start by creating the first two permutations: the seller – legal person and seller- natural person. Navigate to the assemble document menu and open an empty document. Create new library clause by clicking the button, selecting New library clause and navigating to the desired folder to place it in then repeat this exercise for the second clause.
Repeating list datafields are unique in the way that they need to be shaped in Design Q&A mode. Unlike other datafields, you cannot use Batch create to create questions or cards with them. Instead, you need to use the or buttons and then select table.
Create a card with a table by clicking and then table.
Select the question and click on the button.
Click the button as many times as there are datafields in the seller – legal person clause.
In order for the end user to be able to generate several documents in one go (even having the option to create separate Word files or PDFs), we have to include these documents in a binder. A binder is created by choosing in the top right corner and choosing New Binder. Go to the binder pane and add both the Share Transfer Agreement and the Annex Consent Letter using the button.
The Share Transfer Agreement will function as the main body so we can check the option under the Share Transfer Agreement document.