gemcap-be-common 1.4.158 → 1.4.160

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.
@@ -131,7 +131,8 @@ export declare enum EProspectDeclineReason {
131
131
  LOST_TO_COMPETITOR = "LOST_TO_COMPETITOR",
132
132
  DOES_NOT_FIT_LENDING_CRITERIA = "DOES_NOT_FIT_LENDING_CRITERIA",
133
133
  DATA_QUALITY = "DATA_QUALITY",
134
- DID_NOT_HEAR_BACK = "DID_NOT_HEAR_BACK"
134
+ DID_NOT_HEAR_BACK = "DID_NOT_HEAR_BACK",
135
+ NOT_ENOUGH_CAPITAL_TO_FUND = "NOT_ENOUGH_CAPITAL_TO_FUND"
135
136
  }
136
137
  interface IProspectProduct {
137
138
  commitment: number;
@@ -164,6 +164,7 @@ var EProspectDeclineReason;
164
164
  EProspectDeclineReason["DOES_NOT_FIT_LENDING_CRITERIA"] = "DOES_NOT_FIT_LENDING_CRITERIA";
165
165
  EProspectDeclineReason["DATA_QUALITY"] = "DATA_QUALITY";
166
166
  EProspectDeclineReason["DID_NOT_HEAR_BACK"] = "DID_NOT_HEAR_BACK";
167
+ EProspectDeclineReason["NOT_ENOUGH_CAPITAL_TO_FUND"] = "NOT_ENOUGH_CAPITAL_TO_FUND";
167
168
  })(EProspectDeclineReason || (exports.EProspectDeclineReason = EProspectDeclineReason = {}));
168
169
  var EProspectFileGroups;
169
170
  (function (EProspectFileGroups) {
@@ -185,6 +185,7 @@ export enum EProspectDeclineReason {
185
185
  DOES_NOT_FIT_LENDING_CRITERIA = 'DOES_NOT_FIT_LENDING_CRITERIA',
186
186
  DATA_QUALITY = 'DATA_QUALITY',
187
187
  DID_NOT_HEAR_BACK = 'DID_NOT_HEAR_BACK',
188
+ NOT_ENOUGH_CAPITAL_TO_FUND = 'NOT_ENOUGH_CAPITAL_TO_FUND',
188
189
  }
189
190
 
190
191
  interface IProspectProduct {
@@ -0,0 +1,46 @@
1
+ /// <reference types="mongoose/types/aggregate" />
2
+ /// <reference types="mongoose/types/callback" />
3
+ /// <reference types="mongoose/types/collection" />
4
+ /// <reference types="mongoose/types/connection" />
5
+ /// <reference types="mongoose/types/cursor" />
6
+ /// <reference types="mongoose/types/document" />
7
+ /// <reference types="mongoose/types/error" />
8
+ /// <reference types="mongoose/types/expressions" />
9
+ /// <reference types="mongoose/types/helpers" />
10
+ /// <reference types="mongoose/types/middlewares" />
11
+ /// <reference types="mongoose/types/indexes" />
12
+ /// <reference types="mongoose/types/models" />
13
+ /// <reference types="mongoose/types/mongooseoptions" />
14
+ /// <reference types="mongoose/types/pipelinestage" />
15
+ /// <reference types="mongoose/types/populate" />
16
+ /// <reference types="mongoose/types/query" />
17
+ /// <reference types="mongoose/types/schemaoptions" />
18
+ /// <reference types="mongoose/types/schematypes" />
19
+ /// <reference types="mongoose/types/session" />
20
+ /// <reference types="mongoose/types/types" />
21
+ /// <reference types="mongoose/types/utility" />
22
+ /// <reference types="mongoose/types/validation" />
23
+ /// <reference types="mongoose/types/virtuals" />
24
+ /// <reference types="mongoose/types/inferschematype" />
25
+ import mongoose, { Model } from 'mongoose';
26
+ export interface IScorecard {
27
+ name: string;
28
+ }
29
+ export interface IScorecardDoc extends IScorecard, Document {
30
+ _id: mongoose.Types.ObjectId;
31
+ createdAt: Date;
32
+ updatedAt: Date;
33
+ }
34
+ export interface IScorecardLean extends IScorecard {
35
+ _id: mongoose.Types.ObjectId;
36
+ createdAt: Date;
37
+ updatedAt: Date;
38
+ }
39
+ export interface IScorecardPlain extends IScorecard {
40
+ _id: string;
41
+ }
42
+ export type TScorecardModel = Model<IScorecard>;
43
+ export declare const ScorecardSchema: mongoose.Schema<IScorecard, TScorecardModel, {}, {}, {}, {}, mongoose.DefaultSchemaOptions, IScorecard, mongoose.Document<unknown, {}, mongoose.FlatRecord<IScorecard>> & mongoose.FlatRecord<IScorecard> & {
44
+ _id: mongoose.Types.ObjectId;
45
+ }>;
46
+ export declare const Scorecard: TScorecardModel;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Scorecard = exports.ScorecardSchema = void 0;
7
+ const mongoose_1 = __importDefault(require("mongoose"));
8
+ const _models_1 = require("./_models");
9
+ exports.ScorecardSchema = new mongoose_1.default.Schema({
10
+ name: {
11
+ type: String,
12
+ required: true,
13
+ },
14
+ }, {
15
+ timestamps: { createdAt: true, updatedAt: true },
16
+ versionKey: false,
17
+ });
18
+ exports.Scorecard = mongoose_1.default.model(_models_1.MODEL_NAMES.scorecard, exports.ScorecardSchema);
@@ -0,0 +1,40 @@
1
+ import mongoose, { Model } from 'mongoose';
2
+
3
+ import { MODEL_NAMES } from './_models';
4
+
5
+ export interface IScorecard {
6
+ name: string;
7
+ }
8
+
9
+ export interface IScorecardDoc extends IScorecard, Document {
10
+ _id: mongoose.Types.ObjectId;
11
+ createdAt: Date;
12
+ updatedAt: Date;
13
+ }
14
+
15
+ export interface IScorecardLean extends IScorecard {
16
+ _id: mongoose.Types.ObjectId;
17
+ createdAt: Date;
18
+ updatedAt: Date;
19
+ }
20
+
21
+ export interface IScorecardPlain extends IScorecard {
22
+ _id: string;
23
+ }
24
+
25
+ export type TScorecardModel = Model<IScorecard>;
26
+
27
+ export const ScorecardSchema = new mongoose.Schema<IScorecard, TScorecardModel>(
28
+ {
29
+ name: {
30
+ type: String,
31
+ required: true,
32
+ },
33
+ },
34
+ {
35
+ timestamps: { createdAt: true, updatedAt: true },
36
+ versionKey: false,
37
+ },
38
+ );
39
+
40
+ export const Scorecard = mongoose.model<IScorecard, TScorecardModel>(MODEL_NAMES.scorecard, ScorecardSchema);
@@ -0,0 +1,51 @@
1
+ /// <reference types="mongoose/types/aggregate" />
2
+ /// <reference types="mongoose/types/callback" />
3
+ /// <reference types="mongoose/types/collection" />
4
+ /// <reference types="mongoose/types/connection" />
5
+ /// <reference types="mongoose/types/cursor" />
6
+ /// <reference types="mongoose/types/document" />
7
+ /// <reference types="mongoose/types/error" />
8
+ /// <reference types="mongoose/types/expressions" />
9
+ /// <reference types="mongoose/types/helpers" />
10
+ /// <reference types="mongoose/types/middlewares" />
11
+ /// <reference types="mongoose/types/indexes" />
12
+ /// <reference types="mongoose/types/models" />
13
+ /// <reference types="mongoose/types/mongooseoptions" />
14
+ /// <reference types="mongoose/types/pipelinestage" />
15
+ /// <reference types="mongoose/types/populate" />
16
+ /// <reference types="mongoose/types/query" />
17
+ /// <reference types="mongoose/types/schemaoptions" />
18
+ /// <reference types="mongoose/types/schematypes" />
19
+ /// <reference types="mongoose/types/session" />
20
+ /// <reference types="mongoose/types/types" />
21
+ /// <reference types="mongoose/types/utility" />
22
+ /// <reference types="mongoose/types/validation" />
23
+ /// <reference types="mongoose/types/virtuals" />
24
+ /// <reference types="mongoose/types/inferschematype" />
25
+ import mongoose, { Model } from 'mongoose';
26
+ export type ScorecardAnswerValue = boolean | number | string;
27
+ export interface IScorecardAnswer {
28
+ submissionId: mongoose.Types.ObjectId;
29
+ criterionKey: string;
30
+ value: ScorecardAnswerValue;
31
+ calculatedScore: number;
32
+ }
33
+ export interface IScorecardAnswerDoc extends IScorecardAnswer, Document {
34
+ _id: mongoose.Types.ObjectId;
35
+ createdAt: Date;
36
+ updatedAt: Date;
37
+ }
38
+ export interface IScorecardAnswerLean extends IScorecardAnswer {
39
+ _id: mongoose.Types.ObjectId;
40
+ createdAt: Date;
41
+ updatedAt: Date;
42
+ }
43
+ export interface IScorecardAnswerPlain extends Omit<IScorecardAnswer, 'submissionId'> {
44
+ _id: string;
45
+ submissionId: string;
46
+ }
47
+ export type TScorecardAnswerModel = Model<IScorecardAnswer>;
48
+ export declare const ScorecardAnswerSchema: mongoose.Schema<IScorecardAnswer, TScorecardAnswerModel, {}, {}, {}, {}, mongoose.DefaultSchemaOptions, IScorecardAnswer, mongoose.Document<unknown, {}, mongoose.FlatRecord<IScorecardAnswer>> & mongoose.FlatRecord<IScorecardAnswer> & {
49
+ _id: mongoose.Types.ObjectId;
50
+ }>;
51
+ export declare const ScorecardAnswer: TScorecardAnswerModel;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ScorecardAnswer = exports.ScorecardAnswerSchema = void 0;
7
+ const mongoose_1 = __importDefault(require("mongoose"));
8
+ const _models_1 = require("./_models");
9
+ exports.ScorecardAnswerSchema = new mongoose_1.default.Schema({
10
+ submissionId: {
11
+ type: mongoose_1.default.Schema.Types.ObjectId,
12
+ ref: _models_1.MODEL_NAMES.scorecardSubmission,
13
+ required: true,
14
+ },
15
+ criterionKey: {
16
+ type: String,
17
+ required: true,
18
+ },
19
+ value: {
20
+ type: mongoose_1.default.Schema.Types.Mixed,
21
+ required: true,
22
+ },
23
+ calculatedScore: {
24
+ type: Number,
25
+ required: true,
26
+ },
27
+ }, {
28
+ timestamps: { createdAt: true, updatedAt: true },
29
+ versionKey: false,
30
+ });
31
+ exports.ScorecardAnswer = mongoose_1.default.model(_models_1.MODEL_NAMES.scorecardAnswer, exports.ScorecardAnswerSchema);
32
+ exports.ScorecardAnswerSchema.index({ submissionId: 1, criterionKey: 1 }, { unique: true });
@@ -0,0 +1,67 @@
1
+ import mongoose, { Model } from 'mongoose';
2
+
3
+ import { MODEL_NAMES } from './_models';
4
+
5
+ export type ScorecardAnswerValue =
6
+ | boolean
7
+ | number
8
+ | string;
9
+
10
+ export interface IScorecardAnswer {
11
+ submissionId: mongoose.Types.ObjectId;
12
+ criterionKey: string;
13
+ value: ScorecardAnswerValue;
14
+ calculatedScore: number;
15
+ }
16
+
17
+ export interface IScorecardAnswerDoc extends IScorecardAnswer, Document {
18
+ _id: mongoose.Types.ObjectId;
19
+ createdAt: Date;
20
+ updatedAt: Date;
21
+ }
22
+
23
+ export interface IScorecardAnswerLean extends IScorecardAnswer {
24
+ _id: mongoose.Types.ObjectId;
25
+ createdAt: Date;
26
+ updatedAt: Date;
27
+ }
28
+
29
+ export interface IScorecardAnswerPlain extends Omit<IScorecardAnswer, 'submissionId'> {
30
+ _id: string;
31
+ submissionId: string;
32
+ }
33
+
34
+ export type TScorecardAnswerModel = Model<IScorecardAnswer>;
35
+
36
+ export const ScorecardAnswerSchema = new mongoose.Schema<IScorecardAnswer, TScorecardAnswerModel>(
37
+ {
38
+ submissionId: {
39
+ type: mongoose.Schema.Types.ObjectId,
40
+ ref: MODEL_NAMES.scorecardSubmission,
41
+ required: true,
42
+ },
43
+ criterionKey: {
44
+ type: String,
45
+ required: true,
46
+ },
47
+ value: {
48
+ type: mongoose.Schema.Types.Mixed,
49
+ required: true,
50
+ },
51
+ calculatedScore: {
52
+ type: Number,
53
+ required: true,
54
+ },
55
+ },
56
+ {
57
+ timestamps: { createdAt: true, updatedAt: true },
58
+ versionKey: false,
59
+ },
60
+ );
61
+
62
+ export const ScorecardAnswer = mongoose.model<IScorecardAnswer, TScorecardAnswerModel>(MODEL_NAMES.scorecardAnswer, ScorecardAnswerSchema);
63
+
64
+ ScorecardAnswerSchema.index(
65
+ { submissionId: 1, criterionKey: 1 },
66
+ { unique: true }
67
+ );
@@ -0,0 +1,55 @@
1
+ /// <reference types="mongoose/types/aggregate" />
2
+ /// <reference types="mongoose/types/callback" />
3
+ /// <reference types="mongoose/types/collection" />
4
+ /// <reference types="mongoose/types/connection" />
5
+ /// <reference types="mongoose/types/cursor" />
6
+ /// <reference types="mongoose/types/document" />
7
+ /// <reference types="mongoose/types/error" />
8
+ /// <reference types="mongoose/types/expressions" />
9
+ /// <reference types="mongoose/types/helpers" />
10
+ /// <reference types="mongoose/types/middlewares" />
11
+ /// <reference types="mongoose/types/indexes" />
12
+ /// <reference types="mongoose/types/models" />
13
+ /// <reference types="mongoose/types/mongooseoptions" />
14
+ /// <reference types="mongoose/types/pipelinestage" />
15
+ /// <reference types="mongoose/types/populate" />
16
+ /// <reference types="mongoose/types/query" />
17
+ /// <reference types="mongoose/types/schemaoptions" />
18
+ /// <reference types="mongoose/types/schematypes" />
19
+ /// <reference types="mongoose/types/session" />
20
+ /// <reference types="mongoose/types/types" />
21
+ /// <reference types="mongoose/types/utility" />
22
+ /// <reference types="mongoose/types/validation" />
23
+ /// <reference types="mongoose/types/virtuals" />
24
+ /// <reference types="mongoose/types/inferschematype" />
25
+ import mongoose, { Model } from 'mongoose';
26
+ export interface IStorecardSubmission {
27
+ borrowerId: mongoose.Types.ObjectId;
28
+ scorecardId: mongoose.Types.ObjectId;
29
+ scorecardVersionId: mongoose.Types.ObjectId;
30
+ period: string;
31
+ totalScore?: number;
32
+ status: 'draft' | 'final';
33
+ lockedAt: Date;
34
+ }
35
+ export interface IStorecardSubmissionDoc extends IStorecardSubmission, Document {
36
+ _id: mongoose.Types.ObjectId;
37
+ createdAt: Date;
38
+ updatedAt: Date;
39
+ }
40
+ export interface IStorecardSubmissionLean extends IStorecardSubmission {
41
+ _id: mongoose.Types.ObjectId;
42
+ createdAt: Date;
43
+ updatedAt: Date;
44
+ }
45
+ export interface IScorecardSubmissionPlain extends Omit<IStorecardSubmission, 'borrowerId' | 'scorecardId' | 'scorecardVersionId'> {
46
+ _id: string;
47
+ borrowerId: string;
48
+ scorecardId: string;
49
+ scorecardVersionId: string;
50
+ }
51
+ export type TStorecardSubmissionModel = Model<IStorecardSubmission>;
52
+ export declare const StorecardSubmissionSchema: mongoose.Schema<IStorecardSubmission, TStorecardSubmissionModel, {}, {}, {}, {}, mongoose.DefaultSchemaOptions, IStorecardSubmission, mongoose.Document<unknown, {}, mongoose.FlatRecord<IStorecardSubmission>> & mongoose.FlatRecord<IStorecardSubmission> & {
53
+ _id: mongoose.Types.ObjectId;
54
+ }>;
55
+ export declare const StorecardSubmission: TStorecardSubmissionModel;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.StorecardSubmission = exports.StorecardSubmissionSchema = void 0;
7
+ const mongoose_1 = __importDefault(require("mongoose"));
8
+ const _models_1 = require("./_models");
9
+ exports.StorecardSubmissionSchema = new mongoose_1.default.Schema({
10
+ borrowerId: {
11
+ type: mongoose_1.default.Schema.Types.ObjectId,
12
+ ref: _models_1.MODEL_NAMES.borrowers,
13
+ required: true,
14
+ },
15
+ scorecardId: {
16
+ type: mongoose_1.default.Schema.Types.ObjectId,
17
+ ref: _models_1.MODEL_NAMES.scorecard,
18
+ required: true,
19
+ },
20
+ scorecardVersionId: {
21
+ type: mongoose_1.default.Schema.Types.ObjectId,
22
+ ref: _models_1.MODEL_NAMES.scorecardVersion,
23
+ required: true,
24
+ },
25
+ period: {
26
+ type: String,
27
+ required: true,
28
+ },
29
+ totalScore: {
30
+ type: Number,
31
+ },
32
+ status: {
33
+ type: String,
34
+ enum: ['draft', 'final'],
35
+ required: true,
36
+ },
37
+ lockedAt: {
38
+ type: Date,
39
+ required: false,
40
+ },
41
+ }, {
42
+ timestamps: { createdAt: true, updatedAt: true },
43
+ versionKey: false,
44
+ });
45
+ exports.StorecardSubmission = mongoose_1.default.model(_models_1.MODEL_NAMES.scorecardSubmission, exports.StorecardSubmissionSchema);
46
+ exports.StorecardSubmissionSchema.index({ borrowerId: 1, scorecardId: 1, period: 1 }, { unique: true });
@@ -0,0 +1,81 @@
1
+ import mongoose, { Model } from 'mongoose';
2
+
3
+ import { MODEL_NAMES } from './_models';
4
+
5
+ export interface IStorecardSubmission {
6
+ borrowerId: mongoose.Types.ObjectId;
7
+ scorecardId: mongoose.Types.ObjectId;
8
+ scorecardVersionId: mongoose.Types.ObjectId;
9
+ period: string;
10
+ totalScore?: number;
11
+ status: 'draft' | 'final';
12
+ lockedAt: Date;
13
+ }
14
+
15
+ export interface IStorecardSubmissionDoc extends IStorecardSubmission, Document {
16
+ _id: mongoose.Types.ObjectId;
17
+ createdAt: Date;
18
+ updatedAt: Date;
19
+ }
20
+
21
+ export interface IStorecardSubmissionLean extends IStorecardSubmission {
22
+ _id: mongoose.Types.ObjectId;
23
+ createdAt: Date;
24
+ updatedAt: Date;
25
+ }
26
+
27
+ export interface IScorecardSubmissionPlain extends Omit<IStorecardSubmission, 'borrowerId' | 'scorecardId' | 'scorecardVersionId'> {
28
+ _id: string;
29
+ borrowerId: string;
30
+ scorecardId: string;
31
+ scorecardVersionId: string;
32
+ }
33
+
34
+ export type TStorecardSubmissionModel = Model<IStorecardSubmission>;
35
+
36
+ export const StorecardSubmissionSchema = new mongoose.Schema<IStorecardSubmission, TStorecardSubmissionModel>(
37
+ {
38
+ borrowerId: {
39
+ type: mongoose.Schema.Types.ObjectId,
40
+ ref: MODEL_NAMES.borrowers,
41
+ required: true,
42
+ },
43
+ scorecardId: {
44
+ type: mongoose.Schema.Types.ObjectId,
45
+ ref: MODEL_NAMES.scorecard,
46
+ required: true,
47
+ },
48
+ scorecardVersionId: {
49
+ type: mongoose.Schema.Types.ObjectId,
50
+ ref: MODEL_NAMES.scorecardVersion,
51
+ required: true,
52
+ },
53
+ period: {
54
+ type: String,
55
+ required: true,
56
+ },
57
+ totalScore: {
58
+ type: Number,
59
+ },
60
+ status: {
61
+ type: String,
62
+ enum: ['draft', 'final'],
63
+ required: true,
64
+ },
65
+ lockedAt: {
66
+ type: Date,
67
+ required: false,
68
+ },
69
+ },
70
+ {
71
+ timestamps: { createdAt: true, updatedAt: true },
72
+ versionKey: false,
73
+ },
74
+ );
75
+
76
+ export const StorecardSubmission = mongoose.model<IStorecardSubmission, TStorecardSubmissionModel>(MODEL_NAMES.scorecardSubmission, StorecardSubmissionSchema);
77
+
78
+ StorecardSubmissionSchema.index(
79
+ { borrowerId: 1, scorecardId: 1, period: 1 },
80
+ { unique: true }
81
+ );
@@ -0,0 +1,53 @@
1
+ /// <reference types="mongoose/types/aggregate" />
2
+ /// <reference types="mongoose/types/callback" />
3
+ /// <reference types="mongoose/types/collection" />
4
+ /// <reference types="mongoose/types/connection" />
5
+ /// <reference types="mongoose/types/cursor" />
6
+ /// <reference types="mongoose/types/document" />
7
+ /// <reference types="mongoose/types/error" />
8
+ /// <reference types="mongoose/types/expressions" />
9
+ /// <reference types="mongoose/types/helpers" />
10
+ /// <reference types="mongoose/types/middlewares" />
11
+ /// <reference types="mongoose/types/indexes" />
12
+ /// <reference types="mongoose/types/models" />
13
+ /// <reference types="mongoose/types/mongooseoptions" />
14
+ /// <reference types="mongoose/types/pipelinestage" />
15
+ /// <reference types="mongoose/types/populate" />
16
+ /// <reference types="mongoose/types/query" />
17
+ /// <reference types="mongoose/types/schemaoptions" />
18
+ /// <reference types="mongoose/types/schematypes" />
19
+ /// <reference types="mongoose/types/session" />
20
+ /// <reference types="mongoose/types/types" />
21
+ /// <reference types="mongoose/types/utility" />
22
+ /// <reference types="mongoose/types/validation" />
23
+ /// <reference types="mongoose/types/virtuals" />
24
+ /// <reference types="mongoose/types/inferschematype" />
25
+ import Joi from 'joi';
26
+ import mongoose, { Model } from 'mongoose';
27
+ export interface IScorecardVersion {
28
+ scorecardId: mongoose.Types.ObjectId;
29
+ version: string;
30
+ validFrom: Date;
31
+ validTo?: Date;
32
+ type: unknown;
33
+ }
34
+ export interface IScorecardVersionDoc extends IScorecardVersion, Document {
35
+ _id: mongoose.Types.ObjectId;
36
+ createdAt: Date;
37
+ updatedAt: Date;
38
+ }
39
+ export interface IScorecardVersionLean extends IScorecardVersion {
40
+ _id: mongoose.Types.ObjectId;
41
+ createdAt: Date;
42
+ updatedAt: Date;
43
+ }
44
+ export interface IScorecardVersionPlain extends IScorecardVersion {
45
+ _id: string;
46
+ }
47
+ export type TScorecardVersionModel = Model<IScorecardVersion>;
48
+ export declare const CRITERION_TYPES: readonly ["boolean", "enum", "number", "range", "rating"];
49
+ export declare const ScorecardDefinitionJoiSchema: Joi.ObjectSchema<any>;
50
+ export declare const ScorecardVersionSchema: mongoose.Schema<IScorecardVersion, TScorecardVersionModel, {}, {}, {}, {}, mongoose.DefaultSchemaOptions, IScorecardVersion, mongoose.Document<unknown, {}, mongoose.FlatRecord<IScorecardVersion>> & mongoose.FlatRecord<IScorecardVersion> & {
51
+ _id: mongoose.Types.ObjectId;
52
+ }>;
53
+ export declare const ScorecardVersion: TScorecardVersionModel;
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ScorecardVersion = exports.ScorecardVersionSchema = exports.ScorecardDefinitionJoiSchema = exports.CRITERION_TYPES = void 0;
7
+ const joi_1 = __importDefault(require("joi"));
8
+ const mongoose_1 = __importDefault(require("mongoose"));
9
+ const _models_1 = require("./_models");
10
+ exports.CRITERION_TYPES = [
11
+ 'boolean',
12
+ 'enum',
13
+ 'number',
14
+ 'range',
15
+ 'rating',
16
+ ];
17
+ const scoringRuleSchema = joi_1.default.object({
18
+ score: joi_1.default.number().required(),
19
+ // mutually exclusive conditions
20
+ equals: joi_1.default.alternatives(joi_1.default.string(), joi_1.default.number(), joi_1.default.boolean()),
21
+ lt: joi_1.default.number(),
22
+ lte: joi_1.default.number(),
23
+ gt: joi_1.default.number(),
24
+ gte: joi_1.default.number(),
25
+ between: joi_1.default.array().items(joi_1.default.number()).length(2),
26
+ })
27
+ .xor('equals', 'lt', 'lte', 'gt', 'gte', 'between')
28
+ .required();
29
+ const criterionSchema = joi_1.default.object({
30
+ key: joi_1.default.string()
31
+ .regex(/^[a-z][a-zA-Z0-9]*$/)
32
+ .required(),
33
+ label: joi_1.default.string().required(),
34
+ type: joi_1.default.string()
35
+ .valid(...exports.CRITERION_TYPES)
36
+ .required(),
37
+ options: joi_1.default.when('type', {
38
+ is: 'enum',
39
+ then: joi_1.default.array().items(joi_1.default.string()).min(1).required(),
40
+ otherwise: joi_1.default.forbidden(),
41
+ }),
42
+ min: joi_1.default.when('type', {
43
+ is: 'rating',
44
+ then: joi_1.default.number().required(),
45
+ otherwise: joi_1.default.forbidden(),
46
+ }),
47
+ max: joi_1.default.when('type', {
48
+ is: 'rating',
49
+ then: joi_1.default.number().required(),
50
+ otherwise: joi_1.default.forbidden(),
51
+ }),
52
+ rules: joi_1.default.array()
53
+ .items(scoringRuleSchema)
54
+ .min(1)
55
+ .required(),
56
+ });
57
+ const sectionSchema = joi_1.default.object({
58
+ key: joi_1.default.string()
59
+ .regex(/^[a-z][a-zA-Z0-9]*$/)
60
+ .required(),
61
+ label: joi_1.default.string().required(),
62
+ order: joi_1.default.number().integer().min(1).required(),
63
+ maxScore: joi_1.default.number().required(),
64
+ criteria: joi_1.default.array()
65
+ .items(criterionSchema)
66
+ .min(1)
67
+ .required(),
68
+ });
69
+ exports.ScorecardDefinitionJoiSchema = joi_1.default.object({
70
+ sections: joi_1.default.array()
71
+ .items(sectionSchema)
72
+ .min(1)
73
+ .required(),
74
+ }).required();
75
+ exports.ScorecardVersionSchema = new mongoose_1.default.Schema({
76
+ scorecardId: {
77
+ type: mongoose_1.default.Schema.Types.ObjectId,
78
+ ref: _models_1.MODEL_NAMES.scorecard,
79
+ required: true,
80
+ },
81
+ version: {
82
+ type: String,
83
+ required: true,
84
+ },
85
+ validFrom: {
86
+ type: Date,
87
+ required: true,
88
+ },
89
+ validTo: {
90
+ type: Date,
91
+ },
92
+ type: {
93
+ type: String,
94
+ required: true,
95
+ },
96
+ }, {
97
+ timestamps: { createdAt: true, updatedAt: true },
98
+ versionKey: false,
99
+ });
100
+ exports.ScorecardVersion = mongoose_1.default.model(_models_1.MODEL_NAMES.scorecardVersion, exports.ScorecardVersionSchema);
101
+ exports.ScorecardVersionSchema.pre('save', function (next) {
102
+ if (!this.isNew && this.isModified('definitionJson')) {
103
+ return next(new Error('ScorecardVersion is immutable'));
104
+ }
105
+ next();
106
+ });