@silexpert/core 2.0.116 → 2.0.117
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/dist/api/resources/Acd.d.ts +1 -2
- package/dist/api/resources/Acd.d.ts.map +1 -1
- package/dist/api/resources/Acd.js +0 -3
- package/dist/api/resources/Acd.js.map +1 -1
- package/dist/api/resources/Appointment.d.ts +18 -0
- package/dist/api/resources/Appointment.d.ts.map +1 -0
- package/dist/api/resources/Appointment.js +34 -0
- package/dist/api/resources/Appointment.js.map +1 -0
- package/dist/api/resources/Authenticate.d.ts +4 -5
- package/dist/api/resources/Authenticate.d.ts.map +1 -1
- package/dist/api/resources/Authenticate.js +3 -4
- package/dist/api/resources/Authenticate.js.map +1 -1
- package/dist/api/resources/BalanceSheetSupervision.d.ts +1 -1
- package/dist/api/resources/Checklist.d.ts +1 -1
- package/dist/api/resources/Fusion.d.ts +4 -1
- package/dist/api/resources/Fusion.d.ts.map +1 -1
- package/dist/api/resources/Revenue.d.ts +27 -12
- package/dist/api/resources/Revenue.d.ts.map +1 -1
- package/dist/api/resources/Society.d.ts +1 -3
- package/dist/api/resources/Society.d.ts.map +1 -1
- package/dist/api/resources/Society.js +0 -6
- package/dist/api/resources/Society.js.map +1 -1
- package/dist/api/resources.d.ts +2 -2
- package/dist/api/resources.d.ts.map +1 -1
- package/dist/api/resources.js +2 -2
- package/dist/api/resources.js.map +1 -1
- package/dist/types/Enum/AIPrompt.d.ts +11 -1
- package/dist/types/Enum/AIPrompt.d.ts.map +1 -1
- package/dist/types/Enum/AIPrompt.js +62 -0
- package/dist/types/Enum/AIPrompt.js.map +1 -1
- package/dist/types/Enum/Aspone.d.ts +87 -87
- package/dist/types/Enum/Aspone.d.ts.map +1 -1
- package/dist/types/Enum/Aspone.js.map +1 -1
- package/dist/types/Enum/BalanceSheetQuestionWording.d.ts +7 -7
- package/dist/types/Enum/BalanceSheetQuestionWording.d.ts.map +1 -1
- package/dist/types/Enum/BalanceSheetQuestionWording.js.map +1 -1
- package/dist/types/Enum/Log.d.ts +12 -1
- package/dist/types/Enum/Log.d.ts.map +1 -1
- package/dist/types/Enum/Log.js +11 -0
- package/dist/types/Enum/Log.js.map +1 -1
- package/dist/types/Enum/PrestationType.d.ts +2 -1
- package/dist/types/Enum/PrestationType.d.ts.map +1 -1
- package/dist/types/Enum/PrestationType.js +20 -0
- package/dist/types/Enum/PrestationType.js.map +1 -1
- package/dist/types/Interface/api/acd/Vat.d.ts +1 -0
- package/dist/types/Interface/api/acd/Vat.d.ts.map +1 -1
- package/dist/types/Interface/api/acd/Vat.js +1 -0
- package/dist/types/Interface/api/acd/Vat.js.map +1 -1
- package/dist/types/Interface/api/appointment/Appointment.d.ts +36 -0
- package/dist/types/Interface/api/appointment/Appointment.d.ts.map +1 -0
- package/dist/types/Interface/api/appointment/Appointment.js +70 -0
- package/dist/types/Interface/api/appointment/Appointment.js.map +1 -0
- package/dist/types/Interface/api/authentification/ForgotPassword.d.ts +0 -1
- package/dist/types/Interface/api/authentification/ForgotPassword.d.ts.map +1 -1
- package/dist/types/Interface/api/authentification/ForgotPassword.js +1 -8
- package/dist/types/Interface/api/authentification/ForgotPassword.js.map +1 -1
- package/dist/types/Interface/api/docoon/Create.d.ts +3 -0
- package/dist/types/Interface/api/docoon/Create.d.ts.map +1 -1
- package/dist/types/Interface/api/docoon/Create.js +9 -1
- package/dist/types/Interface/api/docoon/Create.js.map +1 -1
- package/dist/types/Interface/api/inpi/inpi.d.ts +7 -0
- package/dist/types/Interface/api/inpi/inpi.d.ts.map +1 -1
- package/dist/types/Interface/api/inpi/inpi.js.map +1 -1
- package/dist/types/Interface/api/payment/Params.d.ts +9 -0
- package/dist/types/Interface/api/payment/Params.d.ts.map +1 -1
- package/dist/types/Interface/api/payment/Params.js +51 -1
- package/dist/types/Interface/api/payment/Params.js.map +1 -1
- package/dist/types/Interface/api/societyCreationCheckout/SocietyCreationCheckout.d.ts +4 -0
- package/dist/types/Interface/api/societyCreationCheckout/SocietyCreationCheckout.d.ts.map +1 -1
- package/dist/types/Interface/api/societyCreationCheckout/SocietyCreationCheckout.js.map +1 -1
- package/dist/types/Interface/api/user/RegisterProspect.d.ts +3 -1
- package/dist/types/Interface/api/user/RegisterProspect.d.ts.map +1 -1
- package/dist/types/Interface/api/user/RegisterProspect.js.map +1 -1
- package/dist/types/index.d.ts +1 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -2
- package/dist/types/index.js.map +1 -1
- package/dist/utils/email.d.ts.map +1 -1
- package/dist/utils/email.js +3 -19
- package/dist/utils/email.js.map +1 -1
- package/package.json +15 -20
- package/ts/api/resources/Acd.ts +1 -5
- package/ts/api/resources/Appointment.ts +52 -0
- package/ts/api/resources/Authenticate.ts +5 -7
- package/ts/api/resources/Society.ts +0 -11
- package/ts/api/resources.ts +2 -2
- package/ts/types/Enum/AIPrompt.ts +76 -2
- package/ts/types/Enum/Aspone.ts +87 -87
- package/ts/types/Enum/BalanceSheetQuestionWording.ts +7 -7
- package/ts/types/Enum/Log.ts +12 -0
- package/ts/types/Enum/PrestationType.ts +20 -0
- package/ts/types/Interface/api/acd/Vat.ts +1 -0
- package/ts/types/Interface/api/appointment/Appointment.ts +63 -0
- package/ts/types/Interface/api/authentification/ForgotPassword.ts +1 -6
- package/ts/types/Interface/api/docoon/Create.ts +7 -0
- package/ts/types/Interface/api/inpi/inpi.ts +8 -0
- package/ts/types/Interface/api/payment/Params.ts +41 -1
- package/ts/types/Interface/api/societyCreationCheckout/SocietyCreationCheckout.ts +4 -0
- package/ts/types/Interface/api/user/RegisterProspect.ts +3 -1
- package/ts/types/index.ts +1 -2
- package/ts/utils/email.ts +3 -20
- package/dist/api/resources/Step.d.ts +0 -7
- package/dist/api/resources/Step.d.ts.map +0 -1
- package/dist/api/resources/Step.js +0 -8
- package/dist/api/resources/Step.js.map +0 -1
- package/dist/types/Interface/api/pappers/CreatePappers.d.ts +0 -34
- package/dist/types/Interface/api/pappers/CreatePappers.d.ts.map +0 -1
- package/dist/types/Interface/api/pappers/CreatePappers.js +0 -2
- package/dist/types/Interface/api/pappers/CreatePappers.js.map +0 -1
- package/dist/types/Interface/api/society/CreateSociety.d.ts +0 -36
- package/dist/types/Interface/api/society/CreateSociety.d.ts.map +0 -1
- package/dist/types/Interface/api/society/CreateSociety.js +0 -130
- package/dist/types/Interface/api/society/CreateSociety.js.map +0 -1
- package/ts/api/resources/Step.ts +0 -8
- package/ts/types/Interface/api/pappers/CreatePappers.ts +0 -37
- package/ts/types/Interface/api/society/CreateSociety.ts +0 -80
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../ts/utils/email.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../ts/utils/email.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,oCAAoC,CAAC;AAiI3D,wBAAgB,WAAW,CAAC,IAAI,EAAE,KAAK,oGAqDtC;AAsCD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CAuKrD"}
|
package/dist/utils/email.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import ejs from 'ejs';
|
|
2
2
|
import { Role } from '../types/Enum/Role.js';
|
|
3
|
-
import { TimeSlot } from '../types/Enum/TimeSlot.js';
|
|
4
3
|
import { getBrand, getBrandConfig } from './brands.js';
|
|
5
4
|
import { signatureTemplate } from './email/templates/signature.js';
|
|
6
5
|
import { intersection } from './noLodash.js';
|
|
@@ -187,7 +186,7 @@ function getPhoneSignature(user) {
|
|
|
187
186
|
return null;
|
|
188
187
|
}
|
|
189
188
|
export function generateSignature(params) {
|
|
190
|
-
const { fromAddress = null, idTypeBrand = 1,
|
|
189
|
+
const { fromAddress = null, idTypeBrand = 1, calendlyUrl = null, ...otherParams } = params;
|
|
191
190
|
let { user, forceRole = null } = otherParams;
|
|
192
191
|
const brand = getBrand({ idTypeBrand });
|
|
193
192
|
const hostS3 = brand.urlS3;
|
|
@@ -326,23 +325,8 @@ export function generateSignature(params) {
|
|
|
326
325
|
horaires = getHoraires(user);
|
|
327
326
|
phoneSignature = getPhoneSignature(user);
|
|
328
327
|
}
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
if (society?.id &&
|
|
332
|
-
user?.roles?.some((r) => [Role.FRONT_OFFICE, Role.FACTURATION, Role.JURIDIC, Role.COMMERCIAL].includes(r.id)) &&
|
|
333
|
-
user?.usersTimeSlots?.length) {
|
|
334
|
-
const isJuridic = user?.roles?.some((r) => [Role.JURIDIC].includes(r.id));
|
|
335
|
-
const isFactu = user?.roles?.some((r) => [Role.FACTURATION].includes(r.id));
|
|
336
|
-
const isCommercial = user?.roles?.some((r) => [Role.COMMERCIAL].includes(r.id));
|
|
337
|
-
let idType = TimeSlot.BILAN;
|
|
338
|
-
if (isJuridic)
|
|
339
|
-
idType = TimeSlot.EDIT_SOCIETY;
|
|
340
|
-
if (isFactu)
|
|
341
|
-
idType = TimeSlot.BILLING;
|
|
342
|
-
if (isCommercial)
|
|
343
|
-
idType = TimeSlot.SALES;
|
|
344
|
-
const urlApp = brand.urlApp || '';
|
|
345
|
-
user.calendlyUrl = `${urlApp}/appointment?uuid=${society?.externalId ? society.externalId : ''}&idType=${idType}`;
|
|
328
|
+
if (calendlyUrl) {
|
|
329
|
+
user.calendlyUrl = calendlyUrl;
|
|
346
330
|
}
|
|
347
331
|
return ejs.render(signatureTemplate, {
|
|
348
332
|
forceRole,
|
package/dist/utils/email.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../ts/utils/email.ts"],"names":[],"mappings":"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","sourcesContent":["import ejs from 'ejs';\nimport { Role } from '../types/Enum/Role.js';\nimport { TimeSlot } from '../types/Enum/TimeSlot.js';\nimport { IUser } from '../types/Interface/models/IUser.js';\nimport { getBrand, getBrandConfig } from './brands.js';\nimport { signatureTemplate } from './email/templates/signature.js';\nimport { intersection } from './noLodash.js';\nimport { IRole } from '../types/Interface/models/IRole.js';\n\nfunction getRoleSignature(user: any) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n if (user.positionLabel) return user.positionLabel;\n\n const isStagiaireOrAlternant =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n user.roles.map((r: any) => r.id).includes(Role.INTERN) || user.roles.map((r: any) => r.id).includes(Role.ALTERNATE);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n const isManager = user.roles.map((r: any) => r.id).includes(Role.MANAGER);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n const isSocial = user.roles.map((r: any) => r.id).includes(Role.SOCIAL);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n const isJuridic = user.roles.map((r: any) => r.id).includes(Role.JURIDIC);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n const isFacturation = user.roles.map((r: any) => r.id).includes(Role.FACTURATION);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n const isExpert = user.roles.map((r: any) => r.id).includes(Role.EXPERT_ACCOUNTANT);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n const isCS = user.roles.map((r: any) => r.id).includes(Role.CUSTOMER_SUCCESS);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n const isOnBoarder = user.roles.map((r: any) => r.id).includes(Role.ON_BOARDER);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n const isSatisfaction = user.roles.map((r: any) => r.id).includes(Role.SATISFACTION);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n const isDataOfficer = user.roles.map((r: any) => r.id).includes(Role.DATA_OFFICER);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n const isSales = user.roles.map((r: any) => r.id).includes(Role.COMMERCIAL);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n const isAdmin = user.roles.map((r: any) => r.id).includes(Role.ADMIN);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n const isTechnicalAdvisor = user.roles.map((r: any) => r.id).includes(Role.TECHNICAL_ADVISOR);\n\n const isFront = !!intersection(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n user.roles.map((r: any) => r.id),\n [Role.FRONT_OFFICE, Role.FRONT_OFFICE_EXPRESS],\n ).length;\n\n if (isSales && isManager) {\n return 'Responsable commercial';\n }\n if (isSales) {\n return `Chargé${user.idCivility === 2 ? 'e' : ''} de clientèle`;\n }\n\n if (isCS && isManager) {\n return 'Responsable relations clients';\n }\n if (isCS) {\n return `Conseill${user.idCivility === 2 ? 'ère' : 'er'} comptable`;\n }\n\n if (isTechnicalAdvisor) {\n return `Référent${user.idCivility === 2 ? 'e' : ''} technique`;\n }\n\n if (isOnBoarder && isManager) {\n return `Responsable chargé${user.idCivility === 2 ? 'e' : ''} accueil clients`;\n }\n if (isOnBoarder) {\n return `Chargé${user.idCivility === 2 ? 'e' : ''} accueil clients`;\n }\n\n if (isSatisfaction && isManager) {\n return `Responsable chargé${user.idCivility === 2 ? 'e' : ''} de la satisfaction clients`;\n }\n if (isSatisfaction) {\n return `Chargé${user.idCivility === 2 ? 'e' : ''} de la satisfaction clients`;\n }\n\n if (isDataOfficer && isManager) {\n return 'Responsable aide comptable';\n }\n if (isDataOfficer) {\n return 'Aide comptable';\n }\n\n if (isFacturation && isStagiaireOrAlternant) {\n return 'Assistant facturation';\n }\n if (isFacturation && isManager) {\n return 'Responsable facturation';\n }\n if (isFacturation) {\n return `Chargé${user.idCivility === 2 ? 'e' : ''} de facturation`;\n }\n\n if (isJuridic && isStagiaireOrAlternant) {\n return 'Assistant juridique';\n }\n if (isJuridic && isManager) {\n return 'Responsable juridique';\n }\n if (isJuridic) {\n return 'Juriste';\n }\n\n if (isSocial && isStagiaireOrAlternant) {\n return 'Assistant paie';\n }\n if (isSocial && isManager) {\n return 'Responsable paie';\n }\n if (isSocial) {\n return 'Gestionnaire de paie';\n }\n\n if (isExpert) {\n return `Expert${user.idCivility === 2 ? 'e' : ''}-comptable`;\n }\n\n if (isAdmin) {\n return 'Développeur web';\n }\n\n if (isFront && isManager) return 'Responsable comptable';\n if (isFront && isStagiaireOrAlternant) return 'Assistant comptable';\n // if (isFront) return `Comptable dédié${user.idCivility === 2 ? 'e' : ''}`;\n // return `Comptable dédié${user.idCivility === 2 ? 'e' : ''}`;\n // if (isFront) return `Comptable`;\n return 'Comptable';\n}\n\nexport function getHoraires(user: IUser) {\n // On affiche les horaires uniquement pour les front, et pas pour les TVA\n\n // if (\n // isItThisEnv('Pourcentage') &&\n // user?.entity &&\n // [EntityType.COMPTALIB, EntityType.AMEX, EntityType.CABINET_RONCHIERI_LANDRA].includes(user.entity)\n // ) {\n // return 'Du lundi au vendredi de 9h à 18h';\n // }\n\n if (user?.roles?.map((r: IRole) => r.id).includes(Role.COMMERCIAL)) {\n return 'Du lundi au vendredi de 9h à 18h';\n }\n\n return 'Du lundi au jeudi de 9h à 17h<br/>Le vendredi de 9h à 12h';\n\n // if (!intersection([user.roles.map((r: any) => r.id), [Role.FRONT_OFFICE, Role.FRONT_OFFICE_EXPRESS, Role.COMMERCIAL]]).length) return 'Du lundi au vendredi de 9h à 18h';\n\n // if (!user.workingSchedules.length) return 'Du lundi au vendredi de 9h à 18h';\n\n // let reducedSchedules = user.workingSchedules.reduce((acc: any, e:any, index: number) => {\n // const name = `${dayjs(e.morningStart, 'HH:mm:ss').format('HH:mm')}-${dayjs(e.afternoonEnd || e.morningEnd, 'HH:mm:ss').format('HH:mm')}`;\n // if (!acc[name]) acc[name] = [index];\n // else acc[name].push(index);\n // return acc;\n // }, {});\n\n // reducedSchedules = orderByLodash(reducedSchedules, (elem) => elem.length, ['desc']);\n\n // let resultHoraire = '';\n // let startH;\n // let startM;\n // let endH;\n // let endM;\n // let firstDayOfWeek;\n // let lastDayOfWeek;\n\n // reducedSchedules.forEach((schedule: any, index: number) => {\n // startH = dayjs(user.workingSchedules[schedule[0]].morningStart ? user.workingSchedules[schedule[0]].morningStart : user.workingSchedules[schedule[0]].afternoonStart, 'HH:mm:ss').get('hour');\n // startM = dayjs(user.workingSchedules[schedule[0]].morningStart ? user.workingSchedules[schedule[0]].morningStart : user.workingSchedules[schedule[0]].afternoonStart, 'HH:mm:ss').get('minute');\n // endH = dayjs(user.workingSchedules[schedule[0]].afternoonEnd || user.workingSchedules[schedule[0]].morningEnd, 'HH:mm:ss').get('hour');\n // endM = dayjs(user.workingSchedules[schedule[0]].afternoonEnd || user.workingSchedules[schedule[0]].morningEnd, 'HH:mm:ss').get('minute');\n // firstDayOfWeek = dayjs().locale('fr').day(user.workingSchedules[schedule[0]].idDay).format('dddd');\n // if (!index) {\n // // pour le premier index, on affiche l'amplitude horaire la plus commune, du XX au XX de Xh à Xh\n // lastDayOfWeek = dayjs().locale('fr').day(user.workingSchedules[user.workingSchedules.length - 1].idDay).format('dddd');\n // resultHoraire += `Du ${firstDayOfWeek} au ${lastDayOfWeek} de ${startH}h${startM > 0 ? startM : ''} à ${endH}h${endM > 0 ? endM : ''}`;\n // } else { // Fonctionnel si uniquement un jour par semaine avec des horaires différents\n // resultHoraire += `<br/>Le ${firstDayOfWeek} de ${startH}h${startM > 0 ? startM : ''} à ${endH}h${endM > 0 ? endM : ''}`;\n // }\n // });\n // return resultHoraire;\n}\n\nfunction getMailSignature(user: any, idTypeBrand: number) {\n const informatiqueMail = getBrandConfig({\n ...(idTypeBrand ? { idTypeBrand } : {}),\n objectWaited: 'listMails.informatique',\n }) as unknown as string;\n const bonjourMail = getBrandConfig({\n ...(idTypeBrand ? { idTypeBrand } : {}),\n objectWaited: 'listMails.bonjour',\n }) as unknown as string;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n if (user.roles.map((r: any) => r.id).includes(Role.ADMIN)) {\n return informatiqueMail;\n }\n\n if (\n user &&\n !!intersection(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n user.roles.map((r: any) => r.id),\n [Role.FRONT_OFFICE, Role.FRONT_OFFICE_EXPRESS, Role.DATA_OFFICER, Role.COMMERCIAL, Role.TECHNICAL_ADVISOR],\n ).length\n )\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return user.email;\n return bonjourMail;\n}\n\nfunction getPhoneSignature(user: any) {\n if (user.phone && user.phone !== '0383931414') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return user.phone.replace(/\\B(?=(\\d{2})+(?!\\d))/g, ' ');\n }\n return null;\n}\n\nexport function generateSignature(params: any): string {\n const { fromAddress = null, idTypeBrand = 1, society, ...otherParams } = params;\n let { user, forceRole = null } = otherParams;\n\n const brand = getBrand({ idTypeBrand });\n\n const hostS3 = brand.urlS3;\n\n const brandName = brand.name;\n const brandCity = brand.companyInformation?.city;\n const brandPostalAddress = brand.companyInformation?.postalAddress || '';\n const commercialName = brand.commercialName;\n const iban = brand.bank?.IBAN;\n const bic = brand.bank?.BIC;\n const bonjourMail = brand.listMails?.bonjour || '';\n const socialMail = brand.listMails?.social || '';\n const dataOfficerMail = brand.listMails?.gestion || '';\n const satisfactionMail = brand.listMails?.satisfaction || '';\n const resiliationMail = brand.listMails?.resiliation || '';\n const supportMail = brand.listMails?.support || '';\n const juridiqueMail = brand.listMails?.juridique || '';\n const facturationMail = brand.listMails?.facturation || '';\n const primaryColor = brand.colors?.primary || '';\n const standardPhoneSignature = brand.listPhones?.contact || '';\n const juridiquePhoneSignature = brand.listPhones?.juridique || '';\n const socialPhoneSignature = brand.listPhones?.social || '';\n\n // Pour les cas hybrides des personnes ayant plusieurs rôles\n // Comme Morgane (Facturation + Satisfaction) et qui peut choisir plusieurs emails d'expédition\n // Il faut que la signature corresponde à l'adresse d'expédition\n // donc actuellement, on ne gère que satisfaction/resiliation/facturation\n const listGenericEmails: { email: string; forceRole: string }[] = [\n { email: satisfactionMail, forceRole: 'satisfaction' },\n { email: resiliationMail, forceRole: 'resiliation' },\n { email: facturationMail, forceRole: 'facturation' },\n ];\n const genericEmailUsed = listGenericEmails.find((e) => e.email === fromAddress);\n if (genericEmailUsed) {\n forceRole = genericEmailUsed.forceRole;\n }\n\n let roleSignature: string | null;\n let mailSignature: string | null;\n let phoneSignature: string | null;\n let horaires: string | null;\n [roleSignature, mailSignature, phoneSignature, horaires] = [\n 'Expert-Comptable',\n bonjourMail,\n null,\n 'Du lundi au vendredi de 9h à 18h',\n ];\n\n if (user?.roles && user.roles.some((r: any) => r.id === Role.DATA_OFFICER)) {\n // Signature data_officer\n user = {\n firstname: `L'équipe ${commercialName}`,\n isAll: true,\n };\n mailSignature = dataOfficerMail;\n roleSignature = '';\n } else if (\n intersection(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n (user?.roles ?? []).map((r: any) => r.id),\n [Role.FRONT_OFFICE, Role.SENIOR],\n ).length === 2\n ) {\n // Signature front senior\n user = {\n firstname: `L'équipe ${commercialName}`,\n isAll: true,\n };\n mailSignature = bonjourMail;\n roleSignature = '';\n } else if (forceRole === 'satisfaction') {\n // Signature satisfaction\n user = {\n firstname: 'Service satisfaction clients',\n isAll: true,\n };\n mailSignature = satisfactionMail;\n roleSignature = '';\n phoneSignature = standardPhoneSignature;\n } else if (forceRole === 'resiliation') {\n // Signature resiliation\n user = {\n firstname: 'Service satisfaction clients',\n isAll: true,\n };\n mailSignature = resiliationMail;\n roleSignature = '';\n phoneSignature = standardPhoneSignature;\n } else if (forceRole === 'social') {\n // Signature social\n user = {\n firstname: 'Service social',\n isAll: true,\n };\n mailSignature = socialMail;\n roleSignature = '';\n phoneSignature = socialPhoneSignature;\n } else if (forceRole === 'support') {\n // Signature support\n user = {\n firstname: 'Service Support',\n isAll: true,\n };\n mailSignature = supportMail;\n roleSignature = null;\n } else if (forceRole === 'juridique') {\n // Signature juridique\n user = {\n firstname: 'Service juridique',\n isAll: true,\n };\n mailSignature = juridiqueMail;\n roleSignature = null;\n phoneSignature = juridiquePhoneSignature;\n } else if (forceRole === 'facturation') {\n // Signature facturation\n user = {\n firstname: 'Service facturation',\n isAll: true,\n };\n mailSignature = facturationMail;\n roleSignature = null;\n phoneSignature = standardPhoneSignature;\n } else if (!user || forceRole === 'generique') {\n // Signature Clementine\n user = {\n firstname: `L'équipe ${commercialName}`,\n isAll: true,\n };\n roleSignature = '';\n } else if (user !== 0) {\n // Signature par défaut\n roleSignature = getRoleSignature(user);\n mailSignature = getMailSignature(user, idTypeBrand);\n horaires = getHoraires(user);\n phoneSignature = getPhoneSignature(user);\n }\n\n // Si on a une société, alors on remplace le lien calendly de base par le lien calendly interne\n // on n'affiche uniquement si le collaboreatur a bien des créneaux horaires\n if (\n society?.id &&\n user?.roles?.some((r: any) =>\n [Role.FRONT_OFFICE, Role.FACTURATION, Role.JURIDIC, Role.COMMERCIAL].includes(r.id),\n ) &&\n user?.usersTimeSlots?.length\n ) {\n const isJuridic = user?.roles?.some((r: any) => [Role.JURIDIC].includes(r.id));\n const isFactu = user?.roles?.some((r: any) => [Role.FACTURATION].includes(r.id));\n const isCommercial = user?.roles?.some((r: any) => [Role.COMMERCIAL].includes(r.id));\n let idType = TimeSlot.BILAN;\n if (isJuridic) idType = TimeSlot.EDIT_SOCIETY;\n if (isFactu) idType = TimeSlot.BILLING;\n if (isCommercial) idType = TimeSlot.SALES;\n const urlApp = brand.urlApp || '';\n user.calendlyUrl = `${urlApp}/appointment?uuid=${society?.externalId ? society.externalId : ''}&idType=${idType}`;\n }\n\n return ejs.render(signatureTemplate, {\n forceRole,\n isFacturation: user.roles ? user.roles.some((r: any) => r.id === Role.FACTURATION) : false,\n isDataOfficer: user.roles ? user.roles.some((r: any) => r.id === Role.DATA_OFFICER) : true,\n brandName,\n brandPostalAddress,\n brandCity,\n idTypeBrand,\n commercialName,\n iban,\n bic,\n hostS3,\n user,\n roleSignature,\n mailSignature,\n phoneSignature: commercialName !== 'Comptalib' && phoneSignature ? phoneSignature.replace(/\\s+/gm, ' ') : null,\n standardPhoneSignature: commercialName !== 'Comptalib' ? standardPhoneSignature.replace(/\\s+/gm, ' ') : null,\n horaires,\n primaryColor,\n supportMail,\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../ts/utils/email.ts"],"names":[],"mappings":"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","sourcesContent":["import ejs from 'ejs';\nimport { Role } from '../types/Enum/Role.js';\nimport { IUser } from '../types/Interface/models/IUser.js';\nimport { getBrand, getBrandConfig } from './brands.js';\nimport { signatureTemplate } from './email/templates/signature.js';\nimport { intersection } from './noLodash.js';\nimport { IRole } from '../types/Interface/models/IRole.js';\n\nfunction getRoleSignature(user: any) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n if (user.positionLabel) return user.positionLabel;\n\n const isStagiaireOrAlternant =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n user.roles.map((r: any) => r.id).includes(Role.INTERN) || user.roles.map((r: any) => r.id).includes(Role.ALTERNATE);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n const isManager = user.roles.map((r: any) => r.id).includes(Role.MANAGER);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n const isSocial = user.roles.map((r: any) => r.id).includes(Role.SOCIAL);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n const isJuridic = user.roles.map((r: any) => r.id).includes(Role.JURIDIC);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n const isFacturation = user.roles.map((r: any) => r.id).includes(Role.FACTURATION);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n const isExpert = user.roles.map((r: any) => r.id).includes(Role.EXPERT_ACCOUNTANT);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n const isCS = user.roles.map((r: any) => r.id).includes(Role.CUSTOMER_SUCCESS);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n const isOnBoarder = user.roles.map((r: any) => r.id).includes(Role.ON_BOARDER);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n const isSatisfaction = user.roles.map((r: any) => r.id).includes(Role.SATISFACTION);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n const isDataOfficer = user.roles.map((r: any) => r.id).includes(Role.DATA_OFFICER);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n const isSales = user.roles.map((r: any) => r.id).includes(Role.COMMERCIAL);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n const isAdmin = user.roles.map((r: any) => r.id).includes(Role.ADMIN);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n const isTechnicalAdvisor = user.roles.map((r: any) => r.id).includes(Role.TECHNICAL_ADVISOR);\n\n const isFront = !!intersection(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n user.roles.map((r: any) => r.id),\n [Role.FRONT_OFFICE, Role.FRONT_OFFICE_EXPRESS],\n ).length;\n\n if (isSales && isManager) {\n return 'Responsable commercial';\n }\n if (isSales) {\n return `Chargé${user.idCivility === 2 ? 'e' : ''} de clientèle`;\n }\n\n if (isCS && isManager) {\n return 'Responsable relations clients';\n }\n if (isCS) {\n return `Conseill${user.idCivility === 2 ? 'ère' : 'er'} comptable`;\n }\n\n if (isTechnicalAdvisor) {\n return `Référent${user.idCivility === 2 ? 'e' : ''} technique`;\n }\n\n if (isOnBoarder && isManager) {\n return `Responsable chargé${user.idCivility === 2 ? 'e' : ''} accueil clients`;\n }\n if (isOnBoarder) {\n return `Chargé${user.idCivility === 2 ? 'e' : ''} accueil clients`;\n }\n\n if (isSatisfaction && isManager) {\n return `Responsable chargé${user.idCivility === 2 ? 'e' : ''} de la satisfaction clients`;\n }\n if (isSatisfaction) {\n return `Chargé${user.idCivility === 2 ? 'e' : ''} de la satisfaction clients`;\n }\n\n if (isDataOfficer && isManager) {\n return 'Responsable aide comptable';\n }\n if (isDataOfficer) {\n return 'Aide comptable';\n }\n\n if (isFacturation && isStagiaireOrAlternant) {\n return 'Assistant facturation';\n }\n if (isFacturation && isManager) {\n return 'Responsable facturation';\n }\n if (isFacturation) {\n return `Chargé${user.idCivility === 2 ? 'e' : ''} de facturation`;\n }\n\n if (isJuridic && isStagiaireOrAlternant) {\n return 'Assistant juridique';\n }\n if (isJuridic && isManager) {\n return 'Responsable juridique';\n }\n if (isJuridic) {\n return 'Juriste';\n }\n\n if (isSocial && isStagiaireOrAlternant) {\n return 'Assistant paie';\n }\n if (isSocial && isManager) {\n return 'Responsable paie';\n }\n if (isSocial) {\n return 'Gestionnaire de paie';\n }\n\n if (isExpert) {\n return `Expert${user.idCivility === 2 ? 'e' : ''}-comptable`;\n }\n\n if (isAdmin) {\n return 'Développeur web';\n }\n\n if (isFront && isManager) return 'Responsable comptable';\n if (isFront && isStagiaireOrAlternant) return 'Assistant comptable';\n // if (isFront) return `Comptable dédié${user.idCivility === 2 ? 'e' : ''}`;\n // return `Comptable dédié${user.idCivility === 2 ? 'e' : ''}`;\n // if (isFront) return `Comptable`;\n return 'Comptable';\n}\n\nexport function getHoraires(user: IUser) {\n // On affiche les horaires uniquement pour les front, et pas pour les TVA\n\n // if (\n // isItThisEnv('Pourcentage') &&\n // user?.entity &&\n // [EntityType.COMPTALIB, EntityType.AMEX, EntityType.CABINET_RONCHIERI_LANDRA].includes(user.entity)\n // ) {\n // return 'Du lundi au vendredi de 9h à 18h';\n // }\n\n if (user?.roles?.map((r: IRole) => r.id).includes(Role.COMMERCIAL)) {\n return 'Du lundi au vendredi de 9h à 18h';\n }\n\n return 'Du lundi au jeudi de 9h à 17h<br/>Le vendredi de 9h à 12h';\n\n // if (!intersection([user.roles.map((r: any) => r.id), [Role.FRONT_OFFICE, Role.FRONT_OFFICE_EXPRESS, Role.COMMERCIAL]]).length) return 'Du lundi au vendredi de 9h à 18h';\n\n // if (!user.workingSchedules.length) return 'Du lundi au vendredi de 9h à 18h';\n\n // let reducedSchedules = user.workingSchedules.reduce((acc: any, e:any, index: number) => {\n // const name = `${dayjs(e.morningStart, 'HH:mm:ss').format('HH:mm')}-${dayjs(e.afternoonEnd || e.morningEnd, 'HH:mm:ss').format('HH:mm')}`;\n // if (!acc[name]) acc[name] = [index];\n // else acc[name].push(index);\n // return acc;\n // }, {});\n\n // reducedSchedules = orderByLodash(reducedSchedules, (elem) => elem.length, ['desc']);\n\n // let resultHoraire = '';\n // let startH;\n // let startM;\n // let endH;\n // let endM;\n // let firstDayOfWeek;\n // let lastDayOfWeek;\n\n // reducedSchedules.forEach((schedule: any, index: number) => {\n // startH = dayjs(user.workingSchedules[schedule[0]].morningStart ? user.workingSchedules[schedule[0]].morningStart : user.workingSchedules[schedule[0]].afternoonStart, 'HH:mm:ss').get('hour');\n // startM = dayjs(user.workingSchedules[schedule[0]].morningStart ? user.workingSchedules[schedule[0]].morningStart : user.workingSchedules[schedule[0]].afternoonStart, 'HH:mm:ss').get('minute');\n // endH = dayjs(user.workingSchedules[schedule[0]].afternoonEnd || user.workingSchedules[schedule[0]].morningEnd, 'HH:mm:ss').get('hour');\n // endM = dayjs(user.workingSchedules[schedule[0]].afternoonEnd || user.workingSchedules[schedule[0]].morningEnd, 'HH:mm:ss').get('minute');\n // firstDayOfWeek = dayjs().locale('fr').day(user.workingSchedules[schedule[0]].idDay).format('dddd');\n // if (!index) {\n // // pour le premier index, on affiche l'amplitude horaire la plus commune, du XX au XX de Xh à Xh\n // lastDayOfWeek = dayjs().locale('fr').day(user.workingSchedules[user.workingSchedules.length - 1].idDay).format('dddd');\n // resultHoraire += `Du ${firstDayOfWeek} au ${lastDayOfWeek} de ${startH}h${startM > 0 ? startM : ''} à ${endH}h${endM > 0 ? endM : ''}`;\n // } else { // Fonctionnel si uniquement un jour par semaine avec des horaires différents\n // resultHoraire += `<br/>Le ${firstDayOfWeek} de ${startH}h${startM > 0 ? startM : ''} à ${endH}h${endM > 0 ? endM : ''}`;\n // }\n // });\n // return resultHoraire;\n}\n\nfunction getMailSignature(user: any, idTypeBrand: number) {\n const informatiqueMail = getBrandConfig({\n ...(idTypeBrand ? { idTypeBrand } : {}),\n objectWaited: 'listMails.informatique',\n }) as unknown as string;\n const bonjourMail = getBrandConfig({\n ...(idTypeBrand ? { idTypeBrand } : {}),\n objectWaited: 'listMails.bonjour',\n }) as unknown as string;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n if (user.roles.map((r: any) => r.id).includes(Role.ADMIN)) {\n return informatiqueMail;\n }\n\n if (\n user &&\n !!intersection(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n user.roles.map((r: any) => r.id),\n [Role.FRONT_OFFICE, Role.FRONT_OFFICE_EXPRESS, Role.DATA_OFFICER, Role.COMMERCIAL, Role.TECHNICAL_ADVISOR],\n ).length\n )\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return user.email;\n return bonjourMail;\n}\n\nfunction getPhoneSignature(user: any) {\n if (user.phone && user.phone !== '0383931414') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return user.phone.replace(/\\B(?=(\\d{2})+(?!\\d))/g, ' ');\n }\n return null;\n}\n\nexport function generateSignature(params: any): string {\n const { fromAddress = null, idTypeBrand = 1, calendlyUrl = null, ...otherParams } = params;\n let { user, forceRole = null } = otherParams;\n\n const brand = getBrand({ idTypeBrand });\n\n const hostS3 = brand.urlS3;\n\n const brandName = brand.name;\n const brandCity = brand.companyInformation?.city;\n const brandPostalAddress = brand.companyInformation?.postalAddress || '';\n const commercialName = brand.commercialName;\n const iban = brand.bank?.IBAN;\n const bic = brand.bank?.BIC;\n const bonjourMail = brand.listMails?.bonjour || '';\n const socialMail = brand.listMails?.social || '';\n const dataOfficerMail = brand.listMails?.gestion || '';\n const satisfactionMail = brand.listMails?.satisfaction || '';\n const resiliationMail = brand.listMails?.resiliation || '';\n const supportMail = brand.listMails?.support || '';\n const juridiqueMail = brand.listMails?.juridique || '';\n const facturationMail = brand.listMails?.facturation || '';\n const primaryColor = brand.colors?.primary || '';\n const standardPhoneSignature = brand.listPhones?.contact || '';\n const juridiquePhoneSignature = brand.listPhones?.juridique || '';\n const socialPhoneSignature = brand.listPhones?.social || '';\n\n // Pour les cas hybrides des personnes ayant plusieurs rôles\n // Comme Morgane (Facturation + Satisfaction) et qui peut choisir plusieurs emails d'expédition\n // Il faut que la signature corresponde à l'adresse d'expédition\n // donc actuellement, on ne gère que satisfaction/resiliation/facturation\n const listGenericEmails: { email: string; forceRole: string }[] = [\n { email: satisfactionMail, forceRole: 'satisfaction' },\n { email: resiliationMail, forceRole: 'resiliation' },\n { email: facturationMail, forceRole: 'facturation' },\n ];\n const genericEmailUsed = listGenericEmails.find((e) => e.email === fromAddress);\n if (genericEmailUsed) {\n forceRole = genericEmailUsed.forceRole;\n }\n\n let roleSignature: string | null;\n let mailSignature: string | null;\n let phoneSignature: string | null;\n let horaires: string | null;\n [roleSignature, mailSignature, phoneSignature, horaires] = [\n 'Expert-Comptable',\n bonjourMail,\n null,\n 'Du lundi au vendredi de 9h à 18h',\n ];\n\n if (user?.roles && user.roles.some((r: any) => r.id === Role.DATA_OFFICER)) {\n // Signature data_officer\n user = {\n firstname: `L'équipe ${commercialName}`,\n isAll: true,\n };\n mailSignature = dataOfficerMail;\n roleSignature = '';\n } else if (\n intersection(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n (user?.roles ?? []).map((r: any) => r.id),\n [Role.FRONT_OFFICE, Role.SENIOR],\n ).length === 2\n ) {\n // Signature front senior\n user = {\n firstname: `L'équipe ${commercialName}`,\n isAll: true,\n };\n mailSignature = bonjourMail;\n roleSignature = '';\n } else if (forceRole === 'satisfaction') {\n // Signature satisfaction\n user = {\n firstname: 'Service satisfaction clients',\n isAll: true,\n };\n mailSignature = satisfactionMail;\n roleSignature = '';\n phoneSignature = standardPhoneSignature;\n } else if (forceRole === 'resiliation') {\n // Signature resiliation\n user = {\n firstname: 'Service satisfaction clients',\n isAll: true,\n };\n mailSignature = resiliationMail;\n roleSignature = '';\n phoneSignature = standardPhoneSignature;\n } else if (forceRole === 'social') {\n // Signature social\n user = {\n firstname: 'Service social',\n isAll: true,\n };\n mailSignature = socialMail;\n roleSignature = '';\n phoneSignature = socialPhoneSignature;\n } else if (forceRole === 'support') {\n // Signature support\n user = {\n firstname: 'Service Support',\n isAll: true,\n };\n mailSignature = supportMail;\n roleSignature = null;\n } else if (forceRole === 'juridique') {\n // Signature juridique\n user = {\n firstname: 'Service juridique',\n isAll: true,\n };\n mailSignature = juridiqueMail;\n roleSignature = null;\n phoneSignature = juridiquePhoneSignature;\n } else if (forceRole === 'facturation') {\n // Signature facturation\n user = {\n firstname: 'Service facturation',\n isAll: true,\n };\n mailSignature = facturationMail;\n roleSignature = null;\n phoneSignature = standardPhoneSignature;\n } else if (!user || forceRole === 'generique') {\n // Signature Clementine\n user = {\n firstname: `L'équipe ${commercialName}`,\n isAll: true,\n };\n roleSignature = '';\n } else if (user !== 0) {\n // Signature par défaut\n roleSignature = getRoleSignature(user);\n mailSignature = getMailSignature(user, idTypeBrand);\n horaires = getHoraires(user);\n phoneSignature = getPhoneSignature(user);\n }\n\n if (calendlyUrl) {\n user.calendlyUrl = calendlyUrl;\n }\n\n return ejs.render(signatureTemplate, {\n forceRole,\n isFacturation: user.roles ? user.roles.some((r: any) => r.id === Role.FACTURATION) : false,\n isDataOfficer: user.roles ? user.roles.some((r: any) => r.id === Role.DATA_OFFICER) : true,\n brandName,\n brandPostalAddress,\n brandCity,\n idTypeBrand,\n commercialName,\n iban,\n bic,\n hostS3,\n user,\n roleSignature,\n mailSignature,\n phoneSignature: commercialName !== 'Comptalib' && phoneSignature ? phoneSignature.replace(/\\s+/gm, ' ') : null,\n standardPhoneSignature: commercialName !== 'Comptalib' ? standardPhoneSignature.replace(/\\s+/gm, ' ') : null,\n horaires,\n primaryColor,\n supportMail,\n });\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@silexpert/core",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.117",
|
|
4
4
|
"description": "Silex Core perform HTTP Request and object binding. Silex core helps developers to retrieve and return formatted object",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"accounting",
|
|
@@ -47,37 +47,32 @@
|
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"@types/geojson": "^7946.0.16",
|
|
50
|
-
"@types/sanitize-html": "^2.16.
|
|
51
|
-
"axios": "1.
|
|
50
|
+
"@types/sanitize-html": "^2.16.2",
|
|
51
|
+
"axios": "1.20.0",
|
|
52
52
|
"class-transformer": "^0.5.1",
|
|
53
53
|
"class-validator": "^0.15.1",
|
|
54
|
-
"dayjs": "
|
|
55
|
-
"ejs": "
|
|
56
|
-
"libphonenumber-js": "^1.
|
|
57
|
-
"lodash-es": "^4.
|
|
54
|
+
"dayjs": "1.11.23",
|
|
55
|
+
"ejs": "6.0.1",
|
|
56
|
+
"libphonenumber-js": "^1.13.14",
|
|
57
|
+
"lodash-es": "^4.18.1",
|
|
58
58
|
"rxjs": "^7.8.2",
|
|
59
|
-
"sanitize-html": "^2.17.
|
|
59
|
+
"sanitize-html": "^2.17.7",
|
|
60
60
|
"sms-length": "^0.2.2",
|
|
61
|
-
"stripe": "
|
|
61
|
+
"stripe": "22.6.1"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
|
-
"@
|
|
65
|
-
"@babel/core": "^7.29.0",
|
|
66
|
-
"@babel/plugin-transform-runtime": "^7.29.0",
|
|
67
|
-
"@babel/preset-env": "^7.29.0",
|
|
68
|
-
"@babel/runtime": "^7.28.6",
|
|
69
|
-
"@types/bluebird": "^3.5.34",
|
|
64
|
+
"@types/bluebird": "^3.5.42",
|
|
70
65
|
"@types/lodash-es": "^4.17.12",
|
|
71
|
-
"@types/node": "^24.
|
|
66
|
+
"@types/node": "^24.19.0",
|
|
72
67
|
"@types/validator": "^13.15.10",
|
|
73
|
-
"oxlint": "^1.
|
|
68
|
+
"oxlint": "^1.86.0",
|
|
74
69
|
"rimraf": "^6.1.3",
|
|
75
|
-
"standard-version": "^9.
|
|
70
|
+
"standard-version": "^9.5.0",
|
|
76
71
|
"ts-node": "^10.9.2",
|
|
77
|
-
"typescript": "6.0.3"
|
|
72
|
+
"typescript": "6.0.3",
|
|
73
|
+
"typescript-eslint": "^8.71.0"
|
|
78
74
|
},
|
|
79
75
|
"peerDependencies": {
|
|
80
|
-
"@babel/runtime": "^7.6.3",
|
|
81
76
|
"@types/bluebird": "^3.5.28"
|
|
82
77
|
},
|
|
83
78
|
"engines": {
|
package/ts/api/resources/Acd.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AcdSyncStatus, CreateAcdAuthentication
|
|
1
|
+
import type { AcdSyncStatus, CreateAcdAuthentication } from '../../index.js';
|
|
2
2
|
import { Resource } from '../Resource.js';
|
|
3
3
|
|
|
4
4
|
export class Acd extends Resource {
|
|
@@ -6,10 +6,6 @@ export class Acd extends Resource {
|
|
|
6
6
|
return this.axios.$post('/connectors/acd/authenticate', body);
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
getAccounts(): Promise<IAccount[]> {
|
|
10
|
-
return this.axios.$get('/connectors/acd/accounts');
|
|
11
|
-
}
|
|
12
|
-
|
|
13
9
|
getStatus(): Promise<AcdSyncStatus> {
|
|
14
10
|
return this.axios.$get('/connectors/acd/status');
|
|
15
11
|
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
AppointmentAvailability,
|
|
3
|
+
AppointmentContext,
|
|
4
|
+
AppointmentSession,
|
|
5
|
+
CreateAppointment,
|
|
6
|
+
CreateAppointmentLink,
|
|
7
|
+
QueryAppointmentAvailability,
|
|
8
|
+
RegisterProspectBody,
|
|
9
|
+
RegisterProspectResponse,
|
|
10
|
+
} from '../../types/index.js';
|
|
11
|
+
import { Resource } from '../Resource.js';
|
|
12
|
+
|
|
13
|
+
export class Appointment extends Resource {
|
|
14
|
+
createLink(payload: CreateAppointmentLink): Promise<{ url: string }> {
|
|
15
|
+
return this.axios.$post('/appointments/links', payload);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
registerProspect(payload: RegisterProspectBody): Promise<RegisterProspectResponse> {
|
|
19
|
+
return this.axios.$post('/appointments/prospects', payload);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
exchange(secret: string): Promise<AppointmentSession> {
|
|
23
|
+
return this.axios.$post('/appointments/exchange', { token: secret });
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
getProspectAvailability(query: QueryAppointmentAvailability): Promise<AppointmentAvailability[]> {
|
|
27
|
+
return this.axios.$get('/appointments/prospect/availability', { params: query });
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
getContext(token: string): Promise<AppointmentContext> {
|
|
31
|
+
return this.axios.$get('/appointments/context', { headers: { Authorization: `Bearer ${token}` } });
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
getAvailability(query: QueryAppointmentAvailability, token: string): Promise<AppointmentAvailability[]> {
|
|
35
|
+
return this.axios.$get('/appointments/availability', {
|
|
36
|
+
params: query,
|
|
37
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
create(payload: CreateAppointment, token: string): Promise<{ id: number }> {
|
|
42
|
+
return this.axios.$post('/appointments', payload, { headers: { Authorization: `Bearer ${token}` } });
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
delete(id: number, token: string): Promise<number> {
|
|
46
|
+
return this.axios.$delete(`/appointments/${id}`, { headers: { Authorization: `Bearer ${token}` } });
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
getCaarlLink(token: string): Promise<string> {
|
|
50
|
+
return this.axios.$get('/appointments/caarl-link', { headers: { Authorization: `Bearer ${token}` } });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import {
|
|
2
|
-
ConnectFromUUID,
|
|
3
2
|
FormAuthenticate,
|
|
4
3
|
PostForgotPassword,
|
|
5
4
|
PutResetPassword,
|
|
@@ -35,10 +34,14 @@ export class Authenticate extends Resource {
|
|
|
35
34
|
return this.axios.$post(`/authenticate/societies/${idSociety}`);
|
|
36
35
|
}
|
|
37
36
|
|
|
38
|
-
async forgotPassword(payload: PostForgotPassword): Promise<
|
|
37
|
+
async forgotPassword(payload: PostForgotPassword): Promise<void> {
|
|
39
38
|
return this.axios.$post('/authenticate/forgot-password', payload);
|
|
40
39
|
}
|
|
41
40
|
|
|
41
|
+
async generateResetPasswordLink(idUser: number): Promise<{ url: string }> {
|
|
42
|
+
return this.axios.$post(`/authenticate/users/${idUser}/reset-password-link`);
|
|
43
|
+
}
|
|
44
|
+
|
|
42
45
|
async forgotPasswordCoworker(payload: PostForgotPassword): Promise<void> {
|
|
43
46
|
return this.axios.$post('/authenticate/coworker/forgot-password', payload);
|
|
44
47
|
}
|
|
@@ -47,11 +50,6 @@ export class Authenticate extends Resource {
|
|
|
47
50
|
return this.axios.$put('/authenticate/reset-password', payload);
|
|
48
51
|
}
|
|
49
52
|
|
|
50
|
-
/** @deprecated Use exchangeExternalAuthenticationLink instead */
|
|
51
|
-
async byExternalId(uuid: string, query: ConnectFromUUID): Promise<ReadByExternalId> {
|
|
52
|
-
return this.axios.$get(`/authenticate/external/${uuid}`, { params: query });
|
|
53
|
-
}
|
|
54
|
-
|
|
55
53
|
async exchangeExternalAuthenticationLink(payload: ExchangeExternalAuthenticationLink): Promise<ReadByExternalId> {
|
|
56
54
|
return this.axios.$post(`/authenticate/external/exchange`, payload);
|
|
57
55
|
}
|
|
@@ -6,8 +6,6 @@ import {
|
|
|
6
6
|
ISociety,
|
|
7
7
|
LegalFormSiren,
|
|
8
8
|
GetDataSociety,
|
|
9
|
-
CreateSociety,
|
|
10
|
-
CreateSynchronization,
|
|
11
9
|
UpdateSociety,
|
|
12
10
|
CreateBudgetBalanceBankAccount,
|
|
13
11
|
IUser,
|
|
@@ -69,12 +67,6 @@ export class Society extends Resource {
|
|
|
69
67
|
updateInvoiceEmail(data: UpdateInvoiceMail): Promise<IMailSociety | Error> {
|
|
70
68
|
return this.axios.$put('/society/invoiceEmail', data);
|
|
71
69
|
}
|
|
72
|
-
createSociety(data: CreateSociety, fromSubscription: boolean | string, isCreatedInApp: boolean): Promise<ISociety> {
|
|
73
|
-
return this.axios.$post(
|
|
74
|
-
`/society/create?fromSubscription=${fromSubscription}&isCreatedInApp=${isCreatedInApp}`,
|
|
75
|
-
data,
|
|
76
|
-
);
|
|
77
|
-
}
|
|
78
70
|
updateSociety(id: number, data: UpdateSociety): Promise<ISociety> {
|
|
79
71
|
return this.axios.$put(`/society/${id}/updateSociety`, data);
|
|
80
72
|
}
|
|
@@ -92,9 +84,6 @@ export class Society extends Resource {
|
|
|
92
84
|
getDataSociety(params: GetDataSociety): Promise<LegalFormSiren[]> {
|
|
93
85
|
return this.axios.$get('/society/dataSociety', { params });
|
|
94
86
|
}
|
|
95
|
-
synchronize(id: number, params: CreateSynchronization): Promise<string> {
|
|
96
|
-
return this.axios.$post(`/society/${id}/synchronize`, params);
|
|
97
|
-
}
|
|
98
87
|
importBalanceBankAccount(
|
|
99
88
|
idSociety: number,
|
|
100
89
|
idBankAccount: number,
|
package/ts/api/resources.ts
CHANGED
|
@@ -18,6 +18,7 @@ import { BalanceSheet } from './resources/BalanceSheet.js';
|
|
|
18
18
|
import { BalanceSheetModule } from './resources/BalanceSheetModule.js';
|
|
19
19
|
import { Subscription } from './resources/Subscription.js';
|
|
20
20
|
import { Authenticate } from './resources/Authenticate.js';
|
|
21
|
+
import { Appointment } from './resources/Appointment.js';
|
|
21
22
|
import { Search } from './resources/Search.js';
|
|
22
23
|
import { SalariesFile } from './resources/SalariesFile.js';
|
|
23
24
|
import { Shine } from './resources/Shine.js';
|
|
@@ -28,7 +29,6 @@ import { Das } from './resources/Das.js';
|
|
|
28
29
|
import { ZTicket } from './resources/ZTicket.js';
|
|
29
30
|
import { IncomeAllocation } from './resources/IncomeAllocation.js';
|
|
30
31
|
import { CustomerProviderOperation } from './resources/CustomerProviderOperation.js';
|
|
31
|
-
import { Steps } from './resources/Step.js';
|
|
32
32
|
import { RevisionGuide } from './resources/RevisionGuide.js';
|
|
33
33
|
import { Library } from './resources/Library.js';
|
|
34
34
|
import { TaxDeadline } from './resources/TaxDeadline.js';
|
|
@@ -233,7 +233,6 @@ export const resources = {
|
|
|
233
233
|
zTicket: ZTicket,
|
|
234
234
|
incomeAllocation: IncomeAllocation,
|
|
235
235
|
customerProviderOperation: CustomerProviderOperation,
|
|
236
|
-
steps: Steps,
|
|
237
236
|
revisionGuide: RevisionGuide,
|
|
238
237
|
library: Library,
|
|
239
238
|
taxDeadline: TaxDeadline,
|
|
@@ -279,6 +278,7 @@ export const resources = {
|
|
|
279
278
|
task: Task,
|
|
280
279
|
comment: Comment,
|
|
281
280
|
calendarEvent: CalendarEvent,
|
|
281
|
+
appointment: Appointment,
|
|
282
282
|
timeRecorder: TimeRecorder,
|
|
283
283
|
notificationSetting: NotificationSetting,
|
|
284
284
|
cx: Cx,
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { AccountingJournal } from './AccountingJournal.js';
|
|
2
|
+
|
|
1
3
|
export enum AIPromptKey {
|
|
2
4
|
BANK_STATEMENT = 'bank_statement',
|
|
3
5
|
BANK_STATEMENT_WITH_SCHEMA = 'bank_statement_with_schema',
|
|
@@ -5,6 +7,7 @@ export enum AIPromptKey {
|
|
|
5
7
|
BANK_STATEMENT_FILE_NAME = 'bank_statement_file_name',
|
|
6
8
|
BANK_STATEMENT_INFOS = 'bank_statement_infos',
|
|
7
9
|
ASK_COLLABORATOR = 'ask_collaborator',
|
|
10
|
+
INVOICE_OCR = 'invoice_ocr',
|
|
8
11
|
}
|
|
9
12
|
|
|
10
13
|
interface AIPromptInfo {
|
|
@@ -12,6 +15,15 @@ interface AIPromptInfo {
|
|
|
12
15
|
systemPrompt: string | ((...arg: any[]) => string);
|
|
13
16
|
}
|
|
14
17
|
|
|
18
|
+
export interface InvoiceOcrPromptOptions {
|
|
19
|
+
suppliers?: string[];
|
|
20
|
+
customers?: string[];
|
|
21
|
+
categories?: string[];
|
|
22
|
+
idAccountingJournal?: AccountingJournal | number;
|
|
23
|
+
societyName?: string;
|
|
24
|
+
isSale?: boolean;
|
|
25
|
+
}
|
|
26
|
+
|
|
15
27
|
export const AIPrompt: Record<AIPromptKey, AIPromptInfo> = {
|
|
16
28
|
[AIPromptKey.BANK_STATEMENT]: {
|
|
17
29
|
userPrompt:
|
|
@@ -38,7 +50,7 @@ export const AIPrompt: Record<AIPromptKey, AIPromptInfo> = {
|
|
|
38
50
|
Voici des lignes issues d’un relevé de compte bancaire (cela peut être un relevé français). Pouvez-vous extraire toutes les transactions présentes dans ce document ?
|
|
39
51
|
(Attention certain relevé bancaire affiche uniquement le montant en positif ou négatif, il est important de ne pas se fier au signe du montant sur le relevé mais uniquement au champ "credit" ou "debit" pour déterminer le montant crédité ou débité et ne pas prendre en compte le solde du compte qui peut être affiché à côté du montant de la transaction et qui peut prêter à confusion)
|
|
40
52
|
`,
|
|
41
|
-
systemPrompt: (bankAccountName) => `
|
|
53
|
+
systemPrompt: (bankAccountName?: string) => `
|
|
42
54
|
Analysez ce relevé de compte bancaire et extrayez toutes les transactions sous forme d'un objet JSON structuré.
|
|
43
55
|
Le nom du compte bancaire est : ${bankAccountName}
|
|
44
56
|
Le relevé peut contenir des informations telles que la date de la transaction, le libellé (il faut conserver exactement le même texte que dans le relevé, sans modification, traduction ou altération), le montant débité et le montant crédité (ou alors un montant en positif pour le crédit et un montant en négatif pour le débit).
|
|
@@ -50,7 +62,7 @@ export const AIPrompt: Record<AIPromptKey, AIPromptInfo> = {
|
|
|
50
62
|
[AIPromptKey.BANK_STATEMENT_INFOS]: {
|
|
51
63
|
userPrompt:
|
|
52
64
|
'Voici des lignes issues d’un relevé de compte bancaire (cela peut être un relevé français). Pouvez-vous extraire les données concernant le solde précédent, la date de début et la date de fin du compte bancaire?',
|
|
53
|
-
systemPrompt: (bankAccountName) =>
|
|
65
|
+
systemPrompt: (bankAccountName?: string) =>
|
|
54
66
|
`
|
|
55
67
|
Analysez ce relevé de compte bancaire et extrayez toutes les infos concernant le montant des solde précédents du compte bancaire, les dates de début et de fin du relevé sous forme d'un objet JSON structuré.
|
|
56
68
|
Le relevé peut contenir des informations telles que la date du solde précédent et le montant du solde qui doit être un nombre. La date de début et de fin doivent être retourné en string. Si aucune date de début ou de fin trouvé, renvoyé null
|
|
@@ -96,4 +108,66 @@ export const AIPrompt: Record<AIPromptKey, AIPromptInfo> = {
|
|
|
96
108
|
Citez vos sources de manière précise et professionnelle, en fournissant uniquement des liens URL séparés par des points-virgules.
|
|
97
109
|
`,
|
|
98
110
|
},
|
|
111
|
+
[AIPromptKey.INVOICE_OCR]: {
|
|
112
|
+
userPrompt: `Veuillez extraire les informations de cette facture ou reçu (document comptable).`,
|
|
113
|
+
systemPrompt: (options?: InvoiceOcrPromptOptions) => {
|
|
114
|
+
const isSale = Boolean(options?.isSale || options?.idAccountingJournal === AccountingJournal.VE);
|
|
115
|
+
const societyContext = options?.societyName ? ` pour notre société '${options.societyName}'` : '';
|
|
116
|
+
|
|
117
|
+
if (isSale) {
|
|
118
|
+
return `
|
|
119
|
+
Vous êtes un expert-comptable spécialisé en extraction et classification de données comptables. Analysez cette facture de vente (ou avoir / reçu client) émise${societyContext} et extrayez les informations demandées avec la plus grande précision.
|
|
120
|
+
Faites particulièrement attention à bien distinguer le montant HT (subAmount), le montant de TVA (vatAmount) et le montant TTC (totalAmount).
|
|
121
|
+
|
|
122
|
+
CONTEXTE (FACTURE DE VENTE) :
|
|
123
|
+
- L'émetteur / vendeur est notre propre entreprise${options?.societyName ? ` (${options.societyName})` : ''}. Renseignez son nom officiel dans 'merchantName'. Il n'y a PAS besoin de chercher un tiers fournisseur.
|
|
124
|
+
- Le tiers cible à identifier et extraire en priorité est le CLIENT / ACHETEUR (customerName) :
|
|
125
|
+
* Extrayez le nom officiel complet du client destinataire à qui est facturée la vente (nom de l'entreprise cliente ou particulier).
|
|
126
|
+
* Ne retournez null QUE si aucun nom de client n'est identifiable.
|
|
127
|
+
- Pour le SIRET ou SIREN (siretOrSiren) :
|
|
128
|
+
* Extrayez le numéro de SIRET (14 chiffres) ou SIREN (9 chiffres) DU CLIENT / ACHETEUR (destinataire), s'il est mentionné dans le bloc adresse ou mentions du client.
|
|
129
|
+
* ATTENTION : Ne retournez JAMAIS le SIRET de notre propre entreprise émettrice ici. Si le client n'a pas de SIRET indiqué (ex: particulier ou non mentionné), retournez null.
|
|
130
|
+
- Pour le numéro de TVA intracommunautaire (vatNumber) :
|
|
131
|
+
* Extrayez le numéro de TVA intracommunautaire DU CLIENT / ACHETEUR, s'il figure sur le document. Si absent, retournez null. Ne retournez pas celui du vendeur.
|
|
132
|
+
|
|
133
|
+
Pour la classification comptable (categoryCode & categoryName) :
|
|
134
|
+
- Il s'agit d'une opération de PRODUITS / VENTES :
|
|
135
|
+
* categoryCode : déterminez le code racine comptable du Plan Comptable Général (PCG) français en classe 7 :
|
|
136
|
+
701 (Vente de produits finis), 704 (Travaux), 706 (Prestations de services), 707 (Ventes de marchandises).
|
|
137
|
+
* categoryName : décrivez précisément la nature économique principale de la vente ou prestation (ex: 'Prestation de services', 'Vente de marchandises', 'Travaux', 'Vente de produits finis').
|
|
138
|
+
|
|
139
|
+
Si une information n'est pas présente dans le document ou ne peut pas être déduite logiquement, retournez null. Ne pas inventer d'information.
|
|
140
|
+
Assurez-vous que les montants soient au format numérique (décimal, ex: 14.50) et la date au format YYYY-MM-DD.
|
|
141
|
+
`;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return `
|
|
145
|
+
Vous êtes un expert-comptable spécialisé en extraction et classification de données comptables. Analysez cette facture d'achat (ou reçu, note de frais, avoir fournisseur) reçue${societyContext} et extrayez les informations demandées avec la plus grande précision.
|
|
146
|
+
Faites particulièrement attention à bien distinguer le montant HT (subAmount), le montant de TVA (vatAmount) et le montant TTC (totalAmount).
|
|
147
|
+
|
|
148
|
+
CONTEXTE (FACTURE D'ACHAT) :
|
|
149
|
+
- Le client destinataire (customerName) est notre propre entreprise${options?.societyName ? ` (${options.societyName})` : ''} : donnez le nom officiel de l'acheteur tel qu'indiqué sur la facture.
|
|
150
|
+
- Le tiers cible à identifier et extraire en priorité est le FOURNISSEUR / ÉMETTEUR (merchantName) :
|
|
151
|
+
* Extrayez le nom officiel complet de l'entité juridique qui vend ou facture (le vendeur, prestataire ou fournisseur).
|
|
152
|
+
* ATTENTION : Ne confondez PAS le nom du fournisseur avec :
|
|
153
|
+
- Des logos de constructeurs ou marques partenaires distribuées (ex: 'Canon', 'HP Partner', 'Dell Partner', 'Apple', 'Konica Minolta').
|
|
154
|
+
- Des intitulés de services ou de sections (ex: 'Service Maintenance', 'Service Client', 'Support Technique', 'Facture').
|
|
155
|
+
* Le fournisseur réel est l'entreprise prestataire/vendeuse mentionnée dans les mentions légales (en pied de page ou en-tête), avec son capital social, RCS, SIRET/SIREN, TVA intracommunautaire, ou identifiable par son domaine email / site web officiel.
|
|
156
|
+
* Ne retournez null QUE si aucun nom de fournisseur ou d'émetteur n'est présent sur le document.
|
|
157
|
+
- Pour le SIRET ou SIREN (siretOrSiren) :
|
|
158
|
+
* Extrayez le numéro de SIRET (14 chiffres) ou SIREN (9 chiffres) DU FOURNISSEUR / ÉMETTEUR.
|
|
159
|
+
- Pour le numéro de TVA intracommunautaire (vatNumber) :
|
|
160
|
+
* Extrayez le numéro de TVA intracommunautaire DU FOURNISSEUR / ÉMETTEUR (ex: FR...).
|
|
161
|
+
|
|
162
|
+
Pour la classification comptable (categoryCode & categoryName) :
|
|
163
|
+
- Il s'agit d'une opération de CHARGES / ACHATS :
|
|
164
|
+
* categoryCode : déterminez le code racine comptable à 3 ou 4 chiffres du Plan Comptable Général (PCG) français en classe 6 :
|
|
165
|
+
601 (Matières premières), 602 (Consommables), 6061 (Énergie, électricité, carburant), 6063 (Petit outillage, équipement), 6064 (Fournitures administratives et bureau), 607 (Marchandises pour revente), 611 (Sous-traitance), 612 (Crédit-bail), 6132 (Location immobilière), 6135 (Location matériel/véhicules), 6152 (Entretien immobilier), 6155 / 6156 (Maintenance, réparations matériel et biens mobiliers), 616 (Assurances), 618 (Documentation, formations), 621 (Intérim), 6226 (Honoraires, conseils), 623 (Publicité, salons), 624 (Transports), 6251 (Déplacements, voyages, hôtels, restaurants), 6261 / 6262 (Télécoms, internet, abonnements logiciels/SaaS, frais postaux), 627 (Frais bancaires).
|
|
166
|
+
* categoryName : identifiez et décrivez précisément la nature économique principale de l'opération (ex: 'Location de véhicule', 'Maintenance photocopieur et copies', 'Fournitures administratives', 'Abonnement logiciel / SaaS', 'Honoraires juridiques', 'Carburant', 'Achat de marchandises', 'Prestation de services').
|
|
167
|
+
|
|
168
|
+
Si une information n'est pas présente dans le document ou ne peut pas être déduite logiquement, retournez null. Ne pas inventer d'information.
|
|
169
|
+
Assurez-vous que les montants soient au format numérique (décimal, ex: 14.50) et la date au format YYYY-MM-DD.
|
|
170
|
+
`;
|
|
171
|
+
},
|
|
172
|
+
},
|
|
99
173
|
} as const;
|