rapida-partner 1.18.0 → 1.19.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 (37) hide show
  1. package/package.json +1 -1
  2. package/rapidaObject.json +1 -1
  3. package/src/constants/secrets/database.ts +1 -0
  4. package/src/constants/secrets/others.ts +3 -0
  5. package/src/constants/secrets/storage.ts +1 -0
  6. package/src/examples/components/charts/movieGenre.chart.ts +34 -0
  7. package/src/examples/components/forms/character.form.ts +4 -4
  8. package/src/examples/components/forms/company.form.ts +458 -0
  9. package/src/examples/components/forms/movie.form.ts +21 -7
  10. package/src/examples/components/forms/movieEpisode.form.ts +47 -22
  11. package/src/examples/components/forms/movieGenre.form.ts +2 -2
  12. package/src/examples/components/forms/person.form.ts +565 -0
  13. package/src/examples/components/lists/actor.list.ts +17 -0
  14. package/src/examples/components/lists/character.list.ts +1 -1
  15. package/src/examples/components/lists/movie.list.ts +1 -1
  16. package/src/examples/components/lists/movieEpisode.list.ts +15 -11
  17. package/src/examples/components/lists/movieGenre.list.ts +2 -2
  18. package/src/examples/constants/options/countriesFromEarth.ts +2011 -0
  19. package/src/examples/constants/options/legalNature.ts +198 -0
  20. package/src/examples/modules/actor.ts +1 -1
  21. package/src/examples/modules/character.ts +1 -1
  22. package/src/examples/modules/movie.ts +3 -3
  23. package/src/examples/projects/movieBackoffice.ts +22 -2
  24. package/src/interfaces/data-chart.interface.ts +15 -12
  25. package/src/interfaces/e2e.interface.ts +4 -0
  26. package/src/interfaces/form.interface.ts +0 -2
  27. package/src/interfaces/project.interface.ts +58 -14
  28. package/src/schemas/business-rules.ref.json +175 -4
  29. package/src/schemas/component-one-of.ref.json +25 -10
  30. package/src/schemas/data-chart.ref.json +146 -42
  31. package/src/schemas/e2e.ref.json +21 -0
  32. package/src/schemas/module.ref.json +40 -14
  33. package/src/schemas/project.schema.json +34 -11
  34. package/src/interfaces/layout-dashboard.interface.ts +0 -52
  35. package/src/schemas/bdd-and-e2e-narratives.ref.json +0 -47
  36. package/src/schemas/bdd-and-e2e.json +0 -33
  37. package/src/schemas/dashboard.ref.json +0 -111
@@ -0,0 +1,198 @@
1
+ export const LEGAL_NATURE = [
2
+ { label: "Empresa Pública", value: "201-1" },
3
+ { label: "Sociedade de Economia Mista", value: "203-8" },
4
+ { label: "Sociedade Anônima Aberta", value: "204-6" },
5
+ { label: "Sociedade Anônima Fechada", value: "205-4" },
6
+ { label: "Sociedade Empresária Limitada", value: "206-2" },
7
+ {
8
+ label: "Sociedade Empresária em Nome Coletivo",
9
+ value: "207-0",
10
+ },
11
+ {
12
+ label: "Sociedade Empresária em Comandita Simples",
13
+ value: "208-9",
14
+ },
15
+ {
16
+ label: "Sociedade Empresária em Comandita por Ações",
17
+ value: "209-7",
18
+ },
19
+ { label: "Sociedade em Conta de Participação", value: "212-7" },
20
+ { label: "Empresário(Individual)", value: "213-5" },
21
+ { label: "Cooperativa", value: "214-3" },
22
+ { label: "Consórcio de Sociedades", value: "215-1" },
23
+ { label: "Grupo de Sociedades", value: "216-0" },
24
+ {
25
+ label: "Estabelecimento, no Brasil, de Sociedade Estrangeira",
26
+ value: "217-8",
27
+ },
28
+ {
29
+ label:
30
+ "Estabelecimento, no Brasil, de Empresa Binacional Argentino - Brasileira",
31
+ value: "219-4",
32
+ },
33
+ { label: "Empresa Domiciliada no Exterior", value: "221-6" },
34
+ { label: "Clube / Fundo de Investimento", value: "222-4" },
35
+ { label: "Sociedade Simples Pura", value: "223-2" },
36
+ { label: "Sociedade Simples Limitada", value: "224-0" },
37
+ { label: "Sociedade Simples em Nome Coletivo", value: "225-9" },
38
+ {
39
+ label: "Sociedade Simples em Comandita Simples",
40
+ value: "226-7",
41
+ },
42
+ { label: "Empresa Binacional", value: "227-5" },
43
+ { label: "Consórcio de Empregadores", value: "228-3" },
44
+ { label: "Consórcio Simples", value: "229-1" },
45
+ {
46
+ label:
47
+ "Empresa Individual de Responsabilidade Limitada(de Natureza Empresária)",
48
+ value: "230-5",
49
+ },
50
+ {
51
+ label:
52
+ "Empresa Individual de Responsabilidade Limitada(de Natureza Simples)",
53
+ value: "231-3",
54
+ },
55
+ { label: "Sociedade Unipessoal de Advogados", value: "232-1" },
56
+ { label: "Cooperativas de Consumo", value: "233-0" },
57
+ {
58
+ label: "Serviço Notarial e Registral(Cartório)",
59
+ value: "303-4",
60
+ },
61
+ { label: "Fundação Privada", value: "306-9" },
62
+ { label: "Serviço Social Autônomo", value: "307-7" },
63
+ { label: "Condomínio Edilício", value: "308-5" },
64
+ { label: "Comissão de Conciliação Prévia", value: "310-7" },
65
+ { label: "Entidade de Mediação e Arbitragem", value: "311-5" },
66
+ { label: "Entidade Sindical", value: "313-1" },
67
+ {
68
+ label: "Estabelecimento, no Brasil, de Fundação ou Associação Estrangeiras",
69
+ value: "320-4",
70
+ },
71
+ {
72
+ label: "Fundação ou Associação Domiciliada no Exterior",
73
+ value: "321-2",
74
+ },
75
+ { label: "Organização Religiosa", value: "322-0" },
76
+ { label: "Comunidade Indígena", value: "323-9" },
77
+ { label: "Fundo Privado", value: "324-7" },
78
+ {
79
+ label: "Órgão de Direção Nacional de Partido Político",
80
+ value: "325-5",
81
+ },
82
+ {
83
+ label: "Órgão de Direção Regional de Partido Político",
84
+ value: "326-3",
85
+ },
86
+ {
87
+ label: "Órgão de Direção Local de Partido Político",
88
+ value: "327-1",
89
+ },
90
+ {
91
+ label: "Comitê Financeiro de Partido Político",
92
+ value: "328-0",
93
+ },
94
+ {
95
+ label: "Frente Plebiscitária ou Referendária",
96
+ value: "329-8",
97
+ },
98
+ { label: "Organização Social(OS)", value: "330-1" },
99
+ { label: "Demais Condomínios", value: "331-0" },
100
+ { label: "Associação Privada", value: "399-9" },
101
+ { label: "Empresa Individual Imobiliária", value: "401-4" },
102
+ { label: "Segurado Especial", value: "402-2" },
103
+ { label: "Contribuinte individual", value: "408-1" },
104
+ { label: "Candidato a Cargo Político Eletivo", value: "409-0" },
105
+ { label: "Leiloeiro", value: "411-1" },
106
+ { label: "Produtor Rural(Pessoa Física)", value: "412-0" },
107
+ { label: "Organização Internacional", value: "501-0" },
108
+ {
109
+ label: "Representação Diplomática Estrangeira",
110
+ value: "502-9",
111
+ },
112
+ {
113
+ label: "Outras Instituições Extraterritoriais",
114
+ value: "503-7",
115
+ },
116
+ {
117
+ label: "Órgão Público do Poder Executivo Federal",
118
+ value: "101-5",
119
+ },
120
+ {
121
+ label: "Órgão Público do Poder Executivo Estadual ou do Distrito Federal",
122
+ value: "102-3",
123
+ },
124
+ {
125
+ label: "Órgão Público do Poder Executivo Municipal",
126
+ value: "103-1",
127
+ },
128
+ {
129
+ label: "Órgão Público do Poder Legislativo Federal",
130
+ value: "104-0",
131
+ },
132
+ {
133
+ label: "Órgão Público do Poder Legislativo Estadual ou do Distrito Federal",
134
+ value: "105-8",
135
+ },
136
+ {
137
+ label: "Órgão Público do Poder Legislativo Municipal",
138
+ value: "106-6",
139
+ },
140
+ {
141
+ label: "Órgão Público do Poder Judiciário Federal",
142
+ value: "107-4",
143
+ },
144
+ {
145
+ label: "Órgão Público do Poder Judiciário Estadual",
146
+ value: "108-2",
147
+ },
148
+ { label: "Autarquia Federal", value: "110-4" },
149
+ {
150
+ label: "Autarquia Estadual ou do Distrito Federal",
151
+ value: "111-2",
152
+ },
153
+ { label: "Autarquia Municipal", value: "112-0" },
154
+ {
155
+ label: "Fundação Pública de Direito Público Federal",
156
+ value: "113-9",
157
+ },
158
+ {
159
+ label:
160
+ "Fundação Pública de Direito Público Estadual ou do Distrito Federal",
161
+ value: "114-7",
162
+ },
163
+ {
164
+ label: "Fundação Pública de Direito Público Municipal",
165
+ value: "115-5",
166
+ },
167
+ { label: "Órgão Público Autônomo Federal", value: "116-3" },
168
+ {
169
+ label: "Órgão Público Autônomo Estadual ou do Distrito Federal",
170
+ value: "117-1",
171
+ },
172
+ { label: "Órgão Público Autônomo Municipal", value: "118-0" },
173
+ { label: "Comissão Polinacional", value: "119-8" },
174
+ { label: "Fundo Público", value: "120-1" },
175
+ {
176
+ label: "Consórcio Público de Direito Público(Associação Pública)",
177
+ value: "121-0",
178
+ },
179
+ {
180
+ label: "Consórcio Público de Direito Privado",
181
+ value: "122-8",
182
+ },
183
+ { label: "Estado ou Distrito Federal", value: "123-6" },
184
+ { label: "Município", value: "124-4" },
185
+ {
186
+ label: "Fundação Pública de Direito Privado Federal",
187
+ value: "125-2",
188
+ },
189
+ {
190
+ label:
191
+ "Fundação Pública de Direito Privado Estadual ou do Distrito Federal",
192
+ value: "126-0",
193
+ },
194
+ {
195
+ label: "Fundação Pública de Direito Privado Municipal",
196
+ value: "127-9",
197
+ },
198
+ ];
@@ -5,7 +5,7 @@ import { actorList } from "../components/lists/actor.list";
5
5
  export const actorModule: IModule = {
6
6
  id: "actorModule",
7
7
  title: "Ator / Atriz",
8
- icon: "actor",
8
+ icon: "theater",
9
9
  components: [
10
10
  actorForm,
11
11
  actorList,
@@ -5,7 +5,7 @@ import { characterList } from "../components/lists/character.list";
5
5
  export const characterModule: IModule = {
6
6
  id: "characterModule",
7
7
  title: "Personagem",
8
- icon: "character",
8
+ icon: "drama",
9
9
  components: [
10
10
  characterForm,
11
11
  characterList,
@@ -9,12 +9,12 @@ import { movieGenreList } from "../components/lists/movieGenre.list";
9
9
  export const movieModule: IModule = {
10
10
  id: "movieModule",
11
11
  title: "Filme",
12
- icon: "movie",
12
+ icon: "video",
13
13
  components: [
14
- movieForm,
15
- movieList,
16
14
  movieGenreForm,
17
15
  movieGenreList,
16
+ movieForm,
17
+ movieList,
18
18
  movieEpisodeForm,
19
19
  movieEpisodeList
20
20
  ]
@@ -2,6 +2,9 @@ import { DATABASE_PASSWORD } from "../../constants/secrets/database";
2
2
  import { DISCORD_WEBHOOK_URL, JWT_SECRET, SMTP_PASSWORD } from "../../constants/secrets/others";
3
3
  import { STORAGE_PRIVATE_KEY } from "../../constants/secrets/storage";
4
4
  import type { IProject } from "../../interfaces/project.interface";
5
+ import { movieGenreChart } from "../components/charts/movieGenre.chart";
6
+ import { companyForm } from "../components/forms/company.form";
7
+ import { personForm } from "../components/forms/person.form";
5
8
  import { actorModule } from "../modules/actor";
6
9
  import { characterModule } from "../modules/character";
7
10
  import { movieModule } from "../modules/movie";
@@ -10,7 +13,17 @@ export const movieBackoffice: IProject = {
10
13
  id: "movieBackoffice",
11
14
  title: "Movie Backoffice",
12
15
  description: "Sistema de gerenciamento para filmes e personagens.",
13
- flow: "backofficeOpenedWithoutPermissions",
16
+ skeleton: "backoffice",
17
+ flows: {
18
+ authentication: true,
19
+ permission: true,
20
+ invitation: true,
21
+ registration: true,
22
+ profiles: {
23
+ personProfile: personForm,
24
+ companyProfile: companyForm,
25
+ }
26
+ },
14
27
  businessPlan: {
15
28
  businessValue: "Gerenciar e otimizar as operações do Movie.",
16
29
  targetMarket: "Empresas que utilizam o Movie para gerenciar sugestões e feedbacks.",
@@ -21,7 +34,7 @@ export const movieBackoffice: IProject = {
21
34
  monetization: "Assinaturas mensais para acesso ao sistema.",
22
35
  },
23
36
  frontend: {
24
- framework: "react",
37
+ framework: "angular",
25
38
  uiKit: "flowbite",
26
39
  },
27
40
  backend: {
@@ -59,6 +72,10 @@ export const movieBackoffice: IProject = {
59
72
  },
60
73
  baseUrl: "http://localhost:5173",
61
74
  },
75
+ e2e: {
76
+ framework: "playwright",
77
+ moduleId: movieModule.id,
78
+ },
62
79
  modules: [
63
80
  movieModule,
64
81
  actorModule,
@@ -105,5 +122,8 @@ export const movieBackoffice: IProject = {
105
122
  footerHeight: "60px",
106
123
  }
107
124
  }
125
+ ],
126
+ dashboard: [
127
+ movieGenreChart,
108
128
  ]
109
129
  };
@@ -11,24 +11,27 @@ export interface IDataChart {
11
11
  businessRules?: IBusinessRule[];
12
12
  dataSource: IApiRequest;
13
13
  chartType:
14
- | "line"
15
- | "bar"
16
- | "pie"
17
- | "doughnut"
18
- | "radar"
19
- | "scatter"
20
- | "bubble"
21
- | "area"
22
- | "polarArea";
14
+ | "line"
15
+ | "bar"
16
+ | "pie"
17
+ | "doughnut"
18
+ | "radar"
19
+ | "scatter"
20
+ | "bubble"
21
+ | "area"
22
+ | "polarArea";
23
23
  dimensions: {
24
24
  width?: string;
25
25
  height?: string;
26
26
  aspectRatio?: number;
27
27
  };
28
28
  data: {
29
- labels: {
29
+ labels: { // normally refers to description of "x" in cartesian plan charts or area of non-cartesian plan charts
30
30
  property: string;
31
- formatter?: string;
31
+ formatter?: {
32
+ code?: string;
33
+ regex?: RegExp;
34
+ }
32
35
  };
33
36
  datasets: IChartDataset[];
34
37
  };
@@ -79,6 +82,6 @@ export interface IChartDataset {
79
82
  borderColor?: string | string[];
80
83
  borderWidth?: number;
81
84
  fill?: boolean;
82
- tension?: number; // Para linhas curvas
85
+ tension?: number; // curved lines
83
86
  aggregator?: "sum" | "avg" | "min" | "max" | "count";
84
87
  }
@@ -0,0 +1,4 @@
1
+ export interface IE2e {
2
+ framework: "cypress" | "playwright" | "webdriverio";
3
+ moduleId: string; // Module that is going to be tested over its components
4
+ }
@@ -1,8 +1,6 @@
1
- import type { EDataType } from "../enums/form.enum";
2
1
  import type { IFormArray } from "./form-array.interface";
3
2
  import type { IFormAutocomplete } from "./form-autocomplete.interface";
4
3
  import type { IFormButton } from "./form-button.interface";
5
- import type { IFormCondition } from "./condition.interface";
6
4
  import type { IFormDatePicker } from "./form-datepicker.interface";
7
5
  import type { IFormFieldset } from "./form-fieldset.interface";
8
6
  import type { IFormFile } from "./form-file.interface";
@@ -3,9 +3,9 @@ import type { IDataChart } from "./data-chart.interface";
3
3
  import type { IDataDetail } from "./data-detail.interface";
4
4
  import type { IDataGrid } from "./data-grid.interface";
5
5
  import type { IDataTable } from "./data-table.interface";
6
+ import type { IE2e } from "./e2e.interface";
6
7
  import type { IFlowChart } from "./form-flowchart.interface";
7
8
  import type { IForm } from "./form.interface";
8
- import type { IDashboard } from "./layout-dashboard.interface";
9
9
  import type { IPanel } from "./layout-panel.interface";
10
10
  import type { IList } from "./list.interface";
11
11
  import type { IBackend } from "./project-backend.interface";
@@ -17,19 +17,24 @@ export interface IProject {
17
17
  description: string;
18
18
  businessPlan?: IBusinessPLan;
19
19
  businessRules?: IBusinessRule[];
20
- flow:
21
- | "backofficeByInvitationWithoutPermissions"
22
- | "backofficeByInvitationAndPermissionsByComponent"
23
- | "backofficeOpenedWithoutPermissions"
24
- | "backofficeOpenedAndPermissionsByComponent"
25
- | "marketplace"
26
- | "landingPage"
27
- | "socialNetwork";
20
+ skeleton: "backoffice" | "marketplace" | "landingPage" | "socialNetwork";
21
+ flows?: {
22
+ authentication?: boolean;
23
+ permission?: boolean;
24
+ invitation?: boolean;
25
+ registration?: boolean;
26
+ profiles?: {
27
+ personProfile?: IForm;
28
+ companyProfile?: IForm;
29
+ };
30
+ };
28
31
  frontend?: IFrontend;
29
32
  backend?: IBackend;
33
+ e2e?: IE2e;
30
34
  modules?: IModule[];
31
35
  styles?: IStyle[];
32
36
  flowChart?: IFlowChart;
37
+ dashboard?: IComponent[];
33
38
  }
34
39
 
35
40
  interface IFrontend {
@@ -56,15 +61,55 @@ export interface IBusinessRule {
56
61
  type: "frontend" | "backend" | "both";
57
62
  details: string;
58
63
  };
59
- backendComplementaryCode?: string;
60
- frontendComplementaryCode?: string;
64
+ backendComplementaryCode?: {
65
+ framework: "functions" | "lambda" | "laravel" | "nest" | "dotnet";
66
+ code: {
67
+ codeStartLocationReference: "before" | "after" | "replace";
68
+ codeStartLocation: string;
69
+ code: string;
70
+ }[];
71
+ };
72
+ frontendComplementaryCode?: {
73
+ framework:
74
+ | "angular"
75
+ | "flutter"
76
+ | "react"
77
+ | "reactnative"
78
+ | "svelte"
79
+ | "vue";
80
+ code: {
81
+ codeStartLocationReference: "before" | "after" | "replace";
82
+ codeStartLocation: string;
83
+ code: string;
84
+ }[];
85
+ };
61
86
  }[];
62
87
  implementation?: {
63
88
  type: "frontend" | "backend" | "both";
64
89
  details: string;
65
90
  };
66
- backendComplementaryCode?: string;
67
- frontendComplementaryCode?: string;
91
+ backendComplementaryCode?: {
92
+ framework: "functions" | "lambda" | "laravel" | "nest" | "dotnet";
93
+ code: {
94
+ codeStartLocationReference: "before" | "after" | "replace";
95
+ codeStartLocation: string;
96
+ code: string;
97
+ }[];
98
+ };
99
+ frontendComplementaryCode?: {
100
+ framework:
101
+ | "angular"
102
+ | "flutter"
103
+ | "react"
104
+ | "reactnative"
105
+ | "svelte"
106
+ | "vue";
107
+ code: {
108
+ codeStartLocationReference: "before" | "after" | "replace";
109
+ codeStartLocation: string;
110
+ code: string;
111
+ }[];
112
+ };
68
113
  };
69
114
  }
70
115
 
@@ -90,5 +135,4 @@ export type IComponent =
90
135
  | IDataGrid
91
136
  | IDataDetail
92
137
  | IDataChart
93
- | IDashboard
94
138
  | IPanel;
@@ -32,10 +32,95 @@
32
32
  ]
33
33
  },
34
34
  "backendComplementaryCode": {
35
- "type": "string"
35
+ "type": "object",
36
+ "properties": {
37
+ "framework": {
38
+ "type": "string",
39
+ "enum": [
40
+ "functions",
41
+ "lambda",
42
+ "laravel",
43
+ "nest",
44
+ "dotnet"
45
+ ]
46
+ },
47
+ "code": {
48
+ "type": "array",
49
+ "items": {
50
+ "type": "object",
51
+ "properties": {
52
+ "codeStartLocationReference": {
53
+ "type": "string",
54
+ "enum": [
55
+ "before",
56
+ "after",
57
+ "replace"
58
+ ]
59
+ },
60
+ "codeStartLocation": {
61
+ "type": "string"
62
+ },
63
+ "code": {
64
+ "type": "string"
65
+ }
66
+ },
67
+ "required": [
68
+ "codeStartLocationReference",
69
+ "code"
70
+ ]
71
+ }
72
+ }
73
+ },
74
+ "required": [
75
+ "framework",
76
+ "code"
77
+ ]
36
78
  },
37
79
  "frontendComplementaryCode": {
38
- "type": "string"
80
+ "type": "object",
81
+ "properties": {
82
+ "framework": {
83
+ "type": "string",
84
+ "enum": [
85
+ "angular",
86
+ "flutter",
87
+ "react",
88
+ "reactnative",
89
+ "svelte",
90
+ "vue"
91
+ ]
92
+ },
93
+ "code": {
94
+ "type": "array",
95
+ "items": {
96
+ "type": "object",
97
+ "properties": {
98
+ "codeStartLocationReference": {
99
+ "type": "string",
100
+ "enum": [
101
+ "before",
102
+ "after",
103
+ "replace"
104
+ ]
105
+ },
106
+ "codeStartLocation": {
107
+ "type": "string"
108
+ },
109
+ "code": {
110
+ "type": "string"
111
+ }
112
+ },
113
+ "required": [
114
+ "codeStartLocationReference",
115
+ "code"
116
+ ]
117
+ }
118
+ }
119
+ },
120
+ "required": [
121
+ "framework",
122
+ "code"
123
+ ]
39
124
  },
40
125
  "subrules": {
41
126
  "type": "array",
@@ -69,10 +154,96 @@
69
154
  ]
70
155
  },
71
156
  "backendComplementaryCode": {
72
- "type": "string"
157
+ "type": "object",
158
+ "properties": {
159
+ "framework": {
160
+ "type": "string",
161
+ "enum": [
162
+ "functions",
163
+ "lambda",
164
+ "laravel",
165
+ "nest",
166
+ "dotnet"
167
+ ]
168
+ },
169
+ "code": {
170
+ "type": "array",
171
+ "items": {
172
+ "type": "object",
173
+ "properties": {
174
+ "codeStartLocationReference": {
175
+ "type": "string",
176
+ "enum": [
177
+ "before",
178
+ "after",
179
+ "replace"
180
+ ]
181
+ },
182
+ "codeStartLocation": {
183
+ "type": "string"
184
+ },
185
+ "code": {
186
+ "type": "string"
187
+ }
188
+ },
189
+ "required": [
190
+ "codeStartLocationReference",
191
+ "code"
192
+ ]
193
+ }
194
+ }
195
+ },
196
+ "required": [
197
+ "framework",
198
+ "code"
199
+ ]
73
200
  },
74
201
  "frontendComplementaryCode": {
75
- "type": "string"
202
+ "type": "object",
203
+ "properties": {
204
+ "framework": {
205
+ "type": "string",
206
+ "enum": [
207
+ "angular",
208
+ "flutter",
209
+ "react",
210
+ "reactnative",
211
+ "svelte",
212
+ "vue"
213
+ ]
214
+ },
215
+ "code": {
216
+ "type": "array",
217
+ "items": {
218
+ "type": "object",
219
+ "properties": {
220
+ "codeStartLocationReference": {
221
+ "type": "string",
222
+ "enum": [
223
+ "before",
224
+ "after",
225
+ "replace"
226
+ ]
227
+ },
228
+ "codeStartLocation": {
229
+ "type": "string"
230
+ },
231
+ "code": {
232
+ "type": "string"
233
+ }
234
+ },
235
+ "required": [
236
+ "codeStartLocationReference",
237
+ "codeStartLocation",
238
+ "code"
239
+ ]
240
+ }
241
+ }
242
+ },
243
+ "required": [
244
+ "framework",
245
+ "code"
246
+ ]
76
247
  }
77
248
  }
78
249
  }