plac-micro-common 1.3.26 → 1.3.28

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 @@
1
+ export declare const COVER_NOTE_ENDOWMENT_TEMPLATE = "\n<!DOCTYPE html>\n<html lang=\"km\">\n<head>\n <meta charset=\"UTF-8\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"/>\n <title>\u1780\u17C6\u178E\u178F\u17CB\u179F\u17C6\u17A2\u17B6\u1784 - Cover Note</title>\n <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n <link href=\"https://fonts.googleapis.com/css2?family=Hanuman:wght@100..900&family=Moul&display=swap\" rel=\"stylesheet\">\n <style>\n * { box-sizing: border-box; margin: 0; padding: 0; }\n\n body {\n font-family: \"Hanuman\", system-ui, sans-serif;\n background: #f0f0f0;\n display: flex;\n justify-content: center;\n padding: 40px 20px;\n }\n\n .container {\n background: #fff;\n width: 210mm;\n min-height: 297mm;\n padding: 20mm 20mm 20mm 20mm;\n box-shadow: 0 4px 24px rgba(0,0,0,0.12);\n }\n\n p {\n font-family: 'Noto Sans Khmer', sans-serif;\n line-height: 1.8;\n font-size: 13px;\n }\n\n h4 {\n font-size: 18px;\n font-family: 'Noto Sans Khmer', sans-serif;\n padding: 0 !important;\n margin: 0 !important;\n }\n\n h5 {\n font-size: 14px;\n font-family: 'Noto Sans Khmer', sans-serif;\n padding: 0 !important;\n margin: 0 !important;\n }\n\n .text-right { text-align: right; }\n .text-center { text-align: center; }\n\n .mt-2 { margin-top: 8px; }\n .mt-4 { margin-top: 10px; }\n .mt-6 { margin-top: 12px; }\n .mt-8 { margin-top: 16px; }\n .ml-4 { margin-left: 32px; }\n\n table { width: 100% !important; border-collapse: collapse; }\n td { vertical-align: top; }\n\n .text-orange {\n color: rgb(241, 90, 34) !important;\n font-weight: 600;\n }\n\n /* Logo fallback */\n .logo-fallback {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n }\n .logo-icon {\n width: 38px; height: 38px;\n background: #0d1f3c;\n color: #e2c96e;\n font-size: 18px; font-weight: 700;\n display: flex; align-items: center; justify-content: center;\n border-radius: 3px;\n }\n .logo-brand { font-size: 17px; font-weight: 700; color: #0d1f3c; line-height: 1.1; }\n .logo-tagline { font-size: 9px; color: #888; text-transform: uppercase; letter-spacing: 0.08em; }\n\n /* Signature lines */\n .sig-line-long { border-top: 1px solid #000; display: inline-block; width: 240px; margin-top: 4px; }\n .sig-line-short { border-top: 1px solid #000; display: inline-block; width: 160px; margin-top: 4px; }\n .sig-spacer { height: 30mm; }\n\n @media print {\n body { background: none; padding: 0; }\n .container { box-shadow: none; }\n }\n\n @media (max-width: 640px) {\n .container { width: 100%; padding: 24px 16px; min-height: unset; }\n }\n </style>\n</head>\n<body>\n <div class=\"container\">\n\n <!-- ===== HEADER ===== -->\n <table>\n <tr>\n <td width=\"50%\" style=\"vertical-align: middle;\">\n <img src=\"data:image/png;base64,<%= logo_base64 %>\" alt=\"Logo\" class=\"title-logo\" style=\"width: 150px; height: auto;\" />\n </td>\n <td></td>\n <td width=\"30%\" style=\"vertical-align: middle; text-align: center;\">\n <p style=\"font-size: 16px;\">No. <span style=\"font-weight: bold; color: red;\"><%= cover_note_no %></span></p>\n </td>\n </tr>\n </table>\n\n <!-- ===== TITLE ===== -->\n <div class=\"text-center\" style=\"margin-top: 10mm;\">\n <h4>\u1780\u17C6\u178E\u178F\u17CB\u179F\u17C6\u17A2\u17B6\u1784</h4>\n <h4>Cover Note</h4>\n </div>\n\n <!-- ===== FIELDS ===== -->\n <div style=\"margin-top: 10mm;\">\n <div>\n <p>\u1796\u17B6\u1780\u17D2\u1799\u179F\u17D2\u1793\u17BE\u179F\u17BB\u17C6\u179B\u17C1\u1781 / Application Number :\n <span style=\"font-weight: bold;\"><%= application_no %></span>\n </p>\n </div>\n <div>\n <p>\u1798\u17D2\u1785\u17B6\u179F\u17CB\u1794\u178E\u17D2\u178E\u179F\u1793\u17D2\u1799\u17B6\u179A\u17C9\u17B6\u1794\u17CB\u179A\u1784 / Policyholder:\n <span style=\"font-weight: bold;\"><%= ph_full_name %></span>\n </p>\n </div>\n <div>\n <p>\u17A2\u17D2\u1793\u1780\u178F\u17D2\u179A\u17BC\u179C\u1794\u17B6\u1793\u1792\u17B6\u1793\u17B6\u179A\u17C9\u17B6\u1794\u17CB\u179A\u1784 / Life Assured :\n <span style=\"font-weight: bold;\"><%= la_full_name %></span>\n </p>\n </div>\n <div>\n <p>\u1794\u17BB\u1796\u17D2\u179C\u179B\u17B6\u1797\u1792\u17B6\u1793\u17B6\u179A\u17C9\u17B6\u1794\u17CB\u179A\u1784\u178A\u17C2\u179B\u1794\u17B6\u1793\u1794\u1784\u17CB\u178A\u17C6\u1794\u17BC\u1784 / Initial Premium Received:\n <span style=\"font-weight: bold;\"><%= initial_premium_amount %></span>\n </p>\n </div>\n <div>\n <p>\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791\u1785\u17B6\u1794\u17CB\u1795\u17D2\u178F\u17BE\u1798 / Commencement Date:\n <span style=\"font-weight: bold;\"><%= commencement_date %></span>\n </p>\n </div>\n </div>\n\n <!-- ===== BODY TEXT ===== -->\n <div style=\"margin-top: 5mm;\">\n <p>\n \u1780\u17D2\u179A\u17BB\u1798\u17A0\u17CA\u17BB\u1793\u1795\u17D2\u178F\u179B\u17CB\u1787\u17BC\u1793\u17A2\u17D2\u1793\u1780\u178F\u17D2\u179A\u17BC\u179C\u1794\u17B6\u1793\u1792\u17B6\u1793\u17B6\u179A\u17C9\u17B6\u1794\u17CB\u179A\u1784 \u1793\u17BC\u179C\u1780\u17B6\u179A\u1780\u17B6\u179A\u1796\u17B6\u179A\u1794\u178E\u17D2\u178F\u17C4\u17C7\u17A2\u17B6\u179F\u1793\u17D2\u1793\u1785\u17C6\u1793\u17BD\u1793\u1791\u17B9\u1780\u1794\u17D2\u179A\u17B6\u1780\u17CB 2,500 \u178A\u17BB\u179B\u17D2\u179B\u17B6\u179A\u17A2\u17B6\u1798\u17C1\u179A\u17B7\u1780\u1780\u17D2\u1793\u17BB\u1784\n \u1780\u179A\u178E\u17B8\u1798\u179A\u178E\u1797\u17B6\u1796\u178A\u17C2\u179B\u1794\u178E\u17D2\u178F\u17B6\u179B\u1798\u1780\u1796\u17B8\u1782\u17D2\u179A\u17C4\u17C7\u1790\u17D2\u1793\u17B6\u1780\u17CB \u1782\u17B7\u178F\u1785\u17B6\u1794\u17CB\u1796\u17B8\u1790\u17D2\u1784\u17C3\u178A\u17C2\u179B\u1780\u17D2\u179A\u17BB\u1798\u17A0\u17CA\u17BB\u1793\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793\u1796\u17B6\u1780\u17D2\u1799\u179F\u17D2\u1793\u17BE\u179F\u17BB\u17C6\u1792\u17B6\u1793\u17B6\u179A\u17C9\u17B6\u1794\u17CB\u179A\u1784\n \u17A2\u17B6\u1799\u17BB\u1787\u17B8\u179C\u17B7\u178F\u1787\u17B6\u1798\u17BD\u1799\u1793\u17B9\u1784\u1780\u17B6\u179A\u1794\u1784\u17CB\u1794\u17BB\u1796\u17D2\u179C\u179B\u17B6\u1797\u1792\u17B6\u1793\u17B6\u179A\u17C9\u17B6\u1794\u17CB\u179A\u1784\u178A\u17C6\u1794\u17BC\u1784\u17D4\n </p>\n <p>\n We provide the life assured with limited temporary cover of USD 2,500 against death caused by\n accidents from the date we receive the application for life assurance together with payment of the initial\n premium.\n </p>\n </div>\n\n <!-- ===== TERMINATION (Khmer) ===== -->\n <div style=\"margin-top: 5mm;\">\n <h5 style=\"color: #000;\">\u1780\u17C6\u178E\u178F\u17CB\u179F\u17C6\u17A2\u17B6\u1784\u1793\u17B9\u1784\u1794\u1789\u17D2\u1785\u1794\u17CB\u1780\u17D2\u1793\u17BB\u1784\u1780\u179A\u178E\u17B8\u178E\u17B6\u1798\u17BD\u1799\u178A\u17BC\u1785\u1781\u17B6\u1784\u1780\u17D2\u179A\u17C4\u1798\u17D6</h5>\n <div style=\"margin-left: 10mm; margin-top: 2mm;\">\n <p>\u1780) \u1793\u17C5\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791\u178A\u17C2\u179B\u1780\u17D2\u179A\u17BB\u1798\u17A0\u17CA\u17BB\u1793\u1785\u17C1\u1789\u1794\u178E\u17D2\u178E\u179F\u1793\u17D2\u1799\u17B6\u179A\u17C9\u17B6\u1794\u17CB\u179A\u1784 \u1794\u178A\u17B7\u179F\u17C1\u1792 \u17AC\u1796\u1793\u17D2\u1799\u17B6\u179A\u1796\u17C1\u179B\u1796\u17B6\u1780\u17D2\u1799\u179F\u17D2\u1793\u17BE\u179F\u17BB\u17C6\u1787\u17B6<br>\u179B\u17B6\u1799\u179B\u1780\u17D2\u1781\u178E\u17CD\u17A2\u1780\u17D2\u179F\u179A\u17D4</p>\n <p>\u1781) \u1793\u17C5\u1796\u17C1\u179B\u178A\u17C2\u179B\u1798\u17D2\u1785\u17B6\u179F\u17CB\u1794\u178E\u17D2\u178E\u179F\u1793\u17D2\u1799\u17B6\u179A\u17C9\u17B6\u1794\u17CB\u179A\u1784\u1798\u17B7\u1793\u1791\u1791\u17BD\u179B\u1799\u1780\u179B\u1780\u17D2\u1781\u1781\u178E\u17D2\u178C\u1793\u17C3\u1780\u17B6\u179A\u1792\u17B6\u1793\u17B6\u178F\u17B6\u1798\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791\u1780\u17C6\u178E\u178F\u17CB\u17D4</p>\n <p>\u1782) \u1793\u17C5\u1796\u17C1\u179B\u178A\u17C2\u179B\u1798\u17D2\u1785\u17B6\u179F\u17CB\u1794\u178E\u17D2\u178E\u179F\u1793\u17D2\u1799\u17B6\u179A\u17C9\u17B6\u1794\u17CB\u179A\u1784\u1794\u17C4\u17C7\u1794\u1784\u17CB\u1780\u17B6\u179A\u178A\u17B6\u1780\u17CB\u1796\u17B6\u1780\u17D2\u1799\u179F\u17D2\u1793\u17BE\u179F\u17BB\u17C6\u1792\u17B6\u1793\u17B6\u179A\u17C9\u17B6\u1794\u17CB\u179A\u1784\u178A\u17C4\u1799\u179F\u17D2\u1798\u17D0\u1782\u17D2\u179A\u1785\u17B7\u178F\u17D2\u178F\u17D4</p>\n </div>\n </div>\n\n <!-- ===== TERMINATION (English) ===== -->\n <div>\n <h5 style=\"color: #000;\">The cover note terminates:</h5>\n <div style=\"margin-left: 10mm;\">\n <p>a) on the date we issue the policy, decline or postpone the application in writing.</p>\n <p>b) when the Policyholder does not accept the conditions of cover by the required date.</p>\n <p>c) when the Policyholder voluntarily drops out of the application process.</p>\n </div>\n </div>\n\n <!-- ===== SIGNATURE ===== -->\n <div style=\"margin-top: 10mm; margin-left: 10mm;\">\n <table>\n <tbody>\n <tr>\n <td width=\"50%\" class=\"text-center\">\n <p>\u17A2\u17D2\u1793\u1780\u178F\u17C6\u178E\u17B6\u1784\u1780\u17D2\u179A\u17BB\u1798\u17A0\u17CA\u17BB\u1793 / Authorized Officer</p>\n <div class=\"sig-spacer\"></div>\n <p><%= authorized_officer_name %></p>\n <div class=\"sig-line-long\"></div>\n </td>\n <td width=\"15%\"></td>\n <td width=\"35%\" class=\"text-center\">\n <p>\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 / Date of Issue:</p>\n <div class=\"sig-spacer\"></div>\n <p><%= date_of_issue %></p>\n <div class=\"sig-line-short\"></div>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n </div>\n</body>\n</html>\n";
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.COVER_NOTE_ENDOWMENT_TEMPLATE = void 0;
4
+ exports.COVER_NOTE_ENDOWMENT_TEMPLATE = `
5
+ <!DOCTYPE html>
6
+ <html lang="km">
7
+ <head>
8
+ <meta charset="UTF-8"/>
9
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
10
+ <title>កំណត់សំអាង - Cover Note</title>
11
+ <link rel="preconnect" href="https://fonts.googleapis.com">
12
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
13
+ <link href="https://fonts.googleapis.com/css2?family=Hanuman:wght@100..900&family=Moul&display=swap" rel="stylesheet">
14
+ <style>
15
+ * { box-sizing: border-box; margin: 0; padding: 0; }
16
+
17
+ body {
18
+ font-family: "Hanuman", system-ui, sans-serif;
19
+ background: #f0f0f0;
20
+ display: flex;
21
+ justify-content: center;
22
+ padding: 40px 20px;
23
+ }
24
+
25
+ .container {
26
+ background: #fff;
27
+ width: 210mm;
28
+ min-height: 297mm;
29
+ padding: 20mm 20mm 20mm 20mm;
30
+ box-shadow: 0 4px 24px rgba(0,0,0,0.12);
31
+ }
32
+
33
+ p {
34
+ font-family: 'Noto Sans Khmer', sans-serif;
35
+ line-height: 1.8;
36
+ font-size: 13px;
37
+ }
38
+
39
+ h4 {
40
+ font-size: 18px;
41
+ font-family: 'Noto Sans Khmer', sans-serif;
42
+ padding: 0 !important;
43
+ margin: 0 !important;
44
+ }
45
+
46
+ h5 {
47
+ font-size: 14px;
48
+ font-family: 'Noto Sans Khmer', sans-serif;
49
+ padding: 0 !important;
50
+ margin: 0 !important;
51
+ }
52
+
53
+ .text-right { text-align: right; }
54
+ .text-center { text-align: center; }
55
+
56
+ .mt-2 { margin-top: 8px; }
57
+ .mt-4 { margin-top: 10px; }
58
+ .mt-6 { margin-top: 12px; }
59
+ .mt-8 { margin-top: 16px; }
60
+ .ml-4 { margin-left: 32px; }
61
+
62
+ table { width: 100% !important; border-collapse: collapse; }
63
+ td { vertical-align: top; }
64
+
65
+ .text-orange {
66
+ color: rgb(241, 90, 34) !important;
67
+ font-weight: 600;
68
+ }
69
+
70
+ /* Logo fallback */
71
+ .logo-fallback {
72
+ display: inline-flex;
73
+ align-items: center;
74
+ gap: 8px;
75
+ }
76
+ .logo-icon {
77
+ width: 38px; height: 38px;
78
+ background: #0d1f3c;
79
+ color: #e2c96e;
80
+ font-size: 18px; font-weight: 700;
81
+ display: flex; align-items: center; justify-content: center;
82
+ border-radius: 3px;
83
+ }
84
+ .logo-brand { font-size: 17px; font-weight: 700; color: #0d1f3c; line-height: 1.1; }
85
+ .logo-tagline { font-size: 9px; color: #888; text-transform: uppercase; letter-spacing: 0.08em; }
86
+
87
+ /* Signature lines */
88
+ .sig-line-long { border-top: 1px solid #000; display: inline-block; width: 240px; margin-top: 4px; }
89
+ .sig-line-short { border-top: 1px solid #000; display: inline-block; width: 160px; margin-top: 4px; }
90
+ .sig-spacer { height: 30mm; }
91
+
92
+ @media print {
93
+ body { background: none; padding: 0; }
94
+ .container { box-shadow: none; }
95
+ }
96
+
97
+ @media (max-width: 640px) {
98
+ .container { width: 100%; padding: 24px 16px; min-height: unset; }
99
+ }
100
+ </style>
101
+ </head>
102
+ <body>
103
+ <div class="container">
104
+
105
+ <!-- ===== HEADER ===== -->
106
+ <table>
107
+ <tr>
108
+ <td width="50%" style="vertical-align: middle;">
109
+ <img src="data:image/png;base64,<%= logo_base64 %>" alt="Logo" class="title-logo" style="width: 150px; height: auto;" />
110
+ </td>
111
+ <td></td>
112
+ <td width="30%" style="vertical-align: middle; text-align: center;">
113
+ <p style="font-size: 16px;">No. <span style="font-weight: bold; color: red;"><%= cover_note_no %></span></p>
114
+ </td>
115
+ </tr>
116
+ </table>
117
+
118
+ <!-- ===== TITLE ===== -->
119
+ <div class="text-center" style="margin-top: 10mm;">
120
+ <h4>កំណត់សំអាង</h4>
121
+ <h4>Cover Note</h4>
122
+ </div>
123
+
124
+ <!-- ===== FIELDS ===== -->
125
+ <div style="margin-top: 10mm;">
126
+ <div>
127
+ <p>ពាក្យស្នើសុំលេខ / Application Number :
128
+ <span style="font-weight: bold;"><%= application_no %></span>
129
+ </p>
130
+ </div>
131
+ <div>
132
+ <p>ម្ចាស់បណ្ណសន្យារ៉ាប់រង / Policyholder:
133
+ <span style="font-weight: bold;"><%= ph_full_name %></span>
134
+ </p>
135
+ </div>
136
+ <div>
137
+ <p>អ្នកត្រូវបានធានារ៉ាប់រង / Life Assured :
138
+ <span style="font-weight: bold;"><%= la_full_name %></span>
139
+ </p>
140
+ </div>
141
+ <div>
142
+ <p>បុព្វលាភធានារ៉ាប់រងដែលបានបង់ដំបូង / Initial Premium Received:
143
+ <span style="font-weight: bold;"><%= initial_premium_amount %></span>
144
+ </p>
145
+ </div>
146
+ <div>
147
+ <p>កាលបរិច្ឆេទចាប់ផ្តើម / Commencement Date:
148
+ <span style="font-weight: bold;"><%= commencement_date %></span>
149
+ </p>
150
+ </div>
151
+ </div>
152
+
153
+ <!-- ===== BODY TEXT ===== -->
154
+ <div style="margin-top: 5mm;">
155
+ <p>
156
+ ក្រុមហ៊ុនផ្តល់ជូនអ្នកត្រូវបានធានារ៉ាប់រង នូវការការពារបណ្តោះអាសន្នចំនួនទឹកប្រាក់ 2,500 ដុល្លារអាមេរិកក្នុង
157
+ ករណីមរណភាពដែលបណ្តាលមកពីគ្រោះថ្នាក់ គិតចាប់ពីថ្ងៃដែលក្រុមហ៊ុនទទួលបានពាក្យស្នើសុំធានារ៉ាប់រង
158
+ អាយុជីវិតជាមួយនឹងការបង់បុព្វលាភធានារ៉ាប់រងដំបូង។
159
+ </p>
160
+ <p>
161
+ We provide the life assured with limited temporary cover of USD 2,500 against death caused by
162
+ accidents from the date we receive the application for life assurance together with payment of the initial
163
+ premium.
164
+ </p>
165
+ </div>
166
+
167
+ <!-- ===== TERMINATION (Khmer) ===== -->
168
+ <div style="margin-top: 5mm;">
169
+ <h5 style="color: #000;">កំណត់សំអាងនឹងបញ្ចប់ក្នុងករណីណាមួយដូចខាងក្រោម៖</h5>
170
+ <div style="margin-left: 10mm; margin-top: 2mm;">
171
+ <p>ក) នៅកាលបរិច្ឆេទដែលក្រុមហ៊ុនចេញបណ្ណសន្យារ៉ាប់រង បដិសេធ ឬពន្យារពេលពាក្យស្នើសុំជា<br>លាយលក្ខណ៍អក្សរ។</p>
172
+ <p>ខ) នៅពេលដែលម្ចាស់បណ្ណសន្យារ៉ាប់រងមិនទទួលយកលក្ខខណ្ឌនៃការធានាតាមកាលបរិច្ឆេទកំណត់។</p>
173
+ <p>គ) នៅពេលដែលម្ចាស់បណ្ណសន្យារ៉ាប់រងបោះបង់ការដាក់ពាក្យស្នើសុំធានារ៉ាប់រងដោយស្ម័គ្រចិត្ត។</p>
174
+ </div>
175
+ </div>
176
+
177
+ <!-- ===== TERMINATION (English) ===== -->
178
+ <div>
179
+ <h5 style="color: #000;">The cover note terminates:</h5>
180
+ <div style="margin-left: 10mm;">
181
+ <p>a) on the date we issue the policy, decline or postpone the application in writing.</p>
182
+ <p>b) when the Policyholder does not accept the conditions of cover by the required date.</p>
183
+ <p>c) when the Policyholder voluntarily drops out of the application process.</p>
184
+ </div>
185
+ </div>
186
+
187
+ <!-- ===== SIGNATURE ===== -->
188
+ <div style="margin-top: 10mm; margin-left: 10mm;">
189
+ <table>
190
+ <tbody>
191
+ <tr>
192
+ <td width="50%" class="text-center">
193
+ <p>អ្នកតំណាងក្រុមហ៊ុន / Authorized Officer</p>
194
+ <div class="sig-spacer"></div>
195
+ <p><%= authorized_officer_name %></p>
196
+ <div class="sig-line-long"></div>
197
+ </td>
198
+ <td width="15%"></td>
199
+ <td width="35%" class="text-center">
200
+ <p>កាលបរិច្ឆេទ / Date of Issue:</p>
201
+ <div class="sig-spacer"></div>
202
+ <p><%= date_of_issue %></p>
203
+ <div class="sig-line-short"></div>
204
+ </td>
205
+ </tr>
206
+ </tbody>
207
+ </table>
208
+ </div>
209
+
210
+ </div>
211
+ </body>
212
+ </html>
213
+ `;
@@ -0,0 +1 @@
1
+ export declare const COVER_NOTE_TERMLIFE_TEMPLATE = "\n<!DOCTYPE html>\n<html lang=\"km\">\n<head>\n <meta charset=\"UTF-8\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"/>\n <title>\u1780\u17C6\u178E\u178F\u17CB\u179F\u17C6\u17A2\u17B6\u1784 - Cover Note</title>\n <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n <link href=\"https://fonts.googleapis.com/css2?family=Hanuman:wght@100..900&family=Moul&display=swap\" rel=\"stylesheet\">\n <style>\n * { box-sizing: border-box; margin: 0; padding: 0; }\n\n body {\n font-family: \"Hanuman\", system-ui, sans-serif;\n background: #f0f0f0;\n display: flex;\n justify-content: center;\n padding: 40px 20px;\n }\n\n .container {\n background: #fff;\n width: 210mm;\n min-height: 297mm;\n padding: 20mm 20mm 20mm 20mm;\n box-shadow: 0 4px 24px rgba(0,0,0,0.12);\n position: relative;\n }\n\n p {\n font-family: 'Noto Sans Khmer', sans-serif;\n line-height: 1.8;\n font-size: 13px;\n }\n\n h4 {\n font-size: 18px;\n font-family: 'Noto Sans Khmer', sans-serif;\n padding: 0;\n margin: 0;\n }\n\n h5 {\n font-size: 14px;\n font-family: 'Noto Sans Khmer', sans-serif;\n padding: 0;\n margin: 0;\n }\n\n table { width: 100%; border-collapse: collapse; }\n td { vertical-align: top; }\n\n .text-right { text-align: right; }\n .text-center { text-align: center; }\n\n .mt-2 { margin-top: 8px; }\n .mt-4 { margin-top: 10px; }\n .mt-6 { margin-top: 12px; }\n .mt-8 { margin-top: 16px; }\n .ml-4 { margin-left: 32px; }\n\n .text-orange {\n color: rgb(241, 90, 34);\n font-weight: 600;\n }\n\n /* Header logo row */\n .header-table td { padding: 0; }\n\n .logo img { height: 40px; width: 150px; object-fit: contain; }\n\n /* Fallback logo box if image not available */\n .logo-fallback {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n }\n .logo-fallback .logo-icon {\n width: 38px; height: 38px;\n background: #0d1f3c;\n color: #e2c96e;\n font-size: 18px; font-weight: 700;\n display: flex; align-items: center; justify-content: center;\n border-radius: 3px;\n }\n .logo-fallback .logo-brand {\n font-size: 17px; font-weight: 700;\n color: #0d1f3c;\n line-height: 1.1;\n }\n .logo-fallback .logo-tagline {\n font-size: 9px; color: #888;\n text-transform: uppercase; letter-spacing: 0.08em;\n }\n\n .doc-no-cell {\n vertical-align: bottom;\n text-align: center;\n }\n\n .doc-no-cell p { font-size: 16px; }\n .doc-no-cell .no-value { font-weight: bold; color: red; }\n\n /* Title */\n .title-section { margin-top: 10mm; text-align: center; }\n\n /* Fields */\n .fields-section { margin-top: 10mm; }\n .fields-section p { font-size: 13px; }\n .fields-section p span { font-weight: bold; }\n\n /* Body paragraphs */\n .body-section { margin-top: 5mm; }\n .body-section p { font-size: 13px; line-height: 1.8; }\n\n /* Termination */\n .termination-section { margin-top: 10mm; }\n .termination-section h5 { color: #000; }\n .termination-items { margin-left: 10mm; margin-top: 2mm; }\n .termination-items p { font-size: 13px; }\n\n /* Signature */\n .signature-section { margin-top: 20mm; }\n .sig-table td { text-align: center; vertical-align: bottom; }\n .sig-table p { font-size: 13px; }\n .sig-line-long { border-top: 1px solid #000; margin-top: 4px; display: inline-block; width: 240px; }\n .sig-line-short { border-top: 1px solid #000; margin-top: 4px; display: inline-block; width: 160px; }\n .sig-spacer { height: 30mm; }\n\n @media print {\n body { background: none; padding: 0; }\n .container { box-shadow: none; }\n }\n\n @media (max-width: 640px) {\n .container { width: 100%; padding: 24px 16px; min-height: unset; }\n }\n </style>\n</head>\n<body>\n <div class=\"container\">\n\n <!-- ===== HEADER ===== -->\n <table class=\"header-table\">\n <tr>\n <td width=\"50%\" style=\"vertical-align: middle;\">\n <div class=\"logo\">\n <!-- If logo image is available, swap src. Fallback shown below. -->\n <img src=\"data:image/png;base64,<%= logo_base64 %>\" alt=\"Logo\" class=\"title-logo\" style=\"width: 150px; height: auto;\" />\n </div>\n </td>\n <td></td>\n <td width=\"30%\" class=\"doc-no-cell\" style=\"vertical-align: middle; text-align: right;\">\n <p style=\"font-size: 16px;\">No. <span class=\"no-value\"><%= cover_note_no %></span></p>\n </td>\n </tr>\n </table>\n\n <!-- ===== TITLE ===== -->\n <div class=\"title-section\">\n <h4>\u1780\u17C6\u178E\u178F\u17CB\u179F\u17C6\u17A2\u17B6\u1784</h4>\n <!-- <h4>Cover Note</h4> -->\n </div>\n\n <!-- ===== FIELDS ===== -->\n <div class=\"fields-section\">\n <div>\n <p>\u1796\u17B6\u1780\u17D2\u1799\u179F\u17D2\u1793\u17BE\u179F\u17BB\u17C6\u179B\u17C1\u1781:\n <span><%= application_no %></span>\n </p>\n </div>\n <div>\n <p>\u1798\u17D2\u1785\u17B6\u179F\u17CB\u1794\u178E\u17D2\u178E\u179F\u1793\u17D2\u1799\u17B6\u179A\u17C9\u17B6\u1794\u17CB\u179A\u1784:\n <span><%= ph_full_name %></span>\n </p>\n </div>\n <div>\n <p>\u17A2\u17D2\u1793\u1780\u178F\u17D2\u179A\u17BC\u179C\u1794\u17B6\u1793\u1792\u17B6\u1793\u17B6\u179A\u17C9\u17B6\u1794\u17CB\u179A\u1784:\n <span><%= la_full_name %></span>\n </p>\n </div>\n <div>\n <p>\u1794\u17BB\u1796\u17D2\u179C\u179B\u17B6\u1797\u1792\u17B6\u1793\u17B6\u179A\u17C9\u17B6\u1794\u17CB\u179A\u1784\u178A\u17C2\u179B\u1794\u17B6\u1793\u1794\u1784\u17CB\u178A\u17C6\u1794\u17BC\u1784:\n <span><%= initial_premium_amount %></span>\n </p>\n </div>\n <div>\n <p>\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791\u1785\u17B6\u1794\u17CB\u1795\u17D2\u178F\u17BE\u1798:\n <span><%= commencement_date %></span>\n </p>\n </div>\n </div>\n\n <!-- ===== BODY TEXT ===== -->\n <div class=\"body-section\">\n <p style=\"line-height: 1.8;\">\n \u1780\u17D2\u179A\u17C4\u1799\u1796\u17B8\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793\u1796\u17B6\u1780\u17D2\u1799\u179F\u17D2\u1793\u17BE\u179F\u17BB\u17C6\u1792\u17B6\u1793\u17B6\u179A\u17C9\u17B6\u1794\u17CB\u179A\u1784\u17A2\u17B6\u1799\u17BB\u1787\u17B8\u179C\u17B7\u178F \u1793\u17B7\u1784\u1794\u17BB\u1796\u17D2\u179C\u179B\u17B6\u1797\u1792\u17B6\u1793\u17B6\u179A\u17C9\u17B6\u1794\u17CB\u179A\u1784\u178A\u17C6\u1794\u17BC\u1784 \u1780\u17D2\u179A\u17BB\u1798\u17A0\u17CA\u17BB\u1793\u1793\u17B9\u1784\u1795\u17D2\u178A\u179B\u17CB\u1780\u17B6\u179A\u1792\u17B6\u1793\u17B6\n \u1794\u178E\u17D2\u178F\u17C4\u17C7\u17A2\u17B6\u179F\u1793\u17D2\u1793\u17B2\u17D2\u1799\u17A2\u17D2\u1793\u1780\u178F\u17D2\u179A\u17BC\u179C\u1794\u17B6\u1793\u1792\u17B6\u1793\u17B6\u179A\u17C9\u17B6\u1794\u17CB\u179A\u1784\u179F\u17D2\u1798\u17BE\u1793\u17B9\u1784\u1785\u17C6\u1793\u17BD\u1793\u1791\u17B9\u1780\u1794\u17D2\u179A\u17B6\u1780\u17CB\u178F\u17D2\u179A\u17BC\u179C\u1794\u17B6\u1793\u1792\u17B6\u1793\u17B6\u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1798\u17B7\u1793\u179B\u17BE\u179F\u1796\u17B8 <span\n class=\"text-orange\">\u17E2\u17E5\u17E0\u17E0\u178A\u17BB\u179B\u17D2\u179B\u17B6\u179A\u17A2\u17B6\u1798\u17C1\u179A\u17B7\u1780</span>\n \u1780\u17D2\u1793\u17BB\u1784\u1780\u179A\u178E\u17B8\u1798\u179A\u178E\u1797\u17B6\u1796\u178A\u17C2\u179B\u1794\u178E\u17D2\u178F\u17B6\u179B\u1798\u1780\u1796\u17B8\u1782\u17D2\u179A\u17C4\u17C7\u1790\u17D2\u1793\u17B6\u1780\u17CB\u178A\u17C4\u1799\u1798\u17B7\u1793\u1782\u17B7\u178F\u1796\u17B8\u1785\u17C6\u1793\u17BD\u1793\u1796\u17B6\u1780\u17D2\u1799\u179F\u17D2\u1793\u17BE\u179F\u17BB\u17C6\u1792\u17B6\u1793\u17B6\u179A\u17C9\u17B6\u1794\u17CB\u179A\u1784 \u17AC\n \u1785\u17C6\u1793\u17BD\u1793\u1791\u17B9\u1780\u1794\u17D2\u179A\u17B6\u1780\u17CB\u178F\u17D2\u179A\u17BC\u179C\u1794\u17B6\u1793\u1792\u17B6\u1793\u17B6\u178A\u17C2\u179B\u1794\u17B6\u1793\u179F\u17D2\u1793\u17BE\u179F\u17BB\u17C6\u17A1\u17BE\u1799\u17D4 \u1780\u17D2\u1793\u17BB\u1784\u1780\u179A\u178E\u17B8\u178A\u17C2\u179B\u1794\u17BB\u1796\u17D2\u179C\u179B\u17B6\u1797\u1792\u17B6\u1793\u17B6\u179A\u17C9\u17B6\u1794\u17CB\u179A\u1784\u179F\u179A\u17BB\u1794\u1798\u17B6\u1793\u1785\u17C6\u1793\u17BD\u1793\u1785\u17D2\u179A\u17BE\u1793\n \u1787\u17B6\u1784 <span class=\"text-orange\">\u17E2\u17E5\u17E0\u17E0\u178A\u17BB\u179B\u17D2\u179B\u17B6\u179A\u17A2\u17B6\u1798\u17C1\u179A\u17B7\u1780</span>\n \u1780\u17D2\u179A\u17BB\u1798\u17A0\u17CA\u17BB\u1793\u1793\u17B9\u1784\u1795\u17D2\u178F\u179B\u17CB\u1787\u17BC\u1793\u179C\u17B7\u1789\u1793\u17BC\u179C\u1794\u17BB\u1796\u17D2\u179C\u179B\u17B6\u1797\u178A\u17C2\u179B\u1794\u17B6\u1793\u1794\u1784\u17CB\u1793\u17C4\u17C7\u178A\u17C4\u1799\u1796\u17BB\u17C6\u1798\u17B6\u1793\u1780\u17B6\u179A\u1794\u17D2\u179A\u17B6\u1780\u17CB\n \u1787\u17C6\u1793\u17BD\u179F\u17B2\u17D2\u1799\u1780\u17B6\u179A\u1791\u17BC\u1791\u17B6\u178F\u17CB\u17A2\u178F\u17D2\u1790\u1794\u17D2\u179A\u1799\u17C4\u1787\u1793\u17CD\u1780\u17B6\u179A\u1792\u17B6\u179A\u17C9\u17B6\u1794\u17CB\u179A\u1784\u1794\u178E\u17D2\u178A\u17C4\u17C7\u17A2\u17B6\u179F\u1793\u17D2\u1793\u17D4\n </p>\n <p style=\"line-height: 1.8;margin-top: 5mm;\">\n \u1780\u17D2\u1793\u17BB\u1784\u1780\u179A\u178E\u17B8\u1780\u17B6\u179A\u1792\u17B6\u1793\u17B6\u1794\u178E\u17D2\u178F\u17C4\u17C7\u17A2\u17B6\u179F\u1793\u17D2\u1793\u1798\u17B7\u1793\u178F\u17D2\u179A\u17BC\u179C\u1794\u17B6\u1793\u1795\u17D2\u178F\u179B\u17CB\u1787\u17BC\u1793\u1799\u17C4\u1784\u1791\u17C5\u178F\u17B6\u1798 \u201C\u1781 \u1793\u17B7\u1784\u179B\u1780\u17D2\u1781\u1781\u178E\u17D2\u178C\u201D \u179A\u1794\u179F\u17CB\u1780\u17D2\u179A\u17BB\u1798\u17A0\u17CA\u17BB\u1793\u1793\u17C4\u17C7\u1791\u17C1\n \u1780\u17D2\u179A\u17BB\u1798\u17A0\u17CA\u17BB\u1793\u1793\u17B9\u1784\u1795\u17D2\u178F\u179B\u17CB\u1787\u17BC\u1793\u179C\u17B7\u1789\u1793\u17BC\u179C\u1791\u17B9\u1780\u1794\u17D2\u179A\u17B6\u1780\u17CB\u1794\u17BB\u1796\u17D2\u179C\u179B\u17B6\u1797\u1792\u17B6\u1793\u17B6\u179A\u17C9\u17B6\u1794\u17CB\u179A\u1784\u178A\u17C2\u179B\u1794\u17B6\u1793\u1794\u1784\u17CB\u178A\u17C4\u1799\u1796\u17BB\u17C6\u1798\u17B6\u1793\u1780\u17B6\u179A\u1794\u17D2\u179A\u17B6\u1780\u17CB\u17A1\u17BE\u1799\u17D4\n </p>\n </div>\n\n <!-- ===== TERMINATION CONDITIONS ===== -->\n <div class=\"termination-section\">\n <h5>\u1780\u17B6\u179A\u1792\u17B6\u1793\u17B6\u1794\u178E\u17D2\u178F\u17C4\u17C7\u17A2\u17B6\u179F\u1793\u17D2\u1793\u1793\u17B9\u1784\u1794\u1789\u17D2\u1785\u1794\u17CB\u1780\u17D2\u1793\u17BB\u1784\u1780\u179A\u178E\u17B8\u178E\u17B6\u1798\u17BD\u1799\u178A\u17BC\u1785\u1781\u17B6\u1784\u1780\u17D2\u179A\u17C4\u1798\u17D6</h5>\n <div class=\"termination-items\">\n <p>\n <span class=\"text-orange\">\u1780)</span> \u1793\u17C5\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791\u178A\u17C2\u179B\u1780\u17D2\u179A\u17BB\u1798\u17A0\u17CA\u17BB\u1793\u1785\u17C1\u1789\u1794\u178E\u17D2\u178E\u179F\u1793\u17D2\u1799\u17B6\u179A\u17C9\u17B6\u1794\u17CB\u179A\u1784 \u1794\u178A\u17B7\u179F\u17C1\u1792\n \u17AC\u1796\u1793\u17D2\u1799\u17B6\u179A\u1796\u17C1\u179B\u1796\u17B6\u1780\u17D2\u1799\u179F\u17D2\u1793\u17BE\u179F\u17BB\u17C6\u1787\u17B6<br>\u179B\u17B6\u1799\u179B\u1780\u17D2\u1781\u178E\u17CD\u17A2\u1780\u17D2\u179F\u179A\u17D4\n </p>\n <p>\n <span class=\"text-orange\">\u1781)</span>\n \u1793\u17C5\u1796\u17C1\u179B\u178A\u17C2\u179B\u1798\u17D2\u1785\u17B6\u179F\u17CB\u1794\u178E\u17D2\u178E\u179F\u1793\u17D2\u1799\u17B6\u179A\u17C9\u17B6\u1794\u17CB\u179A\u1784\u1798\u17B7\u1793\u1791\u1791\u17BD\u179B\u1799\u1780\u179B\u1780\u17D2\u1781\u1781\u178E\u17D2\u178C\u1793\u17C3\u1780\u17B6\u179A\u1792\u17B6\u1793\u17B6\u178F\u17B6\u1798\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791\u1780\u17C6\u178E\u178F\u17CB\u17D4\n </p>\n <p>\n <span class=\"text-orange\">\u1782)</span>\n \u1793\u17C5\u1796\u17C1\u179B\u178A\u17C2\u179B\u1798\u17D2\u1785\u17B6\u179F\u17CB\u1794\u178E\u17D2\u178E\u179F\u1793\u17D2\u1799\u17B6\u179A\u17C9\u17B6\u1794\u17CB\u179A\u1784\u1794\u17C4\u17C7\u1794\u1784\u17CB\u1780\u17B6\u179A\u178A\u17B6\u1780\u17CB\u1796\u17B6\u1780\u17D2\u1799\u179F\u17D2\u1793\u17BE\u179F\u17BB\u17C6\u1792\u17B6\u1793\u17B6\u179A\u17C9\u17B6\u1794\u17CB\u179A\u1784\u178A\u17C4\u1799\u179F\u17D2\u1798\u17D0\u1782\u17D2\u179A\u1785\u17B7\u178F\u17D2\u178F\u17D4\n </p>\n </div>\n </div>\n\n <!-- ===== SIGNATURE BLOCK ===== -->\n <div class=\"signature-section\">\n <div style=\"margin-left: 10mm;\">\n <table class=\"sig-table\">\n <tbody>\n <tr>\n <td width=\"50%\" class=\"text-center\">\n <p>\u17A2\u17D2\u1793\u1780\u178F\u17C6\u178E\u17B6\u1784\u1780\u17D2\u179A\u17BB\u1798\u17A0\u17CA\u17BB\u1793</p>\n <div class=\"sig-spacer\"></div>\n <p><%= authorized_officer_name %></p>\n <div class=\"sig-line-long\"></div>\n </td>\n <td width=\"15%\"></td>\n <td width=\"35%\" class=\"text-center\">\n <p>\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791</p>\n <div class=\"sig-spacer\"></div>\n <p><%= date_of_issue %></p>\n <div class=\"sig-line-short\"></div>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n </div>\n</body>\n</html>\n";
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.COVER_NOTE_TERMLIFE_TEMPLATE = void 0;
4
+ exports.COVER_NOTE_TERMLIFE_TEMPLATE = `
5
+ <!DOCTYPE html>
6
+ <html lang="km">
7
+ <head>
8
+ <meta charset="UTF-8"/>
9
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
10
+ <title>កំណត់សំអាង - Cover Note</title>
11
+ <link rel="preconnect" href="https://fonts.googleapis.com">
12
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
13
+ <link href="https://fonts.googleapis.com/css2?family=Hanuman:wght@100..900&family=Moul&display=swap" rel="stylesheet">
14
+ <style>
15
+ * { box-sizing: border-box; margin: 0; padding: 0; }
16
+
17
+ body {
18
+ font-family: "Hanuman", system-ui, sans-serif;
19
+ background: #f0f0f0;
20
+ display: flex;
21
+ justify-content: center;
22
+ padding: 40px 20px;
23
+ }
24
+
25
+ .container {
26
+ background: #fff;
27
+ width: 210mm;
28
+ min-height: 297mm;
29
+ padding: 20mm 20mm 20mm 20mm;
30
+ box-shadow: 0 4px 24px rgba(0,0,0,0.12);
31
+ position: relative;
32
+ }
33
+
34
+ p {
35
+ font-family: 'Noto Sans Khmer', sans-serif;
36
+ line-height: 1.8;
37
+ font-size: 13px;
38
+ }
39
+
40
+ h4 {
41
+ font-size: 18px;
42
+ font-family: 'Noto Sans Khmer', sans-serif;
43
+ padding: 0;
44
+ margin: 0;
45
+ }
46
+
47
+ h5 {
48
+ font-size: 14px;
49
+ font-family: 'Noto Sans Khmer', sans-serif;
50
+ padding: 0;
51
+ margin: 0;
52
+ }
53
+
54
+ table { width: 100%; border-collapse: collapse; }
55
+ td { vertical-align: top; }
56
+
57
+ .text-right { text-align: right; }
58
+ .text-center { text-align: center; }
59
+
60
+ .mt-2 { margin-top: 8px; }
61
+ .mt-4 { margin-top: 10px; }
62
+ .mt-6 { margin-top: 12px; }
63
+ .mt-8 { margin-top: 16px; }
64
+ .ml-4 { margin-left: 32px; }
65
+
66
+ .text-orange {
67
+ color: rgb(241, 90, 34);
68
+ font-weight: 600;
69
+ }
70
+
71
+ /* Header logo row */
72
+ .header-table td { padding: 0; }
73
+
74
+ .logo img { height: 40px; width: 150px; object-fit: contain; }
75
+
76
+ /* Fallback logo box if image not available */
77
+ .logo-fallback {
78
+ display: inline-flex;
79
+ align-items: center;
80
+ gap: 8px;
81
+ }
82
+ .logo-fallback .logo-icon {
83
+ width: 38px; height: 38px;
84
+ background: #0d1f3c;
85
+ color: #e2c96e;
86
+ font-size: 18px; font-weight: 700;
87
+ display: flex; align-items: center; justify-content: center;
88
+ border-radius: 3px;
89
+ }
90
+ .logo-fallback .logo-brand {
91
+ font-size: 17px; font-weight: 700;
92
+ color: #0d1f3c;
93
+ line-height: 1.1;
94
+ }
95
+ .logo-fallback .logo-tagline {
96
+ font-size: 9px; color: #888;
97
+ text-transform: uppercase; letter-spacing: 0.08em;
98
+ }
99
+
100
+ .doc-no-cell {
101
+ vertical-align: bottom;
102
+ text-align: center;
103
+ }
104
+
105
+ .doc-no-cell p { font-size: 16px; }
106
+ .doc-no-cell .no-value { font-weight: bold; color: red; }
107
+
108
+ /* Title */
109
+ .title-section { margin-top: 10mm; text-align: center; }
110
+
111
+ /* Fields */
112
+ .fields-section { margin-top: 10mm; }
113
+ .fields-section p { font-size: 13px; }
114
+ .fields-section p span { font-weight: bold; }
115
+
116
+ /* Body paragraphs */
117
+ .body-section { margin-top: 5mm; }
118
+ .body-section p { font-size: 13px; line-height: 1.8; }
119
+
120
+ /* Termination */
121
+ .termination-section { margin-top: 10mm; }
122
+ .termination-section h5 { color: #000; }
123
+ .termination-items { margin-left: 10mm; margin-top: 2mm; }
124
+ .termination-items p { font-size: 13px; }
125
+
126
+ /* Signature */
127
+ .signature-section { margin-top: 20mm; }
128
+ .sig-table td { text-align: center; vertical-align: bottom; }
129
+ .sig-table p { font-size: 13px; }
130
+ .sig-line-long { border-top: 1px solid #000; margin-top: 4px; display: inline-block; width: 240px; }
131
+ .sig-line-short { border-top: 1px solid #000; margin-top: 4px; display: inline-block; width: 160px; }
132
+ .sig-spacer { height: 30mm; }
133
+
134
+ @media print {
135
+ body { background: none; padding: 0; }
136
+ .container { box-shadow: none; }
137
+ }
138
+
139
+ @media (max-width: 640px) {
140
+ .container { width: 100%; padding: 24px 16px; min-height: unset; }
141
+ }
142
+ </style>
143
+ </head>
144
+ <body>
145
+ <div class="container">
146
+
147
+ <!-- ===== HEADER ===== -->
148
+ <table class="header-table">
149
+ <tr>
150
+ <td width="50%" style="vertical-align: middle;">
151
+ <div class="logo">
152
+ <!-- If logo image is available, swap src. Fallback shown below. -->
153
+ <img src="data:image/png;base64,<%= logo_base64 %>" alt="Logo" class="title-logo" style="width: 150px; height: auto;" />
154
+ </div>
155
+ </td>
156
+ <td></td>
157
+ <td width="30%" class="doc-no-cell" style="vertical-align: middle; text-align: right;">
158
+ <p style="font-size: 16px;">No. <span class="no-value"><%= cover_note_no %></span></p>
159
+ </td>
160
+ </tr>
161
+ </table>
162
+
163
+ <!-- ===== TITLE ===== -->
164
+ <div class="title-section">
165
+ <h4>កំណត់សំអាង</h4>
166
+ <!-- <h4>Cover Note</h4> -->
167
+ </div>
168
+
169
+ <!-- ===== FIELDS ===== -->
170
+ <div class="fields-section">
171
+ <div>
172
+ <p>ពាក្យស្នើសុំលេខ:
173
+ <span><%= application_no %></span>
174
+ </p>
175
+ </div>
176
+ <div>
177
+ <p>ម្ចាស់បណ្ណសន្យារ៉ាប់រង:
178
+ <span><%= ph_full_name %></span>
179
+ </p>
180
+ </div>
181
+ <div>
182
+ <p>អ្នកត្រូវបានធានារ៉ាប់រង:
183
+ <span><%= la_full_name %></span>
184
+ </p>
185
+ </div>
186
+ <div>
187
+ <p>បុព្វលាភធានារ៉ាប់រងដែលបានបង់ដំបូង:
188
+ <span><%= initial_premium_amount %></span>
189
+ </p>
190
+ </div>
191
+ <div>
192
+ <p>កាលបរិច្ឆេទចាប់ផ្តើម:
193
+ <span><%= commencement_date %></span>
194
+ </p>
195
+ </div>
196
+ </div>
197
+
198
+ <!-- ===== BODY TEXT ===== -->
199
+ <div class="body-section">
200
+ <p style="line-height: 1.8;">
201
+ ក្រោយពីទទួលបានពាក្យស្នើសុំធានារ៉ាប់រងអាយុជីវិត និងបុព្វលាភធានារ៉ាប់រងដំបូង ក្រុមហ៊ុននឹងផ្ដល់ការធានា
202
+ បណ្តោះអាសន្នឲ្យអ្នកត្រូវបានធានារ៉ាប់រងស្មើនឹងចំនួនទឹកប្រាក់ត្រូវបានធានាប៉ុន្តែមិនលើសពី <span
203
+ class="text-orange">២៥០០ដុល្លារអាមេរិក</span>
204
+ ក្នុងករណីមរណភាពដែលបណ្តាលមកពីគ្រោះថ្នាក់ដោយមិនគិតពីចំនួនពាក្យស្នើសុំធានារ៉ាប់រង ឬ
205
+ ចំនួនទឹកប្រាក់ត្រូវបានធានាដែលបានស្នើសុំឡើយ។ ក្នុងករណីដែលបុព្វលាភធានារ៉ាប់រងសរុបមានចំនួនច្រើន
206
+ ជាង <span class="text-orange">២៥០០ដុល្លារអាមេរិក</span>
207
+ ក្រុមហ៊ុននឹងផ្តល់ជូនវិញនូវបុព្វលាភដែលបានបង់នោះដោយពុំមានការប្រាក់
208
+ ជំនួសឲ្យការទូទាត់អត្ថប្រយោជន៍ការធារ៉ាប់រងបណ្ដោះអាសន្ន។
209
+ </p>
210
+ <p style="line-height: 1.8;margin-top: 5mm;">
211
+ ក្នុងករណីការធានាបណ្តោះអាសន្នមិនត្រូវបានផ្តល់ជូនយោងទៅតាម “ខ និងលក្ខខណ្ឌ” របស់ក្រុមហ៊ុននោះទេ
212
+ ក្រុមហ៊ុននឹងផ្តល់ជូនវិញនូវទឹកប្រាក់បុព្វលាភធានារ៉ាប់រងដែលបានបង់ដោយពុំមានការប្រាក់ឡើយ។
213
+ </p>
214
+ </div>
215
+
216
+ <!-- ===== TERMINATION CONDITIONS ===== -->
217
+ <div class="termination-section">
218
+ <h5>ការធានាបណ្តោះអាសន្ននឹងបញ្ចប់ក្នុងករណីណាមួយដូចខាងក្រោម៖</h5>
219
+ <div class="termination-items">
220
+ <p>
221
+ <span class="text-orange">ក)</span> នៅកាលបរិច្ឆេទដែលក្រុមហ៊ុនចេញបណ្ណសន្យារ៉ាប់រង បដិសេធ
222
+ ឬពន្យារពេលពាក្យស្នើសុំជា<br>លាយលក្ខណ៍អក្សរ។
223
+ </p>
224
+ <p>
225
+ <span class="text-orange">ខ)</span>
226
+ នៅពេលដែលម្ចាស់បណ្ណសន្យារ៉ាប់រងមិនទទួលយកលក្ខខណ្ឌនៃការធានាតាមកាលបរិច្ឆេទកំណត់។
227
+ </p>
228
+ <p>
229
+ <span class="text-orange">គ)</span>
230
+ នៅពេលដែលម្ចាស់បណ្ណសន្យារ៉ាប់រងបោះបង់ការដាក់ពាក្យស្នើសុំធានារ៉ាប់រងដោយស្ម័គ្រចិត្ត។
231
+ </p>
232
+ </div>
233
+ </div>
234
+
235
+ <!-- ===== SIGNATURE BLOCK ===== -->
236
+ <div class="signature-section">
237
+ <div style="margin-left: 10mm;">
238
+ <table class="sig-table">
239
+ <tbody>
240
+ <tr>
241
+ <td width="50%" class="text-center">
242
+ <p>អ្នកតំណាងក្រុមហ៊ុន</p>
243
+ <div class="sig-spacer"></div>
244
+ <p><%= authorized_officer_name %></p>
245
+ <div class="sig-line-long"></div>
246
+ </td>
247
+ <td width="15%"></td>
248
+ <td width="35%" class="text-center">
249
+ <p>កាលបរិច្ឆេទ</p>
250
+ <div class="sig-spacer"></div>
251
+ <p><%= date_of_issue %></p>
252
+ <div class="sig-line-short"></div>
253
+ </td>
254
+ </tr>
255
+ </tbody>
256
+ </table>
257
+ </div>
258
+ </div>
259
+
260
+ </div>
261
+ </body>
262
+ </html>
263
+ `;
@@ -0,0 +1,20 @@
1
+ import { _BaseEntity } from "../_base_entity";
2
+ import { AppDocumentType, DocumentStorageProvider } from "../../types";
3
+ export declare class AppDocumentEntity extends _BaseEntity {
4
+ id: string;
5
+ application_id: string;
6
+ document_type: AppDocumentType;
7
+ document_label?: string;
8
+ original_file_name: string;
9
+ stored_file_name: string;
10
+ file_extension: string | null;
11
+ mime_type?: string;
12
+ file_size_bytes?: string;
13
+ storage_provider: DocumentStorageProvider;
14
+ bucket_name?: string | null;
15
+ object_key?: string | null;
16
+ relative_path?: string | null;
17
+ public_url?: string | null;
18
+ uploaded_at: Date;
19
+ uploaded_by_user_id?: string | null;
20
+ }
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AppDocumentEntity = void 0;
13
+ const typeorm_1 = require("typeorm");
14
+ const _base_entity_1 = require("../_base_entity");
15
+ const utils_1 = require("../../utils");
16
+ const types_1 = require("../../types");
17
+ let AppDocumentEntity = class AppDocumentEntity extends _base_entity_1._BaseEntity {
18
+ };
19
+ exports.AppDocumentEntity = AppDocumentEntity;
20
+ __decorate([
21
+ (0, typeorm_1.PrimaryGeneratedColumn)("uuid"),
22
+ __metadata("design:type", String)
23
+ ], AppDocumentEntity.prototype, "id", void 0);
24
+ __decorate([
25
+ (0, typeorm_1.Column)({ type: "uuid" }),
26
+ __metadata("design:type", String)
27
+ ], AppDocumentEntity.prototype, "application_id", void 0);
28
+ __decorate([
29
+ (0, typeorm_1.Column)({
30
+ type: "varchar",
31
+ length: 50,
32
+ comment: (0, utils_1.enumToCommentString)(types_1.AppDocumentType),
33
+ }),
34
+ __metadata("design:type", String)
35
+ ], AppDocumentEntity.prototype, "document_type", void 0);
36
+ __decorate([
37
+ (0, typeorm_1.Column)({ type: "varchar", length: 255, nullable: true }),
38
+ __metadata("design:type", String)
39
+ ], AppDocumentEntity.prototype, "document_label", void 0);
40
+ __decorate([
41
+ (0, typeorm_1.Column)({ type: "varchar", length: 255 }),
42
+ __metadata("design:type", String)
43
+ ], AppDocumentEntity.prototype, "original_file_name", void 0);
44
+ __decorate([
45
+ (0, typeorm_1.Column)({ type: "varchar", length: 255 }),
46
+ __metadata("design:type", String)
47
+ ], AppDocumentEntity.prototype, "stored_file_name", void 0);
48
+ __decorate([
49
+ (0, typeorm_1.Column)({ type: "varchar", length: 20, nullable: true }),
50
+ __metadata("design:type", Object)
51
+ ], AppDocumentEntity.prototype, "file_extension", void 0);
52
+ __decorate([
53
+ (0, typeorm_1.Column)({ type: "varchar", length: 100, nullable: true }),
54
+ __metadata("design:type", String)
55
+ ], AppDocumentEntity.prototype, "mime_type", void 0);
56
+ __decorate([
57
+ (0, typeorm_1.Column)({ type: "bigint", nullable: true }),
58
+ __metadata("design:type", String)
59
+ ], AppDocumentEntity.prototype, "file_size_bytes", void 0);
60
+ __decorate([
61
+ (0, typeorm_1.Column)({
62
+ type: "varchar",
63
+ length: 20,
64
+ comment: (0, utils_1.enumToCommentString)(types_1.DocumentStorageProvider),
65
+ }),
66
+ __metadata("design:type", String)
67
+ ], AppDocumentEntity.prototype, "storage_provider", void 0);
68
+ __decorate([
69
+ (0, typeorm_1.Column)({ type: "varchar", length: 150, nullable: true }),
70
+ __metadata("design:type", Object)
71
+ ], AppDocumentEntity.prototype, "bucket_name", void 0);
72
+ __decorate([
73
+ (0, typeorm_1.Column)({ type: "varchar", length: 500, nullable: true }),
74
+ __metadata("design:type", Object)
75
+ ], AppDocumentEntity.prototype, "object_key", void 0);
76
+ __decorate([
77
+ (0, typeorm_1.Column)({ type: "varchar", length: 500, nullable: true }),
78
+ __metadata("design:type", Object)
79
+ ], AppDocumentEntity.prototype, "relative_path", void 0);
80
+ __decorate([
81
+ (0, typeorm_1.Column)({ type: "text", nullable: true }),
82
+ __metadata("design:type", Object)
83
+ ], AppDocumentEntity.prototype, "public_url", void 0);
84
+ __decorate([
85
+ (0, typeorm_1.Column)({ type: "timestamptz" }),
86
+ __metadata("design:type", Date)
87
+ ], AppDocumentEntity.prototype, "uploaded_at", void 0);
88
+ __decorate([
89
+ (0, typeorm_1.Column)({ type: "uuid", nullable: true }),
90
+ __metadata("design:type", Object)
91
+ ], AppDocumentEntity.prototype, "uploaded_by_user_id", void 0);
92
+ exports.AppDocumentEntity = AppDocumentEntity = __decorate([
93
+ (0, typeorm_1.Entity)({ schema: "application", name: "app_documents" }),
94
+ (0, typeorm_1.Index)("idx_app_documents_application_id", ["application_id"]),
95
+ (0, typeorm_1.Index)("idx_app_documents_document_type", ["document_type"]),
96
+ (0, typeorm_1.Index)("idx_app_documents_storage_provider", ["storage_provider"]),
97
+ (0, typeorm_1.Index)("idx_app_documents_uploaded_at", ["uploaded_at"])
98
+ ], AppDocumentEntity);
@@ -6,5 +6,6 @@ import { AppUnderwritingAnswerEntity } from "./app_underwriting_answer.entity";
6
6
  import { AppUnderwritingInfoEntity } from "./app_underwriting_info.entity";
7
7
  import { AppActivityLogEntity } from "./app_activity_log.entity";
8
8
  import { UnderwritingQuestionEntity } from "./underwriting_question.entity";
9
- export declare const APPLICATION_ENTITIES: readonly [typeof ApplicationEntity, typeof AppBeneficiaryEntity, typeof AppCoverageEntity, typeof AppPersonEntity, typeof AppUnderwritingAnswerEntity, typeof AppUnderwritingInfoEntity, typeof AppActivityLogEntity, typeof UnderwritingQuestionEntity];
10
- export { ApplicationEntity, AppBeneficiaryEntity, AppCoverageEntity, AppPersonEntity, AppUnderwritingAnswerEntity, AppUnderwritingInfoEntity, AppActivityLogEntity, UnderwritingQuestionEntity, };
9
+ import { AppDocumentEntity } from "./app_document.entity";
10
+ export declare const APPLICATION_ENTITIES: readonly [typeof ApplicationEntity, typeof AppBeneficiaryEntity, typeof AppCoverageEntity, typeof AppPersonEntity, typeof AppUnderwritingAnswerEntity, typeof AppUnderwritingInfoEntity, typeof AppDocumentEntity, typeof AppActivityLogEntity, typeof UnderwritingQuestionEntity];
11
+ export { ApplicationEntity, AppBeneficiaryEntity, AppCoverageEntity, AppPersonEntity, AppUnderwritingAnswerEntity, AppUnderwritingInfoEntity, AppDocumentEntity, AppActivityLogEntity, UnderwritingQuestionEntity, };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UnderwritingQuestionEntity = exports.AppActivityLogEntity = exports.AppUnderwritingInfoEntity = exports.AppUnderwritingAnswerEntity = exports.AppPersonEntity = exports.AppCoverageEntity = exports.AppBeneficiaryEntity = exports.ApplicationEntity = exports.APPLICATION_ENTITIES = void 0;
3
+ exports.UnderwritingQuestionEntity = exports.AppActivityLogEntity = exports.AppDocumentEntity = exports.AppUnderwritingInfoEntity = exports.AppUnderwritingAnswerEntity = exports.AppPersonEntity = exports.AppCoverageEntity = exports.AppBeneficiaryEntity = exports.ApplicationEntity = exports.APPLICATION_ENTITIES = void 0;
4
4
  const application_entity_1 = require("./application.entity");
5
5
  Object.defineProperty(exports, "ApplicationEntity", { enumerable: true, get: function () { return application_entity_1.ApplicationEntity; } });
6
6
  const app_beneficiary_entity_1 = require("./app_beneficiary.entity");
@@ -17,6 +17,8 @@ const app_activity_log_entity_1 = require("./app_activity_log.entity");
17
17
  Object.defineProperty(exports, "AppActivityLogEntity", { enumerable: true, get: function () { return app_activity_log_entity_1.AppActivityLogEntity; } });
18
18
  const underwriting_question_entity_1 = require("./underwriting_question.entity");
19
19
  Object.defineProperty(exports, "UnderwritingQuestionEntity", { enumerable: true, get: function () { return underwriting_question_entity_1.UnderwritingQuestionEntity; } });
20
+ const app_document_entity_1 = require("./app_document.entity");
21
+ Object.defineProperty(exports, "AppDocumentEntity", { enumerable: true, get: function () { return app_document_entity_1.AppDocumentEntity; } });
20
22
  exports.APPLICATION_ENTITIES = [
21
23
  application_entity_1.ApplicationEntity,
22
24
  app_beneficiary_entity_1.AppBeneficiaryEntity,
@@ -24,6 +26,7 @@ exports.APPLICATION_ENTITIES = [
24
26
  app_person_entity_1.AppPersonEntity,
25
27
  app_underwriting_answer_entity_1.AppUnderwritingAnswerEntity,
26
28
  app_underwriting_info_entity_1.AppUnderwritingInfoEntity,
29
+ app_document_entity_1.AppDocumentEntity,
27
30
  app_activity_log_entity_1.AppActivityLogEntity,
28
31
  underwriting_question_entity_1.UnderwritingQuestionEntity,
29
32
  ];
@@ -50,3 +50,11 @@ export declare enum UwAnswerValueType {
50
50
  Date = "date",
51
51
  YesOrNo = "yesno"
52
52
  }
53
+ export declare enum AppDocumentType {
54
+ NationalId = "nid",
55
+ Passport = "passport",
56
+ ApplicationForm = "application_form",
57
+ QuotationForm = "quotation_form",
58
+ ClaimForm = "claim_form",
59
+ Other = "other"
60
+ }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UwAnswerValueType = exports.AppCoverageType = exports.AppPhLaRelation = exports.AppPersonRole = exports.ApplicationActionType = exports.ApplicationStatus = void 0;
3
+ exports.AppDocumentType = exports.UwAnswerValueType = exports.AppCoverageType = exports.AppPhLaRelation = exports.AppPersonRole = exports.ApplicationActionType = exports.ApplicationStatus = void 0;
4
4
  var ApplicationStatus;
5
5
  (function (ApplicationStatus) {
6
6
  ApplicationStatus["New"] = "new";
@@ -59,3 +59,22 @@ var UwAnswerValueType;
59
59
  UwAnswerValueType["Date"] = "date";
60
60
  UwAnswerValueType["YesOrNo"] = "yesno";
61
61
  })(UwAnswerValueType || (exports.UwAnswerValueType = UwAnswerValueType = {}));
62
+ var AppDocumentType;
63
+ (function (AppDocumentType) {
64
+ AppDocumentType["NationalId"] = "nid";
65
+ AppDocumentType["Passport"] = "passport";
66
+ AppDocumentType["ApplicationForm"] = "application_form";
67
+ AppDocumentType["QuotationForm"] = "quotation_form";
68
+ AppDocumentType["ClaimForm"] = "claim_form";
69
+ // FamilyBook = 'family_book',
70
+ // SalarySlip = 'salary_slip',
71
+ // BankStatement = 'bank_statement',
72
+ // MedicalReport = 'medical_report',
73
+ // IncomeProof = 'income_proof',
74
+ // ProofOfAddress = 'proof_of_address',
75
+ // EmploymentLetter = 'employment_letter',
76
+ // TaxReturn = 'tax_return',
77
+ // InsuranceQuotation = 'insurance_quotation',
78
+ // ClaimForm = 'claim_form',
79
+ AppDocumentType["Other"] = "other";
80
+ })(AppDocumentType || (exports.AppDocumentType = AppDocumentType = {}));
@@ -39,3 +39,7 @@ export declare enum YesNo {
39
39
  Yes = "yes",
40
40
  No = "no"
41
41
  }
42
+ export declare enum DocumentStorageProvider {
43
+ Local = "local",
44
+ S3 = "s3"
45
+ }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.YesNo = exports.ResetScope = exports.IdentifierType = exports.AddressType = exports.ContactType = exports.MaritalStatus = exports.Gender = void 0;
3
+ exports.DocumentStorageProvider = exports.YesNo = exports.ResetScope = exports.IdentifierType = exports.AddressType = exports.ContactType = exports.MaritalStatus = exports.Gender = void 0;
4
4
  var Gender;
5
5
  (function (Gender) {
6
6
  Gender["Male"] = "M";
@@ -49,3 +49,8 @@ var YesNo;
49
49
  YesNo["Yes"] = "yes";
50
50
  YesNo["No"] = "no";
51
51
  })(YesNo || (exports.YesNo = YesNo = {}));
52
+ var DocumentStorageProvider;
53
+ (function (DocumentStorageProvider) {
54
+ DocumentStorageProvider["Local"] = "local";
55
+ DocumentStorageProvider["S3"] = "s3";
56
+ })(DocumentStorageProvider || (exports.DocumentStorageProvider = DocumentStorageProvider = {}));
@@ -1,2 +1,13 @@
1
1
  export interface IOfficialReceiptFormData {
2
+ receipt_no: string;
3
+ receipt_date: string;
4
+ receipt_time: string;
5
+ receipt_by: string;
6
+ customer_name: string;
7
+ application_no: string;
8
+ amount: string;
9
+ currency: string;
10
+ paid_amount_in_usd: string;
11
+ paid_amount_in_khr: string;
12
+ exchange_rate: string;
2
13
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "plac-micro-common",
3
- "version": "1.3.26",
3
+ "version": "1.3.28",
4
4
  "types": "dist/index.d.ts",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {