odoo/api-reference.md
... ...
@@ -13,11 +13,10 @@ confidence: high
13 13
> **Base URL** : `https://sarl-le-relais-de-louest.odoo.com/jsonrpc`
14 14
> **Protocole** : JSON-RPC 2.0
15 15
> **Auth** : `common.login` + API Key
16
-> **Modèles documentés** : ~250 modèles standards Odoo 19
17 16
18 17
---
19 18
20
-## 1. Authentification (inchangée)
19
+## 1. Authentification
21 20
22 21
### 1.1 Obtenir un UID
23 22
... ...
@@ -98,402 +97,367 @@ Tous les modèles supportent : `search`, `search_read`, `search_count`, `read`,
98 97
99 98
## 3. Catalogue complet des modèles Odoo 19
100 99
101
-> Organisé par module. Chaque modèle est accessible via `odoo_call("nom.modele", ...)`.
102
-> ⚠️ = piège connu | 📖 = détaillé plus bas
100
+> Chaque modèle est documenté avec son rôle, ses particularités et ses pièges.
101
+> ⚠️ = piège connu | 📖 = détaillé plus bas (section 4)
103 102
104 103
### 3.0 Technique / Base (ir.*)
105 104
106 105
| Modèle | Description |
107 106
|--------|-------------|
108
-| `ir.model` | Registre de tous les modèles |
109
-| `ir.model.fields` | Champs de chaque modèle |
110
-| `ir.module.module` | Modules installés/à installer |
111
-| `ir.ui.view` | Vues XML (form, tree, kanban...) |
112
-| `ir.ui.menu` | Menus |
113
-| `ir.actions.act_window` | Actions fenêtre |
114
-| `ir.actions.server` | Actions serveur / automations |
115
-| `ir.actions.report` | Rapports PDF |
116
-| `ir.actions.url` | Actions URL |
117
-| `ir.cron` | Tâches planifiées |
118
-| `ir.mail_server` | Serveurs SMTP sortants |
119
-| `ir.config_parameter` | Paramètres système (clé/valeur) |
120
-| `ir.sequence` | Séquences de numérotation |
121
-| `ir.translation` | Traductions |
122
-| `ir.attachment` | Pièces jointes / documents |
123
-| `ir.qweb` | Templates QWeb |
124
-| `ir.filters` | Filtres sauvegardés utilisateur |
125
-| `ir.default` | Valeurs par défaut utilisateur |
126
-| `ir.logging` | Logs applicatifs |
127
-| `ir.property` | Propriétés champ |
128
-
129
-### 3.1 Contacts (res.* — resources)
107
+| `ir.model` | Registre central de tous les modèles Odoo. Stocke chaque modèle installé avec son nom technique, son nom affiché, son module propriétaire et ses méta-données. Utilisable pour découvrir les modèles disponibles : `search_read([], {"fields": ["model", "name"]})` |
108
+| `ir.model.fields` | Méta-données complètes de chaque champ : nom, type (char, m2o, int...), relation, taille, aide, obligatoire. Base de `fields_get()`. Permet d'explorer la structure d'un modèle sans y accéder directement |
109
+| `ir.module.module` | Modules Odoo installés ou disponibles. Champs clés : `name` (nom technique), `display_name`, `state` (installed/uninstalled/to install). Permet d'installer des modules : `button_immediate_install([[id]])` |
110
+| `ir.ui.view` | Vues XML qui définissent l'interface utilisateur : formulaires, listes, kanban, graphiques, calendriers. Héritage via `inherit_id`. La clé `arch_base` contient le XML. Chaque vue est liée à un modèle spécifique |
111
+| `ir.ui.menu` | Menus de navigation de l'interface Odoo. Structure arborescente via `parent_id`. Lié à une action (`action`). Définit l'ordre d'affichage (`sequence`), les icônes, et les groupes d'accès |
112
+| `ir.actions.act_window` | Action la plus courante : ouvre une fenêtre (liste/formulaire) pointant vers un modèle (`res_model`). Définit les vues à utiliser (`view_mode` : tree,form,kanban,calendar,graph) et les filtres par défaut |
113
+| `ir.actions.server` | Actions serveur exécutant du code Python côté backend. Utilisé pour les automatisations, les boutons intelligents, les actions planifiées. Le code est stocké dans `code` et exécuté via `eval()` |
114
+| `ir.actions.report` | Rapports PDF (factures, devis, tickets...). Lié à un template QWeb. Définit le type de papier, le nom du fichier généré, et si le rapport est attachable aux emails |
115
+| `ir.actions.url` | Actions qui redirigent vers une URL externe. Utile pour les liens vers des dashboards externes, des contrôleurs custom, ou des sites tiers |
116
+| `ir.cron` | Tâches planifiées (cron jobs). Exécute une méthode à intervalle régulier. Champs : `interval_number`, `interval_type` (minutes/hours/days/weeks/months), `active`, `numbercall` (-1 = infini). Désactiver : `write([id], {"active": False})` |
117
+| `ir.mail_server` | Serveurs SMTP sortants. Définit le relais email : `smtp_host`, `smtp_port`, `smtp_user`, `smtp_encryption` (ssl/tls). Pour bloquer tous les emails sortants : `write([ids], {"active": False})` |
118
+| `ir.config_parameter` | Paramètres de configuration clé/valeur globaux. Stocke les webhooks URLs, les clés API tiers, les seuils. Lecture : `get_param("web.base.url")`. Écriture : `set_param("key", "value")` |
119
+| `ir.sequence` | Séquences de numérotation automatique (SO-XXX, INV-XXX, POS/2026/...). Définit le préfixe, suffixe, padding (`padding`), prochain numéro (`number_next`). Une séquence par type de document |
120
+| `ir.translation` | Traductions de l'interface. Stocke la source, la langue (`lang`), et la valeur (`value`). Permet d'exporter/importer les traductions pour personnaliser les termes |
121
+| `ir.attachment` | Pièces jointes et documents. Stockage binaire (`datas` en base64) ou fichiers. Lié à n'importe quel enregistrement via `res_model` + `res_id`. ⚠️ Utiliser plutôt que `product.image` (obsolète) |
122
+| `ir.qweb` | Templates QWeb pour le rendu HTML/PDF. Syntaxe XML avec directives : `<t t-foreach>`, `<t t-if>`, `<t t-esc>`. Utilisé par les rapports, emails, et le frontend website |
123
+| `ir.filters` | Filtres sauvegardés personnels. Chaque utilisateur peut créer ses propres filtres sur une vue liste. Stocke le `domain`, le `context`, et le `sort` |
124
+| `ir.default` | Valeurs par défaut des champs par utilisateur. Quand un champ est pré-rempli automatiquement, la valeur vient d'ici. Accessible via `ir.default.get(model, field)` |
125
+| `ir.logging` | Logs applicatifs. Niveau (`level` : info/warning/error/critical), message (`message`), traceback (`path`). Utile pour le débogage. ⚠️ Volumineux en production |
126
+| `ir.property` | Propriétés de champ multi-entreprise. Permet des valeurs différentes par société pour un même champ. Principalement utilisé en comptabilité pour les comptes par défaut |
127
+
128
+### 3.1 Contacts (res.*)
130 129
131 130
| Modèle | Description |
132 131
|--------|-------------|
133
-| `res.partner` | 📖 Contacts, clients, fournisseurs |
134
-| `res.partner.category` | Étiquettes / tags |
135
-| `res.partner.bank` | Comptes bancaires |
136
-| `res.partner.title` | Titres (M., Mme, Dr...) |
137
-| `res.partner.industry` | Secteurs d'activité |
138
-| `res.company` | Sociétés |
139
-| `res.users` | Utilisateurs |
140
-| `res.groups` | Groupes de sécurité |
141
-| `res.lang` | Langues |
142
-| `res.country` | Pays |
143
-| `res.country.state` | Régions/États |
144
-| `res.currency` | Devises |
145
-| `res.currency.rate` | Taux de change |
146
-| `res.bank` | Banques |
147
-| `res.config.settings` | Configuration générale |
132
+| `res.partner` | **Le modèle central de tous les contacts Odoo** : clients, fournisseurs, prospects, employés, sociétés. Champs clés : `name`, `email`, `phone`, `customer_rank` (1 = client), `supplier_rank` (1 = fournisseur), `is_company` (True = société morale), `parent_id` (contacts liés à une société). Modèle le plus utilisé de tout l'écosystème Odoo |
133
+| `res.partner.category` | Étiquettes/tags pour catégoriser les contacts. Exemples : "VIP", "Prospect chaud", "Revendeur agréé". Relation Many2many avec `res.partner` via `category_id` |
134
+| `res.partner.bank` | Comptes bancaires des contacts : IBAN (`acc_number`), code BIC, banque (`bank_id`). Un contact peut avoir plusieurs comptes. Utilisé pour les prélèvements SEPA et les virements |
135
+| `res.partner.title` | Titres de civilité configurables : M., Mme, Dr, Pr, Mlle. Utilisé dans les formulaires de contact et les adresses de facturation/formulaires |
136
+| `res.partner.industry` | Secteurs d'activité : Agriculture, Industrie, Services, Retail, Santé... Aide à la segmentation client et aux rapports par secteur |
137
+| `res.company` | Sociétés de l'instance Odoo. Contient la raison sociale, l'adresse, le n° TVA (`vat`), le logo, la devise par défaut, le pays. En multi-entreprise, chaque entité a sa propre `res.company` avec sa comptabilité séparée |
138
+| `res.users` | Utilisateurs du système. Hérite de `res.partner` (chaque utilisateur est aussi un contact). Champs : `login` (email), `password`, `groups_id` (droits), `company_id`. ⚠️ Ne pas confondre avec `res.partner` qui stocke tous les contacts externes |
139
+| `res.groups` | Groupes de sécurité / droits d'accès. Chaque utilisateur appartient à un ou plusieurs groupes qui définissent ce qu'il peut voir et faire. Exemples : `base.group_user` (tout utilisateur), `sales_team.group_sale_manager` (manager ventes) |
140
+| `res.lang` | Langues disponibles. Définit les traductions chargées et le format des dates/nombres. Code ISO : `fr_FR`, `en_US`. `active=True` = langue activée |
141
+| `res.country` | Pays. Champs : `name`, `code` (ISO 3166), `currency_id`, `phone_code`. ⚠️ Attention : Réunion = ID 187 (pas 75, qui est la France métropolitaine) |
142
+| `res.country.state` | Régions, états, départements. Lié à `res.country`. Pour la France : Île-de-France, Auvergne-Rhône-Alpes, La Réunion... |
143
+| `res.currency` | Devises : EUR, USD, GBP... Champs : `name`, `symbol` (€, $, £), `rounding` (0.01 pour EUR, 1 pour JPY), `position` (before/after). La devise de la société détermine la comptabilité |
144
+| `res.currency.rate` | Taux de change par devise et par date. Permet la comptabilité multi-devises. Un taux est toujours exprimé par rapport à la devise de référence de l'entreprise |
145
+| `res.bank` | Institutions financières : "BNP Paribas", "Crédit Agricole"... Champs : `name`, `bic` (code SWIFT/BIC). Distinct de `res.partner.bank` qui stocke les comptes individuels |
146
+| `res.config.settings` | Configuration générale de l'instance. Interface unique pour tous les paramètres système (durée de validité des devis, devise par défaut...). Les valeurs sont stockées dans `ir.config_parameter` |
148 147
149 148
### 3.2 Ventes (sale.*)
150 149
151 150
| Modèle | Description |
152 151
|--------|-------------|
153
-| `sale.order` | 📖 Commandes / devis |
154
-| `sale.order.line` | 📖 Lignes de commande |
155
-| `sale.order.template` | Modèles de devis |
156
-| `sale.order.template.line` | Lignes de modèle de devis |
157
-| `sale.order.template.option` | Options de modèles |
158
-| `sale.advance.payment.inv` | Assistant facture d'acompte |
159
-| `sale.order.cancel` | Assistant annulation |
160
-| `sale.payment.provider.onboarding.wizard` | Assistant onboarding paiement |
161
-| `sale.order.line.margin` | Marge par ligne (lecture) |
152
+| `sale.order` | **Devis et commandes clients**. Cycle : `draft` (devis) → `sent` (envoyé) → `sale` (commandé) → `done` (livré) → `cancel`. ⚠️ 7 champs obligatoires pour `create` : `name`, `partner_id`, `partner_invoice_id`, `partner_shipping_id`, `company_id`, `date_order`, `picking_policy`. Stocker la référence externe BilletWeb dans `client_order_ref` |
153
+| `sale.order.line` | Lignes de commande. Contient le produit (`product_id`), la quantité (`product_uom_qty`), le prix unitaire (`price_unit`), la remise (`discount`), les taxes. Peut être lié à un billet événement (`event_ticket_id`) et des inscriptions (`registration_ids`) |
154
+| `sale.order.template` | Modèles de devis réutilisables. Prédéfinit un panier de produits/services pour créer des devis en un clic. Contient des lignes via `sale.order.template.line` |
155
+| `sale.order.template.line` | Lignes des modèles de devis. Mêmes champs que `sale.order.line` mais liées à un template plutôt qu'à une commande réelle |
156
+| `sale.order.template.option` | Options de modèle de devis : produits optionnels présentés comme cases à cocher dans le formulaire de création de devis |
157
+| `sale.advance.payment.inv` | Assistant de facture d'acompte (wizard). Depuis un devis, génère une facture pour un pourcentage du montant total avant livraison |
158
+| `sale.order.cancel` | Assistant d'annulation de commande. Propose des raisons et gère le retour en stock automatique des produits livrés |
159
+| `sale.payment.provider.onboarding.wizard` | Assistant de configuration des fournisseurs de paiement en ligne (Stripe, PayPal, etc.) |
160
+| `sale.order.line.margin` | Marge calculée par ligne : prix de vente - prix de revient. Lecture seule, calculé automatiquement à partir du `standard_price` du produit |
162 161
163 162
### 3.3 PDV / Point de Vente (pos.*)
164 163
165 164
| Modèle | Description |
166 165
|--------|-------------|
167
-| `pos.order` | 📖 Commandes PDV |
168
-| `pos.order.line` | 📖 Lignes PDV |
169
-| `pos.session` | 📖 Sessions de caisse |
170
-| `pos.config` | 📖 Configuration PDV |
171
-| `pos.payment` | Paiements PDV |
172
-| `pos.payment.method` | Modes de paiement |
173
-| `pos.category` | Catégories de produits PDV |
174
-| `pos.bill` | Tickets/reçus |
175
-| `pos.session.statement` | Relevés de session |
176
-| `pos.cash.box.in` | Entrée caisse |
177
-| `pos.cash.box.out` | Sortie caisse |
178
-| `pos.order.return` | Remboursement PDV |
179
-| `pos.discount` | Remises PDV |
180
-| `pos.combo` | Combos (menus) |
181
-| `pos.combo.line` | Lignes de combo |
182
-| `pos.close.session.wizard` | Assistant fermeture session |
183
-| `pos.printer` | Imprimantes IoT |
184
-| `pos.pack.operation.lot` | N° de lot/série |
166
+| `pos.order` | **Commandes PDV / tickets de caisse**. Créé automatiquement à chaque vente. Cycle : `draft` → `paid` → `done` → `invoiced`. Contient le total TTC (`amount_total`), les taxes, le rendu monnaie (`amount_return`). Lié à une session via `session_id` |
167
+| `pos.order.line` | Lignes de ticket PDV : produit, quantité (`qty`), prix unitaire, remise, taxes. Lié à `pos.order`. Créées en temps réel pendant l'encaissement |
168
+| `pos.session` | **Session de caisse**. Cycle : `opening_control` (ouverture) → `opened` → `closing_control` (clôture) → `closed`. Contient le solde d'ouverture (`cash_register_balance_start`) et de clôture, l'écart, et le détail par mode de paiement |
169
+| `pos.config` | Configuration du PDV : nom, modes de paiement disponibles, catégories affichées dans la grille, imprimante connectée, comportement (standard/restaurant/bar). Le champ `iface_print_via_proxy` active l'impression ticket |
170
+| `pos.payment` | Enregistrement individuel d'un paiement dans le PDV. Lié à une commande et un mode de paiement. Contient le montant, le rendu monnaie, et le statut |
171
+| `pos.payment.method` | Modes de paiement du PDV : Espèces, Carte bancaire, Chèque, Bon cadeau. Définit le journal comptable associé. Configurable par session |
172
+| `pos.category` | Catégories de produits affichées comme onglets dans la grille du PDV. Permet d'organiser les boutons produits (Billetterie, Snack, Boissons...) |
173
+| `pos.bill` | Tickets/reçus de caisse. Stocke le PDF et les métadonnées d'impression pour réimpression ultérieure |
174
+| `pos.session.statement` | Relevé de session : synthèse des paiements par mode. Généré automatiquement à la clôture |
175
+| `pos.cash.box.in` | Entrée d'argent dans la caisse hors vente (ex: apport de monnaie en cours de session, remise de fonds). Justification obligatoire |
176
+| `pos.cash.box.out` | Sortie d'argent de la caisse (ex: prélèvement pour dépôt en banque). Justification obligatoire |
177
+| `pos.order.return` | Remboursement / retour PDV. Crée un avoir lié à la commande d'origine. Gère la remise en stock si applicable |
178
+| `pos.discount` | Remises PDV prédéfinies (-10%, -20%...) applicables en un clic depuis l'interface de caisse |
179
+| `pos.combo` | Combos / menus groupés : "Menu Enfant" = Luge + Snack + Boisson à prix forfaitaire |
180
+| `pos.combo.line` | Lignes des combos : chaque produit inclus avec sa quantité et son prix dans le combo |
181
+| `pos.close.session.wizard` | Assistant de fermeture de session : étape 1 (compter les espèces), étape 2 (saisir totaux), étape 3 (confirmer) |
182
+| `pos.printer` | Imprimantes connectées au PDV (ticket client, cuisine, bar). Géré via IoT Box Odoo ou connexion IP directe |
183
+| `pos.pack.operation.lot` | N° de lot/série pour les produits tracés vendus en PDV. Obligatoire si le produit a `tracking != "none"` |
185 184
186 185
### 3.4 Produits (product.*)
187 186
188 187
| Modèle | Description |
189 188
|--------|-------------|
190
-| `product.template` | Modèles de produits |
191
-| `product.product` | 📖 Variantes produits |
192
-| `product.category` | 📖 Catégories |
193
-| `product.attribute` | Attributs (taille, couleur...) |
194
-| `product.attribute.value` | Valeurs d'attribut |
195
-| `product.template.attribute.line` | Ligne attribut-modèle |
196
-| `product.template.attribute.value` | Valeur attribut-modèle |
197
-| `product.packaging` | Colisage |
198
-| `product.supplierinfo` | Infos fournisseur par produit |
199
-| `product.pricelist` | Listes de prix |
200
-| `product.pricelist.item` | Règles de prix |
201
-| `product.uom` | Unités de mesure |
202
-| `product.uom.categ` | Catégories d'unités |
203
-| `product.image` | Images (obsolète, utiliser `ir.attachment`) |
204
-| `product.label.layout` | Mise en page étiquettes |
205
-| `product.replenish` | Assistant réapprovisionnement |
189
+| `product.template` | Modèle de produit générique : nom, description, catégorie, prix par défaut, taxes. Si le produit n'a pas de variantes, Odoo crée automatiquement un `product.product` correspondant |
190
+| `product.product` | **Variante spécifique d'un produit**. C'est CE modèle qui est utilisé dans les commandes, le PDV, l'inventaire. Champs propres : `barcode`, `default_code`. ⚠️ Utiliser `type` (consu/service/product), pas `detailed_type` qui n'existe pas sur SaaS |
191
+| `product.category` | Catégories de produits hiérarchiques (`parent_id`). Utilisées pour organiser les produits, appliquer des comptes comptables par défaut, structurer les grilles PDV |
192
+| `product.attribute` | Attributs de variante : Taille, Couleur, Matière. Chaque attribut a des valeurs (`product.attribute.value`) qui se combinent pour générer les variantes |
193
+| `product.attribute.value` | Valeurs d'attribut : "Rouge", "XL", "42", "Cuir". Lié à un attribut. Utilisé pour générer les combinaisons de variantes |
194
+| `product.template.attribute.line` | Ligne liant un attribut à un modèle de produit. Définit quelles valeurs d'attribut sont disponibles pour ce produit spécifique |
195
+| `product.template.attribute.value` | Association valeur → produit avec prix supplémentaire éventuel (ex: +5€ pour XL, +10€ pour Cuir) |
196
+| `product.packaging` | Colisage : carton de 12, palette de 48... Utilisé pour les achats en gros et les propositions de quantité dans les commandes |
197
+| `product.supplierinfo` | Infos fournisseur par produit : prix d'achat, délai (jours), quantité minimum, référence chez le fournisseur. Un produit peut avoir plusieurs entrées (une par fournisseur) |
198
+| `product.pricelist` | Listes de prix / tarifs. Permet des prix différents par client, période, devise. Contient des règles (`product.pricelist.item`) |
199
+| `product.pricelist.item` | Règle de prix dans une liste : produit ou catégorie cible, calcul (fixe/pourcentage/formule), période de validité, quantité minimum |
200
+| `product.uom` | Unités de mesure : unité, kg, litre, mètre, boîte, palette... Avec facteur de conversion (1 boîte = 12 unités). Lié à une catégorie |
201
+| `product.uom.categ` | Catégories d'unités : Volume, Poids, Longueur, Unité. Les unités d'une même catégorie sont convertibles entre elles |
202
+| `product.image` | ⚠️ **Obsolète**. Remplacé par `ir.attachment`. Stockait les images produits en base64 |
203
+| `product.label.layout` | Assistant de mise en page pour impression d'étiquettes produits (format, quantité) |
204
+| `product.replenish` | Assistant de réapprovisionnement : depuis la fiche produit, génère un ordre de réappro directement |
206 205
207 206
### 3.5 Inventaire / Stock (stock.*)
208 207
209 208
| Modèle | Description |
210 209
|--------|-------------|
211
-| `stock.picking` | Transferts / bons de livraison |
212
-| `stock.move` | Mouvements de stock |
213
-| `stock.move.line` | Lignes de mouvement |
214
-| `stock.quant` | 📖 Quantités en stock |
215
-| `stock.location` | Emplacements |
216
-| `stock.warehouse` | Entrepôts |
217
-| `stock.inventory.adjustment.name` | Ajustement d'inventaire |
218
-| `stock.rule` | Règles de réapprovisionnement |
219
-| `stock.picking.type` | Types d'opération |
220
-| `stock.package.type` | Types de colis |
221
-| `stock.package.destination` | Destination colis |
222
-| `stock.package.level` | Niveau colis |
223
-| `stock.lot` | Lots / numéros de série |
224
-| `stock.storage.category` | Catégories de stockage |
225
-| `stock.putaway.rule` | Règles de rangement |
226
-| `stock.scrap` | Mise au rebut |
227
-| `stock.warn.insufficient.qty` | Assistant stock insuffisant |
228
-| `stock.quantity.history` | Historique quantités |
229
-| `stock.track.confirmation` | Traçabilité |
230
-| `stock.track.line` | Ligne de traçabilité |
231
-| `stock.assign.serial` | Assignation n° série |
232
-| `stock.scheduler.compute` | Calcul du scheduler MTS/MTO |
233
-| `stock.change.product.qty` | Modification quantité |
234
-| `stock.return.picking` | Retour de transfert |
235
-
236
-### 3.6 Facturation / Comptabilité (account.*)
210
+| `stock.picking` | **Transferts / bons de livraison**. Déplace des produits entre emplacements. Types : livraison client, réception fournisseur, transfert interne. Cycle : `draft` → `waiting` → `confirmed` → `assigned` → `done` → `cancel` |
211
+| `stock.move` | Mouvement de stock planifié : quel produit, de quel emplacement source, vers quel emplacement destination, quelle quantité. Créés par les commandes et les pickings. Cycle : `draft` → `confirmed` → `assigned` → `done` → `cancel` |
212
+| `stock.move.line` | Ligne de mouvement exécutée physiquement. Spécifie le lot/série, l'emplacement précis, la quantité prélevée. Créé au moment de la réservation ou du transfert réel |
213
+| `stock.quant` | **Quantité physique en stock**. Combinaison unique : produit × emplacement × lot/série × quantité. C'est LA source de vérité de l'inventaire. Le stock total d'un produit = somme de ses quants |
214
+| `stock.location` | Emplacements de stockage hiérarchiques (`location_id` = emplacement parent). Types via `usage` : internal (stock), supplier (fournisseurs), customer (clients), inventory (pertes), production, transit |
215
+| `stock.warehouse` | Entrepôts. Un entrepôt crée 3 emplacements par défaut : stock, entrée, sortie. Plusieurs entrepôts possibles par société |
216
+| `stock.inventory.adjustment.name` | Inventaire physique. Compare les quantités théoriques (quants) avec les quantités comptées. Génère automatiquement les ajustements d'écart |
217
+| `stock.rule` | Règles de réapprovisionnement automatique : quand et comment réapprovisionner (quantité min/max, délai, méthode MTS/MTO) |
218
+| `stock.picking.type` | Types d'opération : Livraison client, Réception fournisseur, Transfert interne. Définit emplacements source/destination par défaut et la séquence de numérotation |
219
+| `stock.package.type` | Types de colis : boîte, palette, conteneur. Définit dimensions, poids, et éventuellement le nombre de produits par colis |
220
+| `stock.package.destination` | Destination d'un colis entier (adresse de livraison). Évite de renseigner l'adresse produit par produit |
221
+| `stock.package.level` | Hiérarchie des colis : palette contient des boîtes, conteneur contient des palettes |
222
+| `stock.lot` | Lots et numéros de série. Traçabilité : date de fabrication, péremption, fournisseur. Obligatoire si `tracking = "lot"` ou `"serial"` sur le produit |
223
+| `stock.storage.category` | Catégories de stockage restreignant quels produits vont où : température contrôlée, dangereux, fragile, zone sécurisée |
224
+| `stock.putaway.rule` | Règle de rangement automatique : quand le produit X arrive, le mettre dans l'emplacement Y. Lié à une catégorie + emplacement destination |
225
+| `stock.scrap` | Mise au rebut : produits endommagés, périmés, perdus. Déplace vers un emplacement "Rebuts" et sort de l'inventaire utilisable |
226
+| `stock.warn.insufficient.qty` | Assistant d'avertissement quand on essaie de livrer plus que le stock disponible (wizard bloquant) |
227
+| `stock.quantity.history` | Historique des quantités en stock à une date donnée. Permet de voir l'état du stock à n'importe quelle date passée |
228
+| `stock.track.confirmation` | Assistant vérifiant que tous les lots/séries obligatoires sont renseignés avant de finaliser un transfert |
229
+| `stock.track.line` | Ligne de suivi traçabilité : fait le lien entre un mouvement et son lot/série d'origine |
230
+| `stock.assign.serial` | Assistant d'assignation de n° de série. Permet de générer ou sélectionner des numéros pour les produits suivis |
231
+| `stock.scheduler.compute` | Déclencheur du calcul MRP complet. Analyse tous les besoins (commandes clients, réappro) et génère les ordres de fabrication/réappro |
232
+| `stock.change.product.qty` | Assistant de modification manuelle de quantité (correction de stock sans inventaire complet) |
233
+| `stock.return.picking` | Assistant de retour : crée un transfert inverse pour retourner des produits au fournisseur ou reprendre une livraison client |
234
+
235
+### 3.6 Comptabilité (account.*)
237 236
238 237
| Modèle | Description |
239 238
|--------|-------------|
240
-| `account.move` | 📖 Écritures comptables / Factures |
241
-| `account.move.line` | Lignes d'écriture |
242
-| `account.journal` | Journaux (ventes, banque, caisse...) |
243
-| `account.tax` | 📖 Taxes |
244
-| `account.tax.group` | 📖 Groupes de taxes |
245
-| `account.fiscal.position` | Positions fiscales |
246
-| `account.fiscal.position.tax` | Mapping taxes position fiscale |
247
-| `account.fiscal.position.account` | Mapping comptes position fiscale |
248
-| `account.payment` | 📖 Paiements |
249
-| `account.payment.register` | Assistant enregistrement paiement |
250
-| `account.payment.term` | Conditions de paiement |
251
-| `account.payment.term.line` | Lignes conditions de paiement |
252
-| `account.chart.template` | Modèle plan comptable ⚠️ SaaS restreint |
253
-| `account.account` | Comptes comptables |
254
-| `account.account.type` | Types de comptes |
255
-| `account.account.tag` | Étiquettes comptes |
256
-| `account.group` | Groupes de comptes |
257
-| `account.bank.statement` | Relevés bancaires |
258
-| `account.bank.statement.line` | Lignes relevé |
259
-| `account.reconcile.model` | Modèles de lettrage |
260
-| `account.reconcile.model.line` | Lignes modèle |
261
-| `account.analytic.account` | Comptes analytiques |
262
-| `account.analytic.line` | Lignes analytiques |
263
-| `account.analytic.plan` | Plans analytiques |
264
-| `account.analytic.tag` | Étiquettes analytiques |
265
-| `account.asset` | Immobilisations |
266
-| `account.asset.category` | Catégories d'immobilisation |
267
-| `account.budget.post` | Postes budgétaires |
268
-| `account.cash.rounding` | Arrondi espèces |
269
-| `account.financial.year.op` | Ouverture exercice |
270
-| `account.aged.trial.balance` | Balance âgée |
271
-| `account.general.ledger` | Grand livre |
272
-| `account.trial.balance` | Balance |
273
-| `account.tax.report` | Rapport de taxes |
274
-| `account.report` | Rapports comptables |
275
-| `account.report.line` | Lignes de rapport |
276
-| `account.accrued.orders.wizard` | Assistant OD |
277
-| `account.automatic.entry.wizard` | Assistant écritures auto |
278
-| `wizard.multi.charts.accounts` | Assistant plan comptable ⚠️ SaaS restreint |
239
+| `account.move` | **Écritures comptables ET factures**. Modèle central. Une facture client = `move_type: "out_invoice"`, un avoir = `"out_refund"`, facture fournisseur = `"in_invoice"`. États : `draft` → `posted` → `cancel`. Contient totaux, devise, partenaire, date d'échéance |
240
+| `account.move.line` | Lignes d'écriture comptable. Chaque ligne débite ou crédite un compte. Contient : compte (`account_id`), débit, crédit, partenaire, date d'échéance, statut de rapprochement (`reconciled`). Base du lettrage et du reporting |
241
+| `account.journal` | Journaux comptables : Ventes, Achats, Banque, Caisse, Opérations diverses. Chaque pièce comptable est rattachée à un journal. Définit séquence de numérotation, devise, comptes par défaut |
242
+| `account.tax` | **Taxes/TVA**. Taux via `amount` (8.5, 2.1, 20...), type de calcul (`amount_type` : percent/fixed/group), utilisation (`type_tax_use` : sale/purchase/none). Pour La Réunion : créer 8.5% et 2.1%, désactiver les taux métropole (20%/10%/5.5%) |
243
+| `account.tax.group` | Groupe de taxes : réunit vente et achat d'un même taux. ⚠️ DOM : ne pas mettre `country_id` (erreur mismatch Réunion ID 187 ≠ France ID 75). Créer le groupe sans contrainte pays |
244
+| `account.fiscal.position` | Position fiscale : mapping automatique taxes/comptes selon le pays ou le client. Exemple : position "DOM" mappant 20% → 8.5% |
245
+| `account.fiscal.position.tax` | Ligne de mapping : taxe source → taxe destination. "Quand la taxe 20% est appliquée, utiliser 8.5% à la place" |
246
+| `account.fiscal.position.account` | Ligne de mapping : compte source → compte destination. Change le compte de produit selon la position fiscale |
247
+| `account.payment` | **Paiement enregistré**. Type : `inbound` (reçu) / `outbound` (envoyé). Lié à des factures, un journal, un mode de paiement. Montant, date, référence |
248
+| `account.payment.register` | Assistant wizard de paiement : crée un `account.payment` et lettre automatiquement avec les factures ouvertes du partenaire |
249
+| `account.payment.term` | Conditions de paiement : "30 jours fin de mois", "45 jours net", "à réception". Contient des lignes d'échéance |
250
+| `account.payment.term.line` | Ligne de condition : pourcentage dû, nombre de jours, jour du mois. Exemple : 50% à J+30, 50% à J+60 |
251
+| `account.chart.template` | Modèle de plan comptable standard (PCG France, US GAAP...). ⚠️ SaaS : installation via API restreinte, passer par l'interface web |
252
+| `account.account` | **Comptes comptables**. Plan de comptes : 707000 Ventes, 401000 Fournisseurs, 512000 Banque... Type de compte, code, devise, réconciliable ou non |
253
+| `account.account.type` | Types de comptes : Actif, Passif, Produits, Charges, Capitaux propres. Définit le comportement (débit/crédit par défaut, sens du solde) |
254
+| `account.account.tag` | Étiquettes comptes pour reporting fiscal : "TVA déductible", "Charges déductibles", "Produits imposables" |
255
+| `account.group` | Groupes de comptes pour présentation du bilan et compte de résultat. Structure hiérarchique (comptes de bilan, comptes de résultat...) |
256
+| `account.bank.statement` | Relevé bancaire importé (CSV, OFX, CODA) ou saisi. Contient des lignes à rapprocher avec les écritures comptables |
257
+| `account.bank.statement.line` | Ligne de relevé : date, libellé, montant, contrepartie suggérée. À lettrer avec les `account.move.line` |
258
+| `account.reconcile.model` | Modèle de lettrage automatique : règles pour rapprocher les lignes de relevé avec les écritures (ex: si libellé contient "FACT" → chercher la facture) |
259
+| `account.reconcile.model.line` | Ligne de modèle : compte de contrepartie, pourcentage, montant fixe pour répartition automatique |
260
+| `account.analytic.account` | **Comptes analytiques / Centres de coûts**. Suivi coûts/revenus par projet, département, client. Ventilation obligatoire ou optionnelle selon config |
261
+| `account.analytic.line` | Lignes analytiques : temps passé, coûts, revenus par compte analytique. Utilisé par timesheets, notes de frais, ventilation factures |
262
+| `account.analytic.plan` | Plans analytiques : regroupements de comptes pour analyses multi-axes (projet × département × client) |
263
+| `account.analytic.tag` | Étiquettes analytiques pour catégorisation des lignes |
264
+| `account.analytic.distribution.model` | Modèle de répartition analytique automatique (ex: 60% département A, 40% département B) |
265
+| `account.asset` | Immobilisations : machines, véhicules, bâtiments. Gère l'amortissement automatique (durée, méthode linéaire/dégressif, valeur résiduelle) |
266
+| `account.asset.category` | Catégories d'immobilisation : comptes de dotation, amortissement, sortie par défaut |
267
+| `account.budget.post` | Postes budgétaires : Salaires, Marketing, IT... Liés aux comptes comptables pour analyse |
268
+| `account.cash.rounding` | Arrondi espèces : règle d'arrondi aux 5 centimes (Suisse) ou suppression centimes. Appliqué en PDV et facturation |
269
+| `account.financial.year.op` | Assistant ouverture exercice : génère les écritures d'à-nouveaux de clôture |
270
+| `account.aged.trial.balance` | Balance âgée : créances/dettes ventilées par échéance (0-30j, 30-60j, 60-90j, >90j). Rapport de recouvrement |
271
+| `account.general.ledger` | Grand livre : toutes les écritures d'un compte sur une période avec débit, crédit, cumul progressif |
272
+| `account.trial.balance` | Balance générale : par compte, total débit, total crédit, solde. Doit être équilibrée (total débit = total crédit) |
273
+| `account.tax.report` | Rapport de TVA / déclaration fiscale : TVA collectée, TVA déductible, montant à payer ou crédit |
274
+| `account.report` | Rapports financiers configurables : bilan, compte de résultat. Lié à `account.report.line` |
275
+| `account.report.line` | Ligne de rapport : nom, formule (somme de comptes, opérations), niveau hiérarchique |
276
+| `account.accrued.orders.wizard` | Assistant OD (Opérations Diverses) : écritures de régularisation |
277
+| `account.automatic.entry.wizard` | Assistant d'écritures récurrentes automatiques (loyers, abonnements...) |
278
+| `wizard.multi.charts.accounts` | Assistant d'installation du plan comptable. ⚠️ SaaS : API restreinte, à faire via Paramètres → Comptabilité → Localisation fiscale |
279 279
280 280
### 3.7 Événements (event.*)
281 281
282 282
| Modèle | Description |
283 283
|--------|-------------|
284
-| `event.event` | 📖 Événements |
285
-| `event.event.ticket` | 📖 Types de billets |
286
-| `event.registration` | 📖 Participants / inscriptions |
287
-| `event.type` | Catégories d'événements |
288
-| `event.tag` | Étiquettes événements |
289
-| `event.mail` | Emails événement planifiés |
290
-| `event.mail.registration` | Emails inscription |
291
-| `event.track` | Programme / sessions |
292
-| `event.track.location` | Lieux de session |
293
-| `event.track.tag` | Étiquettes session |
294
-| `event.sponsor` | Sponsors |
295
-| `event.sponsor.type` | Types de sponsor |
296
-| `event.registration.cancel` | Assistant annulation inscription |
284
+| `event.event` | **Événement** : nom, dates, lieu, places max, responsable. Contient billets (`event_ticket_ids`) et inscriptions (`registration_ids`). ⚠️ Désactiver `auto_confirm` pour éviter l'envoi d'emails en masse à chaque inscription |
285
+| `event.event.ticket` | **Type de billet**. Lié à un produit (`product_id`) — la vente du produit génère l'inscription. Définit le prix, le nombre de places disponibles. Essentiel pour le flux BilletWeb → Odoo |
286
+| `event.registration` | **Inscription / Participant**. Nom, email, code-barres (`barcode` pour QR BilletWeb), état (`draft`/`open`/`done`/`cancel`), billet, commande liée. ⚠️ `description` n'existe pas → utiliser `barcode` pour les références externes |
287
+| `event.type` | Catégories d'événements : Conférence, Salon, Formation, Concert... Paramètres par défaut (durée, modèle email) |
288
+| `event.tag` | Étiquettes événement pour filtrage et recherche : "Annuel", "Scolaire", "Entreprise" |
289
+| `event.mail` | Emails planifiés liés à un événement (quel template, envoyé quand : X jours avant/après). Utilise `mail.template` |
290
+| `event.mail.registration` | Emails planifiés spécifiques aux inscriptions ("rappel 2 jours avant l'événement", "remerciement après") |
291
+| `event.track` | Programme/Sessions : "10h - Keynote", "14h - Workshop". Lieu, durée, speaker, description |
292
+| `event.track.location` | Lieux de session : Salle A, Auditorium, Stand 12. Lié à l'événement |
293
+| `event.track.tag` | Étiquettes session : "Technique", "Débutant", "Avancé" |
294
+| `event.sponsor` | Sponsors : nom, logo, niveau, URL, description. Affiché sur la page événement |
295
+| `event.sponsor.type` | Niveaux de sponsoring (Platinum, Gold, Silver, Bronze) avec ordre d'affichage |
296
+| `event.registration.cancel` | Assistant annulation inscription avec raison et email optionnel |
297 297
298 298
### 3.8 CRM (crm.*)
299 299
300 300
| Modèle | Description |
301 301
|--------|-------------|
302
-| `crm.lead` | Pistes / Leads |
303
-| `crm.team` | Équipes commerciales |
304
-| `crm.stage` | Étapes du pipeline |
305
-| `crm.tag` | Étiquettes CRM |
306
-| `crm.lead.lost` | Assistant perte de piste |
307
-| `crm.lead.to.opportunity` | Conversion lead → opportunité |
308
-| `crm.merge.opportunity` | Fusion opportunités |
309
-| `crm.iap.lead.mining.request` | Lead Mining IAP |
310
-| `crm.iap.lead.role` | Rôles IAP |
311
-| `crm.iap.lead.seniority` | Séniorité IAP |
312
-| `crm.quotation.partner` | Partenaire de devis |
302
+| `crm.lead` | **Piste / Lead / Opportunité**. Pipeline : étapes (`stage_id`), contact, entreprise, montant attendu, probabilité, date de clôture. Une piste gagnée peut créer un devis automatiquement |
303
+| `crm.team` | Équipe commerciale : vendeurs, pipeline dédié, règles d'assignation auto, alias email. ⚠️ Pas de licence utilisateur requise pour les membres (gratuit) |
304
+| `crm.stage` | Étape du pipeline : Nouveau, Qualifié, Proposition, Négociation, Gagné, Perdu. Probabilité, actions auto, si étape gagnante/perdante |
305
+| `crm.tag` | Étiquettes pistes : "Urgent", "Grand compte", "Salon 2024", "Webinar" |
306
+| `crm.lead.lost` | Assistant perte de piste : oblige à choisir une raison pour analyse des causes |
307
+| `crm.lead.to.opportunity` | Conversion lead → opportunité qualifiée avec fusion des doublons |
308
+| `crm.merge.opportunity` | Fusion de plusieurs pistes en une seule (garde le contact le plus pertinent) |
309
+| `crm.iap.lead.mining.request` | Lead Mining : génération de pistes selon critères (pays, secteur, taille). Service payant IAP |
310
+| `crm.iap.lead.role` | Rôles pour lead mining : CEO, CTO, Marketing Manager, CFO... |
311
+| `crm.iap.lead.seniority` | Séniorité : Junior, Senior, Director, VP, C-Level |
312
+| `crm.quotation.partner` | Partenaire de devis CRM : lie un contact à un template de devis pour envoi rapide |
313 313
314 314
### 3.9 Ressources Humaines (hr.*)
315 315
316 316
| Modèle | Description |
317 317
|--------|-------------|
318
-| `hr.employee` | Employés |
319
-| `hr.employee.category` | Catégories employés |
320
-| `hr.department` | Départements |
321
-| `hr.job` | Postes |
322
-| `hr.contract` | Contrats |
323
-| `hr.leave` | Congés |
324
-| `hr.leave.type` | Types de congés |
325
-| `hr.leave.allocation` | Allocations de congés |
326
-| `hr.expense` | Notes de frais |
327
-| `hr.expense.sheet` | Feuilles de frais |
328
-| `hr.expense.category` | Catégories de frais |
329
-| `hr.attendance` | Présences/pointages |
330
-| `hr.applicant` | Candidats |
331
-| `hr.recruitment.stage` | Étapes recrutement |
332
-| `hr.plan` | Plans RH |
333
-| `hr.plan.activity.type` | Types d'activité plan RH |
334
-| `hr.work.entry.type` | Types d'entrée de travail |
318
+| `hr.employee` | **Employé**. Lié à `res.users` (accès système) ou `res.partner`. Nom, poste (`job_id`), département, manager, coach, date d'entrée |
319
+| `hr.employee.category` | Catégories : CDI, CDD, Stagiaire, Cadre, Non-cadre. Filtrage et regroupement |
320
+| `hr.department` | Départements : Commercial, Technique, RH, Finance. Hiérarchique via `parent_id` |
321
+| `hr.job` | Postes / Fiches de poste : titre, description, compétences, fourchette de salaire. Utilisé en recrutement |
322
+| `hr.contract` | Contrats de travail : type, dates, salaire, temps de travail, avantages. Génère les éléments de paie |
323
+| `hr.leave` | **Congés / Absences**. Employé fait une demande → validée par le manager. Consomme le solde d'allocations |
324
+| `hr.leave.type` | Types de congés : CP, RTT, Maladie, Maternité, Sans solde. Règles de validation, responsable |
325
+| `hr.leave.allocation` | Allocation de jours : "25 jours de CP par an". Période d'acquisition, report possible |
326
+| `hr.expense` | Note de frais : date, description, montant, catégorie, justificatif. Regroupée en feuille |
327
+| `hr.expense.sheet` | Feuille de frais : regroupe plusieurs notes. Cycle : draft → submitted → approved → posted → paid |
328
+| `hr.expense.category` | Catégories : Transport, Hébergement, Repas. Compte comptable et TVA par défaut |
329
+| `hr.attendance` | Pointages : heure arrivée/départ. Calcul automatique du temps travaillé |
330
+| `hr.applicant` | Candidats : CV, coordonnées, poste visé, étapes de recrutement. Lié à `hr.job` |
331
+| `hr.recruitment.stage` | Étapes recrutement : CV reçu, Entretien tel, Entretien technique, Offre, Accepté, Refusé |
332
+| `hr.plan` | Plans RH : prévisions effectifs, recrutements, départs par département |
333
+| `hr.plan.activity.type` | Types d'activité plan RH : Recrutement, Formation, Mobilité |
334
+| `hr.work.entry.type` | Types d'entrée travail : Présent, Absent, Congé payé, Heures sup. Base de la paie |
335 335
336 336
### 3.10 Projets (project.*)
337 337
338 338
| Modèle | Description |
339 339
|--------|-------------|
340
-| `project.project` | Projets |
341
-| `project.task` | Tâches |
342
-| `project.task.type` | Étapes de tâche |
343
-| `project.tags` | Étiquettes projet |
344
-| `project.milestone` | Jalons |
345
-| `project.task.recurrence` | Tâches récurrentes |
346
-| `project.update` | Mises à jour projet |
347
-| `project.share.wizard` | Assistant partage projet |
348
-| `project.delete.wizard` | Assistant suppression projet |
349
-
350
-### 3.11 Facturation / Temps (account.analytic.*)
340
+| `project.project` | **Projet**. Tâches, jalons, documents. Lié à un compte analytique pour suivi coûts. Définit les étapes par défaut |
341
+| `project.task` | **Tâche**. Cœur du module : titre, description, assigné (`user_id`), échéance (`date_deadline`), priorité, kanban state. Sous-tâches via `parent_id` |
342
+| `project.task.type` | Étapes : À faire, En cours, En attente, Terminé, Annulé. Configurable par projet |
343
+| `project.tags` | Étiquettes : "Urgent", "Client", "Bug", "Amélioration". Filtres et vue Kanban |
344
+| `project.milestone` | Jalons : dates clés avec livrables. Suivi d'avancement projet |
345
+| `project.task.recurrence` | Tâche récurrente : "Tous les lundis", "1er du mois". Génération automatique |
346
+| `project.update` | Mise à jour statut projet : "Fait", "Bloque", "Prochaine étape". Compte-rendu périodique |
347
+| `project.share.wizard` | Assistant partage projet avec client/partenaire via portail |
348
+| `project.delete.wizard` | Assistant suppression projet (avec ou sans les tâches) |
349
+
350
+### 3.11 Achats (purchase.*)
351 351
352 352
| Modèle | Description |
353 353
|--------|-------------|
354
-| `account.analytic.account` | Comptes analytiques |
355
-| `account.analytic.line` | Lignes analytiques (timesheet) |
356
-| `account.analytic.plan` | Plans analytiques |
357
-| `account.analytic.tag` | Étiquettes analytiques |
358
-| `account.analytic.distribution.model` | Modèles de distribution |
354
+| `purchase.order` | **Commande fournisseur**. Mêmes principes que `sale.order` côté achat. Cycle : draft → sent → purchase → done → cancel |
355
+| `purchase.order.line` | Ligne de commande fournisseur : produit, quantité, prix unitaire, date de livraison prévue |
356
+| `purchase.requisition` | Appel d'offres : demande de prix à plusieurs fournisseurs avant de passer commande |
357
+| `purchase.requisition.line` | Ligne d'appel d'offres : produit demandé, quantité |
358
+| `purchase.bill.union` | Assistant regroupement de factures fournisseur en une seule |
359
+| `purchase.bill.line.union` | Ligne de regroupement : associe chaque ligne de facture à la commande |
359 360
360
-### 3.12 Timesheet (hr_timesheet.*)
361
+### 3.12 Abonnements (sale.subscription.*)
361 362
362 363
| Modèle | Description |
363 364
|--------|-------------|
364
-| `account.analytic.line` | Feuilles de temps (même modèle que 3.11) |
365
-| `project.task.create.timesheet` | Assistant création timesheet |
366
-| `timesheet.analysis.report` | Rapport d'analyse |
365
+| `sale.subscription` | **Abonnement récurrent**. Génère automatiquement des commandes à intervalle régulier. Champs : date début/fin, période, template |
366
+| `sale.subscription.line` | Ligne d'abonnement : produit, quantité, prix, facturée à chaque renouvellement |
367
+| `sale.subscription.template` | Modèle d'abonnement prédéfini : "Maintenance Mensuelle", "Support Annuel" |
368
+| `sale.subscription.alert` | Alertes : "Arrive à échéance", "Paiement en retard". Déclenche des actions |
369
+| `sale.subscription.close.reason` | Raisons clôture : Résiliation client, Fin de contrat, Impayé |
370
+| `sale.subscription.recurrence.period` | Périodes : Hebdomadaire, Mensuel, Trimestriel, Annuel |
367 371
368
-### 3.13 Achats (purchase.*)
372
+### 3.13 E-commerce (website.*, payment.*, product.public.*)
369 373
370 374
| Modèle | Description |
371 375
|--------|-------------|
372
-| `purchase.order` | Commandes fournisseur |
373
-| `purchase.order.line` | Lignes commande fournisseur |
374
-| `purchase.requisition` | Appels d'offres |
375
-| `purchase.requisition.line` | Lignes appel d'offres |
376
-| `purchase.bill.union` | Regroupement factures |
377
-| `purchase.bill.line.union` | Lignes regroupement |
378
-
379
-### 3.14 Abonnements (sale.subscription.*)
380
-
381
-| Modèle | Description |
382
-|--------|-------------|
383
-| `sale.subscription` | Abonnements |
384
-| `sale.subscription.line` | Lignes d'abonnement |
385
-| `sale.subscription.template` | Modèles d'abonnement |
386
-| `sale.subscription.alert` | Alertes abonnement |
387
-| `sale.subscription.close.reason` | Raisons clôture |
388
-| `sale.subscription.recurrence.period` | Périodes récurrentes |
389
-
390
-### 3.15 E-commerce (website.* + product.public.*)
391
-
392
-| Modèle | Description |
393
-|--------|-------------|
394
-| `website` | Sites web |
395
-| `website.page` | Pages |
396
-| `website.menu` | Menus du site |
397
-| `website.rewrite` | Redirections |
398
-| `website.visitor` | Visiteurs |
399
-| `website.track` | Tracking |
400
-| `product.public.category` | Catégories e-commerce |
401
-| `product.ribbon` | Rubans produit |
402
-| `website.sale.extra.field` | Champs supplémentaires checkout |
403
-| `website.sale.extra.line` | Lignes frais supplémentaires |
404
-| `payment.provider` | Fournisseurs de paiement |
405
-| `payment.token` | Tokens de paiement sauvegardés |
406
-| `payment.transaction` | Transactions de paiement |
407
-| `payment.link.wizard` | Assistant lien de paiement |
408
-
409
-### 3.16 Messagerie / Emails (mail.*)
410
-
411
-| Modèle | Description |
412
-|--------|-------------|
413
-| `mail.message` | Messages (fil de discussion) |
414
-| `mail.activity` | Activités planifiées |
415
-| `mail.activity.type` | Types d'activité |
416
-| `mail.template` | Modèles d'email |
417
-| `mail.mail` | 📖 Emails en file d'attente |
418
-| `mail.compose.message` | Assistant composition |
419
-| `mail.channel` | Canaux de discussion |
420
-| `mail.channel.member` | Membres du canal |
421
-| `mail.followers` | Abonnés |
422
-| `mail.notification` | Notifications |
423
-| `mail.tracking.value` | Valeurs de suivi |
424
-| `mail.alias` | Alias email |
425
-| `mail.alias.domain` | Domaines alias |
426
-| `mail.shortcode` | Codes courts |
427
-| `mail.link.preview` | Aperçus de lien |
428
-| `fetchmail.server` | Serveur entrant (IMAP/POP) |
429
-
430
-### 3.17 Marketing / Email (mass_mailing.* + link.tracker.*)
376
+| `website` | **Site web Odoo**. Un par base (ou multi-site). Domaine, langue, thème, menus, pages. Point d'entrée du e-commerce |
377
+| `website.page` | Pages : contenu HTML, URL (`url`), indexation (`website_indexed`), visibilité. Éditable via builder |
378
+| `website.menu` | Menus de navigation hiérarchiques. Liés à une URL ou page |
379
+| `website.rewrite` | Redirections 301/302. Préserve le SEO quand une URL change |
380
+| `website.visitor` | Visiteurs traqués par cookie. Pays, langue, nombre de visites, temps passé. Base du marketing automation |
381
+| `website.track` | Tracking pages : URL vue, temps, source (SEO, campagne, réseau social) |
382
+| `product.public.category` | Catégories e-commerce visibles sur le site. Distinct de `product.category` (interne) |
383
+| `product.ribbon` | Rubans visuels produits : "Nouveau", "Promo -20%", "Épuisé", "Coup de cœur" |
384
+| `website.sale.extra.field` | Champs supplémentaires checkout : "N° TVA", "Nom entreprise", "Instructions livraison" |
385
+| `website.sale.extra.line` | Frais supplémentaires panier : livraison, assurance, emballage cadeau |
386
+| `payment.provider` | Fournisseurs de paiement en ligne : Stripe, PayPal, Ogone, Adyen. Configuré pour e-commerce et factures |
387
+| `payment.token` | Token de paiement sauvegardé. Permet le paiement en 1 clic sans ressaisir la carte |
388
+| `payment.transaction` | Transaction : cycle draft → pending → authorized → done → error → cancel. Liée à facture/commande |
389
+| `payment.link.wizard` | Assistant lien de paiement : génère une URL à envoyer au client pour qu'il paie en ligne |
390
+
391
+### 3.14 Messagerie (mail.*, fetchmail.*)
431 392
432 393
| Modèle | Description |
433 394
|--------|-------------|
434
-| `mailing.mailing` | Campagnes email |
435
-| `mailing.list` | Listes de diffusion |
436
-| `mailing.contact` | Contacts liste |
437
-| `mailing.trace` | Traces (ouvertures, clics) |
438
-| `link.tracker` | Traqueurs de lien |
439
-| `link.tracker.click` | Clics sur liens |
440
-| `link.tracker.code` | Codes de lien |
441
-
442
-### 3.18 Sondages (survey.*)
443
-
444
-| Modèle | Description |
445
-|--------|-------------|
446
-| `survey.survey` | Sondages |
447
-| `survey.question` | Questions |
448
-| `survey.question.answer` | Réponses possibles |
449
-| `survey.user_input` | Réponses utilisateur |
450
-| `survey.user_input.line` | Lignes de réponse |
451
-| `survey.invite` | Invitations |
452
-
453
-### 3.19 Événements Live / Forum
395
+| `mail.message` | **Messages du chatter**. Lié à tout enregistrement (`res_model` + `res_id`). Corps HTML, auteur, pièces jointes. Supporte les notes internes et les emails entrants |
396
+| `mail.activity` | **Activités planifiées** (to-do). "Appeler ce client dans 3 jours". Apparaît dans le planning. Cycle : planifié → fait → annulé |
397
+| `mail.activity.type` | Types d'activité : Appel, Email, Réunion, Upload document, À faire. Icône, catégorie, actions par défaut |
398
+| `mail.template` | Modèles d'email avec placeholders `${object.name}`. Utilisé pour confirmations, factures, rappels. ⚠️ `auto_delete=True` pour désactiver |
399
+| `mail.mail` | **Emails en file d'attente** à envoyer. États : `outgoing`, `sent`, `exception` (erreur), `cancel`. Les emails bloqués restent en `exception` |
400
+| `mail.compose.message` | Assistant composition d'email depuis n'importe quelle fiche (wizard) |
401
+| `mail.channel` | Canaux de discussion (chat). Publics, privés, directs. Module Discuss |
402
+| `mail.channel.member` | Membres d'un canal avec droits lecture/écriture |
403
+| `mail.followers` | **Abonnés** d'un enregistrement. Reçoivent des notifications aux modifications |
404
+| `mail.notification` | Notifications envoyées : email, in-app, push. Statut : ready, sent, exception, bounced |
405
+| `mail.tracking.value` | Suivi des modifications : "Champ X changé de A à B le JJ/MM par Untel". Affiché dans le chatter |
406
+| `mail.alias` | Alias email : quand un email arrive sur `ventes@`, crée automatiquement une piste CRM |
407
+| `mail.alias.domain` | Domaines autorisés pour les alias (`@odoo.com`, domaine personnalisé) |
408
+| `mail.shortcode` | Codes courts pour réponses rapides : "#merci" insère un message prédéfini |
409
+| `mail.link.preview` | Aperçus de lien automatiques dans le chatter (carte de preview URL) |
410
+| `fetchmail.server` | Serveur email entrant (IMAP/POP). Relève une boîte et transforme les emails en enregistrements. ⚠️ `active=False` pour désactiver la relève |
411
+
412
+### 3.15 Marketing Email (mailing.*, link.tracker.*)
454 413
455 414
| Modèle | Description |
456 415
|--------|-------------|
457
-| `event.booth` | Stands salon |
458
-| `event.booth.category` | Catégories stand |
459
-| `forum.forum` | Forums |
460
-| `forum.post` | Messages forum |
461
-| `forum.tag` | Étiquettes forum |
416
+| `mailing.mailing` | **Campagne d'emailing**. Destinataires (liste ou domaine M2O), template, date envoi, stats (envoyés, ouverts, cliqués, rebonds) |
417
+| `mailing.list` | Liste de diffusion contenant des contacts. Peut être générée dynamiquement via un domaine |
418
+| `mailing.contact` | Contact d'une liste : email, nom, date opt-in/opt-out. Respecte RGPD |
419
+| `mailing.trace` | Traces de campagne : ouvertures, clics, rebonds, désabonnements. Statistiques détaillées |
420
+| `link.tracker` | Traqueur générant une URL courte pour mesurer les clics. Utilisé en emailing et e-commerce |
421
+| `link.tracker.click` | Clic enregistré : IP, date, pays, navigateur |
422
+| `link.tracker.code` | Code promo lié à un traqueur : "BIENVENUE10" → -10% |
462 423
463
-### 3.20 Base de connaissances (knowledge.*)
424
+### 3.16 Sondages (survey.*)
464 425
465 426
| Modèle | Description |
466 427
|--------|-------------|
467
-| `knowledge.article` | Articles base de connaissance |
468
-| `knowledge.article.favorite` | Favoris article |
469
-| `knowledge.article.member` | Membres article |
470
-| `knowledge.cover` | Couverture |
428
+| `survey.survey` | **Sondage / Formulaire**. Questions, mise en page, scoring, tentatives autorisées, certificat |
429
+| `survey.question` | Question : type (QCM, texte libre, matrice, échelle), obligatoire, image, condition d'affichage |
430
+| `survey.question.answer` | Réponse possible à une question QCM avec valeur, score, message conditionnel |
431
+| `survey.user_input` | Réponse d'un participant : score total, temps passé, date début/fin |
432
+| `survey.user_input.line` | Ligne de réponse : question + réponse donnée + score. Analyse détaillée |
433
+| `survey.invite` | Invitation par email avec lien unique pour éviter les doublons |
471 434
472
-### 3.21 Planning (planning.*)
435
+### 3.17 Autres modules (event.booth, forum, knowledge, planning, documents, approvals)
473 436
474 437
| Modèle | Description |
475 438
|--------|-------------|
476
-| `planning.slot` | Créneaux planning |
477
-| `planning.slot.template` | Modèles de créneau |
478
-| `planning.role` | Rôles planning |
479
-| `planning.calendar` | Calendriers |
439
+| `event.booth` | Stand d'exposition dans un salon. Réservable par sponsors avec services associés |
440
+| `event.booth.category` | Catégorie stand : Standard, Premium, Gold. Prix et services inclus |
441
+| `forum.forum` | Forum de discussion : catégories, sujets, posts. Support communautaire et FAQ |
442
+| `forum.post` | Message forum : lié à un sujet, votable, signalable |
443
+| `forum.tag` | Étiquettes : "Bug", "Question", "Tutoriel", "Annonce" |
444
+| `knowledge.article` | Article base connaissance : hiérarchique, markdown, propriétés, favoris |
445
+| `knowledge.article.favorite` | Article en favori d'un utilisateur |
446
+| `knowledge.article.member` | Membres avec accès à un article restreint |
447
+| `knowledge.cover` | Image de couverture d'article |
448
+| `planning.slot` | Créneau planning : employé, date/heure début, durée, rôle. Shifts |
449
+| `planning.slot.template` | Modèle créneau récurrent : "Lundi 8h-12h chaque semaine" |
450
+| `planning.role` | Rôle planning : "Caissier", "Agent d'accueil", "Technicien" |
451
+| `planning.calendar` | Calendrier regroupant créneaux avec horaires d'ouverture |
452
+| `documents.document` | Document : fichier + métadonnées + tags + dossier |
453
+| `documents.folder` | Dossier hiérarchique avec droits d'accès |
454
+| `documents.tag` | Étiquette document pour catégorisation |
455
+| `documents.share` | Lien de partage document(s) avec externes |
456
+| `approval.request` | Demande d'approbation : congés, achat, validation devis |
457
+| `approval.category` | Catégorie avec workflow : qui approuve, dans quel ordre |
458
+| `approval.approver` | Approbateur dans une demande. Statut : en attente, approuvé, refusé |
480 459
481
-### 3.22 Documents (documents.*)
482 460
483
-| Modèle | Description |
484
-|--------|-------------|
485
-| `documents.document` | Documents |
486
-| `documents.folder` | Dossiers |
487
-| `documents.tag` | Étiquettes document |
488
-| `documents.share` | Partage de documents |
489
-
490
-### 3.23 Approbations (approvals.*)
491
-
492
-| Modèle | Description |
493
-|--------|-------------|
494
-| `approval.request` | Demandes d'approbation |
495
-| `approval.category` | Catégories d'approbation |
496
-| `approval.approver` | Approbateurs |
497 461
498 462
---
499 463