ecotransac-shared-js 1.2.41 → 1.2.44
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/CLAUDE.md +48 -0
- package/dist/index.js +17 -16
- package/dist/index.mjs +17 -16
- package/package.json +1 -1
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Contexte
|
|
6
|
+
|
|
7
|
+
`ecotransac-shared-js` est un package npm interne partagé entre le frontend et le backend d'EcoTransac. Il contient les données statiques métier (champs de formulaires, options de sélection), les fonctions de calcul, et les utilitaires de formatage utilisés dans les deux projets.
|
|
8
|
+
|
|
9
|
+
## Commandes
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm run build # Compile avec tsup (génère dist/)
|
|
13
|
+
npm run lint # Vérification TypeScript (tsc)
|
|
14
|
+
npm run generate # GraphQL codegen → src/types/graphql-generated.ts
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
La publication sur npm est automatique via GitHub Actions à chaque push sur `main` (build + lint + npm publish). **Ne jamais publier manuellement.**
|
|
18
|
+
|
|
19
|
+
## Architecture
|
|
20
|
+
|
|
21
|
+
Tout est réexporté depuis `src/index.ts` — c'est le seul point d'entrée public du package.
|
|
22
|
+
|
|
23
|
+
### `src/functions/`
|
|
24
|
+
|
|
25
|
+
- `agency-fees.ts` — calcul des honoraires agence selon la tranche de prix (`getFeesPercentage`, `getDisplayedPrice`, `getNetPrice`, `getIsLowPrice`). Les seuils diffèrent selon `isForProfessionalUse`.
|
|
26
|
+
- `form-values.ts` — `getValue()` formate une valeur brute en chaîne affichable (date, booléen, téléphone, adresse, devise, select).
|
|
27
|
+
- `render-logic.ts` — combinateurs de conditions pour l'affichage conditionnel des champs : `only`, `not`, `or`, `and`. Ces fonctions retournent des `Condition` (prédicats sur un `State`).
|
|
28
|
+
- `format.ts` — fonctions de formatage bas niveau (prix, date, téléphone, adresse).
|
|
29
|
+
|
|
30
|
+
### `src/types/`
|
|
31
|
+
|
|
32
|
+
- `field.ts` — types TypeScript centraux : `Field`, `FieldType`, `Condition`, `State`, `SelectOption`. Toute la logique de formulaire des deux projets s'appuie sur ces types.
|
|
33
|
+
- `graphql-generated.ts` — généré automatiquement, ne jamais modifier manuellement.
|
|
34
|
+
|
|
35
|
+
### `src/static/`
|
|
36
|
+
|
|
37
|
+
Données statiques par entité métier (`property`, `renovation`, `mandate`, `contact`) :
|
|
38
|
+
- `fields.ts` — tableau de `Field[]` décrivant les champs de formulaire (nom, type, label, condition d'affichage, options)
|
|
39
|
+
- `select-options.ts` — options de sélection pour les listes déroulantes
|
|
40
|
+
- `state.ts` — état initial pour les conditions d'affichage conditionnel
|
|
41
|
+
|
|
42
|
+
Autres fichiers statiques : `countries.ts`, `legal-status.ts`, `tiers.ts`, `company-details.ts`.
|
|
43
|
+
|
|
44
|
+
## Points non-évidents
|
|
45
|
+
|
|
46
|
+
- **Alias `@/`** → `src/` (défini dans tsconfig.json et tsup.config).
|
|
47
|
+
- Après toute modification, mettre à jour le frontend et le backend avec `npm run package-up` dans chacun.
|
|
48
|
+
- La version est auto-incrémentée par le hook pre-commit Husky.
|
package/dist/index.js
CHANGED
|
@@ -1521,20 +1521,21 @@ var mandateFormFields = [
|
|
|
1521
1521
|
tooltip: "Si vous connaissez le prix FAI que vous souhaitez obtenir, divisez ce prix par 1,05 (pour 5%) pour obtenir le prix net vendeur. Exemple : 100 000\u20AC FAI = 95 238\u20AC net vendeur (100 000 / 1,05)"
|
|
1522
1522
|
}
|
|
1523
1523
|
},
|
|
1524
|
-
{
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
},
|
|
1524
|
+
// {
|
|
1525
|
+
// name: "feePaidBy",
|
|
1526
|
+
// fieldType: "select",
|
|
1527
|
+
// label: "Honoraires à la charge de",
|
|
1528
|
+
// condition: or(
|
|
1529
|
+
// not("isForProfessionalUse"),
|
|
1530
|
+
// and(only("isForProfessionalUse"), only("isCommercialWallsSale")),
|
|
1531
|
+
// ),
|
|
1532
|
+
// requiredFor: ["MANDATE_CREATION"],
|
|
1533
|
+
// props: {
|
|
1534
|
+
// options: MANDATE_EXCLUSIVITY,
|
|
1535
|
+
// tooltip:
|
|
1536
|
+
// "Si les honoraires sont à la charge de l'acquéreur, le prix FAI correspond au prix net vendeur. Si les honoraires sont à la charge du vendeur, le prix FAI correspond au prix net vendeur + les honoraires agence.",
|
|
1537
|
+
// },
|
|
1538
|
+
// },
|
|
1538
1539
|
{
|
|
1539
1540
|
name: "agencyFeePercentage",
|
|
1540
1541
|
fieldType: "integer",
|
|
@@ -1923,8 +1924,8 @@ var COMPANY_INFO = {
|
|
|
1923
1924
|
|
|
1924
1925
|
// src/static/tiers.ts
|
|
1925
1926
|
var TIER_INFOS = [
|
|
1926
|
-
{ tier: "TIER_1", min: 0, max:
|
|
1927
|
-
{ tier: "TIER_2", min:
|
|
1927
|
+
{ tier: "TIER_1", min: 0, max: 8e4, rate: 0.7 },
|
|
1928
|
+
{ tier: "TIER_2", min: 80001, max: 12e4, rate: 0.8 },
|
|
1928
1929
|
{ tier: "TIER_3", min: 120001, max: 15e4, rate: 0.9 },
|
|
1929
1930
|
{ tier: "TIER_4", min: 150001, max: Infinity, rate: 1 }
|
|
1930
1931
|
];
|
package/dist/index.mjs
CHANGED
|
@@ -1426,20 +1426,21 @@ var mandateFormFields = [
|
|
|
1426
1426
|
tooltip: "Si vous connaissez le prix FAI que vous souhaitez obtenir, divisez ce prix par 1,05 (pour 5%) pour obtenir le prix net vendeur. Exemple : 100 000\u20AC FAI = 95 238\u20AC net vendeur (100 000 / 1,05)"
|
|
1427
1427
|
}
|
|
1428
1428
|
},
|
|
1429
|
-
{
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
},
|
|
1429
|
+
// {
|
|
1430
|
+
// name: "feePaidBy",
|
|
1431
|
+
// fieldType: "select",
|
|
1432
|
+
// label: "Honoraires à la charge de",
|
|
1433
|
+
// condition: or(
|
|
1434
|
+
// not("isForProfessionalUse"),
|
|
1435
|
+
// and(only("isForProfessionalUse"), only("isCommercialWallsSale")),
|
|
1436
|
+
// ),
|
|
1437
|
+
// requiredFor: ["MANDATE_CREATION"],
|
|
1438
|
+
// props: {
|
|
1439
|
+
// options: MANDATE_EXCLUSIVITY,
|
|
1440
|
+
// tooltip:
|
|
1441
|
+
// "Si les honoraires sont à la charge de l'acquéreur, le prix FAI correspond au prix net vendeur. Si les honoraires sont à la charge du vendeur, le prix FAI correspond au prix net vendeur + les honoraires agence.",
|
|
1442
|
+
// },
|
|
1443
|
+
// },
|
|
1443
1444
|
{
|
|
1444
1445
|
name: "agencyFeePercentage",
|
|
1445
1446
|
fieldType: "integer",
|
|
@@ -1828,8 +1829,8 @@ var COMPANY_INFO = {
|
|
|
1828
1829
|
|
|
1829
1830
|
// src/static/tiers.ts
|
|
1830
1831
|
var TIER_INFOS = [
|
|
1831
|
-
{ tier: "TIER_1", min: 0, max:
|
|
1832
|
-
{ tier: "TIER_2", min:
|
|
1832
|
+
{ tier: "TIER_1", min: 0, max: 8e4, rate: 0.7 },
|
|
1833
|
+
{ tier: "TIER_2", min: 80001, max: 12e4, rate: 0.8 },
|
|
1833
1834
|
{ tier: "TIER_3", min: 120001, max: 15e4, rate: 0.9 },
|
|
1834
1835
|
{ tier: "TIER_4", min: 150001, max: Infinity, rate: 1 }
|
|
1835
1836
|
];
|