@qingflow-tech/qingflow-cli 1.1.43-beta.3 → 1.1.43-beta.4

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.
Files changed (35) hide show
  1. package/README.md +3 -3
  2. package/package.json +1 -1
  3. package/pyproject.toml +1 -1
  4. package/skills/qingflow-app-form/SKILL.md +7 -5
  5. package/skills/qingflow-cli/reference/builder/30-schema-fields.md +14 -13
  6. package/src/qingflow_mcp/app_form_compat.py +11 -27
  7. package/src/qingflow_mcp/app_form_validator.py +201 -35
  8. package/src/qingflow_mcp/builder_facade/app_form.py +762 -148
  9. package/src/qingflow_mcp/builder_facade/app_form_schema.py +114 -3
  10. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/complete.json +310 -245
  11. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/address.json +82 -27
  12. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/amount.json +85 -32
  13. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/attachment.json +82 -30
  14. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/code_block.json +113 -37
  15. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/data_relation.json +87 -64
  16. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/date.json +82 -27
  17. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/datetime.json +82 -27
  18. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/department.json +83 -28
  19. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/email.json +82 -27
  20. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/link.json +82 -27
  21. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/long_text.json +82 -27
  22. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/member.json +83 -28
  23. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/multi_select.json +82 -27
  24. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/number.json +85 -32
  25. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/phone.json +82 -27
  26. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/q_linker.json +95 -40
  27. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/relation.json +100 -28
  28. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/single_choice.json +82 -27
  29. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/single_select.json +82 -27
  30. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/subtable.json +212 -117
  31. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/fields/text.json +82 -27
  32. package/src/qingflow_mcp/builder_facade/schemas/app_form/v1alpha1/summary.json +143 -161
  33. package/src/qingflow_mcp/builder_facade/service.py +3 -2
  34. package/src/qingflow_mcp/response_trim.py +2 -0
  35. package/src/qingflow_mcp/server_app_builder.py +2 -2
@@ -15,9 +15,6 @@
15
15
  "type": "string"
16
16
  }
17
17
  },
18
- "required": [
19
- "name"
20
- ],
21
18
  "type": "object"
22
19
  },
23
20
  "AnswerValue": {
@@ -232,7 +229,7 @@
232
229
  },
233
230
  "DataRelationCondition": {
234
231
  "additionalProperties": false,
235
- "description": "一条数据关联过滤条件。",
232
+ "description": "一条数据关联过滤条件;sourceField 必须属于数据来源,operator 必须适用于该字段类型。固定值请使用 literal operand,不要直接声明后端 matchRules。",
236
233
  "properties": {
237
234
  "operand": {
238
235
  "$ref": "#/$defs/DataRelationOperand",
@@ -358,7 +355,7 @@
358
355
  ]
359
356
  },
360
357
  "DataRelationFilters": {
361
- "description": "simple 模式的外层组为 OR、组内条件为 AND;advanced 模式使用完整公式。",
358
+ "description": "simple 模式的外层组为 OR、组内条件为 AND;advanced 模式使用完整公式。simple 条件只声明业务值,builder 会生成后端保存所需的 judgeValues 和 judgeValueDetails,不要在声明中直接填写这两个后端属性。",
362
359
  "oneOf": [
363
360
  {
364
361
  "additionalProperties": false,
@@ -414,9 +411,9 @@
414
411
  "const": "literal"
415
412
  },
416
413
  "values": {
417
- "description": "字面量值列表。",
414
+ "description": "固定比较值列表;值必须使用字符串。选择类来源字段填写已有选项的展示文本,builder 会在 apply 时解析为后端 optId;解析不到会在写入前报错。is_empty/is_not_empty 必须传空数组,其他运算符至少传一项。",
418
415
  "items": {
419
- "$ref": "#/$defs/JsonValue"
416
+ "type": "string"
420
417
  },
421
418
  "type": "array"
422
419
  }
@@ -915,15 +912,71 @@
915
912
  "type": "object"
916
913
  },
917
914
  "FieldCommon": {
915
+ "allOf": [
916
+ {
917
+ "if": {
918
+ "properties": {
919
+ "defaultType": {
920
+ "const": 2
921
+ }
922
+ },
923
+ "required": [
924
+ "defaultType"
925
+ ]
926
+ },
927
+ "then": {
928
+ "properties": {
929
+ "defaultValue": {
930
+ "type": "null"
931
+ }
932
+ }
933
+ }
934
+ },
935
+ {
936
+ "if": {
937
+ "properties": {
938
+ "defaultType": {
939
+ "const": 3
940
+ }
941
+ },
942
+ "required": [
943
+ "defaultType"
944
+ ]
945
+ },
946
+ "then": {
947
+ "properties": {
948
+ "defaultValue": {
949
+ "minLength": 1,
950
+ "type": [
951
+ "string",
952
+ "null"
953
+ ]
954
+ }
955
+ }
956
+ }
957
+ }
958
+ ],
959
+ "anyOf": [
960
+ {
961
+ "required": [
962
+ "queId"
963
+ ]
964
+ },
965
+ {
966
+ "required": [
967
+ "name"
968
+ ]
969
+ }
970
+ ],
918
971
  "description": "顶层业务字段的公共属性;字段类型由 TopField 的判别分支定义。",
919
972
  "properties": {
920
- "dataTitle": {
921
- "description": "是否作为数据标题;整个 body 最多且必须按规则存在一个。",
973
+ "beingRequired": {
974
+ "description": "该字段是否必填;缺失时保留已有字段当前值。",
922
975
  "type": "boolean"
923
976
  },
924
977
  "defaultType": {
925
978
  "default": 1,
926
- "description": "默认值类型;1 表示静态值,2 表示关联/绑定值,3 表示公式值。",
979
+ "description": "默认值类型,与 defaultValue 联动;1 表示静态值,2 表示关联/绑定值且 defaultValue 只能省略或为 null,3 表示公式值且提供 defaultValue 时必须为非空公式文本。省略 defaultType 但提供 defaultValue 时按 1 处理。",
927
980
  "enum": [
928
981
  1,
929
982
  2,
@@ -933,39 +986,40 @@
933
986
  },
934
987
  "defaultValue": {
935
988
  "$ref": "#/$defs/ScalarDefaultValue",
936
- "description": "普通字段的标量默认值;表格、地址、附件、引用等结构化默认值必须放在具体字段 config.defaultValues。显式 null 表示清除默认值。"
937
- },
938
- "description": {
939
- "description": "字段说明;null 或空字符串表示清空。",
940
- "type": [
941
- "string",
942
- "null"
943
- ]
989
+ "description": "普通字段的默认值;后端 queDefaultValue 为字符串,因此数字等字面量也必须以字符串传入。defaultType 为 1 时表示静态文本,为 3 时表示公式文本,为 2 时不携带字面量默认值。表格、地址、附件、引用等结构化默认值必须放在具体字段 config.defaultValues。显式 null 表示清除默认值。"
944
990
  },
945
991
  "name": {
946
- "description": "字段展示名称;同一父级内唯一,不单独作为字段身份。",
992
+ "description": "字段展示名称;新增字段必填,已有字段可在携带 queId 时省略;同一父级内唯一。",
947
993
  "minLength": 1,
948
994
  "type": "string"
949
995
  },
950
996
  "queId": {
951
- "description": "已有字段的后端 ID;get 返回,新增字段省略。",
997
+ "description": "已有字段的后端 ID;更新时用于精确定位并复用,新增字段通常省略。",
952
998
  "minimum": 1,
953
999
  "type": "integer"
954
1000
  },
955
- "required": {
956
- "description": "是否必填;缺失时保留已有字段当前值。",
957
- "type": "boolean"
1001
+ "questionDescription": {
1002
+ "description": "字段说明;null 或空字符串表示清空。",
1003
+ "type": [
1004
+ "string",
1005
+ "null"
1006
+ ]
1007
+ },
1008
+ "questionType": {
1009
+ "description": "字段类型;具体可用值由当前字段详情 Schema 的判别分支约束。",
1010
+ "type": "string"
958
1011
  },
959
1012
  "width": {
960
- "description": "字段在所在行的宽度百分比;同一行要么全部提供且合计 100,要么全部省略。",
961
- "maximum": 100,
962
- "minimum": 1,
1013
+ "description": "字段在所在行的宽度百分比;只能选择 25、50、75 或 100。",
1014
+ "enum": [
1015
+ 25,
1016
+ 50,
1017
+ 75,
1018
+ 100
1019
+ ],
963
1020
  "type": "integer"
964
1021
  }
965
1022
  },
966
- "required": [
967
- "name"
968
- ],
969
1023
  "type": "object"
970
1024
  },
971
1025
  "FieldSelector": {
@@ -982,7 +1036,7 @@
982
1036
  ]
983
1037
  }
984
1038
  ],
985
- "description": "跨字段引用选择器;至少提供 queId 或 name,两者同时提供时必须指向同一字段。",
1039
+ "description": "字段选择器;用于定位应用的数据标题、数据封面、自定义编号取值来源或其他配置引用的字段。至少提供 queId 或 name,两者同时提供时必须指向同一字段。",
986
1040
  "properties": {
987
1041
  "name": {
988
1042
  "description": "字段名称;仅在当前作用域内唯一时可用于解析。",
@@ -997,34 +1051,10 @@
997
1051
  },
998
1052
  "type": "object"
999
1053
  },
1000
- "JsonValue": {
1001
- "description": "数据关联字面量支持的任意 JSON 值。",
1002
- "oneOf": [
1003
- {
1004
- "type": "null"
1005
- },
1006
- {
1007
- "type": "boolean"
1008
- },
1009
- {
1010
- "type": "number"
1011
- },
1012
- {
1013
- "type": "string"
1014
- },
1015
- {
1016
- "items": {
1017
- "$ref": "#/$defs/JsonValue"
1018
- },
1019
- "type": "array"
1020
- },
1021
- {
1022
- "additionalProperties": {
1023
- "$ref": "#/$defs/JsonValue"
1024
- },
1025
- "type": "object"
1026
- }
1027
- ]
1054
+ "FormulaExpression": {
1055
+ "description": "轻流公式表达式的解码文本;字段引用形如 #queId_<queId>$,由后端 Formula 引擎解析。",
1056
+ "minLength": 1,
1057
+ "type": "string"
1028
1058
  },
1029
1059
  "MemberConfig": {
1030
1060
  "additionalProperties": false,
@@ -1226,12 +1256,10 @@
1226
1256
  ]
1227
1257
  },
1228
1258
  "currencyType": {
1229
- "description": "货币类型 ID。",
1259
+ "default": 1,
1260
+ "description": "货币类型 ID;后端发布要求为非空正整数,即使 currencyStatus 为 false 也不得传 null。无需指定时省略并使用默认值 1。",
1230
1261
  "minimum": 1,
1231
- "type": [
1232
- "integer",
1233
- "null"
1234
- ]
1262
+ "type": "integer"
1235
1263
  },
1236
1264
  "decimalDigit": {
1237
1265
  "description": "小数位数。",
@@ -1374,11 +1402,23 @@
1374
1402
  "description": "引用字段配置;引用其他应用中的数据。",
1375
1403
  "properties": {
1376
1404
  "beingDefaultFormulaAutoFillEnabled": {
1405
+ "description": "是否启用引用字段的默认值公式自动填充。",
1377
1406
  "type": [
1378
1407
  "boolean",
1379
1408
  "null"
1380
1409
  ]
1381
1410
  },
1411
+ "defaultValueFormula": {
1412
+ "description": "引用字段默认值自动填充使用的公式;仅在 beingDefaultFormulaAutoFillEnabled 为 true 时执行,null 表示清除。",
1413
+ "oneOf": [
1414
+ {
1415
+ "type": "null"
1416
+ },
1417
+ {
1418
+ "$ref": "#/$defs/FormulaExpression"
1419
+ }
1420
+ ]
1421
+ },
1382
1422
  "defaultValueMatchRules": {
1383
1423
  "type": [
1384
1424
  "array",
@@ -1445,11 +1485,9 @@
1445
1485
  "type": "object"
1446
1486
  },
1447
1487
  "ScalarDefaultValue": {
1448
- "description": "不包含对象或数组的普通字段默认值。",
1488
+ "description": "后端 queDefaultValue 支持的普通字段默认值;非空值必须是字符串,显式 null 表示清除默认值。数字和布尔值应先转换为字符串,对象和数组必须使用字段专用默认值配置。需要配置结构化默认值时,通过 AppForm Schema 查询能力传入当前 schema_version,并将字段的 questionType 作为 field_type 获取该字段类型的详细 Schema,再按其中的字段专用 config 定义填写。",
1449
1489
  "type": [
1450
1490
  "null",
1451
- "boolean",
1452
- "number",
1453
1491
  "string"
1454
1492
  ]
1455
1493
  },
@@ -1512,7 +1550,7 @@
1512
1550
  "config": {
1513
1551
  "$ref": "#/$defs/TextConfig"
1514
1552
  },
1515
- "type": {
1553
+ "questionType": {
1516
1554
  "enum": [
1517
1555
  "text",
1518
1556
  "long_text",
@@ -1522,7 +1560,7 @@
1522
1560
  }
1523
1561
  },
1524
1562
  "required": [
1525
- "type"
1563
+ "questionType"
1526
1564
  ]
1527
1565
  },
1528
1566
  {
@@ -1530,12 +1568,12 @@
1530
1568
  "config": {
1531
1569
  "$ref": "#/$defs/PhoneConfig"
1532
1570
  },
1533
- "type": {
1571
+ "questionType": {
1534
1572
  "const": "phone"
1535
1573
  }
1536
1574
  },
1537
1575
  "required": [
1538
- "type"
1576
+ "questionType"
1539
1577
  ]
1540
1578
  },
1541
1579
  {
@@ -1543,12 +1581,12 @@
1543
1581
  "config": {
1544
1582
  "$ref": "#/$defs/NumberConfig"
1545
1583
  },
1546
- "type": {
1584
+ "questionType": {
1547
1585
  "const": "number"
1548
1586
  }
1549
1587
  },
1550
1588
  "required": [
1551
- "type"
1589
+ "questionType"
1552
1590
  ]
1553
1591
  },
1554
1592
  {
@@ -1556,12 +1594,12 @@
1556
1594
  "config": {
1557
1595
  "$ref": "#/$defs/EmptyConfig"
1558
1596
  },
1559
- "type": {
1597
+ "questionType": {
1560
1598
  "const": "date"
1561
1599
  }
1562
1600
  },
1563
1601
  "required": [
1564
- "type"
1602
+ "questionType"
1565
1603
  ]
1566
1604
  },
1567
1605
  {
@@ -1569,12 +1607,12 @@
1569
1607
  "config": {
1570
1608
  "$ref": "#/$defs/AttachmentConfig"
1571
1609
  },
1572
- "type": {
1610
+ "questionType": {
1573
1611
  "const": "attachment"
1574
1612
  }
1575
1613
  },
1576
1614
  "required": [
1577
- "type"
1615
+ "questionType"
1578
1616
  ]
1579
1617
  },
1580
1618
  {
@@ -1582,12 +1620,12 @@
1582
1620
  "config": {
1583
1621
  "$ref": "#/$defs/MemberConfig"
1584
1622
  },
1585
- "type": {
1623
+ "questionType": {
1586
1624
  "const": "member"
1587
1625
  }
1588
1626
  },
1589
1627
  "required": [
1590
- "type"
1628
+ "questionType"
1591
1629
  ]
1592
1630
  },
1593
1631
  {
@@ -1595,7 +1633,7 @@
1595
1633
  "config": {
1596
1634
  "$ref": "#/$defs/ChoiceConfig"
1597
1635
  },
1598
- "type": {
1636
+ "questionType": {
1599
1637
  "enum": [
1600
1638
  "single_choice",
1601
1639
  "single_select",
@@ -1604,7 +1642,7 @@
1604
1642
  }
1605
1643
  },
1606
1644
  "required": [
1607
- "type",
1645
+ "questionType",
1608
1646
  "config"
1609
1647
  ]
1610
1648
  },
@@ -1613,12 +1651,12 @@
1613
1651
  "config": {
1614
1652
  "$ref": "#/$defs/DepartmentConfig"
1615
1653
  },
1616
- "type": {
1654
+ "questionType": {
1617
1655
  "const": "department"
1618
1656
  }
1619
1657
  },
1620
1658
  "required": [
1621
- "type",
1659
+ "questionType",
1622
1660
  "config"
1623
1661
  ]
1624
1662
  },
@@ -1627,12 +1665,12 @@
1627
1665
  "config": {
1628
1666
  "$ref": "#/$defs/RelationConfig"
1629
1667
  },
1630
- "type": {
1668
+ "questionType": {
1631
1669
  "const": "relation"
1632
1670
  }
1633
1671
  },
1634
1672
  "required": [
1635
- "type",
1673
+ "questionType",
1636
1674
  "config"
1637
1675
  ]
1638
1676
  },
@@ -1641,12 +1679,12 @@
1641
1679
  "config": {
1642
1680
  "$ref": "#/$defs/DataRelationConfig"
1643
1681
  },
1644
- "type": {
1682
+ "questionType": {
1645
1683
  "const": "data_relation"
1646
1684
  }
1647
1685
  },
1648
1686
  "required": [
1649
- "type",
1687
+ "questionType",
1650
1688
  "config"
1651
1689
  ]
1652
1690
  }
@@ -1658,11 +1696,71 @@
1658
1696
  "unevaluatedProperties": false
1659
1697
  },
1660
1698
  "SubFieldCommon": {
1661
- "description": "表格子字段的公共属性;不允许 dataTitle、dataCover 或 width。",
1699
+ "allOf": [
1700
+ {
1701
+ "if": {
1702
+ "properties": {
1703
+ "defaultType": {
1704
+ "const": 2
1705
+ }
1706
+ },
1707
+ "required": [
1708
+ "defaultType"
1709
+ ]
1710
+ },
1711
+ "then": {
1712
+ "properties": {
1713
+ "defaultValue": {
1714
+ "type": "null"
1715
+ }
1716
+ }
1717
+ }
1718
+ },
1719
+ {
1720
+ "if": {
1721
+ "properties": {
1722
+ "defaultType": {
1723
+ "const": 3
1724
+ }
1725
+ },
1726
+ "required": [
1727
+ "defaultType"
1728
+ ]
1729
+ },
1730
+ "then": {
1731
+ "properties": {
1732
+ "defaultValue": {
1733
+ "minLength": 1,
1734
+ "type": [
1735
+ "string",
1736
+ "null"
1737
+ ]
1738
+ }
1739
+ }
1740
+ }
1741
+ }
1742
+ ],
1743
+ "anyOf": [
1744
+ {
1745
+ "required": [
1746
+ "queId"
1747
+ ]
1748
+ },
1749
+ {
1750
+ "required": [
1751
+ "name"
1752
+ ]
1753
+ }
1754
+ ],
1755
+ "description": "表格子字段的公共属性;不允许 width,也不能被应用级数据标题或数据封面选择器选中。",
1662
1756
  "properties": {
1757
+ "beingRequired": {
1758
+ "description": "该子字段是否必填;缺失时保留当前值。",
1759
+ "type": "boolean"
1760
+ },
1663
1761
  "defaultType": {
1664
1762
  "default": 1,
1665
- "description": "默认值类型;1 表示静态值,2 表示关联/绑定值,3 表示公式值。",
1763
+ "description": "默认值类型,与 defaultValue 联动;1 表示静态值,2 表示关联/绑定值且 defaultValue 只能省略或为 null,3 表示公式值且提供 defaultValue 时必须为非空公式文本。省略 defaultType 但提供 defaultValue 时按 1 处理。",
1666
1764
  "enum": [
1667
1765
  1,
1668
1766
  2,
@@ -1671,41 +1769,31 @@
1671
1769
  "type": "integer"
1672
1770
  },
1673
1771
  "defaultValue": {
1674
- "description": "表单填写时的默认值;显式 null 表示清除默认值。",
1675
- "type": [
1676
- "null",
1677
- "boolean",
1678
- "number",
1679
- "string",
1680
- "array",
1681
- "object"
1682
- ]
1683
- },
1684
- "description": {
1685
- "description": "子字段说明;null 或空字符串表示清空。",
1686
- "type": [
1687
- "string",
1688
- "null"
1689
- ]
1772
+ "$ref": "#/$defs/ScalarDefaultValue",
1773
+ "description": "表单填写时的默认值;后端 queDefaultValue 为字符串,因此数字等字面量也必须以字符串传入。defaultType 为 1 时表示静态文本,为 3 时表示公式文本,为 2 时不携带字面量默认值。显式 null 表示清除默认值。"
1690
1774
  },
1691
1775
  "name": {
1692
- "description": "子字段展示名称;在所属表格内唯一。",
1776
+ "description": "子字段展示名称;新增子字段必填,已有子字段可在携带 queId 时省略。",
1693
1777
  "minLength": 1,
1694
1778
  "type": "string"
1695
1779
  },
1696
1780
  "queId": {
1697
- "description": "已有子字段的后端 ID;新增时省略。",
1781
+ "description": "已有子字段的后端 ID;更新时用于精确定位并复用,新增子字段通常省略。",
1698
1782
  "minimum": 1,
1699
1783
  "type": "integer"
1700
1784
  },
1701
- "required": {
1702
- "description": "是否必填;缺失时保留当前值。",
1703
- "type": "boolean"
1785
+ "questionDescription": {
1786
+ "description": "子字段说明;null 或空字符串表示清空。",
1787
+ "type": [
1788
+ "string",
1789
+ "null"
1790
+ ]
1791
+ },
1792
+ "questionType": {
1793
+ "description": "子字段类型;具体可用值由当前字段详情 Schema 的判别分支约束。",
1794
+ "type": "string"
1704
1795
  }
1705
1796
  },
1706
- "required": [
1707
- "name"
1708
- ],
1709
1797
  "type": "object"
1710
1798
  },
1711
1799
  "SubtableConfig": {
@@ -1735,7 +1823,14 @@
1735
1823
  ]
1736
1824
  },
1737
1825
  "tableRowHeight": {
1738
- "minLength": 1,
1826
+ "description": "子表行高;只允许 compact(紧凑)、moderate(适中)、easy(宽松)或 highest(最高)。省略表示保留现有值,null 表示清除并使用后端默认的紧凑行高。",
1827
+ "enum": [
1828
+ "compact",
1829
+ "moderate",
1830
+ "easy",
1831
+ "highest",
1832
+ null
1833
+ ],
1739
1834
  "type": [
1740
1835
  "string",
1741
1836
  "null"
@@ -1808,19 +1903,19 @@
1808
1903
  "config": {
1809
1904
  "$ref": "#/$defs/SubtableConfig"
1810
1905
  },
1906
+ "questionType": {
1907
+ "const": "subtable"
1908
+ },
1811
1909
  "subfields": {
1812
1910
  "items": {
1813
1911
  "$ref": "#/$defs/SubField"
1814
1912
  },
1815
1913
  "minItems": 1,
1816
1914
  "type": "array"
1817
- },
1818
- "type": {
1819
- "const": "subtable"
1820
1915
  }
1821
1916
  },
1822
1917
  "required": [
1823
- "type",
1918
+ "questionType",
1824
1919
  "subfields"
1825
1920
  ]
1826
1921
  }