@hed-hog/finance 0.0.238 → 0.0.240
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.
- package/README.md +1 -22
- package/dist/dto/reject-title.dto.d.ts +4 -0
- package/dist/dto/reject-title.dto.d.ts.map +1 -0
- package/dist/dto/reject-title.dto.js +22 -0
- package/dist/dto/reject-title.dto.js.map +1 -0
- package/dist/dto/reverse-settlement.dto.d.ts +4 -0
- package/dist/dto/reverse-settlement.dto.d.ts.map +1 -0
- package/dist/dto/reverse-settlement.dto.js +22 -0
- package/dist/dto/reverse-settlement.dto.js.map +1 -0
- package/dist/dto/settle-installment.dto.d.ts +12 -0
- package/dist/dto/settle-installment.dto.d.ts.map +1 -0
- package/dist/dto/settle-installment.dto.js +71 -0
- package/dist/dto/settle-installment.dto.js.map +1 -0
- package/dist/finance-data.controller.d.ts +13 -5
- package/dist/finance-data.controller.d.ts.map +1 -1
- package/dist/finance-installments.controller.d.ts +380 -12
- package/dist/finance-installments.controller.d.ts.map +1 -1
- package/dist/finance-installments.controller.js +144 -0
- package/dist/finance-installments.controller.js.map +1 -1
- package/dist/finance-statements.controller.d.ts +8 -0
- package/dist/finance-statements.controller.d.ts.map +1 -1
- package/dist/finance-statements.controller.js +40 -0
- package/dist/finance-statements.controller.js.map +1 -1
- package/dist/finance.module.d.ts.map +1 -1
- package/dist/finance.module.js +1 -0
- package/dist/finance.module.js.map +1 -1
- package/dist/finance.service.d.ts +435 -19
- package/dist/finance.service.d.ts.map +1 -1
- package/dist/finance.service.js +1286 -80
- package/dist/finance.service.js.map +1 -1
- package/hedhog/data/route.yaml +117 -0
- package/hedhog/frontend/app/accounts-payable/approvals/page.tsx.ejs +92 -12
- package/hedhog/frontend/app/accounts-payable/installments/[id]/page.tsx.ejs +434 -7
- package/hedhog/frontend/app/accounts-payable/installments/page.tsx.ejs +1172 -25
- package/hedhog/frontend/app/accounts-receivable/installments/[id]/page.tsx.ejs +396 -49
- package/hedhog/frontend/app/accounts-receivable/installments/page.tsx.ejs +430 -14
- package/hedhog/frontend/app/cash-and-banks/statements/page.tsx.ejs +212 -60
- package/hedhog/frontend/messages/en.json +1 -0
- package/hedhog/frontend/messages/pt.json +1 -0
- package/hedhog/query/0_constraints.sql +2 -0
- package/hedhog/query/constraints.sql +86 -0
- package/hedhog/table/bank_account.yaml +0 -8
- package/hedhog/table/financial_title.yaml +1 -9
- package/hedhog/table/settlement.yaml +0 -8
- package/package.json +6 -6
- package/src/dto/reject-title.dto.ts +7 -0
- package/src/dto/reverse-settlement.dto.ts +7 -0
- package/src/dto/settle-installment.dto.ts +55 -0
- package/src/finance-installments.controller.ts +172 -10
- package/src/finance-statements.controller.ts +61 -2
- package/src/finance.module.ts +2 -1
- package/src/finance.service.ts +1887 -106
- package/hedhog/table/branch.yaml +0 -18
package/README.md
CHANGED
|
@@ -71,24 +71,6 @@ Relações de suporte:
|
|
|
71
71
|
|
|
72
72
|
**Uso comum:** inicialização de regras de data/moeda em UI, API e relatórios.
|
|
73
73
|
|
|
74
|
-
## 4.2 branch
|
|
75
|
-
|
|
76
|
-
**Objetivo:** representar filiais/unidades operacionais.
|
|
77
|
-
|
|
78
|
-
**Colunas:**
|
|
79
|
-
|
|
80
|
-
- `id`: chave primária.
|
|
81
|
-
- `code`: código único da filial.
|
|
82
|
-
- `name`: nome exibível da filial.
|
|
83
|
-
- `status`: `active|inactive`.
|
|
84
|
-
- `created_at`, `updated_at`.
|
|
85
|
-
|
|
86
|
-
**Relações:**
|
|
87
|
-
|
|
88
|
-
- Referenciada por `financial_title.branch_id`.
|
|
89
|
-
- Referenciada por `bank_account.branch_id`.
|
|
90
|
-
- Referenciada por `settlement.branch_id`.
|
|
91
|
-
|
|
92
74
|
## 4.3 finance_category
|
|
93
75
|
|
|
94
76
|
**Objetivo:** plano de categorias financeiras para classificação analítica.
|
|
@@ -148,7 +130,6 @@ Relações de suporte:
|
|
|
148
130
|
**Colunas:**
|
|
149
131
|
|
|
150
132
|
- `id`: chave primária.
|
|
151
|
-
- `branch_id`: FK para `branch.id` (nullable).
|
|
152
133
|
- `code`: código da conta.
|
|
153
134
|
- `name`: nome exibível.
|
|
154
135
|
- `bank_name`, `bank_code`: metadados bancários (nullable).
|
|
@@ -170,10 +151,9 @@ Relações de suporte:
|
|
|
170
151
|
**Colunas:**
|
|
171
152
|
|
|
172
153
|
- `id`: chave primária.
|
|
173
|
-
- `branch_id`: FK para filial (nullable).
|
|
174
154
|
- `person_id`: FK para contraparte (`person.id`).
|
|
175
155
|
- `title_type`: `payable|receivable`.
|
|
176
|
-
- `status`: `draft|
|
|
156
|
+
- `status`: `draft|open|partial|settled|canceled|overdue`.
|
|
177
157
|
- `document_number`: número do documento (nullable).
|
|
178
158
|
- `description`: histórico/observações (nullable).
|
|
179
159
|
- `competence_date`: competência macro (nullable).
|
|
@@ -258,7 +238,6 @@ Relações de suporte:
|
|
|
258
238
|
**Colunas:**
|
|
259
239
|
|
|
260
240
|
- `id`: chave primária.
|
|
261
|
-
- `branch_id`: FK para `branch.id` (nullable).
|
|
262
241
|
- `person_id`: FK para `person.id` (nullable).
|
|
263
242
|
- `bank_account_id`: FK para `bank_account.id` (nullable).
|
|
264
243
|
- `payment_method_id`: FK para `payment_method.id` (nullable).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reject-title.dto.d.ts","sourceRoot":"","sources":["../../src/dto/reject-title.dto.ts"],"names":[],"mappings":"AAEA,qBAAa,cAAc;IAGzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
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.RejectTitleDto = void 0;
|
|
13
|
+
const class_validator_1 = require("class-validator");
|
|
14
|
+
class RejectTitleDto {
|
|
15
|
+
}
|
|
16
|
+
exports.RejectTitleDto = RejectTitleDto;
|
|
17
|
+
__decorate([
|
|
18
|
+
(0, class_validator_1.IsOptional)(),
|
|
19
|
+
(0, class_validator_1.IsString)(),
|
|
20
|
+
__metadata("design:type", String)
|
|
21
|
+
], RejectTitleDto.prototype, "reason", void 0);
|
|
22
|
+
//# sourceMappingURL=reject-title.dto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reject-title.dto.js","sourceRoot":"","sources":["../../src/dto/reject-title.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAuD;AAEvD,MAAa,cAAc;CAI1B;AAJD,wCAIC;AADC;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;8CACK"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reverse-settlement.dto.d.ts","sourceRoot":"","sources":["../../src/dto/reverse-settlement.dto.ts"],"names":[],"mappings":"AAEA,qBAAa,oBAAoB;IAG/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
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.ReverseSettlementDto = void 0;
|
|
13
|
+
const class_validator_1 = require("class-validator");
|
|
14
|
+
class ReverseSettlementDto {
|
|
15
|
+
}
|
|
16
|
+
exports.ReverseSettlementDto = ReverseSettlementDto;
|
|
17
|
+
__decorate([
|
|
18
|
+
(0, class_validator_1.IsOptional)(),
|
|
19
|
+
(0, class_validator_1.IsString)(),
|
|
20
|
+
__metadata("design:type", String)
|
|
21
|
+
], ReverseSettlementDto.prototype, "reason", void 0);
|
|
22
|
+
//# sourceMappingURL=reverse-settlement.dto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reverse-settlement.dto.js","sourceRoot":"","sources":["../../src/dto/reverse-settlement.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAuD;AAEvD,MAAa,oBAAoB;CAIhC;AAJD,oDAIC;AADC;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;oDACK"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare class SettleInstallmentDto {
|
|
2
|
+
installment_id: number;
|
|
3
|
+
amount: number;
|
|
4
|
+
settled_at?: string;
|
|
5
|
+
bank_account_id?: number;
|
|
6
|
+
payment_channel?: string;
|
|
7
|
+
discount?: number;
|
|
8
|
+
interest?: number;
|
|
9
|
+
penalty?: number;
|
|
10
|
+
description?: string;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=settle-installment.dto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settle-installment.dto.d.ts","sourceRoot":"","sources":["../../src/dto/settle-installment.dto.ts"],"names":[],"mappings":"AAUA,qBAAa,oBAAoB;IAG/B,cAAc,EAAE,MAAM,CAAC;IAKvB,MAAM,EAAE,MAAM,CAAC;IAIf,UAAU,CAAC,EAAE,MAAM,CAAC;IAKpB,eAAe,CAAC,EAAE,MAAM,CAAC;IAIzB,eAAe,CAAC,EAAE,MAAM,CAAC;IAMzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAMlB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAMlB,OAAO,CAAC,EAAE,MAAM,CAAC;IAIjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
|
|
@@ -0,0 +1,71 @@
|
|
|
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.SettleInstallmentDto = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
class SettleInstallmentDto {
|
|
16
|
+
}
|
|
17
|
+
exports.SettleInstallmentDto = SettleInstallmentDto;
|
|
18
|
+
__decorate([
|
|
19
|
+
(0, class_transformer_1.Type)(() => Number),
|
|
20
|
+
(0, class_validator_1.IsInt)(),
|
|
21
|
+
__metadata("design:type", Number)
|
|
22
|
+
], SettleInstallmentDto.prototype, "installment_id", void 0);
|
|
23
|
+
__decorate([
|
|
24
|
+
(0, class_transformer_1.Type)(() => Number),
|
|
25
|
+
(0, class_validator_1.IsNumber)(),
|
|
26
|
+
(0, class_validator_1.Min)(0.01),
|
|
27
|
+
__metadata("design:type", Number)
|
|
28
|
+
], SettleInstallmentDto.prototype, "amount", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
(0, class_validator_1.IsOptional)(),
|
|
31
|
+
(0, class_validator_1.IsDateString)(),
|
|
32
|
+
__metadata("design:type", String)
|
|
33
|
+
], SettleInstallmentDto.prototype, "settled_at", void 0);
|
|
34
|
+
__decorate([
|
|
35
|
+
(0, class_validator_1.IsOptional)(),
|
|
36
|
+
(0, class_transformer_1.Type)(() => Number),
|
|
37
|
+
(0, class_validator_1.IsInt)(),
|
|
38
|
+
__metadata("design:type", Number)
|
|
39
|
+
], SettleInstallmentDto.prototype, "bank_account_id", void 0);
|
|
40
|
+
__decorate([
|
|
41
|
+
(0, class_validator_1.IsOptional)(),
|
|
42
|
+
(0, class_validator_1.IsString)(),
|
|
43
|
+
__metadata("design:type", String)
|
|
44
|
+
], SettleInstallmentDto.prototype, "payment_channel", void 0);
|
|
45
|
+
__decorate([
|
|
46
|
+
(0, class_validator_1.IsOptional)(),
|
|
47
|
+
(0, class_transformer_1.Type)(() => Number),
|
|
48
|
+
(0, class_validator_1.IsNumber)(),
|
|
49
|
+
(0, class_validator_1.Min)(0),
|
|
50
|
+
__metadata("design:type", Number)
|
|
51
|
+
], SettleInstallmentDto.prototype, "discount", void 0);
|
|
52
|
+
__decorate([
|
|
53
|
+
(0, class_validator_1.IsOptional)(),
|
|
54
|
+
(0, class_transformer_1.Type)(() => Number),
|
|
55
|
+
(0, class_validator_1.IsNumber)(),
|
|
56
|
+
(0, class_validator_1.Min)(0),
|
|
57
|
+
__metadata("design:type", Number)
|
|
58
|
+
], SettleInstallmentDto.prototype, "interest", void 0);
|
|
59
|
+
__decorate([
|
|
60
|
+
(0, class_validator_1.IsOptional)(),
|
|
61
|
+
(0, class_transformer_1.Type)(() => Number),
|
|
62
|
+
(0, class_validator_1.IsNumber)(),
|
|
63
|
+
(0, class_validator_1.Min)(0),
|
|
64
|
+
__metadata("design:type", Number)
|
|
65
|
+
], SettleInstallmentDto.prototype, "penalty", void 0);
|
|
66
|
+
__decorate([
|
|
67
|
+
(0, class_validator_1.IsOptional)(),
|
|
68
|
+
(0, class_validator_1.IsString)(),
|
|
69
|
+
__metadata("design:type", String)
|
|
70
|
+
], SettleInstallmentDto.prototype, "description", void 0);
|
|
71
|
+
//# sourceMappingURL=settle-installment.dto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settle-installment.dto.js","sourceRoot":"","sources":["../../src/dto/settle-installment.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yDAAyC;AACzC,qDAOyB;AAEzB,MAAa,oBAAoB;CA4ChC;AA5CD,oDA4CC;AAzCC;IAFC,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC;IAClB,IAAA,uBAAK,GAAE;;4DACe;AAKvB;IAHC,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC;IAClB,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAG,EAAC,IAAI,CAAC;;oDACK;AAIf;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,8BAAY,GAAE;;wDACK;AAKpB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC;IAClB,IAAA,uBAAK,GAAE;;6DACiB;AAIzB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;6DACc;AAMzB;IAJC,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC;IAClB,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAG,EAAC,CAAC,CAAC;;sDACW;AAMlB;IAJC,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC;IAClB,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAG,EAAC,CAAC,CAAC;;sDACW;AAMlB;IAJC,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC;IAClB,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAG,EAAC,CAAC,CAAC;;qDACU;AAIjB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;yDACU"}
|
|
@@ -27,7 +27,7 @@ export declare class FinanceDataController {
|
|
|
27
27
|
anexosDetalhes: any;
|
|
28
28
|
tags: unknown[];
|
|
29
29
|
parcelas: any;
|
|
30
|
-
canal:
|
|
30
|
+
canal: string;
|
|
31
31
|
} | {
|
|
32
32
|
clienteId: string;
|
|
33
33
|
id: string;
|
|
@@ -43,7 +43,7 @@ export declare class FinanceDataController {
|
|
|
43
43
|
anexosDetalhes: any;
|
|
44
44
|
tags: unknown[];
|
|
45
45
|
parcelas: any;
|
|
46
|
-
canal:
|
|
46
|
+
canal: string;
|
|
47
47
|
})[];
|
|
48
48
|
titulosReceber: ({
|
|
49
49
|
fornecedorId: string;
|
|
@@ -60,7 +60,7 @@ export declare class FinanceDataController {
|
|
|
60
60
|
anexosDetalhes: any;
|
|
61
61
|
tags: unknown[];
|
|
62
62
|
parcelas: any;
|
|
63
|
-
canal:
|
|
63
|
+
canal: string;
|
|
64
64
|
} | {
|
|
65
65
|
clienteId: string;
|
|
66
66
|
id: string;
|
|
@@ -76,7 +76,7 @@ export declare class FinanceDataController {
|
|
|
76
76
|
anexosDetalhes: any;
|
|
77
77
|
tags: unknown[];
|
|
78
78
|
parcelas: any;
|
|
79
|
-
canal:
|
|
79
|
+
canal: string;
|
|
80
80
|
})[];
|
|
81
81
|
extratos: any[];
|
|
82
82
|
contasBancarias: {
|
|
@@ -110,7 +110,15 @@ export declare class FinanceDataController {
|
|
|
110
110
|
nome: string;
|
|
111
111
|
status: import("@prisma/client").$Enums.cost_center_status_enum;
|
|
112
112
|
}[];
|
|
113
|
-
aprovacoesPendentes:
|
|
113
|
+
aprovacoesPendentes: {
|
|
114
|
+
id: string;
|
|
115
|
+
tituloId: string;
|
|
116
|
+
solicitante: string;
|
|
117
|
+
valor: number;
|
|
118
|
+
politica: string;
|
|
119
|
+
urgencia: string;
|
|
120
|
+
dataSolicitacao: any;
|
|
121
|
+
}[];
|
|
114
122
|
agingInadimplencia: any[];
|
|
115
123
|
cenarios: any[];
|
|
116
124
|
transferencias: any[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"finance-data.controller.d.ts","sourceRoot":"","sources":["../src/finance-data.controller.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,qBAEa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAAd,cAAc,EAAE,cAAc;IAGrD,OAAO
|
|
1
|
+
{"version":3,"file":"finance-data.controller.d.ts","sourceRoot":"","sources":["../src/finance-data.controller.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,qBAEa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAAd,cAAc,EAAE,cAAc;IAGrD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGd"}
|