Coverage for src/henrri_connect/models/document.py: 100%
81 statements
« prev ^ index » next coverage.py v7.14.1, created at 2026-06-05 10:54 +0200
« prev ^ index » next coverage.py v7.14.1, created at 2026-06-05 10:54 +0200
1"""
2Modèles Pydantic v2 pour les documents dans l'API Henrri Connect.
4Attributs:
5- DocumentType: Représente un type de document dans l'API Henrri Connect.
6- DocumentLabelElement: Représente un élément d'étiquette de document dans l'API Henrri Connect.
7- DocumentLabel: Représente une étiquette de document dans l'API Henrri Connect.
8- DocumentLineType: Représente un type de ligne de document dans l'API Henrri Connect.
9- DocumentLine: Représente une ligne de document dans l'API Henrri Connect.
10- DocumentLineMoveQueryParameters: Représente les paramètres de requête pour déplacer une ligne
11de document dans l'API Henrri Connect.
12"""
14from __future__ import annotations
16from datetime import datetime
18from .base import CamelModel, Link, DocumentKind, DocumentState, SortOrder
19from .document_line import DocumentLine
20from .customer import Customer
21from .address_contacts import Address
23class DocumentType(CamelModel):
24 """
25 Représente un type de document dans l'API Henrri Connect.
27 Attributs:
28 - id: Identifiant unique du type de document.
29 - label: Libellé du type de document.
30 - short_label: Libellé court du type de document.
31 - document_kind: Type de document.
32 - is_accounting: Indique si le type de document est comptable.
33 """
34 id: int | None = None
35 label: str | None = None
36 short_label: str | None = None
37 document_kind: str = DocumentKind.INVOICE
38 is_accounting: bool = False
39 is_managed: bool = False
40 is_mandatory: bool = False
41 is_visible: bool = False
44class DocumentLabelElement(CamelModel):
45 """
46 Représente un élément d'étiquette de document dans l'API Henrri Connect.
48 Attributs:
49 - id: Identifiant unique de l'élément d'étiquette.
50 - model_element_id: Id de l'élément de modèle auquel appartient l'élément d'étiquette.
51 - label: Libellé de l'élément d'étiquette.
52 - value: Valeur de l'élément d'étiquette.
53 - element_type: Type de l'élément d'étiquette.
54 - is_main_element: Indique si l'élément d'étiquette est l'élément principal de l'étiquette.
55 - size: Taille de l'élément d'étiquette.
56 - index: Index de l'élément d'étiquette dans l'étiquette.
57 - links: Liste de liens associés à l'élément d'étiquette (si applicable).
58 """
59 id: int | None = None
60 model_element_id: int | None = None
61 label: str | None = None
62 value: str | None = None
63 element_type: str | None = None
64 is_main_element: bool = False
65 size: int | None = None
66 index: int | None = None
67 links: list[Link] | None = None
70class DocumentLabel(CamelModel):
71 """
72 Représente une étiquette de document dans l'API Henrri Connect.
74 Attributs:
75 - id: Identifiant unique de l'étiquette de document.
76 - model_id: Id du modèle auquel appartient l'étiquette de document.
77 - document_id: Id du document auquel appartient l'étiquette de document.
78 - label: Libellé de l'étiquette de document.
79 - elements: Liste d'éléments d'étiquette de doc associés à l'étiquette de doc (si applicable).
80 - links: Liste de liens associés à l'étiquette de document (si applicable).
81 """
82 id: int | None = None
83 model_id: int | None = None
84 document_id: int | None = None
85 label: str | None = None
86 elements: list[DocumentLabelElement] | None = None
87 links: list[Link] | None = None
90class Document(CamelModel):
91 """
92 Représente un document dans l'API Henrri Connect.
94 Attributs:
95 - id: Identifiant unique du document.
96 - identity: Identité du document.
97 - finalized: Indique si le document est finalisé.
98 - type: Type du document.
99 - document_type_id: Identifiant du type de document.
100 - document_type: Type de document (si applicable).
101 - title: Titre du document.
102 - subtitle: Sous-titre du document (si applicable).
103 - price_before_tax: Prix total avant taxe du document.
104 - tax_amount: Montant total de la taxe du document.
105 - price_after_tax: Prix total après taxe du document.
106 - due_label: Libellé de l'échéance du document (si applicable).
107 - last_modification_date: Date de dernière modification du document.
108 - date: Date du document.
109 - validated: Indique si le document est validé.
110 - validation_date: Date de validation du document (si applicable).
111 - validation_firstname: Prénom de la personne ayant validé le document (si applicable).
112 - validation_lastname: Nom de la personne ayant validé le document (si applicable).
113 - validation_email: E-mail de la personne ayant validé le document (si applicable).
114 - validation_ip: IP de la personne ayant validé le document (si applicable).
115 - lines: Liste de lignes de document associées au document (si applicable).
116 - customer_id: Identifiant du client associé au document (si applicable).
117 - customer: Client associé au document (si applicable).
118 - customer_address: Adresse du client associée au document (si applicable).
119 - user_can_validate: Indique si l'utilisateur peut valider le document.
120 - footer_text: Texte de pied de page du document (si applicable).
121 - bank_account_label: Libellé du compte bancaire associé au document (si applicable).
122 - label_id: Identifiant de l'étiquette de document associée au document (si applicable).
123 - links: Liste de liens associés au document (si applicable).
124 """
125 id: int | None = None
126 identity: str | None = None
127 finalized: bool = False
128 type: str | None = None
129 document_type_id: int
130 document_type: DocumentType | None = None
131 title: str | None = None
132 subtitle: str | None = None
133 price_before_tax: float = 0.0
134 tax_amount: float = 0.0
135 price_after_tax: float = 0.0
136 due_label: str | None = None
137 last_modification_date: datetime | None = None
138 date: datetime | None = None
139 validated: bool = False
140 validation_date: datetime | None = None
141 validation_firstname: str | None = None
142 validation_lastname: str | None = None
143 validation_email: str | None = None
144 validation_ip: str | None = None
145 lines: list[DocumentLine] | None = None
146 customer_id: int
147 customer: Customer | None = None
148 customer_address: Address | None = None
149 user_can_validate: bool = False
150 footer_text: str | None = None
151 bank_account_label: str | None = None
152 label_id: int | None = None
153 links: list[Link] | None = None
156class DocumentQuery(CamelModel):
157 """
158 Représente une requête de document dans l'API Henrri Connect.
160 Attributs:
161 - finalized (bool) : Indique si le document est finalisé.
162 - document_types (list[DocumentKind]) :: Type du document.
163 - state (Optional[DocumentState]) : Etat du document.
164 - page (int) : Numéro de page (de 1 à 2 147 483 647, défaut 1).
165 - limit (int) : Nombre de documents par page (de 1 à 100, défaut 50).
166 - search (str) : Chaine de recherche.
167 - sort_by (str) : Champ de tri.
168 - sort_order (SortOrder) : Ordre de tri (Ascending ou Descending).
169 - min_id (int) : Identifiant minimum.
170 - from_date (str) : Date de debut.
171 - to_date (str) : Date de fin.
172 """
173 finalized: bool = False
174 document_types: list[DocumentKind] | None = None
175 state: DocumentState | None = None
176 page: int = 1
177 limit: int = 50
178 search: str | None = None
179 sort_by: str | None = None
180 sort_order: SortOrder | None = None
181 min_id: int | None = None
182 from_date: str | None = None
183 to_date: str | None = None
186class ValidateDocumentRequest(CamelModel):
187 """
188 Représente une requête de validation de document dans l'API Henrri Connect.
190 Attributs:
191 - email: Adresse e-mail de la personne validant le document.
192 - first_name: Prénom de la personne validant le document.
193 - last_name: Nom de la personne validant le document.
194 - validation_date: Date de validation du document.
195 - time_offset: Décalage horaire par rapport à UTC.
196 - ip: Adresse IP de la personne validant le document.
197 """
198 email: str
199 first_name: str
200 last_name: str
201 validation_date: str
202 time_offset: int
203 ip: str