scaffold-engine 0.1.0

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 (52) hide show
  1. package/README.md +117 -0
  2. package/engine.project.example.json +23 -0
  3. package/package.json +49 -0
  4. package/scripts/postinstall.cjs +42 -0
  5. package/specs/catalogs/action-templates.yaml +189 -0
  6. package/specs/catalogs/child-templates.yaml +54 -0
  7. package/specs/catalogs/field-fragments.yaml +203 -0
  8. package/specs/catalogs/object-catalog.yaml +35 -0
  9. package/specs/catalogs/object-name-suggestions.yaml +30 -0
  10. package/specs/catalogs/object-templates.yaml +45 -0
  11. package/specs/catalogs/pattern-catalog.yaml +48 -0
  12. package/specs/catalogs/status-templates.yaml +16 -0
  13. package/specs/projects/crm-pilot/customer.yaml +122 -0
  14. package/specs/projects/crm-pilot/lead.from-nl.yaml +76 -0
  15. package/specs/projects/crm-pilot/lead.yaml +82 -0
  16. package/specs/projects/generated-from-nl/crm-customer.yaml +158 -0
  17. package/specs/projects/generated-from-nl/crm-lead.yaml +76 -0
  18. package/specs/projects/generated-from-nl/crm-opportunity.yaml +78 -0
  19. package/specs/projects/generated-from-nl/crm-quote.yaml +78 -0
  20. package/specs/projects/generated-from-nl/custom-documentLines.yaml +125 -0
  21. package/specs/projects/generated-from-nl/custom-treeEntity.yaml +78 -0
  22. package/specs/projects/generated-from-nl/erp-material-pattern-test.yaml +79 -0
  23. package/specs/projects/generated-from-nl/erp-material.yaml +78 -0
  24. package/specs/projects/generated-from-nl/hr-orgUnit.yaml +100 -0
  25. package/specs/projects/pattern-examples/document-lines-demo.yaml +125 -0
  26. package/specs/projects/pattern-examples/tree-entity-demo.yaml +79 -0
  27. package/specs/rules/business-model.schema.json +262 -0
  28. package/specs/rules/extension-boundaries.json +26 -0
  29. package/specs/rules/requirement-draft.schema.json +75 -0
  30. package/specs/rules/spec-governance.json +29 -0
  31. package/specs/templates/crm/customer.template.yaml +121 -0
  32. package/specs/templates/crm/lead.template.yaml +82 -0
  33. package/tools/analyze-requirement.cjs +950 -0
  34. package/tools/cli.cjs +59 -0
  35. package/tools/create-draft.cjs +18 -0
  36. package/tools/engine.cjs +47 -0
  37. package/tools/generate-draft.cjs +33 -0
  38. package/tools/generate-module.cjs +1218 -0
  39. package/tools/init-project.cjs +194 -0
  40. package/tools/lib/draft-toolkit.cjs +357 -0
  41. package/tools/lib/model-toolkit.cjs +482 -0
  42. package/tools/lib/pattern-renderers.cjs +166 -0
  43. package/tools/lib/renderers/detail-page-renderer.cjs +327 -0
  44. package/tools/lib/renderers/form-page-renderer.cjs +553 -0
  45. package/tools/lib/renderers/list-page-renderer.cjs +371 -0
  46. package/tools/lib/runtime-config.cjs +154 -0
  47. package/tools/patch-draft.cjs +57 -0
  48. package/tools/prompts/business-model-prompt.md +58 -0
  49. package/tools/run-requirement.cjs +672 -0
  50. package/tools/validate-draft.cjs +32 -0
  51. package/tools/validate-model.cjs +140 -0
  52. package/tools/verify-patterns.cjs +67 -0
@@ -0,0 +1,30 @@
1
+ suggestions:
2
+ - keywords: [组织树, 组织架构, 部门树, 组织单元]
3
+ patternRef: treeEntity
4
+ domain: hr
5
+ object: orgUnit
6
+ label: 组织单元
7
+
8
+ - keywords: [供应商, 供应商档案, 供应商管理]
9
+ patternRef: masterDetail
10
+ domain: erp
11
+ object: supplier
12
+ label: 供应商
13
+
14
+ - keywords: [销售订单]
15
+ patternRef: documentLines
16
+ domain: ecom
17
+ object: salesOrder
18
+ label: 销售订单
19
+
20
+ - keywords: [采购订单]
21
+ patternRef: documentLines
22
+ domain: erp
23
+ object: purchaseOrder
24
+ label: 采购订单
25
+
26
+ - keywords: [订单, 申请单, 单据]
27
+ patternRef: documentLines
28
+ domain: custom
29
+ object: orderDocument
30
+ label: 单据
@@ -0,0 +1,45 @@
1
+ templates:
2
+ crmRootCrud:
3
+ patternRef: statusEntity
4
+ detailSections: [basicInfo]
5
+ actionTemplateRef: crudBasic
6
+ fieldRefs: [ownerName]
7
+
8
+ statusFlowObject:
9
+ patternRef: statusEntity
10
+ detailSections: [basicInfo]
11
+ actionTemplateRef: crudWithStatusFlow
12
+ fieldRefs: [ownerName]
13
+
14
+ crmCustomerObject:
15
+ patternRef: masterDetail
16
+ detailSections: [basicInfo]
17
+ actionTemplateRef: crudWithToggle
18
+ fieldRefs: [ownerName]
19
+ childTemplateRefs: [customerContacts]
20
+ fields:
21
+ - name: source
22
+ label: 客户来源
23
+ fragmentRef: sourceCustomer
24
+
25
+ erpMasterData:
26
+ patternRef: singleEntity
27
+ detailSections: [basicInfo]
28
+ actionTemplateRef: crudBasic
29
+
30
+ documentLinesBasic:
31
+ patternRef: documentLines
32
+ detailSections: [basicInfo]
33
+ actionTemplateRef: crudBasic
34
+ childTemplateRefs: [documentLineItems]
35
+
36
+ documentLinesApproval:
37
+ patternRef: documentLines
38
+ detailSections: [basicInfo]
39
+ actionTemplateRef: crudWithSubmitApprove
40
+ childTemplateRefs: [documentLineItems]
41
+
42
+ treeEntityBasic:
43
+ patternRef: treeEntity
44
+ detailSections: [basicInfo]
45
+ actionTemplateRef: crudBasic
@@ -0,0 +1,48 @@
1
+ patterns:
2
+ singleEntity:
3
+ label: 单实体对象
4
+ description: 适用于单表对象,常见于台账、档案、基础资料等场景。
5
+ detectKeywords: [台账, 档案, 主数据, 基础资料, 单实体]
6
+ seedFieldRefs: [materialCode, materialName, statusErpBase]
7
+ defaultUi:
8
+ detailSections: [basicInfo]
9
+ defaultActionTemplateRef: crudBasic
10
+
11
+ masterDetail:
12
+ label: 主子表对象
13
+ description: 适用于主表带一张明细或联系人子表的对象。
14
+ detectKeywords: [主子表, 子表, 联系人, 附件, 地址, 明细]
15
+ seedFieldRefs: [customerCode, customerName, statusCrmBase]
16
+ seedChildTemplateRefs: [customerContacts]
17
+ defaultUi:
18
+ detailSections: [basicInfo]
19
+ defaultActionTemplateRef: crudWithToggle
20
+ defaultChildTemplateRefs: [customerContacts]
21
+
22
+ statusEntity:
23
+ label: 状态对象
24
+ description: 适用于带阶段、来源、状态流转的过程型对象。
25
+ detectKeywords: [状态流转, 阶段, 流程状态, 跟进, 转化]
26
+ seedFieldRefs: [leadCode, leadName, sourceLead, statusCrmFollow]
27
+ defaultUi:
28
+ detailSections: [basicInfo]
29
+ defaultActionTemplateRef: crudBasic
30
+
31
+ documentLines:
32
+ label: 单据明细对象
33
+ description: 适用于单据头加行项目明细的对象。
34
+ detectKeywords: [单据, 明细行, 行项目, 头表, 表头, 单据头, 明细表]
35
+ seedFieldRefs: [documentNo, documentTitle, bizDate, statusErpBase]
36
+ seedChildTemplateRefs: [documentLineItems]
37
+ defaultUi:
38
+ detailSections: [basicInfo]
39
+ defaultActionTemplateRef: crudBasic
40
+
41
+ treeEntity:
42
+ label: 树形对象
43
+ description: 适用于带父子层级关系的树形对象。
44
+ detectKeywords: [树, 树形, 层级, 父子, 上级, 下级, 分类树, 组织树]
45
+ seedFieldRefs: [categoryCode, categoryName, parentId, parentName, sortOrder, statusErpBase]
46
+ defaultUi:
47
+ detailSections: [basicInfo]
48
+ defaultActionTemplateRef: crudBasic
@@ -0,0 +1,16 @@
1
+ templates:
2
+ crmFollow:
3
+ options: [draft, following, converted, closed]
4
+ default: draft
5
+
6
+ crmBase:
7
+ options: [draft, active, inactive]
8
+ default: draft
9
+
10
+ crmClosed:
11
+ options: [draft, active, closed]
12
+ default: draft
13
+
14
+ erpBase:
15
+ options: [draft, active, inactive, blocked]
16
+ default: draft
@@ -0,0 +1,122 @@
1
+ meta:
2
+ domain: crm
3
+ object: customer
4
+ label: 客户
5
+ version: 0.1.0
6
+ description: >
7
+ CRM 试点对象。首期只验证客户主数据 + 联系人子表,
8
+ 用于支撑 AI 输出结构化业务模型、校验、生成骨架与人工补充实现。
9
+
10
+ data:
11
+ table: crm_customer
12
+ fields:
13
+ - name: customerCode
14
+ label: 客户编码
15
+ type: string
16
+ required: true
17
+ unique: true
18
+ - name: customerName
19
+ label: 客户名称
20
+ type: string
21
+ required: true
22
+ - name: level
23
+ label: 客户等级
24
+ type: enum
25
+ options: [A, B, C]
26
+ default: B
27
+ - name: status
28
+ label: 状态
29
+ type: enum
30
+ options: [draft, active, inactive]
31
+ default: draft
32
+ - name: ownerName
33
+ label: 客户负责人
34
+ type: string
35
+ - name: source
36
+ label: 客户来源
37
+ type: enum
38
+ options: [manual, import, campaign]
39
+ default: manual
40
+ children:
41
+ - name: contacts
42
+ label: 联系人
43
+ table: crm_customer_contact
44
+ foreignKey: customerId
45
+ fields:
46
+ - name: contactName
47
+ label: 联系人姓名
48
+ type: string
49
+ required: true
50
+ - name: mobile
51
+ label: 手机号
52
+ type: string
53
+ - name: email
54
+ label: 邮箱
55
+ type: string
56
+ - name: isPrimary
57
+ label: 是否主联系人
58
+ type: boolean
59
+ default: false
60
+
61
+ app:
62
+ actions: [create, update, detail, list, activate, deactivate]
63
+ defaultStatus: draft
64
+ responseContract:
65
+ envelope: standard
66
+ listSchema: pagedList
67
+ detailSchema: object
68
+ mutationSchema: object
69
+ permissionProfile:
70
+ mode: inherit
71
+ resourceScope: object
72
+ actionPolicies:
73
+ - action: create
74
+ permission: create
75
+ - action: update
76
+ permission: update
77
+ - action: list
78
+ permission: list
79
+ - action: detail
80
+ permission: detail
81
+ - action: activate
82
+ permission: activate
83
+ - action: deactivate
84
+ permission: deactivate
85
+ statusFlow:
86
+ enabled: true
87
+ states: [draft, active, inactive]
88
+ transitions:
89
+ - action: activate
90
+ from: [draft, inactive]
91
+ to: active
92
+ - action: deactivate
93
+ from: [active]
94
+ to: inactive
95
+ validationRules:
96
+ - name: statusTransition
97
+ scope: workflow
98
+ rule: statusTransition
99
+ fields: [status]
100
+ message: 状态流转必须符合既定规则
101
+ errorCodes:
102
+ - code: VALIDATION_FAILED
103
+ message: 输入校验失败
104
+ - code: RECORD_NOT_FOUND
105
+ message: 客户不存在
106
+ - code: DUPLICATE_KEY
107
+ message: 客户编码已存在
108
+ - code: INVALID_STATUS_TRANSITION
109
+ message: 当前状态不允许执行该动作
110
+
111
+ ui:
112
+ list:
113
+ columns: [customerCode, customerName, level, status, ownerName, createdAt]
114
+ filters: [customerCode, customerName, status]
115
+ form:
116
+ groups:
117
+ - title: 基本信息
118
+ fields: [customerCode, customerName, level, status, ownerName, source]
119
+ - title: 联系人
120
+ childTable: contacts
121
+ detail:
122
+ sections: [basicInfo, contacts]
@@ -0,0 +1,76 @@
1
+ meta:
2
+ domain: crm
3
+ object: lead
4
+ label: 线索
5
+ version: 0.1.0
6
+ description: 由 requirement:analyze 从自然语言需求推导出的候选业务模型。
7
+ data:
8
+ table: crm_lead
9
+ fields:
10
+ - name: leadCode
11
+ label: 线索编号
12
+ type: string
13
+ required: true
14
+ unique: true
15
+ - name: leadName
16
+ label: 线索名称
17
+ type: string
18
+ required: true
19
+ - name: source
20
+ label: 线索来源
21
+ type: enum
22
+ options:
23
+ - website
24
+ - referral
25
+ - campaign
26
+ - manual
27
+ default: manual
28
+ - name: ownerName
29
+ label: 负责人
30
+ type: string
31
+ - name: phone
32
+ label: 联系电话
33
+ type: string
34
+ - name: status
35
+ label: 状态
36
+ type: enum
37
+ options:
38
+ - draft
39
+ - following
40
+ - converted
41
+ - closed
42
+ default: draft
43
+ app:
44
+ actions:
45
+ - create
46
+ - update
47
+ - list
48
+ - detail
49
+ defaultStatus: draft
50
+ ui:
51
+ list:
52
+ columns:
53
+ - leadCode
54
+ - leadName
55
+ - source
56
+ - ownerName
57
+ - status
58
+ - createdAt
59
+ filters:
60
+ - leadCode
61
+ - leadName
62
+ - source
63
+ - status
64
+ form:
65
+ groups:
66
+ - title: 基本信息
67
+ fields:
68
+ - leadCode
69
+ - leadName
70
+ - source
71
+ - ownerName
72
+ - phone
73
+ - status
74
+ detail:
75
+ sections:
76
+ - basicInfo
@@ -0,0 +1,82 @@
1
+ meta:
2
+ domain: crm
3
+ object: lead
4
+ label: 线索
5
+ version: 0.1.0
6
+ description: >
7
+ CRM 线索试点对象。用于验证纯主表对象在当前业务模型规范下的
8
+ 自然语言抽取、规则校验与 API/Admin 骨架生成闭环。
9
+
10
+ data:
11
+ table: crm_lead
12
+ fields:
13
+ - name: leadCode
14
+ label: 线索编号
15
+ type: string
16
+ required: true
17
+ unique: true
18
+ - name: leadName
19
+ label: 线索名称
20
+ type: string
21
+ required: true
22
+ - name: source
23
+ label: 线索来源
24
+ type: enum
25
+ options: [website, referral, campaign, manual]
26
+ default: manual
27
+ - name: ownerName
28
+ label: 负责人
29
+ type: string
30
+ - name: phone
31
+ label: 联系电话
32
+ type: string
33
+ - name: status
34
+ label: 状态
35
+ type: enum
36
+ options: [draft, following, converted, closed]
37
+ default: draft
38
+
39
+ app:
40
+ actions: [create, update, detail, list]
41
+ defaultStatus: draft
42
+ responseContract:
43
+ envelope: standard
44
+ listSchema: pagedList
45
+ detailSchema: object
46
+ mutationSchema: object
47
+ permissionProfile:
48
+ mode: inherit
49
+ resourceScope: object
50
+ actionPolicies:
51
+ - action: create
52
+ permission: create
53
+ - action: update
54
+ permission: update
55
+ - action: list
56
+ permission: list
57
+ - action: detail
58
+ permission: detail
59
+ validationRules:
60
+ - name: uniqueLeadCode
61
+ scope: service
62
+ rule: unique
63
+ fields: [leadCode]
64
+ message: 线索编号必须唯一
65
+ errorCodes:
66
+ - code: VALIDATION_FAILED
67
+ message: 输入校验失败
68
+ - code: RECORD_NOT_FOUND
69
+ message: 线索不存在
70
+ - code: DUPLICATE_KEY
71
+ message: 线索编号已存在
72
+
73
+ ui:
74
+ list:
75
+ columns: [leadCode, leadName, source, ownerName, status, createdAt]
76
+ filters: [leadCode, leadName, source, status]
77
+ form:
78
+ groups:
79
+ - title: 基本信息
80
+ fields: [leadCode, leadName, source, ownerName, phone, status]
81
+ detail:
82
+ sections: [basicInfo]
@@ -0,0 +1,158 @@
1
+ meta:
2
+ domain: crm
3
+ object: customer
4
+ label: 客户
5
+ pattern: masterDetail
6
+ version: 0.1.0
7
+ description: 由 requirement:analyze 从自然语言需求推导出的候选业务模型。
8
+ data:
9
+ table: crm_customer
10
+ fields:
11
+ - name: ownerName
12
+ label: 负责人
13
+ type: string
14
+ - name: customerCode
15
+ label: 客户编码
16
+ type: string
17
+ required: true
18
+ unique: true
19
+ - name: customerName
20
+ label: 客户名称
21
+ type: string
22
+ required: true
23
+ - name: level
24
+ label: 客户等级
25
+ type: enum
26
+ options:
27
+ - A
28
+ - B
29
+ - C
30
+ default: B
31
+ - name: status
32
+ label: 状态
33
+ type: enum
34
+ options:
35
+ - draft
36
+ - active
37
+ - inactive
38
+ default: draft
39
+ - name: source
40
+ label: 客户来源
41
+ type: enum
42
+ options:
43
+ - manual
44
+ - import
45
+ - campaign
46
+ default: manual
47
+ children:
48
+ - name: contacts
49
+ label: 联系人
50
+ table: crm_customer_contact
51
+ foreignKey: customerId
52
+ fields:
53
+ - name: contactName
54
+ label: 联系人姓名
55
+ type: string
56
+ required: true
57
+ - name: mobile
58
+ label: 手机号
59
+ type: string
60
+ - name: email
61
+ label: 邮箱
62
+ type: string
63
+ - name: isPrimary
64
+ label: 是否主联系人
65
+ type: boolean
66
+ default: false
67
+ app:
68
+ actions:
69
+ - create
70
+ - update
71
+ - list
72
+ - detail
73
+ - activate
74
+ - deactivate
75
+ defaultStatus: draft
76
+ statusFlow:
77
+ enabled: true
78
+ states:
79
+ - draft
80
+ - active
81
+ - inactive
82
+ transitions:
83
+ - action: activate
84
+ from:
85
+ - draft
86
+ - inactive
87
+ to: active
88
+ - action: deactivate
89
+ from:
90
+ - active
91
+ to: inactive
92
+ responseContract:
93
+ envelope: standard
94
+ listSchema: pagedList
95
+ detailSchema: object
96
+ mutationSchema: object
97
+ permissionProfile:
98
+ mode: inherit
99
+ resourceScope: object
100
+ actionPolicies:
101
+ - action: create
102
+ permission: create
103
+ - action: update
104
+ permission: update
105
+ - action: list
106
+ permission: list
107
+ - action: detail
108
+ permission: detail
109
+ - action: activate
110
+ permission: activate
111
+ - action: deactivate
112
+ permission: deactivate
113
+ validationRules:
114
+ - name: statusTransition
115
+ scope: workflow
116
+ rule: statusTransition
117
+ fields:
118
+ - status
119
+ message: 状态流转必须符合既定规则
120
+ errorCodes:
121
+ - code: VALIDATION_FAILED
122
+ message: 输入校验失败
123
+ - code: RECORD_NOT_FOUND
124
+ message: 记录不存在
125
+ - code: DUPLICATE_KEY
126
+ message: 唯一键冲突
127
+ - code: INVALID_STATUS_TRANSITION
128
+ message: 当前状态不允许执行该动作
129
+ ui:
130
+ list:
131
+ columns:
132
+ - ownerName
133
+ - customerCode
134
+ - customerName
135
+ - status
136
+ - source
137
+ - createdAt
138
+ filters:
139
+ - customerCode
140
+ - customerName
141
+ - status
142
+ - source
143
+ form:
144
+ groups:
145
+ - title: 基本信息
146
+ fields:
147
+ - ownerName
148
+ - customerCode
149
+ - customerName
150
+ - level
151
+ - status
152
+ - source
153
+ - title: 联系人
154
+ childTable: contacts
155
+ detail:
156
+ sections:
157
+ - basicInfo
158
+ - contacts
@@ -0,0 +1,76 @@
1
+ meta:
2
+ domain: crm
3
+ object: lead
4
+ label: 线索
5
+ version: 0.1.0
6
+ description: 由 requirement:analyze 从自然语言需求推导出的候选业务模型。
7
+ data:
8
+ table: crm_lead
9
+ fields:
10
+ - name: leadCode
11
+ label: 线索编号
12
+ type: string
13
+ required: true
14
+ unique: true
15
+ - name: leadName
16
+ label: 线索名称
17
+ type: string
18
+ required: true
19
+ - name: source
20
+ label: 线索来源
21
+ type: enum
22
+ options:
23
+ - website
24
+ - referral
25
+ - campaign
26
+ - manual
27
+ default: manual
28
+ - name: ownerName
29
+ label: 负责人
30
+ type: string
31
+ - name: phone
32
+ label: 联系电话
33
+ type: string
34
+ - name: status
35
+ label: 状态
36
+ type: enum
37
+ options:
38
+ - draft
39
+ - following
40
+ - converted
41
+ - closed
42
+ default: draft
43
+ app:
44
+ actions:
45
+ - create
46
+ - update
47
+ - list
48
+ - detail
49
+ defaultStatus: draft
50
+ ui:
51
+ list:
52
+ columns:
53
+ - leadCode
54
+ - leadName
55
+ - source
56
+ - ownerName
57
+ - status
58
+ - createdAt
59
+ filters:
60
+ - leadCode
61
+ - leadName
62
+ - source
63
+ - status
64
+ form:
65
+ groups:
66
+ - title: 基本信息
67
+ fields:
68
+ - leadCode
69
+ - leadName
70
+ - source
71
+ - ownerName
72
+ - phone
73
+ - status
74
+ detail:
75
+ sections:
76
+ - basicInfo