@snokam/mcp-api 0.5.1

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.
@@ -0,0 +1,1523 @@
1
+ {
2
+ "openapi": "3.0.1",
3
+ "info": {
4
+ "title": "Calculators Function",
5
+ "description": "Calculators for Snøkam, e.g to calculate salary",
6
+ "version": "v1.0.0"
7
+ },
8
+ "servers": [
9
+ {
10
+ "url": "https://calculators.api.test.snokam.no"
11
+ }
12
+ ],
13
+ "paths": {
14
+ "/v1.0/salary": {
15
+ "get": {
16
+ "tags": [
17
+ "Salary"
18
+ ],
19
+ "summary": "Calculates salary",
20
+ "description": "Calculates salary based on time transaction summaries.",
21
+ "operationId": "CalculateSalary",
22
+ "parameters": [
23
+ {
24
+ "name": "Daily",
25
+ "in": "query",
26
+ "description": "Whether the salary is daily",
27
+ "schema": {
28
+ "type": "boolean"
29
+ },
30
+ "x-ms-summary": "Whether the salary is daily"
31
+ }
32
+ ],
33
+ "requestBody": {
34
+ "description": "List of time transaction summaries",
35
+ "content": {
36
+ "application/json": {
37
+ "schema": {
38
+ "type": "array",
39
+ "items": {
40
+ "$ref": "#/components/schemas/timeTransactionSummary"
41
+ }
42
+ }
43
+ }
44
+ },
45
+ "required": true
46
+ },
47
+ "responses": {
48
+ "200": {
49
+ "description": "Salary calculated successfully",
50
+ "content": {
51
+ "application/json": {
52
+ "schema": {
53
+ "$ref": "#/components/schemas/salarySummary"
54
+ }
55
+ }
56
+ },
57
+ "x-ms-summary": "Success"
58
+ }
59
+ }
60
+ }
61
+ },
62
+ "/v1.0/salaries": {
63
+ "get": {
64
+ "tags": [
65
+ "Salaries"
66
+ ],
67
+ "summary": "Calculates multiple salaries",
68
+ "description": "Calculates salaries for multiple employees based on time transaction summaries.",
69
+ "operationId": "CalculateSalaries",
70
+ "parameters": [
71
+ {
72
+ "name": "Daily",
73
+ "in": "query",
74
+ "description": "Whether the salary is daily",
75
+ "schema": {
76
+ "type": "boolean"
77
+ },
78
+ "x-ms-summary": "Whether the salary is daily"
79
+ }
80
+ ],
81
+ "requestBody": {
82
+ "description": "List of time transaction employee summaries",
83
+ "content": {
84
+ "application/json": {
85
+ "schema": {
86
+ "type": "array",
87
+ "items": {
88
+ "$ref": "#/components/schemas/employeeTimeTransactionSummary"
89
+ }
90
+ }
91
+ }
92
+ },
93
+ "required": true
94
+ },
95
+ "responses": {
96
+ "200": {
97
+ "description": "Salaries calculated successfully",
98
+ "content": {
99
+ "application/json": {
100
+ "schema": {
101
+ "type": "array",
102
+ "items": {
103
+ "$ref": "#/components/schemas/employeeSalary"
104
+ }
105
+ }
106
+ }
107
+ },
108
+ "x-ms-summary": "Success"
109
+ }
110
+ }
111
+ }
112
+ },
113
+ "/v1.0/salary/provision": {
114
+ "get": {
115
+ "tags": [
116
+ "Provision Salary"
117
+ ],
118
+ "summary": "Calculates provision salary",
119
+ "description": "Calculates provision salary based on provided parameters.",
120
+ "operationId": "CalculateProvisionSalary",
121
+ "parameters": [
122
+ {
123
+ "name": "Monthly",
124
+ "in": "query",
125
+ "description": "Whether the salary is monthly",
126
+ "required": true,
127
+ "schema": {
128
+ "type": "boolean"
129
+ },
130
+ "x-ms-summary": "Whether the salary is monthly"
131
+ },
132
+ {
133
+ "name": "BillableHours",
134
+ "in": "query",
135
+ "description": "Number of billable hours",
136
+ "required": true,
137
+ "schema": {
138
+ "type": "number",
139
+ "format": "float"
140
+ },
141
+ "x-ms-summary": "Number of billable hours"
142
+ },
143
+ {
144
+ "name": "HourlyRate",
145
+ "in": "query",
146
+ "description": "Hourly rate",
147
+ "required": true,
148
+ "schema": {
149
+ "type": "number",
150
+ "format": "float"
151
+ },
152
+ "x-ms-summary": "Hourly rate"
153
+ },
154
+ {
155
+ "name": "Commission",
156
+ "in": "query",
157
+ "description": "Commission rate",
158
+ "required": true,
159
+ "schema": {
160
+ "type": "number",
161
+ "format": "float"
162
+ },
163
+ "x-ms-summary": "Commission rate"
164
+ }
165
+ ],
166
+ "responses": {
167
+ "200": {
168
+ "description": "Provision salary calculated successfully",
169
+ "content": {
170
+ "application/json": {
171
+ "schema": {
172
+ "$ref": "#/components/schemas/salaryLine"
173
+ }
174
+ }
175
+ },
176
+ "x-ms-summary": "Success"
177
+ },
178
+ "400": {
179
+ "description": "Invalid input parameters",
180
+ "content": {
181
+ "application/json": {
182
+ "schema": {
183
+ "type": "array",
184
+ "items": {
185
+ "$ref": "#/components/schemas/validationFailure"
186
+ }
187
+ }
188
+ }
189
+ },
190
+ "x-ms-summary": "Bad Request"
191
+ }
192
+ }
193
+ }
194
+ },
195
+ "/v1.0/salaries/estimate": {
196
+ "post": {
197
+ "tags": [
198
+ "Salaries"
199
+ ],
200
+ "summary": "Estimates multiple salaries",
201
+ "description": "Estimates salaries for multiple employees based on provided data.",
202
+ "operationId": "EstimateSalaries",
203
+ "requestBody": {
204
+ "description": "List of salary estimates",
205
+ "content": {
206
+ "application/json": {
207
+ "schema": {
208
+ "type": "array",
209
+ "items": {
210
+ "$ref": "#/components/schemas/salaryEstimateInput"
211
+ }
212
+ }
213
+ }
214
+ },
215
+ "required": true
216
+ },
217
+ "responses": {
218
+ "200": {
219
+ "description": "Salaries estimated successfully",
220
+ "content": {
221
+ "application/json": {
222
+ "schema": {
223
+ "type": "array",
224
+ "items": {
225
+ "$ref": "#/components/schemas/salaryEstimateWithEmployee"
226
+ }
227
+ }
228
+ }
229
+ },
230
+ "x-ms-summary": "Success"
231
+ }
232
+ }
233
+ }
234
+ },
235
+ "/v1.0/salary/estimate": {
236
+ "get": {
237
+ "tags": [
238
+ "Salary"
239
+ ],
240
+ "summary": "Estimates salary",
241
+ "description": "Estimates salary based on provided parameters.",
242
+ "operationId": "EstimateSalary",
243
+ "parameters": [
244
+ {
245
+ "name": "Monthly",
246
+ "in": "query",
247
+ "description": "Whether the salary is monthly",
248
+ "schema": {
249
+ "type": "boolean"
250
+ },
251
+ "x-ms-summary": "Whether the salary is monthly"
252
+ },
253
+ {
254
+ "name": "BillableHours",
255
+ "in": "query",
256
+ "description": "Number of billable hours",
257
+ "required": true,
258
+ "schema": {
259
+ "type": "number",
260
+ "format": "float"
261
+ },
262
+ "x-ms-summary": "Number of billable hours"
263
+ },
264
+ {
265
+ "name": "HourlyRate",
266
+ "in": "query",
267
+ "description": "Hourly rate",
268
+ "required": true,
269
+ "schema": {
270
+ "type": "number",
271
+ "format": "float"
272
+ },
273
+ "x-ms-summary": "Hourly rate"
274
+ }
275
+ ],
276
+ "responses": {
277
+ "200": {
278
+ "description": "Salary estimated successfully",
279
+ "content": {
280
+ "application/json": {
281
+ "schema": {
282
+ "type": "array",
283
+ "items": {
284
+ "$ref": "#/components/schemas/salaryEstimate"
285
+ }
286
+ }
287
+ }
288
+ },
289
+ "x-ms-summary": "Success"
290
+ },
291
+ "400": {
292
+ "description": "Invalid input parameters",
293
+ "content": {
294
+ "application/json": {
295
+ "schema": {
296
+ "type": "array",
297
+ "items": {
298
+ "$ref": "#/components/schemas/validationFailure"
299
+ }
300
+ }
301
+ }
302
+ },
303
+ "x-ms-summary": "Bad Request"
304
+ }
305
+ }
306
+ }
307
+ },
308
+ "/v1.0/stock/shareholders": {
309
+ "get": {
310
+ "tags": [
311
+ "Stock"
312
+ ],
313
+ "summary": "Get all shareholders",
314
+ "description": "Returns a list of all shareholders including their details and employee links.",
315
+ "operationId": "GetShareholders",
316
+ "responses": {
317
+ "200": {
318
+ "description": "List of shareholders retrieved successfully",
319
+ "content": {
320
+ "application/json": {
321
+ "schema": {
322
+ "type": "array",
323
+ "items": {
324
+ "$ref": "#/components/schemas/shareholder"
325
+ }
326
+ }
327
+ }
328
+ },
329
+ "x-ms-summary": "Success"
330
+ }
331
+ }
332
+ }
333
+ },
334
+ "/v1.0/stock/transactions": {
335
+ "get": {
336
+ "tags": [
337
+ "Stock"
338
+ ],
339
+ "summary": "Get all stock transactions",
340
+ "description": "Returns a list of all stock transactions ordered by date.",
341
+ "operationId": "GetTransactions",
342
+ "responses": {
343
+ "200": {
344
+ "description": "List of transactions retrieved successfully",
345
+ "content": {
346
+ "application/json": {
347
+ "schema": {
348
+ "type": "array",
349
+ "items": {
350
+ "$ref": "#/components/schemas/stockTransaction"
351
+ }
352
+ }
353
+ }
354
+ },
355
+ "x-ms-summary": "Success"
356
+ }
357
+ }
358
+ }
359
+ },
360
+ "/v1.0/stock/ownership": {
361
+ "get": {
362
+ "tags": [
363
+ "Stock"
364
+ ],
365
+ "summary": "Get current ownership distribution",
366
+ "description": "Returns the current ownership distribution calculated from all transactions.",
367
+ "operationId": "GetCurrentOwnership",
368
+ "responses": {
369
+ "200": {
370
+ "description": "Current ownership distribution retrieved successfully",
371
+ "content": {
372
+ "application/json": {
373
+ "schema": {
374
+ "type": "array",
375
+ "items": {
376
+ "$ref": "#/components/schemas/shareholderOwnership"
377
+ }
378
+ }
379
+ }
380
+ },
381
+ "x-ms-summary": "Success"
382
+ }
383
+ }
384
+ }
385
+ },
386
+ "/v1.0/stock/ownership/history": {
387
+ "get": {
388
+ "tags": [
389
+ "Stock"
390
+ ],
391
+ "summary": "Get ownership history over time",
392
+ "description": "Returns snapshots of ownership distribution at each transaction date.",
393
+ "operationId": "GetOwnershipHistory",
394
+ "responses": {
395
+ "200": {
396
+ "description": "Ownership history retrieved successfully",
397
+ "content": {
398
+ "application/json": {
399
+ "schema": {
400
+ "type": "array",
401
+ "items": {
402
+ "$ref": "#/components/schemas/ownershipSnapshot"
403
+ }
404
+ }
405
+ }
406
+ },
407
+ "x-ms-summary": "Success"
408
+ }
409
+ }
410
+ }
411
+ },
412
+ "/v1.0/stock/overview": {
413
+ "get": {
414
+ "tags": [
415
+ "Stock"
416
+ ],
417
+ "summary": "Get complete stock overview",
418
+ "description": "Returns a complete overview including current ownership, recent transactions, and history.",
419
+ "operationId": "GetStockOverview",
420
+ "responses": {
421
+ "200": {
422
+ "description": "Stock overview retrieved successfully",
423
+ "content": {
424
+ "application/json": {
425
+ "schema": {
426
+ "$ref": "#/components/schemas/stockOverview"
427
+ }
428
+ }
429
+ },
430
+ "x-ms-summary": "Success"
431
+ }
432
+ }
433
+ }
434
+ },
435
+ "/v1.0/stock/me": {
436
+ "get": {
437
+ "tags": [
438
+ "Stock"
439
+ ],
440
+ "summary": "Get my stock information",
441
+ "description": "Returns the current user's stock information including ownership, transactions, and value.",
442
+ "operationId": "GetMyStockInfo",
443
+ "responses": {
444
+ "200": {
445
+ "description": "Employee stock info retrieved successfully",
446
+ "content": {
447
+ "application/json": {
448
+ "schema": {
449
+ "$ref": "#/components/schemas/employeeStockInfo"
450
+ }
451
+ }
452
+ },
453
+ "x-ms-summary": "Success"
454
+ },
455
+ "401": {
456
+ "description": "Unauthorized access",
457
+ "x-ms-summary": "Unauthorized"
458
+ },
459
+ "404": {
460
+ "description": "No shareholding found for the current user",
461
+ "x-ms-summary": "Not Found"
462
+ }
463
+ },
464
+ "security": [
465
+ {
466
+ "Implicit": [
467
+ "api://1e28e887-f8e4-452b-b091-3ab5bafdd6ba/user_impersonation"
468
+ ]
469
+ }
470
+ ]
471
+ }
472
+ },
473
+ "/v1.0/stock/me/ownership": {
474
+ "get": {
475
+ "tags": [
476
+ "Stock"
477
+ ],
478
+ "summary": "Get my ownership percentage",
479
+ "description": "Returns the current user's ownership percentage for use in valuation calculations.",
480
+ "operationId": "GetMyOwnership",
481
+ "responses": {
482
+ "200": {
483
+ "description": "Employee ownership retrieved successfully",
484
+ "content": {
485
+ "application/json": {
486
+ "schema": {
487
+ "$ref": "#/components/schemas/shareholderOwnership"
488
+ }
489
+ }
490
+ },
491
+ "x-ms-summary": "Success"
492
+ },
493
+ "401": {
494
+ "description": "Unauthorized access",
495
+ "x-ms-summary": "Unauthorized"
496
+ },
497
+ "404": {
498
+ "description": "No shareholding found for the current user",
499
+ "x-ms-summary": "Not Found"
500
+ }
501
+ },
502
+ "security": [
503
+ {
504
+ "Implicit": [
505
+ "api://1e28e887-f8e4-452b-b091-3ab5bafdd6ba/user_impersonation"
506
+ ]
507
+ }
508
+ ]
509
+ }
510
+ },
511
+ "/v1.0/valuation/calculate": {
512
+ "get": {
513
+ "tags": [
514
+ "Valuation"
515
+ ],
516
+ "summary": "Calculates ownership valuation",
517
+ "description": "Calculates ownership valuation based on provided percentage.",
518
+ "operationId": "CalculateOwnershipValuation",
519
+ "parameters": [
520
+ {
521
+ "name": "Percent",
522
+ "in": "query",
523
+ "description": "Percentage of ownership",
524
+ "required": true,
525
+ "schema": {
526
+ "type": "number",
527
+ "format": "float"
528
+ },
529
+ "x-ms-summary": "Percentage of ownership"
530
+ }
531
+ ],
532
+ "responses": {
533
+ "200": {
534
+ "description": "Ownership valuation calculated successfully",
535
+ "content": {
536
+ "application/json": {
537
+ "schema": {
538
+ "$ref": "#/components/schemas/valuation"
539
+ }
540
+ }
541
+ },
542
+ "x-ms-summary": "Success"
543
+ },
544
+ "400": {
545
+ "description": "Invalid input parameters",
546
+ "content": {
547
+ "application/json": {
548
+ "schema": {
549
+ "type": "array",
550
+ "items": {
551
+ "$ref": "#/components/schemas/validationFailure"
552
+ }
553
+ }
554
+ }
555
+ },
556
+ "x-ms-summary": "Bad Request"
557
+ }
558
+ }
559
+ }
560
+ },
561
+ "/v1.0/valuation": {
562
+ "get": {
563
+ "tags": [
564
+ "Valuation"
565
+ ],
566
+ "summary": "Gets ownership valuation",
567
+ "description": "Gets ownership valuation.",
568
+ "operationId": "OwnershipValuation",
569
+ "responses": {
570
+ "200": {
571
+ "description": "Ownership valuation retrieved successfully",
572
+ "content": {
573
+ "application/json": {
574
+ "schema": {
575
+ "type": "array",
576
+ "items": {
577
+ "$ref": "#/components/schemas/valuation"
578
+ }
579
+ }
580
+ }
581
+ },
582
+ "x-ms-summary": "Success"
583
+ },
584
+ "401": {
585
+ "description": "Unauthorized access",
586
+ "x-ms-summary": "Unauthorized"
587
+ }
588
+ },
589
+ "security": [
590
+ {
591
+ "Implicit": [
592
+ "api://1e28e887-f8e4-452b-b091-3ab5bafdd6ba/user_impersonation"
593
+ ]
594
+ }
595
+ ]
596
+ }
597
+ },
598
+ "/v1.0/valuation/me": {
599
+ "get": {
600
+ "tags": [
601
+ "Valuation"
602
+ ],
603
+ "summary": "Gets my ownership valuation",
604
+ "description": "Gets ownership valuation of the current user.",
605
+ "operationId": "MyOwnershipValuation",
606
+ "responses": {
607
+ "200": {
608
+ "description": "Ownership valuation retrieved successfully",
609
+ "content": {
610
+ "application/json": {
611
+ "schema": {
612
+ "$ref": "#/components/schemas/valuation"
613
+ }
614
+ }
615
+ },
616
+ "x-ms-summary": "Success"
617
+ },
618
+ "401": {
619
+ "description": "Unauthorized access",
620
+ "x-ms-summary": "Unauthorized"
621
+ }
622
+ },
623
+ "security": [
624
+ {
625
+ "Implicit": [
626
+ "api://1e28e887-f8e4-452b-b091-3ab5bafdd6ba/user_impersonation"
627
+ ]
628
+ }
629
+ ]
630
+ }
631
+ },
632
+ "/v1.0/wagerates": {
633
+ "get": {
634
+ "tags": [
635
+ "Wage Rates"
636
+ ],
637
+ "summary": "Gets wage rates",
638
+ "description": "Retrieves wage rates for a specified date.",
639
+ "operationId": "WageRates",
640
+ "parameters": [
641
+ {
642
+ "name": "date",
643
+ "in": "query",
644
+ "description": "The date for which to retrieve wage rates",
645
+ "schema": {
646
+ "type": "string",
647
+ "format": "date-time"
648
+ },
649
+ "x-ms-summary": "The date for which to retrieve wage rates"
650
+ }
651
+ ],
652
+ "responses": {
653
+ "200": {
654
+ "description": "Wage rates retrieved successfully",
655
+ "content": {
656
+ "application/json": {
657
+ "schema": {
658
+ "type": "array",
659
+ "items": {
660
+ "$ref": "#/components/schemas/wageRate"
661
+ }
662
+ }
663
+ }
664
+ },
665
+ "x-ms-summary": "Success"
666
+ }
667
+ }
668
+ }
669
+ }
670
+ },
671
+ "components": {
672
+ "schemas": {
673
+ "employeeSalary": {
674
+ "required": [
675
+ "name",
676
+ "email",
677
+ "salaryLines",
678
+ "salary"
679
+ ],
680
+ "type": "object",
681
+ "properties": {
682
+ "name": {
683
+ "minLength": 1,
684
+ "type": "string"
685
+ },
686
+ "email": {
687
+ "minLength": 1,
688
+ "type": "string"
689
+ },
690
+ "salaryLines": {
691
+ "type": "array",
692
+ "items": {
693
+ "$ref": "#/components/schemas/iSalary"
694
+ }
695
+ },
696
+ "salary": {
697
+ "type": "integer",
698
+ "format": "int32"
699
+ }
700
+ }
701
+ },
702
+ "employeeStockInfo": {
703
+ "required": [
704
+ "employeeId",
705
+ "employeeName",
706
+ "employeeEmail",
707
+ "shareholderId",
708
+ "shareholderName",
709
+ "shares",
710
+ "ownershipPercentage",
711
+ "value",
712
+ "transactionHistory",
713
+ "ownershipHistory"
714
+ ],
715
+ "type": "object",
716
+ "properties": {
717
+ "employeeId": {
718
+ "minLength": 1,
719
+ "type": "string"
720
+ },
721
+ "employeeName": {
722
+ "minLength": 1,
723
+ "type": "string"
724
+ },
725
+ "employeeEmail": {
726
+ "minLength": 1,
727
+ "type": "string"
728
+ },
729
+ "employeeImageUrl": {
730
+ "type": "string"
731
+ },
732
+ "shareholderId": {
733
+ "minLength": 1,
734
+ "type": "string"
735
+ },
736
+ "shareholderName": {
737
+ "minLength": 1,
738
+ "type": "string"
739
+ },
740
+ "shares": {
741
+ "type": "integer",
742
+ "format": "int32"
743
+ },
744
+ "ownershipPercentage": {
745
+ "type": "number",
746
+ "format": "double"
747
+ },
748
+ "value": {
749
+ "type": "number",
750
+ "format": "double"
751
+ },
752
+ "valueAtStart": {
753
+ "type": "number",
754
+ "format": "double",
755
+ "nullable": true
756
+ },
757
+ "valueChange": {
758
+ "type": "number",
759
+ "format": "double",
760
+ "nullable": true
761
+ },
762
+ "valueChangePercentage": {
763
+ "type": "number",
764
+ "format": "double",
765
+ "nullable": true
766
+ },
767
+ "transactionHistory": {
768
+ "type": "array",
769
+ "items": {
770
+ "$ref": "#/components/schemas/stockTransaction"
771
+ }
772
+ },
773
+ "ownershipHistory": {
774
+ "type": "array",
775
+ "items": {
776
+ "$ref": "#/components/schemas/ownershipSnapshot"
777
+ }
778
+ }
779
+ }
780
+ },
781
+ "employeeTimeTransactionSummary": {
782
+ "required": [
783
+ "name",
784
+ "email",
785
+ "timeTransactions"
786
+ ],
787
+ "type": "object",
788
+ "properties": {
789
+ "name": {
790
+ "minLength": 1,
791
+ "type": "string"
792
+ },
793
+ "email": {
794
+ "minLength": 1,
795
+ "type": "string"
796
+ },
797
+ "timeTransactions": {
798
+ "type": "array",
799
+ "items": {
800
+ "$ref": "#/components/schemas/timeTransactionSummary"
801
+ }
802
+ }
803
+ }
804
+ },
805
+ "employerTax": {
806
+ "type": "object",
807
+ "properties": {
808
+ "underLimit": {
809
+ "type": "integer",
810
+ "format": "int32"
811
+ },
812
+ "aboveLimit": {
813
+ "type": "integer",
814
+ "format": "int32"
815
+ },
816
+ "pension": {
817
+ "type": "integer",
818
+ "format": "int32"
819
+ },
820
+ "holidayPay": {
821
+ "type": "integer",
822
+ "format": "int32",
823
+ "nullable": true
824
+ },
825
+ "total": {
826
+ "type": "integer",
827
+ "format": "int32"
828
+ }
829
+ }
830
+ },
831
+ "iSalary": {
832
+ "type": "object",
833
+ "properties": {
834
+ "salary": {
835
+ "type": "integer",
836
+ "format": "int32"
837
+ }
838
+ }
839
+ },
840
+ "ownershipSnapshot": {
841
+ "required": [
842
+ "date",
843
+ "totalShares",
844
+ "shareholders"
845
+ ],
846
+ "type": "object",
847
+ "properties": {
848
+ "date": {
849
+ "minLength": 1,
850
+ "type": "string",
851
+ "format": "date-time"
852
+ },
853
+ "totalShares": {
854
+ "type": "integer",
855
+ "format": "int32"
856
+ },
857
+ "shareholders": {
858
+ "type": "array",
859
+ "items": {
860
+ "$ref": "#/components/schemas/shareholderOwnership"
861
+ }
862
+ },
863
+ "companyValuation": {
864
+ "type": "number",
865
+ "format": "double",
866
+ "nullable": true
867
+ }
868
+ }
869
+ },
870
+ "pension": {
871
+ "type": "object",
872
+ "properties": {
873
+ "under12G": {
874
+ "type": "integer",
875
+ "format": "int32"
876
+ },
877
+ "above7G": {
878
+ "type": "integer",
879
+ "format": "int32"
880
+ },
881
+ "total": {
882
+ "type": "integer",
883
+ "format": "int32"
884
+ }
885
+ }
886
+ },
887
+ "salaryEstimate": {
888
+ "required": [
889
+ "title",
890
+ "hours",
891
+ "commission",
892
+ "hourlyRate",
893
+ "salary",
894
+ "pension",
895
+ "employerTax"
896
+ ],
897
+ "type": "object",
898
+ "properties": {
899
+ "title": {
900
+ "minLength": 1,
901
+ "type": "string"
902
+ },
903
+ "hours": {
904
+ "type": "number",
905
+ "format": "float"
906
+ },
907
+ "commission": {
908
+ "type": "number",
909
+ "format": "float"
910
+ },
911
+ "hourlyRate": {
912
+ "type": "integer",
913
+ "format": "int32"
914
+ },
915
+ "salary": {
916
+ "type": "integer",
917
+ "format": "int32"
918
+ },
919
+ "holidayPay": {
920
+ "type": "integer",
921
+ "format": "int32",
922
+ "nullable": true
923
+ },
924
+ "pension": {
925
+ "$ref": "#/components/schemas/pension"
926
+ },
927
+ "employerTax": {
928
+ "$ref": "#/components/schemas/employerTax"
929
+ }
930
+ }
931
+ },
932
+ "salaryEstimateInput": {
933
+ "required": [
934
+ "name",
935
+ "email",
936
+ "title",
937
+ "hours",
938
+ "commission",
939
+ "hourlyRate"
940
+ ],
941
+ "type": "object",
942
+ "properties": {
943
+ "name": {
944
+ "minLength": 1,
945
+ "type": "string"
946
+ },
947
+ "email": {
948
+ "minLength": 1,
949
+ "type": "string"
950
+ },
951
+ "title": {
952
+ "minLength": 1,
953
+ "type": "string"
954
+ },
955
+ "hours": {
956
+ "type": "number",
957
+ "format": "float"
958
+ },
959
+ "commission": {
960
+ "type": "number",
961
+ "format": "float"
962
+ },
963
+ "hourlyRate": {
964
+ "type": "integer",
965
+ "format": "int32"
966
+ }
967
+ }
968
+ },
969
+ "salaryEstimateWithEmployee": {
970
+ "required": [
971
+ "name",
972
+ "email",
973
+ "title",
974
+ "hours",
975
+ "commission",
976
+ "hourlyRate",
977
+ "salary",
978
+ "pension",
979
+ "employerTax"
980
+ ],
981
+ "type": "object",
982
+ "properties": {
983
+ "name": {
984
+ "minLength": 1,
985
+ "type": "string"
986
+ },
987
+ "email": {
988
+ "minLength": 1,
989
+ "type": "string"
990
+ },
991
+ "title": {
992
+ "minLength": 1,
993
+ "type": "string"
994
+ },
995
+ "hours": {
996
+ "type": "number",
997
+ "format": "float"
998
+ },
999
+ "commission": {
1000
+ "type": "number",
1001
+ "format": "float"
1002
+ },
1003
+ "hourlyRate": {
1004
+ "type": "integer",
1005
+ "format": "int32"
1006
+ },
1007
+ "salary": {
1008
+ "type": "integer",
1009
+ "format": "int32"
1010
+ },
1011
+ "holidayPay": {
1012
+ "type": "integer",
1013
+ "format": "int32",
1014
+ "nullable": true
1015
+ },
1016
+ "pension": {
1017
+ "$ref": "#/components/schemas/pension"
1018
+ },
1019
+ "employerTax": {
1020
+ "$ref": "#/components/schemas/employerTax"
1021
+ }
1022
+ }
1023
+ },
1024
+ "salaryLine": {
1025
+ "required": [
1026
+ "salary",
1027
+ "pension",
1028
+ "employerTax"
1029
+ ],
1030
+ "type": "object",
1031
+ "properties": {
1032
+ "salary": {
1033
+ "type": "integer",
1034
+ "format": "int32"
1035
+ },
1036
+ "holidayPay": {
1037
+ "type": "integer",
1038
+ "format": "int32",
1039
+ "nullable": true
1040
+ },
1041
+ "pension": {
1042
+ "$ref": "#/components/schemas/pension"
1043
+ },
1044
+ "employerTax": {
1045
+ "$ref": "#/components/schemas/employerTax"
1046
+ }
1047
+ }
1048
+ },
1049
+ "salarySummary": {
1050
+ "required": [
1051
+ "salary",
1052
+ "salaryLines"
1053
+ ],
1054
+ "type": "object",
1055
+ "properties": {
1056
+ "salary": {
1057
+ "type": "integer",
1058
+ "format": "int32"
1059
+ },
1060
+ "salaryLines": {
1061
+ "type": "array",
1062
+ "items": {
1063
+ "$ref": "#/components/schemas/iSalary"
1064
+ }
1065
+ }
1066
+ }
1067
+ },
1068
+ "shareholder": {
1069
+ "required": [
1070
+ "id",
1071
+ "name",
1072
+ "type"
1073
+ ],
1074
+ "type": "object",
1075
+ "properties": {
1076
+ "id": {
1077
+ "minLength": 1,
1078
+ "type": "string"
1079
+ },
1080
+ "name": {
1081
+ "minLength": 1,
1082
+ "type": "string"
1083
+ },
1084
+ "type": {
1085
+ "minLength": 1,
1086
+ "type": "string"
1087
+ },
1088
+ "organizationNumber": {
1089
+ "type": "string"
1090
+ },
1091
+ "personalNumber": {
1092
+ "type": "string"
1093
+ },
1094
+ "employeeId": {
1095
+ "type": "string"
1096
+ },
1097
+ "employeeName": {
1098
+ "type": "string"
1099
+ },
1100
+ "employeeEmail": {
1101
+ "type": "string"
1102
+ },
1103
+ "employeeImageUrl": {
1104
+ "type": "string"
1105
+ }
1106
+ }
1107
+ },
1108
+ "shareholderOwnership": {
1109
+ "required": [
1110
+ "shareholderId",
1111
+ "shareholderName",
1112
+ "shareholderType",
1113
+ "shares",
1114
+ "ownershipPercentage"
1115
+ ],
1116
+ "type": "object",
1117
+ "properties": {
1118
+ "shareholderId": {
1119
+ "minLength": 1,
1120
+ "type": "string"
1121
+ },
1122
+ "shareholderName": {
1123
+ "minLength": 1,
1124
+ "type": "string"
1125
+ },
1126
+ "shareholderType": {
1127
+ "minLength": 1,
1128
+ "type": "string"
1129
+ },
1130
+ "employeeId": {
1131
+ "type": "string"
1132
+ },
1133
+ "employeeName": {
1134
+ "type": "string"
1135
+ },
1136
+ "employeeEmail": {
1137
+ "type": "string"
1138
+ },
1139
+ "employeeImageUrl": {
1140
+ "type": "string"
1141
+ },
1142
+ "holderOwnerId": {
1143
+ "type": "string"
1144
+ },
1145
+ "holderOwnerName": {
1146
+ "type": "string"
1147
+ },
1148
+ "shares": {
1149
+ "type": "integer",
1150
+ "format": "int32"
1151
+ },
1152
+ "ownershipPercentage": {
1153
+ "type": "number",
1154
+ "format": "double"
1155
+ },
1156
+ "value": {
1157
+ "type": "number",
1158
+ "format": "double",
1159
+ "nullable": true
1160
+ },
1161
+ "asOfDate": {
1162
+ "type": "string",
1163
+ "format": "date-time",
1164
+ "nullable": true
1165
+ }
1166
+ }
1167
+ },
1168
+ "stockOverview": {
1169
+ "required": [
1170
+ "totalShares",
1171
+ "currentOwnership",
1172
+ "recentTransactions",
1173
+ "ownershipHistory"
1174
+ ],
1175
+ "type": "object",
1176
+ "properties": {
1177
+ "totalShares": {
1178
+ "type": "integer",
1179
+ "format": "int32"
1180
+ },
1181
+ "currentOwnership": {
1182
+ "type": "array",
1183
+ "items": {
1184
+ "$ref": "#/components/schemas/shareholderOwnership"
1185
+ }
1186
+ },
1187
+ "recentTransactions": {
1188
+ "type": "array",
1189
+ "items": {
1190
+ "$ref": "#/components/schemas/stockTransaction"
1191
+ }
1192
+ },
1193
+ "ownershipHistory": {
1194
+ "type": "array",
1195
+ "items": {
1196
+ "$ref": "#/components/schemas/ownershipSnapshot"
1197
+ }
1198
+ },
1199
+ "valuationHistory": {
1200
+ "type": "array",
1201
+ "items": {
1202
+ "$ref": "#/components/schemas/valuationHistoryItem"
1203
+ }
1204
+ },
1205
+ "companyValuation": {
1206
+ "type": "number",
1207
+ "format": "double",
1208
+ "nullable": true
1209
+ }
1210
+ }
1211
+ },
1212
+ "stockTransaction": {
1213
+ "required": [
1214
+ "id",
1215
+ "transactionNumber",
1216
+ "date",
1217
+ "transactionType",
1218
+ "toShareholderId",
1219
+ "toShareholderName",
1220
+ "shares"
1221
+ ],
1222
+ "type": "object",
1223
+ "properties": {
1224
+ "id": {
1225
+ "minLength": 1,
1226
+ "type": "string"
1227
+ },
1228
+ "transactionNumber": {
1229
+ "type": "integer",
1230
+ "format": "int32"
1231
+ },
1232
+ "date": {
1233
+ "minLength": 1,
1234
+ "type": "string",
1235
+ "format": "date-time"
1236
+ },
1237
+ "transactionType": {
1238
+ "minLength": 1,
1239
+ "type": "string"
1240
+ },
1241
+ "splitRatio": {
1242
+ "type": "integer",
1243
+ "format": "int32",
1244
+ "nullable": true
1245
+ },
1246
+ "fromShareholderId": {
1247
+ "type": "string"
1248
+ },
1249
+ "fromShareholderName": {
1250
+ "type": "string"
1251
+ },
1252
+ "toShareholderId": {
1253
+ "minLength": 1,
1254
+ "type": "string"
1255
+ },
1256
+ "toShareholderName": {
1257
+ "minLength": 1,
1258
+ "type": "string"
1259
+ },
1260
+ "shares": {
1261
+ "type": "integer",
1262
+ "format": "int32"
1263
+ },
1264
+ "pricePerShare": {
1265
+ "type": "number",
1266
+ "format": "double",
1267
+ "nullable": true
1268
+ },
1269
+ "totalValue": {
1270
+ "type": "number",
1271
+ "format": "double",
1272
+ "nullable": true
1273
+ },
1274
+ "notes": {
1275
+ "type": "string"
1276
+ }
1277
+ }
1278
+ },
1279
+ "timeTransactionSummary": {
1280
+ "required": [
1281
+ "activityCode",
1282
+ "activityName"
1283
+ ],
1284
+ "type": "object",
1285
+ "properties": {
1286
+ "activityCode": {
1287
+ "minLength": 1,
1288
+ "type": "string"
1289
+ },
1290
+ "activityName": {
1291
+ "minLength": 1,
1292
+ "type": "string"
1293
+ },
1294
+ "projectCode": {
1295
+ "type": "string",
1296
+ "nullable": true
1297
+ },
1298
+ "projectName": {
1299
+ "type": "string",
1300
+ "nullable": true
1301
+ },
1302
+ "hours": {
1303
+ "type": "number",
1304
+ "format": "double",
1305
+ "nullable": true
1306
+ },
1307
+ "commission": {
1308
+ "type": "number",
1309
+ "format": "double",
1310
+ "nullable": true
1311
+ },
1312
+ "hourlyRate": {
1313
+ "type": "integer",
1314
+ "format": "int32",
1315
+ "nullable": true
1316
+ }
1317
+ }
1318
+ },
1319
+ "validationFailure": {
1320
+ "type": "object",
1321
+ "properties": {
1322
+ "propertyName": {
1323
+ "type": "string"
1324
+ },
1325
+ "errorMessage": {
1326
+ "type": "string"
1327
+ },
1328
+ "attemptedValue": {
1329
+ "type": "object"
1330
+ },
1331
+ "customState": {
1332
+ "type": "object"
1333
+ },
1334
+ "severity": {
1335
+ "enum": [
1336
+ 0,
1337
+ 1,
1338
+ 2
1339
+ ],
1340
+ "type": "integer",
1341
+ "format": "int32",
1342
+ "default": 0
1343
+ },
1344
+ "errorCode": {
1345
+ "type": "string"
1346
+ },
1347
+ "formattedMessagePlaceholderValues": {
1348
+ "type": "object",
1349
+ "additionalProperties": {
1350
+ "type": "object"
1351
+ }
1352
+ }
1353
+ }
1354
+ },
1355
+ "valuation": {
1356
+ "required": [
1357
+ "name",
1358
+ "email",
1359
+ "image",
1360
+ "company",
1361
+ "employee",
1362
+ "nextEmployee",
1363
+ "date",
1364
+ "numberOfEmployees",
1365
+ "employeesStartingThisMonth",
1366
+ "employeeHasStarted",
1367
+ "employeeStartedThisMonth",
1368
+ "history"
1369
+ ],
1370
+ "type": "object",
1371
+ "properties": {
1372
+ "name": {
1373
+ "minLength": 1,
1374
+ "type": "string"
1375
+ },
1376
+ "email": {
1377
+ "minLength": 1,
1378
+ "type": "string"
1379
+ },
1380
+ "image": {
1381
+ "minLength": 1,
1382
+ "type": "string"
1383
+ },
1384
+ "company": {
1385
+ "type": "number",
1386
+ "format": "float"
1387
+ },
1388
+ "employee": {
1389
+ "type": "number",
1390
+ "format": "float"
1391
+ },
1392
+ "nextEmployee": {
1393
+ "type": "number",
1394
+ "format": "float"
1395
+ },
1396
+ "date": {
1397
+ "minLength": 1,
1398
+ "type": "string"
1399
+ },
1400
+ "numberOfEmployees": {
1401
+ "type": "integer",
1402
+ "format": "int32"
1403
+ },
1404
+ "employeesStartingThisMonth": {
1405
+ "type": "array",
1406
+ "items": {
1407
+ "$ref": "#/components/schemas/valuationEmployee"
1408
+ }
1409
+ },
1410
+ "employeeHasStarted": {
1411
+ "type": "boolean"
1412
+ },
1413
+ "employeeStartedThisMonth": {
1414
+ "type": "boolean"
1415
+ },
1416
+ "history": {
1417
+ "type": "array",
1418
+ "items": {
1419
+ "$ref": "#/components/schemas/valuation"
1420
+ }
1421
+ }
1422
+ }
1423
+ },
1424
+ "valuationEmployee": {
1425
+ "required": [
1426
+ "name",
1427
+ "email",
1428
+ "image"
1429
+ ],
1430
+ "type": "object",
1431
+ "properties": {
1432
+ "name": {
1433
+ "minLength": 1,
1434
+ "type": "string"
1435
+ },
1436
+ "email": {
1437
+ "minLength": 1,
1438
+ "type": "string"
1439
+ },
1440
+ "image": {
1441
+ "minLength": 1,
1442
+ "type": "string"
1443
+ }
1444
+ }
1445
+ },
1446
+ "valuationHistoryItem": {
1447
+ "required": [
1448
+ "date",
1449
+ "companyValuation"
1450
+ ],
1451
+ "type": "object",
1452
+ "properties": {
1453
+ "date": {
1454
+ "minLength": 1,
1455
+ "type": "string",
1456
+ "format": "date-time"
1457
+ },
1458
+ "companyValuation": {
1459
+ "type": "number",
1460
+ "format": "double"
1461
+ },
1462
+ "numberOfEmployees": {
1463
+ "type": "integer",
1464
+ "format": "int32"
1465
+ },
1466
+ "employeesStartingThisMonth": {
1467
+ "type": "array",
1468
+ "items": {
1469
+ "$ref": "#/components/schemas/valuationEmployee"
1470
+ }
1471
+ }
1472
+ }
1473
+ },
1474
+ "wageRate": {
1475
+ "required": [
1476
+ "sickLeave",
1477
+ "militaryService",
1478
+ "baseSalary",
1479
+ "basicAmount",
1480
+ "hoursThisYear"
1481
+ ],
1482
+ "type": "object",
1483
+ "properties": {
1484
+ "sickLeave": {
1485
+ "type": "integer",
1486
+ "format": "int32"
1487
+ },
1488
+ "militaryService": {
1489
+ "type": "integer",
1490
+ "format": "int32"
1491
+ },
1492
+ "baseSalary": {
1493
+ "type": "integer",
1494
+ "format": "int32"
1495
+ },
1496
+ "basicAmount": {
1497
+ "type": "integer",
1498
+ "format": "int32"
1499
+ },
1500
+ "hoursThisYear": {
1501
+ "type": "integer",
1502
+ "format": "int32"
1503
+ }
1504
+ }
1505
+ }
1506
+ },
1507
+ "securitySchemes": {
1508
+ "Implicit": {
1509
+ "type": "oauth2",
1510
+ "flows": {
1511
+ "implicit": {
1512
+ "authorizationUrl": "https://login.microsoftonline.com/a8533784-aa3c-403b-a61a-1533ecc6e3ed/oauth2/v2.0/authorize",
1513
+ "tokenUrl": "https://login.microsoftonline.com/a8533784-aa3c-403b-a61a-1533ecc6e3ed/oauth2/v2.0/token",
1514
+ "refreshUrl": "https://login.microsoftonline.com/a8533784-aa3c-403b-a61a-1533ecc6e3ed/oauth2/v2.0/token",
1515
+ "scopes": {
1516
+ "api://1e28e887-f8e4-452b-b091-3ab5bafdd6ba/user_impersonation": "Default function scope"
1517
+ }
1518
+ }
1519
+ }
1520
+ }
1521
+ }
1522
+ }
1523
+ }