@robosystems/client 0.5.3 → 0.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -455,6 +455,53 @@ export type InformationBlock = {
455
455
  view: InformationBlockViewProjections
456
456
  }
457
457
 
458
+ /**
459
+ * Server-shaped chart projection — panel/series CONFIG, never values.
460
+ *
461
+ * The second real server-computed View arm (after ``rendering``). Values
462
+ * come from ``rendering.rows`` joined by ``element_id``; the x-axis is
463
+ * ``rendering.periods``. Renderers (report-components) turn one panel
464
+ * into one chart.
465
+ */
466
+ export type InformationBlockChart = {
467
+ panels: Array<InformationBlockChartPanel>
468
+ }
469
+
470
+ /**
471
+ * One chart panel — series sharing a y-axis format family.
472
+ *
473
+ * Mixed-unit catalogs are unplottable on one axis, so the server groups
474
+ * rows into panels by ``item_type`` family (NULL falls back to
475
+ * ``is_monetary``). The x-axis is always ``rendering.periods``.
476
+ */
477
+ export type InformationBlockChartPanel = {
478
+ /** Format family shared by the panel's series (monetary | ratio | percent | multiple | days); None for the untyped fallback panel. */
479
+ itemType: Maybe<Scalars['String']['output']>
480
+ /** Per-panel mark — 'line' or 'bar'. */
481
+ kind: Scalars['String']['output']
482
+ /** Panel heading — e.g. 'Monetary', 'Ratios'. */
483
+ label: Maybe<Scalars['String']['output']>
484
+ series: Array<InformationBlockChartSeries>
485
+ }
486
+
487
+ /**
488
+ * One plottable series in a chart panel.
489
+ *
490
+ * Carries structure and identity only — the values live in the sibling
491
+ * ``rendering.rows`` (join on ``element_id``), so the chart arm never
492
+ * duplicates the value matrix. ``key`` is the stable series identity for
493
+ * client state (colors, toggles); today it equals ``element_id``, and
494
+ * future axes (the forecast scenario) arrive as new fields on this
495
+ * model, never a new arm shape.
496
+ */
497
+ export type InformationBlockChartSeries = {
498
+ elementId: Scalars['String']['output']
499
+ /** Stable series id — element_id today. */
500
+ key: Scalars['String']['output']
501
+ /** Display name for legends. */
502
+ label: Scalars['String']['output']
503
+ }
504
+
458
505
  /**
459
506
  * Classification projection — one row per `association_classifications`
460
507
  * junction entry.
@@ -518,6 +565,8 @@ export type InformationBlockElement = {
518
565
  id: Scalars['String']['output']
519
566
  isAbstract: Scalars['Boolean']['output']
520
567
  isMonetary: Scalars['Boolean']['output']
568
+ /** Value-domain vocabulary (monetary | ratio | percent | multiple | days | string | …). None means untyped; fall back to is_monetary. */
569
+ itemType: Maybe<Scalars['String']['output']>
521
570
  name: Scalars['String']['output']
522
571
  periodType: Maybe<Scalars['String']['output']>
523
572
  qname: Maybe<Scalars['String']['output']>
@@ -609,6 +658,8 @@ export type InformationBlockRenderingRow = {
609
658
  elementName: Scalars['String']['output']
610
659
  elementQname: Maybe<Scalars['String']['output']>
611
660
  isSubtotal: Scalars['Boolean']['output']
661
+ /** Value-domain format family from the element (monetary | ratio | percent | multiple | days | …). Drives per-row value formatting; None falls back to is_monetary on the element. */
662
+ itemType: Maybe<Scalars['String']['output']>
612
663
  /** Narrative payload for text-block disclosure rows (markdown); numeric rows carry values instead. */
613
664
  textValue: Maybe<Scalars['String']['output']>
614
665
  values: Array<Maybe<Scalars['Float']['output']>>
@@ -740,7 +791,9 @@ export type InformationBlockVerificationSummary = {
740
791
  * mode; missing projections (those still in backlog) render as empty
741
792
  * states without breaking the dispatcher.
742
793
  *
743
- * Today: ``rendering`` is computed for the statement family.
794
+ * Today: ``rendering`` is computed for the statement family, and
795
+ * ``chart`` (the 7th arm — panel/series config over the rendering's
796
+ * rows and periods) for metric blocks.
744
797
  * Other arms (``fact_table``, ``model_structure``, ``verification_results``,
745
798
  * ``report_elements``, ``business_rules``) come online as their backend
746
799
  * support lands; ``fact_table`` is trivially derivable from
@@ -748,6 +801,7 @@ export type InformationBlockVerificationSummary = {
748
801
  * projection.
749
802
  */
750
803
  export type InformationBlockViewProjections = {
804
+ chart: Maybe<InformationBlockChart>
751
805
  rendering: Maybe<InformationBlockRendering>
752
806
  }
753
807
 
@@ -1572,14 +1626,14 @@ export type QueryAccountRollupsArgs = {
1572
1626
  }
1573
1627
 
1574
1628
  export type QueryAccountTreeArgs = {
1575
- includeInactive?: Scalars['Boolean']['input']
1629
+ includeInactive?: InputMaybe<Scalars['Boolean']['input']>
1576
1630
  }
1577
1631
 
1578
1632
  export type QueryAccountsArgs = {
1579
1633
  classification?: InputMaybe<Scalars['String']['input']>
1580
1634
  isActive?: InputMaybe<Scalars['Boolean']['input']>
1581
- limit?: Scalars['Int']['input']
1582
- offset?: Scalars['Int']['input']
1635
+ limit?: InputMaybe<Scalars['Int']['input']>
1636
+ offset?: InputMaybe<Scalars['Int']['input']>
1583
1637
  }
1584
1638
 
1585
1639
  export type QueryAgentArgs = {
@@ -1589,16 +1643,16 @@ export type QueryAgentArgs = {
1589
1643
  export type QueryAgentsArgs = {
1590
1644
  agentType?: InputMaybe<Scalars['String']['input']>
1591
1645
  isActive?: InputMaybe<Scalars['Boolean']['input']>
1592
- limit?: Scalars['Int']['input']
1593
- offset?: Scalars['Int']['input']
1646
+ limit?: InputMaybe<Scalars['Int']['input']>
1647
+ offset?: InputMaybe<Scalars['Int']['input']>
1594
1648
  source?: InputMaybe<Scalars['String']['input']>
1595
1649
  }
1596
1650
 
1597
1651
  export type QueryElementsArgs = {
1598
1652
  classification?: InputMaybe<Scalars['String']['input']>
1599
1653
  isAbstract?: InputMaybe<Scalars['Boolean']['input']>
1600
- limit?: Scalars['Int']['input']
1601
- offset?: Scalars['Int']['input']
1654
+ limit?: InputMaybe<Scalars['Int']['input']>
1655
+ offset?: InputMaybe<Scalars['Int']['input']>
1602
1656
  source?: InputMaybe<Scalars['String']['input']>
1603
1657
  taxonomyId?: InputMaybe<Scalars['String']['input']>
1604
1658
  }
@@ -1615,8 +1669,8 @@ export type QueryEventBlocksArgs = {
1615
1669
  agentId?: InputMaybe<Scalars['String']['input']>
1616
1670
  eventCategory?: InputMaybe<Scalars['String']['input']>
1617
1671
  eventType?: InputMaybe<Scalars['String']['input']>
1618
- limit?: Scalars['Int']['input']
1619
- offset?: Scalars['Int']['input']
1672
+ limit?: InputMaybe<Scalars['Int']['input']>
1673
+ offset?: InputMaybe<Scalars['Int']['input']>
1620
1674
  source?: InputMaybe<Scalars['String']['input']>
1621
1675
  status?: InputMaybe<Scalars['String']['input']>
1622
1676
  }
@@ -1632,8 +1686,8 @@ export type QueryInformationBlockArgs = {
1632
1686
  export type QueryInformationBlocksArgs = {
1633
1687
  blockType?: InputMaybe<Scalars['String']['input']>
1634
1688
  category?: InputMaybe<Scalars['String']['input']>
1635
- limit?: Scalars['Int']['input']
1636
- offset?: Scalars['Int']['input']
1689
+ limit?: InputMaybe<Scalars['Int']['input']>
1690
+ offset?: InputMaybe<Scalars['Int']['input']>
1637
1691
  }
1638
1692
 
1639
1693
  export type QueryLibraryElementArgs = {
@@ -1655,7 +1709,7 @@ export type QueryLibraryElementEquivalentsArgs = {
1655
1709
 
1656
1710
  export type QueryLibraryElementTreeArgs = {
1657
1711
  id: Scalars['ID']['input']
1658
- maxDepth?: Scalars['Int']['input']
1712
+ maxDepth?: InputMaybe<Scalars['Int']['input']>
1659
1713
  structureId?: InputMaybe<Scalars['ID']['input']>
1660
1714
  }
1661
1715
 
@@ -1663,11 +1717,11 @@ export type QueryLibraryElementsArgs = {
1663
1717
  activityType?: InputMaybe<Scalars['String']['input']>
1664
1718
  classification?: InputMaybe<Scalars['String']['input']>
1665
1719
  elementType?: InputMaybe<Scalars['String']['input']>
1666
- includeLabels?: Scalars['Boolean']['input']
1667
- includeReferences?: Scalars['Boolean']['input']
1720
+ includeLabels?: InputMaybe<Scalars['Boolean']['input']>
1721
+ includeReferences?: InputMaybe<Scalars['Boolean']['input']>
1668
1722
  isAbstract?: InputMaybe<Scalars['Boolean']['input']>
1669
- limit?: Scalars['Int']['input']
1670
- offset?: Scalars['Int']['input']
1723
+ limit?: InputMaybe<Scalars['Int']['input']>
1724
+ offset?: InputMaybe<Scalars['Int']['input']>
1671
1725
  source?: InputMaybe<Scalars['String']['input']>
1672
1726
  taxonomyId?: InputMaybe<Scalars['ID']['input']>
1673
1727
  }
@@ -1682,13 +1736,13 @@ export type QueryLibraryStructuresArgs = {
1682
1736
  }
1683
1737
 
1684
1738
  export type QueryLibraryTaxonomiesArgs = {
1685
- includeElementCount?: Scalars['Boolean']['input']
1739
+ includeElementCount?: InputMaybe<Scalars['Boolean']['input']>
1686
1740
  standard?: InputMaybe<Scalars['String']['input']>
1687
1741
  }
1688
1742
 
1689
1743
  export type QueryLibraryTaxonomyArgs = {
1690
1744
  id?: InputMaybe<Scalars['ID']['input']>
1691
- includeElementCount?: Scalars['Boolean']['input']
1745
+ includeElementCount?: InputMaybe<Scalars['Boolean']['input']>
1692
1746
  standard?: InputMaybe<Scalars['String']['input']>
1693
1747
  version?: InputMaybe<Scalars['String']['input']>
1694
1748
  }
@@ -1701,8 +1755,8 @@ export type QueryLibraryTaxonomyArcCountArgs = {
1701
1755
 
1702
1756
  export type QueryLibraryTaxonomyArcsArgs = {
1703
1757
  associationType?: InputMaybe<Scalars['String']['input']>
1704
- limit?: Scalars['Int']['input']
1705
- offset?: Scalars['Int']['input']
1758
+ limit?: InputMaybe<Scalars['Int']['input']>
1759
+ offset?: InputMaybe<Scalars['Int']['input']>
1706
1760
  structureId?: InputMaybe<Scalars['ID']['input']>
1707
1761
  taxonomyId: Scalars['ID']['input']
1708
1762
  }
@@ -1739,8 +1793,8 @@ export type QueryPortfolioBlockArgs = {
1739
1793
  }
1740
1794
 
1741
1795
  export type QueryPortfoliosArgs = {
1742
- limit?: Scalars['Int']['input']
1743
- offset?: Scalars['Int']['input']
1796
+ limit?: InputMaybe<Scalars['Int']['input']>
1797
+ offset?: InputMaybe<Scalars['Int']['input']>
1744
1798
  }
1745
1799
 
1746
1800
  export type QueryPositionArgs = {
@@ -1748,8 +1802,8 @@ export type QueryPositionArgs = {
1748
1802
  }
1749
1803
 
1750
1804
  export type QueryPositionsArgs = {
1751
- limit?: Scalars['Int']['input']
1752
- offset?: Scalars['Int']['input']
1805
+ limit?: InputMaybe<Scalars['Int']['input']>
1806
+ offset?: InputMaybe<Scalars['Int']['input']>
1753
1807
  portfolioId?: InputMaybe<Scalars['String']['input']>
1754
1808
  securityId?: InputMaybe<Scalars['String']['input']>
1755
1809
  status?: InputMaybe<Scalars['String']['input']>
@@ -1760,8 +1814,8 @@ export type QueryPublishListArgs = {
1760
1814
  }
1761
1815
 
1762
1816
  export type QueryPublishListsArgs = {
1763
- limit?: Scalars['Int']['input']
1764
- offset?: Scalars['Int']['input']
1817
+ limit?: InputMaybe<Scalars['Int']['input']>
1818
+ offset?: InputMaybe<Scalars['Int']['input']>
1765
1819
  }
1766
1820
 
1767
1821
  export type QueryReportArgs = {
@@ -1769,8 +1823,8 @@ export type QueryReportArgs = {
1769
1823
  }
1770
1824
 
1771
1825
  export type QueryReportDownloadUrlArgs = {
1772
- expiresIn?: Scalars['Int']['input']
1773
- format?: ReportDownloadFormat
1826
+ expiresIn?: InputMaybe<Scalars['Int']['input']>
1827
+ format?: InputMaybe<ReportDownloadFormat>
1774
1828
  reportId: Scalars['String']['input']
1775
1829
  }
1776
1830
 
@@ -1779,7 +1833,7 @@ export type QueryReportPackageArgs = {
1779
1833
  }
1780
1834
 
1781
1835
  export type QuerySearchLibraryElementsArgs = {
1782
- limit?: Scalars['Int']['input']
1836
+ limit?: InputMaybe<Scalars['Int']['input']>
1783
1837
  query: Scalars['String']['input']
1784
1838
  source?: InputMaybe<Scalars['String']['input']>
1785
1839
  }
@@ -1787,8 +1841,8 @@ export type QuerySearchLibraryElementsArgs = {
1787
1841
  export type QuerySecuritiesArgs = {
1788
1842
  entityId?: InputMaybe<Scalars['String']['input']>
1789
1843
  isActive?: InputMaybe<Scalars['Boolean']['input']>
1790
- limit?: Scalars['Int']['input']
1791
- offset?: Scalars['Int']['input']
1844
+ limit?: InputMaybe<Scalars['Int']['input']>
1845
+ offset?: InputMaybe<Scalars['Int']['input']>
1792
1846
  securityType?: InputMaybe<Scalars['String']['input']>
1793
1847
  }
1794
1848
 
@@ -1816,8 +1870,8 @@ export type QueryTaxonomyBlockArgs = {
1816
1870
 
1817
1871
  export type QueryTaxonomyBlocksArgs = {
1818
1872
  category?: InputMaybe<Scalars['String']['input']>
1819
- limit?: Scalars['Int']['input']
1820
- offset?: Scalars['Int']['input']
1873
+ limit?: InputMaybe<Scalars['Int']['input']>
1874
+ offset?: InputMaybe<Scalars['Int']['input']>
1821
1875
  parentTaxonomyId?: InputMaybe<Scalars['ID']['input']>
1822
1876
  taxonomyType?: InputMaybe<Scalars['String']['input']>
1823
1877
  }
@@ -1828,8 +1882,8 @@ export type QueryTransactionArgs = {
1828
1882
 
1829
1883
  export type QueryTransactionsArgs = {
1830
1884
  endDate?: InputMaybe<Scalars['Date']['input']>
1831
- limit?: Scalars['Int']['input']
1832
- offset?: Scalars['Int']['input']
1885
+ limit?: InputMaybe<Scalars['Int']['input']>
1886
+ offset?: InputMaybe<Scalars['Int']['input']>
1833
1887
  startDate?: InputMaybe<Scalars['Date']['input']>
1834
1888
  type?: InputMaybe<Scalars['String']['input']>
1835
1889
  }
@@ -2949,6 +3003,7 @@ export type GetInformationBlockQuery = {
2949
3003
  elementName: string
2950
3004
  classification: string | null
2951
3005
  balanceType: string | null
3006
+ itemType: string | null
2952
3007
  values: Array<number | null>
2953
3008
  textValue: string | null
2954
3009
  isSubtotal: boolean
@@ -2962,6 +3017,14 @@ export type GetInformationBlockQuery = {
2962
3017
  warnings: Array<string>
2963
3018
  } | null
2964
3019
  } | null
3020
+ chart: {
3021
+ panels: Array<{
3022
+ label: string | null
3023
+ itemType: string | null
3024
+ kind: string
3025
+ series: Array<{ key: string; elementId: string; label: string }>
3026
+ }>
3027
+ } | null
2965
3028
  }
2966
3029
  } | null
2967
3030
  }
@@ -3080,6 +3143,7 @@ export type ListInformationBlocksQuery = {
3080
3143
  elementName: string
3081
3144
  classification: string | null
3082
3145
  balanceType: string | null
3146
+ itemType: string | null
3083
3147
  values: Array<number | null>
3084
3148
  textValue: string | null
3085
3149
  isSubtotal: boolean
@@ -3093,6 +3157,14 @@ export type ListInformationBlocksQuery = {
3093
3157
  warnings: Array<string>
3094
3158
  } | null
3095
3159
  } | null
3160
+ chart: {
3161
+ panels: Array<{
3162
+ label: string | null
3163
+ itemType: string | null
3164
+ kind: string
3165
+ series: Array<{ key: string; elementId: string; label: string }>
3166
+ }>
3167
+ } | null
3096
3168
  }
3097
3169
  }>
3098
3170
  }
@@ -5884,6 +5956,7 @@ export const GetInformationBlockDocument = {
5884
5956
  name: { kind: 'Name', value: 'classification' },
5885
5957
  },
5886
5958
  { kind: 'Field', name: { kind: 'Name', value: 'balanceType' } },
5959
+ { kind: 'Field', name: { kind: 'Name', value: 'itemType' } },
5887
5960
  { kind: 'Field', name: { kind: 'Name', value: 'values' } },
5888
5961
  { kind: 'Field', name: { kind: 'Name', value: 'textValue' } },
5889
5962
  { kind: 'Field', name: { kind: 'Name', value: 'isSubtotal' } },
@@ -5920,6 +5993,42 @@ export const GetInformationBlockDocument = {
5920
5993
  ],
5921
5994
  },
5922
5995
  },
5996
+ {
5997
+ kind: 'Field',
5998
+ name: { kind: 'Name', value: 'chart' },
5999
+ selectionSet: {
6000
+ kind: 'SelectionSet',
6001
+ selections: [
6002
+ {
6003
+ kind: 'Field',
6004
+ name: { kind: 'Name', value: 'panels' },
6005
+ selectionSet: {
6006
+ kind: 'SelectionSet',
6007
+ selections: [
6008
+ { kind: 'Field', name: { kind: 'Name', value: 'label' } },
6009
+ { kind: 'Field', name: { kind: 'Name', value: 'itemType' } },
6010
+ { kind: 'Field', name: { kind: 'Name', value: 'kind' } },
6011
+ {
6012
+ kind: 'Field',
6013
+ name: { kind: 'Name', value: 'series' },
6014
+ selectionSet: {
6015
+ kind: 'SelectionSet',
6016
+ selections: [
6017
+ { kind: 'Field', name: { kind: 'Name', value: 'key' } },
6018
+ {
6019
+ kind: 'Field',
6020
+ name: { kind: 'Name', value: 'elementId' },
6021
+ },
6022
+ { kind: 'Field', name: { kind: 'Name', value: 'label' } },
6023
+ ],
6024
+ },
6025
+ },
6026
+ ],
6027
+ },
6028
+ },
6029
+ ],
6030
+ },
6031
+ },
5923
6032
  ],
5924
6033
  },
5925
6034
  },
@@ -6206,6 +6315,7 @@ export const ListInformationBlocksDocument = {
6206
6315
  name: { kind: 'Name', value: 'classification' },
6207
6316
  },
6208
6317
  { kind: 'Field', name: { kind: 'Name', value: 'balanceType' } },
6318
+ { kind: 'Field', name: { kind: 'Name', value: 'itemType' } },
6209
6319
  { kind: 'Field', name: { kind: 'Name', value: 'values' } },
6210
6320
  { kind: 'Field', name: { kind: 'Name', value: 'textValue' } },
6211
6321
  { kind: 'Field', name: { kind: 'Name', value: 'isSubtotal' } },
@@ -6242,6 +6352,42 @@ export const ListInformationBlocksDocument = {
6242
6352
  ],
6243
6353
  },
6244
6354
  },
6355
+ {
6356
+ kind: 'Field',
6357
+ name: { kind: 'Name', value: 'chart' },
6358
+ selectionSet: {
6359
+ kind: 'SelectionSet',
6360
+ selections: [
6361
+ {
6362
+ kind: 'Field',
6363
+ name: { kind: 'Name', value: 'panels' },
6364
+ selectionSet: {
6365
+ kind: 'SelectionSet',
6366
+ selections: [
6367
+ { kind: 'Field', name: { kind: 'Name', value: 'label' } },
6368
+ { kind: 'Field', name: { kind: 'Name', value: 'itemType' } },
6369
+ { kind: 'Field', name: { kind: 'Name', value: 'kind' } },
6370
+ {
6371
+ kind: 'Field',
6372
+ name: { kind: 'Name', value: 'series' },
6373
+ selectionSet: {
6374
+ kind: 'SelectionSet',
6375
+ selections: [
6376
+ { kind: 'Field', name: { kind: 'Name', value: 'key' } },
6377
+ {
6378
+ kind: 'Field',
6379
+ name: { kind: 'Name', value: 'elementId' },
6380
+ },
6381
+ { kind: 'Field', name: { kind: 'Name', value: 'label' } },
6382
+ ],
6383
+ },
6384
+ },
6385
+ ],
6386
+ },
6387
+ },
6388
+ ],
6389
+ },
6390
+ },
6245
6391
  ],
6246
6392
  },
6247
6393
  },
@@ -125,6 +125,7 @@ exports.GET_INFORMATION_BLOCK = (0, graphql_request_1.gql) `
125
125
  elementName
126
126
  classification
127
127
  balanceType
128
+ itemType
128
129
  values
129
130
  textValue
130
131
  isSubtotal
@@ -143,6 +144,18 @@ exports.GET_INFORMATION_BLOCK = (0, graphql_request_1.gql) `
143
144
  }
144
145
  unmappedCount
145
146
  }
147
+ chart {
148
+ panels {
149
+ label
150
+ itemType
151
+ kind
152
+ series {
153
+ key
154
+ elementId
155
+ label
156
+ }
157
+ }
158
+ }
146
159
  }
147
160
  }
148
161
  }
@@ -269,6 +282,7 @@ exports.LIST_INFORMATION_BLOCKS = (0, graphql_request_1.gql) `
269
282
  elementName
270
283
  classification
271
284
  balanceType
285
+ itemType
272
286
  values
273
287
  textValue
274
288
  isSubtotal
@@ -287,6 +301,18 @@ exports.LIST_INFORMATION_BLOCKS = (0, graphql_request_1.gql) `
287
301
  }
288
302
  unmappedCount
289
303
  }
304
+ chart {
305
+ panels {
306
+ label
307
+ itemType
308
+ kind
309
+ series {
310
+ key
311
+ elementId
312
+ label
313
+ }
314
+ }
315
+ }
290
316
  }
291
317
  }
292
318
  }
@@ -123,6 +123,7 @@ export const GET_INFORMATION_BLOCK = gql`
123
123
  elementName
124
124
  classification
125
125
  balanceType
126
+ itemType
126
127
  values
127
128
  textValue
128
129
  isSubtotal
@@ -141,6 +142,18 @@ export const GET_INFORMATION_BLOCK = gql`
141
142
  }
142
143
  unmappedCount
143
144
  }
145
+ chart {
146
+ panels {
147
+ label
148
+ itemType
149
+ kind
150
+ series {
151
+ key
152
+ elementId
153
+ label
154
+ }
155
+ }
156
+ }
144
157
  }
145
158
  }
146
159
  }
@@ -268,6 +281,7 @@ export const LIST_INFORMATION_BLOCKS = gql`
268
281
  elementName
269
282
  classification
270
283
  balanceType
284
+ itemType
271
285
  values
272
286
  textValue
273
287
  isSubtotal
@@ -286,6 +300,18 @@ export const LIST_INFORMATION_BLOCKS = gql`
286
300
  }
287
301
  unmappedCount
288
302
  }
303
+ chart {
304
+ panels {
305
+ label
306
+ itemType
307
+ kind
308
+ series {
309
+ key
310
+ elementId
311
+ label
312
+ }
313
+ }
314
+ }
289
315
  }
290
316
  }
291
317
  }