@postxl/schema 0.0.2

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 (75) hide show
  1. package/LICENSE +50 -0
  2. package/README.md +320 -0
  3. package/dist/enum/enum.brands.d.ts +11 -0
  4. package/dist/enum/enum.brands.js +19 -0
  5. package/dist/enum/enum.d.ts +49 -0
  6. package/dist/enum/enum.defaults.d.ts +41 -0
  7. package/dist/enum/enum.defaults.js +105 -0
  8. package/dist/enum/enum.js +6 -0
  9. package/dist/enum/enum.json-decoder.d.ts +61 -0
  10. package/dist/enum/enum.json-decoder.js +51 -0
  11. package/dist/enum/enum.transformer.d.ts +12 -0
  12. package/dist/enum/enum.transformer.js +76 -0
  13. package/dist/enum/enum.types.d.ts +14 -0
  14. package/dist/enum/enum.types.js +2 -0
  15. package/dist/enum/index.d.ts +6 -0
  16. package/dist/enum/index.js +22 -0
  17. package/dist/field/defaults.d.ts +12 -0
  18. package/dist/field/defaults.js +78 -0
  19. package/dist/field/discriminated-union.d.ts +125 -0
  20. package/dist/field/discriminated-union.js +207 -0
  21. package/dist/field/enum.d.ts +65 -0
  22. package/dist/field/enum.js +111 -0
  23. package/dist/field/field.d.ts +483 -0
  24. package/dist/field/field.js +68 -0
  25. package/dist/field/id.d.ts +152 -0
  26. package/dist/field/id.js +104 -0
  27. package/dist/field/index.d.ts +11 -0
  28. package/dist/field/index.js +27 -0
  29. package/dist/field/relation.d.ts +88 -0
  30. package/dist/field/relation.js +138 -0
  31. package/dist/field/scalar.d.ts +179 -0
  32. package/dist/field/scalar.js +197 -0
  33. package/dist/field/shared/brands.d.ts +38 -0
  34. package/dist/field/shared/brands.js +109 -0
  35. package/dist/field/shared/decoders.d.ts +17 -0
  36. package/dist/field/shared/decoders.js +88 -0
  37. package/dist/field/shared/seed.d.ts +32 -0
  38. package/dist/field/shared/seed.js +63 -0
  39. package/dist/field/shared/types.d.ts +73 -0
  40. package/dist/field/shared/types.js +2 -0
  41. package/dist/field/shared/utils.d.ts +26 -0
  42. package/dist/field/shared/utils.js +52 -0
  43. package/dist/index.d.ts +12 -0
  44. package/dist/index.js +25 -0
  45. package/dist/model/index.d.ts +5 -0
  46. package/dist/model/index.js +21 -0
  47. package/dist/model/model.brands.d.ts +7 -0
  48. package/dist/model/model.brands.js +10 -0
  49. package/dist/model/model.defaults.d.ts +28 -0
  50. package/dist/model/model.defaults.js +304 -0
  51. package/dist/model/model.json-decoder.d.ts +94 -0
  52. package/dist/model/model.json-decoder.js +107 -0
  53. package/dist/model/model.transformer.d.ts +93 -0
  54. package/dist/model/model.transformer.js +183 -0
  55. package/dist/model/model.types.d.ts +37 -0
  56. package/dist/model/model.types.js +2 -0
  57. package/dist/project-schema/project-schema.brands.d.ts +10 -0
  58. package/dist/project-schema/project-schema.brands.js +17 -0
  59. package/dist/project-schema/project-schema.defaults.d.ts +16 -0
  60. package/dist/project-schema/project-schema.defaults.js +53 -0
  61. package/dist/project-schema/project-schema.json-decoder.d.ts +285 -0
  62. package/dist/project-schema/project-schema.json-decoder.js +145 -0
  63. package/dist/project-schema/project-schema.transformer.d.ts +284 -0
  64. package/dist/project-schema/project-schema.transformer.js +444 -0
  65. package/dist/project-schema/project-schema.types.d.ts +77 -0
  66. package/dist/project-schema/project-schema.types.js +2 -0
  67. package/dist/samples/la.schema.json +2055 -0
  68. package/dist/samples/mca.schema.json +830 -0
  69. package/dist/samples/ring.schema.json +879 -0
  70. package/dist/samples/sample-schemas.d.ts +1896 -0
  71. package/dist/samples/sample-schemas.js +20 -0
  72. package/dist/samples/simple.schema.json +250 -0
  73. package/dist/samples/subex.schema.json +1188 -0
  74. package/dist/samples/usp-msm.schema.json +2515 -0
  75. package/package.json +57 -0
@@ -0,0 +1,879 @@
1
+ {
2
+ "name": "PostXL ring",
3
+ "slug": "ring",
4
+ "description": "Internal management tool for PostXL",
5
+ "version": "0.0.1",
6
+ "schemas": ["PXL", "Data"],
7
+ "defaultSchema": "Data",
8
+ "systemUser": { "name": "System", "email": "system@postxl.com" },
9
+ "standardModels": ["Action", "ActionOperation", "User", "File"],
10
+ "models": [
11
+ {
12
+ "name": "Industry",
13
+ "description": "An industry",
14
+ "fields": [
15
+ {
16
+ "name": "name",
17
+ "type": "String",
18
+ "label": "Name",
19
+ "description": "The name of the industry."
20
+ }
21
+ ],
22
+ "seed": [{ "id": "Pharma", "name": "Pharma" }]
23
+ },
24
+ {
25
+ "name": "CorporateFunction",
26
+ "description": "A corporate function",
27
+ "fields": [
28
+ {
29
+ "name": "name",
30
+ "type": "String",
31
+ "label": "Name",
32
+ "description": "The name of the corporate function."
33
+ }
34
+ ],
35
+ "seed": [
36
+ { "id": "Benchmarking", "name": "Benchmarking" },
37
+ { "id": "Business Development", "name": "Business Development" },
38
+ { "id": "Controlling", "name": "Controlling" },
39
+ { "id": "Finance", "name": "Finance" },
40
+ { "id": "HR", "name": "HR" },
41
+ { "id": "IT", "name": "IT" },
42
+ { "id": "Legal", "name": "Legal" },
43
+ { "id": "Marketing", "name": "Marketing" },
44
+ { "id": "Operations", "name": "Operations" },
45
+ { "id": "Procurement", "name": "Procurement" },
46
+ { "id": "Research", "name": "Research" },
47
+ { "id": "Sales", "name": "Sales" },
48
+ { "id": "Supply Chain", "name": "Supply Chain" }
49
+ ]
50
+ },
51
+ {
52
+ "name": "DemoProject",
53
+ "description": "A demo project that shows a use case of PostXL.",
54
+ "fields": [
55
+ {
56
+ "name": "industryId",
57
+ "type": "Industry?",
58
+ "label": "IndustryId",
59
+ "description": "The industry of the demo project."
60
+ },
61
+ {
62
+ "name": "corporateFunctionId",
63
+ "type": "CorporateFunction?",
64
+ "label": "CorporateFunctionId",
65
+ "description": "The corporate function of the demo project."
66
+ },
67
+ {
68
+ "name": "name",
69
+ "type": "String",
70
+ "label": "Name",
71
+ "description": "The name of the demo project."
72
+ },
73
+ {
74
+ "name": "description",
75
+ "type": "String?",
76
+ "label": "Description",
77
+ "description": "The description of the demo project."
78
+ },
79
+ {
80
+ "name": "status",
81
+ "type": "DemoProjectStatus",
82
+ "label": "Status",
83
+ "description": "The status of the demo project."
84
+ },
85
+ {
86
+ "name": "link",
87
+ "type": "String?",
88
+ "label": "Link",
89
+ "description": "The link to the demo project."
90
+ },
91
+ {
92
+ "name": "componentsUsed",
93
+ "type": "String?",
94
+ "label": "ComponentsUsed",
95
+ "description": "A comma separated list of the components used in the demo project.\n\nTODO: This should be a relation to a Component model."
96
+ },
97
+ {
98
+ "name": "cssConfiguration",
99
+ "type": "String?",
100
+ "label": "CssConfiguration",
101
+ "description": "The full configuration as created by the Ring Configuration Editor."
102
+ },
103
+ {
104
+ "name": "schema",
105
+ "type": "String?",
106
+ "label": "Schema",
107
+ "description": "The PostXL Prisma schema"
108
+ }
109
+ ],
110
+ "seed": [
111
+ {
112
+ "id": "DemoProject1",
113
+ "industryId": null,
114
+ "corporateFunctionId": "HR",
115
+ "name": "Training Database",
116
+ "description": "A database for training purposes",
117
+ "status": "Idea",
118
+ "link": null,
119
+ "componentsUsed": null,
120
+ "cssConfiguration": null,
121
+ "schema": null
122
+ },
123
+ {
124
+ "id": "DemoProject2",
125
+ "industryId": "Pharma",
126
+ "corporateFunctionId": null,
127
+ "name": "International Revenue Pricing",
128
+ "description": "A tool helping to identify the best international launch sequence for new drugs",
129
+ "status": "Idea",
130
+ "link": null,
131
+ "componentsUsed": "Map, Grid",
132
+ "cssConfiguration": null,
133
+ "schema": null
134
+ },
135
+ {
136
+ "id": "DemoProject3",
137
+ "industryId": null,
138
+ "corporateFunctionId": null,
139
+ "name": "CRM",
140
+ "description": "A CRM system",
141
+ "status": "WorkInProgress",
142
+ "link": null,
143
+ "componentsUsed": null,
144
+ "cssConfiguration": null,
145
+ "schema": null
146
+ },
147
+ {
148
+ "id": "DemoProject4",
149
+ "industryId": "Pharma",
150
+ "corporateFunctionId": null,
151
+ "name": "Subex",
152
+ "description": "Submission Excellence for new drug approval",
153
+ "status": "Completed",
154
+ "link": "https://subex.postxl.com",
155
+ "componentsUsed": "Gantt",
156
+ "cssConfiguration": null,
157
+ "schema": null
158
+ }
159
+ ]
160
+ },
161
+ {
162
+ "name": "Project",
163
+ "description": "A agreed Project.",
164
+ "fields": [
165
+ {
166
+ "name": "businessLeadId",
167
+ "type": "TeamMember?",
168
+ "prismaRelationFieldName": "BusinessLead",
169
+ "label": "Business lead",
170
+ "description": "PostXL Business Owner/contact for the project."
171
+ },
172
+ {
173
+ "name": "technicalLeadId",
174
+ "type": "TeamMember?",
175
+ "prismaRelationFieldName": "ProjectTechnicalLead",
176
+ "label": "Technical lead",
177
+ "description": "PostXL Technical Owner/contact for the project."
178
+ },
179
+ {
180
+ "name": "industryId",
181
+ "type": "Industry?",
182
+ "label": "IndustryId",
183
+ "description": "The industry of the project."
184
+ },
185
+ {
186
+ "name": "corporateFunctionId",
187
+ "type": "CorporateFunction?",
188
+ "label": "CorporateFunctionId",
189
+ "description": "The corporate function of the project."
190
+ },
191
+ {
192
+ "name": "name",
193
+ "type": "String",
194
+ "label": "Name",
195
+ "description": "The name of the project."
196
+ },
197
+ {
198
+ "name": "description",
199
+ "type": "String?",
200
+ "label": "Description",
201
+ "description": "The description of the project."
202
+ },
203
+ {
204
+ "name": "clientId",
205
+ "type": "Client",
206
+ "prismaRelationFieldName": "client",
207
+ "label": "ClientId",
208
+ "description": "The client of the project."
209
+ },
210
+ {
211
+ "name": "mainContactId",
212
+ "type": "Contact",
213
+ "prismaRelationFieldName": "mainContact",
214
+ "label": "MainContactId",
215
+ "description": "Who is the main contact of the client for the project."
216
+ },
217
+ {
218
+ "name": "intermediaryClientId",
219
+ "type": "Client?",
220
+ "prismaRelationFieldName": "intermediaryClient",
221
+ "label": "IntermediaryClientId",
222
+ "description": "Some projects are invoiced via an intermediary client."
223
+ },
224
+ {
225
+ "name": "intermediaryClientContactId",
226
+ "type": "Contact?",
227
+ "prismaRelationFieldName": "intermediaryClientContact",
228
+ "label": "IntermediaryClientContactId",
229
+ "description": "The contact of the intermediary client for the project."
230
+ }
231
+ ],
232
+ "seed": [
233
+ {
234
+ "id": "Project-es-crcaim",
235
+ "clientId": "Client_ES",
236
+ "mainContactId": null,
237
+ "businessLeadId": "peter",
238
+ "technicalLeadId": "chris",
239
+ "industryId": "Pharma",
240
+ "corporateFunctionId": "Sales",
241
+ "name": "CRCAIM",
242
+ "description": "Colorectal Cancer AIM Microsimulation"
243
+ },
244
+ {
245
+ "id": "Project-mca",
246
+ "clientId": "Client_McKinsey",
247
+ "mainContactId": null,
248
+ "businessLeadId": "johan",
249
+ "technicalLeadId": "peter",
250
+ "industryId": "Pharma",
251
+ "corporateFunctionId": "Operations",
252
+ "name": "MCA",
253
+ "description": "Modular Content Accelerator"
254
+ },
255
+ {
256
+ "id": "Project-mckinsey-subex",
257
+ "clientId": "Client_McKinsey",
258
+ "mainContactId": null,
259
+ "businessLeadId": "peter",
260
+ "technicalLeadId": "peter",
261
+ "industryId": "Pharma",
262
+ "corporateFunctionId": "Research",
263
+ "name": "Subex",
264
+ "description": "Submission Excellence"
265
+ }
266
+ ]
267
+ },
268
+ {
269
+ "name": "Currency",
270
+ "description": "A currency",
271
+ "fields": [
272
+ {
273
+ "name": "name",
274
+ "type": "String",
275
+ "label": "Name",
276
+ "description": "The name of the currency."
277
+ },
278
+ {
279
+ "name": "code",
280
+ "type": "String",
281
+ "label": "Code"
282
+ },
283
+ {
284
+ "name": "fxSymbol",
285
+ "type": "String",
286
+ "label": "FxSymbol",
287
+ "description": "The symbol of the currency."
288
+ }
289
+ ],
290
+ "seed": [
291
+ {
292
+ "id": "EUR",
293
+ "name": "Euro",
294
+ "code": "EUR",
295
+ "fxSymbol": "€"
296
+ },
297
+ {
298
+ "id": "USD",
299
+ "name": "US Dollar",
300
+ "code": "USD",
301
+ "fxSymbol": "$"
302
+ },
303
+ {
304
+ "id": "GBP",
305
+ "name": "British Pound",
306
+ "code": "GBP",
307
+ "fxSymbol": "£"
308
+ },
309
+ {
310
+ "id": "DKK",
311
+ "name": "Danish Krone",
312
+ "code": "DKK",
313
+ "fxSymbol": "kr"
314
+ }
315
+ ]
316
+ },
317
+ {
318
+ "name": "ProjectPhase",
319
+ "description": "A phase of a project.",
320
+ "fields": [
321
+ {
322
+ "name": "projectId",
323
+ "type": "String",
324
+ "label": "ProjectId"
325
+ },
326
+ {
327
+ "name": "name",
328
+ "type": "String",
329
+ "label": "Name"
330
+ },
331
+ {
332
+ "name": "status",
333
+ "type": "ProjectPhaseStatus",
334
+ "label": "Status",
335
+ "description": "The status of the project phase."
336
+ },
337
+ {
338
+ "name": "scope",
339
+ "type": "String",
340
+ "label": "Scope",
341
+ "description": "The description of the project phase's scope."
342
+ },
343
+ {
344
+ "name": "commercialSummary",
345
+ "type": "String",
346
+ "label": "CommercialSummary",
347
+ "description": "A summary of the commercial agreement for the project phase."
348
+ },
349
+ {
350
+ "name": "contractLinks",
351
+ "type": "String?",
352
+ "label": "ContractLinks",
353
+ "description": "Comma-separated list of links to contracts, invoices, etc."
354
+ },
355
+ {
356
+ "name": "currencyId",
357
+ "type": "Currency",
358
+ "label": "CurrencyId",
359
+ "description": "The currency agreed for the project phase."
360
+ },
361
+ {
362
+ "name": "startDate",
363
+ "type": "DateTime?",
364
+ "label": "StartDate",
365
+ "description": "The (expected) start date of the project phase."
366
+ },
367
+ {
368
+ "name": "endDate",
369
+ "type": "DateTime?",
370
+ "label": "EndDate",
371
+ "description": "The (expected) end date of the project phase."
372
+ }
373
+ ]
374
+ },
375
+ {
376
+ "name": "InvoiceStatus",
377
+ "description": "Status an Invoice can have.",
378
+ "fields": [
379
+ {
380
+ "name": "name",
381
+ "type": "String",
382
+ "label": "Name",
383
+ "description": "The name of the invoice status."
384
+ },
385
+ {
386
+ "name": "paymentProbability",
387
+ "type": "Float",
388
+ "label": "PaymentProbability",
389
+ "description": "The probability of payment."
390
+ }
391
+ ],
392
+ "seed": [
393
+ {
394
+ "id": "Invoice_Paid",
395
+ "name": "Paid",
396
+ "paymentProbability": 1
397
+ },
398
+ {
399
+ "id": "Invoice_Issued",
400
+ "name": "Issued",
401
+ "paymentProbability": 0.95
402
+ },
403
+ {
404
+ "id": "Invoice_WorkInProgress",
405
+ "name": "Work in progress",
406
+ "paymentProbability": 0.9
407
+ },
408
+ {
409
+ "id": "Invoice_Agreed",
410
+ "name": "Agreed",
411
+ "paymentProbability": 0.8
412
+ },
413
+ {
414
+ "id": "Invoice_OngoingMaintenance",
415
+ "name": "Ongoing maintenance",
416
+ "paymentProbability": 0.95
417
+ },
418
+ {
419
+ "id": "Invoice_ToBeInvoicedLater",
420
+ "name": "To be invoiced later",
421
+ "paymentProbability": 0.8
422
+ },
423
+ {
424
+ "id": "Invoice_InNegotiation",
425
+ "name": "In negotiation",
426
+ "paymentProbability": 0.5
427
+ },
428
+ {
429
+ "id": "Invoice_Cancelled",
430
+ "name": "Cancelled",
431
+ "paymentProbability": 0
432
+ }
433
+ ]
434
+ },
435
+ {
436
+ "name": "Invoice",
437
+ "description": "An invoice for a project phase or other efforts.",
438
+ "fields": [
439
+ {
440
+ "name": "recipientId",
441
+ "type": "Contact",
442
+ "label": "RecipientId",
443
+ "description": "The recipient of the invoice."
444
+ },
445
+ {
446
+ "name": "projectPhaseId",
447
+ "type": "ProjectPhase?",
448
+ "label": "ProjectPhaseId",
449
+ "description": "The project phase the invoice is for."
450
+ },
451
+ {
452
+ "name": "invoiceStatusId",
453
+ "type": "InvoiceStatus",
454
+ "label": "InvoiceStatusId",
455
+ "description": "The status of the invoice."
456
+ },
457
+ {
458
+ "name": "dateIssued",
459
+ "type": "DateTime?",
460
+ "label": "DateIssued",
461
+ "description": "The date the invoice was issued."
462
+ },
463
+ {
464
+ "name": "dateExpectedPayment",
465
+ "type": "DateTime?",
466
+ "label": "DateExpectedPayment",
467
+ "description": "The date the invoice is expected to be paid."
468
+ },
469
+ {
470
+ "name": "datePaid",
471
+ "type": "DateTime?",
472
+ "label": "DatePaid",
473
+ "description": "The date the invoice was paid."
474
+ },
475
+ {
476
+ "name": "issuedById",
477
+ "type": "TeamMember",
478
+ "label": "IssuedById",
479
+ "description": "The user that issued the invoice."
480
+ },
481
+ {
482
+ "name": "currencyId",
483
+ "type": "Currency",
484
+ "label": "CurrencyId",
485
+ "description": "The currency of the invoice."
486
+ },
487
+ {
488
+ "name": "amountInvoicedNetFX",
489
+ "type": "Float",
490
+ "label": "AmountInvoicedNetFX",
491
+ "description": "The net amount of the invoice in the agreed local currency."
492
+ },
493
+ {
494
+ "name": "amountInvoicedGrossFX",
495
+ "type": "Float",
496
+ "label": "AmountInvoicedGrossFX",
497
+ "description": "The gross amount of the invoice in the agreed local currency."
498
+ },
499
+ {
500
+ "name": "amountInvoicedNetEUR",
501
+ "type": "Float",
502
+ "label": "AmountInvoicedNetEUR",
503
+ "description": "The net amount of the invoice in EUR."
504
+ },
505
+ {
506
+ "name": "amountInvoicedGrossEUR",
507
+ "type": "Float",
508
+ "label": "AmountInvoicedGrossEUR",
509
+ "description": "The gross amount of the invoice in EUR."
510
+ },
511
+ {
512
+ "name": "amountReceivedFX",
513
+ "type": "Float",
514
+ "label": "AmountReceivedFX",
515
+ "description": "The amount received for the invoice in the agreed local currency."
516
+ },
517
+ {
518
+ "name": "paymentProbability",
519
+ "type": "Float",
520
+ "label": "PaymentProbability",
521
+ "description": "The probability of payment."
522
+ },
523
+ {
524
+ "name": "deliveryPeriodStart",
525
+ "type": "DateTime?",
526
+ "label": "DeliveryPeriodStart"
527
+ },
528
+ {
529
+ "name": "deliveryPeriodEnd",
530
+ "type": "DateTime?",
531
+ "label": "DeliveryPeriodEnd"
532
+ },
533
+ {
534
+ "name": "clientReference",
535
+ "type": "String?",
536
+ "label": "ClientReference",
537
+ "description": "The client charge code/reference/PO number."
538
+ },
539
+ {
540
+ "name": "shareOfPhaseCompletion",
541
+ "type": "Float?",
542
+ "label": "ShareOfPhaseCompletion",
543
+ "description": "Invoice represents which share of the project phase completion."
544
+ }
545
+ ]
546
+ },
547
+ {
548
+ "name": "Client",
549
+ "description": "A client/company of PostXL.",
550
+ "fields": [
551
+ {
552
+ "name": "name",
553
+ "type": "String",
554
+ "label": "Name",
555
+ "description": "The name of the client."
556
+ },
557
+ {
558
+ "name": "alias",
559
+ "type": "String?",
560
+ "label": "Alias",
561
+ "description": "Comma-separated list of client aliases."
562
+ },
563
+ {
564
+ "name": "intermediaryClientId",
565
+ "type": "Client?",
566
+ "prismaRelationFieldName": "ClientIntermediaryClient",
567
+ "label": "IntermediaryClientId",
568
+ "description": "In case this client is to be invoiced via an intermediary client, this field contains the intermediary client's ID."
569
+ }
570
+ ],
571
+ "seed": [
572
+ {
573
+ "id": "Client_McKinsey",
574
+ "name": "McKinsey",
575
+ "alias": "McKinsey & Company",
576
+ "intermediaryClientId": null
577
+ },
578
+ {
579
+ "id": "Client_Prohyp",
580
+ "name": "Prohyp GmbH",
581
+ "alias": "Interhyp",
582
+ "intermediaryClientId": null
583
+ },
584
+ {
585
+ "id": "Client_Inizio",
586
+ "name": "Inizio Group Limited",
587
+ "alias": "Evoke",
588
+ "intermediaryClientId": null
589
+ },
590
+ {
591
+ "id": "Client_Maple",
592
+ "name": "Maple Health Group",
593
+ "alias": "Maple",
594
+ "intermediaryClientId": null
595
+ },
596
+ {
597
+ "id": "Client_ES",
598
+ "name": "Exact Sciences",
599
+ "alias": "ES",
600
+ "intermediaryClientId": "Client_Maple"
601
+ },
602
+ {
603
+ "id": "Client_Ethaos",
604
+ "name": "Ethaos",
605
+ "alias": null,
606
+ "intermediaryClientId": null
607
+ },
608
+ {
609
+ "id": "Client_PostXL",
610
+ "name": "PostXL",
611
+ "alias": "PXL",
612
+ "intermediaryClientId": null
613
+ },
614
+ {
615
+ "id": "Client_USP",
616
+ "name": "USP",
617
+ "alias": "US Pharmacopeia, United States Pharmacopeia",
618
+ "intermediaryClientId": null
619
+ },
620
+ {
621
+ "id": "Client_d2iDD",
622
+ "name": "data2impact Dresden",
623
+ "alias": "d2i DD",
624
+ "intermediaryClientId": null
625
+ },
626
+ {
627
+ "id": "Client_d2iDK",
628
+ "name": "data2impact DK",
629
+ "alias": "d2i DK",
630
+ "intermediaryClientId": null
631
+ }
632
+ ]
633
+ },
634
+ {
635
+ "name": "ClientOffice",
636
+ "description": "",
637
+ "fields": [
638
+ {
639
+ "name": "clientId",
640
+ "type": "Client",
641
+ "label": "ClientId"
642
+ },
643
+ {
644
+ "name": "name",
645
+ "type": "String",
646
+ "label": "Name",
647
+ "description": "The name of the office."
648
+ },
649
+ {
650
+ "name": "address",
651
+ "type": "String",
652
+ "label": "Address",
653
+ "description": "The address of the office."
654
+ },
655
+ {
656
+ "name": "city",
657
+ "type": "String",
658
+ "label": "City",
659
+ "description": "The city of the office."
660
+ },
661
+ {
662
+ "name": "postalCode",
663
+ "type": "String",
664
+ "label": "PostalCode",
665
+ "description": "The postal code of the office."
666
+ },
667
+ {
668
+ "name": "countryId",
669
+ "type": "Country",
670
+ "label": "CountryId",
671
+ "description": "The country of the office."
672
+ },
673
+ {
674
+ "name": "vatId",
675
+ "type": "String?",
676
+ "label": "VatId",
677
+ "description": "The VAT ID of the office."
678
+ }
679
+ ]
680
+ },
681
+ {
682
+ "name": "Country",
683
+ "description": "A lookup table, demonstrating the use of a @@IsDefault. See description of `isDefault` field for details.",
684
+ "fields": [
685
+ {
686
+ "name": "name",
687
+ "type": "String",
688
+ "label": "Name",
689
+ "description": "The name of the country."
690
+ },
691
+ {
692
+ "name": "countryCode",
693
+ "type": "String",
694
+ "label": "CountryCode",
695
+ "description": "The country's ISO 3166-1 alpha-2 code."
696
+ }
697
+ ],
698
+ "seed": [
699
+ {
700
+ "id": "US",
701
+ "name": "US",
702
+ "countryCode": "US"
703
+ },
704
+ {
705
+ "id": "DE",
706
+ "name": "Germany",
707
+ "countryCode": "DE"
708
+ },
709
+ {
710
+ "id": "DK",
711
+ "name": "Denmark",
712
+ "countryCode": "DK"
713
+ },
714
+ {
715
+ "id": "GB",
716
+ "name": "United Kingdom",
717
+ "countryCode": "GB"
718
+ }
719
+ ]
720
+ },
721
+ {
722
+ "name": "Contact",
723
+ "description": "A contact of a (prospective) client.",
724
+ "fields": [
725
+ {
726
+ "name": "name",
727
+ "type": "String",
728
+ "label": "Name",
729
+ "description": "The name of the contact."
730
+ },
731
+ {
732
+ "name": "clientId",
733
+ "type": "Client?",
734
+ "label": "ClientId",
735
+ "description": "The client the contact is associated with."
736
+ },
737
+ {
738
+ "name": "clientOfficeId",
739
+ "type": "ClientOffice?",
740
+ "label": "ClientOfficeId",
741
+ "description": "The office the contact is associated with."
742
+ },
743
+ {
744
+ "name": "role",
745
+ "type": "String",
746
+ "label": "Role"
747
+ },
748
+ {
749
+ "name": "email",
750
+ "type": "String",
751
+ "label": "Email",
752
+ "description": "The email of the contact."
753
+ },
754
+ {
755
+ "name": "phone",
756
+ "type": "String",
757
+ "label": "Phone",
758
+ "description": "The phone number of the contact."
759
+ },
760
+ {
761
+ "name": "personalAddress",
762
+ "type": "String?",
763
+ "label": "PersonalAddress",
764
+ "description": "The personal address of the contact."
765
+ },
766
+ {
767
+ "name": "linkedInProfile",
768
+ "type": "String?",
769
+ "label": "LinkedInProfile",
770
+ "description": "The LinkedIn profile of the contact."
771
+ },
772
+ {
773
+ "name": "mainTeamContactId",
774
+ "type": "TeamMember",
775
+ "label": "Main Team contact",
776
+ "description": "Who is the main 'owner' of the contact."
777
+ },
778
+ {
779
+ "name": "remarks",
780
+ "type": "String?",
781
+ "label": "Remarks",
782
+ "description": "Any remarks about the contact."
783
+ }
784
+ ]
785
+ },
786
+ {
787
+ "name": "TeamMember",
788
+ "description": "A team member.",
789
+ "standardFields": ["id", "createdAt", "updatedAt"],
790
+ "fields": [
791
+ {
792
+ "name": "firstName",
793
+ "type": "String",
794
+ "label": "FirstName"
795
+ },
796
+ {
797
+ "name": "lastName",
798
+ "type": "String",
799
+ "label": "LastName"
800
+ },
801
+ {
802
+ "name": "email",
803
+ "type": "String",
804
+ "label": "Email"
805
+ },
806
+ {
807
+ "name": "phone",
808
+ "type": "String?",
809
+ "label": "Phone"
810
+ },
811
+ {
812
+ "name": "role",
813
+ "type": "String",
814
+ "label": "Role"
815
+ },
816
+ {
817
+ "name": "isActive",
818
+ "type": "Boolean",
819
+ "label": "IsActive"
820
+ }
821
+ ],
822
+ "seed": [
823
+ {
824
+ "id": "peter",
825
+ "firstName": "Peter",
826
+ "lastName": "Albert",
827
+ "email": "peter.albert@postxl.com",
828
+ "phone": "",
829
+ "role": "CEO",
830
+ "isActive": true
831
+ },
832
+ {
833
+ "id": "johan",
834
+ "firstName": "Johan",
835
+ "lastName": "Kjeldgaard-Pedersen",
836
+ "email": "johan.kjeldgaard-pedersen@postxl.com",
837
+ "phone": "",
838
+ "role": "CMO",
839
+ "isActive": true
840
+ },
841
+ {
842
+ "id": "chris",
843
+ "firstName": "Chris",
844
+ "lastName": "Herbst",
845
+ "email": "chris.herbst@postxl.com",
846
+ "phone": "",
847
+ "role": "Senior Software Engineer",
848
+ "isActive": true
849
+ }
850
+ ]
851
+ }
852
+ ],
853
+ "enums": [
854
+ {
855
+ "name": "DemoProjectStatus",
856
+ "description": "Status a DemoProject can have.",
857
+ "members": [
858
+ { "value": "Idea", "description": "Idea exists but is not implemented yet" },
859
+ { "value": "WorkInProgress", "description": "The demo project is currently being worked on" },
860
+ { "value": "Completed", "description": "The demo project is completed and can be used for presentations" },
861
+ { "value": "Cancelled", "description": "The demo project was cancelled" }
862
+ ]
863
+ },
864
+ {
865
+ "name": "ProjectPhaseStatus",
866
+ "description": "Status a ProjectPhase can have.",
867
+ "members": [
868
+ { "value": "TBD", "description": "The status of the project phase is to be determined" },
869
+ { "value": "InNegotiation", "description": "The project phase is in negotiation" },
870
+ { "value": "WorkInProgress", "description": "The project phase is currently being worked on" },
871
+ { "value": "Agreed", "description": "The project phase is agreed" },
872
+ { "value": "OngoingMaintenance", "description": "The project phase is in ongoing maintenance" },
873
+ { "value": "Invoiced", "description": "The project phase is invoiced" },
874
+ { "value": "ToBeInvoicedLater", "description": "The project phase is to be invoiced later" },
875
+ { "value": "Paid", "description": "The project phase is paid" }
876
+ ]
877
+ }
878
+ ]
879
+ }