diff --git a/docs/02-datenmodell.md b/docs/02-datenmodell.md index 651fe4a..b7cf93a 100644 --- a/docs/02-datenmodell.md +++ b/docs/02-datenmodell.md @@ -163,7 +163,11 @@ Acht Eigenheiten, die man kennen muss: die ein Job umsetzen müsste, kann von der Wirklichkeit abweichen - eine gerechnete Grenze nicht. `converted_at` ist dabei die Wahrheit, nicht `opportunity_id`: wird die Opportunity gelöscht, fällt der Verweis auf NULL, - der Eintrag soll aber nicht wieder im Eingang auftauchen. + der Eintrag soll aber nicht wieder im **Eingang** auftauchen - im **Archiv** + schon. Ob eine übernommene Bewerbung dort wieder erscheint, wird aus dem + Zustand der Opportunity abgeleitet (Papierkorb oder weg), nicht gespeichert: + wird sie zurückgeholt, verschwindet der Eintrag von selbst wieder. Die Regeln + dafür stehen in `server/src/acquisitionRules.js`. ### Postfach crm@perinco.de diff --git a/docs/07-anleitung-benutzer.md b/docs/07-anleitung-benutzer.md index 90d5bec..8e2c23c 100644 --- a/docs/07-anleitung-benutzer.md +++ b/docs/07-anleitung-benutzer.md @@ -97,7 +97,7 @@ geschnitten wird - Tag, Monat, Quartal oder Jahr. | Kachel | Was gezählt wird | | --- | --- | | **Bewerbungen** | Einträge in der Akquise mit Funddatum im Zeitraum. Jeder Eintrag ist eine versendete Bewerbung - **auch die, aus denen inzwischen eine Opportunity geworden ist**. Die Zahl ist deshalb regelmäßig höher als die Akquise-Liste lang ist; unter den Kacheln steht, wie viele übernommen wurden. Ein von Hand gelöschter Eintrag zählt nicht mehr mit | -| **Zu Opportunity** | Bewerbungen, aus denen eine Opportunity geworden ist - dazu die Quote | +| **Zu Opportunity** | Bewerbungen, aus denen eine Opportunity geworden ist - dazu die Quote. Wird die Opportunity gelöscht, zählt sie nicht mehr mit: die Bewerbung fällt dann ins Archiv zurück | | **Gewonnen** | Opportunities, die in die Phase *Beauftragt* gekommen sind | | **Beim Kunden** | Opportunities, die **jetzt** in *Kundenvorstellung* oder *Interview Kunde* stehen - unabhängig vom Zeitraum | @@ -196,6 +196,13 @@ Endkunde, Beschreibung und Notizen. übernimmt es als Opportunity. * Wird ein Eintrag **übernommen**, verschwindet er aus Eingang und Archiv - er lebt als Opportunity weiter. +* Wird diese **Opportunity gelöscht**, taucht die Bewerbung wieder im **Archiv** + auf, gekennzeichnet mit *Opportunity im Papierkorb* bzw. *Opportunity + gelöscht*. Ohne das wäre sie nirgends mehr zu finden: aus der Akquise ist sie + mit der Übernahme heraus, und die Opportunity gibt es nicht mehr. Sie lässt + sich dann wieder bearbeiten und erneut übernehmen. Holt jemand die Opportunity + aus ihrem Papierkorb zurück, verschwindet der Eintrag von selbst wieder - und + auch ein solcher Rückfaller wird 90 Tage nach seinem Funddatum gelöscht. Verschoben wird dabei nichts: Eingang und Archiv sind dieselbe Liste, nur nach dem Funddatum geteilt. Es gibt also keinen Zustand, der klemmen kann. diff --git a/docs/09-quellcode.md b/docs/09-quellcode.md index 6c1b91a..95cdfa8 100644 --- a/docs/09-quellcode.md +++ b/docs/09-quellcode.md @@ -94,6 +94,7 @@ Alle unter `router.use(requireAuth)`. | `opportunities.js` | `GET /?trash=true`, `POST /`, `PATCH /:id`, `DELETE /:id` (Papierkorb), `POST /:id/restore`, `POST /trash/empty` | ändern, löschen und wiederherstellen nur Ersteller, Zuständiger oder Admin; Leeren jeder Angemeldete | | `acquisitions.js` | `GET /?view=eingang\|archiv\|alle`, `POST /`, `PATCH /:id`, `DELETE /:id`, `POST /:id/opportunity`; Auswahllisten: `GET/POST /options`, `PATCH/DELETE /options/:id` | Einträge ändern/löschen nur Ersteller oder Admin; Auswahllisten jeder Angemeldete | | `badges.js` | `GET /` | Zahlen für die Seitenleiste: Akquise-Archiv, beide Papierkörbe, verworfene Scanner-Treffer. Der Scanner-Zähler ist `null`, wenn dessen Datenbank fehlt | +| `acquisitionRules.js` (kein Router) | Fristen und die SQL-Bedingungen `IS_OPEN`, `IN_ARCHIVE`, `NOT_DUE`, `OPPORTUNITY_GONE`. Geteilt von Liste, Zählern, Aufräumlauf und Menüzahl - zwei Kopien derselben Regel sind einmal auseinandergelaufen | | `dashboard.js` | `GET /?from=&to=&bucket=tag\|monat\|quartal\|jahr` | drei Reihen über der Zeit plus Bewerbungen je Berater. Liest Akquise **und** `crm_acquisition_history`; Termine und Phasenlisten stehen bewusst nicht drin - die lädt die App ohnehin | | `mail.js` | `GET /status`, `/messages`, `/messages/:id`, `/candidates`; `POST /messages/:id/links`, `/messages/:id/restore`, `/candidates/:id/adopt`, `/candidates/:id/reject`, `/trash/empty`; `DELETE /links/:id`, `/messages/:id`; `requireAdmin`: `GET/POST /settings`, `POST /test`, `POST /sync` | lesen, zuordnen und löschen jeder; einrichten Admin |