@silexpert/core 1.3.152 → 1.3.153

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.
Files changed (98) hide show
  1. package/dist/cjs/api/resources/Revenue.d.ts +55 -0
  2. package/dist/cjs/api/resources/Revenue.d.ts.map +1 -0
  3. package/dist/cjs/api/resources/Revenue.js +59 -0
  4. package/dist/cjs/api/resources/Revenue.js.map +1 -0
  5. package/dist/cjs/api/resources.d.ts +2 -0
  6. package/dist/cjs/api/resources.d.ts.map +1 -1
  7. package/dist/cjs/api/resources.js +2 -0
  8. package/dist/cjs/api/resources.js.map +1 -1
  9. package/dist/cjs/types/Enum/BankAccountType.d.ts +5 -0
  10. package/dist/cjs/types/Enum/BankAccountType.d.ts.map +1 -1
  11. package/dist/cjs/types/Enum/BankAccountType.js +7 -1
  12. package/dist/cjs/types/Enum/BankAccountType.js.map +1 -1
  13. package/dist/cjs/types/Enum/Revenue.d.ts +33 -0
  14. package/dist/cjs/types/Enum/Revenue.d.ts.map +1 -0
  15. package/dist/cjs/types/Enum/Revenue.js +38 -0
  16. package/dist/cjs/types/Enum/Revenue.js.map +1 -0
  17. package/dist/cjs/types/Interface/api/revenueMovement.d.ts +69 -0
  18. package/dist/cjs/types/Interface/api/revenueMovement.d.ts.map +1 -0
  19. package/dist/cjs/types/Interface/api/revenueMovement.js +3 -0
  20. package/dist/cjs/types/Interface/api/revenueMovement.js.map +1 -0
  21. package/dist/cjs/types/Interface/api/revenueSnapshot.d.ts +57 -0
  22. package/dist/cjs/types/Interface/api/revenueSnapshot.d.ts.map +1 -0
  23. package/dist/cjs/types/Interface/api/revenueSnapshot.js +3 -0
  24. package/dist/cjs/types/Interface/api/revenueSnapshot.js.map +1 -0
  25. package/dist/cjs/types/Interface/api/revenueSnapshotGenerate.d.ts +9 -0
  26. package/dist/cjs/types/Interface/api/revenueSnapshotGenerate.d.ts.map +1 -0
  27. package/dist/cjs/types/Interface/api/revenueSnapshotGenerate.js +61 -0
  28. package/dist/cjs/types/Interface/api/revenueSnapshotGenerate.js.map +1 -0
  29. package/dist/cjs/types/Interface/models/IRevenueMovement.d.ts +37 -0
  30. package/dist/cjs/types/Interface/models/IRevenueMovement.d.ts.map +1 -0
  31. package/dist/cjs/types/Interface/models/IRevenueMovement.js +3 -0
  32. package/dist/cjs/types/Interface/models/IRevenueMovement.js.map +1 -0
  33. package/dist/cjs/types/Interface/models/IRevenueSnapshot.d.ts +38 -0
  34. package/dist/cjs/types/Interface/models/IRevenueSnapshot.d.ts.map +1 -0
  35. package/dist/cjs/types/Interface/models/IRevenueSnapshot.js +3 -0
  36. package/dist/cjs/types/Interface/models/IRevenueSnapshot.js.map +1 -0
  37. package/dist/cjs/types/Interface/models/IStateBankAccount.d.ts +2 -1
  38. package/dist/cjs/types/Interface/models/IStateBankAccount.d.ts.map +1 -1
  39. package/dist/cjs/types/Interface/models/IStateBankAccount.js.map +1 -1
  40. package/dist/cjs/types/index.d.ts +6 -0
  41. package/dist/cjs/types/index.d.ts.map +1 -1
  42. package/dist/cjs/types/index.js +7 -0
  43. package/dist/cjs/types/index.js.map +1 -1
  44. package/dist/mjs/api/resources/Revenue.d.ts +55 -0
  45. package/dist/mjs/api/resources/Revenue.d.ts.map +1 -0
  46. package/dist/mjs/api/resources/Revenue.js +52 -0
  47. package/dist/mjs/api/resources/Revenue.js.map +1 -0
  48. package/dist/mjs/api/resources.d.ts +2 -0
  49. package/dist/mjs/api/resources.d.ts.map +1 -1
  50. package/dist/mjs/api/resources.js +2 -0
  51. package/dist/mjs/api/resources.js.map +1 -1
  52. package/dist/mjs/types/Enum/BankAccountType.d.ts +5 -0
  53. package/dist/mjs/types/Enum/BankAccountType.d.ts.map +1 -1
  54. package/dist/mjs/types/Enum/BankAccountType.js +6 -0
  55. package/dist/mjs/types/Enum/BankAccountType.js.map +1 -1
  56. package/dist/mjs/types/Enum/Revenue.d.ts +33 -0
  57. package/dist/mjs/types/Enum/Revenue.d.ts.map +1 -0
  58. package/dist/mjs/types/Enum/Revenue.js +35 -0
  59. package/dist/mjs/types/Enum/Revenue.js.map +1 -0
  60. package/dist/mjs/types/Interface/api/revenueMovement.d.ts +69 -0
  61. package/dist/mjs/types/Interface/api/revenueMovement.d.ts.map +1 -0
  62. package/dist/mjs/types/Interface/api/revenueMovement.js +2 -0
  63. package/dist/mjs/types/Interface/api/revenueMovement.js.map +1 -0
  64. package/dist/mjs/types/Interface/api/revenueSnapshot.d.ts +57 -0
  65. package/dist/mjs/types/Interface/api/revenueSnapshot.d.ts.map +1 -0
  66. package/dist/mjs/types/Interface/api/revenueSnapshot.js +2 -0
  67. package/dist/mjs/types/Interface/api/revenueSnapshot.js.map +1 -0
  68. package/dist/mjs/types/Interface/api/revenueSnapshotGenerate.d.ts +9 -0
  69. package/dist/mjs/types/Interface/api/revenueSnapshotGenerate.d.ts.map +1 -0
  70. package/dist/mjs/types/Interface/api/revenueSnapshotGenerate.js +60 -0
  71. package/dist/mjs/types/Interface/api/revenueSnapshotGenerate.js.map +1 -0
  72. package/dist/mjs/types/Interface/models/IRevenueMovement.d.ts +37 -0
  73. package/dist/mjs/types/Interface/models/IRevenueMovement.d.ts.map +1 -0
  74. package/dist/mjs/types/Interface/models/IRevenueMovement.js +2 -0
  75. package/dist/mjs/types/Interface/models/IRevenueMovement.js.map +1 -0
  76. package/dist/mjs/types/Interface/models/IRevenueSnapshot.d.ts +38 -0
  77. package/dist/mjs/types/Interface/models/IRevenueSnapshot.d.ts.map +1 -0
  78. package/dist/mjs/types/Interface/models/IRevenueSnapshot.js +2 -0
  79. package/dist/mjs/types/Interface/models/IRevenueSnapshot.js.map +1 -0
  80. package/dist/mjs/types/Interface/models/IStateBankAccount.d.ts +2 -1
  81. package/dist/mjs/types/Interface/models/IStateBankAccount.d.ts.map +1 -1
  82. package/dist/mjs/types/Interface/models/IStateBankAccount.js.map +1 -1
  83. package/dist/mjs/types/index.d.ts +6 -0
  84. package/dist/mjs/types/index.d.ts.map +1 -1
  85. package/dist/mjs/types/index.js +7 -0
  86. package/dist/mjs/types/index.js.map +1 -1
  87. package/package.json +1 -1
  88. package/ts/api/resources/Revenue.ts +81 -0
  89. package/ts/api/resources.ts +2 -0
  90. package/ts/types/Enum/BankAccountType.ts +7 -1
  91. package/ts/types/Enum/Revenue.ts +42 -0
  92. package/ts/types/Interface/api/revenueMovement.ts +74 -0
  93. package/ts/types/Interface/api/revenueSnapshot.ts +59 -0
  94. package/ts/types/Interface/api/revenueSnapshotGenerate.ts +42 -0
  95. package/ts/types/Interface/models/IRevenueMovement.ts +51 -0
  96. package/ts/types/Interface/models/IRevenueSnapshot.ts +55 -0
  97. package/ts/types/Interface/models/IStateBankAccount.ts +2 -1
  98. package/ts/types/index.ts +8 -0
@@ -0,0 +1,81 @@
1
+ import { Resource } from '../Resource';
2
+ import {
3
+ IGetRevenueMovementsRequest,
4
+ IGetRevenueSnapshotsRequest,
5
+ IGetArrSummaryResponse,
6
+ ICreateRevenueMovementRequest,
7
+ IUpdateRevenueMovementRequest,
8
+ } from '../../types';
9
+
10
+ export class Revenue extends Resource {
11
+ /**
12
+ * Récupérer les mouvements de revenu
13
+ */
14
+ public movements = {
15
+ getAll: (params: IGetRevenueMovementsRequest) => {
16
+ return this.axios.$get('/revenue/movements', { params });
17
+ },
18
+
19
+ get: (id: number) => {
20
+ return this.axios.$get(`/revenue/movements/${id}`);
21
+ },
22
+
23
+ create: (data: ICreateRevenueMovementRequest) => {
24
+ return this.axios.$post('/revenue/movements', data);
25
+ },
26
+
27
+ update: (id: number, data: IUpdateRevenueMovementRequest) => {
28
+ return this.axios.$put(`/revenue/movements/${id}`, data);
29
+ },
30
+
31
+ delete: (id: number) => {
32
+ return this.axios.$delete(`/revenue/movements/${id}`);
33
+ },
34
+ };
35
+
36
+ /**
37
+ * Récupérer les snapshots de revenu
38
+ */
39
+ public snapshots = {
40
+ getAll: (params: IGetRevenueSnapshotsRequest) => {
41
+ return this.axios.$get('/revenue/snapshots', { params });
42
+ },
43
+
44
+ getLatest: (params: { idSociety?: number; idExercice?: number }) => {
45
+ return this.axios.$get('/revenue/snapshots/latest', { params });
46
+ },
47
+
48
+ generate: (data: { date?: string; idSociety?: number; idExercice?: number }) => {
49
+ return this.axios.$post('/revenue/snapshots/generate', data);
50
+ },
51
+
52
+ generateAll: (data: { date?: string }) => {
53
+ return this.axios.$post('/revenue/snapshots/generate-all', data);
54
+ },
55
+ };
56
+
57
+ /**
58
+ * Récupérer le résumé ARR
59
+ */
60
+ public arrSummary = {
61
+ get: (params: {
62
+ idSociety?: number;
63
+ idExercice?: number;
64
+ startDate?: string;
65
+ endDate?: string;
66
+ }): Promise<IGetArrSummaryResponse> => {
67
+ return this.axios.$get('/revenue/arr-summary', { params });
68
+ },
69
+
70
+ getSociety: (
71
+ idSociety: number,
72
+ params: {
73
+ idExercice?: number;
74
+ startDate?: string;
75
+ endDate?: string;
76
+ },
77
+ ): Promise<IGetArrSummaryResponse> => {
78
+ return this.axios.$get(`/revenue/societies/${idSociety}/arr-summary`, { params });
79
+ },
80
+ };
81
+ }
@@ -185,6 +185,7 @@ import { StripePurchase } from './resources/StripePurchase';
185
185
  import { DashboardLayout } from './resources/DashboardLayout';
186
186
  import { DocumentRequest } from './resources/DocumentRequest';
187
187
  import { BalanceSheetReport } from './resources/BalanceSheetReport';
188
+ import { Revenue } from './resources/Revenue';
188
189
 
189
190
  export const resources = {
190
191
  budgetInsight: BudgetInsight,
@@ -374,4 +375,5 @@ export const resources = {
374
375
  StripePurchase: StripePurchase,
375
376
  documentRequest: DocumentRequest,
376
377
  balanceSheetReport: BalanceSheetReport,
378
+ revenue: Revenue,
377
379
  };
@@ -4,6 +4,12 @@ export enum BankAccountType {
4
4
  EXPENSE = 3,
5
5
  }
6
6
 
7
+ export enum BankAccountBalanceState {
8
+ DESYNCHRONIZED = 0,
9
+ SYNCHRONIZED = 1,
10
+ NA = 2, // This value is for manual bank accounts where balance synchronization is not applicable
11
+ }
12
+
7
13
  export type BankAccountSubType =
8
14
  | 'article83'
9
15
  | 'capitalisation'
@@ -25,4 +31,4 @@ export type BankAccountSubType =
25
31
  | 'real_estate'
26
32
  | 'rsp'
27
33
  | 'savings'
28
- | 'unknown';
34
+ | 'unknown';
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Type de mouvement de revenu
3
+ */
4
+ export enum RevenueMovementType {
5
+ /** Nouveau booking (nouvelle prestation souscrite) */
6
+ BOOKING = 1,
7
+
8
+ /** Churn (résiliation client) */
9
+ CHURN = 2,
10
+
11
+ /** Provision (revenu différé) */
12
+ PROVISION = 3,
13
+
14
+ /** Reconnaissance de revenu */
15
+ RECOGNITION = 4,
16
+
17
+ /** Upgrade (augmentation de prestation) */
18
+ UPGRADE = 5,
19
+
20
+ /** Downgrade (réduction de prestation) */
21
+ DOWNGRADE = 6,
22
+
23
+ /** Reactivation (client qui revient) */
24
+ REACTIVATION = 7,
25
+ }
26
+
27
+ /**
28
+ * Type de périodicité pour les prestations
29
+ */
30
+ export enum PrestationPeriodicity {
31
+ /** Mensuel */
32
+ MONTHLY = 1,
33
+
34
+ /** Trimestriel */
35
+ QUARTERLY = 2,
36
+
37
+ /** Annuel */
38
+ YEARLY = 3,
39
+
40
+ /** Paiement unique (non récurrent) */
41
+ ONE_TIME = 4,
42
+ }
@@ -0,0 +1,74 @@
1
+ import { RevenueMovementType } from '../../Enum/Revenue';
2
+
3
+ /**
4
+ * DTO pour créer un mouvement de revenu
5
+ */
6
+ export interface ICreateRevenueMovementRequest {
7
+ type: RevenueMovementType;
8
+ idSociety: number;
9
+ idExercice?: number;
10
+ idPrestation?: number;
11
+ idTerminationList?: number;
12
+ amount: number;
13
+ mrr: number;
14
+ arr: number;
15
+ movementDate: Date;
16
+ description?: string;
17
+ metadata?: Record<string, any>;
18
+ }
19
+
20
+ /**
21
+ * DTO pour mettre à jour un mouvement de revenu
22
+ */
23
+ export interface IUpdateRevenueMovementRequest {
24
+ type?: RevenueMovementType;
25
+ idTerminationList?: number;
26
+ amount?: number;
27
+ mrr?: number;
28
+ arr?: number;
29
+ movementDate?: Date | string;
30
+ description?: string;
31
+ metadata?: Record<string, any>;
32
+ }
33
+
34
+ /**
35
+ * Filtres pour récupérer les mouvements de revenu
36
+ */
37
+ export interface IGetRevenueMovementsRequest {
38
+ idSociety?: number;
39
+ idExercice?: number;
40
+ idPrestation?: number;
41
+ idTerminationList?: number;
42
+ type?: RevenueMovementType[];
43
+ startDate?: Date | string;
44
+ endDate?: Date | string;
45
+ page?: number;
46
+ limit?: number;
47
+ }
48
+
49
+ /**
50
+ * Réponse paginée pour les mouvements de revenu
51
+ */
52
+ export interface IGetRevenueMovementsResponse {
53
+ movements: any[]; // IRevenueMovement[]
54
+ total: number;
55
+ page: number;
56
+ limit: number;
57
+ totalPages: number;
58
+ }
59
+
60
+ /**
61
+ * DTO pour générer un snapshot de revenu
62
+ */
63
+ export interface IGenerateSnapshotRequest {
64
+ date?: string;
65
+ idSociety?: number;
66
+ idExercice?: number;
67
+ }
68
+
69
+ /**
70
+ * DTO pour générer tous les snapshots de revenu
71
+ */
72
+ export interface IGenerateAllSnapshotsRequest {
73
+ date?: string;
74
+ }
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Filtres pour récupérer les snapshots de revenu
3
+ */
4
+ export interface IGetRevenueSnapshotsRequest {
5
+ idSociety?: number;
6
+ idExercice?: number;
7
+ startDate?: Date | string;
8
+ endDate?: Date | string;
9
+ page?: number;
10
+ limit?: number;
11
+ }
12
+
13
+ /**
14
+ * Réponse paginée pour les snapshots de revenu
15
+ */
16
+ export interface IGetRevenueSnapshotsResponse {
17
+ snapshots: any[]; // IRevenueSnapshot[]
18
+ total: number;
19
+ page: number;
20
+ limit: number;
21
+ totalPages: number;
22
+ }
23
+
24
+ /**
25
+ * Réponse pour obtenir le dernier snapshot d'une société
26
+ */
27
+ export interface IGetLatestSnapshotResponse {
28
+ snapshot: any; // IRevenueSnapshot
29
+ }
30
+
31
+ /**
32
+ * Réponse pour obtenir le tableau récapitulatif ARR
33
+ */
34
+ export interface IGetArrSummaryResponse {
35
+ idSociety?: number;
36
+ idExercice?: number;
37
+ period: {
38
+ startDate: Date;
39
+ endDate: Date;
40
+ };
41
+ summary: {
42
+ currentArr: number;
43
+ currentMrr: number;
44
+ totalBookings: number;
45
+ totalChurn: number;
46
+ totalProvisions: number;
47
+ totalRecognitions: number;
48
+ activeCustomers: number;
49
+ churnRate: number;
50
+ mrrGrowthRate: number;
51
+ };
52
+ timeline: Array<{
53
+ date: Date;
54
+ arr: number;
55
+ mrr: number;
56
+ bookings: number;
57
+ churn: number;
58
+ }>;
59
+ }
@@ -0,0 +1,42 @@
1
+ import { ApiProperty } from '../../../utils';
2
+ import { IsOptional, IsString, IsNumber } from 'class-validator';
3
+
4
+ export class GenerateSnapshot {
5
+ @ApiProperty({
6
+ required: false,
7
+ description: 'Date du snapshot au format ISO (YYYY-MM-DD)',
8
+ example: '2025-11-04',
9
+ })
10
+ @IsOptional()
11
+ @IsString()
12
+ date?: string;
13
+
14
+ @ApiProperty({
15
+ required: false,
16
+ description: 'ID de la société',
17
+ example: 60170,
18
+ })
19
+ @IsOptional()
20
+ @IsNumber()
21
+ idSociety?: number;
22
+
23
+ @ApiProperty({
24
+ required: false,
25
+ description: "ID de l'exercice",
26
+ example: 123456,
27
+ })
28
+ @IsOptional()
29
+ @IsNumber()
30
+ idExercice?: number;
31
+ }
32
+
33
+ export class GenerateAllSnapshots {
34
+ @ApiProperty({
35
+ required: false,
36
+ description: 'Date du snapshot au format ISO (YYYY-MM-DD)',
37
+ example: '2025-11-04',
38
+ })
39
+ @IsOptional()
40
+ @IsString()
41
+ date?: string;
42
+ }
@@ -0,0 +1,51 @@
1
+ import { RevenueMovementType } from '../../Enum/Revenue';
2
+
3
+ /**
4
+ * Interface pour les mouvements de revenus (bookings, churn, provisions, etc.)
5
+ */
6
+ export interface IRevenueMovement {
7
+ /** ID unique du mouvement */
8
+ id: number;
9
+
10
+ /** Type de mouvement (booking, churn, provision, etc.) */
11
+ type: RevenueMovementType;
12
+
13
+ /** ID de la société concernée */
14
+ idSociety: number;
15
+
16
+ /** ID de l'exercice concerné (optionnel) */
17
+ idExercice?: number | null;
18
+
19
+ /** ID de la prestation concernée (optionnel) */
20
+ idPrestation?: number | null;
21
+
22
+ /** ID de la résiliation qui a annulé ce mouvement (pour traçabilité) */
23
+ idTerminationList?: number | null;
24
+
25
+ /** Montant du mouvement (en centimes) */
26
+ amount: number;
27
+
28
+ /** Montant MRR (Monthly Recurring Revenue) en centimes */
29
+ mrr: number;
30
+
31
+ /** Montant ARR (Annual Recurring Revenue) en centimes */
32
+ arr: number;
33
+
34
+ /** Date du mouvement */
35
+ movementDate: Date;
36
+
37
+ /** Description/commentaire du mouvement */
38
+ description?: string | null;
39
+
40
+ /** Métadonnées additionnelles (JSON) */
41
+ metadata?: Record<string, any> | null;
42
+
43
+ /** Date de création */
44
+ createdAt: Date;
45
+
46
+ /** Date de mise à jour */
47
+ updatedAt: Date;
48
+
49
+ /** Date de suppression (soft delete) */
50
+ deletedAt?: Date | null;
51
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Interface pour les snapshots quotidiens d'ARR par société/exercice
3
+ */
4
+ export interface IRevenueSnapshot {
5
+ /** ID unique du snapshot */
6
+ id: number;
7
+
8
+ /** ID de la société concernée (null = snapshot global toutes sociétés) */
9
+ idSociety?: number | null;
10
+
11
+ /** ID de l'exercice concerné (null = snapshot global tous exercices) */
12
+ idExercice?: number | null;
13
+
14
+ /** Date du snapshot */
15
+ snapshotDate: Date;
16
+
17
+ /** ARR total à cette date (en centimes) */
18
+ arr: number;
19
+
20
+ /** MRR total à cette date (en centimes) */
21
+ mrr: number;
22
+
23
+ /** Total des bookings du mois en cours (en centimes) */
24
+ monthlyBookings: number;
25
+
26
+ /** Total du churn du mois en cours (en centimes) */
27
+ monthlyChurn: number;
28
+
29
+ /** Provisions en attente de reconnaissance (en centimes) */
30
+ pendingProvisions: number;
31
+
32
+ /** Reconnaissances du mois en cours (en centimes) */
33
+ monthlyRecognitions: number;
34
+
35
+ /** Nombre de clients actifs */
36
+ // Optionnel, voir si utile ?
37
+ activeCustomers: number;
38
+
39
+ /** Taux de churn du mois (en pourcentage) */
40
+ // Optionnel, voir si utile ?
41
+ churnRate?: number | null;
42
+
43
+ /** Croissance MRR vs mois précédent (en pourcentage) */
44
+ // Optionnel, voir si utile ?
45
+ mrrGrowthRate?: number | null;
46
+
47
+ /** Métadonnées additionnelles (JSON) */
48
+ metadata?: Record<string, any> | null;
49
+
50
+ /** Date de création */
51
+ createdAt: Date;
52
+
53
+ /** Date de mise à jour */
54
+ updatedAt: Date;
55
+ }
@@ -1,10 +1,11 @@
1
+ import { BankAccountBalanceState } from '../../Enum/BankAccountType';
1
2
  import { IBankAccount } from './IBankAccount';
2
3
  import { IExercice } from './IExercice';
3
4
 
4
5
  // stateBankAccount
5
6
  export interface IStateBankAccount {
6
7
  id?: number;
7
- balanceState?: boolean | null;
8
+ balanceState?: BankAccountBalanceState | null;
8
9
  balanceValue?: number | null;
9
10
  balanceDate?: Date | null;
10
11
  idBankAccount: number;
package/ts/types/index.ts CHANGED
@@ -1185,3 +1185,11 @@ export * from './Interface/api/regulation/Create';
1185
1185
  export * from './Interface/api/marketing/NewLeadSheet';
1186
1186
  export * from './Interface/api/ai/AskQuestionCollaborator';
1187
1187
  export * from './Interface/api/refund/QueryRefundPaginated';
1188
+
1189
+ // Revenue tracking interfaces
1190
+ export * from './Interface/models/IRevenueMovement';
1191
+ export * from './Interface/models/IRevenueSnapshot';
1192
+ export * from './Interface/api/revenueMovement';
1193
+ export * from './Interface/api/revenueSnapshot';
1194
+ export * from './Interface/api/revenueSnapshotGenerate';
1195
+ export * from './Enum/Revenue';