---
title: "Project"
description: "Projekte und Aufgaben. Jede App ist ein Modul auf einem gemeinsamen Datenmodell."
canonical: "https://obop-platform.sliplane.app/de/apps/projects/"
lang: "de"
---

# Project

## Wofür sie gedacht ist

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.

## Was das Paket leistet und was nicht

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

## Modelle

### `projects_project`

A body of work with a goal

Lesegruppe: `projects.user`. Schreibgruppe: `projects.manager`.

| Feld | Art | Datenklasse | Personenbezogene Daten | Gruppe | Agenten sehen | Beschreibung |
|---|---|---|---|---|---|---|
| `name` | text | `none` | nein | `projects.user` | im Klartext | Project name |
| `code` | text | `none` | nein | `projects.user` | im Klartext | Short reference used in reports, for example WEB-24 |
| `project_manager` | text | `internal` | ja | `projects.user` | maskiert | Name of the person accountable for the project |
| `start_on` | date | `none` | nein | `projects.user` | im Klartext | Planned start date (YYYY-MM-DD) |
| `deadline` | date | `none` | nein | `projects.user` | im Klartext | Date the project must be finished (YYYY-MM-DD) |
| `budget` | money | `none` | nein | `projects.user` | im Klartext | Agreed budget for the project (minor currency units, e.g. cents) |
| `description` | longtext | `none` | nein | `projects.user` | im Klartext | Goal and scope of the project |
| `state` | select (planned, active, done) | `none` | nein | `projects.user` | im Klartext | Project status: planned, active, done |

### `projects_milestone`

A checkpoint in a project

Lesegruppe: `projects.user`. Schreibgruppe: `projects.manager`.

| Feld | Art | Datenklasse | Personenbezogene Daten | Gruppe | Agenten sehen | Beschreibung |
|---|---|---|---|---|---|---|
| `project_id` | ref → projects_project | `none` | nein | `projects.user` | im Klartext | The project the milestone belongs to |
| `name` | text | `none` | nein | `projects.user` | im Klartext | Milestone name, for example Design approved |
| `due_on` | date | `none` | nein | `projects.user` | im Klartext | Date the milestone is due (YYYY-MM-DD) |
| `description` | longtext | `none` | nein | `projects.user` | im Klartext | What must be true for the milestone to count as reached |
| `state` | select (pending, reached, missed) | `none` | nein | `projects.user` | im Klartext | Milestone status: pending, reached, missed |

### `projects_task`

A unit of work inside a project

Lesegruppe: `projects.user`. Schreibgruppe: `projects.user`.

| Feld | Art | Datenklasse | Personenbezogene Daten | Gruppe | Agenten sehen | Beschreibung |
|---|---|---|---|---|---|---|
| `title` | text | `none` | nein | `projects.user` | im Klartext | What needs doing |
| `project_id` | ref → projects_project | `none` | nein | `projects.user` | im Klartext | The project this task belongs to; empty for a private task |
| `milestone_id` | ref → projects_milestone | `none` | nein | `projects.user` | im Klartext | The milestone this task contributes to |
| `assignee` | text | `internal` | ja | `projects.user` | maskiert | Name of the person responsible |
| `priority` | select (low, normal, high) | `none` | nein | `projects.user` | im Klartext | How important the task is: low, normal, high |
| `due_on` | date | `none` | nein | `projects.user` | im Klartext | Date the task is due (YYYY-MM-DD) |
| `estimate_minutes` | number | `none` | nein | `projects.user` | im Klartext | Planned effort in minutes |
| `description` | longtext | `none` | nein | `projects.user` | im Klartext | Details, acceptance criteria and links |
| `state` | select (todo, doing, done, cancelled) | `none` | nein | `projects.user` | im Klartext | Task status: todo, doing, done, cancelled |

## Workflows

### `projects_project`

| Aktion | Bewegt | Wer sie ausführen darf | Freigabe |
|---|---|---|---|
| `projects_project.start` | state: planned → active | `projects.manager` | nein |
| `projects_project.finish` | state: active → done | `projects.manager` | nein |
| `projects_project.reopen` | state: done → active | `projects.manager` | nein |

### `projects_milestone`

| Aktion | Bewegt | Wer sie ausführen darf | Freigabe |
|---|---|---|---|
| `projects_milestone.reach` | state: pending → reached | `projects.manager` | nein |
| `projects_milestone.miss` | state: pending → missed | `projects.manager` | nein |

### `projects_task`

| Aktion | Bewegt | Wer sie ausführen darf | Freigabe |
|---|---|---|---|
| `projects_task.begin` | state: todo → doing | `projects.user` | nein |
| `projects_task.complete` | state: doing → done | `projects.user` | nein |
| `projects_task.cancel` | state: todo → cancelled | `projects.user` | nein |

## Berechtigungsgruppen

Von dieser App verwendete Gruppen:

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

## Freigabeschritte

Kein Schritt dieser App braucht eine Freigabe, abgesehen vom Löschen von Datensätzen.

## Was Agenten tun können und was nicht

Ein Agent kann Datensätze dieser App lesen, durchsuchen, anlegen und aktualisieren sowie Aktionen ausführen, die keine Freigabe brauchen, und zwar innerhalb der Berechtigungsgruppen seines Tokens.

Diese Schritte kann er nur vorschlagen, und eine Person muss sie freigeben: `projects_project.delete`, `projects_milestone.delete`, `projects_task.delete`.

Personenbezogene Daten werden als Platzhalter maskiert: `projects_project.project_manager`, `projects_task.assignee`.

## Abhängigkeiten

Keine.

## Installation

Installieren Sie sie in der App Customize (Marktplatz) oder über die Kommandozeile:

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

Erfordert eine Datenbank und Administratorrechte.

## Selbst bauen

[Der Modulleitfaden zeigt, wie Apps wie diese geschrieben werden](/de/docs/reference/module-manifest/)
