Community case - liquid testing - NL cost of sales
Case outline
The purpose of this case is to give a practical example of how to code liquid tests in YAML. The example is based on the NL Annual accounts note Cost of Sales.
If you don’t have the rights to view the liquid code it may still be useful to go through this case and see for instance how units are defined.
This case may suit best if you are already familiar with some concepts of liquid testing as well as writing YAML tests.
Guidelines implementation
Coding best practices
- When new to liquid testing, it makes sense to choose one actual template in a development environment to start from
- Write down which test company you have used to copy from the debug mode
- Include a numbering for the unit + test in each test name in the YAML
- Add a one-line YAML comment before each test to explain briefly what this test is about
- Make use of the collapse + expand and alias-autofill functionality of the text editor you are using, to keep overview
- Refer to Liquid testing guidance for general tips and good practices on YAML syntax
Make use of debug mode
- Each scenario that becomes a YAML test corresponds to a specific functional scenario. Create this scenario in input view you have selected. The relevant text properties, result tags and rollforward parameters can then be obtained via the debug mode
- Note that besides input fields there is also other source data for a test, such as custom data and results from another template, and all data in the drops (e.g. accounts)
Start with an empty state
- The empty state helps in step-by-step adding more tests and scenarios in order to create a YAML that adds value when used for liquid testing. The first unit defined is the “empty state” (see code in bottom section).
Identifying units and tests
The most difficult step in writing tests defining the ‘units’. The approach here is as follows:
-
Try to designate functional elements of the template, which often reflect sections of code that can be isolated as units
-
Define a unit as all code that relates to a functional element
-
Obtain an overview of all source data of the template, and allocate the source data to the functional elements. It can help to enter a lot of data in the template and then to view the debug mode, but not without carefully inspecting the template code
-
For each unit, determine a minimum of two scenarios based on:
- Different possible data sources available for that unit, and
- Altering the value of its data sources in the data section in the YAML
- Define the scenarios such that the largest piece of code is covered with the minimum number of tests
The YAML for the example test suite can be found under the documentation
section further below.
In the next couple of sections it is explained how each unit is determined, which source data and results are relevant to it, and how scenarios are determined on which the YAML tests are based.
(Unit 1) Account groups
1.1 Unit definition
NL cost of sales displays a list of account groups in a table which looks as follows. This section can be turned on-and-off with a boolean on top (Table). The first unit is defined as all code pertaining to this table.
1.2 Source data
This functional element uses a lot of different source data: settings from another template (general_settings
), client input, previous year ledger data, and current year ledger data.
1.3 Result tags
The most relevant result tags for this unit are the RGS-code denominated results for cy and py for each account group, such as WKprGrp_cy_value
. These are already all included in the empty state (but with 0-values).
1.4 Scenarios
Based on functional knowledge of the template and inspection of the code, important functional scenarios are:
- Default state (test
unit_1_account_group_test_1
)
The only text property drafted is the rounding setting from another template (general_settings):
reconciliations:
general_settings:
custom:
rounding.ofAcc: return_values_in_ones
- Therefore: Different rounding settings: in
unit_1_account_group_test_2
(only the rounding setting is changed to thousands, leaving other input data equal) - Overwriting values of the account groups in current year, previous year and both
This implies mocking some more text properties in unit_1_account_group_test_3
:
reconciliations:
general_settings:
custom:
rounding.ofAcc: return_values_in_thousands
sorting.amount_or_rgs: rgs
note_WKpr:
custom:
WKprGrp.drilldown: true
choice.WKprMuo: Alternatieve omschrijving - Mutatie omzetvorderingen
choice2.WKprMuo: Alternative description - Movements in sales receivables
current_choice.WKprGrp: '24500.0'
current_choice.WKprLeb: '-5000.0'
prev_choice.WKprKuw: '3100.0'
prev_choice.WKprLeb: '4500.0'
- Different sortings of the table (
unit_1_account_group_test_4, unit_1_account_group_test_5
)
Please refer to the code block in the bottom section of the case to see all tests in full.
(Unit 2) Broken bookyears
2.1 Unit definition
In the current view, we see regular bookyears displayed in the headers (for a P&L note), but the template automatically turns these into ‘2017-2018’ for instance, if the bookyear would start halfway 2017.
Display of text such as headers is often not easily included in a unit, because it has no corresponding result tags and is usually tested as part of layout testing. However as an exception to this, I define unit number (2) as the broken bookyear logic. Based on experience this is a topic clients pay attention to and which also led to bugfixes in the past, therefore it is assigned to a unit for liquid testing purposes.
2.2 Source data
Source data is only to be determined in the context section of the YAML, as some “irregular bookyear scenarios” need to be mocked. No actual input view of a template is used here (note that using debug mode of an actual template is helpful but liquid tests can also be written completely without it).
2.3 Result tags
This unit will require creation of a new result tag in the template. I decide to add it because there won’t be another way to test this isolated code (part main):
{% comment %}results for liquid testing{% endcomment %}
{% result 'current_year_to_display' current_year_to_display %}
{% result 'prev_year_to_display' prev_year_to_display %}
2.4 Scenarios
Relevant scenarios: one for each ‘type’ of irregular bookyear, leaving all other data
more or less equal:
- Broken but same length (e.g. 1/7 to 30/6). Recall from the documentation that under the data section, there is the YAML option to add
special_book_years
as follows:
data:
special_book_years:
2016-07-01: 2017-06-30
2017-07-01: 2018-06-30
- Shortened (using the same YAML functionality)
- Prolonged
(Unit 3) Export language scenarios
3.1 Unit definition
In the NL annual accounts, clients can set up a template in two languages simultaneously. This is mostly visible at the left side of the template where the descriptions are shown. This feature requires a lot of specific code throughout the template. It is not a specific table or section of the template from a user perspective, but it is a functional element.
3.2 Source data
The double/single language option and relevant export language settings are all found in another template, general_settings
. Other relevant source data are the multi-language input fields visible in that template.
3.3 Result tags
The relevant result tags are however to be found only in part nl_aa_notes_p1
and nl_aa_notes_main.
3.4 Scenarios
Test scenarios are the functional export language scenarios from the general settings:
- Two-language preparation (‘double table’), with English export
- Two-language preparation, with Dutch export
- One-language preparation (Dutch export)
reconciliations:
general_settings:
custom:
rounding.ofAcc: 'return_values_in_ones'
results:
grondslage_table: 'double_table'
grondslagen_export: 'Eng'
As you can see in the YAML text on the bottom, also some text property is to be mocked to trigger the translation logic, e.g. as seen in unit_3_language_test_1
:
namespace_WKprGrp.namespace_WKprGrp_1:
additional_text_provided_nl: 'Liquid testing NL'
(Unit 4) Show previous year
4.1 Unit definition
This unit relates to logic on whether or not the option to show the previous year column is available and the actual effect of enabling or disabling this option.
4.2 Source data
The only source data for this unit is the boolean button value and the context
data, which determines whether or not the template is viewed in the first year in SF.
4.3 Result tags
The results (py) for each account group, which are dynamically named after the account code for that group. This is because the py results will not be sent in case previous year view is not activated.
4.4 Scenarios
Scenarios included:
-
unit_4_show_prev_year_test_1
: only cy mocked in data section -
unit_4_show_prev_year_test_2
: cy and py mocked in data section; boolean blank (note that the default istrue
):
note_WKpr:
custom:
check.prev_year: null
-
unit_4_show_prev_year_test_3
: cy and py mocked, boolean set to false
Test suite structure
- The first test that is mocked is the empty state. Then for each unit a number of scenarios is determined so the total number of YAML tests equals
units * scenarios + 1
- There is no “success vs. fail-path” logic applied to all units, this is applicable only for unit no. 5 in which
reconciled
logic is applied
Make use of anchors and aliases
- Definition of anchors should only be done in the first test of each scenario
- Definition of anchors should be limited to the first test of the entire suite as much as possible (not counting the empty state)
Results
- New results are created in exceptional cases, i.e. when a certain piece of code is deemed important but does not affect any result tags. In the example above this is the case for unit 2 (broken bookyears) for which result tags were added which include the column headers displayed. A rule is that the results should be useful somehow for a client (e.g. in an insights query)
Documentation
See below for an example of how the set of liquid tests described above is written in YAML.
YAML code:
empty_state:
context:
locale: en
period: 2018-12-31
data:
company:
name: JAF Bende Holding B.V. (jaarrekening test)
periods:
2018-12-31:
reconciliations:
general_settings: {}
note_WKpr: {}
expectation:
reconciled: true
results: &zero_result_bp
WKprAkl_cy_value: 0.0
WKprAkl_py_value: 0.0
WKprAkv_cy_value: 0.0
WKprAkv_py_value: 0.0
WKprBtk_cy_value: 0.0
WKprBtk_py_value: 0.0
WKprGrp_cy_value: 0.0
WKprGrp_py_value: 0.0
WKprIna_cy_value: 0.0
WKprIna_py_value: 0.0
WKprInh_cy_value: 0.0
WKprInh_py_value: 0.0
WKprInp_cy_value: 0.0
WKprInp_py_value: 0.0
WKprKit_cy_value: 0.0
WKprKit_py_value: 0.0
WKprKra_cy_value: 0.0
WKprKra_py_value: 0.0
WKprKuw_cy_value: 0.0
WKprKuw_py_value: 0.0
WKprKvg_cy_value: 0.0
WKprKvg_py_value: 0.0
WKprKvp_cy_value: 0.0
WKprKvp_py_value: 0.0
WKprLeb_cy_value: 0.0
WKprLeb_py_value: 0.0
WKprMuo_cy_value: 0.0
WKprMuo_py_value: 0.0
WKprPrd_cy_value: 0.0
WKprPrd_py_value: 0.0
WKprPrg_cy_value: 0.0
WKprPrg_py_value: 0.0
WKprVom_cy_value: 0.0
WKprVom_py_value: 0.0
WKprOni_cy_value: 0.0
WKprOni_py_value: 0.0
WKprTvl_cy_value: 0.0
WKprTvl_py_value: 0.0
array: &rgs_codes_array [WKprKvg, WKprKvp, WKprKuw, WKprAkl, WKprIna, WKprAkv, WKprKra, WKprInh, WKprInp, WKprLeb, WKprBtk, WKprKit, WKprMuo, WKprVom, WKprPrg, WKprPrd, WKprGrp, WKprOni, WKprTvl]
other_cy_value: 0.0
other_py_value: 0.0
current_year_to_display: '2018'
prev_year_to_display: '2017'
rollforward: &zero_rollforward_bp
current_choice.WKprAkl: null
current_choice.WKprAkv: null
current_choice.WKprBtk: null
current_choice.WKprGrp: null
current_choice.WKprIna: null
current_choice.WKprInh: null
current_choice.WKprInp: null
current_choice.WKprKit: null
current_choice.WKprKra: null
current_choice.WKprKuw: null
current_choice.WKprKvg: null
current_choice.WKprKvp: null
current_choice.WKprLeb: null
current_choice.WKprMuo: null
current_choice.WKprPrd: null
current_choice.WKprPrg: null
current_choice.WKprVom: null
current_choice.WKprOni: null
current_choice.WKprTvl: null
prev_choice.WKprAkl: null
prev_choice.WKprAkv: null
prev_choice.WKprBtk: null
prev_choice.WKprGrp: null
prev_choice.WKprIna: null
prev_choice.WKprInh: null
prev_choice.WKprInp: null
prev_choice.WKprKit: null
prev_choice.WKprKra: null
prev_choice.WKprKuw: null
prev_choice.WKprKvg: null
prev_choice.WKprKvp: null
prev_choice.WKprLeb: null
prev_choice.WKprMuo: null
prev_choice.WKprPrd: null
prev_choice.WKprPrg: null
prev_choice.WKprVom: null
prev_choice.WKprOni: null
prev_choice.WKprTvl: null
# (1) account group unit is included in nl_aa_vars and nl_aa_notes_p1 58-59 and loosely matches the logic behind the 'big table'
unit_1_account_group_test_1:
context:
locale: en
period: 2018-12-31
data:
periods:
2017-12-31:
accounts:
WKprGrpGr1.000:
id: 85315173
value: -66943.95
WKprAkl.000:
id: 80000000
value: 1000
2018-12-31:
accounts:
WKprGrpGr1.000:
id: 85315173
value: -20500
WKprAkl.000:
id: 80000000
value: 2000
reconciliations:
general_settings: {}
expectation:
reconciled: true
results:
<<: *zero_result_bp
WKprAkl_cy_value: 2000
WKprAkl_py_value: 1000
WKprGrp_cy_value: -20500.0
WKprGrp_py_value: -66944.0
array: *rgs_codes_array
other_cy_value: 0.0
other_py_value: 0.0
current_year_to_display: '2018'
prev_year_to_display: '2017'
rollforward:
<<: *zero_rollforward_bp
unit_1_account_group_test_2:
context:
locale: en
period: 2018-12-31
data:
periods:
2017-12-31:
accounts:
WKprGrpGr1.000:
id: 85315173
value: -66943.95
WKprAkl.000:
id: 80000000
value: 1000
2018-12-31:
accounts:
WKprGrpGr1.000:
id: 85315173
value: -20500
WKprAkl.000:
id: 80000000
value: 2000
reconciliations:
general_settings:
custom:
rounding.ofAcc: return_values_in_thousands
expectation:
reconciled: true
results:
<<: *zero_result_bp
WKprAkl_cy_value: 2
WKprAkl_py_value: 1
WKprGrp_cy_value: -21
WKprGrp_py_value: -67
array: *rgs_codes_array
other_cy_value: 0.0
other_py_value: 0.0
current_year_to_display: '2018'
prev_year_to_display: '2017'
rollforward:
<<: *zero_rollforward_bp
unit_1_account_group_test_3:
context:
locale: en
period: 2018-12-31
data:
periods:
2017-12-31:
accounts:
WKprGrpGr1.000:
id: 85315173
value: -66943.95
WKprAkl.000:
id: 80000000
value: 1000
2018-12-31:
accounts:
WKprGrpGr1.000:
id: 85315173
value: -20500
WKprAkl.000:
id: 80000000
value: 2000
reconciliations:
general_settings:
custom:
rounding.ofAcc: return_values_in_ones
note_WKpr:
custom:
WKprGrp.drilldown: true
choice.WKprMuo: Alternatieve omschrijving - Mutatie omzetvorderingen
choice2.WKprMuo: Alternative description - Movements in sales receivables
current_choice.WKprGrp: '24500.0'
current_choice.WKprLeb: '-5000.0'
prev_choice.WKprKuw: '3100.0'
prev_choice.WKprLeb: '4500.0'
expectation:
reconciled: false
results:
<<: *zero_result_bp
namespace_WKprGrp: ""
cy_spec_sub_value_WKprGrpGr1: -20500
py_spec_sub_value_WKprGrpGr1: -66944.0
WKprAkl_cy_value: 2000
WKprAkl_py_value: 1000
WKprGrp_cy_value: 24500.0
WKprGrp_py_value: -66944.0
WKprKuw_py_value: 3100.0
WKprLeb_cy_value: -5000.0
WKprLeb_py_value: 4500.0
array: *rgs_codes_array
other_cy_value: -40000.0
other_py_value: -7600.0
current_year_to_display: '2018'
prev_year_to_display: '2017'
rollforward:
<<: *zero_rollforward_bp
current_choice.local_current_85315173: null
prev_choice.local_prev_85315173: null
unit_1_account_group_test_4:
context:
locale: en
period: 2018-12-31
data:
periods:
2017-12-31:
accounts:
WKprGrpGr1.000:
id: 85315173
value: -66943.95
WKprAkl.000:
id: 80000000
value: 1000
2018-12-31:
accounts:
WKprGrpGr1.000:
id: 85315173
value: -20500
WKprAkl.000:
id: 80000000
value: 2000
reconciliations:
general_settings:
custom:
rounding.ofAcc: return_values_in_thousands
sorting.amount_or_rgs: rgs
note_WKpr:
custom:
WKprGrp.drilldown: true
choice.WKprMuo: Alternatieve omschrijving - Mutatie omzetvorderingen
choice2.WKprMuo: Alternative description - Movements in sales receivables
current_choice.WKprGrp: '24500.0'
current_choice.WKprLeb: '-5000.0'
prev_choice.WKprKuw: '3100.0'
prev_choice.WKprLeb: '4500.0'
expectation:
reconciled: false
results:
<<: *zero_result_bp
namespace_WKprGrp: ""
cy_spec_sub_value_WKprGrpGr1: -21
py_spec_sub_value_WKprGrpGr1: -67
WKprAkl_cy_value: 2
WKprAkl_py_value: 1
WKprGrp_cy_value: 24500
WKprGrp_py_value: -67
WKprKuw_py_value: 3100
WKprLeb_cy_value: -5000.0
WKprLeb_py_value: 4500
other_cy_value: -19521
other_py_value: -7600
array: *rgs_codes_array
current_year_to_display: '2018'
prev_year_to_display: '2017'
rollforward:
<<: *zero_rollforward_bp
current_choice.local_current_85315173: null
prev_choice.local_prev_85315173: null
unit_1_account_group_test_5:
context:
locale: en
period: 2018-12-31
data:
periods:
2017-12-31:
accounts:
WKprGrpGr1.000:
id: 85315173
value: -66943.95
WKprAkl.000:
id: 80000000
value: 1000
2018-12-31:
accounts:
WKprGrpGr1.000:
id: 85315173
value: -20500
WKprAkl.000:
id: 80000000
value: 2000
reconciliations:
general_settings:
custom:
rounding.ofAcc: return_values_in_thousands
sorting.amount_or_rgs: amount
note_WKpr:
custom:
WKprGrp.drilldown: true
choice.WKprMuo: Alternatieve omschrijving - Mutatie omzetvorderingen
choice2.WKprMuo: Alternative description - Movements in sales receivables
current_choice.WKprGrp: '24500.0'
current_choice.WKprLeb: '-5000.0'
prev_choice.WKprKuw: '3100.0'
prev_choice.WKprLeb: '4500.0'
expectation:
reconciled: false
results:
<<: *zero_result_bp
namespace_WKprGrp: ""
cy_spec_sub_value_WKprGrpGr1: -21
py_spec_sub_value_WKprGrpGr1: -67
WKprAkl_cy_value: 2
WKprAkl_py_value: 1
WKprGrp_cy_value: 24500
WKprGrp_py_value: -67
WKprKuw_py_value: 3100
WKprLeb_cy_value: -5000.0
WKprLeb_py_value: 4500
other_cy_value: -19521
other_py_value: -7600
array: *rgs_codes_array
current_year_to_display: '2018'
prev_year_to_display: '2017'
rollforward:
<<: *zero_rollforward_bp
current_choice.local_current_85315173: null
prev_choice.local_prev_85315173: null
# (2) broken bookyear unit is found in nl_aa_vars 114-158
# First test: 'regular' broken year
unit_2_broken_bookyears_test_1:
context:
locale: en
period: 2018-06-30
data:
special_book_years:
2016-07-01: 2017-06-30
2017-07-01: 2018-06-30
periods: &period_settings_bp
2017-06-30:
accounts:
WKprGrpGr1.000:
id: 85315173
value: -66943.95
2018-06-30:
accounts:
WKprGrpGr1.000:
id: 85315173
value: -20500
reconciliations:
general_settings:
custom:
rounding.ofAcc: return_values_in_thousands
expectation:
reconciled: true
results:
<<: *zero_result_bp
WKprGrp_cy_value: -21
WKprGrp_py_value: -67
array: *rgs_codes_array
other_cy_value: 0.0
other_py_value: 0.0
current_year_to_display: '2017-2018'
prev_year_to_display: '2016-2017'
rollforward:
<<: *zero_rollforward_bp
# Second test: shortened broken years
unit_2_broken_bookyears_test_2:
context:
locale: en
period: 2018-06-30
data:
special_book_years:
2016-10-01: 2017-06-30
2017-07-01: 2018-12-31
periods:
<<: *period_settings_bp
expectation:
reconciled: true
results:
<<: *zero_result_bp
WKprGrp_cy_value: -21
WKprGrp_py_value: -67
array: *rgs_codes_array
other_cy_value: 0.0
other_py_value: 0.0
current_year_to_display: '2017-2018'
prev_year_to_display: '2016-2017'
rollforward:
<<: *zero_rollforward_bp
# Third test: prolonged broken years
unit_2_broken_bookyears_test_3:
context:
locale: en
period: 2018-06-30
data:
special_book_years:
2016-01-01: 2017-06-30
2017-07-01: 2019-12-31
periods:
<<: *period_settings_bp
expectation:
reconciled: true
results:
<<: *zero_result_bp
WKprGrp_cy_value: -21
WKprGrp_py_value: -67
array: *rgs_codes_array
other_cy_value: 0.0
other_py_value: 0.0
current_year_to_display: '2017-2019'
prev_year_to_display: '2016-2017'
rollforward:
<<: *zero_rollforward_bp
# (3) export language scenarios unit is located in nl_aa_notes_p1
unit_3_language_test_1:
context:
locale: en
period: 2018-12-31
data:
periods:
2017-12-31:
accounts:
WKprGrpGr1.000:
id: 85315173
value: -66943.95
2018-12-31:
accounts:
WKprGrpGr1.000:
id: 85315173
value: -20500
reconciliations:
general_settings:
custom:
rounding.ofAcc: 'return_values_in_ones'
results:
grondslage_table: 'double_table'
grondslagen_export: 'Eng'
note_WKpr:
custom:
WKprGrp.drilldown: true
namespace_WKprGrp.namespace_WKprGrp_1:
additional_text_provided_nl: 'Liquid testing NL'
additional_text_provided_en: 'Liquid testing EN'
namespace_WKprGrp.namespace_WKprGrp_2:
additional_text_provided_nl: 'Liquid testing NL (2)'
additional_text_provided_en: 'Liquid testing EN (2)'
toeli.others: 'Alternatieve omschrijving overige'
toeli2.others: 'Alternative description others'
expectation:
reconciled: true
results:
<<: *zero_result_bp
WKprGrp_cy_value: -20500.0
WKprGrp_py_value: -66944.0
array: *rgs_codes_array
other_cy_value: 0.0
other_py_value: 0.0
current_year_to_display: '2018'
prev_year_to_display: '2017'
namespace_WKprGrp: "Liquid testing EN Liquid testing EN (2) "
cy_spec_sub_value_WKprGrpGr1: -20500.0
py_spec_sub_value_WKprGrpGr1: -66944.0
rollforward:
<<: *zero_rollforward_bp
current_choice.local_current_85315173: null
prev_choice.local_prev_85315173: null
unit_3_language_test_2:
context:
locale: en
period: 2018-12-31
data:
periods:
2017-12-31:
accounts:
WKprGrpGr1.000:
id: 85315173
value: -66943.95
2018-12-31:
accounts:
WKprGrpGr1.000:
id: 85315173
value: -20500
reconciliations:
general_settings:
custom:
rounding.ofAcc: 'return_values_in_ones'
results:
grondslage_table: 'double_table'
grondslagen_export: 'Ned'
note_WKpr:
custom:
WKprGrp.drilldown: true
namespace_WKprGrp.namespace_WKprGrp_1:
additional_text_provided_nl: 'Liquid testing NL'
additional_text_provided_en: 'Liquid testing EN'
namespace_WKprGrp.namespace_WKprGrp_2:
additional_text_provided_nl: 'Liquid testing NL (2)'
additional_text_provided_en: 'Liquid testing EN (2)'
toeli.others: 'Alternatieve omschrijving overige'
toeli2.others: 'Alternative description others'
expectation:
reconciled: true
results:
<<: *zero_result_bp
WKprGrp_cy_value: -20500.0
WKprGrp_py_value: -66944.0
array: *rgs_codes_array
other_cy_value: 0.0
other_py_value: 0.0
current_year_to_display: '2018'
prev_year_to_display: '2017'
namespace_WKprGrp: "Liquid testing NL Liquid testing NL (2) "
cy_spec_sub_value_WKprGrpGr1: -20500.0
py_spec_sub_value_WKprGrpGr1: -66944.0
rollforward:
<<: *zero_rollforward_bp
current_choice.local_current_85315173: null
prev_choice.local_prev_85315173: null
unit_3_language_test_3:
context:
locale: en
period: 2020-12-31
data:
periods:
2019-12-31:
accounts:
WKprGrpGr1.000:
id: 85315173
value: 5000
2020-12-31:
accounts:
WKprGrpGr1.000:
id: 85315173
value: 2500
reconciliations:
general_settings:
custom:
rounding.ofAcc: 'return_values_in_ones'
results:
grondslage_table: 'single_table'
note_WKpr:
custom:
WKprGrp.drilldown: true
namespace_WKprGrp.namespace_WKprGrp_1:
additional_text_provided_nl: 'Liquid testing NL'
additional_text_provided_en: 'Liquid testing EN'
namespace_WKprGrp.namespace_WKprGrp_2:
additional_text_provided_nl: 'Liquid testing NL (2)'
additional_text_provided_en: 'Liquid testing EN (2)'
toeli.others: 'Alternatieve omschrijving overige'
expectation:
reconciled: true
results:
<<: *zero_result_bp
WKprGrp_cy_value: 2500
WKprGrp_py_value: 5000
array: *rgs_codes_array
other_cy_value: 0.0
other_py_value: 0.0
current_year_to_display: '2020'
prev_year_to_display: '2019'
namespace_WKprGrp: "Liquid testing NL Liquid testing NL (2) "
cy_spec_sub_value_WKprGrpGr1: 2500
py_spec_sub_value_WKprGrpGr1: 5000
rollforward:
<<: *zero_rollforward_bp
current_choice.local_current_85315173: null
prev_choice.local_prev_85315173: null
# (4) Show or hide previous year column
unit_4_show_prev_year_test_1:
context:
locale: en
period: 2019-12-31
data:
periods:
2019-12-31:
accounts:
WKprGrpGr1.000:
id: 85315173
value: -20500
reconciliations:
general_settings:
custom:
rounding.ofAcc: 'return_values_in_ones'
results:
grondslage_table: 'double_table'
grondslagen_export: 'Eng'
expectation:
reconciled: true
results:
<<: *zero_result_bp
WKprGrp_cy_value: -20500.0
array: *rgs_codes_array
other_cy_value: 0.0
current_year_to_display: '2019'
prev_year_to_display: '2018'
rollforward:
<<: *zero_rollforward_bp
unit_4_show_prev_year_test_2:
context:
locale: en
period: 2019-12-31
data:
periods:
2018-12-31:
accounts:
WKprGrpGr1.000:
id: 85315173
value: -66943.95
2019-12-31:
accounts:
WKprGrpGr1.000:
id: 85315173
value: -20500
reconciliations:
general_settings:
custom:
rounding.ofAcc: 'return_values_in_ones'
results:
grondslage_table: 'double_table'
grondslagen_export: 'Eng'
note_WKpr:
custom:
check.prev_year: null
expectation:
reconciled: true
results:
<<: *zero_result_bp
WKprGrp_cy_value: -20500.0
WKprGrp_py_value: -66944.0
array: *rgs_codes_array
other_cy_value: 0.0
other_py_value: 0.0
current_year_to_display: '2019'
prev_year_to_display: '2018'
rollforward:
<<: *zero_rollforward_bp
unit_4_show_prev_year_test_3:
context:
locale: en
period: 2019-12-31
data:
periods:
2018-12-31:
accounts:
WKprGrpGr1.000:
id: 85315173
value: -66943.95
2019-12-31:
accounts:
WKprGrpGr1.000:
id: 85315173
value: -20500
reconciliations:
general_settings:
custom:
rounding.ofAcc: 'return_values_in_ones'
results:
grondslage_table: 'double_table'
grondslagen_export: 'Eng'
note_WKpr:
custom:
check.prev_year: false
expectation:
reconciled: true
results:
<<: *zero_result_bp
WKprGrp_cy_value: -20500.0
WKprGrp_py_value: -66944.0
array: *rgs_codes_array
other_cy_value: 0.0
current_year_to_display: '2019'
prev_year_to_display: '2018'
rollforward:
<<: *zero_rollforward_bp
*Unit 5 is omitted because of the community character limit*