---
title: "Project"
description: "Projets et tâches. Chaque application est un module sur un même modèle de données."
canonical: "https://obop-platform.sliplane.app/fr/apps/projects/"
lang: "fr"
---

# Project

## À quoi elle sert

Plan work as projects, milestones and tasks with assignees and deadlines. Progress is tracked by status, which keeps the model simple; it is a good fit for small teams that want a shared board rather than effort accounting.

## Ce que fait et ne fait pas le paquet

Projects, milestones and tasks with assignees, deadlines and status flows. Progress is tracked by status, not computed from task effort.

## Modèles

### `projects_project`

A body of work with a goal

Groupe de lecture: `projects.user`. Groupe d'écriture: `projects.manager`.

| Champ | Type | Classe de données | Données personnelles | Groupe | Vu par les agents | Description |
|---|---|---|---|---|---|---|
| `name` | text | `none` | non | `projects.user` | en clair | Project name |
| `code` | text | `none` | non | `projects.user` | en clair | Short reference used in reports, for example WEB-24 |
| `project_manager` | text | `internal` | oui | `projects.user` | masqué | Name of the person accountable for the project |
| `start_on` | date | `none` | non | `projects.user` | en clair | Planned start date (YYYY-MM-DD) |
| `deadline` | date | `none` | non | `projects.user` | en clair | Date the project must be finished (YYYY-MM-DD) |
| `budget` | money | `none` | non | `projects.user` | en clair | Agreed budget for the project (minor currency units, e.g. cents) |
| `description` | longtext | `none` | non | `projects.user` | en clair | Goal and scope of the project |
| `state` | select (planned, active, done) | `none` | non | `projects.user` | en clair | Project status: planned, active, done |

### `projects_milestone`

A checkpoint in a project

Groupe de lecture: `projects.user`. Groupe d'écriture: `projects.manager`.

| Champ | Type | Classe de données | Données personnelles | Groupe | Vu par les agents | Description |
|---|---|---|---|---|---|---|
| `project_id` | ref → projects_project | `none` | non | `projects.user` | en clair | The project the milestone belongs to |
| `name` | text | `none` | non | `projects.user` | en clair | Milestone name, for example Design approved |
| `due_on` | date | `none` | non | `projects.user` | en clair | Date the milestone is due (YYYY-MM-DD) |
| `description` | longtext | `none` | non | `projects.user` | en clair | What must be true for the milestone to count as reached |
| `state` | select (pending, reached, missed) | `none` | non | `projects.user` | en clair | Milestone status: pending, reached, missed |

### `projects_task`

A unit of work inside a project

Groupe de lecture: `projects.user`. Groupe d'écriture: `projects.user`.

| Champ | Type | Classe de données | Données personnelles | Groupe | Vu par les agents | Description |
|---|---|---|---|---|---|---|
| `title` | text | `none` | non | `projects.user` | en clair | What needs doing |
| `project_id` | ref → projects_project | `none` | non | `projects.user` | en clair | The project this task belongs to; empty for a private task |
| `milestone_id` | ref → projects_milestone | `none` | non | `projects.user` | en clair | The milestone this task contributes to |
| `assignee` | text | `internal` | oui | `projects.user` | masqué | Name of the person responsible |
| `priority` | select (low, normal, high) | `none` | non | `projects.user` | en clair | How important the task is: low, normal, high |
| `due_on` | date | `none` | non | `projects.user` | en clair | Date the task is due (YYYY-MM-DD) |
| `estimate_minutes` | number | `none` | non | `projects.user` | en clair | Planned effort in minutes |
| `description` | longtext | `none` | non | `projects.user` | en clair | Details, acceptance criteria and links |
| `state` | select (todo, doing, done, cancelled) | `none` | non | `projects.user` | en clair | Task status: todo, doing, done, cancelled |

## Flux de travail

### `projects_project`

| Action | Transition | Qui peut l'exécuter | Approbation |
|---|---|---|---|
| `projects_project.start` | state: planned → active | `projects.manager` | non |
| `projects_project.finish` | state: active → done | `projects.manager` | non |
| `projects_project.reopen` | state: done → active | `projects.manager` | non |

### `projects_milestone`

| Action | Transition | Qui peut l'exécuter | Approbation |
|---|---|---|---|
| `projects_milestone.reach` | state: pending → reached | `projects.manager` | non |
| `projects_milestone.miss` | state: pending → missed | `projects.manager` | non |

### `projects_task`

| Action | Transition | Qui peut l'exécuter | Approbation |
|---|---|---|---|
| `projects_task.begin` | state: todo → doing | `projects.user` | non |
| `projects_task.complete` | state: doing → done | `projects.user` | non |
| `projects_task.cancel` | state: todo → cancelled | `projects.user` | non |

## Groupes de permissions

Groupes utilisés par cette application :

- `projects.manager`
- `projects.user`

## Étapes d'approbation

Aucune étape de cette application ne requiert d'approbation, hormis la suppression d'enregistrements.

## Ce que les agents peuvent et ne peuvent pas faire

Un agent peut lire, rechercher, créer et modifier les enregistrements de cette application, et exécuter les actions qui ne requièrent pas d'approbation, dans les limites des groupes de permissions de son jeton.

Il ne peut que proposer ces étapes, qu'une personne doit approuver : `projects_project.delete`, `projects_milestone.delete`, `projects_task.delete`.

Les données personnelles sont masquées sous forme de jetons de substitution : `projects_project.project_manager`, `projects_task.assignee`.

## Dépendances

Aucune.

## Installation

Installez-la depuis l'application Customize (Place de marché), ou en ligne de commande :

```bash
obop modules install-from projects
```

Nécessite une base de données et des droits d'administrateur.

## Créer la vôtre

[Le guide des modules montre comment sont écrites les applications de ce type](/fr/docs/reference/module-manifest/)
