-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathClaim.ts
More file actions
98 lines (81 loc) · 2.7 KB
/
Claim.ts
File metadata and controls
98 lines (81 loc) · 2.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import type { Relation } from "typeorm";
import {
Check,
Column,
CreateDateColumn,
Entity,
JoinColumn,
JoinTable,
ManyToMany,
ManyToOne,
OneToMany,
PrimaryGeneratedColumn,
Unique,
UpdateDateColumn,
} from "typeorm";
import { ClaimStatusType } from "../types/ClaimStatusType.js";
import { ClaimLocation } from "./ClaimLocation.js";
import { Company } from "./Company.js";
import { FemaDisaster } from "./FemaDisaster.js";
import { InsurancePolicy } from "./InsurancePolicy.js";
import { Document } from "./Document.js";
import { PurchaseLineItem } from "./PurchaseLineItem.js";
import { SelfDeclaredDisaster } from "./SelfDisaster.js";
@Unique(["companyId", "femaDisasterId", "selfDisasterId"])
@Check(
`("femaDisasterId" IS NOT NULL AND "selfDisasterId" IS NULL) OR ("femaDisasterId" IS NULL AND "selfDisasterId" IS NOT NULL)`
)
@Entity("claim")
export class Claim {
@PrimaryGeneratedColumn("uuid")
id!: string;
@Column()
name!: string;
@Column({
type: "enum",
enum: ClaimStatusType,
})
status!: ClaimStatusType;
@Column()
companyId!: string;
@ManyToOne(() => Company, (company) => company.id)
@JoinColumn({ name: "companyId" })
company?: Relation<Company>;
@Column({ nullable: true })
femaDisasterId?: string;
@ManyToOne(() => FemaDisaster, (disaster) => disaster.id)
@JoinColumn({ name: "femaDisasterId" })
femaDisaster?: Relation<FemaDisaster>;
@Column({ nullable: true })
selfDisasterId?: string;
@ManyToOne(() => SelfDeclaredDisaster, (disaster) => disaster.id)
@JoinColumn({ name: "selfDisasterId" })
selfDisaster?: Relation<SelfDeclaredDisaster>;
@OneToMany(() => ClaimLocation, (claimLocation) => claimLocation.claim)
claimLocations?: Relation<ClaimLocation>[];
@CreateDateColumn()
createdAt!: Date;
@UpdateDateColumn()
updatedAt?: Date;
@ManyToMany(() => PurchaseLineItem)
@JoinTable({
name: "claim_purchase_line_items",
joinColumn: { name: "claimId" },
inverseJoinColumn: { name: "purchaseLineItemId" },
})
purchaseLineItems!: PurchaseLineItem[];
@Column({ nullable: true })
insurancePolicyId?: string;
@ManyToOne(() => InsurancePolicy, (ip) => ip.id)
@JoinColumn({ name: "insurancePolicyId" })
insurancePolicy!: InsurancePolicy;
@ManyToMany(() => Document, (document) => document.claims)
@JoinTable({
name: "claim_uploaded_documents",
joinColumn: { name: "claimId" },
inverseJoinColumn: { name: "documentId" },
})
documents!: Document[];
@OneToMany(() => Document, (document) => document.exportedClaim)
exportedDocuments?: Relation<Document>[];
}