"Birelle and BCDL XBRL assertion generation Régis" is the property of its rightful owner. Permission is granted to
download and print the materials on this website for personal, non-commercial use only, and to display it
on your personal computer provided you do not modify the materials and that you retain all copyright
notices contained in the materials. By downloading content from our website, you accept the terms of this
agreement.
Use a taxonomy designer? Help to write XBRL
But still tedious
Cannot apply templates
eg: a design pattern for a tolerance margin 16/12/2012<br>
04
Our approach: a Domain specific language Express the checks in a configuration file 4 16/12/2012<br>
05
From BCDL to XBRL assertions 16/12/2012 XBRL
taxonomy BCDL files XBRL assertion
Linkbases XBRL assertions generation process with BCDL files Birelle<br>
06
The BCDL grammar The BCDL grammar is defined with BNF
It can express all types of checks seen in Solvency II:
Type of fact value
belongs to an enumeration
constraint on string length
Item aggregation
Dimension aggregation
Custom business check 16/12/2012<br>
07
BCDL examples in Solvency II PoC Primary item aggregation
A14 = A14B + A14C
Type: Enumeration
A16 in {‘PU:N', ’PU:YNGNS', ’PU:YNGS'}
Type: string length
Length(AS_D1_A10) <= 20
Type: Value restriction
A22A[SS:x1][PLID][IDX] >= 0
Type: regex match
A15[SS:x1][IDX] =~ '[A-Z]{2}[0-9][A-F]' 7 16/12/2012<br>
08
BCDL examples in Solvency II PoC Dimension Item aggregation
Assertion = X[OC;x0] = sum(X[!OX:x0])
X = {A4, A12, A16, L10, L25A}
Custom business check:
A26[PLID] = A23A * A22A[PLID] + A30[PLID])
For-all sum
A3[VG:x2] = SUM({(A3[PLID][IDX] = 'N') && (A15[IDX] =~ '..9(3|5)')}A26[PLID][IDX])
Inter-table checks 8 16/12/2012<br>
09
Questions?<br>
10
Birelle improves assertions Detect Global dimension filters:
A[D][E] = B[D][E] + C[D]
Global filter: [D]A[E] = B[E] + C
Tolerance margin pattern
A = B
abs(A-B) < M<br>
11
Our own abstract model Detect reused ConceptVariable
If a variable is used in two assertions, it is defined once, and reused.
Including filters<br>
What was easy to do Programming with python
Parsing a INI configuration file
Parsing a taxonomy
Serializing XBRL, once the model is created
Having acceptable performances<br>
14
What was challenging Writing a DSL
pyparsing creates conflicts with DSL inheritance
Generating XBRL models
bindAsSequence=true|false