> For the complete documentation index, see [llms.txt](https://ouvretaferme.gitbook.io/ouvretaferme/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ouvretaferme.gitbook.io/ouvretaferme/endpoints/models.md).

# Models

## The Absence object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Absence":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"user":{"type":"integer","format":"int64","description":"Personne. Identifiant d'un élément `User`."},"type":{"type":"string","enum":["vacation","rtt","recovery","other","sickness","work-accident","parental","family-event","unpaid"],"description":"Motif. Valeurs : `vacation` (Congés payés), `rtt` (RTT), `recovery` (Récupération), `sickness` (Maladie), `work-accident` (Accident du travail), `parental` (Maternité ou paternité), `family-event` (Événement familial), `unpaid` (Congé sans solde), `other` (Autre motif)."},"unit":{"type":"string","enum":["day","hour"]},"status":{"type":"string","enum":["pending","validated","refused"]},"from":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Début de l'absence. Date et heure, au format AAAA-MM-JJ HH:MM:SS."},"to":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Fin de l'absence. Date et heure, au format AAAA-MM-JJ HH:MM:SS."},"duration":{"type":"number","description":"Durée."},"createdAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS."}},"title":"Absences","description":"Les absences des membres de votre équipe : congés, RTT, récupération ou autre, avec leur durée."}}}}
```

## The AbsenceUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"AbsenceUpdate":{"type":"object","properties":{"type":{"type":"string","enum":["vacation","rtt","recovery","other","sickness","work-accident","parental","family-event","unpaid"],"description":"Motif. Valeurs : `vacation` (Congés payés), `rtt` (RTT), `recovery` (Récupération), `sickness` (Maladie), `work-accident` (Accident du travail), `parental` (Maternité ou paternité), `family-event` (Événement familial), `unpaid` (Congé sans solde), `other` (Autre motif)."},"from":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Début de l'absence. Date et heure, au format AAAA-MM-JJ HH:MM:SS."},"to":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Fin de l'absence. Date et heure, au format AAAA-MM-JJ HH:MM:SS."},"duration":{"type":"number","description":"Durée."}},"required":["type","from","to","duration"]}}}}
```

## The AbsenceWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"AbsenceWrite":{"type":"object","properties":{"user":{"type":"integer","format":"int64","description":"Personne. Identifiant d'un élément `User`."},"type":{"type":"string","enum":["vacation","rtt","recovery","other","sickness","work-accident","parental","family-event","unpaid"],"description":"Motif. Valeurs : `vacation` (Congés payés), `rtt` (RTT), `recovery` (Récupération), `sickness` (Maladie), `work-accident` (Accident du travail), `parental` (Maternité ou paternité), `family-event` (Événement familial), `unpaid` (Congé sans solde), `other` (Autre motif)."},"from":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Début de l'absence. Date et heure, au format AAAA-MM-JJ HH:MM:SS."},"to":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Fin de l'absence. Date et heure, au format AAAA-MM-JJ HH:MM:SS."},"duration":{"type":"number","description":"Durée."}},"required":["user","type","from","to","duration"]}}}}
```

## The Account object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Account":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"class":{"type":"string","minLength":1,"description":"Numéro de compte."},"description":{"type":"string","minLength":1,"description":"Libellé."},"visible":{"type":"boolean"},"custom":{"type":"boolean","description":"Personnalisé."},"journalCode":{"type":"integer","format":"int64","description":"Code journal. Identifiant d'un élément `JournalCode`.","nullable":true},"vatClass":{"type":"string","minLength":1,"nullable":true},"vatRate":{"type":"number","nullable":true,"description":"Taux de TVA."},"thirdParty":{"type":"integer","format":"int64","description":"Identifiant d'un élément `ThirdParty`.","nullable":true},"status":{"type":"string","enum":["active","inactive","deleted"],"description":"Activé."},"financialYear":{"type":"integer","format":"int64","description":"Exercice comptable. Identifiant d'un élément `FinancialYear`.","nullable":true},"incomeCategory":{"type":"string","enum":["commercial-sales","commercial-furnished","commercial-services","non-commercial"],"nullable":true,"description":"Valeurs : `commercial-sales` (Commerciale, ventes), `commercial-furnished` (Commerciale, meublé de tourisme non classé), `commercial-services` (Commerciale, services, meublé classé, chambres d'hôtes), `non-commercial` (Non commerciale)."}},"title":"Plan comptable","description":"Le plan comptable de votre structure : les comptes utilisés dans les écritures, rattachés à un exercice comptable."}}}}
```

## The AccountUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"AccountUpdate":{"type":"object","properties":{"description":{"type":"string","minLength":1,"description":"Libellé."},"vatClass":{"type":"string","minLength":1,"nullable":true},"vatRate":{"type":"number","nullable":true,"description":"Taux de TVA."},"thirdParty":{"type":"integer","format":"int64","description":"Identifiant d'un élément `ThirdParty`.","nullable":true},"status":{"type":"string","enum":["active","inactive","deleted"],"description":"Activé."}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Le plan comptable de votre structure : les comptes utilisés dans les écritures, rattachés à un exercice comptable.","additionalProperties":true}}}}
```

## The AccountWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"AccountWrite":{"type":"object","additionalProperties":true,"description":"Les champs acceptés dépendent de l'élément envoyé et ne peuvent pas être listés ici. Le plan comptable de votre structure : les comptes utilisés dans les écritures, rattachés à un exercice comptable."}}}}
```

## The Action object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Action":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"description":"Nom de l'intervention."},"favorite":{"type":"boolean","description":"Favori  ."},"fqn":{"type":"string","nullable":true,"description":"Nom qualifié."},"short":{"type":"string","minLength":1,"maxLength":1,"nullable":true,"description":"Raccourci du nom de l'intervention."},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","description":"Couleur. Couleur hexadécimale."},"pace":{"type":"string","enum":["by-harvest","by-area","by-plant"],"nullable":true,"description":"Calcul de la productivité de l'intervention. Valeurs : `by-area` (En fonction de la surface cultivée), `by-harvest` (En fonction de la quantité récoltée), `by-plant` (En fonction du nombre de plants)."},"soil":{"type":"boolean","description":"Tenir compte de cette intervention pour calculer le début ou la fin de l'assolement des séries."},"categories":{"type":"array","items":{},"description":"Catégories."},"methods":{"type":"array","description":"Références des modes d'exécution proposés pour cette action","items":{"type":"integer","format":"int64"}},"status":{"type":"string","enum":["active","inactive"]}},"title":"Actions","description":"Les actions réalisables sur vos cultures (semis, désherbage, récolte...). Chaque intervention du planning est une occurrence d'une action."}}}}
```

## The ActionUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ActionUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom de l'intervention."},"favorite":{"type":"boolean","description":"Favori  ."},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","description":"Couleur. Couleur hexadécimale."},"pace":{"type":"string","enum":["by-harvest","by-area","by-plant"],"nullable":true,"description":"Calcul de la productivité de l'intervention. Valeurs : `by-area` (En fonction de la surface cultivée), `by-harvest` (En fonction de la quantité récoltée), `by-plant` (En fonction du nombre de plants)."},"soil":{"type":"boolean","description":"Tenir compte de cette intervention pour calculer le début ou la fin de l'assolement des séries."},"categories":{"type":"array","items":{},"description":"Catégories."}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. Les actions réalisables sur vos cultures (semis, désherbage, récolte...). Chaque intervention du planning est une occurrence d'une action."}}}}
```

## The ActionWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ActionWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom de l'intervention."},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","description":"Couleur. Couleur hexadécimale."},"categories":{"type":"array","items":{},"description":"Catégories."}},"required":["name","color","categories"]}}}}
```

## The Aid object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Aid":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","description":"Le nom de l'aide"},"summary":{"type":"string","nullable":true,"description":"Ce que l'aide finance, en une phrase"},"organization":{"type":"integer","format":"int64","description":"Accordée par. Identifiant d'un élément `Organization`."},"level":{"type":"string","enum":["national","pac","region","department","intercommunal","other"],"description":"Échelon. Valeurs : `national` (National), `pac` (PAC), `region` (Régional), `department` (Départemental), `intercommunal` (Intercommunal), `other` (Autre)."},"type":{"type":"string","enum":["grant","loan","advance","guarantee","tax","social","service","land"],"description":"Forme. Valeurs : `grant` (Subvention), `loan` (Prêt), `advance` (Avance remboursable), `guarantee` (Garantie), `tax` (Avantage fiscal), `social` (Exonération sociale), `service` (Prise en charge), `land` (Accès au foncier)."},"calendar":{"type":"string","enum":["permanent","call","campaign","automatic"],"description":"Calendrier. Valeurs : `permanent` (Toute l'année), `call` (Sur appel à projets), `campaign` (Chaque année), `automatic` (Sans démarche)."},"rate":{"type":"string","nullable":true,"description":"Le taux ou le montant, tel que l'organisme l'écrit, celui de la campagne en cours quand elle en a un"},"ratePercentMax":{"type":"number","nullable":true,"description":"Taux maximal."},"amountMax":{"type":"number","nullable":true,"description":"Montant maximal."},"amountUnit":{"type":"string","enum":["euro","per-hectare","per-ugb","per-head","per-meter","per-liter"],"nullable":true,"description":"Valeurs : `euro` (€), `per-hectare` (€/ha), `per-ugb` (€/UGB), `per-head` (€/tête), `per-meter` (€/m), `per-liter` (€/L)."},"productions":{"type":"array","description":"Les productions concernées, vide pour toutes","items":{"type":"string"}},"labels":{"type":"array","description":"Les labels exigés, l'un ou l'autre : 1 agriculture biologique, 2 AOP, 4 AOC, 8 IGP, 16 Label Rouge, 32 STG, 64 HVE","items":{"type":"integer"}},"beneficiaries":{"type":"array","description":"Qui peut en bénéficier : 1 exploitations agricoles, 2 jeunes agriculteurs, 4 nouveaux installés, 8 CUMA, 16 groupements d'agriculteurs, 32 collectivités, 64 associations, 128 propriétaires fonciers","items":{"type":"integer"}},"direct":{"type":"boolean","description":"La structure dépose elle-même."},"projects":{"type":"array","description":"Les projets financés, avec les valeurs du critère project : 1 investir dans du matériel ou un bâtiment, 2 s'installer, 4 se faire conseiller ou se former, 8 traverser une crise, 16 irriguer ou stocker l'eau, 32 réduire la facture d'énergie, 64 protéger l'environnement, 128 passer ou rester en bio, 256 transformer ou vendre en direct, 512 accéder au foncier, 1024 embaucher ou se faire remplacer","items":{"type":"integer"}},"tags":{"type":"array","description":"Ce que l'aide finance, par l'identifiant des étiquettes de l'outil, qui sert au critère tag","items":{"type":"string"}},"places":{"type":"object","description":"Où l'aide se demande, vide pour toute la France. Une région se nomme quand l'aide en couvre tous les départements, un bassin quand l'aide vient d'une agence de l'eau","properties":{"basins":{"type":"array","items":{"type":"string"}},"regions":{"type":"array","items":{"type":"string"}},"departments":{"type":"array","items":{"type":"string"}},"epcis":{"type":"array","description":"Les intercommunalités auxquelles l'aide est réservée","items":{"type":"object","properties":{"siren":{"type":"string"},"name":{"type":"string"}}}}}},"startDate":{"type":"string","format":"date","nullable":true,"description":"L'ouverture du dépôt en cours ou à venir"},"endDate":{"type":"string","format":"date","nullable":true,"description":"La clôture du dépôt en cours ou à venir, null quand elle n'est pas datée. Sur une aide permanente, qui se demande à tout moment, la fin du dispositif"},"upcoming":{"type":"boolean","description":"Le dépôt n'est pas encore ouvert"},"betweenCampaigns":{"type":"boolean","description":"L'aide revient chaque année et sa prochaine campagne n'est pas encore annoncée"},"unconfirmed":{"type":"boolean","description":"Les chiffres restent à confirmer auprès de l'organisme"},"reserved":{"type":"boolean","description":"L'aide est réservée à d'autres intercommunalités que celle de votre structure"},"publishedAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS.","nullable":true},"conditions":{"type":"string","nullable":true,"description":"Les conditions, en HTML, format de stockage de l'éditeur, à assainir avant de l'insérer dans une page"},"labelsBonus":{"type":"array","description":"Les labels qui bonifient l'aide sans la réserver, avec les mêmes valeurs que labels","items":{"type":"integer"}},"floor":{"type":"number","nullable":true,"description":"Plancher."},"ceiling":{"type":"number","nullable":true,"description":"Plafond."},"boundBase":{"type":"string","enum":["expense","aid"],"nullable":true,"description":"Le plancher et le plafond portent sur. Valeurs : `expense` (la dépense), `aid` (l'aide)."},"boundPeriod":{"type":"string","enum":["year"],"nullable":true,"description":"Le plancher et le plafond valent. Valeurs : `year` (par an)."},"depositUrl":{"type":"string","format":"uri","nullable":true,"description":"Le site où déposer la demande, une fois le dépôt ouvert"},"commitmentRule":{"type":"string","nullable":true,"description":"Ce qui fait perdre l'aide s'il est fait trop tôt, null quand votre structure ne dépose pas elle-même"},"sourceUrl":{"type":"string","format":"uri","nullable":true,"description":"La page officielle de l'aide"},"contact":{"type":"object","nullable":true,"description":"Qui contacter, comme le dit la fiche : le contact de l'aide, sinon celui de l'organisme qui reçoit le dépôt, l'instruit ou l'accorde. null quand personne n'en publie. L'adresse électronique se lit sur la fiche de l'aide, dans l'outil, et une aide qui ne publie qu'une adresse rend service, phone et url tous null","properties":{"organization":{"type":"integer","format":"int64","description":"L'organisme sous lequel le contact se lit"},"service":{"type":"string","nullable":true},"phone":{"type":"string","nullable":true},"url":{"type":"string","format":"uri","nullable":true}}},"pieces":{"type":"array","description":"Les pièces à joindre à la demande (application) puis au paiement (payment), vide pour une aide que votre structure ne dépose pas elle-même","items":{"type":"object","properties":{"moment":{"type":"string","enum":["application","payment"]},"name":{"type":"string"},"note":{"type":"string","nullable":true,"description":"Quand la pièce ne vaut pas pour tous"},"url":{"type":"string","format":"uri","nullable":true,"description":"Le modèle à remplir"}}}},"steps":{"type":"array","description":"Les étapes de la démarche, avant le dépôt (before) puis au paiement (payment), dans leur ordre","items":{"type":"object","properties":{"moment":{"type":"string","enum":["before","payment"]},"position":{"type":"integer"},"name":{"type":"string"},"description":{"type":"string","nullable":true},"url":{"type":"string","format":"uri","nullable":true}}}},"piecesUnpublished":{"type":"boolean","nullable":true,"description":"L'organisme ne publie pas la liste des pièces, null quand votre structure ne dépose pas elle-même"},"piecesCheckedAt":{"type":"string","format":"date","nullable":true,"description":"La dernière relecture de la liste des pièces, null quand la liste n'est pas publiée, ne porte aucune pièce, n'a jamais été relue par l'équipe, ou que votre structure ne dépose pas elle-même"},"cofunders":{"type":"array","description":"Les organismes qui cofinancent l'aide dans le département cherché","items":{"type":"integer","format":"int64"}},"complements":{"type":"array","description":"Les aides qui la complètent, dans le département cherché","items":{"type":"integer","format":"int64"}},"checkedAt":{"type":"string","format":"date","nullable":true,"description":"La dernière relecture de la source officielle par l'équipe de Ouvretaferme"}},"title":"Aides","description":"Les aides que l'outil affiche : publiées, ouvertes ou à venir, annuelles entre deux campagnes, ou sans démarche. Une aide close, archivée ou en préparation n'existe pas ici. Sans critère, la liste reprend ceux de l'outil pour votre structure ; un critère vide les retire, si bien que department= vide cherche dans toute la France. La liste se range par identifiant. La fiche d'une aide en dit plus, comme dans l'outil : conditions, démarche, pièces et contact. Le contact ne donne pas d'adresse électronique, que la fiche de l'aide affiche dans l'outil, et un texte qui en cite une la remplace par « [adresse sur la fiche de l'aide] »."}}}}
```

## The Allocation object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Allocation":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"grant":{"type":"integer","format":"int64","description":"Subvention. Identifiant d'un élément `Asset`."},"asset":{"type":"integer","format":"int64","description":"Immobilisation financée. Identifiant d'un élément `Asset`."},"amount":{"type":"number","description":"Montant affecté."},"amountRecovered":{"type":"number"}},"title":"Affectations de subvention","description":"La part d'une subvention affectée à un bien qu'elle finance, et ce qui en a déjà été viré au résultat. Une affectation ne se rattache à aucun exercice : elle vit tant que le bien est là, chaque exercice ne faisant qu'avancer amountRecovered. Embarquées dans les champs allocations et grants d'une immobilisation."}}}}
```

## The Amortization object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Amortization":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"financialYear":{"type":"integer","format":"int64","description":"Exercice comptable. Identifiant d'un élément `FinancialYear`.","nullable":true},"date":{"type":"string","format":"date","description":"Date."},"type":{"type":"string","enum":["economic","excess"],"description":"Type d'amortissement. Valeurs : `excess` (Dérogatoire), `economic` (Économique)."},"amount":{"type":"number","description":"Montant HT."}},"title":"Dotations aux amortissements","description":"Les dotations calculées pour une immobilisation, économiques ou dérogatoires, rattachées à l'exercice qui les porte. Embarquées dans le champ amortizations d'une immobilisation."}}}}
```

## The Asset object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Asset":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"accountNumber":{"type":"string","nullable":true},"accountLabel":{"type":"string","minLength":1},"description":{"type":"string","minLength":1,"description":"Libellé."},"value":{"type":"number","description":"Valeur d'acquisition."},"residualValue":{"type":"number","description":"Valeur résiduelle."},"amountSold":{"type":"number","nullable":true,"description":"Montant de cession (HT)."},"vatRate":{"type":"number","nullable":true,"description":"Taux de TVA de la vente."},"disposedValue":{"type":"number","nullable":true},"economicMode":{"type":"string","enum":["linear","degressive","without"],"description":"Mode économique. Valeurs : `linear` (Linéaire), `degressive` (Dégressif), `without` (Sans)."},"economicDuration":{"type":"integer","nullable":true,"description":"Durée économique."},"economicAmortization":{"type":"number","description":"Montant déjà amorti à la reprise."},"fiscalMode":{"type":"string","enum":["linear","degressive","without"],"description":"Mode fiscal. Valeurs : `linear` (Linéaire), `degressive` (Dégressif), `without` (Sans)."},"fiscalDuration":{"type":"integer","nullable":true,"description":"Durée fiscale."},"isExcess":{"type":"boolean"},"excessAmortization":{"type":"number","description":"Solde des amortissements dérogatoires à la reprise."},"excessRecovery":{"type":"number"},"acquisitionDate":{"type":"string","format":"date","nullable":true,"description":"Date d'acquisition."},"acquisitionVat":{"type":"boolean","nullable":true,"description":"TVA déduite lors de l'acquisition ?."},"resumeDate":{"type":"string","format":"date","nullable":true,"description":"Date de reprise sur Ouvretaferme."},"startDate":{"type":"string","format":"date","nullable":true,"description":"Date de mise en service."},"endDate":{"type":"string","format":"date","nullable":true,"description":"Date de fin."},"endedDate":{"type":"string","format":"date","nullable":true},"disposalReason":{"type":"string","enum":["sale","contribution","withdrawal","scrapping","loss"],"nullable":true,"description":"Motif de sortie. Valeurs : `sale` (Vente), `contribution` (Apport en société), `withdrawal` (Retrait dans le patrimoine privé), `scrapping` (Mise au rebut), `loss` (Sinistre ou vol)."},"thirdParty":{"type":"integer","format":"int64","description":"Identifiant d'un élément `ThirdParty`.","nullable":true},"assetInProgress":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Asset`.","nullable":true},"splitFrom":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Asset`.","nullable":true},"isGrant":{"type":"boolean"},"status":{"type":"string","enum":["waiting","ongoing","sold","scrapped","ended"],"description":"Statut d'amortissement. Valeurs : `waiting` (En attente), `ongoing` (En cours), `scrapped` (Mis au rebut), `sold` (Vendu), `ended` (Terminé)."},"amortizations":{"type":"array","description":"Plan d'amortissement, une dotation par exercice","items":{"$ref":"#/components/schemas/Amortization"}},"depreciations":{"type":"array","description":"Dépréciations constatées, et leur reprise le cas échéant","items":{"$ref":"#/components/schemas/Depreciation"}},"revisions":{"type":"array","description":"Révisions du plan d'amortissement, dans l'ordre où elles ont été décidées","items":{"$ref":"#/components/schemas/Revision"}},"allocations":{"type":"array","description":"Sur une subvention, les biens qu'elle finance et la part affectée à chacun","items":{"$ref":"#/components/schemas/Allocation"}},"grants":{"type":"array","description":"Sur un bien, les subventions qui le financent et la part affectée par chacune","items":{"$ref":"#/components/schemas/Allocation"}}},"title":"Immobilisations","description":"Les immobilisations et subventions de votre structure, avec leurs modes et durées d'amortissement. Les durées sont exprimées en mois. Lire une immobilisation donne aussi son plan d'amortissement et ses dépréciations."},"Amortization":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"financialYear":{"type":"integer","format":"int64","description":"Exercice comptable. Identifiant d'un élément `FinancialYear`.","nullable":true},"date":{"type":"string","format":"date","description":"Date."},"type":{"type":"string","enum":["economic","excess"],"description":"Type d'amortissement. Valeurs : `excess` (Dérogatoire), `economic` (Économique)."},"amount":{"type":"number","description":"Montant HT."}},"title":"Dotations aux amortissements","description":"Les dotations calculées pour une immobilisation, économiques ou dérogatoires, rattachées à l'exercice qui les porte. Embarquées dans le champ amortizations d'une immobilisation."},"Depreciation":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"financialYear":{"type":"integer","format":"int64","description":"Identifiant d'un élément `FinancialYear`."},"date":{"type":"string","format":"date","description":"Date."},"type":{"type":"string","enum":["normal","exceptional"],"description":"Nature. Valeurs : `normal` (Normale), `exceptional` (Exceptionnelle)."},"way":{"type":"string","enum":["dotation","recovery"],"description":"Sens. Valeurs : `dotation` (Dépréciation), `recovery` (Reprise)."},"amount":{"type":"number","description":"Montant."},"reason":{"type":"string","minLength":1,"maxLength":255,"nullable":true,"description":"Motif."},"recoverDate":{"type":"string","format":"date","nullable":true,"description":"Date de reprise."}},"title":"Dépréciations","description":"Les dépréciations constatées sur une immobilisation, et leur date de reprise le cas échéant. Embarquées dans le champ depreciations d'une immobilisation."},"Revision":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"financialYear":{"type":"integer","format":"int64","description":"Identifiant d'un élément `FinancialYear`."},"date":{"type":"string","format":"date","description":"Date de la révision."},"type":{"type":"string","enum":["duration","value","residual-value","depreciation"],"description":"Nature. Valeurs : `duration` (Durée d'amortissement), `value` (Valeur de l'immobilisation), `residual-value` (Valeur résiduelle), `depreciation` (Dépréciation)."},"amortizableBase":{"type":"number","description":"Nouvelle base amortissable."},"durationOld":{"type":"integer","nullable":true,"description":"Durée précédente."},"durationNew":{"type":"integer","nullable":true,"description":"Nouvelle durée totale, depuis la mise en service."},"depreciation":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Depreciation`.","nullable":true},"reason":{"type":"string","minLength":1,"maxLength":255,"nullable":true,"description":"Motif."}},"title":"Révisions de plan","description":"Les décisions qui ont modifié le plan d'amortissement d'une immobilisation en cours de vie : durée, valeur, valeur résiduelle ou dépréciation. Chacune est rattachée à l'exercice qui l'a prise et porte la base du segment ouvert à cette date. Embarquées dans le champ revisions d'une immobilisation."},"Allocation":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"grant":{"type":"integer","format":"int64","description":"Subvention. Identifiant d'un élément `Asset`."},"asset":{"type":"integer","format":"int64","description":"Immobilisation financée. Identifiant d'un élément `Asset`."},"amount":{"type":"number","description":"Montant affecté."},"amountRecovered":{"type":"number"}},"title":"Affectations de subvention","description":"La part d'une subvention affectée à un bien qu'elle finance, et ce qui en a déjà été viré au résultat. Une affectation ne se rattache à aucun exercice : elle vit tant que le bien est là, chaque exercice ne faisant qu'avancer amountRecovered. Embarquées dans les champs allocations et grants d'une immobilisation."}}}}
```

## The AssetUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"AssetUpdate":{"type":"object","properties":{"accountNumber":{"type":"string","nullable":true},"accountLabel":{"type":"string","minLength":1},"description":{"type":"string","minLength":1,"description":"Libellé."},"value":{"type":"number","description":"Valeur d'acquisition."},"residualValue":{"type":"number","description":"Valeur résiduelle."},"economicMode":{"type":"string","enum":["linear","degressive","without"],"description":"Mode économique. Valeurs : `linear` (Linéaire), `degressive` (Dégressif), `without` (Sans)."},"economicDuration":{"type":"integer","nullable":true,"description":"Durée économique."},"economicAmortization":{"type":"number","description":"Montant déjà amorti à la reprise."},"fiscalMode":{"type":"string","enum":["linear","degressive","without"],"description":"Mode fiscal. Valeurs : `linear` (Linéaire), `degressive` (Dégressif), `without` (Sans)."},"fiscalDuration":{"type":"integer","nullable":true,"description":"Durée fiscale."},"isExcess":{"type":"boolean"},"acquisitionDate":{"type":"string","format":"date","nullable":true,"description":"Date d'acquisition."},"acquisitionVat":{"type":"boolean","nullable":true,"description":"TVA déduite lors de l'acquisition ?."},"startDate":{"type":"string","format":"date","nullable":true,"description":"Date de mise en service."}},"required":["accountNumber","accountLabel","description","value","residualValue","economicMode","economicDuration","economicAmortization","fiscalMode","fiscalDuration","isExcess","acquisitionDate","acquisitionVat","startDate"]}}}}
```

## The AssetWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"AssetWrite":{"type":"object","properties":{"accountNumber":{"type":"string","nullable":true},"accountLabel":{"type":"string","minLength":1},"description":{"type":"string","minLength":1,"description":"Libellé."},"value":{"type":"number","description":"Valeur d'acquisition."},"residualValue":{"type":"number","description":"Valeur résiduelle."},"economicMode":{"type":"string","enum":["linear","degressive","without"],"description":"Mode économique. Valeurs : `linear` (Linéaire), `degressive` (Dégressif), `without` (Sans)."},"economicDuration":{"type":"integer","nullable":true,"description":"Durée économique."},"economicAmortization":{"type":"number","description":"Montant déjà amorti à la reprise."},"fiscalMode":{"type":"string","enum":["linear","degressive","without"],"description":"Mode fiscal. Valeurs : `linear` (Linéaire), `degressive` (Dégressif), `without` (Sans)."},"fiscalDuration":{"type":"integer","nullable":true,"description":"Durée fiscale."},"isExcess":{"type":"boolean"},"acquisitionDate":{"type":"string","format":"date","nullable":true,"description":"Date d'acquisition."},"acquisitionVat":{"type":"boolean","nullable":true,"description":"TVA déduite lors de l'acquisition ?."},"resumeDate":{"type":"string","format":"date","nullable":true,"description":"Date de reprise sur Ouvretaferme."},"startDate":{"type":"string","format":"date","nullable":true,"description":"Date de mise en service."}},"required":["accountNumber","accountLabel","description","value","residualValue","economicMode","economicDuration","economicAmortization","fiscalMode","fiscalDuration","isExcess","acquisitionDate","acquisitionVat","resumeDate","startDate"]}}}}
```

## The BankAccount object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"BankAccount":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"description":{"type":"string","minLength":1,"description":"Nom du compte bancaire."},"accountNumber":{"type":"string","nullable":true},"isDefault":{"type":"boolean"},"status":{"type":"string","enum":["initializing","active","inactive"]},"bankName":{"type":"string","nullable":true,"description":"Nom de la banque, tel que la connexion le renvoie"},"balance":{"type":"number","nullable":true,"description":"Dernier solde connu"},"balanceUpdate":{"type":"string","nullable":true,"description":"Date de ce dernier solde","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$"}},"title":"Comptes bancaires","description":"Les comptes bancaires de votre structure."}}}}
```

## The BankAccountWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"BankAccountWrite":{"type":"object","additionalProperties":true,"description":"Les champs acceptés dépendent de l'élément envoyé et ne peuvent pas être listés ici. Les comptes bancaires de votre structure."}}}}
```

## The Bed object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Bed":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"zone":{"type":"integer","format":"int64","description":"Parcelle. Identifiant d'un élément `Zone`."},"zoneFill":{"type":"boolean"},"plot":{"type":"integer","format":"int64","description":"Emplacement. Identifiant d'un élément `Plot`."},"plotFill":{"type":"boolean"},"name":{"type":"string","minLength":1,"maxLength":20,"nullable":true,"description":"Nom de la planche."},"length":{"type":"integer","nullable":true,"description":"Longueur de planche."},"width":{"type":"integer","nullable":true,"description":"Largeur travaillée de planche."},"alleyWidth":{"type":"integer","nullable":true,"description":"Largeur de passe-pied."},"area":{"type":"number","description":"Surface."},"seasonFirst":{"type":"integer","nullable":true,"description":"Exploité depuis."},"seasonLast":{"type":"integer","nullable":true,"description":"Exploité jusqu'à."}},"title":"Planches","description":"Les planches de culture d'un jardin, avec leurs dimensions. Les planches de remplissage, créées par le produit pour porter une culture posée sur un jardin entier, n'apparaissent pas ici."}}}}
```

## The BedUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"BedUpdate":{"type":"object","properties":{"plot":{"type":"integer","format":"int64","description":"Emplacement. Identifiant d'un élément `Plot`."},"name":{"type":"string","minLength":1,"maxLength":20,"nullable":true,"description":"Nom de la planche."},"length":{"type":"integer","nullable":true,"description":"Longueur de planche."},"width":{"type":"integer","nullable":true,"description":"Largeur travaillée de planche."},"alleyWidth":{"type":"integer","nullable":true,"description":"Largeur de passe-pied."},"seasonFirst":{"type":"integer","nullable":true,"description":"Exploité depuis."},"seasonLast":{"type":"integer","nullable":true,"description":"Exploité jusqu'à."}},"required":["plot","name","length","width","alleyWidth","seasonFirst","seasonLast"]}}}}
```

## The BedWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"BedWrite":{"type":"object","properties":{"plot":{"type":"integer","format":"int64","description":"Emplacement. Identifiant d'un élément `Plot`."},"name":{"type":"string","minLength":1,"maxLength":20,"nullable":true,"description":"Nom de la planche."},"length":{"type":"integer","nullable":true,"description":"Longueur de planche."},"width":{"type":"integer","nullable":true,"description":"Largeur travaillée de planche."},"alleyWidth":{"type":"integer","nullable":true,"description":"Largeur de passe-pied."}},"required":["plot","name","length","width","alleyWidth"]}}}}
```

## The Block object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Block":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"lesson":{"type":"integer","description":"Identifiant de la leçon qui porte le bloc"},"parent":{"type":"integer","format":"int64","description":"Identifiant.","nullable":true},"type":{"type":"string","minLength":1,"maxLength":50,"description":"Type."},"variant":{"type":"string","minLength":1,"maxLength":30,"nullable":true,"description":"Couleur."},"title":{"type":"string","minLength":1,"maxLength":250,"nullable":true,"description":"Titre."},"content":{"type":"string","nullable":true,"description":"Texte."},"url":{"type":"string","format":"uri","nullable":true,"description":"Adresse."},"settings":{"type":"array","items":{}},"media":{"type":"string","format":"uri","nullable":true,"description":"Adresse de l'image d'un enfant de type block-item, ou null s'il n'en a pas. Elle ne s'écrit que par la route block/id/media"},"position":{"type":"integer"}},"title":"Blocs des leçons","description":"Les blocs qui composent une leçon, un par un. Un bloc d'étapes, de volets, d'onglets, de chiffres clés ou de réponses se crée avec son premier enfant, décrit par title et content, et chaque enfant suivant désigne son parent par parent. Le retrait du dernier enfant emporte son parent. Le type, la leçon et le parent ne changent jamais. Seul un enfant de type block-item porte une image, qui se pose et se retire par sa propre route."}}}}
```

## The BlockWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"BlockWrite":{"type":"object","additionalProperties":true,"description":"Les champs acceptés dépendent de l'élément envoyé et ne peuvent pas être listés ici. Les blocs qui composent une leçon, un par un. Un bloc d'étapes, de volets, d'onglets, de chiffres clés ou de réponses se crée avec son premier enfant, décrit par title et content, et chaque enfant suivant désigne son parent par parent. Le retrait du dernier enfant emporte son parent. Le type, la leçon et le parent ne changent jamais. Seul un enfant de type block-item porte une image, qui se pose et se retire par sa propre route."}}}}
```

## The Cash object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Cash":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"register":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Register`."},"date":{"type":"string","format":"date","description":"Date de l'opération."},"position":{"type":"integer","nullable":true},"type":{"type":"string","enum":["debit","credit"],"description":"Valeurs : `debit` (Débit), `credit` (Crédit)."},"source":{"type":"string","enum":["bank-manual","bank-cashflow","private","other","initial","balance","wallet","buy-manual","sell-manual","invoicing","sell-invoice","sell-sale"]},"description":{"type":"string","minLength":1,"nullable":true,"description":"Libellé."},"accountNumber":{"type":"string","nullable":true},"amountIncludingVat":{"type":"number","description":"Montant TTC."},"amountExcludingVat":{"type":"number","nullable":true,"description":"Montant HT."},"hasVat":{"type":"boolean","nullable":true},"vat":{"type":"number","nullable":true,"description":"Montant de TVA."},"vatRate":{"type":"number","nullable":true,"description":"Taux de TVA."},"balance":{"type":"number","nullable":true},"status":{"type":"string","enum":["draft","valid","deleted"]},"proofStatus":{"type":"string","enum":["not-required","missing"],"nullable":true,"description":"Justificatif. Valeurs : `not-required` (Sans justificatif requis), `missing` (Justificatif manquant)."},"cashflow":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Cashflow`.","nullable":true},"transaction":{"type":"integer","format":"int64","description":"Identifiant.","nullable":true},"sale":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Sale`.","nullable":true},"invoice":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Invoice`.","nullable":true},"invoicing":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Invoicing`.","nullable":true},"payment":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Payment`.","nullable":true},"wallet":{"type":"integer","format":"int64","description":"Identifiant.","nullable":true},"customer":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Customer`.","nullable":true},"thirdParty":{"type":"integer","format":"int64","description":"Identifiant d'un élément `ThirdParty`.","nullable":true}},"title":"Opérations de caisse","description":"Les écritures d'un cahier de caisse. Une écriture ne se crée pas par l'API : elle prend sa place dans la suite du cahier et vient le plus souvent d'une vente, d'un rapprochement bancaire ou d'une transaction Stripe. Le statut du justificatif (proofStatus) n'est rendu qu'aux structures qui ont accès aux justificatifs."}}}}
```

## The CashWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"CashWrite":{"type":"object","properties":{"cashflow":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Cashflow`.","nullable":true}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Les écritures d'un cahier de caisse. Une écriture ne se crée pas par l'API : elle prend sa place dans la suite du cahier et vient le plus souvent d'une vente, d'un rapprochement bancaire ou d'une transaction Stripe. Le statut du justificatif (proofStatus) n'est rendu qu'aux structures qui ont accès aux justificatifs.","additionalProperties":true}}}}
```

## The Cashflow object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Cashflow":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"account":{"type":"integer","format":"int64","description":"Compte bancaire. Identifiant d'un élément `BankAccount`.","nullable":true},"date":{"type":"string","format":"date","nullable":true,"description":"Date."},"bookingDate":{"type":"string","format":"date","nullable":true},"type":{"type":"string","enum":["debit","credit","other"],"description":"Type. Valeurs : `credit` (Crédit), `debit` (Débit)."},"amount":{"type":"number","description":"Montant."},"name":{"type":"string","minLength":1,"nullable":true,"description":"Nom."},"memo":{"type":"string","minLength":1,"nullable":true,"description":"Libellé."},"status":{"type":"string","enum":["waiting","allocated","deleted"],"description":"Valeurs : `waiting` (Sans écriture comptable), `allocated` (Avec écriture comptable), `deleted` (Supprimée)."},"reconciliationStatus":{"type":"string","enum":["partial","total"],"nullable":true},"suggestedMethod":{"type":"integer","format":"int64","description":"Identifiant d'un élément `PaymentMethod`.","nullable":true},"reconciliations":{"type":"array","description":"Ce à quoi ce mouvement a été rapproché","items":{"$ref":"#/components/schemas/Reconciliation"}},"annotations":{"type":"array","description":"Les notes portées sur ce mouvement, sur un mouvement désigné","items":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"text":{"type":"string","description":"Texte de la note"},"author":{"type":"object","description":"Qui l'a écrite","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"}}},"createdAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS"},"updatedAt":{"type":"string","nullable":true,"pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS"}}}}},"title":"Opérations bancaires","description":"Les mouvements importés depuis vos comptes bancaires, avec leur état de rapprochement et le compte auquel ils appartiennent. Les mouvements supprimés ne sont jamais renvoyés. Lire un mouvement donne aussi les rapprochements qui le justifient."},"Reconciliation":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"source":{"type":"string","enum":["invoice","sale","cash","wallet","invoicing"]},"amount":{"type":"number","description":"Montant à rapprocher."},"paidAt":{"type":"string","format":"date"},"invoice":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Invoice`.","nullable":true},"invoicing":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Invoicing`.","nullable":true},"sale":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Sale`.","nullable":true},"cash":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Cash`.","nullable":true},"wallet":{"type":"integer","format":"int64","description":"Identifiant.","nullable":true},"payment":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Payment`.","nullable":true},"paymentMethod":{"type":"integer","format":"int64","description":"Moyen de paiement. Identifiant d'un élément `PaymentMethod`.","nullable":true},"cashStatus":{"type":"string","enum":["waiting","valid","ignored"]}},"title":"Rapprochements bancaires","description":"Ce à quoi un mouvement bancaire a été rapproché : une facture, une vente, une opération de caisse, un mouvement de cagnotte ou une facture électronique. Un mouvement peut en porter plusieurs, dont les montants se totalisent au sien. Embarqués dans le champ reconciliations d'un mouvement bancaire."}}}}
```

## The Catalog object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Catalog":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"maxLength":50,"nullable":true,"description":"Nom du catalogue."},"comment":{"type":"string","nullable":true,"description":"Observations."},"type":{"type":"string","enum":["private","pro"],"description":"Grille tarifaire."},"availability":{"type":"string","enum":["custom","stock"],"description":"Gestion du stock."},"status":{"type":"string","enum":["active","deleted"]}},"title":"Catalogues","description":"Les catalogues de vente (marché privé ou marché professionnel) de votre structure, regroupant des offres sur vos produits."}}}}
```

## The CatalogUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"CatalogUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":50,"nullable":true,"description":"Nom du catalogue."},"comment":{"type":"string","nullable":true,"description":"Observations."},"availability":{"type":"string","enum":["custom","stock"],"description":"Gestion du stock."}},"required":["name","comment","availability"]}}}}
```

## The CatalogWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"CatalogWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":50,"nullable":true,"description":"Nom du catalogue."},"type":{"type":"string","enum":["private","pro"],"description":"Grille tarifaire."},"availability":{"type":"string","enum":["custom","stock"],"description":"Gestion du stock."}},"required":["name","type","availability"]}}}}
```

## The Chapter object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Chapter":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"course":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Course`."},"phase":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Phase`.","nullable":true},"name":{"type":"string","minLength":1,"maxLength":100,"description":"Nom du module, sans numéro, que l'écran ajoute devant le nom pour une formation en ligne"},"summary":{"type":"string","minLength":1,"maxLength":250,"nullable":true,"description":"Présentation."},"position":{"type":"integer"}},"title":"Modules","description":"Les modules d'une formation, qui regroupent ses leçons. Un module supprimé emporte ses leçons ; supprimer celui qui porte les dernières leçons d'une formation publiée qu'un inscrit a suivie en entier est refusé en 412."}}}}
```

## The ChapterUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ChapterUpdate":{"type":"object","properties":{"phase":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Phase`.","nullable":true},"name":{"type":"string","minLength":1,"maxLength":100,"description":"Nom du module, sans numéro, que l'écran ajoute devant le nom pour une formation en ligne"},"summary":{"type":"string","minLength":1,"maxLength":250,"nullable":true,"description":"Présentation."}},"required":["phase","name","summary"]}}}}
```

## The ChapterWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ChapterWrite":{"type":"object","properties":{"course":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Course`."},"phase":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Phase`.","nullable":true},"name":{"type":"string","minLength":1,"maxLength":100,"description":"Nom du module, sans numéro, que l'écran ajoute devant le nom pour une formation en ligne"},"summary":{"type":"string","minLength":1,"maxLength":250,"nullable":true,"description":"Présentation."}},"required":["course","phase","name","summary"]}}}}
```

## The Comment object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Comment":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"task":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Task`."},"text":{"type":"string","minLength":1,"maxLength":250,"description":"Commentaire."},"createdAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS."},"createdBy":{"type":"integer","format":"int64","description":"Utilisateur. Identifiant d'un élément `User`."},"updatedAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS.","nullable":true}},"title":"Commentaires d'interventions","description":"Les commentaires laissés sur une intervention du planning. Chaque commentaire est rattaché à une intervention, et hérite d'elle sa série et sa mise en culture."}}}}
```

## The CommentUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"CommentUpdate":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":250,"description":"Commentaire."}},"required":["text"]}}}}
```

## The CommentWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"CommentWrite":{"type":"object","properties":{"task":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Task`."},"text":{"type":"string","minLength":1,"maxLength":250,"description":"Commentaire."}},"required":["task","text"]}}}}
```

## The Composition object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Composition":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"product":{"type":"integer","format":"int64","nullable":true,"description":"Référence du produit composé"},"deliveredAt":{"type":"string","format":"date"},"endAt":{"type":"string","format":"date","nullable":true,"description":"Fin de validité de la composition"},"type":{"type":"string","enum":["private","pro"]},"taxes":{"type":"string","enum":["including","excluding"],"description":"Valeurs : `including` (TTC), `excluding` (HT)."},"hasVat":{"type":"boolean"},"priceExcludingVat":{"type":"number","nullable":true},"priceIncludingVat":{"type":"number","nullable":true},"vat":{"type":"number"},"itemsCount":{"type":"integer","description":"Nombre de lignes"},"organic":{"type":"boolean"},"conversion":{"type":"boolean"},"nature":{"type":"string","enum":["good","service","mixed"],"nullable":true},"items":{"type":"array","description":"Lignes de la vente","items":{"$ref":"#/components/schemas/CompositionItem"}}},"title":"Compositions","description":"Ce que contient un panier à partir d'une date donnée. Les compositions d'un même panier se succèdent sans se chevaucher, et la date de fin de chacune découle de la suivante. Modifier une composition change le contenu des ventes déjà livrées sur la période qu'elle couvre, ce qui n'est plus possible passé trente jours."},"CompositionItem":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"description":"Désignation."},"reference":{"type":"string","minLength":1,"nullable":true},"additional":{"type":"string","nullable":true,"description":"Complément d'information."},"product":{"type":"integer","format":"int64","description":"Produit. Identifiant d'un élément `Product`.","nullable":true},"unit":{"type":"integer","format":"int64","description":"Unité de vente. Identifiant d'un élément `Unit`.","nullable":true},"packaging":{"type":"number","nullable":true,"description":"Colisage."},"number":{"type":"number","nullable":true,"description":"Quantité."},"unitPrice":{"type":"number","description":"Prix unitaire."},"unitPriceInitial":{"type":"number","nullable":true},"price":{"type":"number","nullable":true,"description":"Montant."},"priceInitial":{"type":"number","nullable":true},"vatRate":{"type":"number","nullable":true,"description":"Taux de TVA."},"vatCode":{"type":"string","enum":["s","z","e","ae","k","g","o"],"nullable":true,"description":"Code de TVA. Valeurs : `s` (Standard), `z` (Taux de TVA à 0), `e` (Exempté de TVA), `ae` (Auto liquidation de TVA), `k` (Exonération pour livraison intracommunautaire), `g` (Exempté de TVA pour Export hors UE), `o` (Hors du périmètre d'application de la TVA)."},"nature":{"type":"string","enum":["good","service","silent"],"description":"Nature de la prestation. Valeurs : `good` (Livraison de bien), `service` (Prestation de service)."},"organic":{"type":"string","enum":["no","yes","conversion"],"description":"Valeurs : `no` (Non), `yes` (Oui), `conversion` (En conversion)."},"qualities":{"type":"string"},"origin":{"type":"string","minLength":1,"nullable":true,"description":"Origine."}},"title":"Ingrédients de panier","description":"Le contenu d'une composition : un produit de votre catalogue, sa quantité et le prix qu'il représente dans le panier. À ne pas confondre avec le détail figé dans une vente, qui en est une copie répartie au prorata du prix payé et se lit sous la ligne de vente."}}}}
```

## The CompositionItem object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"CompositionItem":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"description":"Désignation."},"reference":{"type":"string","minLength":1,"nullable":true},"additional":{"type":"string","nullable":true,"description":"Complément d'information."},"product":{"type":"integer","format":"int64","description":"Produit. Identifiant d'un élément `Product`.","nullable":true},"unit":{"type":"integer","format":"int64","description":"Unité de vente. Identifiant d'un élément `Unit`.","nullable":true},"packaging":{"type":"number","nullable":true,"description":"Colisage."},"number":{"type":"number","nullable":true,"description":"Quantité."},"unitPrice":{"type":"number","description":"Prix unitaire."},"unitPriceInitial":{"type":"number","nullable":true},"price":{"type":"number","nullable":true,"description":"Montant."},"priceInitial":{"type":"number","nullable":true},"vatRate":{"type":"number","nullable":true,"description":"Taux de TVA."},"vatCode":{"type":"string","enum":["s","z","e","ae","k","g","o"],"nullable":true,"description":"Code de TVA. Valeurs : `s` (Standard), `z` (Taux de TVA à 0), `e` (Exempté de TVA), `ae` (Auto liquidation de TVA), `k` (Exonération pour livraison intracommunautaire), `g` (Exempté de TVA pour Export hors UE), `o` (Hors du périmètre d'application de la TVA)."},"nature":{"type":"string","enum":["good","service","silent"],"description":"Nature de la prestation. Valeurs : `good` (Livraison de bien), `service` (Prestation de service)."},"organic":{"type":"string","enum":["no","yes","conversion"],"description":"Valeurs : `no` (Non), `yes` (Oui), `conversion` (En conversion)."},"qualities":{"type":"string"},"origin":{"type":"string","minLength":1,"nullable":true,"description":"Origine."}},"title":"Ingrédients de panier","description":"Le contenu d'une composition : un produit de votre catalogue, sa quantité et le prix qu'il représente dans le panier. À ne pas confondre avec le détail figé dans une vente, qui en est une copie répartie au prorata du prix payé et se lit sous la ligne de vente."}}}}
```

## The CompositionItemUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"CompositionItemUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Désignation."},"additional":{"type":"string","nullable":true,"description":"Complément d'information."},"packaging":{"type":"number","nullable":true,"description":"Colisage."},"number":{"type":"number","nullable":true,"description":"Quantité."},"unitPrice":{"type":"number","description":"Prix unitaire."},"unitPriceInitial":{"type":"number","nullable":true},"price":{"type":"number","nullable":true,"description":"Montant."},"vatRate":{"type":"number","nullable":true,"description":"Taux de TVA."},"vatCode":{"type":"string","enum":["s","z","e","ae","k","g","o"],"nullable":true,"description":"Code de TVA. Valeurs : `s` (Standard), `z` (Taux de TVA à 0), `e` (Exempté de TVA), `ae` (Auto liquidation de TVA), `k` (Exonération pour livraison intracommunautaire), `g` (Exempté de TVA pour Export hors UE), `o` (Hors du périmètre d'application de la TVA)."},"organic":{"type":"string","enum":["no","yes","conversion"],"description":"Valeurs : `no` (Non), `yes` (Oui), `conversion` (En conversion)."},"qualities":{"type":"string"},"origin":{"type":"string","minLength":1,"nullable":true,"description":"Origine."},"locked":{"type":"string","enum":["unit-price","number","price"]}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Le contenu d'une composition : un produit de votre catalogue, sa quantité et le prix qu'il représente dans le panier. À ne pas confondre avec le détail figé dans une vente, qui en est une copie répartie au prorata du prix payé et se lit sous la ligne de vente.","additionalProperties":true}}}}
```

## The CompositionItemWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"CompositionItemWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Désignation."},"product":{"type":"integer","format":"int64","description":"Produit. Identifiant d'un élément `Product`.","nullable":true},"unit":{"type":"integer","format":"int64","description":"Unité de vente. Identifiant d'un élément `Unit`.","nullable":true},"packaging":{"type":"number","nullable":true,"description":"Colisage."},"number":{"type":"number","nullable":true,"description":"Quantité."},"unitPrice":{"type":"number","description":"Prix unitaire."},"unitPriceInitial":{"type":"number","nullable":true},"price":{"type":"number","nullable":true,"description":"Montant."},"vatRate":{"type":"number","nullable":true,"description":"Taux de TVA."},"nature":{"type":"string","enum":["good","service","silent"],"description":"Nature de la prestation. Valeurs : `good` (Livraison de bien), `service` (Prestation de service)."},"organic":{"type":"string","enum":["no","yes","conversion"],"description":"Valeurs : `no` (Non), `yes` (Oui), `conversion` (En conversion)."},"qualities":{"type":"string"},"locked":{"type":"string","enum":["unit-price","number","price"]},"parent":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Item`.","nullable":true}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Le contenu d'une composition : un produit de votre catalogue, sa quantité et le prix qu'il représente dans le panier. À ne pas confondre avec le détail figé dans une vente, qui en est une copie répartie au prorata du prix payé et se lit sous la ligne de vente.","additionalProperties":true}}}}
```

## The CompositionUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"CompositionUpdate":{"type":"object","properties":{"comment":{"type":"string","nullable":true,"description":"Commentaire interne."}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Ce que contient un panier à partir d'une date donnée. Les compositions d'un même panier se succèdent sans se chevaucher, et la date de fin de chacune découle de la suivante. Modifier une composition change le contenu des ventes déjà livrées sur la période qu'elle couvre, ce qui n'est plus possible passé trente jours.","additionalProperties":true}}}}
```

## The CompositionWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"CompositionWrite":{"type":"object","properties":{"deliveredAt":{"type":"string","format":"date"},"customer":{"type":"integer","format":"int64","description":"Client. Identifiant d'un élément `Customer`.","nullable":true},"productsList":{"description":"Champ accepté en écriture, sans équivalent en lecture."},"shipping":{"type":"number","nullable":true,"description":"Frais de livraison."},"preparationStatus":{"type":"string","enum":["composition","draft","basket","confirmed","selling","prepared","delivered","canceled","expired"],"description":"Statut de préparation. Valeurs : `draft` (Brouillon), `basket` (Panier), `expired` (Expiré), `confirmed` (Confirmé), `selling` (Caisse), `prepared` (Préparé), `delivered` (Livré), `canceled` (Annulé)."},"source":{"description":"Champ accepté en écriture, sans équivalent en lecture."},"catalogs":{"type":"object","nullable":true,"description":"Choisir les catalogues proposés à la vente."}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Ce que contient un panier à partir d'une date donnée. Les compositions d'un même panier se succèdent sans se chevaucher, et la date de fin de chacune découle de la suivante. Modifier une composition change le contenu des ventes déjà livrées sur la période qu'elle couvre, ce qui n'est plus possible passé trente jours.","additionalProperties":true}}}}
```

## The Contract object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Contract":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"presence":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Presence`."},"type":{"type":"string","enum":["cdi","cdd","seasonal","apprenticeship","internship","other","professionalization","temporary","employer-group"],"description":"Type de contrat. Valeurs : `cdi` (CDI), `cdd` (CDD), `seasonal` (Saisonnier), `apprenticeship` (Apprentissage), `professionalization` (Professionnalisation), `internship` (Stage), `temporary` (Intérim), `employer-group` (Groupement d'employeurs), `other` (Autre)."},"weeklyHours":{"type":"number","nullable":true,"description":"Heures par semaine."},"annualHours":{"type":"number","nullable":true,"description":"Heures par an."},"hoursPeriod":{"type":"string","enum":["week","year"],"description":"Heures comptées. Valeurs : `week` (À la semaine), `year` (Sur l'année, contrat annualisé)."},"days":{"type":"string","nullable":true,"description":"Jours travaillés."},"hasVariableDays":{"type":"boolean","description":"Jours variables."}},"title":"Contrats","description":"Le contrat d'une période de présence : son type, l'horaire hebdomadaire et les jours travaillés. Une période porte au plus un contrat. Les contrats se lisent depuis l'API, ils se saisissent avec leur période depuis l'onglet Personnes."}}}}
```

## The Course object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Course":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"maxLength":100,"description":"Titre."},"type":{"type":"string","enum":["onsite","remote","online","mixed"],"description":"Type. Valeurs : `onsite` (Présentiel), `remote` (Visio), `mixed` (Présentiel et visio), `online` (En ligne)."},"summary":{"type":"string","minLength":1,"maxLength":250,"nullable":true,"description":"Présentation."},"status":{"type":"string","enum":["draft","published"],"description":"État. Valeurs : `draft` (Brouillon), `published` (Publiée)."},"theme":{"type":"integer","format":"int64","description":"Thématique. Identifiant.","nullable":true},"subtheme":{"type":"integer","format":"int64","description":"Sous-thématique. Identifiant.","nullable":true},"level":{"type":"integer","format":"int64","description":"Niveau. Identifiant.","nullable":true},"offer":{"type":"string","enum":["network","trainee","none"],"description":"Paiement du stagiaire. Valeurs : `network` (Paiement en direct avec l'organisme), `trainee` (Paiement en ligne par le stagiaire)."},"priceFunded":{"type":"number","nullable":true,"description":"Public financé."},"price":{"type":"number","nullable":true,"description":"Autre public."},"externalOnly":{"type":"boolean","description":"Envoyer les nouvelles inscriptions sur le site de l'organisme."},"externalUrl":{"type":"string","format":"uri","nullable":true,"description":"Page de la formation."},"enrollmentPaused":{"type":"boolean"},"description":{"type":"string","nullable":true,"description":"Enjeux."},"objectives":{"type":"string","nullable":true,"description":"Objectifs."},"audience":{"type":"string","minLength":1,"maxLength":250,"nullable":true,"description":"Public visé."},"prerequisites":{"type":"string","minLength":1,"maxLength":250,"nullable":true,"description":"Prérequis."},"access":{"type":"string","minLength":1,"maxLength":250,"nullable":true,"description":"Modalités et délais d'accès."},"accessibility":{"type":"string","minLength":1,"maxLength":2000,"nullable":true,"description":"Accessibilité."},"recognition":{"type":"string","minLength":1,"maxLength":250,"nullable":true,"description":"Reconnaissance."},"publishedAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS.","nullable":true},"updatedAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS."}},"title":"Formations","description":"Les formations de votre groupe. Les objectifs s'écrivent en HTML et se relisent enveloppés dans une balise main, format de stockage de l'éditeur."}}}}
```

## The CourseUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"CourseUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"Titre."},"summary":{"type":"string","minLength":1,"maxLength":250,"nullable":true,"description":"Présentation."},"status":{"type":"string","enum":["draft","published"],"description":"État. Valeurs : `draft` (Brouillon), `published` (Publiée)."},"theme":{"type":"integer","format":"int64","description":"Thématique. Identifiant.","nullable":true},"level":{"type":"integer","format":"int64","description":"Niveau. Identifiant.","nullable":true},"description":{"type":"string","nullable":true,"description":"Enjeux."},"objectives":{"type":"string","nullable":true,"description":"Objectifs."},"audience":{"type":"string","minLength":1,"maxLength":250,"nullable":true,"description":"Public visé."},"prerequisites":{"type":"string","minLength":1,"maxLength":250,"nullable":true,"description":"Prérequis."}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Les formations de votre groupe. Les objectifs s'écrivent en HTML et se relisent enveloppés dans une balise main, format de stockage de l'éditeur.","additionalProperties":true}}}}
```

## The CourseWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"CourseWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"Titre."},"type":{"type":"string","enum":["onsite","remote","online","mixed"],"description":"Type. Valeurs : `onsite` (Présentiel), `remote` (Visio), `mixed` (Présentiel et visio), `online` (En ligne)."},"summary":{"type":"string","minLength":1,"maxLength":250,"nullable":true,"description":"Présentation."},"theme":{"type":"integer","format":"int64","description":"Thématique. Identifiant.","nullable":true},"level":{"type":"integer","format":"int64","description":"Niveau. Identifiant.","nullable":true}},"required":["name","type","summary","theme","level"]}}}}
```

## The Crop object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Crop":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"sequence":{"type":"integer","format":"int64","description":"Itinéraire technique. Identifiant d'un élément `Sequence`."},"plant":{"type":"integer","format":"int64","description":"Espèce. Identifiant d'un élément `Plant`."},"startWeek":{"type":"integer","nullable":true},"startAction":{"type":"string","enum":["sowing","planting"],"nullable":true},"distance":{"type":"string","enum":["spacing","density"]},"rows":{"type":"integer","nullable":true,"description":"Nombre de rangs par planche."},"rowSpacing":{"type":"number","nullable":true,"description":"Espace inter-rangs."},"plantSpacing":{"type":"number","nullable":true,"description":"Espace sur le rang."},"density":{"type":"number","nullable":true,"description":"Densité d'implantation."},"mainUnit":{"type":"string","enum":["kg","unit","bunch"],"description":"Unité de récolte principale. Valeurs : `kg` (kg), `bunch` (botte), `unit` (pièce)."},"seedling":{"type":"string","enum":["sowing","young-plant","young-plant-bought"],"nullable":true,"description":"Implantation. Valeurs : `sowing` (Semis direct), `young-plant` (Plant autoproduit), `young-plant-bought` (Plant acheté)."},"seedlingSeeds":{"type":"integer","nullable":true,"description":"Nombre de graines par plantNombre de graines par trou."},"yieldExpected":{"type":"number","nullable":true,"description":"Objectif de rendement."},"varieties":{"type":"array","description":"Répartition des variétés de l'espèce, une part par variété","items":{"$ref":"#/components/schemas/SequenceSlice"}}},"title":"Espèces d'un itinéraire","description":"Une espèce dans un itinéraire technique, avec sa conduite (écartements ou densité, semis, rendement attendu) et la répartition des variétés qu'on y met. Une même espèce n'y figure qu'une fois."},"SequenceSlice":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"variety":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Variety`."},"partPercent":{"type":"number","nullable":true}},"title":"Variétés d'une espèce d'itinéraire","description":"La part d'une variété dans une espèce d'itinéraire, en pourcentage. Se pose et se retire avec l'espèce qui la porte."}}}}
```

## The CropWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"CropWrite":{"type":"object","properties":{"plant":{"type":"integer","format":"int64","description":"Espèce. Identifiant d'un élément `Plant`."},"distance":{"type":"string","enum":["spacing","density"]},"rows":{"type":"integer","nullable":true,"description":"Nombre de rangs par planche."},"rowSpacing":{"type":"number","nullable":true,"description":"Espace inter-rangs."},"plantSpacing":{"type":"number","nullable":true,"description":"Espace sur le rang."},"density":{"type":"number","nullable":true,"description":"Densité d'implantation."},"mainUnit":{"type":"string","enum":["kg","unit","bunch"],"description":"Unité de récolte principale. Valeurs : `kg` (kg), `bunch` (botte), `unit` (pièce)."},"seedling":{"type":"string","enum":["sowing","young-plant","young-plant-bought"],"nullable":true,"description":"Implantation. Valeurs : `sowing` (Semis direct), `young-plant` (Plant autoproduit), `young-plant-bought` (Plant acheté)."},"seedlingSeeds":{"type":"integer","nullable":true,"description":"Nombre de graines par plantNombre de graines par trou."},"yieldExpected":{"type":"number","nullable":true,"description":"Objectif de rendement."},"varieties":{"type":"array","description":"Répartition des variétés de l'espèce, une part par variété","items":{"$ref":"#/components/schemas/SequenceSlice"}},"actions":{"description":"Champ accepté en écriture, sans équivalent en lecture."}},"required":["plant","distance","rows","rowSpacing","plantSpacing","density","mainUnit","seedling","seedlingSeeds","yieldExpected","varieties","actions"]},"SequenceSlice":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"variety":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Variety`."},"partPercent":{"type":"number","nullable":true}},"title":"Variétés d'une espèce d'itinéraire","description":"La part d'une variété dans une espèce d'itinéraire, en pourcentage. Se pose et se retire avec l'espèce qui la porte."}}}}
```

## The Cultivation object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Cultivation":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"series":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Series`."},"season":{"type":"integer"},"plant":{"type":"integer","format":"int64","description":"Espèce. Identifiant d'un élément `Plant`."},"distance":{"type":"string","enum":["spacing","density"]},"rows":{"type":"integer","nullable":true,"description":"Nombre de rangs par planche."},"rowSpacing":{"type":"number","nullable":true,"description":"Espace inter-rangs."},"plantSpacing":{"type":"number","nullable":true,"description":"Espace sur le rang."},"density":{"type":"number","nullable":true,"description":"Densité d'implantation."},"varietiesUnit":{"type":"string","enum":["percent","area","length","plant","tray"]},"varietiesTool":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Tool`.","nullable":true},"area":{"type":"integer","nullable":true},"areaPermanent":{"type":"integer","nullable":true},"length":{"type":"integer","nullable":true},"lengthPermanent":{"type":"integer","nullable":true},"seedling":{"type":"string","enum":["sowing","young-plant","young-plant-bought"],"nullable":true,"description":"Implantation. Valeurs : `sowing` (Semis direct), `young-plant` (Plant autoproduit), `young-plant-bought` (Plant acheté)."},"seedlingSeeds":{"type":"integer","nullable":true,"description":"Nombre de graines par plantNombre de graines par trou."},"harvestedByUnit":{"type":"object","nullable":true},"mainUnit":{"type":"string","enum":["kg","unit","bunch"],"description":"Unité de récolte principale. Valeurs : `kg` (kg), `bunch` (botte), `unit` (pièce)."},"unitWeight":{"type":"number","nullable":true,"description":"Poids d'une unité."},"bunchWeight":{"type":"number","nullable":true,"description":"Poids d'une botte."},"yieldExpected":{"type":"number","nullable":true,"description":"Objectif de rendement."},"harvestMonths":{"type":"object","nullable":true,"description":"Mois de récolte."},"harvestWeeks":{"type":"object","nullable":true,"description":"Semaines de récolte."},"harvestPeriodExpected":{"type":"string","enum":["week","month"]},"harvestMonthsExpected":{"type":"object","nullable":true,"description":"Mois de récolte attendus."},"harvestWeeksExpected":{"type":"object","nullable":true,"description":"Semaines de récolte attendues."},"varieties":{"type":"array","description":"Répartition des variétés de la culture, une part par variété","items":{"$ref":"#/components/schemas/SeriesSlice"}}},"title":"Mises en culture","description":"La culture d'une variété au sein d'une série, sur une saison donnée (surface, densité, dates, itinéraire technique)."},"SeriesSlice":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"variety":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Variety`."},"partPercent":{"type":"number","nullable":true},"partArea":{"type":"integer","nullable":true},"partLength":{"type":"integer","nullable":true},"partPlant":{"type":"integer","nullable":true},"partTray":{"type":"number","nullable":true}},"title":"Répartitions de culture","description":"La part (en %, m², mL, nombre de plants ou de plateaux) qu'une variété occupe au sein d'une mise en culture, sur les différentes planches d'une série."}}}}
```

## The CultivationUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"CultivationUpdate":{"type":"object","properties":{"plant":{"type":"integer","format":"int64","description":"Espèce. Identifiant d'un élément `Plant`."},"distance":{"type":"string","enum":["spacing","density"]},"rows":{"type":"integer","nullable":true,"description":"Nombre de rangs par planche."},"rowSpacing":{"type":"number","nullable":true,"description":"Espace inter-rangs."},"plantSpacing":{"type":"number","nullable":true,"description":"Espace sur le rang."},"density":{"type":"number","nullable":true,"description":"Densité d'implantation."},"varietiesUnit":{"type":"string","enum":["percent","area","length","plant","tray"]},"varietiesTool":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Tool`.","nullable":true},"seedling":{"type":"string","enum":["sowing","young-plant","young-plant-bought"],"nullable":true,"description":"Implantation. Valeurs : `sowing` (Semis direct), `young-plant` (Plant autoproduit), `young-plant-bought` (Plant acheté)."},"seedlingSeeds":{"type":"integer","nullable":true,"description":"Nombre de graines par plantNombre de graines par trou."},"mainUnit":{"type":"string","enum":["kg","unit","bunch"],"description":"Unité de récolte principale. Valeurs : `kg` (kg), `bunch` (botte), `unit` (pièce)."},"unitWeight":{"type":"number","nullable":true,"description":"Poids d'une unité."},"bunchWeight":{"type":"number","nullable":true,"description":"Poids d'une botte."},"yieldExpected":{"type":"number","nullable":true,"description":"Objectif de rendement."},"harvestPeriodExpected":{"type":"string","enum":["week","month"]},"harvestMonthsExpected":{"type":"object","nullable":true,"description":"Mois de récolte attendus."},"harvestWeeksExpected":{"type":"object","nullable":true,"description":"Semaines de récolte attendues."},"varieties":{"type":"array","description":"Répartition des variétés de la culture, une part par variété","items":{"$ref":"#/components/schemas/SeriesSlice"}}},"required":["plant","distance","rows","rowSpacing","plantSpacing","density","varietiesUnit","varietiesTool","seedling","seedlingSeeds","mainUnit","unitWeight","bunchWeight","yieldExpected","harvestPeriodExpected","harvestMonthsExpected","harvestWeeksExpected","varieties"]},"SeriesSlice":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"variety":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Variety`."},"partPercent":{"type":"number","nullable":true},"partArea":{"type":"integer","nullable":true},"partLength":{"type":"integer","nullable":true},"partPlant":{"type":"integer","nullable":true},"partTray":{"type":"number","nullable":true}},"title":"Répartitions de culture","description":"La part (en %, m², mL, nombre de plants ou de plateaux) qu'une variété occupe au sein d'une mise en culture, sur les différentes planches d'une série."}}}}
```

## The CultivationWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"CultivationWrite":{"type":"object","properties":{"series":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Series`."},"plant":{"type":"integer","format":"int64","description":"Espèce. Identifiant d'un élément `Plant`."},"distance":{"type":"string","enum":["spacing","density"]},"rows":{"type":"integer","nullable":true,"description":"Nombre de rangs par planche."},"rowSpacing":{"type":"number","nullable":true,"description":"Espace inter-rangs."},"plantSpacing":{"type":"number","nullable":true,"description":"Espace sur le rang."},"density":{"type":"number","nullable":true,"description":"Densité d'implantation."},"varietiesUnit":{"type":"string","enum":["percent","area","length","plant","tray"]},"varietiesTool":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Tool`.","nullable":true},"seedling":{"type":"string","enum":["sowing","young-plant","young-plant-bought"],"nullable":true,"description":"Implantation. Valeurs : `sowing` (Semis direct), `young-plant` (Plant autoproduit), `young-plant-bought` (Plant acheté)."},"seedlingSeeds":{"type":"integer","nullable":true,"description":"Nombre de graines par plantNombre de graines par trou."},"mainUnit":{"type":"string","enum":["kg","unit","bunch"],"description":"Unité de récolte principale. Valeurs : `kg` (kg), `bunch` (botte), `unit` (pièce)."},"yieldExpected":{"type":"number","nullable":true,"description":"Objectif de rendement."},"harvestPeriodExpected":{"type":"string","enum":["week","month"]},"harvestMonthsExpected":{"type":"object","nullable":true,"description":"Mois de récolte attendus."},"harvestWeeksExpected":{"type":"object","nullable":true,"description":"Semaines de récolte attendues."},"varieties":{"type":"array","description":"Répartition des variétés de la culture, une part par variété","items":{"$ref":"#/components/schemas/SeriesSlice"}}},"required":["series","plant","distance","rows","rowSpacing","plantSpacing","density","varietiesUnit","varietiesTool","seedling","seedlingSeeds","mainUnit","yieldExpected","harvestPeriodExpected","harvestMonthsExpected","harvestWeeksExpected","varieties"]},"SeriesSlice":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"variety":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Variety`."},"partPercent":{"type":"number","nullable":true},"partArea":{"type":"integer","nullable":true},"partLength":{"type":"integer","nullable":true},"partPlant":{"type":"integer","nullable":true},"partTray":{"type":"number","nullable":true}},"title":"Répartitions de culture","description":"La part (en %, m², mL, nombre de plants ou de plateaux) qu'une variété occupe au sein d'une mise en culture, sur les différentes planches d'une série."}}}}
```

## The Customer object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Customer":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"number":{"type":"string","nullable":true},"category":{"type":"string","enum":["pro","private","collective"],"description":"Catégorie du client, qui commande les champs acceptés en écriture"},"type":{"type":"string","enum":["private","pro"]},"status":{"type":"string","enum":["active","inactive"]},"name":{"type":"string","nullable":true,"description":"Nom."},"firstName":{"type":"string","minLength":1,"maxLength":30,"nullable":true,"description":"Prénom."},"lastName":{"type":"string","minLength":1,"maxLength":30,"nullable":true,"description":"Nom."},"commercialName":{"type":"string","nullable":true,"description":"Nom commercial."},"legalName":{"type":"string","nullable":true,"description":"Raison sociale."},"contactName":{"type":"string","nullable":true,"description":"Nom du contact."},"email":{"type":"string","format":"email","nullable":true,"description":"Adresse e-mail."},"phone":{"type":"string","nullable":true,"description":"Numéro de téléphone."},"invoiceStreet1":{"type":"string","nullable":true},"invoiceStreet2":{"type":"string","nullable":true},"invoicePostcode":{"type":"string","nullable":true},"invoiceCity":{"type":"string","nullable":true},"invoiceCountry":{"type":"integer","format":"int64","description":"Pays de facturation. Identifiant."},"deliveryStreet1":{"type":"string","nullable":true},"deliveryStreet2":{"type":"string","nullable":true},"deliveryPostcode":{"type":"string","nullable":true},"deliveryCity":{"type":"string","nullable":true},"deliveryCountry":{"type":"integer","format":"int64","description":"Pays de livraison. Identifiant."},"siret":{"type":"string","minLength":1,"nullable":true,"description":"Numéro d'immatriculation SIRET."},"vatNumber":{"type":"string","nullable":true,"description":"Numéro de TVA intracommunautaire."},"vatApplication":{"type":"string","enum":["normal","intracom","extracom"],"description":"Application de la TVA. Valeurs : `normal` (Standard), `intracom` (Autoliquidation intra-communautaire), `extracom` (Exonération pour exportation extra-communautaire)."},"electronicAddress":{"type":"string","nullable":true,"description":"Adresse de facturation électronique."},"groups":{"type":"array","items":{},"description":"Groupe."},"discount":{"type":"integer","description":"Remise commerciale."},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","description":"Couleur personnalisée. Couleur hexadécimale.","nullable":true},"orderFormEmail":{"type":"string","format":"email","nullable":true,"description":"Adresse e-mail pour l'envoi des devis."},"deliveryNoteEmail":{"type":"string","format":"email","nullable":true,"description":"Adresse e-mail pour l'envoi des bons de livraison."},"invoiceEmail":{"type":"string","format":"email","nullable":true,"description":"Adresse e-mail pour l'envoi des factures."},"defaultPaymentMethod":{"type":"integer","format":"int64","description":"Mode de règlement par défaut. Identifiant d'un élément `PaymentMethod`.","nullable":true},"wallet":{"type":"number","nullable":true}},"title":"Clients","description":"Vos clients particuliers, professionnels et points de vente. La catégorie détermine les champs attendus : coordonnées de facturation et numéro de TVA pour un professionnel, identité seule pour un point de vente."}}}}
```

## The CustomerGroup object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"CustomerGroup":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"description":"Nom."},"type":{"type":"string","enum":["private","pro"],"description":"Clientèle. Valeurs : `pro` (Professionnels), `private` (Particuliers)."},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","description":"Couleur. Couleur hexadécimale."}},"title":"Groupes de clients","description":"Les groupes utilisés pour segmenter vos clients (tarifs, restrictions de vente)."}}}}
```

## The CustomerGroupUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"CustomerGroupUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom."},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","description":"Couleur. Couleur hexadécimale."}},"required":["name","color"]}}}}
```

## The CustomerGroupWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"CustomerGroupWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom."},"type":{"type":"string","enum":["private","pro"],"description":"Clientèle. Valeurs : `pro` (Professionnels), `private` (Particuliers)."},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","description":"Couleur. Couleur hexadécimale."}},"required":["name","type","color"]}}}}
```

## The CustomerUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"CustomerUpdate":{"type":"object","properties":{"category":{"type":"string","enum":["pro","private","collective"],"description":"Catégorie du client, qui commande les champs acceptés en écriture"},"name":{"type":"string","nullable":true,"description":"Nom."},"firstName":{"type":"string","minLength":1,"maxLength":30,"nullable":true,"description":"Prénom."},"lastName":{"type":"string","minLength":1,"maxLength":30,"nullable":true,"description":"Nom."},"commercialName":{"type":"string","nullable":true,"description":"Nom commercial."},"legalName":{"type":"string","nullable":true,"description":"Raison sociale."},"contactName":{"type":"string","nullable":true,"description":"Nom du contact."},"email":{"type":"string","format":"email","nullable":true,"description":"Adresse e-mail."},"phone":{"type":"string","nullable":true,"description":"Numéro de téléphone."},"invoiceStreet1":{"type":"string","nullable":true},"invoiceStreet2":{"type":"string","nullable":true},"invoicePostcode":{"type":"string","nullable":true},"invoiceCity":{"type":"string","nullable":true},"invoiceCountry":{"type":"integer","format":"int64","description":"Pays de facturation. Identifiant."},"deliveryStreet1":{"type":"string","nullable":true},"deliveryStreet2":{"type":"string","nullable":true},"deliveryPostcode":{"type":"string","nullable":true},"deliveryCity":{"type":"string","nullable":true},"deliveryCountry":{"type":"integer","format":"int64","description":"Pays de livraison. Identifiant."},"siret":{"type":"string","minLength":1,"nullable":true,"description":"Numéro d'immatriculation SIRET."},"vatNumber":{"type":"string","nullable":true,"description":"Numéro de TVA intracommunautaire."},"vatApplication":{"type":"string","enum":["normal","intracom","extracom"],"description":"Application de la TVA. Valeurs : `normal` (Standard), `intracom` (Autoliquidation intra-communautaire), `extracom` (Exonération pour exportation extra-communautaire)."},"groups":{"type":"array","items":{},"description":"Groupe."},"discount":{"type":"integer","description":"Remise commerciale."},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","description":"Couleur personnalisée. Couleur hexadécimale.","nullable":true},"orderFormEmail":{"type":"string","format":"email","nullable":true,"description":"Adresse e-mail pour l'envoi des devis."},"deliveryNoteEmail":{"type":"string","format":"email","nullable":true,"description":"Adresse e-mail pour l'envoi des bons de livraison."},"invoiceEmail":{"type":"string","format":"email","nullable":true,"description":"Adresse e-mail pour l'envoi des factures."},"defaultPaymentMethod":{"type":"integer","format":"int64","description":"Mode de règlement par défaut. Identifiant d'un élément `PaymentMethod`.","nullable":true}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Vos clients particuliers, professionnels et points de vente. La catégorie détermine les champs attendus : coordonnées de facturation et numéro de TVA pour un professionnel, identité seule pour un point de vente.","additionalProperties":true}}}}
```

## The CustomerWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"CustomerWrite":{"type":"object","properties":{"category":{"type":"string","enum":["pro","private","collective"],"description":"Catégorie du client, qui commande les champs acceptés en écriture"},"name":{"type":"string","nullable":true,"description":"Nom."},"firstName":{"type":"string","minLength":1,"maxLength":30,"nullable":true,"description":"Prénom."},"lastName":{"type":"string","minLength":1,"maxLength":30,"nullable":true,"description":"Nom."},"commercialName":{"type":"string","nullable":true,"description":"Nom commercial."},"legalName":{"type":"string","nullable":true,"description":"Raison sociale."},"contactName":{"type":"string","nullable":true,"description":"Nom du contact."},"email":{"type":"string","format":"email","nullable":true,"description":"Adresse e-mail."},"phone":{"type":"string","nullable":true,"description":"Numéro de téléphone."},"invoiceStreet1":{"type":"string","nullable":true},"invoiceStreet2":{"type":"string","nullable":true},"invoicePostcode":{"type":"string","nullable":true},"invoiceCity":{"type":"string","nullable":true},"invoiceCountry":{"type":"integer","format":"int64","description":"Pays de facturation. Identifiant."},"deliveryStreet1":{"type":"string","nullable":true},"deliveryStreet2":{"type":"string","nullable":true},"deliveryPostcode":{"type":"string","nullable":true},"deliveryCity":{"type":"string","nullable":true},"deliveryCountry":{"type":"integer","format":"int64","description":"Pays de livraison. Identifiant."},"siret":{"type":"string","minLength":1,"nullable":true,"description":"Numéro d'immatriculation SIRET."},"vatNumber":{"type":"string","nullable":true,"description":"Numéro de TVA intracommunautaire."},"vatApplication":{"type":"string","enum":["normal","intracom","extracom"],"description":"Application de la TVA. Valeurs : `normal` (Standard), `intracom` (Autoliquidation intra-communautaire), `extracom` (Exonération pour exportation extra-communautaire)."},"defaultPaymentMethod":{"type":"integer","format":"int64","description":"Mode de règlement par défaut. Identifiant d'un élément `PaymentMethod`.","nullable":true},"walletEnabled":{"description":"Champ accepté en écriture, sans équivalent en lecture."}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Vos clients particuliers, professionnels et points de vente. La catégorie détermine les champs attendus : coordonnées de facturation et numéro de TVA pour un professionnel, identité seule pour un point de vente.","additionalProperties":true}}}}
```

## The DateEnrollment object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"DateEnrollment":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"date":{"type":"integer","format":"int64","description":"Identifiant d'un élément `LearningDate`."},"firstName":{"type":"string","nullable":true,"description":"Prénom, lu sur le compte de la personne quand elle s'est inscrite avec un compte"},"lastName":{"type":"string","description":"Nom, lu sur le compte de la personne quand elle s'est inscrite avec un compte"},"email":{"type":"string","format":"email","description":"Adresse e-mail, lue sur le compte de la personne quand elle s'est inscrite avec un compte"},"structureName":{"type":"string","nullable":true,"description":"La structure au nom de laquelle la personne s'est inscrite, ou celle qu'elle a saisie sans compte. Vide pour une inscription à titre personnel"},"trainee":{"type":"string","enum":["farmer","solidarity","employee","project"],"description":"Statut. Valeurs : `farmer` (Chef d'exploitation), `solidarity` (Cotisant solidaire), `employee` (Salarié), `project` (Porteur de projet)."},"status":{"type":"string","enum":["requested","confirmed","waiting","canceled"],"description":"État. Valeurs : `requested` (À confirmer), `confirmed` (Confirmée), `waiting` (En attente), `canceled` (Annulée)."},"requestedAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS."},"confirmedAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS.","nullable":true},"canceledAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS.","nullable":true},"canceledBy":{"type":"string","enum":["user","community","date"],"nullable":true},"attendedAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS.","nullable":true},"attendedMinutes":{"type":"integer","nullable":true,"description":"Durée de présence en minutes, quand elle diffère de celle de la date, et vide quand elle lui est égale"}},"title":"Inscriptions aux dates","description":"Les inscriptions aux dates de votre réseau, en lecture seule, avec les champs de l'export que le réseau télécharge à l'écran. Une inscription faite avec un compte rend l'identité de ce compte, une inscription faite sans compte l'identité saisie."}}}}
```

## The Declaration object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Declaration":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"financialYear":{"type":"integer","format":"int64","description":"Identifiant d'un élément `FinancialYear`."},"from":{"type":"string","format":"date"},"to":{"type":"string","format":"date"},"limit":{"type":"string","format":"date"},"cerfa":{"type":"string","enum":["ca3","ca12","ca12a"],"description":"Cerfa. Valeurs : `ca12` (CA12), `ca12a` (CA12A), `ca3` (CA3)."},"cerfaYear":{"type":"integer","nullable":true},"status":{"type":"string","enum":["draft","declared","accounted","paid"],"description":"Status. Valeurs : `declared` (Déclarée), `draft` (Créée), `accounted` (Comptabilisée), `paid` (Payée)."},"associates":{"type":"integer","nullable":true},"expertMode":{"type":"boolean"},"data":{"type":"object","description":"Cases du formulaire, indexées par leur identifiant. Les montants sont transmis en chaîne, et quelques cases portent une structure plutôt qu'une valeur."},"declaredAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Marquée \"déclarée\" le. Date et heure, au format AAAA-MM-JJ HH:MM:SS.","nullable":true},"accountedAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS.","nullable":true},"accountedWithOperations":{"type":"boolean","nullable":true},"paidAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS.","nullable":true}},"title":"Déclarations de TVA","description":"Les déclarations de TVA de votre structure, avec leur période, le formulaire retenu et son millésime, et les dates auxquelles elles ont été déclarées, comptabilisées et payées. En lecture seule."}}}}
```

## The Department object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Department":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"maxLength":50,"description":"Nom du rayon."},"icon":{"type":"string","minLength":1,"maxLength":50,"nullable":true,"description":"Icône du rayon."},"shop":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Shop`."},"catalogs":{"type":"array","items":{},"nullable":true},"position":{"type":"integer"}},"title":"Rayons","description":"Les rayons d'une boutique collective, qui regroupent les catalogues de plusieurs producteurs sous un même intitulé. Réservés à qui tient la boutique."}}}}
```

## The DepartmentWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"DepartmentWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":50,"description":"Nom du rayon."},"icon":{"type":"string","minLength":1,"maxLength":50,"nullable":true,"description":"Icône du rayon."}},"required":["name","icon"]}}}}
```

## The Depreciation object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Depreciation":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"financialYear":{"type":"integer","format":"int64","description":"Identifiant d'un élément `FinancialYear`."},"date":{"type":"string","format":"date","description":"Date."},"type":{"type":"string","enum":["normal","exceptional"],"description":"Nature. Valeurs : `normal` (Normale), `exceptional` (Exceptionnelle)."},"way":{"type":"string","enum":["dotation","recovery"],"description":"Sens. Valeurs : `dotation` (Dépréciation), `recovery` (Reprise)."},"amount":{"type":"number","description":"Montant."},"reason":{"type":"string","minLength":1,"maxLength":255,"nullable":true,"description":"Motif."},"recoverDate":{"type":"string","format":"date","nullable":true,"description":"Date de reprise."}},"title":"Dépréciations","description":"Les dépréciations constatées sur une immobilisation, et leur date de reprise le cas échéant. Embarquées dans le champ depreciations d'une immobilisation."}}}}
```

## The Equipment object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Equipment":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"tool":{"type":"integer","format":"int64","description":"Matériel. Identifiant d'un élément `Tool`."},"meter":{"type":"string","enum":["hours","kilometers"],"nullable":true,"description":"Compteur. Valeurs : `hours` (Heures), `kilometers` (Kilomètres)."},"registration":{"type":"string","minLength":1,"maxLength":20,"nullable":true,"description":"Immatriculation."},"status":{"type":"string","enum":["active","inactive"]}},"title":"Matériels suivis","description":"Les matériels que suit le carnet d'entretien, avec un compteur d'heures, de kilomètres, ou sans compteur. Suivre un matériel demande qu'il existe déjà dans la ressource tool, et il ne se suit qu'une fois. Il n'y a pas de suppression. Ne plus suivre un matériel le passe au statut inactive et lui garde ses relevés et son historique. Une modification nomme ce qu'elle change dans properties. Un corps sans properties est lu comme une modification complète, qui attend toutes les propriétés, status compris, et la seule valeur que status accepte est inactive. Un matériel inactif refuse ensuite toute modification, comme ses relevés, avec un code 412. POST equipment sur le même matériel le reprend avec son identifiant au lieu d'en créer un second, et répond alors 200 au lieu de 201. Un matériel qui porte des valeurs de compteur ne change plus d'unité. L'immatriculation est facultative, tient en 20 caractères et se relit en capitales."}}}}
```

## The EquipmentReading object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"EquipmentReading":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"equipment":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Equipment`."},"date":{"type":"string","format":"date","description":"Date."},"value":{"type":"integer","description":"Compteur."},"meter":{"type":"string","enum":["hours","kilometers"]}},"title":"Relevés de compteur","description":"Ce que le compteur d'un matériel suivi affiche un jour donné, dans l'unité du matériel. Il n'y a qu'un relevé par matériel et par jour : créer un relevé remplace celui du jour, et répond 200 avec le relevé du jour. Le premier relevé d'un matériel fait repartir de sa valeur les entretiens réguliers au compteur dont plannedValue lui est inférieur ou égal, qui deviennent dus à cette valeur augmentée de everyValue, pour qu'ils ne soient pas en retard dès la première saisie. Les relevés suivants ne changent aucune échéance. Un compteur ne recule pas. Un relevé inférieur à un relevé plus ancien, ou supérieur à un relevé plus récent, est refusé. Pour corriger une erreur, le même appel renvoyé avec \"confirmed\": true dans le corps est accepté. Une modification ne change que la valeur. Les relevés d'un matériel inactif ne se créent, ne se modifient et ne se suppriment plus, ce que dit un code 412."}}}}
```

## The EquipmentReadingUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"EquipmentReadingUpdate":{"type":"object","properties":{"value":{"type":"integer","description":"Compteur."},"confirmed":{"type":"boolean","writeOnly":true,"description":"À true, accepte un relevé inférieur à un relevé plus ancien ou supérieur à un relevé plus récent, pour corriger une erreur. Ne se relit pas."}},"required":["value"]}}}}
```

## The EquipmentReadingWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"EquipmentReadingWrite":{"type":"object","properties":{"equipment":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Equipment`."},"date":{"type":"string","format":"date","description":"Date."},"value":{"type":"integer","description":"Compteur."},"confirmed":{"type":"boolean","writeOnly":true,"description":"À true, accepte un relevé inférieur à un relevé plus ancien ou supérieur à un relevé plus récent, pour corriger une erreur. Ne se relit pas."}},"required":["equipment","date","value"]}}}}
```

## The EquipmentUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"EquipmentUpdate":{"type":"object","properties":{"meter":{"type":"string","enum":["hours","kilometers"],"nullable":true,"description":"Compteur. Valeurs : `hours` (Heures), `kilometers` (Kilomètres)."},"registration":{"type":"string","minLength":1,"maxLength":20,"nullable":true,"description":"Immatriculation."},"status":{"type":"string","enum":["active","inactive"]}},"required":["meter","registration","status"]}}}}
```

## The EquipmentWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"EquipmentWrite":{"type":"object","properties":{"tool":{"type":"integer","format":"int64","description":"Matériel. Identifiant d'un élément `Tool`."},"meter":{"type":"string","enum":["hours","kilometers"],"nullable":true,"description":"Compteur. Valeurs : `hours` (Heures), `kilometers` (Kilomètres)."},"registration":{"type":"string","minLength":1,"maxLength":20,"nullable":true,"description":"Immatriculation."}},"required":["tool","meter","registration"]}}}}
```

## The Error object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Error":{"type":"object","properties":{"type":{"type":"string","enum":["authentication_error","resource_error","api_error"]},"code":{"type":"string"},"message":{"type":"string"}}}}}}
```

## The Event object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Event":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"statusCode":{"type":"string","description":"Statut."},"statusText":{"type":"string"},"reason":{"type":"string","nullable":true,"description":"Raison."},"amounts":{"type":"array","description":"Montants rapportés par l'événement, un par code de montant et par bloc transmis, jamais additionnés, car un même événement peut porter un montant approuvé et un montant non approuvé","items":{"type":"object","properties":{"typeCode":{"type":"string","description":"Code AFNOR du montant"},"amount":{"type":"number"}}}},"notes":{"type":"array","description":"Notes jointes à l'événement, une par message, dans le texte écrit par la plateforme ou par la partie à la facture, non traduit et non échappé","items":{"type":"string"}},"requestedAction":{"type":"string","nullable":true,"description":"Code AFNOR de l'action demandée à l'émetteur avec le motif, ou null si aucune action n'est demandée"},"attachmentFilename":{"type":"string","nullable":true},"createdAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS."}},"title":"Événements de facture","description":"L'historique des statuts qu'une facture a traversés sur la plateforme, du dépôt à l'encaissement, avec le motif éventuel. Embarqué dans le champ events d'une facture."}}}}
```

## The Family object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Family":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"description":"Nom."},"fqn":{"type":"string","description":"Nom qualifié."},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","description":"Couleur. Couleur hexadécimale."}},"title":"Familles botaniques","description":"Le référentiel des familles botaniques, commun à toutes les structures et consultable uniquement. Les ids servent à renseigner la famille d'une espèce."}}}}
```

## The Faq object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Faq":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"community":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Structure`."},"question":{"type":"string","minLength":1,"maxLength":250,"description":"Question."},"answer":{"type":"string","description":"Réponse."},"symptoms":{"type":"string","nullable":true,"description":"Vous constatez peut-être."},"steps":{"type":"string","nullable":true,"description":"Comment faire."},"notes":{"type":"string","nullable":true,"description":"À savoir."},"demoPage":{"type":"string","minLength":1,"maxLength":250,"nullable":true,"description":"Page de la démo où corriger."},"demoPath":{"type":"string","minLength":1,"maxLength":100,"nullable":true,"description":"Emplacement de cette page dans le menu."},"keywords":{"type":"string","minLength":1,"maxLength":250,"nullable":true,"description":"Mots-clés de la recherche."},"screen":{"type":"string","enum":["series","soil","sequence","planning","export","seedling","forecast"],"nullable":true,"description":"Écran. Valeurs : `series` (Plan de culture), `soil` (Plan d'assolement), `sequence` (Itinéraires techniques), `planning` (Planning), `export` (Exports), `seedling` (Semences et plants), `forecast` (Prévisionnel financier)."},"verdict":{"type":"string","enum":["possible","partial","intended","impossible"],"description":"Ce que permet le logiciel. Valeurs : `possible` (Possible), `partial` (Possible en partie ou contournement), `intended` (C'est voulu), `impossible` (Pas possible aujourd'hui)."},"status":{"type":"string","enum":["draft","published"],"description":"Publication. Valeurs : `draft` (Brouillon), `published` (Publiée)."},"chapter":{"type":"integer","format":"int64","description":"Module lié. Identifiant d'un élément `Chapter`.","nullable":true},"discordUrl":{"type":"string","format":"uri","nullable":true,"description":"Discussion sur le Discord."}},"title":"FAQ","description":"Les questions de la FAQ de votre groupe, avec leur réponse, l'écran qu'elles concernent quand elles en visent un, et un verdict qui dit si ce qui est demandé est possible, possible en partie, voulu ou pas possible aujourd'hui. Une question reste en brouillon tant qu'elle n'est pas publiée. Le module auquel une question peut renvoyer est toujours un module d'une formation de votre groupe."}}}}
```

## The FaqWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"FaqWrite":{"type":"object","properties":{"question":{"type":"string","minLength":1,"maxLength":250,"description":"Question."},"answer":{"type":"string","description":"Réponse."},"symptoms":{"type":"string","nullable":true,"description":"Vous constatez peut-être."},"steps":{"type":"string","nullable":true,"description":"Comment faire."},"notes":{"type":"string","nullable":true,"description":"À savoir."},"demoPage":{"type":"string","minLength":1,"maxLength":250,"nullable":true,"description":"Page de la démo où corriger."},"demoPath":{"type":"string","minLength":1,"maxLength":100,"nullable":true,"description":"Emplacement de cette page dans le menu."},"keywords":{"type":"string","minLength":1,"maxLength":250,"nullable":true,"description":"Mots-clés de la recherche."},"screen":{"type":"string","enum":["series","soil","sequence","planning","export","seedling","forecast"],"nullable":true,"description":"Écran. Valeurs : `series` (Plan de culture), `soil` (Plan d'assolement), `sequence` (Itinéraires techniques), `planning` (Planning), `export` (Exports), `seedling` (Semences et plants), `forecast` (Prévisionnel financier)."},"verdict":{"type":"string","enum":["possible","partial","intended","impossible"],"description":"Ce que permet le logiciel. Valeurs : `possible` (Possible), `partial` (Possible en partie ou contournement), `intended` (C'est voulu), `impossible` (Pas possible aujourd'hui)."},"status":{"type":"string","enum":["draft","published"],"description":"Publication. Valeurs : `draft` (Brouillon), `published` (Publiée)."},"chapter":{"type":"integer","format":"int64","description":"Module lié. Identifiant d'un élément `Chapter`.","nullable":true},"discordUrl":{"type":"string","format":"uri","nullable":true,"description":"Discussion sur le Discord."}},"required":["question","answer","symptoms","steps","notes","demoPage","demoPath","keywords","screen","verdict","status","chapter","discordUrl"]}}}}
```

## The FinancialYear object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"FinancialYear":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"startDate":{"type":"string","format":"date","description":"Date de début."},"endDate":{"type":"string","format":"date","description":"Date de fin."},"status":{"type":"string","enum":["open","close"],"description":"Valeurs : `open` (Ouvert), `close` (Clôturé)."},"plan":{"type":"string","enum":["agricultural","general","association"],"description":"Plan comptable. Valeurs : `agricultural` (Plan comptable agricole), `general` (Plan comptable général), `association` (Plan comptable des associations)."},"taxSystem":{"type":"string","enum":["micro-ba","micro-entreprise","ba-reel-simplifie","ba-reel-normal"],"description":"Régime fiscal. Valeurs : `micro-ba` (Micro-BA), `micro-entreprise` (Micro-entreprise), `ba-reel-simplifie` (Réel simplifié), `ba-reel-normal` (Réel normal)."},"incomeTax":{"type":"string","enum":["ir","is"],"nullable":true,"description":"Impôt sur les bénéfices."},"legalCategory":{"type":"integer","description":"Forme juridique."},"gaecFormat":{"type":"string","enum":["total","partial"],"nullable":true,"description":"Type de GAEC. Valeurs : `partial` (GAEC partiel), `total` (GAEC total)."},"associates":{"type":"integer","nullable":true,"description":"Nombre d'associé·e·s exploitant·e·s."},"accountingType":{"type":"string","enum":["cash","accrual"],"description":"Type de comptabilité. Valeurs : `cash` (Comptabilité de trésorerieGénéralement lorsque votre structure est imposée au régime du micro-BA, micro-entreprise ou au réel simplifié), `accrual` (Comptabilité à l'engagementFonctionnalité en bêtaObligatoire lorsque votre structure est imposée au régime réel normal, possible dans les autres régimes.)."},"accountingMode":{"type":"string","enum":["accounting","cash-receipts"],"description":"Comment tenez-vous votre comptabilité ?. Valeurs : `accounting` (Je tiens une comptabilité selon le plan comptableJ'enregistre mes écritures comptablesJe gère mes immobilisations), `cash-receipts` (Je tiens uniquement un livre des recettes et un registre des achatsJ'enregistre uniquement les rentrées d'argent et les achats)."},"openDate":{"type":"string","format":"date","nullable":true},"closeDate":{"type":"string","format":"date","nullable":true},"hasOpeningBalance":{"type":"boolean","nullable":true},"allocationDate":{"type":"string","format":"date","nullable":true},"documents":{"type":"object","description":"Adresses des états financiers générés, indexées par type de document. Chacune se lit avec la même clé que les autres appels.","additionalProperties":{"type":"string","format":"uri"}}},"title":"Exercices comptables","description":"Les exercices comptables de votre structure."}}}}
```

## The FinancialYearUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"FinancialYearUpdate":{"type":"object","properties":{"incomeTax":{"type":"string","enum":["ir","is"],"nullable":true,"description":"Impôt sur les bénéfices."},"gaecFormat":{"type":"string","enum":["total","partial"],"nullable":true,"description":"Type de GAEC. Valeurs : `partial` (GAEC partiel), `total` (GAEC total)."},"associates":{"type":"integer","nullable":true,"description":"Nombre d'associé·e·s exploitant·e·s."}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Les exercices comptables de votre structure.","additionalProperties":true}}}}
```

## The FinancialYearWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"FinancialYearWrite":{"type":"object","properties":{"startDate":{"type":"string","format":"date","description":"Date de début."},"endDate":{"type":"string","format":"date","description":"Date de fin."},"plan":{"type":"string","enum":["agricultural","general","association"],"description":"Plan comptable. Valeurs : `agricultural` (Plan comptable agricole), `general` (Plan comptable général), `association` (Plan comptable des associations)."},"taxSystem":{"type":"string","enum":["micro-ba","micro-entreprise","ba-reel-simplifie","ba-reel-normal"],"description":"Régime fiscal. Valeurs : `micro-ba` (Micro-BA), `micro-entreprise` (Micro-entreprise), `ba-reel-simplifie` (Réel simplifié), `ba-reel-normal` (Réel normal)."},"incomeTax":{"type":"string","enum":["ir","is"],"nullable":true,"description":"Impôt sur les bénéfices."},"legalCategory":{"type":"integer","description":"Forme juridique."},"gaecFormat":{"type":"string","enum":["total","partial"],"nullable":true,"description":"Type de GAEC. Valeurs : `partial` (GAEC partiel), `total` (GAEC total)."},"associates":{"type":"integer","nullable":true,"description":"Nombre d'associé·e·s exploitant·e·s."},"accountingType":{"type":"string","enum":["cash","accrual"],"description":"Type de comptabilité. Valeurs : `cash` (Comptabilité de trésorerieGénéralement lorsque votre structure est imposée au régime du micro-BA, micro-entreprise ou au réel simplifié), `accrual` (Comptabilité à l'engagementFonctionnalité en bêtaObligatoire lorsque votre structure est imposée au régime réel normal, possible dans les autres régimes.)."},"accountingMode":{"type":"string","enum":["accounting","cash-receipts"],"description":"Comment tenez-vous votre comptabilité ?. Valeurs : `accounting` (Je tiens une comptabilité selon le plan comptableJ'enregistre mes écritures comptablesJe gère mes immobilisations), `cash-receipts` (Je tiens uniquement un livre des recettes et un registre des achatsJ'enregistre uniquement les rentrées d'argent et les achats)."}},"required":["startDate","endDate","plan","taxSystem","incomeTax","legalCategory","gaecFormat","associates","accountingType","accountingMode"]}}}}
```

## The Flow object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Flow":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"sequence":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Sequence`."},"crop":{"type":"integer","format":"int64","description":"Production. Identifiant d'un élément `Crop`.","nullable":true},"plant":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Plant`.","nullable":true},"action":{"type":"integer","format":"int64","description":"Intervention. Identifiant d'un élément `Action`."},"methods":{"type":"array","items":{},"description":"Méthodes de travail."},"tools":{"type":"array","items":{},"description":"Matériel nécessaire."},"products":{"type":"array","items":{},"description":"Produits."},"description":{"type":"string","minLength":1,"nullable":true,"description":"Observation sur l'intervention."},"fertilizer":{"type":"object","nullable":true,"description":"Apports."},"weekOnly":{"type":"integer","nullable":true,"description":"Semaine de l'intervention."},"weekStart":{"type":"integer","nullable":true,"description":"Début de l'intervention."},"weekStop":{"type":"integer","nullable":true,"description":"Fin de l'intervention."},"yearOnly":{"type":"integer","nullable":true},"yearStart":{"type":"integer","nullable":true},"yearStop":{"type":"integer","nullable":true},"seasonOnly":{"type":"integer","nullable":true,"description":"Quelle saison pour cette intervention ?."},"seasonStart":{"type":"integer","nullable":true,"description":"Première saison de l'intervention."},"seasonStop":{"type":"integer","nullable":true,"description":"Dernière saison de l'intervention."},"frequency":{"type":"string","enum":["w1","w2","w3","w4","m1"],"nullable":true,"description":"Fréquence de l'intervention. Valeurs : `w1` (Chaque semaine), `w2` (Toutes les 2 semaines), `w3` (Toutes les 3 semaines), `w4` (Toutes les 4 semaines), `m1` (1 fois par mois)."}},"title":"Interventions d'un itinéraire","description":"Une intervention modèle, datée en semaines relatives plutôt qu'en dates : c'est ce que le plan de culture déroule en interventions le jour où une série naît de l'itinéraire. Elle porte sur une espèce, ou sur tout l'itinéraire."}}}}
```

## The FlowWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"FlowWrite":{"type":"object","properties":{"crop":{"type":"integer","format":"int64","description":"Production. Identifiant d'un élément `Crop`.","nullable":true},"action":{"type":"integer","format":"int64","description":"Intervention. Identifiant d'un élément `Action`."},"methods":{"type":"array","items":{},"description":"Méthodes de travail."},"tools":{"type":"array","items":{},"description":"Matériel nécessaire."},"products":{"type":"array","items":{},"description":"Produits."},"description":{"type":"string","minLength":1,"nullable":true,"description":"Observation sur l'intervention."},"fertilizer":{"type":"object","nullable":true,"description":"Apports."},"weekOnly":{"type":"integer","nullable":true,"description":"Semaine de l'intervention."},"weekStart":{"type":"integer","nullable":true,"description":"Début de l'intervention."},"weekStop":{"type":"integer","nullable":true,"description":"Fin de l'intervention."},"yearOnly":{"type":"integer","nullable":true},"yearStart":{"type":"integer","nullable":true},"yearStop":{"type":"integer","nullable":true},"seasonOnly":{"type":"integer","nullable":true,"description":"Quelle saison pour cette intervention ?."},"seasonStart":{"type":"integer","nullable":true,"description":"Première saison de l'intervention."},"seasonStop":{"type":"integer","nullable":true,"description":"Dernière saison de l'intervention."},"frequency":{"type":"string","enum":["w1","w2","w3","w4","m1"],"nullable":true,"description":"Fréquence de l'intervention. Valeurs : `w1` (Chaque semaine), `w2` (Toutes les 2 semaines), `w3` (Toutes les 3 semaines), `w4` (Toutes les 4 semaines), `m1` (1 fois par mois)."}},"required":["crop","action","methods","tools","products","description","fertilizer","weekOnly","weekStart","weekStop","yearOnly","yearStart","yearStop","seasonOnly","seasonStart","seasonStop","frequency"]}}}}
```

## The Forecast object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Forecast":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"season":{"type":"integer"},"plant":{"type":"integer","format":"int64","description":"Espèce. Identifiant d'un élément `Plant`."},"unit":{"type":"string","enum":["kg","unit","bunch"],"description":"Unité de vente. Valeurs : `unit` (À la pièce), `bunch` (À la botte), `kg` (Au kg)."},"quantity":{"type":"integer","nullable":true,"description":"Objectif de volume."},"proPart":{"type":"integer"},"proPrice":{"type":"number","nullable":true,"description":"Prix moyen pour les professionnels."},"privatePart":{"type":"integer"},"privatePrice":{"type":"number","nullable":true,"description":"Prix moyen pour les particuliers."}},"title":"Prévisionnels de récolte","description":"Les prévisionnels de récolte par espèce et par saison (quantité attendue, répartition professionnel / autoconsommation)."}}}}
```

## The ForecastUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ForecastUpdate":{"type":"object","properties":{"quantity":{"type":"integer","nullable":true,"description":"Objectif de volume."},"proPart":{"type":"integer"},"proPrice":{"type":"number","nullable":true,"description":"Prix moyen pour les professionnels."},"privatePart":{"type":"integer"},"privatePrice":{"type":"number","nullable":true,"description":"Prix moyen pour les particuliers."}},"required":["quantity","proPart","proPrice","privatePart","privatePrice"]}}}}
```

## The ForecastWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ForecastWrite":{"type":"object","properties":{"season":{"type":"integer"},"plant":{"type":"integer","format":"int64","description":"Espèce. Identifiant d'un élément `Plant`."},"unit":{"type":"string","enum":["kg","unit","bunch"],"description":"Unité de vente. Valeurs : `unit` (À la pièce), `bunch` (À la botte), `kg` (Au kg)."},"quantity":{"type":"integer","nullable":true,"description":"Objectif de volume."},"proPart":{"type":"integer"},"proPrice":{"type":"number","nullable":true,"description":"Prix moyen pour les professionnels."},"privatePart":{"type":"integer"},"privatePrice":{"type":"number","nullable":true,"description":"Prix moyen pour les particuliers."}},"required":["season","plant","unit","quantity","proPart","proPrice","privatePart","privatePrice"]}}}}
```

## The Gauge object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Gauge":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"zone":{"type":"integer","format":"int64","nullable":true,"description":"Référence de la zone du parcellaire où la pluie est relevée, ou null pour le pluviomètre de la ferme entière."},"status":{"type":"string","enum":["active","inactive"]}},"title":"Pluviomètres","description":"Les emplacements où la pluie est relevée : une zone du parcellaire, ou la ferme entière quand la pluie n'est pas relevée zone par zone. Un lieu ne reçoit qu'un pluviomètre actif à la fois. Retirer un pluviomètre le passe inactif et lui garde ses relevés, ce qui se fait en modifiant son statut : il n'y a pas de suppression."}}}}
```

## The GaugeUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"GaugeUpdate":{"type":"object","properties":{"zone":{"type":"integer","format":"int64","nullable":true,"description":"Référence de la zone du parcellaire où la pluie est relevée, ou null pour le pluviomètre de la ferme entière."},"status":{"type":"string","enum":["active","inactive"]}},"required":["zone","status"]}}}}
```

## The GaugeWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"GaugeWrite":{"type":"object","properties":{"zone":{"type":"integer","format":"int64","nullable":true,"description":"Référence de la zone du parcellaire où la pluie est relevée, ou null pour le pluviomètre de la ferme entière."}},"required":["zone"]}}}}
```

## The Grid object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Grid":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"customer":{"type":"integer","format":"int64","description":"Client. Identifiant d'un élément `Customer`.","nullable":true},"group":{"type":"integer","format":"int64","description":"Clients. Identifiant d'un élément `CustomerGroup`.","nullable":true},"product":{"type":"integer","format":"int64","description":"Produit. Identifiant d'un élément `Product`."},"price":{"type":"number","description":"Prix."},"priceInitial":{"type":"number","nullable":true}},"title":"Prix personnalisés","description":"Les prix que vous appliquez à un client ou à un groupe de clients sur un produit, en remplacement du prix du catalogue. Le prix de base ne sert qu'à afficher un prix barré."}}}}
```

## The GridUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"GridUpdate":{"type":"object","properties":{"price":{"type":"number","description":"Prix."},"priceInitial":{"type":"number","nullable":true}},"required":["price","priceInitial"]}}}}
```

## The GridWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"GridWrite":{"type":"object","properties":{"customer":{"type":"integer","format":"int64","description":"Client. Identifiant d'un élément `Customer`.","nullable":true},"group":{"type":"integer","format":"int64","description":"Clients. Identifiant d'un élément `CustomerGroup`.","nullable":true},"product":{"type":"integer","format":"int64","description":"Produit. Identifiant d'un élément `Product`."},"price":{"type":"number","description":"Prix."},"priceInitial":{"type":"number","nullable":true}},"required":["customer","group","product","price","priceInitial"]}}}}
```

## The Harvest object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Harvest":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"task":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Task`."},"series":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Series`.","nullable":true},"cultivation":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Cultivation`.","nullable":true},"quantity":{"type":"number"},"unit":{"type":"string","enum":["kg","unit","bunch"]},"date":{"type":"string","format":"date"},"week":{"type":"string","pattern":"^[0-9]{4}-W[0-9]{2}$","description":"Semaine ISO 8601."}},"title":"Récoltes","description":"Ce qui a été récolté, jour par jour : une ligne par intervention de récolte et par date, avec sa quantité et son unité. Les récoltes se saisissent sur l'intervention, qui met à jour les cumuls de la mise en culture : elles sont ici en lecture seule. La période est obligatoire."}}}}
```

## The History object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"History":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"event":{"type":"string","description":"Nom de l'événement, sous sa forme lisible"},"comment":{"type":"string","nullable":true},"date":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS."}},"title":"Événements de vente","description":"Les changements d'état d'une vente ou d'une facture, de sa création à son règlement. Chaque événement sort sous un identifiant stable (sale-created, sale-delivered) et non sous son libellé, qui est traduit. Embarqués dans le champ events d'une vente ou d'une facture."}}}}
```

## The Invite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Invite":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"email":{"type":"string","format":"email","nullable":true},"memberRole":{"type":"integer","format":"int64","description":"Rôle attribué au membre lorsque l'invitation est acceptée. Identifiant d'un élément `Role`.","nullable":true},"limit":{"type":"integer","nullable":true,"description":"Limite d'utilisations de l'invitation."},"used":{"type":"integer"},"lastUsedAt":{"type":"string","format":"date","nullable":true},"expiresAt":{"type":"string","format":"date","nullable":true,"description":"Date d'expiration de l'invitation."},"status":{"type":"string","enum":["pending","invalid"]},"link":{"type":"string","format":"uri","description":"Lien à transmettre pour utiliser l'invitation sans e-mail"}},"title":"Invitations","description":"Les invitations à rejoindre l'équipe de votre structure : rôle attribué à l'arrivée, adresse e-mail destinataire, date d'expiration et nombre d'utilisations. Créer une invitation avec une adresse e-mail l'envoie immédiatement."}}}}
```

## The InviteWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"InviteWrite":{"type":"object","properties":{"email":{"type":"string","format":"email","nullable":true},"memberRole":{"type":"integer","format":"int64","description":"Rôle attribué au membre lorsque l'invitation est acceptée. Identifiant d'un élément `Role`.","nullable":true},"limit":{"type":"integer","nullable":true,"description":"Limite d'utilisations de l'invitation."},"expiresAt":{"type":"string","format":"date","nullable":true,"description":"Date d'expiration de l'invitation."}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. Les invitations à rejoindre l'équipe de votre structure : rôle attribué à l'arrivée, adresse e-mail destinataire, date d'expiration et nombre d'utilisations. Créer une invitation avec une adresse e-mail l'envoie immédiatement."}}}}
```

## The Invoice object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Invoice":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"number":{"type":"string","nullable":true},"document":{"type":"integer","nullable":true},"customer":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Customer`."},"profile":{"type":"string","enum":["final","deposit"]},"status":{"type":"string","enum":["draft","confirmed","generated","canceled"],"description":"État. Valeurs : `draft` (Brouillon), `confirmed` (Confirmé), `generated` (Validé), `canceled` (Annulé)."},"generation":{"type":"string","enum":["waiting","now","processing","fail","success"],"nullable":true},"date":{"type":"string","format":"date","description":"Date de facturation."},"dueDate":{"type":"string","format":"date","nullable":true,"description":"Date d'échéance."},"paymentCondition":{"type":"string","minLength":1,"maxLength":2048,"nullable":true,"description":"Conditions de paiement."},"header":{"type":"string","minLength":1,"maxLength":2048,"nullable":true,"description":"Texte personnalisé affiché en haut de facture."},"footer":{"type":"string","minLength":1,"maxLength":2048,"nullable":true,"description":"Texte personnalisé affiché en bas de facture."},"taxes":{"type":"string","enum":["including","excluding"]},"hasVat":{"type":"boolean"},"vat":{"type":"number"},"vatByRate":{"type":"array","description":"Ventilation par taux de TVA","items":{"type":"object","properties":{"vatRate":{"type":"number"},"amount":{"type":"number"},"amountExcludingVat":{"type":"number"},"amountIncludingVat":{"type":"number"},"vat":{"type":"number"}}}},"priceExcludingVat":{"type":"number"},"priceIncludingVat":{"type":"number"},"netPriceIncludingVat":{"type":"number"},"mentionAutoliquidation":{"type":"boolean"},"mentionArticle293":{"type":"boolean"},"mentionArticle262":{"type":"boolean"},"mentionArticle259":{"type":"boolean"},"mentionCashChargeability":{"type":"boolean"},"nature":{"type":"string","enum":["good","service","mixed"],"nullable":true},"organic":{"type":"boolean"},"conversion":{"type":"boolean"},"paymentStatus":{"type":"string","enum":["paid","partial-paid","overpaid","not-paid","never-paid","failed"],"nullable":true,"description":"État du paiement. Valeurs : `paid` (Payé), `not-paid` (Non payé), `partial-paid` (Payé partiellement), `overpaid` (Trop perçu), `failed` (Paiement en échec), `never-paid` (Ne sera pas payé)."},"paymentAmount":{"type":"number","nullable":true},"paymentDepositAmount":{"type":"number","nullable":true},"paidAt":{"type":"string","format":"date","nullable":true,"description":"Date de paiement."},"emailedAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS.","nullable":true},"remindedAt":{"type":"string","format":"date","nullable":true},"secondRemindedAt":{"type":"string","format":"date","nullable":true},"closed":{"type":"boolean"},"comment":{"type":"string","nullable":true,"description":"Commentaire interne."},"sales":{"type":"array","items":{}},"deposits":{"type":"array","items":{}},"depositOf":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Invoice`.","nullable":true},"depositSale":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Sale`.","nullable":true},"depositPayment":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Payment`.","nullable":true},"events":{"type":"array","description":"Historique des changements d'état","items":{"$ref":"#/components/schemas/History"}},"payments":{"type":"array","description":"Règlements enregistrés","items":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"method":{"type":"integer","format":"int64","nullable":true,"description":"Référence du mode de règlement"},"methodName":{"type":"string"},"amountIncludingVat":{"type":"number"},"status":{"type":"string","enum":["not-paid","paid","failed"]},"paidAt":{"type":"string","format":"date","nullable":true}}}}},"title":"Factures","description":"Vos factures. Une facture de solde regroupe des ventes livrées d'un même client ; une facture d'acompte s'adosse à un règlement encaissé d'avance. Elle ne se modifie pas une fois émise : elle se confirme, s'envoie, se relance, et se régénère si besoin."},"History":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"event":{"type":"string","description":"Nom de l'événement, sous sa forme lisible"},"comment":{"type":"string","nullable":true},"date":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS."}},"title":"Événements de vente","description":"Les changements d'état d'une vente ou d'une facture, de sa création à son règlement. Chaque événement sort sous un identifiant stable (sale-created, sale-delivered) et non sous son libellé, qui est traduit. Embarqués dans le champ events d'une vente ou d'une facture."}}}}
```

## The InvoiceUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"InvoiceUpdate":{"type":"object","properties":{"comment":{"type":"string","nullable":true,"description":"Commentaire interne."}},"required":["comment"]}}}}
```

## The InvoiceWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"InvoiceWrite":{"type":"object","properties":{"status":{"type":"string","enum":["draft","confirmed","generated","canceled"],"description":"État. Valeurs : `draft` (Brouillon), `confirmed` (Confirmé), `generated` (Validé), `canceled` (Annulé)."},"date":{"type":"string","format":"date","description":"Date de facturation."},"dueDate":{"type":"string","format":"date","nullable":true,"description":"Date d'échéance."},"paymentCondition":{"type":"string","minLength":1,"maxLength":2048,"nullable":true,"description":"Conditions de paiement."},"header":{"type":"string","minLength":1,"maxLength":2048,"nullable":true,"description":"Texte personnalisé affiché en haut de facture."},"footer":{"type":"string","minLength":1,"maxLength":2048,"nullable":true,"description":"Texte personnalisé affiché en bas de facture."},"sales":{"type":"array","items":{}}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. Vos factures. Une facture de solde regroupe des ventes livrées d'un même client ; une facture d'acompte s'adosse à un règlement encaissé d'avance. Elle ne se modifie pas une fois émise : elle se confirme, s'envoie, se relance, et se régénère si besoin."}}}}
```

## The Invoicing object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Invoicing":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"partnerId":{"type":"integer"},"direction":{"type":"string","enum":["in","out"],"nullable":true},"profile":{"type":"string","enum":["final","deposit"]},"type":{"type":"integer","nullable":true},"number":{"type":"string","nullable":true},"date":{"type":"string","format":"date","nullable":true,"description":"Date de facture."},"buyer":{"type":"integer","format":"int64","description":"Identifiant d'un élément `ThirdParty`.","nullable":true},"buyerElectronicAddress":{"type":"string","nullable":true},"buyerReference":{"type":"string","nullable":true},"buyerCountry":{"type":"integer","format":"int64","description":"Identifiant.","nullable":true},"seller":{"type":"integer","format":"int64","description":"Identifiant d'un élément `ThirdParty`.","nullable":true},"sellerElectronicAddress":{"type":"string","nullable":true},"sellerCountry":{"type":"integer","format":"int64","description":"Identifiant.","nullable":true},"hasVat":{"type":"boolean"},"priceExcludingVat":{"type":"number"},"priceIncludingVat":{"type":"number"},"netPriceIncludingVat":{"type":"number"},"vat":{"type":"number"},"vatByRate":{"type":"object","nullable":true},"allowances":{"type":"array","items":{},"nullable":true},"charges":{"type":"array","items":{},"nullable":true},"paymentDueDate":{"type":"string","format":"date","nullable":true,"description":"Date d'échéance."},"paymentStatus":{"type":"string","enum":["paid","partial-paid","overpaid","not-paid","never-paid","failed"],"nullable":true},"paymentAmount":{"type":"number","nullable":true},"paymentDepositAmount":{"type":"number","nullable":true},"paidAt":{"type":"string","format":"date","nullable":true},"amountDueForPayment":{"type":"number","nullable":true},"pdpPaymentStatus":{"type":"string","enum":["paid","partial-paid","overpaid","not-paid","never-paid","failed"],"nullable":true},"pdpPaymentAmount":{"type":"number","nullable":true},"pdpPaidAt":{"type":"string","format":"date","nullable":true},"periodStartDate":{"type":"string","format":"date","nullable":true,"description":"Début de période."},"periodEndDate":{"type":"string","format":"date","nullable":true,"description":"Fin de période."},"purchaseOrderReference":{"type":"string","nullable":true},"depositOf":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Invoicing`.","nullable":true},"depositOfReference":{"type":"string","nullable":true},"deposits":{"type":"array","items":{}},"depositsReference":{"type":"array","items":{}},"notes":{"type":"array","items":{},"nullable":true},"comment":{"type":"string","nullable":true,"description":"Commentaire."},"pdpStatus":{"type":"string","nullable":true,"description":"État."},"pdpStatusAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS.","nullable":true},"status":{"type":"string","enum":["waiting","synchronized","error"],"description":"Statut. Valeurs : `waiting` (En cours d'envoi), `synchronized` (Synchronisée), `error` (En erreur)."},"lines":{"type":"array","description":"Lignes de la facture","items":{"$ref":"#/components/schemas/Line"}},"events":{"type":"array","description":"Événements échangés avec la plateforme","items":{"$ref":"#/components/schemas/Event"}}},"title":"Factures électroniques","description":"Les factures électroniques que votre structure a émises ou reçues via sa plateforme agréée, avec leur état de paiement et leur dernier statut de plateforme. Elles se consultent uniquement : leur cycle de vie appartient à la plateforme. Lire une facture donne aussi son détail ligne à ligne et l'historique de ses statuts."},"Line":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"identifier":{"type":"string"},"subtype":{"type":"string","enum":["detail","group","information"],"nullable":true},"nature":{"type":"string","enum":["good","service"]},"name":{"type":"string"},"description":{"type":"string"},"sellerIdentifier":{"type":"string","nullable":true},"buyerIdentifier":{"type":"string","nullable":true},"buyerOrderReference":{"type":"string","nullable":true},"buyerAccountingReference":{"type":"string","nullable":true},"number":{"type":"number","nullable":true},"numberCode":{"type":"string","nullable":true},"unitCodeQuantity":{"type":"string","nullable":true},"packaging":{"type":"number","nullable":true},"initialPriceExcludingVat":{"type":"number","nullable":true},"unitPriceExcludingVat":{"type":"number","nullable":true},"unitPriceDiscount":{"type":"number","nullable":true},"netPriceExcludingVat":{"type":"number","nullable":true},"netPriceIncludingVat":{"type":"number","nullable":true},"allowances":{"type":"array","items":{},"nullable":true},"attributes":{"type":"array","items":{}},"vatRate":{"type":"number","nullable":true},"unitVatRate":{"type":"number","nullable":true},"vatCode":{"type":"string","nullable":true},"vatDueDateCode":{"type":"string","nullable":true},"vatAmount":{"type":"number","nullable":true},"vatExemptionReason":{"type":"string","nullable":true},"accountNumber":{"type":"string","nullable":true}},"title":"Lignes de facture","description":"Le détail d'une facture électronique, au format EN 16931 : désignation, quantité, prix unitaire, TVA et compte comptable. Embarqué dans le champ lines d'une facture."},"Event":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"statusCode":{"type":"string","description":"Statut."},"statusText":{"type":"string"},"reason":{"type":"string","nullable":true,"description":"Raison."},"amounts":{"type":"array","description":"Montants rapportés par l'événement, un par code de montant et par bloc transmis, jamais additionnés, car un même événement peut porter un montant approuvé et un montant non approuvé","items":{"type":"object","properties":{"typeCode":{"type":"string","description":"Code AFNOR du montant"},"amount":{"type":"number"}}}},"notes":{"type":"array","description":"Notes jointes à l'événement, une par message, dans le texte écrit par la plateforme ou par la partie à la facture, non traduit et non échappé","items":{"type":"string"}},"requestedAction":{"type":"string","nullable":true,"description":"Code AFNOR de l'action demandée à l'émetteur avec le motif, ou null si aucune action n'est demandée"},"attachmentFilename":{"type":"string","nullable":true},"createdAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS."}},"title":"Événements de facture","description":"L'historique des statuts qu'une facture a traversés sur la plateforme, du dépôt à l'encaissement, avec le motif éventuel. Embarqué dans le champ events d'une facture."}}}}
```

## The Item object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Item":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"description":"Désignation."},"reference":{"type":"string","minLength":1,"nullable":true},"additional":{"type":"string","nullable":true,"description":"Complément d'information."},"product":{"type":"integer","format":"int64","description":"Produit. Identifiant d'un élément `Product`.","nullable":true},"unit":{"type":"integer","format":"int64","description":"Unité de vente. Identifiant d'un élément `Unit`.","nullable":true},"packaging":{"type":"number","nullable":true,"description":"Colisage."},"number":{"type":"number","nullable":true,"description":"Quantité."},"unitPrice":{"type":"number","description":"Prix unitaire."},"unitPriceInitial":{"type":"number","nullable":true},"price":{"type":"number","nullable":true,"description":"Montant."},"priceInitial":{"type":"number","nullable":true},"vatRate":{"type":"number","nullable":true,"description":"Taux de TVA."},"vatCode":{"type":"string","enum":["s","z","e","ae","k","g","o"],"nullable":true,"description":"Code de TVA. Valeurs : `s` (Standard), `z` (Taux de TVA à 0), `e` (Exempté de TVA), `ae` (Auto liquidation de TVA), `k` (Exonération pour livraison intracommunautaire), `g` (Exempté de TVA pour Export hors UE), `o` (Hors du périmètre d'application de la TVA)."},"nature":{"type":"string","enum":["good","service","silent"],"description":"Nature de la prestation. Valeurs : `good` (Livraison de bien), `service` (Prestation de service)."},"organic":{"type":"string","enum":["no","yes","conversion"],"description":"Valeurs : `no` (Non), `yes` (Oui), `conversion` (En conversion)."},"qualities":{"type":"string"},"origin":{"type":"string","minLength":1,"nullable":true,"description":"Origine."},"status":{"type":"string","enum":["composition","draft","basket","confirmed","selling","prepared","delivered","canceled","expired"]},"structure":{"type":"integer","format":"int64","description":"Référence du producteur, rendue seulement par la liste des articles d'une commande groupée, sur les articles d'une autre structure"},"accountNumber":{"type":"string","nullable":true,"description":"Numéro de compte comptable de l'article, absent des articles d'une autre structure"},"sale":{"type":"integer","format":"int64","description":"Référence de la vente du producteur, rendue seulement par la liste des articles d'une commande groupée, sur les articles d'une autre structure"},"structureName":{"type":"string","description":"Nom du producteur, rendu avec sa référence"},"unitLabels":{"type":"object","nullable":true,"description":"Libellés de l'unité, rendus avec la référence du producteur, ou null pour un article sans unité","properties":{"singular":{"type":"string"},"plural":{"type":"string"},"short":{"type":"string"}}},"composition":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Sale`.","nullable":true},"ingredients":{"type":"array","description":"Lignes qui composent le panier","items":{"$ref":"#/components/schemas/Item"}}},"title":"Articles de vente","description":"Les articles d'une vente. Un article porte un produit de votre catalogue, ou une désignation libre dont vous fixez la nature et le prix. Il garde le prix retenu au moment de la vente."}}}}
```

## The ItemUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ItemUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Désignation."},"additional":{"type":"string","nullable":true,"description":"Complément d'information."},"packaging":{"type":"number","nullable":true,"description":"Colisage."},"number":{"type":"number","nullable":true,"description":"Quantité."},"unitPrice":{"type":"number","description":"Prix unitaire."},"unitPriceInitial":{"type":"number","nullable":true},"price":{"type":"number","nullable":true,"description":"Montant."},"vatRate":{"type":"number","nullable":true,"description":"Taux de TVA."},"vatCode":{"type":"string","enum":["s","z","e","ae","k","g","o"],"nullable":true,"description":"Code de TVA. Valeurs : `s` (Standard), `z` (Taux de TVA à 0), `e` (Exempté de TVA), `ae` (Auto liquidation de TVA), `k` (Exonération pour livraison intracommunautaire), `g` (Exempté de TVA pour Export hors UE), `o` (Hors du périmètre d'application de la TVA)."},"organic":{"type":"string","enum":["no","yes","conversion"],"description":"Valeurs : `no` (Non), `yes` (Oui), `conversion` (En conversion)."},"qualities":{"type":"string"},"origin":{"type":"string","minLength":1,"nullable":true,"description":"Origine."},"locked":{"type":"string","enum":["unit-price","number","price"]}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Les articles d'une vente. Un article porte un produit de votre catalogue, ou une désignation libre dont vous fixez la nature et le prix. Il garde le prix retenu au moment de la vente.","additionalProperties":true}}}}
```

## The ItemWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ItemWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Désignation."},"product":{"type":"integer","format":"int64","description":"Produit. Identifiant d'un élément `Product`.","nullable":true},"unit":{"type":"integer","format":"int64","description":"Unité de vente. Identifiant d'un élément `Unit`.","nullable":true},"packaging":{"type":"number","nullable":true,"description":"Colisage."},"number":{"type":"number","nullable":true,"description":"Quantité."},"unitPrice":{"type":"number","description":"Prix unitaire."},"unitPriceInitial":{"type":"number","nullable":true},"price":{"type":"number","nullable":true,"description":"Montant."},"vatRate":{"type":"number","nullable":true,"description":"Taux de TVA."},"nature":{"type":"string","enum":["good","service","silent"],"description":"Nature de la prestation. Valeurs : `good` (Livraison de bien), `service` (Prestation de service)."},"organic":{"type":"string","enum":["no","yes","conversion"],"description":"Valeurs : `no` (Non), `yes` (Oui), `conversion` (En conversion)."},"qualities":{"type":"string"},"locked":{"type":"string","enum":["unit-price","number","price"]},"parent":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Item`.","nullable":true}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Les articles d'une vente. Un article porte un produit de votre catalogue, ou une désignation libre dont vous fixez la nature et le prix. Il garde le prix retenu au moment de la vente.","additionalProperties":true}}}}
```

## The JournalCode object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"JournalCode":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"description":"Nom."},"code":{"type":"string","minLength":2,"maxLength":4,"description":"Code."},"isCustom":{"type":"boolean"},"isBilan":{"type":"boolean","description":"Journal de bilan ?."},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","description":"Couleur. Couleur hexadécimale.","nullable":true},"isReversable":{"type":"boolean","description":"Extournable."},"isDisplayed":{"type":"boolean","description":"Affiché dans le journal."},"documentNumberAuto":{"type":"boolean","description":"Suggestion automatisée du numéro de pièce comptable ?."}},"title":"Journaux","description":"Le livre journal et les journaux de votre structure (achats, ventes, banque...), utilisés pour classer les écritures."}}}}
```

## The JournalCodeUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"JournalCodeUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom."},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","description":"Couleur. Couleur hexadécimale.","nullable":true},"isReversable":{"type":"boolean","description":"Extournable."},"isDisplayed":{"type":"boolean","description":"Affiché dans le journal."},"documentNumberAuto":{"type":"boolean","description":"Suggestion automatisée du numéro de pièce comptable ?."}},"required":["name","color","isReversable","isDisplayed","documentNumberAuto"]}}}}
```

## The JournalCodeWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"JournalCodeWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom."},"code":{"type":"string","minLength":2,"maxLength":4,"description":"Code."},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","description":"Couleur. Couleur hexadécimale.","nullable":true},"isReversable":{"type":"boolean","description":"Extournable."},"isDisplayed":{"type":"boolean","description":"Affiché dans le journal."},"documentNumberAuto":{"type":"boolean","description":"Suggestion automatisée du numéro de pièce comptable ?."}},"required":["name","code","color","isReversable","isDisplayed","documentNumberAuto"]}}}}
```

## The LearningDate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"LearningDate":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"course":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Course`."},"startAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Début. Date et heure, au format AAAA-MM-JJ HH:MM:SS."},"endAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Fin. Date et heure, au format AAAA-MM-JJ HH:MM:SS."},"sequences":{"type":"array","description":"Les séances de la date, dans l'ordre où elles se tiennent, chacune sur un seul jour. Une date peut mêler des séances en présentiel et en visio, et ses séances en présentiel peuvent se tenir en plusieurs lieux","items":{"type":"object","properties":{"startAt":{"type":"string","description":"Début de la séance","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$"},"endAt":{"type":"string","description":"Fin de la séance, le même jour","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$"},"mode":{"type":"string","enum":["onsite","remote"],"description":"En présentiel ou en visio"},"place":{"type":"string","nullable":true,"description":"Lieu de la séance en présentiel, vide en visio"}}}},"minutes":{"type":"integer","nullable":true,"description":"Durée de formation."},"link":{"type":"string","format":"uri","nullable":true,"description":"Lien de la visio."},"seats":{"type":"integer","nullable":true,"description":"Places."},"offer":{"type":"string","enum":["network","trainee","none"],"description":"Paiement du stagiaire. Valeurs : `network` (Paiement en direct avec l'organisme), `trainee` (Paiement en ligne par le stagiaire)."},"price":{"type":"number","nullable":true,"description":"Autre public."},"externalUrl":{"type":"string","format":"uri","nullable":true,"description":"Site de l'organisme."},"enrollmentPaused":{"type":"boolean"},"status":{"type":"string","enum":["planned","canceled"]}},"title":"Dates","description":"Les dates des formations sur place ou à distance de votre réseau, en lecture seule. Le lien de visioconférence est rendu à la clé du réseau, mais la page publique du réseau ne le montre pas."}}}}
```

## The Lesson object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Lesson":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"course":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Course`."},"chapter":{"type":"integer","format":"int64","description":"Module. Identifiant d'un élément `Chapter`."},"name":{"type":"string","minLength":1,"maxLength":100,"description":"Titre."},"objective":{"type":"string","minLength":1,"maxLength":250,"nullable":true,"description":"Objectif."},"format":{"type":"string","enum":["video","steps","text","empty"],"description":"Forme de la leçon, calculée sur son contenu. Elle vaut video quand la leçon porte une vidéo, sinon steps quand elle porte des étapes numérotées, sinon text quand elle porte un texte ou un quiz, et empty quand elle n'a rien à lire"},"minutes":{"type":"integer","nullable":true,"description":"Durée estimée."},"content":{"type":"string","nullable":true,"description":"Contenu de la leçon en HTML, lu dans les textes de ses blocs mis bout à bout"},"validation":{"type":"string","enum":["declared","quiz","deliverable","presence"],"description":"Validation."},"quizThreshold":{"type":"integer","nullable":true,"description":"Seuil de réussite."},"position":{"type":"integer"},"updatedAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS."}},"title":"Leçons","description":"Les leçons d'un module. Une leçon change de module à l'intérieur de sa formation, jamais d'une formation à une autre. Supprimer la dernière leçon d'une formation publiée qu'un inscrit a suivie en entier est refusé en 412. Le contenu s'écrit en HTML et se relit enveloppé dans une balise main, format de stockage de l'éditeur. Une leçon se compose de blocs, et son contenu se lit comme les textes de ces blocs mis bout à bout. Il ne s'écrit que sur une leçon sans bloc ou d'un seul bloc de texte, et l'écriture sur une leçon composée est refusée avec l'erreur Lesson::content.blocks. La forme (format) se lit et ne s'écrit pas : video quand la leçon porte une vidéo, sinon steps quand elle porte des étapes numérotées, sinon text quand elle porte un texte ou un quiz, sinon empty."}}}}
```

## The LessonWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"LessonWrite":{"type":"object","properties":{"chapter":{"type":"integer","format":"int64","description":"Module. Identifiant d'un élément `Chapter`."},"name":{"type":"string","minLength":1,"maxLength":100,"description":"Titre."},"minutes":{"type":"integer","nullable":true,"description":"Durée estimée."},"content":{"type":"string","nullable":true,"description":"Contenu de la leçon en HTML, lu dans les textes de ses blocs mis bout à bout"},"validation":{"type":"string","enum":["declared","quiz","deliverable","presence"],"description":"Validation."},"quizThreshold":{"type":"integer","nullable":true,"description":"Seuil de réussite."}},"required":["chapter","name","minutes","content","validation","quizThreshold"]}}}}
```

## The Line object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Line":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"identifier":{"type":"string"},"subtype":{"type":"string","enum":["detail","group","information"],"nullable":true},"nature":{"type":"string","enum":["good","service"]},"name":{"type":"string"},"description":{"type":"string"},"sellerIdentifier":{"type":"string","nullable":true},"buyerIdentifier":{"type":"string","nullable":true},"buyerOrderReference":{"type":"string","nullable":true},"buyerAccountingReference":{"type":"string","nullable":true},"number":{"type":"number","nullable":true},"numberCode":{"type":"string","nullable":true},"unitCodeQuantity":{"type":"string","nullable":true},"packaging":{"type":"number","nullable":true},"initialPriceExcludingVat":{"type":"number","nullable":true},"unitPriceExcludingVat":{"type":"number","nullable":true},"unitPriceDiscount":{"type":"number","nullable":true},"netPriceExcludingVat":{"type":"number","nullable":true},"netPriceIncludingVat":{"type":"number","nullable":true},"allowances":{"type":"array","items":{},"nullable":true},"attributes":{"type":"array","items":{}},"vatRate":{"type":"number","nullable":true},"unitVatRate":{"type":"number","nullable":true},"vatCode":{"type":"string","nullable":true},"vatDueDateCode":{"type":"string","nullable":true},"vatAmount":{"type":"number","nullable":true},"vatExemptionReason":{"type":"string","nullable":true},"accountNumber":{"type":"string","nullable":true}},"title":"Lignes de facture","description":"Le détail d'une facture électronique, au format EN 16931 : désignation, quantité, prix unitaire, TVA et compte comptable. Embarqué dans le champ lines d'une facture."}}}}
```

## The Maintenance object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Maintenance":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"equipment":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Equipment`."},"name":{"type":"string","minLength":1,"maxLength":60,"description":"Entretien."},"everyValue":{"type":"integer","nullable":true,"description":"Compteur."},"everyMonths":{"type":"integer","nullable":true,"description":"Mois."},"plannedDate":{"type":"string","format":"date","nullable":true,"description":"Date."},"plannedValue":{"type":"integer","nullable":true,"description":"Compteur."},"ignoredDate":{"type":"string","format":"date","nullable":true},"status":{"type":"string","enum":["active","done","deleted"]},"due":{"type":"string","enum":["overdue","soon"],"nullable":true,"description":"État de l'échéance, tel que le carnet le montre : overdue pour un entretien en retard, soon à 60 jours ou moins, 50 heures ou moins, ou 1 000 kilomètres ou moins de l'échéance, null sinon. Toujours null sur un entretien qui n'est plus actif ou dont le matériel n'est plus suivi."},"remainingDays":{"type":"integer","nullable":true,"description":"Nombre de jours avant plannedDate, négatif une fois la date dépassée. null sans plannedDate, et sur un entretien qui n'est plus actif ou dont le matériel n'est plus suivi."},"remainingValue":{"type":"integer","nullable":true,"description":"Ce qui reste au compteur avant plannedValue, dans l'unité du matériel, négatif une fois la valeur dépassée. null sans plannedValue, sur un matériel sans compteur, tant que le matériel n'a aucun relevé, et sur un entretien qui n'est plus actif ou dont le matériel n'est plus suivi."}},"title":"Entretiens planifiés","description":"Les entretiens à faire sur un matériel suivi, dus à une date, à une valeur du compteur, ou au premier des deux. Un entretien revient régulièrement quand il porte une fréquence, au compteur ou en mois, et se fait une seule fois quand les deux fréquences sont à null. Les valeurs au compteur demandent un matériel à compteur. Il n'y a pas de suppression, retirer un entretien le passe au statut deleted. Une modification nomme ce qu'elle change dans properties, les deux fréquences ensemble et les deux échéances ensemble. Un corps sans properties est lu comme une modification complète, qui attend toutes les propriétés, status compris, et la seule valeur que status accepte est deleted. La liste écarte les entretiens retirés, que ?status=deleted retrouve."}}}}
```

## The MaintenanceDone object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"MaintenanceDone":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"equipment":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Equipment`."},"maintenance":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Maintenance`.","nullable":true},"name":{"type":"string","minLength":1,"maxLength":60,"nullable":true,"description":"Entretien."},"date":{"type":"string","format":"date","description":"Date."},"value":{"type":"integer","nullable":true,"description":"Compteur."},"cost":{"type":"number","nullable":true,"description":"Coût."},"comment":{"type":"string","nullable":true,"description":"Note."}},"title":"Entretiens faits","description":"L'historique d'un matériel suivi. Une ligne qui nomme un entretien planifié dit qu'il a été fait ce jour-là. Elle fait repartir son échéance, ou le clôt s'il se fait une seule fois, et name reste à null. Avec maintenance à null, la ligne est une intervention, qui n'entre qu'à l'historique sous le libellé donné dans name. L'entretien nommé est un entretien encore actif du matériel donné. À la création, value à null prend le compteur dans les relevés du matériel. Quand le matériel n'a aucun relevé, la ligne d'un entretien dû au compteur seul doit donner value, et elle est refusée sans lui. Une valeur donnée devient aussi le relevé de ce jour et suit la règle d'un relevé. Un compteur ne recule pas, et le même appel renvoyé avec \"confirmed\": true dans le corps est accepté. Une modification ne change ni le matériel, ni l'entretien, et value ne s'y donne pas. Quand la date d'une ligne change, value est relu dans les relevés du matériel à la nouvelle date, et le relevé de l'ancien jour reste. Sur un matériel dont le compteur a été retiré, la ligne déplacée garde value et l'échéance au compteur de l'entretien reste celle qu'il portait. Un entretien fait pendant que le compteur est retiré ne fait pas repartir son échéance au compteur. Supprimer la ligne de la dernière fois où l'entretien a été fait fait repartir son échéance de la fois d'avant. Quand la ligne supprimée était la seule, l'échéance d'un entretien régulier reste celle qui avait été calculée, et se corrige sur l'entretien par plannedDate et plannedValue, donnés ensemble. Un jour à venir est refusé. Une ligne créée, déplacée ou supprimée avant la dernière fois où l'entretien a été fait n'entre qu'à l'historique et ne change pas son échéance. Quand l'échéance repart d'une ligne, un retard ignoré avant la date de cette ligne est oublié, et ignoredDate revient à null. Un compteur donné sur un matériel sans compteur est refusé, et value est rendu à null quand aucun relevé ne précède la date. Le relevé posé par une ligne reste quand la ligne est supprimée ou change de date. Un entretien à faire une seule fois redevient à faire quand sa ligne est supprimée. Deux créations identiques font deux lignes. Sur la ligne d'un entretien planifié, name ne se modifie pas et reste à null. Les lignes d'un matériel inactif ne se modifient et ne se suppriment plus, ce que dit un code 412. La photo d'un entretien ne passe pas par l'API."}}}}
```

## The MaintenanceDoneUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"MaintenanceDoneUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60,"nullable":true,"description":"Entretien."},"date":{"type":"string","format":"date","description":"Date."},"cost":{"type":"number","nullable":true,"description":"Coût."},"comment":{"type":"string","nullable":true,"description":"Note."}},"required":["name","date","cost","comment"]}}}}
```

## The MaintenanceDoneWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"MaintenanceDoneWrite":{"type":"object","properties":{"equipment":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Equipment`."},"maintenance":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Maintenance`.","nullable":true},"name":{"type":"string","minLength":1,"maxLength":60,"nullable":true,"description":"Entretien."},"date":{"type":"string","format":"date","description":"Date."},"value":{"type":"integer","nullable":true,"description":"Compteur."},"cost":{"type":"number","nullable":true,"description":"Coût."},"comment":{"type":"string","nullable":true,"description":"Note."},"confirmed":{"type":"boolean","writeOnly":true,"description":"À true, accepte un compteur inférieur à un relevé plus ancien ou supérieur à un relevé plus récent, pour corriger une erreur. Ne se relit pas."}},"required":["equipment","maintenance","name","date","value","cost","comment"]}}}}
```

## The MaintenanceUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"MaintenanceUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60,"description":"Entretien."},"everyValue":{"type":"integer","nullable":true,"description":"Compteur."},"everyMonths":{"type":"integer","nullable":true,"description":"Mois."},"plannedDate":{"type":"string","format":"date","nullable":true,"description":"Date."},"plannedValue":{"type":"integer","nullable":true,"description":"Compteur."},"status":{"type":"string","enum":["active","done","deleted"]}},"required":["name","everyValue","everyMonths","plannedDate","plannedValue","status"]}}}}
```

## The MaintenanceWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"MaintenanceWrite":{"type":"object","properties":{"equipment":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Equipment`."},"name":{"type":"string","minLength":1,"maxLength":60,"description":"Entretien."},"everyValue":{"type":"integer","nullable":true,"description":"Compteur."},"everyMonths":{"type":"integer","nullable":true,"description":"Mois."},"plannedDate":{"type":"string","format":"date","nullable":true,"description":"Date."},"plannedValue":{"type":"integer","nullable":true,"description":"Compteur."}},"required":["equipment","name","everyValue","everyMonths","plannedDate","plannedValue"]}}}}
```

## The Market object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Market":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"customer":{"type":"integer","format":"int64","description":"Client. Identifiant d'un élément `Customer`.","nullable":true},"deliveredAt":{"type":"string","format":"date"},"type":{"type":"string","enum":["private","pro"]},"taxes":{"type":"string","enum":["including","excluding"],"description":"Valeurs : `including` (TTC), `excluding` (HT)."},"hasVat":{"type":"boolean"},"vatApplication":{"type":"string","enum":["normal","intracom","extracom"]},"priceExcludingVat":{"type":"number","nullable":true},"priceIncludingVat":{"type":"number","nullable":true},"vat":{"type":"number"},"itemsCount":{"type":"integer","description":"Nombre de lignes"},"marketSales":{"type":"integer","nullable":true},"organic":{"type":"boolean"},"conversion":{"type":"boolean"},"nature":{"type":"string","enum":["good","service","mixed"],"nullable":true},"preparationStatus":{"type":"string","enum":["composition","draft","basket","confirmed","selling","prepared","delivered","canceled","expired"],"description":"Statut de préparation. Valeurs : `draft` (Brouillon), `basket` (Panier), `expired` (Expiré), `confirmed` (Confirmé), `selling` (Caisse), `prepared` (Préparé), `delivered` (Livré), `canceled` (Annulé)."},"closed":{"type":"boolean"},"items":{"type":"array","description":"Lignes de la vente","items":{"$ref":"#/components/schemas/Item"}}},"title":"Marchés","description":"Une journée de vente directe : marché, vente à la ferme, tournée. Le marché porte les articles proposés ce jour-là avec leur prix, et ses totaux sont l'agrégat des ventes encaissées, pas la somme de ses articles."},"Item":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"description":"Désignation."},"reference":{"type":"string","minLength":1,"nullable":true},"additional":{"type":"string","nullable":true,"description":"Complément d'information."},"product":{"type":"integer","format":"int64","description":"Produit. Identifiant d'un élément `Product`.","nullable":true},"unit":{"type":"integer","format":"int64","description":"Unité de vente. Identifiant d'un élément `Unit`.","nullable":true},"packaging":{"type":"number","nullable":true,"description":"Colisage."},"number":{"type":"number","nullable":true,"description":"Quantité."},"unitPrice":{"type":"number","description":"Prix unitaire."},"unitPriceInitial":{"type":"number","nullable":true},"price":{"type":"number","nullable":true,"description":"Montant."},"priceInitial":{"type":"number","nullable":true},"vatRate":{"type":"number","nullable":true,"description":"Taux de TVA."},"vatCode":{"type":"string","enum":["s","z","e","ae","k","g","o"],"nullable":true,"description":"Code de TVA. Valeurs : `s` (Standard), `z` (Taux de TVA à 0), `e` (Exempté de TVA), `ae` (Auto liquidation de TVA), `k` (Exonération pour livraison intracommunautaire), `g` (Exempté de TVA pour Export hors UE), `o` (Hors du périmètre d'application de la TVA)."},"nature":{"type":"string","enum":["good","service","silent"],"description":"Nature de la prestation. Valeurs : `good` (Livraison de bien), `service` (Prestation de service)."},"organic":{"type":"string","enum":["no","yes","conversion"],"description":"Valeurs : `no` (Non), `yes` (Oui), `conversion` (En conversion)."},"qualities":{"type":"string"},"origin":{"type":"string","minLength":1,"nullable":true,"description":"Origine."},"status":{"type":"string","enum":["composition","draft","basket","confirmed","selling","prepared","delivered","canceled","expired"]},"structure":{"type":"integer","format":"int64","description":"Référence du producteur, rendue seulement par la liste des articles d'une commande groupée, sur les articles d'une autre structure"},"accountNumber":{"type":"string","nullable":true,"description":"Numéro de compte comptable de l'article, absent des articles d'une autre structure"},"sale":{"type":"integer","format":"int64","description":"Référence de la vente du producteur, rendue seulement par la liste des articles d'une commande groupée, sur les articles d'une autre structure"},"structureName":{"type":"string","description":"Nom du producteur, rendu avec sa référence"},"unitLabels":{"type":"object","nullable":true,"description":"Libellés de l'unité, rendus avec la référence du producteur, ou null pour un article sans unité","properties":{"singular":{"type":"string"},"plural":{"type":"string"},"short":{"type":"string"}}},"composition":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Sale`.","nullable":true},"ingredients":{"type":"array","description":"Lignes qui composent le panier","items":{"$ref":"#/components/schemas/Item"}}},"title":"Articles de vente","description":"Les articles d'une vente. Un article porte un produit de votre catalogue, ou une désignation libre dont vous fixez la nature et le prix. Il garde le prix retenu au moment de la vente."}}}}
```

## The MarketDevice object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"MarketDevice":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"market":{"type":"integer","format":"int64","description":"Référence du marché"},"key":{"type":"string","minLength":36,"maxLength":36},"status":{"type":"string","enum":["open","returned"]},"sequence":{"type":"integer"},"chainHash":{"type":"string","minLength":64,"maxLength":64,"nullable":true},"pending":{"type":"integer"},"takenAt":{"type":"string","description":"Heure de la prise du service, au format AAAA-MM-JJ HH:MM:SS"},"lastSeenAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS."},"returnedAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS.","nullable":true}},"title":"Services des appareils de caisse","description":"Le service d'un appareil de caisse sur un marché, pris avant sa première vente et rendu quand il n'a plus rien à envoyer. La clé, un uuid v4 tiré par l'appareil, vaut pour un seul service : un appareil qui reprend un service en tire une nouvelle. Un service rendu ne se reprend pas. Un marché accepte au plus 10 services en même temps et 30 en tout. Une réponse 409 dit que rien n'a été enregistré et que la demande se renvoie telle quelle, après une attente et jamais aussitôt."}}}}
```

## The MarketSale object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"MarketSale":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"market":{"type":"integer","format":"int64","nullable":true,"description":"Référence du marché"},"customer":{"type":"integer","format":"int64","description":"Client. Identifiant d'un élément `Customer`.","nullable":true},"deliveredAt":{"type":"string","format":"date"},"type":{"type":"string","enum":["private","pro"]},"taxes":{"type":"string","enum":["including","excluding"],"description":"Valeurs : `including` (TTC), `excluding` (HT)."},"hasVat":{"type":"boolean"},"vatApplication":{"type":"string","enum":["normal","intracom","extracom"]},"priceExcludingVat":{"type":"number","nullable":true},"priceIncludingVat":{"type":"number","nullable":true},"vat":{"type":"number"},"discountPercent":{"type":"integer","description":"Remise commerciale (en %)."},"discountValue":{"type":"number","description":"Remise commerciale (en €)."},"itemsCount":{"type":"integer","description":"Nombre de lignes"},"organic":{"type":"boolean"},"conversion":{"type":"boolean"},"nature":{"type":"string","enum":["good","service","mixed"],"nullable":true},"preparationStatus":{"type":"string","enum":["composition","draft","basket","confirmed","selling","prepared","delivered","canceled","expired"],"description":"Statut de préparation. Valeurs : `draft` (Brouillon), `basket` (Panier), `expired` (Expiré), `confirmed` (Confirmé), `selling` (Caisse), `prepared` (Préparé), `delivered` (Livré), `canceled` (Annulé)."},"paymentStatus":{"type":"string","enum":["not-paid","partial-paid","overpaid","paid","never-paid","failed"],"nullable":true,"description":"État du paiement. Valeurs : `paid` (Payé), `not-paid` (Non payé), `partial-paid` (Payé partiellement), `overpaid` (Trop perçu), `failed` (Paiement en échec), `never-paid` (Ne sera pas payé)."},"paymentAmount":{"type":"number","nullable":true},"paidAt":{"type":"string","format":"date","nullable":true,"description":"Date de paiement."},"closed":{"type":"boolean"},"items":{"type":"array","description":"Lignes de la vente","items":{"$ref":"#/components/schemas/MarketSaleItem"}},"payments":{"type":"array","description":"Règlements enregistrés","items":{"type":"object","properties":{"method":{"type":"integer","format":"int64","nullable":true,"description":"Référence du mode de règlement"},"methodName":{"type":"string"},"amountIncludingVat":{"type":"number"},"status":{"type":"string","enum":["not-paid","paid","failed"]}}}}},"title":"Ventes en caisse","description":"Les ventes encaissées sur un marché. Le plus souvent anonymes, elles reprennent les articles proposés par le marché et n'entrent dans ses totaux qu'une fois payées. Un appareil de caisse qui a encaissé sans réseau envoie sa vente avec sa clé et son numéro sur l'appareil. Renvoyée, la même vente rend celle déjà créée et répond 200 au lieu de 201. Un numéro déjà reçu, renvoyé avec un autre maillon, rend aussi la première vente et répond 200, sans créer la seconde, et le gérant en est averti. Quand l'un des deux envois n'a pas de maillon, c'est l'heure de vente envoyée par l'appareil qui les compare, telle qu'il l'a envoyée. Un appareil qui n'envoie ni maillon ni heure de vente ne permet pas de voir qu'un numéro a servi deux fois. Un appareil envoie sous un service pris sur le marché. Sur un marché clos, terminé, facturé ou annulé, ou après le rendu du service, l'envoi ne devient pas une vente et la réponse est 202. Le serveur n'en garde, hors des totaux, que l'en-tête de la vente, c'est-à-dire la clé, le numéro, le maillon et l'heure de vente, et l'appareil conserve ses articles et ses règlements jusqu'à ce que l'API les reçoive. Une réponse 409 dit que la vente n'a pas été enregistrée et qu'elle se renvoie telle quelle, après une attente et jamais aussitôt. Une ferme école n'encaisse pas, ce que dit un code 412 avec l'erreur market_school."},"MarketSaleItem":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"sale":{"type":"integer","format":"int64","nullable":true,"description":"Référence de la vente"},"parent":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Item`.","nullable":true},"name":{"type":"string","minLength":1,"description":"Désignation."},"product":{"type":"integer","format":"int64","description":"Produit. Identifiant d'un élément `Product`.","nullable":true},"unit":{"type":"integer","format":"int64","description":"Unité de vente. Identifiant d'un élément `Unit`.","nullable":true},"packaging":{"type":"number","nullable":true,"description":"Colisage."},"number":{"type":"number","nullable":true,"description":"Quantité."},"unitPrice":{"type":"number","description":"Prix unitaire."},"unitPriceInitial":{"type":"number","nullable":true},"price":{"type":"number","nullable":true,"description":"Montant."},"vatRate":{"type":"number","nullable":true,"description":"Taux de TVA."},"nature":{"type":"string","enum":["good","service","silent"],"description":"Nature de la prestation. Valeurs : `good` (Livraison de bien), `service` (Prestation de service)."},"organic":{"type":"string","enum":["no","yes","conversion"],"description":"Valeurs : `no` (Non), `yes` (Oui), `conversion` (En conversion)."},"qualities":{"type":"string"},"status":{"type":"string","enum":["composition","draft","basket","confirmed","selling","prepared","delivered","canceled","expired"]},"composition":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Sale`.","nullable":true},"ingredients":{"type":"array","description":"Lignes qui composent le panier","items":{"$ref":"#/components/schemas/Item"}}},"title":"Articles de caisse","description":"Les articles d'une vente encaissée en caisse. Chacun reprend un article proposé par le marché, dont il garde le nom et le prix affiché à l'étal : seule la quantité se saisit."},"Item":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"description":"Désignation."},"reference":{"type":"string","minLength":1,"nullable":true},"additional":{"type":"string","nullable":true,"description":"Complément d'information."},"product":{"type":"integer","format":"int64","description":"Produit. Identifiant d'un élément `Product`.","nullable":true},"unit":{"type":"integer","format":"int64","description":"Unité de vente. Identifiant d'un élément `Unit`.","nullable":true},"packaging":{"type":"number","nullable":true,"description":"Colisage."},"number":{"type":"number","nullable":true,"description":"Quantité."},"unitPrice":{"type":"number","description":"Prix unitaire."},"unitPriceInitial":{"type":"number","nullable":true},"price":{"type":"number","nullable":true,"description":"Montant."},"priceInitial":{"type":"number","nullable":true},"vatRate":{"type":"number","nullable":true,"description":"Taux de TVA."},"vatCode":{"type":"string","enum":["s","z","e","ae","k","g","o"],"nullable":true,"description":"Code de TVA. Valeurs : `s` (Standard), `z` (Taux de TVA à 0), `e` (Exempté de TVA), `ae` (Auto liquidation de TVA), `k` (Exonération pour livraison intracommunautaire), `g` (Exempté de TVA pour Export hors UE), `o` (Hors du périmètre d'application de la TVA)."},"nature":{"type":"string","enum":["good","service","silent"],"description":"Nature de la prestation. Valeurs : `good` (Livraison de bien), `service` (Prestation de service)."},"organic":{"type":"string","enum":["no","yes","conversion"],"description":"Valeurs : `no` (Non), `yes` (Oui), `conversion` (En conversion)."},"qualities":{"type":"string"},"origin":{"type":"string","minLength":1,"nullable":true,"description":"Origine."},"status":{"type":"string","enum":["composition","draft","basket","confirmed","selling","prepared","delivered","canceled","expired"]},"structure":{"type":"integer","format":"int64","description":"Référence du producteur, rendue seulement par la liste des articles d'une commande groupée, sur les articles d'une autre structure"},"accountNumber":{"type":"string","nullable":true,"description":"Numéro de compte comptable de l'article, absent des articles d'une autre structure"},"sale":{"type":"integer","format":"int64","description":"Référence de la vente du producteur, rendue seulement par la liste des articles d'une commande groupée, sur les articles d'une autre structure"},"structureName":{"type":"string","description":"Nom du producteur, rendu avec sa référence"},"unitLabels":{"type":"object","nullable":true,"description":"Libellés de l'unité, rendus avec la référence du producteur, ou null pour un article sans unité","properties":{"singular":{"type":"string"},"plural":{"type":"string"},"short":{"type":"string"}}},"composition":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Sale`.","nullable":true},"ingredients":{"type":"array","description":"Lignes qui composent le panier","items":{"$ref":"#/components/schemas/Item"}}},"title":"Articles de vente","description":"Les articles d'une vente. Un article porte un produit de votre catalogue, ou une désignation libre dont vous fixez la nature et le prix. Il garde le prix retenu au moment de la vente."}}}}
```

## The MarketSaleItem object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"MarketSaleItem":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"sale":{"type":"integer","format":"int64","nullable":true,"description":"Référence de la vente"},"parent":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Item`.","nullable":true},"name":{"type":"string","minLength":1,"description":"Désignation."},"product":{"type":"integer","format":"int64","description":"Produit. Identifiant d'un élément `Product`.","nullable":true},"unit":{"type":"integer","format":"int64","description":"Unité de vente. Identifiant d'un élément `Unit`.","nullable":true},"packaging":{"type":"number","nullable":true,"description":"Colisage."},"number":{"type":"number","nullable":true,"description":"Quantité."},"unitPrice":{"type":"number","description":"Prix unitaire."},"unitPriceInitial":{"type":"number","nullable":true},"price":{"type":"number","nullable":true,"description":"Montant."},"vatRate":{"type":"number","nullable":true,"description":"Taux de TVA."},"nature":{"type":"string","enum":["good","service","silent"],"description":"Nature de la prestation. Valeurs : `good` (Livraison de bien), `service` (Prestation de service)."},"organic":{"type":"string","enum":["no","yes","conversion"],"description":"Valeurs : `no` (Non), `yes` (Oui), `conversion` (En conversion)."},"qualities":{"type":"string"},"status":{"type":"string","enum":["composition","draft","basket","confirmed","selling","prepared","delivered","canceled","expired"]},"composition":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Sale`.","nullable":true},"ingredients":{"type":"array","description":"Lignes qui composent le panier","items":{"$ref":"#/components/schemas/Item"}}},"title":"Articles de caisse","description":"Les articles d'une vente encaissée en caisse. Chacun reprend un article proposé par le marché, dont il garde le nom et le prix affiché à l'étal : seule la quantité se saisit."},"Item":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"description":"Désignation."},"reference":{"type":"string","minLength":1,"nullable":true},"additional":{"type":"string","nullable":true,"description":"Complément d'information."},"product":{"type":"integer","format":"int64","description":"Produit. Identifiant d'un élément `Product`.","nullable":true},"unit":{"type":"integer","format":"int64","description":"Unité de vente. Identifiant d'un élément `Unit`.","nullable":true},"packaging":{"type":"number","nullable":true,"description":"Colisage."},"number":{"type":"number","nullable":true,"description":"Quantité."},"unitPrice":{"type":"number","description":"Prix unitaire."},"unitPriceInitial":{"type":"number","nullable":true},"price":{"type":"number","nullable":true,"description":"Montant."},"priceInitial":{"type":"number","nullable":true},"vatRate":{"type":"number","nullable":true,"description":"Taux de TVA."},"vatCode":{"type":"string","enum":["s","z","e","ae","k","g","o"],"nullable":true,"description":"Code de TVA. Valeurs : `s` (Standard), `z` (Taux de TVA à 0), `e` (Exempté de TVA), `ae` (Auto liquidation de TVA), `k` (Exonération pour livraison intracommunautaire), `g` (Exempté de TVA pour Export hors UE), `o` (Hors du périmètre d'application de la TVA)."},"nature":{"type":"string","enum":["good","service","silent"],"description":"Nature de la prestation. Valeurs : `good` (Livraison de bien), `service` (Prestation de service)."},"organic":{"type":"string","enum":["no","yes","conversion"],"description":"Valeurs : `no` (Non), `yes` (Oui), `conversion` (En conversion)."},"qualities":{"type":"string"},"origin":{"type":"string","minLength":1,"nullable":true,"description":"Origine."},"status":{"type":"string","enum":["composition","draft","basket","confirmed","selling","prepared","delivered","canceled","expired"]},"structure":{"type":"integer","format":"int64","description":"Référence du producteur, rendue seulement par la liste des articles d'une commande groupée, sur les articles d'une autre structure"},"accountNumber":{"type":"string","nullable":true,"description":"Numéro de compte comptable de l'article, absent des articles d'une autre structure"},"sale":{"type":"integer","format":"int64","description":"Référence de la vente du producteur, rendue seulement par la liste des articles d'une commande groupée, sur les articles d'une autre structure"},"structureName":{"type":"string","description":"Nom du producteur, rendu avec sa référence"},"unitLabels":{"type":"object","nullable":true,"description":"Libellés de l'unité, rendus avec la référence du producteur, ou null pour un article sans unité","properties":{"singular":{"type":"string"},"plural":{"type":"string"},"short":{"type":"string"}}},"composition":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Sale`.","nullable":true},"ingredients":{"type":"array","description":"Lignes qui composent le panier","items":{"$ref":"#/components/schemas/Item"}}},"title":"Articles de vente","description":"Les articles d'une vente. Un article porte un produit de votre catalogue, ou une désignation libre dont vous fixez la nature et le prix. Il garde le prix retenu au moment de la vente."}}}}
```

## The MarketSaleItemWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"MarketSaleItemWrite":{"type":"object","properties":{"parent":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Item`.","nullable":true},"packaging":{"type":"number","nullable":true,"description":"Colisage."},"number":{"type":"number","nullable":true,"description":"Quantité."},"unitPrice":{"type":"number","description":"Prix unitaire."},"unitPriceInitial":{"type":"number","nullable":true},"price":{"type":"number","nullable":true,"description":"Montant."},"locked":{"type":"string","enum":["unit-price","number","price"]}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Les articles d'une vente encaissée en caisse. Chacun reprend un article proposé par le marché, dont il garde le nom et le prix affiché à l'étal : seule la quantité se saisit.","additionalProperties":true}}}}
```

## The MarketWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"MarketWrite":{"type":"object","properties":{"customer":{"type":"integer","format":"int64","description":"Client. Identifiant d'un élément `Customer`.","nullable":true},"deliveredAt":{"type":"string","format":"date"},"preparationStatus":{"type":"string","enum":["composition","draft","basket","confirmed","selling","prepared","delivered","canceled","expired"],"description":"Statut de préparation. Valeurs : `draft` (Brouillon), `basket` (Panier), `expired` (Expiré), `confirmed` (Confirmé), `selling` (Caisse), `prepared` (Préparé), `delivered` (Livré), `canceled` (Annulé)."},"productsList":{"description":"Champ accepté en écriture, sans équivalent en lecture."},"shipping":{"type":"number","nullable":true,"description":"Frais de livraison."},"source":{"description":"Champ accepté en écriture, sans équivalent en lecture."},"catalogs":{"type":"object","nullable":true,"description":"Choisir les catalogues proposés à la vente."}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Une journée de vente directe : marché, vente à la ferme, tournée. Le marché porte les articles proposés ce jour-là avec leur prix, et ses totaux sont l'agrégat des ventes encaissées, pas la somme de ses articles.","additionalProperties":true}}}}
```

## The Member object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Member":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"user":{"description":"Identité du membre","allOf":[{"$ref":"#/components/schemas/User"}]},"role":{"type":"integer","format":"int64","description":"Rôle. Identifiant d'un élément `Role`.","nullable":true},"status":{"type":"string","enum":["in","out"]}},"title":"Membres","description":"Les membres de l'équipe de votre structure et le rôle attribué à chacun, y compris les personnes sans compte, qui figurent au planning sans se connecter. Un membre rejoint la structure en acceptant une invitation : il ne peut pas être créé par l'API."},"User":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"firstName":{"type":"string","minLength":1,"maxLength":0,"nullable":true,"description":"Prénom."},"lastName":{"type":"string","minLength":1,"maxLength":0,"description":"Nom."},"email":{"type":"string","format":"email","nullable":true,"description":"Adresse e-mail de l'utilisateur, ou null si son compte est privé"},"vignette":{"type":"string","format":"uri","nullable":true,"description":"Adresse de la photo de profil, ou null si l'utilisateur n'en a pas"}},"title":"Utilisateurs","description":"L'identité d'un utilisateur de Ouvretaferme. Objet en lecture seule, sans route propre, qui apparaît à l'intérieur des ressources qui le référencent, comme les membres de votre structure."}}}}
```

## The MemberWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"MemberWrite":{"type":"object","properties":{"role":{"type":"integer","format":"int64","description":"Rôle. Identifiant d'un élément `Role`.","nullable":true}},"required":["role"]}}}}
```

## The Offer object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Offer":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"catalog":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Catalog`.","nullable":true},"product":{"type":"integer","format":"int64","description":"Produit. Identifiant d'un élément `Product`.","nullable":true},"packaging":{"type":"number","nullable":true,"description":"Colisage."},"promotion":{"type":"string","enum":["none","basic","new","week","month","custom"],"description":"Mise en avant. Valeurs : `none` (Pas de mise en avant), `basic` (Mise en avant sans mention), `new` (Mise en avant avec mention « Nouveauté »), `week` (Mise en avant avec mention « Produit de la semaine »), `month` (Mise en avant avec mention « Produit du mois »), `custom` (Mise en avant une mention personnalisée)."},"promotionCustom":{"type":"string","minLength":1,"maxLength":20,"nullable":true,"description":"Mention personnalisée de mise en avant."},"priceSource":{"type":"string","enum":["offer","product"],"nullable":true},"price":{"type":"number"},"priceInitial":{"type":"number","nullable":true},"priceSteps":{"type":"array","items":{},"description":"Remise sur volume."},"limitMin":{"type":"number","nullable":true,"description":"Quantité minimale demandée en cas de commande."},"limitMax":{"type":"number","nullable":true,"description":"Quantité maximale autorisée par commande."},"limitStartAt":{"type":"string","format":"date","nullable":true,"description":"Proposer pour les commandes livrées à partir de."},"limitEndAt":{"type":"string","format":"date","nullable":true,"description":"Proposer pour les commandes livrées jusqu'au."},"available":{"type":"number","nullable":true,"description":"Disponible à la vente."},"status":{"type":"string","enum":["active","inactive"]}},"title":"Offres de catalogue","description":"Le rattachement d'un produit à un catalogue (prix, limites de vente, promotion). Les offres composées (plusieurs produits assemblés) ne sont pas exposées par cette API."}}}}
```

## The OfferUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"OfferUpdate":{"type":"object","properties":{"packaging":{"type":"number","nullable":true,"description":"Colisage."},"limitMin":{"type":"number","nullable":true,"description":"Quantité minimale demandée en cas de commande."},"limitMax":{"type":"number","nullable":true,"description":"Quantité maximale autorisée par commande."},"limitStartAt":{"type":"string","format":"date","nullable":true,"description":"Proposer pour les commandes livrées à partir de."},"limitEndAt":{"type":"string","format":"date","nullable":true,"description":"Proposer pour les commandes livrées jusqu'au."},"parentName":{"type":"string","minLength":1,"nullable":true,"description":"Nom du groupe."},"children":{"description":"Champ accepté en écriture, sans équivalent en lecture."}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Le rattachement d'un produit à un catalogue (prix, limites de vente, promotion). Les offres composées (plusieurs produits assemblés) ne sont pas exposées par cette API.","additionalProperties":true}}}}
```

## The OfferWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"OfferWrite":{"type":"object","properties":{"catalog":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Catalog`.","nullable":true},"product":{"type":"integer","format":"int64","description":"Produit. Identifiant d'un élément `Product`.","nullable":true},"packaging":{"type":"number","nullable":true,"description":"Colisage."},"promotion":{"type":"string","enum":["none","basic","new","week","month","custom"],"description":"Mise en avant. Valeurs : `none` (Pas de mise en avant), `basic` (Mise en avant sans mention), `new` (Mise en avant avec mention « Nouveauté »), `week` (Mise en avant avec mention « Produit de la semaine »), `month` (Mise en avant avec mention « Produit du mois »), `custom` (Mise en avant une mention personnalisée)."},"promotionCustom":{"type":"string","minLength":1,"maxLength":20,"nullable":true,"description":"Mention personnalisée de mise en avant."},"price":{"type":"number"},"priceInitial":{"type":"number","nullable":true},"limitMin":{"type":"number","nullable":true,"description":"Quantité minimale demandée en cas de commande."},"limitMax":{"type":"number","nullable":true,"description":"Quantité maximale autorisée par commande."},"limitStartAt":{"type":"string","format":"date","nullable":true,"description":"Proposer pour les commandes livrées à partir de."},"limitEndAt":{"type":"string","format":"date","nullable":true,"description":"Proposer pour les commandes livrées jusqu'au."},"parentName":{"type":"string","minLength":1,"nullable":true,"description":"Nom du groupe."},"children":{"description":"Champ accepté en écriture, sans équivalent en lecture."}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. Le rattachement d'un produit à un catalogue (prix, limites de vente, promotion). Les offres composées (plusieurs produits assemblés) ne sont pas exposées par cette API."}}}}
```

## The Operation object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Operation":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"number":{"type":"integer","nullable":true},"financialYear":{"type":"integer","format":"int64","description":"Identifiant d'un élément `FinancialYear`."},"journalCode":{"type":"integer","format":"int64","description":"Journal. Identifiant d'un élément `JournalCode`.","nullable":true},"accountNumber":{"type":"string","nullable":true},"accountLabel":{"type":"string","minLength":1},"thirdParty":{"type":"integer","format":"int64","description":"Identifiant d'un élément `ThirdParty`.","nullable":true},"date":{"type":"string","format":"date","description":"Date de l'écriture."},"description":{"type":"string","minLength":1},"document":{"type":"string","minLength":1,"nullable":true,"description":"Pièce comptable."},"documentDate":{"type":"string","format":"date","nullable":true,"description":"Date de la pièce comptable."},"amount":{"type":"number","description":"Montant HT."},"type":{"type":"string","enum":["debit","credit"],"description":"Type (débit / crédit). Valeurs : `debit` (Débit), `credit` (Crédit)."},"vatRate":{"type":"number","description":"Taux de TVA."},"vatAccountNumber":{"type":"string","nullable":true},"vatRule":{"type":"string","enum":["vat-std","vat-std-collected","vat-std-deductible","vat-auto-liquidation","vat-0","vat-0-export","vat-0-intracom","vat-hca","vat-hc","vat-non-deductible"],"nullable":true,"description":"Valeurs : `vat-std` (Avec TVA), `vat-std-collected` (Avec TVA (collectée)), `vat-std-deductible` (Avec TVA (déductible)), `vat-non-deductible` (Avec TVA (non déductible)), `vat-auto-liquidation` (TVA auto-liquidée), `vat-0` (Exonéré de TVA), `vat-0-export` (Exonéré de TVA (export hors UE)), `vat-0-intracom` (Exonéré de TVA (livraison intracommunautaire)), `vat-hc` (Hors champ d'application de la TVA), `vat-hca` (Hors chiffre d'affaires)."},"paymentDate":{"type":"string","format":"date","nullable":true,"description":"Date de paiement."},"paymentMethod":{"type":"integer","format":"int64","description":"Mode de paiement. Identifiant d'un élément `PaymentMethod`.","nullable":true},"isOpening":{"type":"boolean"},"operation":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Operation`.","nullable":true},"validatedAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS.","nullable":true},"cashflows":{"type":"array","description":"Références des mouvements bancaires rapprochés de l'écriture, sur une écriture désignée","items":{"type":"integer","format":"int64"}},"assets":{"type":"array","description":"Immobilisations rattachées à l'écriture, sur une écriture désignée. Le lien porte le montant rattaché et ce qu'il dit de l'écriture.","items":{"type":"object","properties":{"asset":{"type":"integer","format":"int64","description":"Référence de l'immobilisation"},"amount":{"type":"number","description":"Montant rattaché"},"mode":{"type":"string","enum":["add","match","amortization","disposal","settlement"],"description":"Une dépense qui a augmenté la valeur brute, une écriture qui justifie une valeur déjà déclarée, un mouvement d'amortissement, la sortie du bilan, ou le règlement de la cession et la bascule de sa TVA"}}}}},"title":"Écritures comptables","description":"Les écritures du livre-journal, en lecture seule : une écriture appartient toujours à un lot équilibré, elle ne se crée donc pas ligne à ligne."}}}}
```

## The Organization object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Organization":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","description":"Le nom de l'organisme"},"type":{"type":"string","enum":["state","operator","region","department","epci","chamber","water-agency","park","gal","association","europe","other"],"description":"Type. Valeurs : `state` (État), `operator` (Opérateur de l'État), `region` (Région), `department` (Département), `epci` (Intercommunalité), `chamber` (Chambre d'agriculture), `water-agency` (Agence de l'eau), `park` (Parc naturel régional), `gal` (GAL), `association` (Association), `europe` (Union européenne), `other` (Autre organisme)."}},"title":"Organismes","description":"Les organismes qu'une aide affichée nomme : celui qui l'accorde, ses financeurs et cofinanceurs, le guichet qui reçoit le dépôt et l'organisme qui l'instruit. Leur contact se lit dans celui de l'aide."}}}}
```

## The Pattern object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Pattern":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"description":"Nom."},"document":{"type":"string","minLength":1,"nullable":true,"description":"Pièce comptable."},"privateShare":{"type":"number","nullable":true,"description":"Part privée."},"privateAccountNumber":{"type":"string","nullable":true},"privateAccountLabel":{"type":"string","minLength":1,"nullable":true},"thirdParties":{"type":"array","items":{"type":"integer","format":"int64"},"description":"Références des tiers rattachés à la trame, qui la font remonter en tête de liste à la saisie et pré-remplissent le champ quand il n'y en a qu'un."},"lines":{"type":"array","description":"Les lignes de la trame, dans l'ordre d'affichage.","items":{"type":"object","properties":{"id":{"type":"integer","format":"int64","nullable":true,"description":"Identifiant de la ligne à modifier, absent pour une ligne à créer"},"position":{"type":"integer","description":"Rang d'affichage, posé d'après l'ordre de la liste envoyée"},"accountNumber":{"type":"string","description":"Compte du plan comptable sur lequel la ligne s'impute"},"accountLabel":{"type":"string","description":"Compte détaillé, qui descend du compte choisi"},"description":{"type":"string","nullable":true,"description":"Libellé repris sur l'écriture produite"},"type":{"type":"string","enum":["debit","credit"],"description":"Sens de la ligne"},"amountMode":{"type":"string","enum":["full","percentage","remaining","vat-complement","fixed-amount"],"description":"Ce que la ligne prend du montant d'entrée : tout, une part, ce qui reste, la TVA des autres lignes, ou un montant fixe"},"amountValue":{"type":"number","nullable":true,"description":"Part du montant en pourcentage, sur une ligne qui en prend une part"},"amountFixed":{"type":"number","nullable":true,"description":"Montant fixe de la ligne, indépendant du montant d'entrée"},"vatRate":{"type":"number","nullable":true,"description":"Taux de TVA, à défaut celui du compte"},"vatCoefficient":{"type":"number","nullable":true,"description":"Part de la TVA effectivement déduite, en pourcentage"},"vatRule":{"type":"string","nullable":true,"description":"Règle de TVA, à défaut celle du compte"}}}},"used":{"type":"integer","description":"Utilisations."},"isDefault":{"type":"boolean"},"status":{"type":"string","enum":["active","inactive"]}},"title":"Trames","description":"Une ventilation enregistrée une fois pour toutes : un montant et une date suffisent ensuite à en tirer plusieurs écritures. Chaque trame porte ses lignes, qui disent le compte, le sens, la part du montant et la TVA, et parfois une part privée et des tiers qui la font remonter à la saisie. Les lignes s'envoient avec la trame et remplacent les précédentes : leur cohérence se juge sur l'ensemble."}}}}
```

## The PatternUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"PatternUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom."},"document":{"type":"string","minLength":1,"nullable":true,"description":"Pièce comptable."},"privateShare":{"type":"number","nullable":true,"description":"Part privée."},"privateAccountNumber":{"type":"string","nullable":true},"privateAccountLabel":{"type":"string","minLength":1,"nullable":true},"status":{"type":"string","enum":["active","inactive"]},"thirdPartiesList":{"type":"array","items":{"type":"integer","format":"int64"},"description":"Références des tiers à rattacher à la trame. La liste envoyée remplace la précédente, et une liste vide les détache tous."},"linesList":{"type":"array","description":"Les lignes de la trame, dans l'ordre où elles s'affichent. La liste envoyée remplace la précédente : une ligne absente est supprimée, une ligne qui porte son identifiant est modifiée, une ligne sans identifiant est créée. Leur cohérence se juge sur l'ensemble, une trame devant couvrir exactement le montant d'entrée.","items":{"type":"object","properties":{"id":{"type":"integer","format":"int64","nullable":true,"description":"Identifiant de la ligne à modifier, absent pour une ligne à créer"},"position":{"type":"integer","description":"Rang d'affichage, posé d'après l'ordre de la liste envoyée"},"accountNumber":{"type":"string","description":"Compte du plan comptable sur lequel la ligne s'impute"},"accountLabel":{"type":"string","description":"Compte détaillé, qui descend du compte choisi"},"description":{"type":"string","nullable":true,"description":"Libellé repris sur l'écriture produite"},"type":{"type":"string","enum":["debit","credit"],"description":"Sens de la ligne"},"amountMode":{"type":"string","enum":["full","percentage","remaining","vat-complement","fixed-amount"],"description":"Ce que la ligne prend du montant d'entrée : tout, une part, ce qui reste, la TVA des autres lignes, ou un montant fixe"},"amountValue":{"type":"number","nullable":true,"description":"Part du montant en pourcentage, sur une ligne qui en prend une part"},"amountFixed":{"type":"number","nullable":true,"description":"Montant fixe de la ligne, indépendant du montant d'entrée"},"vatRate":{"type":"number","nullable":true,"description":"Taux de TVA, à défaut celui du compte"},"vatCoefficient":{"type":"number","nullable":true,"description":"Part de la TVA effectivement déduite, en pourcentage"},"vatRule":{"type":"string","nullable":true,"description":"Règle de TVA, à défaut celle du compte"}}}}},"required":["name","document","privateShare","privateAccountNumber","privateAccountLabel","status","thirdPartiesList","linesList"]}}}}
```

## The PatternWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"PatternWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom."},"document":{"type":"string","minLength":1,"nullable":true,"description":"Pièce comptable."},"privateShare":{"type":"number","nullable":true,"description":"Part privée."},"privateAccountNumber":{"type":"string","nullable":true},"privateAccountLabel":{"type":"string","minLength":1,"nullable":true},"thirdPartiesList":{"type":"array","items":{"type":"integer","format":"int64"},"description":"Références des tiers à rattacher à la trame. La liste envoyée remplace la précédente, et une liste vide les détache tous."},"linesList":{"type":"array","description":"Les lignes de la trame, dans l'ordre où elles s'affichent. La liste envoyée remplace la précédente : une ligne absente est supprimée, une ligne qui porte son identifiant est modifiée, une ligne sans identifiant est créée. Leur cohérence se juge sur l'ensemble, une trame devant couvrir exactement le montant d'entrée.","items":{"type":"object","properties":{"id":{"type":"integer","format":"int64","nullable":true,"description":"Identifiant de la ligne à modifier, absent pour une ligne à créer"},"position":{"type":"integer","description":"Rang d'affichage, posé d'après l'ordre de la liste envoyée"},"accountNumber":{"type":"string","description":"Compte du plan comptable sur lequel la ligne s'impute"},"accountLabel":{"type":"string","description":"Compte détaillé, qui descend du compte choisi"},"description":{"type":"string","nullable":true,"description":"Libellé repris sur l'écriture produite"},"type":{"type":"string","enum":["debit","credit"],"description":"Sens de la ligne"},"amountMode":{"type":"string","enum":["full","percentage","remaining","vat-complement","fixed-amount"],"description":"Ce que la ligne prend du montant d'entrée : tout, une part, ce qui reste, la TVA des autres lignes, ou un montant fixe"},"amountValue":{"type":"number","nullable":true,"description":"Part du montant en pourcentage, sur une ligne qui en prend une part"},"amountFixed":{"type":"number","nullable":true,"description":"Montant fixe de la ligne, indépendant du montant d'entrée"},"vatRate":{"type":"number","nullable":true,"description":"Taux de TVA, à défaut celui du compte"},"vatCoefficient":{"type":"number","nullable":true,"description":"Part de la TVA effectivement déduite, en pourcentage"},"vatRule":{"type":"string","nullable":true,"description":"Règle de TVA, à défaut celle du compte"}}}}},"required":["name","document","privateShare","privateAccountNumber","privateAccountLabel","thirdPartiesList","linesList"]}}}}
```

## The Payment object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Payment":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"source":{"type":"string","enum":["sale","invoice","wallet","invoicing"]},"sale":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Sale`.","nullable":true},"invoice":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Invoice`.","nullable":true},"invoicing":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Invoicing`.","nullable":true},"customer":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Customer`.","nullable":true},"amountIncludingVat":{"type":"number","nullable":true,"description":"Montant réglé."},"method":{"type":"integer","format":"int64","description":"Mode de règlement. Identifiant d'un élément `PaymentMethod`."},"methodName":{"type":"string"},"status":{"type":"string","enum":["not-paid","paid","failed"],"description":"État du paiement. Valeurs : `paid` (Payé), `not-paid` (Non payé), `failed` (Paiement en échec)."},"paidAt":{"type":"string","format":"date","nullable":true,"description":"Date de paiement."},"cash":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Cash`.","nullable":true},"register":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Register`.","nullable":true},"cashStatus":{"type":"string","enum":["waiting","valid","ignored"]}},"title":"Encaissements","description":"Ce qui a été encaissé, toutes ventes et factures confondues : montant, mode de règlement, état et date de règlement. En lecture seule, un règlement appartenant à la transaction qu'il solde : il se pose par les actions de la vente ou de la facture."}}}}
```

## The PaymentMethod object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"PaymentMethod":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"description":"Nom du mode de règlement."},"fqn":{"type":"string","nullable":true},"online":{"type":"boolean"},"status":{"type":"string","enum":["active","inactive","deleted"],"description":"Statut. Valeurs : `active` (Activé), `inactive` (Désactivé)."}},"title":"Modes de règlement","description":"Les modes de règlement acceptés par votre structure (espèces, carte, virement...), référencés par vos ventes, vos cahiers de caisse et vos écritures comptables. Seuls ceux que vous avez ajoutés vous-même peuvent être supprimés."}}}}
```

## The PaymentMethodUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"PaymentMethodUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom du mode de règlement."},"status":{"type":"string","enum":["active","inactive","deleted"],"description":"Statut. Valeurs : `active` (Activé), `inactive` (Désactivé)."}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Les modes de règlement acceptés par votre structure (espèces, carte, virement...), référencés par vos ventes, vos cahiers de caisse et vos écritures comptables. Seuls ceux que vous avez ajoutés vous-même peuvent être supprimés.","additionalProperties":true}}}}
```

## The PaymentMethodWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"PaymentMethodWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom du mode de règlement."}},"required":["name"]}}}}
```

## The Phase object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Phase":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"course":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Course`."},"name":{"type":"string","minLength":1,"maxLength":100},"summary":{"type":"string","minLength":1,"maxLength":250,"nullable":true},"position":{"type":"integer"}},"title":"Phases","description":"Les phases d'une formation de votre groupe, qui rangent ses modules. Les phases se suivent dans l'ordre de leur création. Les phases d'une formation se listent par la route de la formation. Une phase supprimée n'emporte pas ses modules, qui restent dans la formation sans phase."}}}}
```

## The PhaseUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"PhaseUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"summary":{"type":"string","minLength":1,"maxLength":250,"nullable":true}},"required":["name","summary"]}}}}
```

## The PhaseWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"PhaseWrite":{"type":"object","properties":{"course":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Course`."},"name":{"type":"string","minLength":1,"maxLength":100},"summary":{"type":"string","minLength":1,"maxLength":250,"nullable":true}},"required":["course","name","summary"]}}}}
```

## The PhytoProduct object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"PhytoProduct":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"amm":{"type":"string","minLength":1,"maxLength":50},"name":{"type":"string","minLength":1},"otherNames":{"type":"array","description":"Les seconds noms commerciaux sous lesquels le catalogue connaît ce produit","items":{"type":"string"}},"functions":{"type":"string","nullable":true},"formulation":{"type":"string","nullable":true},"organic":{"type":"boolean"},"amateur":{"type":"boolean"},"substances":{"type":"array","description":"Les substances actives du produit, chacune sous son nom international et le nom français le plus court que le catalogue lui donne","items":{"type":"object","properties":{"international":{"type":"string"},"name":{"type":"string"}}}},"status":{"type":"string","enum":["authorized","withdrawn"]},"usableUntil":{"type":"string","format":"date","nullable":true}},"title":"Catalogue E-Phy","description":"Les produits phytopharmaceutiques du catalogue E-Phy de l'ANSES, rechargé chaque semaine : les produits autorisés, et les produits retirés tant qu'un de leurs usages reste utilisable. Ce catalogue est le même pour tout le monde et ne se modifie pas. Le produit que votre structure note est un matériel à routine phyto, qui n'en garde que le numéro d'AMM."}}}}
```

## The PhytoUsage object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"PhytoUsage":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"product":{"type":"integer","format":"int64","description":"Identifiant d'un élément `PhytoProduct`."},"crop":{"type":"string","minLength":1},"treatment":{"type":"string","nullable":true},"target":{"type":"string","nullable":true},"dose":{"type":"number","nullable":true},"doseUnit":{"type":"string","nullable":true},"harvestDelay":{"type":"integer","nullable":true},"plants":{"type":"array","description":"Références des espèces du référentiel partagé que désigne la culture de cet usage, vide tant que le catalogue ne rattache pas cette culture à des espèces","items":{"type":"integer","format":"int64"}}},"title":"Usages du catalogue E-Phy","description":"Ce qu'un produit du catalogue E-Phy est autorisé à traiter : la culture, la cible, la dose et le délai avant récolte. Le catalogue publie une ligne par cible, par mode de traitement et par délai, si bien qu'un même produit sur une même culture en porte souvent plusieurs."}}}}
```

## The Place object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Place":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"season":{"type":"integer"},"series":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Series`.","nullable":true},"task":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Task`.","nullable":true},"zone":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Zone`."},"plot":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Plot`."},"bed":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Bed`."},"length":{"type":"integer","nullable":true},"width":{"type":"integer","nullable":true},"area":{"type":"number","nullable":true}},"title":"Emplacements","description":"L'occupation des planches : une ligne par planche et par série, avec le linéaire et la surface qu'elle y occupe. Une intervention posée hors série y figure aussi, sans dimensions. L'assolement se modifie par les actions de la ressource série."}}}}
```

## The Plant object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Plant":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"fqn":{"type":"string","nullable":true,"description":"Nom qualifié."},"name":{"type":"string","minLength":1,"description":"Nom."},"cycle":{"type":"string","enum":["annual","perennial"],"description":"Cycle de culture. Valeurs : `annual` (culture annuelle), `perennial` (culture pérenne)."},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","description":"Couleur. Couleur hexadécimale."},"family":{"type":"integer","format":"int64","description":"Famille. Identifiant d'un élément `Family`.","nullable":true},"structure":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Structure`.","nullable":true},"usageVegetable":{"type":"boolean"},"usageFruit":{"type":"boolean"},"usageSmallFruit":{"type":"boolean"},"usageFlower":{"type":"boolean"},"usageAromatic":{"type":"boolean"},"usageMushroom":{"type":"boolean"},"usageField":{"type":"boolean"},"reference":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Plant`.","nullable":true},"vignette":{"type":"string","format":"uri","nullable":true,"description":"Adresse de la vignette, ou null si la culture n'en a pas"},"plantsSafetyMargin":{"type":"integer","nullable":true,"description":"Pour le calcul des plants à produire."},"seedsSafetyMargin":{"type":"integer","nullable":true,"description":"Pour le calcul des semences à acheter."},"status":{"type":"string","enum":["active","inactive"]}},"title":"Espèces","description":"Les espèces cultivées par votre structure."}}}}
```

## The PlantUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"PlantUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom."},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","description":"Couleur. Couleur hexadécimale."},"plantsSafetyMargin":{"type":"integer","nullable":true,"description":"Pour le calcul des plants à produire."},"seedsSafetyMargin":{"type":"integer","nullable":true,"description":"Pour le calcul des semences à acheter."}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Les espèces cultivées par votre structure.","additionalProperties":true}}}}
```

## The PlantWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"PlantWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom."},"cycle":{"type":"string","enum":["annual","perennial"],"description":"Cycle de culture. Valeurs : `annual` (culture annuelle), `perennial` (culture pérenne)."},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","description":"Couleur. Couleur hexadécimale."},"family":{"type":"integer","format":"int64","description":"Famille. Identifiant d'un élément `Family`.","nullable":true},"plantsSafetyMargin":{"type":"integer","nullable":true,"description":"Pour le calcul des plants à produire."},"seedsSafetyMargin":{"type":"integer","nullable":true,"description":"Pour le calcul des semences à acheter."}},"required":["name","cycle","color","family","plantsSafetyMargin","seedsSafetyMargin"]}}}}
```

## The Plot object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Plot":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"zone":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Zone`."},"zoneFill":{"type":"boolean"},"name":{"type":"string","minLength":1,"nullable":true,"description":"Nom du jardin."},"mode":{"type":"string","enum":["greenhouse","open-field"]},"length":{"type":"number","nullable":true,"description":"Longueur de l'abri."},"width":{"type":"number","nullable":true,"description":"Largeur de l'abri."},"area":{"type":"integer","description":"Surface du jardin."},"coordinates":{"type":"array","nullable":true,"description":"Contour, en points [longitude, latitude]","items":{"type":"array","minItems":2,"maxItems":2,"items":{"type":"number"}}},"seasonFirst":{"type":"integer","nullable":true,"description":"Jardin exploité depuis."},"seasonLast":{"type":"integer","nullable":true,"description":"Jardin exploité jusqu'à."}},"title":"Jardins","description":"Les jardins d'une parcelle, en plein champ ou couverts par un abri. Un jardin couvert porte les dimensions de son abri, dont se déduit sa surface. Dessiné dans une parcelle elle-même dessinée, il tire ses dimensions de son polygone, qui se modifie seul et les entraîne, et celles qu'on lui envoie sont remplacées. Effacer ce polygone demande d'envoyer aussi les dimensions de l'abri. Un nouveau polygone trop étroit pour un abri est refusé. Un jardin en plein champ dessiné a la surface de son polygone, qui se modifie donc avec lui. Le jardin qui porte les planches posées à même la parcelle se lit, mais ne se modifie ni ne se supprime : il suit sa parcelle. Un jardin ne change pas de parcelle : celle-ci se pose à la création. Couvrir ou découvrir un jardin ne se fait pas par l'API."}}}}
```

## The PlotUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"PlotUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"nullable":true,"description":"Nom du jardin."},"length":{"type":"number","nullable":true,"description":"Longueur de l'abri."},"width":{"type":"number","nullable":true,"description":"Largeur de l'abri."},"area":{"type":"integer","description":"Surface du jardin."},"coordinates":{"type":"array","nullable":true,"description":"Contour, en points [longitude, latitude]","items":{"type":"array","minItems":2,"maxItems":2,"items":{"type":"number"}}},"seasonFirst":{"type":"integer","nullable":true,"description":"Jardin exploité depuis."},"seasonLast":{"type":"integer","nullable":true,"description":"Jardin exploité jusqu'à."}},"required":["name","length","width","area","coordinates","seasonFirst","seasonLast"]}}}}
```

## The PlotWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"PlotWrite":{"type":"object","properties":{"zone":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Zone`."},"name":{"type":"string","minLength":1,"nullable":true,"description":"Nom du jardin."},"mode":{"type":"string","enum":["greenhouse","open-field"]},"length":{"type":"number","nullable":true,"description":"Longueur de l'abri."},"width":{"type":"number","nullable":true,"description":"Largeur de l'abri."},"area":{"type":"integer","description":"Surface du jardin."},"coordinates":{"type":"array","nullable":true,"description":"Contour, en points [longitude, latitude]","items":{"type":"array","minItems":2,"maxItems":2,"items":{"type":"number"}}},"seasonFirst":{"type":"integer","nullable":true,"description":"Jardin exploité depuis."}},"required":["zone","name","mode","length","width","area","coordinates","seasonFirst"]}}}}
```

## The Point object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Point":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1},"type":{"type":"string","enum":["home","place"],"description":"Valeurs : `home` (Livraison à domicile), `place` (Livraison en point de retrait)."},"mode":{"type":"string","enum":["tour","shipping"],"nullable":true},"zone":{"type":"string","minLength":1,"nullable":true,"description":"Zones de livraison."},"description":{"type":"string","minLength":1,"nullable":true},"place":{"type":"string","minLength":1,"nullable":true,"description":"Ville du point de retrait."},"address":{"type":"string","nullable":true,"description":"Adresse du point de retrait."},"paymentCard":{"type":"boolean","nullable":true,"description":"Activer le choix du paiement en ligne par carte bancaire."},"paymentTransfer":{"type":"boolean","nullable":true,"description":"Activer le choix du paiement par virement bancaire."},"paymentOffline":{"type":"boolean","nullable":true,"description":"Activer le choix du paiement en direct."},"paymentWallet":{"type":"boolean","nullable":true,"description":"Activer le choix du paiement avec la cagnotte."},"orderMin":{"type":"integer","nullable":true,"description":"Montant minimal de commande."},"shipping":{"type":"number","nullable":true,"description":"Frais de livraison par commande."},"shippingUntil":{"type":"integer","nullable":true,"description":"Montant minimal de commande au delà duquel les frais de livraison sont offerts."},"status":{"type":"string","enum":["active","deleted"]}},"title":"Points de retrait","description":"Où vos clients récupèrent leur commande : un lieu de retrait, une tournée de livraison ou une expédition. Ils appartiennent à votre structure et se réutilisent d'une boutique à l'autre, chaque vente choisissant ceux qu'elle propose."}}}}
```

## The PointUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"PointUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1},"zone":{"type":"string","minLength":1,"nullable":true,"description":"Zones de livraison."},"description":{"type":"string","minLength":1,"nullable":true},"place":{"type":"string","minLength":1,"nullable":true,"description":"Ville du point de retrait."},"address":{"type":"string","nullable":true,"description":"Adresse du point de retrait."},"paymentTransfer":{"type":"boolean","nullable":true,"description":"Activer le choix du paiement par virement bancaire."},"paymentOffline":{"type":"boolean","nullable":true,"description":"Activer le choix du paiement en direct."},"paymentWallet":{"type":"boolean","nullable":true,"description":"Activer le choix du paiement avec la cagnotte."},"orderMin":{"type":"integer","nullable":true,"description":"Montant minimal de commande."},"shipping":{"type":"number","nullable":true,"description":"Frais de livraison par commande."},"shippingUntil":{"type":"integer","nullable":true,"description":"Montant minimal de commande au delà duquel les frais de livraison sont offerts."}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. Où vos clients récupèrent leur commande : un lieu de retrait, une tournée de livraison ou une expédition. Ils appartiennent à votre structure et se réutilisent d'une boutique à l'autre, chaque vente choisissant ceux qu'elle propose."}}}}
```

## The PointWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"PointWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1},"zone":{"type":"string","minLength":1,"nullable":true,"description":"Zones de livraison."},"description":{"type":"string","minLength":1,"nullable":true},"place":{"type":"string","minLength":1,"nullable":true,"description":"Ville du point de retrait."},"address":{"type":"string","nullable":true,"description":"Adresse du point de retrait."}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. Où vos clients récupèrent leur commande : un lieu de retrait, une tournée de livraison ou une expédition. Ils appartiennent à votre structure et se réutilisent d'une boutique à l'autre, chaque vente choisissant ceux qu'elle propose."}}}}
```

## The Presence object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Presence":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"user":{"type":"integer","format":"int64","description":"Personne. Identifiant d'un élément `User`."},"from":{"type":"string","format":"date","description":"Jour d'arrivée."},"to":{"type":"string","format":"date","nullable":true,"description":"Jour de départ."}},"title":"Présences","description":"Les périodes de présence de chaque membre dans votre structure. Une présence sans date de fin est toujours en cours, et deux périodes ne peuvent pas se chevaucher pour un même utilisateur."}}}}
```

## The PresenceUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"PresenceUpdate":{"type":"object","properties":{"from":{"type":"string","format":"date","description":"Jour d'arrivée."},"to":{"type":"string","format":"date","nullable":true,"description":"Jour de départ."}},"required":["from","to"]}}}}
```

## The PresenceWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"PresenceWrite":{"type":"object","properties":{"user":{"type":"integer","format":"int64","description":"Personne. Identifiant d'un élément `User`."},"from":{"type":"string","format":"date","description":"Jour d'arrivée."},"to":{"type":"string","format":"date","nullable":true,"description":"Jour de départ."}},"required":["user","from","to"]}}}}
```

## The Product object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Product":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1},"additional":{"type":"string","minLength":1,"nullable":true,"description":"Complément d'information."},"description":{"type":"string","nullable":true,"description":"Présentation du produit."},"vignette":{"type":"string","format":"uri","nullable":true,"description":"Adresse de la vignette, ou null si le produit n'en a pas"},"profile":{"type":"string","enum":["composition","plant","animal","food","product","other","service","shipping"],"description":"Type. Valeurs : `plant` (Produit d'origine végétale), `animal` (Produit d'origine animale), `food` (Produit alimentaire transformé), `product` (Produit non alimentaire), `composition` (Produit composé), `other` (Autre produit), `service` (Prestation de service), `shipping` (Frais de livraison)."},"distribution":{"type":"string","enum":["production","resale"],"nullable":true,"description":"Distribution. Valeurs : `production` (Votre production), `resale` (Produit en achat-revente)."},"category":{"type":"integer","format":"int64","description":"Catégorie. Identifiant d'un élément `ProductCategory`.","nullable":true},"reference":{"type":"string","minLength":1,"nullable":true},"compositionVisibility":{"type":"string","enum":["public","private"],"nullable":true,"description":"Affichage de la composition aux clients. Valeurs : `public` (Visible  La composition du produit est affichée aux clients), `private` (Cachée  Les clients ne voient pas la composition du produit)."},"plant":{"type":"integer","format":"int64","description":"Espèce. Identifiant d'un élément `Plant`.","nullable":true},"variety":{"type":"string","minLength":1,"nullable":true,"description":"Variété."},"frozen":{"type":"boolean","nullable":true,"description":"Surgelé  ."},"packaging":{"type":"string","minLength":1,"nullable":true,"description":"Conditionnement."},"allergens":{"type":"string","minLength":1,"nullable":true,"description":"Allergènes."},"ingredients":{"type":"string","minLength":1,"nullable":true,"description":"Composition."},"origin":{"type":"string","minLength":1,"nullable":true,"description":"Origine."},"unit":{"type":"integer","format":"int64","description":"Unité de vente. Identifiant d'un élément `Unit`.","nullable":true},"private":{"type":"boolean","description":"Vente aux clients particuliers."},"privatePrice":{"type":"number","nullable":true,"description":"Prix particulier."},"privatePriceInitial":{"type":"number","nullable":true,"description":"Prix particulier de base."},"privateStep":{"type":"number","nullable":true,"description":"Multiple de vente."},"privatePriceSteps":{"type":"array","items":{},"description":"Remise sur volume."},"pro":{"type":"boolean","description":"Vente aux clients professionnels."},"proPrice":{"type":"number","nullable":true,"description":"Prix professionnel."},"proPriceInitial":{"type":"number","nullable":true,"description":"Prix professionnel de base."},"proPackaging":{"type":"number","nullable":true,"description":"Colis de base."},"proStep":{"type":"number","nullable":true,"description":"Multiple de vente."},"proPriceSteps":{"type":"array","items":{},"description":"Remise sur volume."},"vat":{"type":"integer","description":"Taux de TVA."},"organic":{"type":"string","enum":["no","yes","conversion"],"description":"Valeurs : `no` (Non), `yes` (Oui), `conversion` (En conversion)."},"qualities":{"type":"string"},"stock":{"type":"number","nullable":true},"stockStatus":{"type":"string","enum":["active","inactive"]},"stockLast":{"nullable":true,"description":"Dernier mouvement de stock, ou null si le produit n'en a pas","allOf":[{"$ref":"#/components/schemas/Stock"}]},"stockUpdatedAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS.","nullable":true},"duplicateOf":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Product`.","nullable":true},"privateAccountNumber":{"type":"string","nullable":true},"proAccountNumber":{"type":"string","nullable":true},"status":{"type":"string","enum":["active","inactive","special","deleted"],"description":"Valeurs : `active` (Activé), `inactive` (Désactivé), `deleted` (Supprimé)."}},"title":"Produits","description":"Les produits proposés à la vente par votre structure."},"Stock":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"product":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Product`."},"balance":{"type":"number","nullable":true},"quantity":{"type":"number","nullable":true},"comment":{"type":"string","minLength":1,"nullable":true,"description":"Commentaire."},"createdAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS."}},"title":"Mouvements de stock","description":"L'historique du stock d'un produit : ce qui a été posé ou ajouté, et le solde qui en résulte. Le produit est un filtre obligatoire, la table n'ayant d'index que sur lui. Les mouvements s'écrivent par les gestes de la ressource produit, qui recalculent le solde dans le même passage ; le dernier d'entre eux accompagne le produit sous stockLast."}}}}
```

## The ProductCategory object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ProductCategory":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"description":"Nom de la catégorie."},"icon":{"type":"string","minLength":1,"maxLength":50,"nullable":true,"description":"Icône de la catégorie."},"position":{"type":"integer"}},"title":"Catégories de produits","description":"Les catégories utilisées pour regrouper vos produits sur votre page d'administration et vos boutiques en ligne."}}}}
```

## The ProductCategoryWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ProductCategoryWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom de la catégorie."},"icon":{"type":"string","minLength":1,"maxLength":50,"nullable":true,"description":"Icône de la catégorie."}},"required":["name","icon"]}}}}
```

## The ProductUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ProductUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1},"additional":{"type":"string","minLength":1,"nullable":true,"description":"Complément d'information."},"description":{"type":"string","nullable":true,"description":"Présentation du produit."},"reference":{"type":"string","minLength":1,"nullable":true},"variety":{"type":"string","minLength":1,"nullable":true,"description":"Variété."},"frozen":{"type":"boolean","nullable":true,"description":"Surgelé  ."},"packaging":{"type":"string","minLength":1,"nullable":true,"description":"Conditionnement."},"allergens":{"type":"string","minLength":1,"nullable":true,"description":"Allergènes."},"ingredients":{"type":"string","minLength":1,"nullable":true,"description":"Composition."},"unit":{"type":"integer","format":"int64","description":"Unité de vente. Identifiant d'un élément `Unit`.","nullable":true},"private":{"type":"boolean","description":"Vente aux clients particuliers."},"privatePrice":{"type":"number","nullable":true,"description":"Prix particulier."},"privatePriceInitial":{"type":"number","nullable":true,"description":"Prix particulier de base."},"privateStep":{"type":"number","nullable":true,"description":"Multiple de vente."},"pro":{"type":"boolean","description":"Vente aux clients professionnels."},"proPrice":{"type":"number","nullable":true,"description":"Prix professionnel."},"proPriceInitial":{"type":"number","nullable":true,"description":"Prix professionnel de base."},"proPackaging":{"type":"number","nullable":true,"description":"Colis de base."},"proStep":{"type":"number","nullable":true,"description":"Multiple de vente."},"proOrPrivatePrice":{"description":"Champ accepté en écriture, sans équivalent en lecture."},"discountable":{"type":"boolean","description":"Voulez-vous appliquer les remises commerciales paramétrées pour vos clients et vos ventes à ce produit ?."}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Les produits proposés à la vente par votre structure.","additionalProperties":true}}}}
```

## The ProductWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ProductWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1},"additional":{"type":"string","minLength":1,"nullable":true,"description":"Complément d'information."},"description":{"type":"string","nullable":true,"description":"Présentation du produit."},"profile":{"type":"string","enum":["composition","plant","animal","food","product","other","service","shipping"],"description":"Type. Valeurs : `plant` (Produit d'origine végétale), `animal` (Produit d'origine animale), `food` (Produit alimentaire transformé), `product` (Produit non alimentaire), `composition` (Produit composé), `other` (Autre produit), `service` (Prestation de service), `shipping` (Frais de livraison)."},"distribution":{"type":"string","enum":["production","resale"],"nullable":true,"description":"Distribution. Valeurs : `production` (Votre production), `resale` (Produit en achat-revente)."},"category":{"type":"integer","format":"int64","description":"Catégorie. Identifiant d'un élément `ProductCategory`.","nullable":true},"reference":{"type":"string","minLength":1,"nullable":true},"compositionVisibility":{"type":"string","enum":["public","private"],"nullable":true,"description":"Affichage de la composition aux clients. Valeurs : `public` (Visible  La composition du produit est affichée aux clients), `private` (Cachée  Les clients ne voient pas la composition du produit)."},"plant":{"type":"integer","format":"int64","description":"Espèce. Identifiant d'un élément `Plant`.","nullable":true},"variety":{"type":"string","minLength":1,"nullable":true,"description":"Variété."},"frozen":{"type":"boolean","nullable":true,"description":"Surgelé  ."},"packaging":{"type":"string","minLength":1,"nullable":true,"description":"Conditionnement."},"allergens":{"type":"string","minLength":1,"nullable":true,"description":"Allergènes."},"ingredients":{"type":"string","minLength":1,"nullable":true,"description":"Composition."},"origin":{"type":"string","minLength":1,"nullable":true,"description":"Origine."},"unit":{"type":"integer","format":"int64","description":"Unité de vente. Identifiant d'un élément `Unit`.","nullable":true},"private":{"type":"boolean","description":"Vente aux clients particuliers."},"privatePrice":{"type":"number","nullable":true,"description":"Prix particulier."},"pro":{"type":"boolean","description":"Vente aux clients professionnels."},"proPrice":{"type":"number","nullable":true,"description":"Prix professionnel."},"proPackaging":{"type":"number","nullable":true,"description":"Colis de base."},"vat":{"type":"integer","description":"Taux de TVA."},"organic":{"type":"string","enum":["no","yes","conversion"],"description":"Valeurs : `no` (Non), `yes` (Oui), `conversion` (En conversion)."},"qualities":{"type":"string"},"duplicateOf":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Product`.","nullable":true},"privateAccountNumber":{"type":"string","nullable":true},"proAccountNumber":{"type":"string","nullable":true},"proOrPrivate":{"description":"Champ accepté en écriture, sans équivalent en lecture."},"proPriceDiscount":{"description":"Champ accepté en écriture, sans équivalent en lecture."},"privatePriceDiscount":{"description":"Champ accepté en écriture, sans équivalent en lecture."},"proOrPrivatePrice":{"description":"Champ accepté en écriture, sans équivalent en lecture."}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Les produits proposés à la vente par votre structure.","additionalProperties":true}}}}
```

## The Production object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Production":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"fqn":{"type":"string"},"area":{"type":"number","nullable":true,"description":"Surface en plein champ."},"areaGreenhouse":{"type":"integer","nullable":true,"description":"Surface sous tunnel."},"mechanisation":{"type":"string","enum":["manual","walking-tractor","tractor"],"nullable":true,"description":"Mécanisation. Valeurs : `manual` (Travail manuel), `walking-tractor` (Motoculteur), `tractor` (Tracteur)."},"organic":{"type":"string","enum":["no","yes","conversion"],"description":"Agriculture biologique. Valeurs : `no` (Non), `yes` (Oui), `conversion` (En conversion)."},"startedAt":{"type":"integer","nullable":true,"description":"Année de démarrage."},"description":{"type":"string","minLength":1,"nullable":true,"description":"Description."},"status":{"type":"string","enum":["active","inactive"]}},"title":"Ateliers","description":"Les ateliers de production de votre structure (maraîchage, arboriculture, apiculture…), avec leur surface, leur mécanisation et leur certification."}}}}
```

## The ProductionUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ProductionUpdate":{"type":"object","properties":{"area":{"type":"number","nullable":true,"description":"Surface en plein champ."},"areaGreenhouse":{"type":"integer","nullable":true,"description":"Surface sous tunnel."},"mechanisation":{"type":"string","enum":["manual","walking-tractor","tractor"],"nullable":true,"description":"Mécanisation. Valeurs : `manual` (Travail manuel), `walking-tractor` (Motoculteur), `tractor` (Tracteur)."},"organic":{"type":"string","enum":["no","yes","conversion"],"description":"Agriculture biologique. Valeurs : `no` (Non), `yes` (Oui), `conversion` (En conversion)."},"startedAt":{"type":"integer","nullable":true,"description":"Année de démarrage."},"description":{"type":"string","minLength":1,"nullable":true,"description":"Description."}},"required":["area","areaGreenhouse","mechanisation","organic","startedAt","description"]}}}}
```

## The ProductionWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ProductionWrite":{"type":"object","properties":{"fqn":{"type":"string"},"area":{"type":"number","nullable":true,"description":"Surface en plein champ."},"areaGreenhouse":{"type":"integer","nullable":true,"description":"Surface sous tunnel."},"mechanisation":{"type":"string","enum":["manual","walking-tractor","tractor"],"nullable":true,"description":"Mécanisation. Valeurs : `manual` (Travail manuel), `walking-tractor` (Motoculteur), `tractor` (Tracteur)."},"organic":{"type":"string","enum":["no","yes","conversion"],"description":"Agriculture biologique. Valeurs : `no` (Non), `yes` (Oui), `conversion` (En conversion)."},"startedAt":{"type":"integer","nullable":true,"description":"Année de démarrage."},"description":{"type":"string","minLength":1,"nullable":true,"description":"Description."}},"required":["fqn","area","areaGreenhouse","mechanisation","organic","startedAt","description"]}}}}
```

## The Rain object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Rain":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"gauge":{"type":"integer","format":"int64","description":"Pluviomètre. Identifiant d'un élément `Gauge`."},"date":{"type":"string","format":"date","description":"Date."},"rain":{"type":"number","description":"Pluie."}},"title":"Relevés de pluie","description":"Le total de pluie d'un jour sur un pluviomètre, en mm. Il n'y a qu'un relevé par pluviomètre et par jour. Créer un relevé ajoute au jour au lieu de le remplacer, comme une seconde saisie dans l'écran : envoyer deux fois 12 mm sur la même date laisse 24 mm. Pour fixer un total, modifiez le relevé du jour. Une quantité négative retire des mm à un jour qui en porte déjà autant, et le jour ramené à zéro perd son relevé. La création rend le jour tel qu'il est après l'ajout, avec son total, et non la seule quantité envoyée : elle répond 200, et un jour vidé rend un total de 0 sans identifiant."}}}}
```

## The RainUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"RainUpdate":{"type":"object","properties":{"rain":{"type":"number","description":"Pluie."}},"required":["rain"]}}}}
```

## The RainWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"RainWrite":{"type":"object","properties":{"gauge":{"type":"integer","format":"int64","description":"Pluviomètre. Identifiant d'un élément `Gauge`."},"date":{"type":"string","format":"date","description":"Date."},"rain":{"type":"number","description":"Pluie."}},"required":["gauge","date","rain"]}}}}
```

## The Range object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Range":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"shop":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Shop`."},"structure":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Structure`."},"catalog":{"type":"integer","format":"int64","description":"Catalogue. Identifiant d'un élément `Catalog`."},"department":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Department`.","nullable":true},"status":{"type":"string","enum":["auto","manual"],"description":"Activation. Valeurs : `auto` (Automatique → Catalogue activé par défaut à chaque nouvelle livraison dans la boutique), `manual` (Manuelle → Catalogue à activer manuellement à chaque nouvelle livraison pour autoriser les commandes)."}},"title":"Catalogues en boutique","description":"Le rattachement d'un de vos catalogues à une boutique collective : c'est par là que vos produits arrivent sur l'étal commun. Un rattachement automatique suit les ventes à venir, un rattachement manuel ne vaut que pour celles que vous désignez."}}}}
```

## The RangeUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"RangeUpdate":{"type":"object","properties":{"department":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Department`.","nullable":true},"status":{"type":"string","enum":["auto","manual"],"description":"Activation. Valeurs : `auto` (Automatique → Catalogue activé par défaut à chaque nouvelle livraison dans la boutique), `manual` (Manuelle → Catalogue à activer manuellement à chaque nouvelle livraison pour autoriser les commandes)."}},"required":["department","status"]}}}}
```

## The RangeWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"RangeWrite":{"type":"object","properties":{"catalog":{"type":"integer","format":"int64","description":"Catalogue. Identifiant d'un élément `Catalog`."},"status":{"type":"string","enum":["auto","manual"],"description":"Activation. Valeurs : `auto` (Automatique → Catalogue activé par défaut à chaque nouvelle livraison dans la boutique), `manual` (Manuelle → Catalogue à activer manuellement à chaque nouvelle livraison pour autoriser les commandes)."},"datesList":{"description":"Champ accepté en écriture, sans équivalent en lecture."}},"required":["catalog","status","datesList"]}}}}
```

## The Reconciliation object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Reconciliation":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"source":{"type":"string","enum":["invoice","sale","cash","wallet","invoicing"]},"amount":{"type":"number","description":"Montant à rapprocher."},"paidAt":{"type":"string","format":"date"},"invoice":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Invoice`.","nullable":true},"invoicing":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Invoicing`.","nullable":true},"sale":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Sale`.","nullable":true},"cash":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Cash`.","nullable":true},"wallet":{"type":"integer","format":"int64","description":"Identifiant.","nullable":true},"payment":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Payment`.","nullable":true},"paymentMethod":{"type":"integer","format":"int64","description":"Moyen de paiement. Identifiant d'un élément `PaymentMethod`.","nullable":true},"cashStatus":{"type":"string","enum":["waiting","valid","ignored"]}},"title":"Rapprochements bancaires","description":"Ce à quoi un mouvement bancaire a été rapproché : une facture, une vente, une opération de caisse, un mouvement de cagnotte ou une facture électronique. Un mouvement peut en porter plusieurs, dont les montants se totalisent au sien. Embarqués dans le champ reconciliations d'un mouvement bancaire."}}}}
```

## The Register object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Register":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"accountNumber":{"type":"string","nullable":true},"bankAccountNumber":{"type":"string","nullable":true},"feeAccountNumber":{"type":"string","nullable":true},"paymentMethod":{"type":"integer","format":"int64","description":"Mode de règlement. Identifiant d'un élément `PaymentMethod`."},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","description":"Couleur du cahier. Couleur hexadécimale."},"closing":{"type":"string","enum":["monthly","on-demand"],"description":"Clôture du cahier. Valeurs : `monthly` (Mensuelle), `on-demand` (Libre)."},"balance":{"type":"number"},"operations":{"type":"integer"},"hasAccounts":{"type":"boolean","description":"Enregistrer des numéros de compte pour les opérations de caisse."},"status":{"type":"string","enum":["active","inactive"]},"closedAt":{"type":"string","format":"date","nullable":true}},"title":"Cahier","description":"Les cahiers de caisse de votre structure, chacun rattaché à un mode de règlement."}}}}
```

## The RegisterWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"RegisterWrite":{"type":"object","additionalProperties":true,"description":"Les champs acceptés dépendent de l'élément envoyé et ne peuvent pas être listés ici. Les cahiers de caisse de votre structure, chacun rattaché à un mode de règlement."}}}}
```

## The Reminder object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Reminder":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"week":{"type":"string","pattern":"^[0-9]{4}-W[0-9]{2}$","description":"Quand. Semaine ISO 8601."},"date":{"type":"string","format":"date","nullable":true,"description":"Jour."},"text":{"type":"string","minLength":1,"maxLength":250,"description":"Rappel."},"status":{"type":"string","enum":["todo","done"]},"doneAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS.","nullable":true},"doneBy":{"type":"integer","format":"int64","description":"Identifiant d'un élément `User`.","nullable":true},"updatedAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS.","nullable":true}},"title":"Pense-bête","description":"Les rappels du pense-bête : une ligne de texte rattachée à une semaine, avec un jour en option, qu'on coche une fois faite. Un rappel ne se crée pas dans une semaine passée. Un rappel coché dans une semaine passée ne se corrige plus et ne s'efface plus. La liste rend chaque rappel dans sa semaine, sans le recopier dans les semaines où il reste à faire."}}}}
```

## The ReminderUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ReminderUpdate":{"type":"object","properties":{"date":{"type":"string","format":"date","nullable":true,"description":"Jour."},"text":{"type":"string","minLength":1,"maxLength":250,"description":"Rappel."}},"required":["date","text"]}}}}
```

## The ReminderWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ReminderWrite":{"type":"object","properties":{"week":{"type":"string","pattern":"^[0-9]{4}-W[0-9]{2}$","description":"Quand. Semaine ISO 8601."},"date":{"type":"string","format":"date","nullable":true,"description":"Jour."},"text":{"type":"string","minLength":1,"maxLength":250,"description":"Rappel."}},"required":["week","date","text"]}}}}
```

## The Revision object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Revision":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"financialYear":{"type":"integer","format":"int64","description":"Identifiant d'un élément `FinancialYear`."},"date":{"type":"string","format":"date","description":"Date de la révision."},"type":{"type":"string","enum":["duration","value","residual-value","depreciation"],"description":"Nature. Valeurs : `duration` (Durée d'amortissement), `value` (Valeur de l'immobilisation), `residual-value` (Valeur résiduelle), `depreciation` (Dépréciation)."},"amortizableBase":{"type":"number","description":"Nouvelle base amortissable."},"durationOld":{"type":"integer","nullable":true,"description":"Durée précédente."},"durationNew":{"type":"integer","nullable":true,"description":"Nouvelle durée totale, depuis la mise en service."},"depreciation":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Depreciation`.","nullable":true},"reason":{"type":"string","minLength":1,"maxLength":255,"nullable":true,"description":"Motif."}},"title":"Révisions de plan","description":"Les décisions qui ont modifié le plan d'amortissement d'une immobilisation en cours de vie : durée, valeur, valeur résiduelle ou dépréciation. Chacune est rattachée à l'exercice qui l'a prise et porte la base du segment ouvert à cette date. Embarquées dans le champ revisions d'une immobilisation."}}}}
```

## The Role object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Role":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"maxLength":20,"description":"Nom du rôle."},"fqn":{"type":"string","nullable":true},"visibility":{"type":"string","enum":["public","private"]},"admin":{"type":"boolean"},"planning":{"type":"string","enum":["limited","full","denied"],"description":"Planning. Valeurs : `limited` (Accès restreint), `full` (Accès intégral), `denied` (Accès interdit)."},"selling":{"type":"boolean","description":"Gestion des ventes."},"productionObserve":{"type":"boolean","description":"Consultation des cultures."},"productionAnalyze":{"type":"boolean","description":"Analyse de la production."},"commercialisationAnalyze":{"type":"boolean","description":"Analyse des ventes."},"accounting":{"type":"string","enum":["limited","full","denied"],"description":"Comptabilité. Valeurs : `limited` (Accès restreint), `full` (Accès intégral), `denied` (Accès interdit)."},"accountingAnalyze":{"type":"boolean","description":"Analyse comptable."}},"title":"Rôles","description":"Les rôles que vous attribuez aux membres de votre structure, et les droits que chacun ouvre sur la planification, la vente, les analyses et la comptabilité."}}}}
```

## The RoleWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"RoleWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":20,"description":"Nom du rôle."},"planning":{"type":"string","enum":["limited","full","denied"],"description":"Planning. Valeurs : `limited` (Accès restreint), `full` (Accès intégral), `denied` (Accès interdit)."},"selling":{"type":"boolean","description":"Gestion des ventes."},"productionObserve":{"type":"boolean","description":"Consultation des cultures."},"productionAnalyze":{"type":"boolean","description":"Analyse de la production."},"commercialisationAnalyze":{"type":"boolean","description":"Analyse des ventes."},"accounting":{"type":"string","enum":["limited","full","denied"],"description":"Comptabilité. Valeurs : `limited` (Accès restreint), `full` (Accès intégral), `denied` (Accès interdit)."},"accountingAnalyze":{"type":"boolean","description":"Analyse comptable."}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. Les rôles que vous attribuez aux membres de votre structure, et les droits que chacun ouvre sur la planification, la vente, les analyses et la comptabilité."}}}}
```

## The Sale object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Sale":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"document":{"type":"integer","nullable":true},"customer":{"type":"integer","format":"int64","description":"Client. Identifiant d'un élément `Customer`.","nullable":true},"type":{"type":"string","enum":["private","pro"]},"taxes":{"type":"string","enum":["including","excluding"],"description":"Valeurs : `including` (TTC), `excluding` (HT)."},"hasVat":{"type":"boolean"},"vatApplication":{"type":"string","enum":["normal","intracom","extracom"]},"priceExcludingVat":{"type":"number","nullable":true},"priceIncludingVat":{"type":"number","nullable":true},"vat":{"type":"number"},"discountPercent":{"type":"integer","description":"Remise commerciale (en %)."},"discountValue":{"type":"number","description":"Remise commerciale (en €)."},"shipping":{"type":"number","nullable":true,"description":"Frais de livraison."},"shippingVatRate":{"type":"number","nullable":true,"description":"Taux de TVA sur les frais de livraison."},"itemsCount":{"type":"integer","description":"Nombre de lignes"},"organic":{"type":"boolean"},"conversion":{"type":"boolean"},"nature":{"type":"string","enum":["good","service","mixed"],"nullable":true},"preparationStatus":{"type":"string","enum":["composition","draft","basket","confirmed","selling","prepared","delivered","canceled","expired"],"description":"Statut de préparation. Valeurs : `draft` (Brouillon), `basket` (Panier), `expired` (Expiré), `confirmed` (Confirmé), `selling` (Caisse), `prepared` (Préparé), `delivered` (Livré), `canceled` (Annulé)."},"paymentStatus":{"type":"string","enum":["not-paid","partial-paid","overpaid","paid","never-paid","failed"],"nullable":true,"description":"État du paiement. Valeurs : `paid` (Payé), `not-paid` (Non payé), `partial-paid` (Payé partiellement), `overpaid` (Trop perçu), `failed` (Paiement en échec), `never-paid` (Ne sera pas payé)."},"paymentAmount":{"type":"number","nullable":true},"invoice":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Invoice`.","nullable":true},"shop":{"type":"integer","format":"int64","description":"Boutique. Identifiant d'un élément `Shop`.","nullable":true},"shopDate":{"type":"integer","format":"int64","nullable":true,"description":"Identifiant de la date de livraison de boutique dont la vente est une commande, ou null pour une vente hors boutique"},"shopPoint":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Point`.","nullable":true},"shopComment":{"type":"string","minLength":1,"maxLength":250,"nullable":true},"deliveryStreet1":{"type":"string","nullable":true},"deliveryStreet2":{"type":"string","nullable":true},"deliveryPostcode":{"type":"string","nullable":true},"deliveryCity":{"type":"string","nullable":true},"deliveryCountry":{"type":"integer","format":"int64","description":"Identifiant.","nullable":true},"structure":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Structure`."},"comment":{"type":"string","nullable":true,"description":"Commentaire interne."},"deliveredAt":{"type":"string","format":"date"},"paidAt":{"type":"string","format":"date","nullable":true,"description":"Date de paiement."},"sharedParent":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Sale`.","nullable":true},"sharedCustomer":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Customer`.","nullable":true},"structureName":{"type":"string","description":"Nom du producteur, rendu seulement sur la vente d'un producteur d'une commande groupée"},"items":{"type":"array","description":"Lignes de la vente","items":{"$ref":"#/components/schemas/Item"}},"events":{"type":"array","description":"Historique des changements d'état","items":{"$ref":"#/components/schemas/History"}},"payments":{"type":"array","description":"Règlements enregistrés","items":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"method":{"type":"integer","format":"int64","nullable":true,"description":"Référence du mode de règlement"},"methodName":{"type":"string"},"amountIncludingVat":{"type":"number"},"status":{"type":"string","enum":["not-paid","paid","failed"]},"paidAt":{"type":"string","format":"date","nullable":true}}}}},"title":"Ventes","description":"Vos ventes, avec leurs articles et leur historique. Ses montants se recalculent à chaque changement d'article, et ses changements d'état (confirmer, livrer, annuler…) passent par les actions de la vente."},"Item":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"description":"Désignation."},"reference":{"type":"string","minLength":1,"nullable":true},"additional":{"type":"string","nullable":true,"description":"Complément d'information."},"product":{"type":"integer","format":"int64","description":"Produit. Identifiant d'un élément `Product`.","nullable":true},"unit":{"type":"integer","format":"int64","description":"Unité de vente. Identifiant d'un élément `Unit`.","nullable":true},"packaging":{"type":"number","nullable":true,"description":"Colisage."},"number":{"type":"number","nullable":true,"description":"Quantité."},"unitPrice":{"type":"number","description":"Prix unitaire."},"unitPriceInitial":{"type":"number","nullable":true},"price":{"type":"number","nullable":true,"description":"Montant."},"priceInitial":{"type":"number","nullable":true},"vatRate":{"type":"number","nullable":true,"description":"Taux de TVA."},"vatCode":{"type":"string","enum":["s","z","e","ae","k","g","o"],"nullable":true,"description":"Code de TVA. Valeurs : `s` (Standard), `z` (Taux de TVA à 0), `e` (Exempté de TVA), `ae` (Auto liquidation de TVA), `k` (Exonération pour livraison intracommunautaire), `g` (Exempté de TVA pour Export hors UE), `o` (Hors du périmètre d'application de la TVA)."},"nature":{"type":"string","enum":["good","service","silent"],"description":"Nature de la prestation. Valeurs : `good` (Livraison de bien), `service` (Prestation de service)."},"organic":{"type":"string","enum":["no","yes","conversion"],"description":"Valeurs : `no` (Non), `yes` (Oui), `conversion` (En conversion)."},"qualities":{"type":"string"},"origin":{"type":"string","minLength":1,"nullable":true,"description":"Origine."},"status":{"type":"string","enum":["composition","draft","basket","confirmed","selling","prepared","delivered","canceled","expired"]},"structure":{"type":"integer","format":"int64","description":"Référence du producteur, rendue seulement par la liste des articles d'une commande groupée, sur les articles d'une autre structure"},"accountNumber":{"type":"string","nullable":true,"description":"Numéro de compte comptable de l'article, absent des articles d'une autre structure"},"sale":{"type":"integer","format":"int64","description":"Référence de la vente du producteur, rendue seulement par la liste des articles d'une commande groupée, sur les articles d'une autre structure"},"structureName":{"type":"string","description":"Nom du producteur, rendu avec sa référence"},"unitLabels":{"type":"object","nullable":true,"description":"Libellés de l'unité, rendus avec la référence du producteur, ou null pour un article sans unité","properties":{"singular":{"type":"string"},"plural":{"type":"string"},"short":{"type":"string"}}},"composition":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Sale`.","nullable":true},"ingredients":{"type":"array","description":"Lignes qui composent le panier","items":{"$ref":"#/components/schemas/Item"}}},"title":"Articles de vente","description":"Les articles d'une vente. Un article porte un produit de votre catalogue, ou une désignation libre dont vous fixez la nature et le prix. Il garde le prix retenu au moment de la vente."},"History":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"event":{"type":"string","description":"Nom de l'événement, sous sa forme lisible"},"comment":{"type":"string","nullable":true},"date":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS."}},"title":"Événements de vente","description":"Les changements d'état d'une vente ou d'une facture, de sa création à son règlement. Chaque événement sort sous un identifiant stable (sale-created, sale-delivered) et non sous son libellé, qui est traduit. Embarqués dans le champ events d'une vente ou d'une facture."}}}}
```

## The SaleUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"SaleUpdate":{"type":"object","properties":{"comment":{"type":"string","nullable":true,"description":"Commentaire interne."}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Vos ventes, avec leurs articles et leur historique. Ses montants se recalculent à chaque changement d'article, et ses changements d'état (confirmer, livrer, annuler…) passent par les actions de la vente.","additionalProperties":true}}}}
```

## The SaleWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"SaleWrite":{"type":"object","properties":{"customer":{"type":"integer","format":"int64","description":"Client. Identifiant d'un élément `Customer`.","nullable":true},"shipping":{"type":"number","nullable":true,"description":"Frais de livraison."},"preparationStatus":{"type":"string","enum":["composition","draft","basket","confirmed","selling","prepared","delivered","canceled","expired"],"description":"Statut de préparation. Valeurs : `draft` (Brouillon), `basket` (Panier), `expired` (Expiré), `confirmed` (Confirmé), `selling` (Caisse), `prepared` (Préparé), `delivered` (Livré), `canceled` (Annulé)."},"deliveredAt":{"type":"string","format":"date"},"productsList":{"description":"Champ accepté en écriture, sans équivalent en lecture."},"source":{"description":"Champ accepté en écriture, sans équivalent en lecture."},"catalogs":{"type":"object","nullable":true,"description":"Choisir les catalogues proposés à la vente."}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Vos ventes, avec leurs articles et leur historique. Ses montants se recalculent à chaque changement d'article, et ses changements d'état (confirmer, livrer, annuler…) passent par les actions de la vente.","additionalProperties":true}}}}
```

## The SellingConfiguration object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"SellingConfiguration":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"defaultVat":{"type":"integer","nullable":true,"description":"Taux de TVA par défaut sur vos produits."},"defaultVatShipping":{"type":"integer","nullable":true,"description":"Taux de TVA par défaut sur les frais de livraison."},"defaultElectronicAddress":{"type":"string","nullable":true},"marketSaleClosing":{"type":"integer","description":"Clôture des ventes de la caisse."},"marketSalePaymentMethod":{"type":"integer","format":"int64","description":"Moyen de paiement par défaut. Identifiant d'un élément `PaymentMethod`.","nullable":true},"marketSaleDefaultDecimal":{"type":"string","enum":["number","price"],"description":"Quelle valeur voulez-vous saisir par défaut dans la caisse enregistreuse pour les produits vendus au poids ?. Valeurs : `number` (Saisir la quantité par défaut), `price` (Saisir le prix par défaut)."},"marketSaleGroup":{"type":"string","enum":["category"],"nullable":true,"description":"Groupage des produits dans la caisse. Valeurs : `category` (Grouper par catégorie)."},"marketReceiptRollSize":{"type":"string","enum":["size-57","size-80"],"description":"Quelle largeur souhaitez-vous utiliser pour l'impression du ticket de caisse ?. Valeurs : `size-57` (57mm), `size-80` (80mm)."},"marketRound":{"type":"boolean","description":"Activer la possibilité d'arrondir les ventes aux 10 centimes inférieurs."}},"title":"Configuration des ventes","description":"Les réglages des ventes de votre structure : taux de TVA proposés par défaut, adresse de facturation électronique, et pour une structure de production les paramètres de vente au marché. Une seule fiche par structure, en lecture seule."}}}}
```

## The Sequence object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Sequence":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"description":"Nom de l'itinéraire technique."},"description":{"type":"string","nullable":true,"description":"Description de l'itinéraire technique."},"comment":{"type":"string","nullable":true},"cycle":{"type":"string","enum":["annual","perennial"],"description":"Cycle de culture. Valeurs : `annual` (Culture annuelle), `perennial` (Culture pérenne)."},"perennialLifetime":{"type":"integer","nullable":true},"plants":{"type":"integer"},"use":{"type":"string","enum":["bed","block"],"description":"Utilisation du sol. Valeurs : `bed` (Culture sur planches), `block` (Culture sur surface libre)."},"bedWidth":{"type":"integer","nullable":true,"description":"Largeur de planche."},"alleyWidth":{"type":"integer","nullable":true,"description":"Largeur de passe-pieds entre les planches."},"mode":{"type":"string","enum":["greenhouse","open-field","mix"],"description":"Mode de culture. Valeurs : `greenhouse` (Sous abri), `open-field` (Plein champ), `mix` (Mixte)."},"visibility":{"type":"string","enum":["private","public"],"description":"Visibilité. Valeurs : `private` (Privé), `public` (Public)."},"status":{"type":"string","enum":["active","closed"]}},"title":"Itinéraires","description":"Un modèle de culture, annuel ou pérenne, dont on déroule des séries. Les espèces qu'il réunit s'envoient à sa création et ne se changent plus ensuite."}}}}
```

## The SequenceSlice object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"SequenceSlice":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"variety":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Variety`."},"partPercent":{"type":"number","nullable":true}},"title":"Variétés d'une espèce d'itinéraire","description":"La part d'une variété dans une espèce d'itinéraire, en pourcentage. Se pose et se retire avec l'espèce qui la porte."}}}}
```

## The SequenceUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"SequenceUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom de l'itinéraire technique."},"description":{"type":"string","nullable":true,"description":"Description de l'itinéraire technique."},"perennialLifetime":{"type":"integer","nullable":true},"use":{"type":"string","enum":["bed","block"],"description":"Utilisation du sol. Valeurs : `bed` (Culture sur planches), `block` (Culture sur surface libre)."},"bedWidth":{"type":"integer","nullable":true,"description":"Largeur de planche."},"alleyWidth":{"type":"integer","nullable":true,"description":"Largeur de passe-pieds entre les planches."},"mode":{"type":"string","enum":["greenhouse","open-field","mix"],"description":"Mode de culture. Valeurs : `greenhouse` (Sous abri), `open-field` (Plein champ), `mix` (Mixte)."},"visibility":{"type":"string","enum":["private","public"],"description":"Visibilité. Valeurs : `private` (Privé), `public` (Public)."}},"required":["name","description","perennialLifetime","use","bedWidth","alleyWidth","mode","visibility"]}}}}
```

## The SequenceWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"SequenceWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom de l'itinéraire technique."},"description":{"type":"string","nullable":true,"description":"Description de l'itinéraire technique."},"cycle":{"type":"string","enum":["annual","perennial"],"description":"Cycle de culture. Valeurs : `annual` (Culture annuelle), `perennial` (Culture pérenne)."},"perennialLifetime":{"type":"integer","nullable":true},"use":{"type":"string","enum":["bed","block"],"description":"Utilisation du sol. Valeurs : `bed` (Culture sur planches), `block` (Culture sur surface libre)."},"bedWidth":{"type":"integer","nullable":true,"description":"Largeur de planche."},"alleyWidth":{"type":"integer","nullable":true,"description":"Largeur de passe-pieds entre les planches."},"plantsList":{"description":"Champ accepté en écriture, sans équivalent en lecture."}},"required":["name","description","cycle","perennialLifetime","use","bedWidth","alleyWidth","plantsList"]}}}}
```

## The Series object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Series":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"description":"Nom de la série."},"season":{"type":"integer","description":"Saison."},"use":{"type":"string","enum":["bed","block"],"description":"Utilisation du sol. Valeurs : `bed` (Culture sur planches), `block` (Culture sur surface libre)."},"mode":{"type":"string","enum":["greenhouse","open-field","mix"],"description":"Mode de culture. Valeurs : `greenhouse` (Sous abri), `open-field` (Plein champ), `mix` (Mixte)."},"area":{"type":"integer","nullable":true},"areaTarget":{"type":"integer","nullable":true,"description":"Objectif de surface."},"length":{"type":"integer","nullable":true},"lengthTarget":{"type":"integer","nullable":true,"description":"Objectif de surface."},"bedWidth":{"type":"integer","nullable":true,"description":"Largeur travaillée de planche."},"alleyWidth":{"type":"integer","nullable":true,"description":"Largeur de passe-pieds."},"bedStartCalculated":{"type":"integer","nullable":true},"bedStopCalculated":{"type":"integer","nullable":true},"comment":{"type":"string","nullable":true},"sequence":{"type":"integer","format":"int64","description":"Itinéraire technique. Identifiant d'un élément `Sequence`.","nullable":true},"cycle":{"type":"string","enum":["annual","perennial"],"description":"Cycle de culture. Valeurs : `annual` (Culture annuelle), `perennial` (Culture pérenne)."},"perennialLifetime":{"type":"integer","nullable":true},"perennialSeason":{"type":"integer","nullable":true},"perennialFirst":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Series`.","nullable":true},"perennialStatus":{"type":"string","enum":["growing","continued","finished"],"nullable":true},"duplicateOf":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Series`.","nullable":true},"status":{"type":"string","enum":["open","closed"]},"outcome":{"type":"string","enum":["success","failure","canceled","mixed"],"nullable":true,"description":"Dénouement. Valeurs : `success` (Réussie), `mixed` (Mitigée), `failure` (Ratée), `canceled` (Annulée)."},"cultivations":{"type":"array","description":"Cultures de la série, demandées par withCultivations","items":{"$ref":"#/components/schemas/Cultivation"}}},"title":"Séries","description":"Les séries de votre plan de culture : un regroupement de cultures menées ensemble, sur les mêmes emplacements (planches), pour une saison donnée."},"Cultivation":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"series":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Series`."},"season":{"type":"integer"},"plant":{"type":"integer","format":"int64","description":"Espèce. Identifiant d'un élément `Plant`."},"distance":{"type":"string","enum":["spacing","density"]},"rows":{"type":"integer","nullable":true,"description":"Nombre de rangs par planche."},"rowSpacing":{"type":"number","nullable":true,"description":"Espace inter-rangs."},"plantSpacing":{"type":"number","nullable":true,"description":"Espace sur le rang."},"density":{"type":"number","nullable":true,"description":"Densité d'implantation."},"varietiesUnit":{"type":"string","enum":["percent","area","length","plant","tray"]},"varietiesTool":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Tool`.","nullable":true},"area":{"type":"integer","nullable":true},"areaPermanent":{"type":"integer","nullable":true},"length":{"type":"integer","nullable":true},"lengthPermanent":{"type":"integer","nullable":true},"seedling":{"type":"string","enum":["sowing","young-plant","young-plant-bought"],"nullable":true,"description":"Implantation. Valeurs : `sowing` (Semis direct), `young-plant` (Plant autoproduit), `young-plant-bought` (Plant acheté)."},"seedlingSeeds":{"type":"integer","nullable":true,"description":"Nombre de graines par plantNombre de graines par trou."},"harvestedByUnit":{"type":"object","nullable":true},"mainUnit":{"type":"string","enum":["kg","unit","bunch"],"description":"Unité de récolte principale. Valeurs : `kg` (kg), `bunch` (botte), `unit` (pièce)."},"unitWeight":{"type":"number","nullable":true,"description":"Poids d'une unité."},"bunchWeight":{"type":"number","nullable":true,"description":"Poids d'une botte."},"yieldExpected":{"type":"number","nullable":true,"description":"Objectif de rendement."},"harvestMonths":{"type":"object","nullable":true,"description":"Mois de récolte."},"harvestWeeks":{"type":"object","nullable":true,"description":"Semaines de récolte."},"harvestPeriodExpected":{"type":"string","enum":["week","month"]},"harvestMonthsExpected":{"type":"object","nullable":true,"description":"Mois de récolte attendus."},"harvestWeeksExpected":{"type":"object","nullable":true,"description":"Semaines de récolte attendues."},"varieties":{"type":"array","description":"Répartition des variétés de la culture, une part par variété","items":{"$ref":"#/components/schemas/SeriesSlice"}}},"title":"Mises en culture","description":"La culture d'une variété au sein d'une série, sur une saison donnée (surface, densité, dates, itinéraire technique)."},"SeriesSlice":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"variety":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Variety`."},"partPercent":{"type":"number","nullable":true},"partArea":{"type":"integer","nullable":true},"partLength":{"type":"integer","nullable":true},"partPlant":{"type":"integer","nullable":true},"partTray":{"type":"number","nullable":true}},"title":"Répartitions de culture","description":"La part (en %, m², mL, nombre de plants ou de plateaux) qu'une variété occupe au sein d'une mise en culture, sur les différentes planches d'une série."}}}}
```

## The SeriesSlice object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"SeriesSlice":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"variety":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Variety`."},"partPercent":{"type":"number","nullable":true},"partArea":{"type":"integer","nullable":true},"partLength":{"type":"integer","nullable":true},"partPlant":{"type":"integer","nullable":true},"partTray":{"type":"number","nullable":true}},"title":"Répartitions de culture","description":"La part (en %, m², mL, nombre de plants ou de plateaux) qu'une variété occupe au sein d'une mise en culture, sur les différentes planches d'une série."}}}}
```

## The SeriesUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"SeriesUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom de la série."},"season":{"type":"integer","description":"Saison."},"use":{"type":"string","enum":["bed","block"],"description":"Utilisation du sol. Valeurs : `bed` (Culture sur planches), `block` (Culture sur surface libre)."},"mode":{"type":"string","enum":["greenhouse","open-field","mix"],"description":"Mode de culture. Valeurs : `greenhouse` (Sous abri), `open-field` (Plein champ), `mix` (Mixte)."},"areaTarget":{"type":"integer","nullable":true,"description":"Objectif de surface."},"lengthTarget":{"type":"integer","nullable":true,"description":"Objectif de surface."},"bedWidth":{"type":"integer","nullable":true,"description":"Largeur travaillée de planche."},"alleyWidth":{"type":"integer","nullable":true,"description":"Largeur de passe-pieds."},"sequence":{"type":"integer","format":"int64","description":"Itinéraire technique. Identifiant d'un élément `Sequence`.","nullable":true},"perennialLifetime":{"type":"integer","nullable":true}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. Les séries de votre plan de culture : un regroupement de cultures menées ensemble, sur les mêmes emplacements (planches), pour une saison donnée."}}}}
```

## The SeriesWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"SeriesWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom de la série."},"season":{"type":"integer","description":"Saison."},"use":{"type":"string","enum":["bed","block"],"description":"Utilisation du sol. Valeurs : `bed` (Culture sur planches), `block` (Culture sur surface libre)."},"mode":{"type":"string","enum":["greenhouse","open-field","mix"],"description":"Mode de culture. Valeurs : `greenhouse` (Sous abri), `open-field` (Plein champ), `mix` (Mixte)."},"areaTarget":{"type":"integer","nullable":true,"description":"Objectif de surface."},"lengthTarget":{"type":"integer","nullable":true,"description":"Objectif de surface."},"bedWidth":{"type":"integer","nullable":true,"description":"Largeur travaillée de planche."},"alleyWidth":{"type":"integer","nullable":true,"description":"Largeur de passe-pieds."},"sequence":{"type":"integer","format":"int64","description":"Itinéraire technique. Identifiant d'un élément `Sequence`.","nullable":true},"cycle":{"type":"string","enum":["annual","perennial"],"description":"Cycle de culture. Valeurs : `annual` (Culture annuelle), `perennial` (Culture pérenne)."}},"required":["name","season","use","mode","areaTarget","lengthTarget","bedWidth","alleyWidth","sequence","cycle"]}}}}
```

## The Share object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Share":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"shop":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Shop`."},"structure":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Structure`."},"structureName":{"type":"string","description":"Nom du producteur, tel que la boutique l'affiche"},"label":{"type":"string","minLength":1,"maxLength":50,"nullable":true,"description":"Activité."},"paymentMethod":{"type":"integer","format":"int64","description":"Mode de règlement. Identifiant d'un élément `PaymentMethod`.","nullable":true},"position":{"type":"integer"}},"title":"Producteurs","description":"Les producteurs qui vendent sur une boutique collective. Celui qui la tient les voit tous et choisit sous quel libellé chacun apparaît ; un producteur ne voit que la sienne et y choisit son mode de règlement (paymentMethod), que lui seul reçoit. Rejoindre une boutique se fait avec un code d'invitation, hors API."}}}}
```

## The ShareWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ShareWrite":{"type":"object","additionalProperties":true,"description":"Les champs acceptés dépendent de l'élément envoyé et ne peuvent pas être listés ici. Les producteurs qui vendent sur une boutique collective. Celui qui la tient les voit tous et choisit sous quel libellé chacun apparaît ; un producteur ne voit que la sienne et y choisit son mode de règlement (paymentMethod), que lui seul reçoit. Rejoindre une boutique se fait avec un code d'invitation, hors API."}}}}
```

## The SharedSale object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"SharedSale":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"customer":{"type":"integer","format":"int64","description":"Client. Identifiant d'un élément `Customer`.","nullable":true},"deliveredAt":{"type":"string","format":"date"},"shop":{"type":"integer","format":"int64","description":"Boutique. Identifiant d'un élément `Shop`.","nullable":true},"shopDate":{"type":"integer","format":"int64","description":"Associer à. Identifiant d'un élément `ShopDate`.","nullable":true},"shopPoint":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Point`.","nullable":true},"shopComment":{"type":"string","minLength":1,"maxLength":250,"nullable":true},"type":{"type":"string","enum":["private","pro"]},"taxes":{"type":"string","enum":["including","excluding"],"description":"Valeurs : `including` (TTC), `excluding` (HT)."},"hasVat":{"type":"boolean"},"priceExcludingVat":{"type":"number","nullable":true},"priceIncludingVat":{"type":"number","nullable":true},"salesCount":{"type":"integer","description":"Nombre de ventes regroupées"},"preparationStatus":{"type":"string","enum":["composition","draft","basket","confirmed","selling","prepared","delivered","canceled","expired"],"description":"Statut de préparation. Valeurs : `draft` (Brouillon), `basket` (Panier), `expired` (Expiré), `confirmed` (Confirmé), `selling` (Caisse), `prepared` (Préparé), `delivered` (Livré), `canceled` (Annulé)."},"paymentStatus":{"type":"string","enum":["not-paid","partial-paid","overpaid","paid","never-paid","failed"],"nullable":true,"description":"État du paiement. Valeurs : `paid` (Payé), `not-paid` (Non payé), `partial-paid` (Payé partiellement), `overpaid` (Trop perçu), `failed` (Paiement en échec), `never-paid` (Ne sera pas payé)."},"paymentAmount":{"type":"number","nullable":true},"paidAt":{"type":"string","format":"date","nullable":true,"description":"Date de paiement."},"comment":{"type":"string","nullable":true,"description":"Commentaire interne."}},"title":"Commandes de boutique collective","description":"Les commandes passées sur une boutique collective, tenue pour plusieurs producteurs, vues par la structure qui la tient. Une commande n'a pas d'articles à elle : son contenu est réparti en autant de ventes que de producteurs concernés, et ses totaux en sont la somme."}}}}
```

## The Shop object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Shop":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"description":"Nom de la boutique."},"fqn":{"type":"string","description":"Adresse internet."},"structure":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Structure`."},"role":{"type":"string","enum":["owner","participant"],"description":"Votre position sur cette boutique : owner si elle vous appartient, participant si vous l'avez rejointe"},"type":{"type":"string","enum":["private","pro"],"description":"Grille tarifaire. Valeurs : `pro` (Professionnels), `private` (Particuliers)."},"shared":{"type":"boolean"},"status":{"type":"string","enum":["open","closed","deleted"]},"logo":{"type":"string","format":"uri","nullable":true,"description":"Adresse du logo, ou null si la boutique n'en a pas"},"banner":{"type":"string","format":"uri","nullable":true,"description":"Adresse de la bannière, ou null si la boutique n'en a pas"},"email":{"type":"string","format":"email","nullable":true,"description":"Adresse e-mail de contact pour les clients."},"description":{"type":"string","nullable":true,"description":"Description de la boutiqueNous vous recommandons de préciser dans la description :une présentation de votre activitéles modalités pour récupérer les commandesles modes de règlements autorisésSeul le premier paragraphe sera visible immédiatement sur les petits écrans."},"terms":{"type":"string","nullable":true,"description":"Vos conditions générales de vente."},"termsField":{"type":"boolean","description":"Demander à vos clients d'accepter explicitement les conditions générales de vente avec une case à cocher."},"openingFrequencySeveral":{"type":"boolean","description":"Permettre aux clients de passer plusieurs commandes par livraison."},"openingDelivery":{"type":"string","nullable":true,"description":"Modalités de livraison après la commandeLes modalités de livraison seront indiquées aux clients au moment de la prise de commande."},"hasPoint":{"type":"boolean","description":"Activer le choix du mode de livraisonChoisissez si vos clients doivent choisir explicitement un mode de livraison sur votre boutique, parmi ceux que vous avez définis. Si vous désactivez ce choix, vous simplifiez l'interface de commande en ligne mais vous devez communiquer l'information directement à vos clients."},"hasPayment":{"type":"boolean"},"paymentCard":{"type":"boolean","description":"Activer le choix du paiement en ligne par carte bancaire."},"paymentTransfer":{"type":"boolean","description":"Activer le choix du paiement par virement bancaire."},"paymentTransferHow":{"type":"string","minLength":1,"nullable":true,"description":"Modalités du paiement par virement bancaire."},"paymentOffline":{"type":"boolean","description":"Activer le choix du paiement en direct."},"paymentOfflineHow":{"type":"string","minLength":1,"nullable":true,"description":"Modalités du paiement en direct."},"paymentWallet":{"type":"boolean","description":"Activer le choix du paiement avec la cagnotte."},"orderMin":{"type":"integer","nullable":true,"description":"Montant minimal de commande."},"shipping":{"type":"number","nullable":true,"description":"Frais de livraison par commande."},"shippingUntil":{"type":"integer","nullable":true,"description":"Montant minimal de commande au delà duquel les frais de livraison sont offerts."},"anonymous":{"type":"boolean","description":"Permettre à vos clients de commander sans avoir à créer de compte sur Ouvretaferme."},"approximate":{"type":"boolean","description":"Indiquer aux clients que le montant de leur commande affiché sur le site est approximatif s'il y a des produits qui nécessitent une pesée."},"productInput":{"type":"string","enum":["plus-minus","text"],"description":"Choix des quantités par vos clients. Valeurs : `plus-minus` (Uniquement par    et  ), `text` (Laisser les clients saisir les quantités)."},"outOfStock":{"type":"string","enum":["show","hide"],"description":"Afficher des produits en rupture de stock. Valeurs : `show` (Montrer ces produits aux clients assortis d'une mention Rupture de stock), `hide` (Cacher ces produits aux clients)."},"datesNotOpen":{"type":"string","enum":["next","all","hide"],"description":"Livraisons dont la prise de commandes n'est pas encore ouverte. Valeurs : `next` (Montrer seulement la prochaine à ouvrir), `all` (Les montrer toutes), `hide` (Ne pas les montrer)."},"accurateStock":{"type":"boolean","description":"Afficher les quantités disponibles des produits aux clients."},"preserveCategory":{"type":"boolean","description":"Ranger les produits par catégorie à l'affichage."},"comment":{"type":"boolean","description":"Permettre à vos clients de laisser un commentaire lors d'une commande."},"commentCaption":{"type":"string","nullable":true,"description":"Instructions à communiquer à vos clients pour remplir le commentaire."},"embedOnly":{"type":"boolean","description":"Comment vos clients peuvent-ils accéder à votre boutique pour commander ?."},"embedUrl":{"type":"string","format":"uri","nullable":true,"description":"Adresse de votre site internet."},"customColor":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","description":"Couleur contrastante. Couleur hexadécimale."},"customBackground":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","description":"Couleur d'arrière plan. Couleur hexadécimale."},"customTitleFont":{"type":"string","nullable":true,"description":"Police pour le titre principal des pages."},"customFont":{"type":"string","nullable":true,"description":"Police pour le texte."},"customTabs":{"type":"boolean"},"customDisplay":{"type":"string","enum":["line","grid"],"description":"Disposition des produits. Valeurs : `grid` (Grille adaptée à la largeur de l'écran), `line` (Une ligne par produit)."},"customDesign":{"type":"integer","format":"int64","description":"Thème graphique. Identifiant."},"limitCustomers":{"type":"array","items":{}},"limitGroups":{"type":"array","items":{}},"emailNewSale":{"type":"boolean"},"emailEndDate":{"type":"boolean"},"sharedGroup":{"type":"string","enum":["structure","department","product"],"nullable":true,"description":"Groupage des produits sur la boutique. Valeurs : `structure` (Grouper par producteur), `department` (Grouper par rayon), `product` (Ne pas grouper les produits)."},"sharedExport":{"type":"string","enum":["sale","customer"],"nullable":true,"description":"Génération des étiquettes lors de l'export des ventes au format PDF. Valeurs : `sale` (Dissocier les achats d'un client sur une étiquette par producteur), `customer` (Grouper les achats d'un client sur une même étiquette)."}},"title":"Boutiques","description":"Vos boutiques en ligne, celles que vous tenez comme celles que vous avez rejointes. Le champ role dit de quel côté vous êtes : propriétaire, vous la paramétrez ; participant, vous y vendez sans la modifier. Une boutique collective (shared) réunit les produits de plusieurs producteurs sur un même étal. Les e-mails de suivi et les clients autorisés (emailNewSale, emailEndDate, limitCustomers, limitGroups) ne sont rendus qu'au propriétaire, comme, sur une boutique collective, le groupage des produits et les étiquettes (sharedGroup, sharedExport)."}}}}
```

## The ShopDate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ShopDate":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"shop":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Shop`."},"structure":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Structure`."},"type":{"type":"string","enum":["private","pro"]},"status":{"type":"string","enum":["active","inactive","closed"],"description":"Statut."},"orderStartAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Ouverture des commandes. Date et heure, au format AAAA-MM-JJ HH:MM:SS.","nullable":true},"orderEndAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Fin des commandes. Date et heure, au format AAAA-MM-JJ HH:MM:SS.","nullable":true},"deliveryDate":{"type":"string","format":"date","nullable":true,"description":"Livraison des commandes."},"description":{"type":"string","nullable":true,"description":"Complément d'information."},"points":{"type":"array","items":{},"description":"Modes de livraison activés."},"catalogs":{"type":"array","items":{},"nullable":true,"description":"Choisir les catalogues proposés à la vente."},"isOrderable":{"type":"boolean","description":"Indique si les commandes sont ouvertes en ce moment"}},"title":"Ventes de boutique","description":"Les périodes pendant lesquelles vos clients commandent, et la date à laquelle ils sont livrés. Une boutique ouverte en permanence n'en a qu'une ; une boutique à fréquence en a autant que d'ouvertures. Sur une boutique collective, elles appartiennent à qui la tient."}}}}
```

## The ShopDateUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ShopDateUpdate":{"type":"object","properties":{"orderStartAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Ouverture des commandes. Date et heure, au format AAAA-MM-JJ HH:MM:SS.","nullable":true},"orderEndAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Fin des commandes. Date et heure, au format AAAA-MM-JJ HH:MM:SS.","nullable":true},"deliveryDate":{"type":"string","format":"date","nullable":true,"description":"Livraison des commandes."},"description":{"type":"string","nullable":true,"description":"Complément d'information."},"catalogs":{"type":"array","items":{},"nullable":true,"description":"Choisir les catalogues proposés à la vente."}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Les périodes pendant lesquelles vos clients commandent, et la date à laquelle ils sont livrés. Une boutique ouverte en permanence n'en a qu'une ; une boutique à fréquence en a autant que d'ouvertures. Sur une boutique collective, elles appartiennent à qui la tient.","additionalProperties":true}}}}
```

## The ShopDateWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ShopDateWrite":{"type":"object","properties":{"orderStartAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Ouverture des commandes. Date et heure, au format AAAA-MM-JJ HH:MM:SS.","nullable":true},"orderEndAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Fin des commandes. Date et heure, au format AAAA-MM-JJ HH:MM:SS.","nullable":true},"deliveryDate":{"type":"string","format":"date","nullable":true,"description":"Livraison des commandes."},"points":{"type":"array","items":{},"description":"Modes de livraison activés."},"catalogs":{"type":"array","items":{},"nullable":true,"description":"Choisir les catalogues proposés à la vente."},"continuous":{"description":"Champ accepté en écriture, sans équivalent en lecture."},"source":{"description":"Champ accepté en écriture, sans équivalent en lecture."}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Les périodes pendant lesquelles vos clients commandent, et la date à laquelle ils sont livrés. Une boutique ouverte en permanence n'en a qu'une ; une boutique à fréquence en a autant que d'ouvertures. Sur une boutique collective, elles appartiennent à qui la tient.","additionalProperties":true}}}}
```

## The ShopWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ShopWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom de la boutique."},"fqn":{"type":"string","description":"Adresse internet."},"type":{"type":"string","enum":["private","pro"],"description":"Grille tarifaire. Valeurs : `pro` (Professionnels), `private` (Particuliers)."},"email":{"type":"string","format":"email","nullable":true,"description":"Adresse e-mail de contact pour les clients."},"description":{"type":"string","nullable":true,"description":"Description de la boutiqueNous vous recommandons de préciser dans la description :une présentation de votre activitéles modalités pour récupérer les commandesles modes de règlements autorisésSeul le premier paragraphe sera visible immédiatement sur les petits écrans."},"openingFrequencySeveral":{"type":"boolean","description":"Permettre aux clients de passer plusieurs commandes par livraison."},"openingDelivery":{"type":"string","nullable":true,"description":"Modalités de livraison après la commandeLes modalités de livraison seront indiquées aux clients au moment de la prise de commande."},"hasPoint":{"type":"boolean","description":"Activer le choix du mode de livraisonChoisissez si vos clients doivent choisir explicitement un mode de livraison sur votre boutique, parmi ceux que vous avez définis. Si vous désactivez ce choix, vous simplifiez l'interface de commande en ligne mais vous devez communiquer l'information directement à vos clients."},"orderMin":{"type":"integer","nullable":true,"description":"Montant minimal de commande."},"shipping":{"type":"number","nullable":true,"description":"Frais de livraison par commande."},"shippingUntil":{"type":"integer","nullable":true,"description":"Montant minimal de commande au delà duquel les frais de livraison sont offerts."},"anonymous":{"type":"boolean","description":"Permettre à vos clients de commander sans avoir à créer de compte sur Ouvretaferme."},"productInput":{"type":"string","enum":["plus-minus","text"],"description":"Choix des quantités par vos clients. Valeurs : `plus-minus` (Uniquement par    et  ), `text` (Laisser les clients saisir les quantités)."},"outOfStock":{"type":"string","enum":["show","hide"],"description":"Afficher des produits en rupture de stock. Valeurs : `show` (Montrer ces produits aux clients assortis d'une mention Rupture de stock), `hide` (Cacher ces produits aux clients)."},"datesNotOpen":{"type":"string","enum":["next","all","hide"],"description":"Livraisons dont la prise de commandes n'est pas encore ouverte. Valeurs : `next` (Montrer seulement la prochaine à ouvrir), `all` (Les montrer toutes), `hide` (Ne pas les montrer)."},"accurateStock":{"type":"boolean","description":"Afficher les quantités disponibles des produits aux clients."},"preserveCategory":{"type":"boolean","description":"Ranger les produits par catégorie à l'affichage."},"comment":{"type":"boolean","description":"Permettre à vos clients de laisser un commentaire lors d'une commande."},"commentCaption":{"type":"string","nullable":true,"description":"Instructions à communiquer à vos clients pour remplir le commentaire."},"customTabs":{"type":"boolean"},"limitCustomers":{"type":"array","items":{}},"limitGroups":{"type":"array","items":{}},"sharedGroup":{"type":"string","enum":["structure","department","product"],"nullable":true,"description":"Groupage des produits sur la boutique. Valeurs : `structure` (Grouper par producteur), `department` (Grouper par rayon), `product` (Ne pas grouper les produits)."},"sharedExport":{"type":"string","enum":["sale","customer"],"nullable":true,"description":"Génération des étiquettes lors de l'export des ventes au format PDF. Valeurs : `sale` (Dissocier les achats d'un client sur une étiquette par producteur), `customer` (Grouper les achats d'un client sur une même étiquette)."}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Vos boutiques en ligne, celles que vous tenez comme celles que vous avez rejointes. Le champ role dit de quel côté vous êtes : propriétaire, vous la paramétrez ; participant, vous y vendez sans la modifier. Une boutique collective (shared) réunit les produits de plusieurs producteurs sur un même étal. Les e-mails de suivi et les clients autorisés (emailNewSale, emailEndDate, limitCustomers, limitGroups) ne sont rendus qu'au propriétaire, comme, sur une boutique collective, le groupage des produits et les étiquettes (sharedGroup, sharedExport).","additionalProperties":true}}}}
```

## The Size object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Size":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"maxLength":50,"description":"Nom."},"comment":{"type":"string","minLength":1,"nullable":true,"description":"Observations."},"plant":{"type":"integer","format":"int64","description":"Espèce. Identifiant d'un élément `Plant`.","nullable":true},"yield":{"type":"boolean","description":"Calcul du rendement."}},"title":"Calibres","description":"Les calibres définis pour vos espèces (ex. petit / moyen / gros), utilisés notamment pour distinguer les rendements par calibre."}}}}
```

## The SizeUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"SizeUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":50,"description":"Nom."},"comment":{"type":"string","minLength":1,"nullable":true,"description":"Observations."},"yield":{"type":"boolean","description":"Calcul du rendement."}},"required":["name","comment","yield"]}}}}
```

## The SizeWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"SizeWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":50,"description":"Nom."},"comment":{"type":"string","minLength":1,"nullable":true,"description":"Observations."},"plant":{"type":"integer","format":"int64","description":"Espèce. Identifiant d'un élément `Plant`.","nullable":true},"yield":{"type":"boolean","description":"Calcul du rendement."}},"required":["name","comment","plant","yield"]}}}}
```

## The Stock object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Stock":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"product":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Product`."},"balance":{"type":"number","nullable":true},"quantity":{"type":"number","nullable":true},"comment":{"type":"string","minLength":1,"nullable":true,"description":"Commentaire."},"createdAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS."}},"title":"Mouvements de stock","description":"L'historique du stock d'un produit : ce qui a été posé ou ajouté, et le solde qui en résulte. Le produit est un filtre obligatoire, la table n'ayant d'index que sur lui. Les mouvements s'écrivent par les gestes de la ressource produit, qui recalculent le solde dans le même passage ; le dernier d'entre eux accompagne le produit sous stockLast."}}}}
```

## The Structure object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Structure":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1},"type":{"type":"string","enum":["producer","shop","amap","community"]},"communityType":{"type":"string","enum":["producer","education","network","accounting"],"nullable":true,"description":"Type de groupe. Valeurs : `producer` (Communauté de producteurs), `education` (Groupe de formation), `network` (Réseau d'accompagnement), `accounting` (Structure comptable)."},"isLegal":{"type":"boolean"},"legalName":{"type":"string","nullable":true,"description":"Raison sociale."},"legalEmail":{"type":"string","format":"email"},"legalCategory":{"type":"integer","nullable":true,"description":"Forme juridique."},"siret":{"type":"string","minLength":1,"nullable":true,"description":"Numéro d'immatriculation SIRET."},"legalStreet1":{"type":"string","nullable":true},"legalStreet2":{"type":"string","nullable":true},"legalPostcode":{"type":"string","nullable":true,"description":"Code postal."},"legalCity":{"type":"string","nullable":true},"legalCountry":{"type":"integer","format":"int64","description":"Pays. Identifiant.","nullable":true},"url":{"type":"string","format":"uri","nullable":true,"description":"Site internet."},"description":{"type":"string","nullable":true},"logo":{"type":"string","format":"uri","nullable":true,"description":"Adresse du logo, ou null si la structure n'en a pas"},"organic":{"type":"string","enum":["no","yes","conversion"],"nullable":true,"description":"Agriculture biologique. Valeurs : `no` (Non), `yes` (Oui), `conversion` (En conversion)."},"qualities":{"type":"string","nullable":true,"description":"Signes de qualité."},"startedAt":{"type":"integer","nullable":true,"description":"Année de création."},"status":{"type":"string","enum":["active","closed"]}},"title":"Structure courante","description":"La structure à laquelle votre clé d'API est rattachée : identité, statut juridique et abonnement."}}}}
```

## The StructureConfiguration object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"StructureConfiguration":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"hasVat":{"type":"boolean","nullable":true,"description":"La structure est-elle redevable de la TVA ?."},"vatNumber":{"type":"string","nullable":true,"description":"Numéro de TVA intracommunautaire."},"vatChargeability":{"type":"string","enum":["cash","debit"],"description":"Exigibilité de la TVA. Valeurs : `cash` (TVA sur les encaissementsLa TVA est due dès l'encaissement.Exigibilité par défaut pour les Régimes Simplifiés (Micro-BA, RSA...).Les prestations de service entrent dans cette règle d'office.), `debit` (TVA sur les débitsLa TVA est due dès l'émission d'une facture, sa date faisant foi.)."},"vatDebitsOption":{"type":"boolean","description":"Avez-vous pris l'option pour le paiement de la TVA d'après les débits ?."},"stockNotes":{"type":"string","nullable":true,"description":"Notes de la page des stocks, null tant qu'elles sont désactivées"},"stockNotesUpdatedAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","nullable":true,"description":"Date et heure de la dernière modification des notes de stock, au format AAAA-MM-JJ HH:MM:SS"},"stockNotesUpdatedBy":{"type":"integer","format":"int64","nullable":true,"description":"Utilisateur qui a modifié les notes de stock en dernier. Identifiant d'un élément `User`."},"seasonFirst":{"type":"integer","minimum":0,"description":"Première saison du plan de culture"},"seasonLast":{"type":"integer","minimum":0,"description":"Dernière saison du plan de culture"},"defaultBedLength":{"type":"integer","minimum":1,"nullable":true,"description":"Longueur de planche par défaut, en mètres"},"defaultBedWidth":{"type":"integer","minimum":1,"nullable":true,"description":"Largeur de planche par défaut, en centimètres"},"defaultAlleyWidth":{"type":"integer","minimum":1,"nullable":true,"description":"Largeur de passe-pied par défaut, en centimètres"},"organicCertifier":{"type":"string","nullable":true,"description":"Organisme de certification pour l'Agriculture Biologique."}},"title":"Configuration","description":"Les réglages de votre structure : régime de TVA, notes de stock, et pour une structure de production les saisons du plan de culture, les dimensions de planche par défaut et la certification bio. Une seule fiche par structure, en lecture seule."}}}}
```

## The Supplier object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Supplier":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"maxLength":50,"description":"Nom du fournisseur."}},"title":"Fournisseurs de semences et plants","description":"Les fournisseurs de semences et de plants utilisés pour vos variétés."}}}}
```

## The SupplierWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"SupplierWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":50,"description":"Nom du fournisseur."}},"required":["name"]}}}}
```

## The System object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"System":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"place":{"type":"string","minLength":1,"nullable":true,"description":"Lieu de production."},"placeLngLat":{"type":"string","nullable":true},"totalArea":{"type":"number","nullable":true,"description":"Surface agricole utile (SAU)."},"altitude":{"type":"integer","nullable":true,"description":"Altitude de la production."},"soil":{"type":"string","enum":["sableux","limoneux","argileux","sablo-limoneux","limono-sableux","sablo-argileux","sablo-argilo-limoneux","argilo-sableux","limono-argileux","limono-argilo-sableux","argilo-limoneux"],"nullable":true,"description":"Texture du sol. Valeurs : `sableux` (Sable), `limoneux` (Limon), `argileux` (Argile), `sablo-limoneux` (Sable limoneux), `limono-sableux` (Limon sableux), `sablo-argileux` (Sable argileux), `sablo-argilo-limoneux` (Sable argilo-limoneux), `argilo-sableux` (Argile sableuse), `limono-argileux` (Limon argileux), `limono-argilo-sableux` (Limon argilo-sableux), `argilo-limoneux` (Argile limoneuse)."},"ph":{"type":"number","nullable":true,"description":"pH."},"hrFarmer":{"type":"number","nullable":true,"description":"Exploitant."},"hrEmployee":{"type":"number","nullable":true,"description":"Salarié."},"hrOther":{"type":"number","nullable":true,"description":"Stagiaire / Bénévole."},"sellingDirect":{"type":"integer","nullable":true,"description":"Vente directe."},"sellingSemi":{"type":"integer","nullable":true,"description":"Vente demi-gros."},"sellingLong":{"type":"integer","nullable":true,"description":"Circuits longs."}},"title":"Système de production","description":"Le système de production de votre structure : lieu, surface, sol, main d'œuvre et répartition des circuits de vente. Une seule fiche par structure."}}}}
```

## The SystemWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"SystemWrite":{"type":"object","properties":{"place":{"type":"string","minLength":1,"nullable":true,"description":"Lieu de production."},"placeLngLat":{"type":"string","nullable":true},"totalArea":{"type":"number","nullable":true,"description":"Surface agricole utile (SAU)."},"altitude":{"type":"integer","nullable":true,"description":"Altitude de la production."},"soil":{"type":"string","enum":["sableux","limoneux","argileux","sablo-limoneux","limono-sableux","sablo-argileux","sablo-argilo-limoneux","argilo-sableux","limono-argileux","limono-argilo-sableux","argilo-limoneux"],"nullable":true,"description":"Texture du sol. Valeurs : `sableux` (Sable), `limoneux` (Limon), `argileux` (Argile), `sablo-limoneux` (Sable limoneux), `limono-sableux` (Limon sableux), `sablo-argileux` (Sable argileux), `sablo-argilo-limoneux` (Sable argilo-limoneux), `argilo-sableux` (Argile sableuse), `limono-argileux` (Limon argileux), `limono-argilo-sableux` (Limon argilo-sableux), `argilo-limoneux` (Argile limoneuse)."},"ph":{"type":"number","nullable":true,"description":"pH."},"hrFarmer":{"type":"number","nullable":true,"description":"Exploitant."},"hrEmployee":{"type":"number","nullable":true,"description":"Salarié."},"hrOther":{"type":"number","nullable":true,"description":"Stagiaire / Bénévole."},"sellingDirect":{"type":"integer","nullable":true,"description":"Vente directe."},"sellingSemi":{"type":"integer","nullable":true,"description":"Vente demi-gros."},"sellingLong":{"type":"integer","nullable":true,"description":"Circuits longs."}},"required":["place","placeLngLat","totalArea","altitude","soil","ph","hrFarmer","hrEmployee","hrOther","sellingDirect","sellingSemi","sellingLong"]}}}}
```

## The Tag object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Tag":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"fqn":{"type":"string"},"usage":{"type":"string","enum":["vegetable","fruit","small-fruit","flower","aromatic","mushroom","field"]},"name":{"type":"string","minLength":1}},"title":"Tags de variétés","description":"Le vocabulaire commun par lequel on décrit une variété (couleur, forme, usage…), partagé par toutes les structures et consultable uniquement. Le filtre plant donne les tags qu'une espèce accepte."}}}}
```

## The Task object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Task":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"cultivation":{"type":"integer","format":"int64","nullable":true,"description":"Référence de la mise en culture dans la série, ou null pour une intervention qui vaut pour toute la série. Obligatoire pour un travail de culture sur une série d'une seule espèce."},"series":{"type":"integer","format":"int64","nullable":true,"description":"Référence de la série, ou null pour une intervention hors série"},"plant":{"type":"integer","format":"int64","nullable":true,"description":"Référence de l'espèce, pour une intervention de culture hors série. Dans une série, elle vient de la mise en culture."},"variety":{"type":"integer","format":"int64","nullable":true,"description":"Référence de la variété cultivée, pour une intervention de culture"},"action":{"type":"integer","format":"int64","description":"Intervention. Identifiant d'un élément `Action`."},"category":{"type":"integer","format":"int64","nullable":false,"description":"Référence de la catégorie de travail, qui borne les interventions possibles"},"methods":{"type":"array","items":{},"description":"Méthodes de travail."},"tools":{"type":"array","items":{},"description":"Matériel nécessaire."},"products":{"type":"array","items":{},"description":"Produits."},"description":{"type":"string","minLength":1,"nullable":true,"description":"Observations."},"time":{"type":"number","nullable":true,"description":"Temps de travail effectué."},"timeExpected":{"type":"number","nullable":true,"description":"Temps de travail estimé."},"harvest":{"type":"number","nullable":true},"harvestUnit":{"type":"string","enum":["kg","unit","bunch"],"nullable":true,"description":"Valeurs : `kg` (kg), `bunch` (botte), `unit` (pièce)."},"harvestSize":{"type":"integer","format":"int64","description":"Calibre récolté. Identifiant d'un élément `Size`.","nullable":true},"fertilizer":{"type":"object","nullable":true,"description":"Apports."},"treatment":{"type":"object","nullable":true,"description":"Traitement d'une intervention de l'action Traitement, ignoré pour une autre action. Sans dose ni bouillie, l'intervention prend celles de son produit à la création. Une clé part ou area absente ou nulle garde sa valeur, une chaîne vide l'efface. Une clé dose, unit ou water absente s'efface.","properties":{"dose":{"type":"number","nullable":true,"description":"Dose par hectare, dans l'unité de unit"},"unit":{"type":"string","nullable":true,"enum":["kg/ha","L/ha"],"description":"Unité de la dose"},"water":{"type":"integer","nullable":true,"description":"Volume de bouillie, en litres par hectare"},"part":{"type":"number","nullable":true,"minimum":1,"maximum":100,"description":"Part de la série traitée, en %, au dixième. 100 remet la série entière. Ignorée hors série."},"area":{"type":"number","nullable":true,"minimum":0.1,"description":"Surface traitée en m², pour une intervention hors série. Ignorée dans une série."}}},"plannedWeek":{"type":"string","pattern":"^[0-9]{4}-W[0-9]{2}$","description":"Planifié. Semaine ISO 8601.","nullable":true},"plannedDate":{"type":"string","format":"date","nullable":true},"plannedUsers":{"type":"array","items":{}},"doneWeek":{"type":"string","pattern":"^[0-9]{4}-W[0-9]{2}$","description":"Réalisé. Semaine ISO 8601.","nullable":true},"doneDate":{"type":"string","format":"date","nullable":true},"status":{"type":"string","enum":["todo","done"],"description":"Statut de l'intervention, à faire ou faite. Il ne se choisit qu'à la création et décide de la date attendue, planned pour une intervention à faire, done pour une intervention faite."},"createdAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$","description":"Date et heure, au format AAAA-MM-JJ HH:MM:SS."}},"title":"Interventions","description":"Les interventions planifiées dans le planning. Chaque intervention est une occurrence d'une action (semis, désherbage, récolte...), liée à une culture et éventuellement à une série."}}}}
```

## The TaskUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"TaskUpdate":{"type":"object","properties":{"cultivation":{"type":"integer","format":"int64","nullable":true,"description":"Référence de la mise en culture dans la série, ou null pour une intervention qui vaut pour toute la série. Obligatoire pour un travail de culture sur une série d'une seule espèce."},"variety":{"type":"integer","format":"int64","nullable":true,"description":"Référence de la variété cultivée, pour une intervention de culture"},"action":{"type":"integer","format":"int64","description":"Intervention. Identifiant d'un élément `Action`."},"methods":{"type":"array","items":{},"description":"Méthodes de travail."},"tools":{"type":"array","items":{},"description":"Matériel nécessaire."},"products":{"type":"array","items":{},"description":"Produits."},"description":{"type":"string","minLength":1,"nullable":true,"description":"Observations."},"timeExpected":{"type":"number","nullable":true,"description":"Temps de travail estimé."},"harvestSize":{"type":"integer","format":"int64","description":"Calibre récolté. Identifiant d'un élément `Size`.","nullable":true},"fertilizer":{"type":"object","nullable":true,"description":"Apports."},"treatment":{"type":"object","nullable":true,"description":"Traitement d'une intervention de l'action Traitement, ignoré pour une autre action. Sans dose ni bouillie, l'intervention prend celles de son produit à la création. Une clé part ou area absente ou nulle garde sa valeur, une chaîne vide l'efface. Une clé dose, unit ou water absente s'efface.","properties":{"dose":{"type":"number","nullable":true,"description":"Dose par hectare, dans l'unité de unit"},"unit":{"type":"string","nullable":true,"enum":["kg/ha","L/ha"],"description":"Unité de la dose"},"water":{"type":"integer","nullable":true,"description":"Volume de bouillie, en litres par hectare"},"part":{"type":"number","nullable":true,"minimum":1,"maximum":100,"description":"Part de la série traitée, en %, au dixième. 100 remet la série entière. Ignorée hors série."},"area":{"type":"number","nullable":true,"minimum":0.1,"description":"Surface traitée en m², pour une intervention hors série. Ignorée dans une série."}}},"planned":{"type":"object","nullable":true,"writeOnly":true,"description":"Moment où l'intervention est prévue, pour le statut todo et ignoré pour une intervention faite. Il se donne au jour près par date, ou à la semaine près par week quand le jour n'est pas encore fixé, et date l'emporte si les deux sont envoyés. Null ou un objet vide laisse l'intervention sans date prévue. Il se relit dans plannedDate et plannedWeek, plannedDate restant null quand seule la semaine est donnée. La semaine doit tomber à un an au plus de la saison de la série, ou à moins de cinq ans d'aujourd'hui pour une intervention hors série.","properties":{"date":{"type":"string","format":"date","description":"Jour où l'intervention est prévue, au format AAAA-MM-JJ"},"week":{"type":"string","description":"Semaine ISO où l'intervention est prévue, au format AAAA-Wss, de W01 à W53"}}},"done":{"type":"object","writeOnly":true,"description":"Moment où l'intervention a été faite, à envoyer avec le statut done et ignoré pour une intervention à faire. Il se donne au jour près par date, ou à la semaine près par week quand le jour n'est pas connu, et date l'emporte si les deux sont envoyés. Il se relit dans doneDate et doneWeek, doneDate restant null quand seule la semaine est donnée. La semaine doit tomber à un an au plus de la saison de la série, ou à moins de cinq ans d'aujourd'hui pour une intervention hors série.","properties":{"date":{"type":"string","format":"date","description":"Jour où l'intervention a été faite, au format AAAA-MM-JJ"},"week":{"type":"string","description":"Semaine ISO où l'intervention a été faite, au format AAAA-Wss, de W01 à W53"}}}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Les interventions planifiées dans le planning. Chaque intervention est une occurrence d'une action (semis, désherbage, récolte...), liée à une culture et éventuellement à une série.","additionalProperties":true}}}}
```

## The TaskWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"TaskWrite":{"type":"object","properties":{"action":{"type":"integer","format":"int64","description":"Intervention. Identifiant d'un élément `Action`."},"methods":{"type":"array","items":{},"description":"Méthodes de travail."},"tools":{"type":"array","items":{},"description":"Matériel nécessaire."},"products":{"type":"array","items":{},"description":"Produits."},"description":{"type":"string","minLength":1,"nullable":true,"description":"Observations."},"timeExpected":{"type":"number","nullable":true,"description":"Temps de travail estimé."},"harvestUnit":{"type":"string","enum":["kg","unit","bunch"],"nullable":true,"description":"Valeurs : `kg` (kg), `bunch` (botte), `unit` (pièce)."},"harvestSize":{"type":"integer","format":"int64","description":"Calibre récolté. Identifiant d'un élément `Size`.","nullable":true},"fertilizer":{"type":"object","nullable":true,"description":"Apports."},"treatment":{"type":"object","nullable":true,"description":"Traitement d'une intervention de l'action Traitement, ignoré pour une autre action. Sans dose ni bouillie, l'intervention prend celles de son produit à la création. Une clé part ou area absente ou nulle garde sa valeur, une chaîne vide l'efface. Une clé dose, unit ou water absente s'efface.","properties":{"dose":{"type":"number","nullable":true,"description":"Dose par hectare, dans l'unité de unit"},"unit":{"type":"string","nullable":true,"enum":["kg/ha","L/ha"],"description":"Unité de la dose"},"water":{"type":"integer","nullable":true,"description":"Volume de bouillie, en litres par hectare"},"part":{"type":"number","nullable":true,"minimum":1,"maximum":100,"description":"Part de la série traitée, en %, au dixième. 100 remet la série entière. Ignorée hors série."},"area":{"type":"number","nullable":true,"minimum":0.1,"description":"Surface traitée en m², pour une intervention hors série. Ignorée dans une série."}}},"planned":{"type":"object","nullable":true,"writeOnly":true,"description":"Moment où l'intervention est prévue, pour le statut todo et ignoré pour une intervention faite. Il se donne au jour près par date, ou à la semaine près par week quand le jour n'est pas encore fixé, et date l'emporte si les deux sont envoyés. Null ou un objet vide laisse l'intervention sans date prévue. Il se relit dans plannedDate et plannedWeek, plannedDate restant null quand seule la semaine est donnée. La semaine doit tomber à un an au plus de la saison de la série, ou à moins de cinq ans d'aujourd'hui pour une intervention hors série.","properties":{"date":{"type":"string","format":"date","description":"Jour où l'intervention est prévue, au format AAAA-MM-JJ"},"week":{"type":"string","description":"Semaine ISO où l'intervention est prévue, au format AAAA-Wss, de W01 à W53"}}},"done":{"type":"object","writeOnly":true,"description":"Moment où l'intervention a été faite, à envoyer avec le statut done et ignoré pour une intervention à faire. Il se donne au jour près par date, ou à la semaine près par week quand le jour n'est pas connu, et date l'emporte si les deux sont envoyés. Il se relit dans doneDate et doneWeek, doneDate restant null quand seule la semaine est donnée. La semaine doit tomber à un an au plus de la saison de la série, ou à moins de cinq ans d'aujourd'hui pour une intervention hors série.","properties":{"date":{"type":"string","format":"date","description":"Jour où l'intervention a été faite, au format AAAA-MM-JJ"},"week":{"type":"string","description":"Semaine ISO où l'intervention a été faite, au format AAAA-Wss, de W01 à W53"}}},"status":{"type":"string","enum":["todo","done"],"description":"Statut de l'intervention, à faire ou faite. Il ne se choisit qu'à la création et décide de la date attendue, planned pour une intervention à faire, done pour une intervention faite."},"category":{"type":"integer","format":"int64","nullable":false,"description":"Référence de la catégorie de travail, qui borne les interventions possibles"},"series":{"type":"integer","format":"int64","nullable":true,"description":"Référence de la série, ou null pour une intervention hors série"},"cultivation":{"type":"integer","format":"int64","nullable":true,"description":"Référence de la mise en culture dans la série, ou null pour une intervention qui vaut pour toute la série. Obligatoire pour un travail de culture sur une série d'une seule espèce."},"plant":{"type":"integer","format":"int64","nullable":true,"description":"Référence de l'espèce, pour une intervention de culture hors série. Dans une série, elle vient de la mise en culture."},"variety":{"type":"integer","format":"int64","nullable":true,"description":"Référence de la variété cultivée, pour une intervention de culture"}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Les interventions planifiées dans le planning. Chaque intervention est une occurrence d'une action (semis, désherbage, récolte...), liée à une culture et éventuellement à une série.","additionalProperties":true}}}}
```

## The Teammate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Teammate":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"user":{"type":"integer","format":"int64","description":"Personne. Identifiant d'un élément `User`."}},"title":"Équipe","description":"Les personnes qui travaillent dans votre structure, avec ou sans accès à Ouvretaferme. Une présence ne se pose qu'à une personne de l'équipe."}}}}
```

## The TeammateWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"TeammateWrite":{"type":"object","properties":{"user":{"type":"integer","format":"int64","description":"Personne. Identifiant d'un élément `User`."}},"required":["user"]}}}}
```

## The ThirdParty object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ThirdParty":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"description":"Nom."},"legalName":{"type":"string","minLength":1,"nullable":true,"description":"Raison sociale."},"siret":{"type":"string","minLength":1,"nullable":true,"description":"Numéro d'immatriculation SIRET."},"siren":{"type":"string","minLength":1,"nullable":true,"description":"Numéro d'immatriculation SIREN."},"vatNumber":{"type":"string","nullable":true,"description":"Numéro de TVA intracommunautaire."},"electronicAddresses":{"type":"array","items":{},"nullable":true},"legalStreet1":{"type":"string","nullable":true},"legalStreet2":{"type":"string","nullable":true},"legalPostcode":{"type":"string","nullable":true},"legalCity":{"type":"string","nullable":true},"country":{"type":"integer","format":"int64","description":"Pays. Identifiant.","nullable":true}},"title":"Tiers","description":"Les tiers (clients, fournisseurs...) de votre structure, référencés par les comptes comptables et les écritures."}}}}
```

## The ThirdPartyUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ThirdPartyUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom."},"legalName":{"type":"string","minLength":1,"nullable":true,"description":"Raison sociale."},"siret":{"type":"string","minLength":1,"nullable":true,"description":"Numéro d'immatriculation SIRET."},"siren":{"type":"string","minLength":1,"nullable":true,"description":"Numéro d'immatriculation SIREN."},"vatNumber":{"type":"string","nullable":true,"description":"Numéro de TVA intracommunautaire."}},"required":["name","legalName","siret","siren","vatNumber"]}}}}
```

## The ThirdPartyWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ThirdPartyWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom."},"legalName":{"type":"string","minLength":1,"nullable":true,"description":"Raison sociale."},"siret":{"type":"string","minLength":1,"nullable":true,"description":"Numéro d'immatriculation SIRET."},"siren":{"type":"string","minLength":1,"nullable":true,"description":"Numéro d'immatriculation SIREN."},"vatNumber":{"type":"string","nullable":true,"description":"Numéro de TVA intracommunautaire."},"country":{"type":"integer","format":"int64","description":"Pays. Identifiant.","nullable":true}},"required":["name","legalName","siret","siren","vatNumber","country"]}}}}
```

## The Timesheet object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Timesheet":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"task":{"type":"integer","format":"int64","nullable":false,"description":"Référence de l'intervention sur laquelle le temps a été passé. Elle donne à la ligne sa série, sa mise en culture et son espèce."},"series":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Series`.","nullable":true},"cultivation":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Cultivation`.","nullable":true},"plant":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Plant`.","nullable":true},"user":{"type":"integer","format":"int64","description":"Identifiant d'un élément `User`.","nullable":true},"time":{"type":"number"},"date":{"type":"string","format":"date","description":"Jour de travail."},"week":{"type":"string","pattern":"^[0-9]{4}-W[0-9]{2}$","description":"Semaine ISO 8601."}},"title":"Temps de travail","description":"Le temps passé sur une intervention : une ligne par intervention, par personne et par date. L'intervention se désigne à la création et donne à la ligne sa série, sa mise en culture et son espèce. Seule la durée se modifie ensuite. La période est obligatoire."}}}}
```

## The TimesheetUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"TimesheetUpdate":{"type":"object","properties":{"time":{"type":"number"}},"required":["time"]}}}}
```

## The TimesheetWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"TimesheetWrite":{"type":"object","properties":{"user":{"type":"integer","format":"int64","description":"Identifiant d'un élément `User`.","nullable":true},"time":{"type":"number"},"date":{"type":"string","format":"date","description":"Jour de travail."},"task":{"type":"integer","format":"int64","nullable":false,"description":"Référence de l'intervention sur laquelle le temps a été passé. Elle donne à la ligne sa série, sa mise en culture et son espèce."}},"required":["user","time","date","task"]}}}}
```

## The Tool object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Tool":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"maxLength":40,"description":"Nom du matériel."},"action":{"type":"integer","format":"int64","description":"Lier ce matériel à une intervention. Identifiant d'un élément `Action`.","nullable":true},"vignette":{"type":"string","format":"uri","nullable":true,"description":"Adresse de la vignette, ou null si l'outil n'en a pas"},"stock":{"type":"integer","nullable":true,"description":"Quantité en stock à la ferme."},"routineName":{"type":"string","nullable":true},"routineValue":{"type":"object","nullable":true},"comment":{"type":"string","nullable":true,"description":"Observations."},"status":{"type":"string","enum":["active","inactive","deleted"]}},"title":"Matériel","description":"Le matériel utilisé pour réaliser vos interventions (outils, équipements...). La liste écarte les matériels supprimés, que ?status=deleted retrouve. Supprimer un matériel que cite une intervention, un itinéraire ou le carnet d'entretien ne l'efface pas, il passe au statut deleted et le carnet arrête de le suivre."}}}}
```

## The ToolWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ToolWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":40,"description":"Nom du matériel."},"action":{"type":"integer","format":"int64","description":"Lier ce matériel à une intervention. Identifiant d'un élément `Action`.","nullable":true},"stock":{"type":"integer","nullable":true,"description":"Quantité en stock à la ferme."},"routineName":{"type":"string","nullable":true},"routineValue":{"type":"object","nullable":true},"comment":{"type":"string","nullable":true,"description":"Observations."}},"required":["name","action","stock","routineName","routineValue","comment"]}}}}
```

## The Unit object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Unit":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"fqn":{"type":"string","nullable":true},"singular":{"type":"string","minLength":1,"maxLength":15,"description":"Nom de l'unité au singulier."},"plural":{"type":"string","minLength":1,"maxLength":15,"description":"Nom de l'unité au pluriel."},"short":{"type":"string","minLength":1,"maxLength":8,"description":"Version courte."},"approximate":{"type":"boolean","description":"Cette unité est-elle une unité de poids ?."},"type":{"type":"string","enum":["integer","decimal"],"description":"Avec quelles quantités est utilisée l'unité ?. Valeurs : `decimal` (Quantités décimales (0.00)  Exemple : 2.25 litres, 1.41 mètre...), `integer` (Quantités entières (0)  Exemple : 5 pots, 2 bouquets...)."}},"title":"Unités","description":"Les unités de mesure utilisées pour vendre vos produits (kg, botte, barquette...). Seules les unités propres à votre structure sont rendues, pas le catalogue d'unités proposé par défaut à la création d'une structure."}}}}
```

## The UnitWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"UnitWrite":{"type":"object","properties":{"singular":{"type":"string","minLength":1,"maxLength":15,"description":"Nom de l'unité au singulier."},"plural":{"type":"string","minLength":1,"maxLength":15,"description":"Nom de l'unité au pluriel."},"short":{"type":"string","minLength":1,"maxLength":8,"description":"Version courte."},"approximate":{"type":"boolean","description":"Cette unité est-elle une unité de poids ?."},"type":{"type":"string","enum":["integer","decimal"],"description":"Avec quelles quantités est utilisée l'unité ?. Valeurs : `decimal` (Quantités décimales (0.00)  Exemple : 2.25 litres, 1.41 mètre...), `integer` (Quantités entières (0)  Exemple : 5 pots, 2 bouquets...)."}},"required":["singular","plural","short","approximate","type"]}}}}
```

## The User object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"User":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"firstName":{"type":"string","minLength":1,"maxLength":0,"nullable":true,"description":"Prénom."},"lastName":{"type":"string","minLength":1,"maxLength":0,"description":"Nom."},"email":{"type":"string","format":"email","nullable":true,"description":"Adresse e-mail de l'utilisateur, ou null si son compte est privé"},"vignette":{"type":"string","format":"uri","nullable":true,"description":"Adresse de la photo de profil, ou null si l'utilisateur n'en a pas"}},"title":"Utilisateurs","description":"L'identité d'un utilisateur de Ouvretaferme. Objet en lecture seule, sans route propre, qui apparaît à l'intérieur des ressources qui le référencent, comme les membres de votre structure."}}}}
```

## The Variety object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Variety":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"maxLength":50,"description":"Nom."},"fqn":{"type":"string","nullable":true,"description":"Nom qualifié."},"plant":{"type":"integer","format":"int64","description":"Espèce. Identifiant d'un élément `Plant`.","nullable":true},"structure":{"type":"integer","format":"int64","description":"Ferme. Identifiant d'un élément `Structure`.","nullable":true},"tags":{"type":"array","items":{}},"reference":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Variety`.","nullable":true},"supplierSeed":{"type":"integer","format":"int64","description":"Fournisseur de semences pour cette variété. Identifiant d'un élément `Supplier`.","nullable":true},"supplierPlant":{"type":"integer","format":"int64","description":"Fournisseur de plants pour cette variété. Identifiant d'un élément `Supplier`.","nullable":true},"weightSeed1000":{"type":"number","nullable":true,"description":"Poids pour 1000 graines."},"numberPlantKilogram":{"type":"integer","nullable":true,"description":"Nombre de plants pour 1 kg."},"stock":{"type":"integer","nullable":true,"description":"Semences en stock."}},"title":"Variétés","description":"Les variétés cultivées pour chacune de vos espèces, avec leurs fournisseurs de semences et de plants."}}}}
```

## The VarietyUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"VarietyUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":50,"description":"Nom."},"supplierSeed":{"type":"integer","format":"int64","description":"Fournisseur de semences pour cette variété. Identifiant d'un élément `Supplier`.","nullable":true},"supplierPlant":{"type":"integer","format":"int64","description":"Fournisseur de plants pour cette variété. Identifiant d'un élément `Supplier`.","nullable":true},"weightSeed1000":{"type":"number","nullable":true,"description":"Poids pour 1000 graines."},"numberPlantKilogram":{"type":"integer","nullable":true,"description":"Nombre de plants pour 1 kg."},"stock":{"type":"integer","nullable":true,"description":"Semences en stock."},"unit":{"description":"Champ accepté en écriture, sans équivalent en lecture."}},"required":["name","supplierSeed","supplierPlant","weightSeed1000","numberPlantKilogram","stock","unit"]}}}}
```

## The VarietyWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"VarietyWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":50,"description":"Nom."},"plant":{"type":"integer","format":"int64","description":"Espèce. Identifiant d'un élément `Plant`.","nullable":true},"supplierSeed":{"type":"integer","format":"int64","description":"Fournisseur de semences pour cette variété. Identifiant d'un élément `Supplier`.","nullable":true},"supplierPlant":{"type":"integer","format":"int64","description":"Fournisseur de plants pour cette variété. Identifiant d'un élément `Supplier`.","nullable":true},"weightSeed1000":{"type":"number","nullable":true,"description":"Poids pour 1000 graines."},"numberPlantKilogram":{"type":"integer","nullable":true,"description":"Nombre de plants pour 1 kg."}},"required":["name","plant","supplierSeed","supplierPlant","weightSeed1000","numberPlantKilogram"]}}}}
```

## The WaterMeter object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"WaterMeter":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"maxLength":50,"description":"Nom du compteur."},"digits":{"type":"integer","description":"Nombre de chiffres du compteur."},"status":{"type":"string","enum":["active","inactive"]}},"title":"Compteurs d'eau","description":"Les compteurs d'eau de la structure, chacun avec un nom et le nombre de chiffres qu'il affiche pour les m³ entiers. Ce nombre de chiffres borne les relevés du compteur, et dit ce qu'il a compté quand il repasse par zéro. Il ne descend pas sous le plus haut relevé du compteur en place, et un compteur remplacé dans l'écran garde pour ses anciens relevés le nombre de chiffres qu'il avait. Deux compteurs actifs ne portent pas le même nom. Il n'y a pas de suppression. Supprimer un compteur le passe au statut inactive et lui garde ses relevés. Une modification nomme ce qu'elle change dans properties. Un corps sans properties est lu comme une modification complète, qui attend toutes les propriétés, status compris, et la seule valeur que status accepte est inactive. Un compteur inactif refuse ensuite toute modification, comme ses relevés, avec un code 412."}}}}
```

## The WaterMeterUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"WaterMeterUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":50,"description":"Nom du compteur."},"digits":{"type":"integer","description":"Nombre de chiffres du compteur."},"status":{"type":"string","enum":["active","inactive"]}},"required":["name","digits","status"]}}}}
```

## The WaterMeterWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"WaterMeterWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":50,"description":"Nom du compteur."},"digits":{"type":"integer","description":"Nombre de chiffres du compteur."}},"required":["name","digits"]}}}}
```

## The WaterReading object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"WaterReading":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"meter":{"type":"integer","format":"int64","description":"Compteur. Identifiant d'un élément `WaterMeter`."},"date":{"type":"string","format":"date","description":"Date."},"value":{"type":"number","description":"Relevé du compteur."},"changed":{"type":"boolean"},"changedValue":{"type":"number","nullable":true,"description":"Dernier relevé de l'ancien compteur."}},"title":"Relevés de compteur d'eau","description":"Ce qu'un compteur d'eau affiche un jour donné, en m³, au dixième. Un relevé n'est pas une consommation. La consommation est l'écart entre deux relevés qui se suivent. Il n'y a qu'un relevé par compteur et par jour : créer un relevé remplace celui du jour, et répond 200 avec le relevé du jour. Un relevé plus bas que le précédent est accepté. Il dit que le compteur a fait le tour, et la consommation se compte alors en passant par zéro, avec le nombre de chiffres du compteur. Un relevé reste sous ce que ce nombre de chiffres permet d'afficher. Un jour à venir est refusé. Quand le compteur a été remplacé, le relevé du jour du changement porte changed, sa valeur est ce que le nouveau compteur affichait à sa pose, d'où les relevés suivants se comptent, et changedValue ce que l'ancien affichait à sa dépose, vide s'il n'a pas été relevé. La consommation de ce jour-là est l'écart entre le relevé précédent et changedValue, et vaut 0 sans lui. Ces deux champs se lisent et ne s'écrivent pas, un changement de compteur se déclare dans l'écran. Une modification ne change que la valeur. Les relevés d'un compteur inactif ne se créent, ne se modifient et ne se suppriment plus, ce que dit un code 412."}}}}
```

## The WaterReadingUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"WaterReadingUpdate":{"type":"object","properties":{"value":{"type":"number","description":"Relevé du compteur."}},"required":["value"]}}}}
```

## The WaterReadingWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"WaterReadingWrite":{"type":"object","properties":{"meter":{"type":"integer","format":"int64","description":"Compteur. Identifiant d'un élément `WaterMeter`."},"date":{"type":"string","format":"date","description":"Date."},"value":{"type":"number","description":"Relevé du compteur."}},"required":["meter","date","value"]}}}}
```

## The WorkCategory object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"WorkCategory":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"description":"Nom de la catégorie."},"fqn":{"type":"string","nullable":true,"description":"Nom qualifié."},"position":{"type":"integer"}},"title":"Catégories d'action","description":"Les catégories utilisées pour regrouper vos actions."}}}}
```

## The WorkCategoryWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"WorkCategoryWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom de la catégorie."}},"required":["name"]}}}}
```

## The WorkMethod object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"WorkMethod":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"description":"Nom de la méthode."},"action":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Action`."}},"title":"Méthodes de travail","description":"Les méthodes de travail associées à une action (ex. techniques ou outils spécifiques utilisés pour la réaliser)."}}}}
```

## The WorkMethodUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"WorkMethodUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom de la méthode."}},"required":["name"]}}}}
```

## The WorkMethodWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"WorkMethodWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom de la méthode."},"action":{"type":"integer","format":"int64","description":"Identifiant d'un élément `Action`."}},"required":["name","action"]}}}}
```

## The WorkingTime object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"WorkingTime":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"user":{"type":"integer","format":"int64","description":"Identifiant d'un élément `User`."},"date":{"type":"string","format":"date"},"time":{"type":"number"},"start":{"type":"string","pattern":"^[0-9]{2}:[0-9]{2}(:[0-9]{2})?$","nullable":true},"end":{"type":"string","pattern":"^[0-9]{2}:[0-9]{2}(:[0-9]{2})?$","nullable":true},"pause":{"type":"number","nullable":true}},"title":"Temps de travail","description":"Le temps travaillé par un membre de l'équipe sur une journée. Une seule ligne par utilisateur et par date : renvoyer un temps pour une journée déjà saisie l'écrase. Le temps se pose et se corrige, il ne se supprime pas depuis l'API, et ne peut pas être nul."}}}}
```

## The WorkingTimeWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"WorkingTimeWrite":{"type":"object","properties":{"user":{"type":"integer","format":"int64","description":"Identifiant d'un élément `User`."},"date":{"type":"string","format":"date"},"time":{"type":"number"}},"description":"Les champs acceptés dépendent de l'élément envoyé : cette liste réunit ceux des différents cas et aucun n'y est obligatoire dans tous. D'autres champs peuvent être acceptés selon l'élément. Le temps travaillé par un membre de l'équipe sur une journée. Une seule ligne par utilisateur et par date : renvoyer un temps pour une journée déjà saisie l'écrase. Le temps se pose et se corrige, il ne se supprime pas depuis l'API, et ne peut pas être nul.","additionalProperties":true}}}}
```

## The Zone object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"Zone":{"type":"object","properties":{"id":{"type":"integer","format":"int64","readOnly":true},"name":{"type":"string","minLength":1,"description":"Nom de la parcelle."},"area":{"type":"integer","description":"Surface de la parcelle."},"coordinates":{"type":"array","nullable":true,"description":"Contour, en points [longitude, latitude]","items":{"type":"array","minItems":2,"maxItems":2,"items":{"type":"number"}}},"seasonFirst":{"type":"integer","nullable":true,"description":"Exploité depuis."},"seasonLast":{"type":"integer","nullable":true,"description":"Exploité jusqu'à."}},"title":"Parcelles","description":"Les parcelles qui composent le plan, chacune délimitée par un polygone et découpée en jardins. Une parcelle dessinée a la surface de son polygone, qui se modifie donc avec lui."}}}}
```

## The ZoneUpdate object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ZoneUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom de la parcelle."},"area":{"type":"integer","description":"Surface de la parcelle."},"coordinates":{"type":"array","nullable":true,"description":"Contour, en points [longitude, latitude]","items":{"type":"array","minItems":2,"maxItems":2,"items":{"type":"number"}}},"seasonFirst":{"type":"integer","nullable":true,"description":"Exploité depuis."},"seasonLast":{"type":"integer","nullable":true,"description":"Exploité jusqu'à."}},"required":["name","area","coordinates","seasonFirst","seasonLast"]}}}}
```

## The ZoneWrite object

```json
{"openapi":"3.0.3","info":{"title":"API Ouvretaferme","version":"0.1beta"},"components":{"schemas":{"ZoneWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Nom de la parcelle."},"area":{"type":"integer","description":"Surface de la parcelle."},"coordinates":{"type":"array","nullable":true,"description":"Contour, en points [longitude, latitude]","items":{"type":"array","minItems":2,"maxItems":2,"items":{"type":"number"}}},"seasonFirst":{"type":"integer","nullable":true,"description":"Exploité depuis."}},"required":["name","area","coordinates","seasonFirst"]}}}}
```
