Plan Kern-Kette P6-P7 (Kontakte, Leads) + Datei-Teilen v1
- WF-P6 Kontakte und Organisationen: Kontaktmodell validiert (ein Datensatz, Kontaktart = Rolle der Verknuepfung, Shell-Prinzip), Karteikarte als Detailseiten-Muster (Zweispalter + Reiter) - WF-P7 Leads: Triage-Inbox, Lead->Projekt als grosses Modal (+Bulk), CSV-Import-Wizard (Davids Delta/CR), Quellen + Spam-Schutz - WF-P4 Dateien: Teilen/Freigeben in v1 (intern + Link, Preset Mit mir geteilt) - Paket-Canvases auf Default-Kurven, MD-Verknuepfungen je Canvas Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
e48a5a46e8
commit
ca078436df
28 files changed
+2424
-432
No files matched your search
@@ -9,24 +9,24 @@
|
||||
"height": 420,
|
||||
"label": "Hauptflow"
|
||||
},
|
||||
{
|
||||
"id": "group-schnell",
|
||||
"type": "group",
|
||||
"x": -80,
|
||||
"y": 460,
|
||||
"width": 1000,
|
||||
"height": 400,
|
||||
"label": "Schnellzugriff (Davids Delta)"
|
||||
},
|
||||
{
|
||||
"id": "group-anlage",
|
||||
"type": "group",
|
||||
"x": 1060,
|
||||
"y": 460,
|
||||
"x": -80,
|
||||
"y": 480,
|
||||
"width": 1240,
|
||||
"height": 400,
|
||||
"label": "Anlegen und Einbettung"
|
||||
},
|
||||
{
|
||||
"id": "group-schnell",
|
||||
"type": "group",
|
||||
"x": 1260,
|
||||
"y": 480,
|
||||
"width": 1000,
|
||||
"height": 400,
|
||||
"label": "Schnellzugriff (Davids Delta)"
|
||||
},
|
||||
{
|
||||
"id": "note-entry",
|
||||
"type": "text",
|
||||
@@ -54,42 +54,6 @@
|
||||
"width": 420,
|
||||
"height": 200
|
||||
},
|
||||
{
|
||||
"id": "note-topbar",
|
||||
"type": "text",
|
||||
"text": "# Einstieg\n\nTopbar-Button »Meine Aufgaben« (Davids Ergänzung).",
|
||||
"x": 0,
|
||||
"y": 560,
|
||||
"width": 320,
|
||||
"height": 200
|
||||
},
|
||||
{
|
||||
"id": "s03",
|
||||
"type": "file",
|
||||
"file": "02 Wireframes/P4 Aufgaben und Dateien/WF-P4 Aufgaben/Screens/S03 Aufgaben-Drawer.md",
|
||||
"x": 440,
|
||||
"y": 560,
|
||||
"width": 420,
|
||||
"height": 200
|
||||
},
|
||||
{
|
||||
"id": "m01",
|
||||
"type": "file",
|
||||
"file": "02 Wireframes/P4 Aufgaben und Dateien/WF-P4 Aufgaben/Screens/M01 Aufgabe anlegen.md",
|
||||
"x": 1120,
|
||||
"y": 560,
|
||||
"width": 420,
|
||||
"height": 200
|
||||
},
|
||||
{
|
||||
"id": "v01",
|
||||
"type": "file",
|
||||
"file": "02 Wireframes/P4 Aufgaben und Dateien/WF-P4 Aufgaben/Screens/V01 Eingebettete Kompakt-Variante.md",
|
||||
"x": 1600,
|
||||
"y": 560,
|
||||
"width": 420,
|
||||
"height": 200
|
||||
},
|
||||
{
|
||||
"id": "md-paket",
|
||||
"type": "file",
|
||||
@@ -98,20 +62,54 @@
|
||||
"y": -440,
|
||||
"width": 460,
|
||||
"height": 280
|
||||
},
|
||||
{
|
||||
"id": "m01",
|
||||
"type": "file",
|
||||
"file": "02 Wireframes/P4 Aufgaben und Dateien/WF-P4 Aufgaben/Screens/M01 Aufgabe anlegen.md",
|
||||
"x": -20,
|
||||
"y": 580,
|
||||
"width": 420,
|
||||
"height": 200
|
||||
},
|
||||
{
|
||||
"id": "v01",
|
||||
"type": "file",
|
||||
"file": "02 Wireframes/P4 Aufgaben und Dateien/WF-P4 Aufgaben/Screens/V01 Eingebettete Kompakt-Variante.md",
|
||||
"x": 460,
|
||||
"y": 580,
|
||||
"width": 420,
|
||||
"height": 200
|
||||
},
|
||||
{
|
||||
"id": "note-topbar",
|
||||
"type": "text",
|
||||
"text": "# Einstieg\n\nTopbar-Button »Meine Aufgaben« (Davids Ergänzung).",
|
||||
"x": 1340,
|
||||
"y": 580,
|
||||
"width": 320,
|
||||
"height": 200
|
||||
},
|
||||
{
|
||||
"id": "s03",
|
||||
"type": "file",
|
||||
"file": "02 Wireframes/P4 Aufgaben und Dateien/WF-P4 Aufgaben/Screens/S03 Aufgaben-Drawer.md",
|
||||
"x": 1780,
|
||||
"y": 580,
|
||||
"width": 420,
|
||||
"height": 200
|
||||
}
|
||||
],
|
||||
"edges": [
|
||||
{
|
||||
"id": "e-entry",
|
||||
"styleAttributes": {
|
||||
"path": "dotted"
|
||||
},
|
||||
"fromNode": "note-entry",
|
||||
"fromSide": "right",
|
||||
"toNode": "s01",
|
||||
"toSide": "left",
|
||||
"toEnd": "arrow",
|
||||
"styleAttributes": {
|
||||
"path": "dotted",
|
||||
"pathfindingMethod": "direct"
|
||||
}
|
||||
"toSide": "left"
|
||||
},
|
||||
{
|
||||
"id": "e-open",
|
||||
@@ -119,60 +117,50 @@
|
||||
"fromSide": "right",
|
||||
"toNode": "s02",
|
||||
"toSide": "left",
|
||||
"toEnd": "arrow",
|
||||
"label": "Zeile öffnen",
|
||||
"styleAttributes": {
|
||||
"pathfindingMethod": "direct"
|
||||
}
|
||||
"label": "Zeile öffnen"
|
||||
},
|
||||
{
|
||||
"id": "e-topbar",
|
||||
"styleAttributes": {
|
||||
"path": "dotted"
|
||||
},
|
||||
"fromNode": "note-topbar",
|
||||
"fromSide": "right",
|
||||
"toNode": "s03",
|
||||
"toSide": "left",
|
||||
"toEnd": "arrow",
|
||||
"styleAttributes": {
|
||||
"path": "dotted",
|
||||
"pathfindingMethod": "direct"
|
||||
}
|
||||
"toSide": "left"
|
||||
},
|
||||
{
|
||||
"id": "e-drawer",
|
||||
"toFloating": false,
|
||||
"fromNode": "s03",
|
||||
"fromSide": "top",
|
||||
"toNode": "s02",
|
||||
"toSide": "bottom",
|
||||
"toEnd": "arrow",
|
||||
"label": "Eintrag öffnen",
|
||||
"styleAttributes": {
|
||||
"pathfindingMethod": "direct"
|
||||
}
|
||||
"label": "Eintrag öffnen"
|
||||
},
|
||||
{
|
||||
"id": "e-new",
|
||||
"fromFloating": false,
|
||||
"fromNode": "s01",
|
||||
"fromSide": "bottom",
|
||||
"toNode": "m01",
|
||||
"toSide": "top",
|
||||
"toEnd": "arrow",
|
||||
"label": "Neue Aufgabe (auch aus S03 + Detailseiten, vorbefüllt)",
|
||||
"styleAttributes": {
|
||||
"pathfindingMethod": "direct"
|
||||
}
|
||||
"label": "Neue Aufgabe (auch aus S03 + Detailseiten, vorbefüllt)"
|
||||
},
|
||||
{
|
||||
"id": "e-variant",
|
||||
"styleAttributes": {
|
||||
"path": "short-dashed"
|
||||
},
|
||||
"fromNode": "v01",
|
||||
"fromSide": "top",
|
||||
"toNode": "s01",
|
||||
"toSide": "bottom",
|
||||
"toEnd": "arrow",
|
||||
"label": "kompakte Ausführung von S01",
|
||||
"styleAttributes": {
|
||||
"path": "short-dashed",
|
||||
"pathfindingMethod": "direct"
|
||||
}
|
||||
"label": "kompakte Ausführung von S01"
|
||||
}
|
||||
]
|
||||
],
|
||||
"metadata": {
|
||||
"version": "1.0-1.0",
|
||||
"frontmatter": {}
|
||||
}
|
||||
}
|
||||
@@ -109,8 +109,7 @@
|
||||
"toSide": "left",
|
||||
"toEnd": "arrow",
|
||||
"styleAttributes": {
|
||||
"path": "dotted",
|
||||
"pathfindingMethod": "direct"
|
||||
"path": "dotted"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -120,10 +119,7 @@
|
||||
"toNode": "s03",
|
||||
"toSide": "left",
|
||||
"toEnd": "arrow",
|
||||
"label": "Datei öffnen",
|
||||
"styleAttributes": {
|
||||
"pathfindingMethod": "direct"
|
||||
}
|
||||
"label": "Datei öffnen"
|
||||
},
|
||||
{
|
||||
"id": "e-upload",
|
||||
@@ -132,10 +128,7 @@
|
||||
"toNode": "s02",
|
||||
"toSide": "top",
|
||||
"toEnd": "arrow",
|
||||
"label": "Hochladen",
|
||||
"styleAttributes": {
|
||||
"pathfindingMethod": "direct"
|
||||
}
|
||||
"label": "Hochladen"
|
||||
},
|
||||
{
|
||||
"id": "e-done",
|
||||
@@ -146,8 +139,7 @@
|
||||
"toEnd": "arrow",
|
||||
"label": "fertige Datei öffnen",
|
||||
"styleAttributes": {
|
||||
"path": "long-dashed",
|
||||
"pathfindingMethod": "direct"
|
||||
"path": "long-dashed"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -157,10 +149,7 @@
|
||||
"toNode": "m01",
|
||||
"toSide": "top",
|
||||
"toEnd": "arrow",
|
||||
"label": "Freigeben (auch aus S03)",
|
||||
"styleAttributes": {
|
||||
"pathfindingMethod": "direct"
|
||||
}
|
||||
"label": "Freigeben (auch aus S03)"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,28 +1,206 @@
|
||||
{
|
||||
"nodes":[
|
||||
{"id":"md-paket","type":"file","file":"02 Wireframes/P5 Integrationen/WF-P5 Integrationen/WF-P5 Integrationen.md","x":-80,"y":-440,"width":460,"height":280},
|
||||
{"id":"group-main","type":"group","x":-80,"y":-100,"width":1720,"height":420,"label":"Hauptflow"},
|
||||
{"id":"group-sync","type":"group","x":1800,"y":-100,"width":1120,"height":420,"label":"Sync-Verlauf (eigene Seiten)"},
|
||||
{"id":"group-wizard","type":"group","x":-80,"y":460,"width":1720,"height":420,"label":"Einrichtungs-Assistent und Trennen"},
|
||||
{"id":"group-notes","type":"group","x":1800,"y":460,"width":1120,"height":420,"label":"Regeln"},
|
||||
{"id":"note-entry","type":"text","text":"# Einstieg\n\nSidebar → Integrationen (`/admin/integrations`).\n\nNur mit Recht `integrations.read`.","x":0,"y":0,"width":360,"height":200},
|
||||
{"id":"s01","type":"file","file":"02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/S01 App-Katalog.md","x":560,"y":0,"width":420,"height":200},
|
||||
{"id":"s02","type":"file","file":"02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/S02 App-Seite.md","x":1180,"y":0,"width":420,"height":200},
|
||||
{"id":"s03","type":"file","file":"02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/S03 Sync-Verlauf.md","x":1840,"y":0,"width":420,"height":200},
|
||||
{"id":"s04","type":"file","file":"02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/S04 Lauf-Detail.md","x":2460,"y":0,"width":420,"height":200},
|
||||
{"id":"m01","type":"file","file":"02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/M01 Assistent OAuth.md","x":40,"y":560,"width":420,"height":200},
|
||||
{"id":"m02","type":"file","file":"02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/M02 Assistent API-Schluessel.md","x":620,"y":560,"width":420,"height":200},
|
||||
{"id":"m03","type":"file","file":"02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/M03 Trennen-Bestaetigung.md","x":1200,"y":560,"width":420,"height":200},
|
||||
{"id":"note-framework","type":"text","text":"# Wiederverwendung\n\nConnection-Card + Assistent + Verlauf sind das **Gerüst für alle App-Verbindungen**: E-Mail (P14), Telefonie (P15), Kalender/Signatur (P16) nutzen dieselben Bausteine in ihren Settings.","x":1840,"y":560,"width":520,"height":260},
|
||||
{"id":"note-banner","type":"text","text":"# Zustände (nur Doku)\n\nAmpel: grün läuft · gelb hakt · rot kaputt · grau getrennt.\n\nGelb/Rot/Schema geändert → Klartext-Banner mit Lösungs-Knopf. Trennen = Status »getrennt«, kein Löschen.","x":2420,"y":560,"width":460,"height":260}
|
||||
],
|
||||
"edges":[
|
||||
{"id":"e-entry","fromNode":"note-entry","fromSide":"right","toNode":"s01","toSide":"left","toEnd":"arrow","styleAttributes":{"path":"dotted","pathfindingMethod":"direct"}},
|
||||
{"id":"e-app","fromNode":"s01","fromSide":"right","toNode":"s02","toSide":"left","toEnd":"arrow","label":"App öffnen","styleAttributes":{"pathfindingMethod":"direct"}},
|
||||
{"id":"e-verlauf","fromNode":"s02","fromSide":"right","toNode":"s03","toSide":"left","toEnd":"arrow","label":"alle Läufe anzeigen","styleAttributes":{"pathfindingMethod":"direct"}},
|
||||
{"id":"e-lauf","fromNode":"s03","fromSide":"right","toNode":"s04","toSide":"left","toEnd":"arrow","label":"Lauf öffnen","styleAttributes":{"pathfindingMethod":"direct"}},
|
||||
{"id":"e-oauth","fromNode":"s02","fromSide":"bottom","toNode":"m01","toSide":"top","toEnd":"arrow","label":"Verbinden (OAuth)","styleAttributes":{"pathfindingMethod":"direct"}},
|
||||
{"id":"e-key","fromNode":"s02","fromSide":"bottom","toNode":"m02","toSide":"top","toEnd":"arrow","label":"Verbinden (API-Schlüssel)","styleAttributes":{"pathfindingMethod":"direct"}},
|
||||
{"id":"e-trennen","fromNode":"s02","fromSide":"bottom","toNode":"m03","toSide":"top","toEnd":"arrow","label":"Trennen","styleAttributes":{"pathfindingMethod":"direct"}}
|
||||
]
|
||||
}
|
||||
"nodes": [
|
||||
{
|
||||
"id": "md-paket",
|
||||
"type": "file",
|
||||
"file": "02 Wireframes/P5 Integrationen/WF-P5 Integrationen/WF-P5 Integrationen.md",
|
||||
"x": -80,
|
||||
"y": -440,
|
||||
"width": 460,
|
||||
"height": 280
|
||||
},
|
||||
{
|
||||
"id": "group-main",
|
||||
"type": "group",
|
||||
"x": -80,
|
||||
"y": -100,
|
||||
"width": 1720,
|
||||
"height": 420,
|
||||
"label": "Hauptflow"
|
||||
},
|
||||
{
|
||||
"id": "group-sync",
|
||||
"type": "group",
|
||||
"x": 1800,
|
||||
"y": -100,
|
||||
"width": 1120,
|
||||
"height": 420,
|
||||
"label": "Sync-Verlauf (eigene Seiten)"
|
||||
},
|
||||
{
|
||||
"id": "group-wizard",
|
||||
"type": "group",
|
||||
"x": -80,
|
||||
"y": 460,
|
||||
"width": 1720,
|
||||
"height": 420,
|
||||
"label": "Einrichtungs-Assistent und Trennen"
|
||||
},
|
||||
{
|
||||
"id": "group-notes",
|
||||
"type": "group",
|
||||
"x": 1800,
|
||||
"y": 460,
|
||||
"width": 1120,
|
||||
"height": 420,
|
||||
"label": "Regeln"
|
||||
},
|
||||
{
|
||||
"id": "note-entry",
|
||||
"type": "text",
|
||||
"text": "# Einstieg\n\nSidebar → Integrationen (`/admin/integrations`).\n\nNur mit Recht `integrations.read`.",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"width": 360,
|
||||
"height": 200
|
||||
},
|
||||
{
|
||||
"id": "s01",
|
||||
"type": "file",
|
||||
"file": "02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/S01 App-Katalog.md",
|
||||
"x": 560,
|
||||
"y": 0,
|
||||
"width": 420,
|
||||
"height": 200
|
||||
},
|
||||
{
|
||||
"id": "s02",
|
||||
"type": "file",
|
||||
"file": "02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/S02 App-Seite.md",
|
||||
"x": 1180,
|
||||
"y": 0,
|
||||
"width": 420,
|
||||
"height": 200
|
||||
},
|
||||
{
|
||||
"id": "s03",
|
||||
"type": "file",
|
||||
"file": "02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/S03 Sync-Verlauf.md",
|
||||
"x": 1840,
|
||||
"y": 0,
|
||||
"width": 420,
|
||||
"height": 200
|
||||
},
|
||||
{
|
||||
"id": "s04",
|
||||
"type": "file",
|
||||
"file": "02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/S04 Lauf-Detail.md",
|
||||
"x": 2460,
|
||||
"y": 0,
|
||||
"width": 420,
|
||||
"height": 200
|
||||
},
|
||||
{
|
||||
"id": "m01",
|
||||
"type": "file",
|
||||
"file": "02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/M01 Assistent OAuth.md",
|
||||
"x": 40,
|
||||
"y": 560,
|
||||
"width": 420,
|
||||
"height": 200
|
||||
},
|
||||
{
|
||||
"id": "m02",
|
||||
"type": "file",
|
||||
"file": "02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/M02 Assistent API-Schluessel.md",
|
||||
"x": 620,
|
||||
"y": 560,
|
||||
"width": 420,
|
||||
"height": 200
|
||||
},
|
||||
{
|
||||
"id": "m03",
|
||||
"type": "file",
|
||||
"file": "02 Wireframes/P5 Integrationen/WF-P5 Integrationen/Screens/M03 Trennen-Bestaetigung.md",
|
||||
"x": 1200,
|
||||
"y": 560,
|
||||
"width": 420,
|
||||
"height": 200
|
||||
},
|
||||
{
|
||||
"id": "note-framework",
|
||||
"type": "text",
|
||||
"text": "# Wiederverwendung\n\nConnection-Card + Assistent + Verlauf sind das **Gerüst für alle App-Verbindungen**: E-Mail (P14), Telefonie (P15), Kalender/Signatur (P16) nutzen dieselben Bausteine in ihren Settings.",
|
||||
"x": 1840,
|
||||
"y": 560,
|
||||
"width": 520,
|
||||
"height": 260
|
||||
},
|
||||
{
|
||||
"id": "note-banner",
|
||||
"type": "text",
|
||||
"text": "# Zustände (nur Doku)\n\nAmpel: grün läuft · gelb hakt · rot kaputt · grau getrennt.\n\nGelb/Rot/Schema geändert → Klartext-Banner mit Lösungs-Knopf. Trennen = Status »getrennt«, kein Löschen.",
|
||||
"x": 2420,
|
||||
"y": 560,
|
||||
"width": 460,
|
||||
"height": 260
|
||||
}
|
||||
],
|
||||
"edges": [
|
||||
{
|
||||
"id": "e-entry",
|
||||
"fromNode": "note-entry",
|
||||
"fromSide": "right",
|
||||
"toNode": "s01",
|
||||
"toSide": "left",
|
||||
"toEnd": "arrow",
|
||||
"styleAttributes": {
|
||||
"path": "dotted"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "e-app",
|
||||
"fromNode": "s01",
|
||||
"fromSide": "right",
|
||||
"toNode": "s02",
|
||||
"toSide": "left",
|
||||
"toEnd": "arrow",
|
||||
"label": "App öffnen"
|
||||
},
|
||||
{
|
||||
"id": "e-verlauf",
|
||||
"fromNode": "s02",
|
||||
"fromSide": "right",
|
||||
"toNode": "s03",
|
||||
"toSide": "left",
|
||||
"toEnd": "arrow",
|
||||
"label": "alle Läufe anzeigen"
|
||||
},
|
||||
{
|
||||
"id": "e-lauf",
|
||||
"fromNode": "s03",
|
||||
"fromSide": "right",
|
||||
"toNode": "s04",
|
||||
"toSide": "left",
|
||||
"toEnd": "arrow",
|
||||
"label": "Lauf öffnen"
|
||||
},
|
||||
{
|
||||
"id": "e-oauth",
|
||||
"fromNode": "s02",
|
||||
"fromSide": "bottom",
|
||||
"toNode": "m01",
|
||||
"toSide": "top",
|
||||
"toEnd": "arrow",
|
||||
"label": "Verbinden (OAuth)"
|
||||
},
|
||||
{
|
||||
"id": "e-key",
|
||||
"fromNode": "s02",
|
||||
"fromSide": "bottom",
|
||||
"toNode": "m02",
|
||||
"toSide": "top",
|
||||
"toEnd": "arrow",
|
||||
"label": "Verbinden (API-Schlüssel)"
|
||||
},
|
||||
{
|
||||
"id": "e-trennen",
|
||||
"fromNode": "s02",
|
||||
"fromSide": "bottom",
|
||||
"toNode": "m03",
|
||||
"toSide": "top",
|
||||
"toEnd": "arrow",
|
||||
"label": "Trennen"
|
||||
}
|
||||
]
|
||||
}
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-CRM
|
||||
package: WF-P6 Kontakte und Organisationen
|
||||
id: M01
|
||||
screen: Kontakt anlegen
|
||||
typ: Modal
|
||||
umsetzung: Bauen
|
||||
status: Validiert
|
||||
route: "aus S01 + ueberall (z. B. Lead-Konvertierung)"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# M01 — Kontakt anlegen
|
||||
|
||||
## Ziel
|
||||
|
||||
Neuen Kontakt in Sekunden anlegen — ohne Dubletten zu produzieren.
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A5 Dialog (echtes Modal: DialogLayout → Dialog → Dialog.Content).
|
||||
|
||||
## Daten
|
||||
|
||||
- **Pflicht: nur der Name.** Optional: Typ (Privatperson/Organisation, Default Privatperson), E-Mail, Telefon, Organisation verknüpfen (mit Rolle), Verantwortlicher
|
||||
- **Live-Duplikat-Check** beim Tippen (Name/E-Mail/Telefon): Banner »Gibt es schon?« mit Treffer-Vorschau
|
||||
|
||||
## Aktionen
|
||||
|
||||
- »Anlegen« → Karteikarte öffnet sich (dort Rest pflegen)
|
||||
- Bei Duplikat-Banner: »Bestehenden öffnen« oder »Trotzdem anlegen«
|
||||
- Abbrechen
|
||||
|
||||
## Meldungsentscheidung
|
||||
|
||||
| Ereignis | UI-Form | Blockiert? | Umsetzung | Copy/Notiz |
|
||||
|---|---|---|---|---|
|
||||
| Mögliches Duplikat | Banner im Modal | nein | Nur dokumentieren | Treffer klickbar |
|
||||
| Name leer | Inline-Validierung | ja (Feld) | Nur dokumentieren | einziges Pflichtfeld |
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
|
||||
## Notizen
|
||||
|
||||
- Wird auch aus anderen Flows geöffnet (z. B. Lead → Projekt: Kontakt verknüpfen/anlegen in D-P7).
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-CRM
|
||||
package: WF-P6 Kontakte und Organisationen
|
||||
id: M02
|
||||
screen: Organisation anlegen
|
||||
typ: Modal
|
||||
umsetzung: Bauen
|
||||
status: Validiert
|
||||
route: "aus S02 + aus M01/S03 (Organisation verknuepfen)"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# M02 — Organisation anlegen
|
||||
|
||||
## Ziel
|
||||
|
||||
Neue Organisation schnell anlegen — gleiches Muster wie Kontakt anlegen.
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A5 Dialog, analog [[M01 Kontakt anlegen]].
|
||||
|
||||
## Daten
|
||||
|
||||
- **Pflicht: nur der Name.** Optional: Branche/Merkmal, E-Mail, Telefon, Adresse, Verantwortlicher, Hauptkontakt verknüpfen
|
||||
- Live-Duplikat-Check (Name/E-Mail)
|
||||
|
||||
## Aktionen
|
||||
|
||||
- »Anlegen« → Organisations-Karteikarte öffnet
|
||||
- Duplikat-Banner: »Bestehende öffnen« / »Trotzdem anlegen«
|
||||
- Abbrechen
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-CRM
|
||||
package: WF-P6 Kontakte und Organisationen
|
||||
id: M03
|
||||
screen: Zusammenfuehren
|
||||
typ: Modal (gross)
|
||||
umsetzung: Bauen
|
||||
status: Validiert
|
||||
route: "aus S07"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# M03 — Zusammenführen (Seite an Seite)
|
||||
|
||||
## Ziel
|
||||
|
||||
Zwei Dubletten kontrolliert zu einem Eintrag verschmelzen — Feld für Feld.
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A5 großes Modal mit **Side-by-Side-Vergleich** (aufwendigste Einzelkomponente des Pakets).
|
||||
|
||||
## Daten
|
||||
|
||||
- Beide Einträge nebeneinander, Feld für Feld
|
||||
- Je Feld wählbar, welcher Wert überlebt (Standard: der vollständigere)
|
||||
- Unten: was zusammengeführt wird (Verlauf, Aufgaben, Dateien, Projekte beider Einträge wandern zum Ziel)
|
||||
|
||||
## Aktionen
|
||||
|
||||
- Feld-Auswahl je Zeile (links/rechts)
|
||||
- »Zusammenführen« → Bestätigung mit Klartext: **»Kann nicht rückgängig gemacht werden. Der andere Eintrag wird aufgelöst, sein Verlauf bleibt erhalten.«**
|
||||
- Abbrechen
|
||||
|
||||
## Meldungsentscheidung
|
||||
|
||||
| Ereignis | UI-Form | Blockiert? | Umsetzung | Copy/Notiz |
|
||||
|---|---|---|---|---|
|
||||
| Endgültigkeit | Bestätigungs-Schritt | ja | Nur dokumentieren | s. oben |
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-CRM
|
||||
package: WF-P6 Kontakte und Organisationen
|
||||
id: S01
|
||||
screen: Kontakte-Liste
|
||||
typ: Liste
|
||||
umsetzung: Bauen
|
||||
status: Validiert
|
||||
route: "/contacts"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# S01 — Kontakte-Liste
|
||||
|
||||
## Ziel
|
||||
|
||||
Jeden Kontakt in Sekunden finden.
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A2 Liste; oben Reiter-Wechsel zu [[S02 Organisationen-Liste]].
|
||||
|
||||
## Daten
|
||||
|
||||
- **Zeigt ALLE Personen** — auch Ansprechpartner aus Organisationen (validiert): Zeile macht die Zugehörigkeit sichtbar (Organisation + Rollen-Badge Haupt-/Sekundärkontakt)
|
||||
- Zeile: Avatar + Name · Organisation (mit Rolle) · Kontaktstatus (Kontakt/Kunde/Bestandskunde) · E-Mail · Telefon · Tags · Verantwortlicher · letzte Aktivität
|
||||
- Suche · Filter: Verantwortlicher, Kontaktstatus, Tags (UND/ODER), Organisation (auch »ohne Organisation«), Datum · Archiviert-Schalter
|
||||
- Keine Misch-Liste: Organisationen haben ihren eigenen Reiter ([[S02 Organisationen-Liste]])
|
||||
- Server-seitig sortiert/paginiert
|
||||
|
||||
## Aktionen
|
||||
|
||||
- Zeile öffnen → [[S03 Kontakt-Karteikarte]]
|
||||
- »+ Kontakt« → [[M01 Kontakt anlegen]]
|
||||
- Mehrfach-Auswahl: Tag vergeben · Verantwortlichen zuweisen · Archivieren · CSV-Export
|
||||
|
||||
## Zustände
|
||||
|
||||
| Zustand | Beschreibung | Umsetzung |
|
||||
|---|---|---|
|
||||
| Leer (Filter/read_own) | »Keine Kontakte für diese Filter« + zurücksetzen | Nur dokumentieren |
|
||||
| Laden / Fehler | A7 | Wiederverwenden |
|
||||
|
||||
## Permissions / Gates
|
||||
|
||||
`crm.*` — bei `read_own` erscheinen nur eigene Kontakte (server-seitig).
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
|
||||
## Notizen
|
||||
|
||||
- D01 Inline-Anlegen (Notion-Stil: Plus → neue Zeile, nur Name Pflicht, leere Zeile löscht sich) — dokumentiert, Später.
|
||||
- Großer CSV-Export läuft im Hintergrund + Benachrichtigung.
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-CRM
|
||||
package: WF-P6 Kontakte und Organisationen
|
||||
id: S02
|
||||
screen: Organisationen-Liste
|
||||
typ: Liste
|
||||
umsetzung: Bauen
|
||||
status: Validiert
|
||||
route: "/contacts/companies"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# S02 — Organisationen-Liste
|
||||
|
||||
## Ziel
|
||||
|
||||
Alle Firmen/Organisationen im Blick — zweiter Einstieg im Kontakte-Tab.
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A2 Liste (Reiter neben [[S01 Kontakte-Liste]]). UI-Begriff: **»Organisation«**, nicht »Unternehmen«.
|
||||
|
||||
## Daten
|
||||
|
||||
- Zeile: Name · Branche/Merkmal · Anzahl verknüpfter Kontakte · Verantwortlicher · letzte Aktivität · Tags
|
||||
- Suche · Filter analog S01
|
||||
|
||||
## Aktionen
|
||||
|
||||
- Zeile öffnen → [[S04 Organisations-Karteikarte]]
|
||||
- »+ Organisation« → [[M02 Organisation anlegen]]
|
||||
- Mehrfach-Aktionen analog S01
|
||||
|
||||
## Zustände
|
||||
|
||||
| Zustand | Beschreibung | Umsetzung |
|
||||
|---|---|---|
|
||||
| Leer / Laden / Fehler | analog S01 | Wiederverwenden |
|
||||
|
||||
## Permissions / Gates
|
||||
|
||||
Wie S01.
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-CRM
|
||||
package: WF-P6 Kontakte und Organisationen
|
||||
id: S03
|
||||
screen: Kontakt-Karteikarte
|
||||
typ: Detail (Muster-Vorlage)
|
||||
umsetzung: Bauen
|
||||
status: Validiert
|
||||
route: "/contacts/:id"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# S03 — Kontakt-Karteikarte ⭐
|
||||
|
||||
## Ziel
|
||||
|
||||
In 5 Sekunden im Bilde sein: Wer ist das, was lief zuletzt, was ist offen? **Die Muster-Vorlage für ALLE Detailseiten der App.**
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A3 Detail — validiertes Grundgerüst: **Zweispalter + Reiter**.
|
||||
|
||||
## Aufbau (validiert)
|
||||
|
||||
- **Kopf:** Avatar, Name, Kontaktstatus-Badge, Organisation + Rolle · **Schnell-Aktionen:** Anrufen (v1: `tel:`-Link; AirCall kommt mit P15) · E-Mail · Termin · Aufgabe · Tag
|
||||
- **Linke Spalte (schmal):** Stammdaten inline editierbar (Klick → Feld → speichern) · eigene Felder (SHK-Vorlagen) · Tags · **Verknüpfungen mit Rolle**: Organisationen, bei denen die Person Haupt-/Sekundärkontakt ist — und umgekehrt kann auch eine Privatperson eigene Sekundärkontakte haben (z. B. Ehepartner), gleiche Mechanik wie bei Organisationen
|
||||
- **Rechte Spalte (breit), Reiter:**
|
||||
- **Verlauf** (Default): chronologischer Activity-Stream — Anrufe, BCC-Mails, Notizen, Status-Wechsel, mit Actor-Marker
|
||||
- **Projekte:** verknüpfte Projekte mit Board-Status (kommt inhaltlich mit D-P8)
|
||||
- **Aufgaben:** eingebettete Kompakt-Liste = V01 aus WF-P4 Aufgaben
|
||||
- **Dateien:** vorgefilterte Datei-Sektion aus WF-P4 Dateien
|
||||
- **Notizen:** Markdown-Notizen
|
||||
- **»Verlauf dieses Objekts«** (Audit): Einstieg zum M03-Drawer aus WF-P3 Audit Log
|
||||
|
||||
## Aktionen
|
||||
|
||||
- Inline-Edit aller Stammdaten/eigenen Felder · Tag hinzufügen/entfernen · Organisation verknüpfen (mit Rolle)
|
||||
- Archivieren · Zusammenführen-Hinweis bei Duplikat-Verdacht
|
||||
|
||||
## Banner / Hinweise
|
||||
|
||||
- Duplikat-Verdacht: Banner »Ähnlicher Kontakt existiert« → Duplikat-Tool
|
||||
|
||||
## Zustände
|
||||
|
||||
| Zustand | Beschreibung | Umsetzung |
|
||||
|---|---|---|
|
||||
| Nicht gefunden / kein Recht | 404 | Wiederverwenden |
|
||||
| Laden / Fehler | A7 | Wiederverwenden |
|
||||
| Verlauf leer | »Noch keine Aktivitäten« | Nur dokumentieren |
|
||||
|
||||
## Permissions / Gates
|
||||
|
||||
`crm.*`; Schnell-Aktionen rechte-abhängig.
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
|
||||
## Notizen
|
||||
|
||||
- **Nach dem Subframe-Bau:** dieses Muster (Kopf + Zweispalter + Reiter) als Detailseiten-Standard festhalten → `04 Standards`, nur mit Davids Freigabe.
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-CRM
|
||||
package: WF-P6 Kontakte und Organisationen
|
||||
id: S04
|
||||
screen: Organisations-Karteikarte
|
||||
typ: Detail
|
||||
umsetzung: Bauen
|
||||
status: Validiert
|
||||
route: "/contacts/companies/:id"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# S04 — Organisations-Karteikarte
|
||||
|
||||
## Ziel
|
||||
|
||||
Alles über eine Organisation — gleiches Muster wie die Kontakt-Karteikarte.
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A3, **gleiches Grundgerüst wie [[S03 Kontakt-Karteikarte]]** (Zweispalter + Reiter).
|
||||
|
||||
## Unterschiede zu S03
|
||||
|
||||
- Linke Spalte zusätzlich: **Ansprechpartner-Liste** — alle verknüpften Personen mit Rollen-Badge, **genau ein Hauptkontakt** (markiert, umhängbar; erste zugeordnete Person wird automatisch Hauptkontakt) · hinzufügen (bestehenden Kontakt oder neu via [[M01 Kontakt anlegen]])
|
||||
- Kopf: Organisations-Merkmal/Branche statt Kontaktstatus-Person-Logik (Status gibt es auch hier: Kontakt/Kunde/Bestandskunde)
|
||||
- Reiter identisch: Verlauf · Projekte · Aufgaben · Dateien · Notizen
|
||||
|
||||
## Zustände / Permissions
|
||||
|
||||
Wie S03.
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-CRM
|
||||
package: WF-P6 Kontakte und Organisationen
|
||||
id: S05
|
||||
screen: Eigene Felder
|
||||
typ: Settings-Liste
|
||||
umsetzung: Bauen
|
||||
status: Validiert
|
||||
route: "/admin/custom-fields (Einstellungen -> Daten)"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# S05 — Eigene Felder
|
||||
|
||||
## Ziel
|
||||
|
||||
Zusatzfelder definieren, die der Betrieb wirklich braucht (»Heizungstyp«, »Baujahr Anlage«).
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A2 Settings-Liste unter Einstellungen → Daten.
|
||||
|
||||
## Daten
|
||||
|
||||
- Felder je Ziel-Typ (Kontakt / Projekt / Anfrage / Rechnung — umschaltbar)
|
||||
- Je Feld: Name · Feld-Typ (Text, Zahl, Datum, Auswahl …) · Nutzungs-Anzahl · Quelle (SHK-Vorlage / eigenes) · Sortierung (Ziehen)
|
||||
- SHK-Branchen-Felder sind vorbefüllt
|
||||
|
||||
## Aktionen
|
||||
|
||||
- Feld anlegen/bearbeiten (kleines Modal/Inline) · Archivieren (kein Hard-Delete bei Nutzung) · Reihenfolge ziehen
|
||||
|
||||
## Zustände
|
||||
|
||||
| Zustand | Beschreibung | Umsetzung |
|
||||
|---|---|---|
|
||||
| Feld in Nutzung archivieren | Hinweis mit Nutzungs-Anzahl | Nur dokumentieren |
|
||||
| Laden / Fehler / kein Zugriff | A7 | Wiederverwenden |
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
@@ -0,0 +1,43 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-CRM
|
||||
package: WF-P6 Kontakte und Organisationen
|
||||
id: S06
|
||||
screen: Tags
|
||||
typ: Settings-Liste
|
||||
umsetzung: Bauen
|
||||
status: Validiert
|
||||
route: "/admin/tags (Einstellungen -> Daten)"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# S06 — Tags
|
||||
|
||||
## Ziel
|
||||
|
||||
Tags zentral pflegen, Wildwuchs zusammenführen.
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A2 Settings-Liste unter Einstellungen → Daten.
|
||||
|
||||
## Daten
|
||||
|
||||
- Je Tag: Name · Farbe · Anzahl Verknüpfungen
|
||||
|
||||
## Aktionen
|
||||
|
||||
- Tag anlegen/umbenennen/Farbe ändern
|
||||
- **Zusammenführen** (Tag A in Tag B aufgehen lassen, mit Bestätigung + Anzahl-Klartext)
|
||||
- Löschen (mit Hinweis auf Verknüpfungs-Anzahl)
|
||||
|
||||
## Zustände
|
||||
|
||||
| Zustand | Beschreibung | Umsetzung |
|
||||
|---|---|---|
|
||||
| Laden / Fehler / kein Zugriff | A7 | Wiederverwenden |
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-CRM
|
||||
package: WF-P6 Kontakte und Organisationen
|
||||
id: S07
|
||||
screen: Duplikat-Tool
|
||||
typ: Settings-Liste
|
||||
umsetzung: Bauen
|
||||
status: Validiert
|
||||
route: "/admin/duplicates (Einstellungen -> Daten)"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# S07 — Duplikat-Tool
|
||||
|
||||
## Ziel
|
||||
|
||||
Doppelte Kontakte/Organisationen finden und sauber verschmelzen.
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A2 Liste unter Einstellungen → Daten.
|
||||
|
||||
## Daten
|
||||
|
||||
- Duplikat-Paare mit **Match-Grund** (gleiche E-Mail / gleiches Telefon / ähnlicher Name)
|
||||
- Vorschau beider Einträge je Paar
|
||||
|
||||
## Aktionen
|
||||
|
||||
- Paar öffnen → [[M03 Zusammenfuehren]]
|
||||
- »Kein Duplikat« (Paar verwerfen, taucht nicht wieder auf)
|
||||
|
||||
## Zustände
|
||||
|
||||
| Zustand | Beschreibung | Umsetzung |
|
||||
|---|---|---|
|
||||
| Keine Duplikate | »Alles sauber — keine Dubletten gefunden« | Nur dokumentieren |
|
||||
| Laden / Fehler / kein Zugriff | A7 | Wiederverwenden |
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
+69
@@ -0,0 +1,69 @@
|
||||
{
|
||||
"nodes":[
|
||||
{"id":"group-daten","type":"group","x":-80,"y":1020,"width":2980,"height":380,"label":"Datenpflege (Einstellungen → Daten)"},
|
||||
{"id":"group-kontakte","type":"group","x":-80,"y":-100,"width":1820,"height":380,"label":"Kontakte"},
|
||||
{"id":"group-orgs","type":"group","x":-80,"y":460,"width":1820,"height":380,"label":"Organisationen (Reiter im selben Tab)"},
|
||||
{"id":"group-anlegen","type":"group","x":1960,"y":460,"width":1120,"height":380,"label":"Anlegen (Modals)"},
|
||||
{"id":"group-modell","type":"group","x":1980,"y":-520,"width":700,"height":520,"label":"Kontaktmodell (validiert 2026-07-08)"},
|
||||
{"id":"md-paket","type":"file","file":"02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/WF-P6 Kontakte und Organisationen.md","x":-80,"y":-440,"width":460,"height":280},
|
||||
{"id":"note-entry","type":"text","text":"# Einstieg\n\nSidebar → Kontakte (`/contacts`).\n\nZwei Reiter, nie gemischt: **Kontakte** (ALLE Personen, auch Ansprechpartner — Organisation + Rolle in der Zeile) und **Organisationen**.","x":0,"y":0,"width":360,"height":200},
|
||||
{"id":"s01","type":"file","file":"02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S01 Kontakte-Liste.md","x":560,"y":0,"width":420,"height":200},
|
||||
{"id":"s03","type":"file","file":"02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S03 Kontakt-Karteikarte.md","x":1240,"y":0,"width":420,"height":200},
|
||||
{"id":"note-orgs","type":"text","text":"# Hinweis\n\nUI-Begriff »Organisation«, nicht »Firma/Unternehmen« (öffentl. Einrichtungen!).\n\nKarteikarte zeigt die **Ansprechpartner-Liste** mit Rollen — genau EIN Hauptkontakt (markiert, umhängbar).","x":0,"y":560,"width":360,"height":200},
|
||||
{"id":"s02","type":"file","file":"02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S02 Organisationen-Liste.md","x":560,"y":560,"width":420,"height":200},
|
||||
{"id":"s04","type":"file","file":"02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S04 Organisations-Karteikarte.md","x":1240,"y":560,"width":420,"height":200},
|
||||
{"id":"m01","type":"file","file":"02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/M01 Kontakt anlegen.md","x":2000,"y":560,"width":420,"height":200},
|
||||
{"id":"m02","type":"file","file":"02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/M02 Organisation anlegen.md","x":2580,"y":560,"width":420,"height":200},
|
||||
{"id":"note-daten","type":"text","text":"# Einstieg\n\nEinstellungen → Daten. Gilt auch für Projekte/Anfragen (Ziel-Typ umschaltbar).","x":0,"y":1120,"width":360,"height":200},
|
||||
{"id":"s05","type":"file","file":"02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S05 Eigene Felder.md","x":560,"y":1120,"width":420,"height":200},
|
||||
{"id":"s06","type":"file","file":"02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S06 Tags.md","x":1140,"y":1120,"width":420,"height":200},
|
||||
{"id":"s07","type":"file","file":"02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S07 Duplikat-Tool.md","x":1720,"y":1120,"width":420,"height":200},
|
||||
{"id":"m03","type":"file","file":"02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/M03 Zusammenfuehren.md","x":2400,"y":1120,"width":420,"height":200},
|
||||
{"id":"note-modell","type":"text","text":"# Regeln\n- **EIN Datensatz für alles:** »Firma« = Kontakt vom Typ Organisation (Unterart = Auswahlfeld)\n- **Kontaktart (Haupt/Sekundär) = Rolle der Verknüpfung**, nicht der Person\n- Privatperson: nur Name Pflicht, keine Kontaktart-Frage\n- Organisation: auch ohne Person anlegbar\n- Genau **ein Hauptkontakt** je Organisation — erste Person automatisch, umhängbar\n- Auch **Privatpersonen können Sekundärkontakte** haben (Shell-Prinzip, z. B. Ehepartner)","x":2020,"y":-440,"width":620,"height":400}
|
||||
],
|
||||
"edges":[
|
||||
{
|
||||
"id":"e-entry",
|
||||
"styleAttributes":{"path":"dotted"},
|
||||
"fromNode":"note-entry",
|
||||
"fromSide":"right",
|
||||
"toNode":"s01",
|
||||
"toSide":"left"
|
||||
},
|
||||
{"id":"e-open","fromNode":"s01","fromSide":"right","toNode":"s03","toSide":"left","label":"Kontakt öffnen"},
|
||||
{
|
||||
"id":"e-tab",
|
||||
"styleAttributes":{"path":"dotted"},
|
||||
"fromNode":"s01",
|
||||
"fromSide":"bottom",
|
||||
"toNode":"s02",
|
||||
"toSide":"top",
|
||||
"label":"Reiter Organisationen"
|
||||
},
|
||||
{"id":"e-open2","fromNode":"s02","fromSide":"right","toNode":"s04","toSide":"left","label":"öffnen"},
|
||||
{"id":"e-new1","fromNode":"s01","fromSide":"bottom","toNode":"m01","toSide":"top","label":"+ Kontakt"},
|
||||
{"id":"e-new2","fromNode":"s02","fromSide":"bottom","toNode":"m02","toSide":"bottom","label":"+ Organisation"},
|
||||
{
|
||||
"id":"e-after",
|
||||
"styleAttributes":{"path":"long-dashed"},
|
||||
"fromNode":"m01",
|
||||
"fromSide":"top",
|
||||
"toNode":"s03",
|
||||
"toSide":"right",
|
||||
"label":"öffnet Karteikarte"
|
||||
},
|
||||
{
|
||||
"id":"e-entry-daten",
|
||||
"styleAttributes":{"path":"dotted"},
|
||||
"fromNode":"note-daten",
|
||||
"fromSide":"right",
|
||||
"toNode":"s05",
|
||||
"toSide":"left"
|
||||
},
|
||||
{"id":"e-merge","fromNode":"s07","fromSide":"right","toNode":"m03","toSide":"left","label":"Paar öffnen"}
|
||||
],
|
||||
"metadata":{
|
||||
"version":"1.0-1.0",
|
||||
"frontmatter":{}
|
||||
}
|
||||
}
|
||||
+143
@@ -0,0 +1,143 @@
|
||||
---
|
||||
kind: wireframe-package
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-CRM
|
||||
package: WF-P6 Kontakte und Organisationen
|
||||
typ: Flow
|
||||
status: Validiert
|
||||
subframe: ""
|
||||
canvas: "WF-P6 Kontakte und Organisationen.canvas"
|
||||
---
|
||||
|
||||
# WF-P6 Kontakte und Organisationen
|
||||
|
||||
Status: Validiert (Screen-Liste)
|
||||
Subframe-Link: -
|
||||
Canvas: [Canvas](<WF-P6 Kontakte und Organisationen.canvas>)
|
||||
Stand: 2026-07-08
|
||||
|
||||
---
|
||||
|
||||
## 1. Kurzfassung
|
||||
|
||||
Das Adressbuch mit Gedächtnis: Kontakte- und Organisationen-Listen, die **Kontakt-Karteikarte als Vorlage für ALLE Detailseiten**, Anlegen mit Duplikat-Warnung, plus die drei Datenpflege-Seiten in den Einstellungen (Eigene Felder, Tags, Duplikat-Tool). Fundament der Kette Anfrage → Projekt.
|
||||
|
||||
---
|
||||
|
||||
## 2. Intent Check
|
||||
|
||||
| Frage | Antwort |
|
||||
|---|---|
|
||||
| Welches Ticket/Modul ist betroffen? | D-CRM (P6), Dev-Pendant R-P6 |
|
||||
| Was soll der Nutzer am Ende schaffen? | Kunden finden, in 5 Sekunden im Bilde sein (Verlauf), Daten pflegen, Dubletten loswerden |
|
||||
| Flow, Screen, Zustand oder Doku? | Screen-Cluster: 2 Listen, 2 Karteikarten, 2 Anlege-Modals, 3 Einstellungs-Seiten, 1 Merge-Modal |
|
||||
| Welche Planning-Quellen wurden geprüft? | `ticket-docs/D-CRM.md`, ENTITY-MODEL (Pivot-Vorrang), SCREEN-MAP §2, HiveGrid Map |
|
||||
| Was ist sicher im Scope? | Alles oben + Live-Duplikat-Check + Kontaktmodell (Typ/Status/Rolle) |
|
||||
| Was ist sicher nicht im Scope? | Leads (D-P7), Pipelines (D-P8), Lead-Promotion-Modal (Pivot: existiert nicht mehr) |
|
||||
| Admin/Normalrolle-Unterschiede? | `crm.*`-Rechte (read_own/read_all/write/delete/admin); bei read_own sieht man nur eigene |
|
||||
| Unsichere Annahmen? | Inline-Anlegen in der Liste (Notion-Stil) — als Option dokumentiert, nicht v1-gebaut |
|
||||
|
||||
---
|
||||
|
||||
## 3. Scope
|
||||
|
||||
| Punkt | Inhalt |
|
||||
|---|---|
|
||||
| Ticket/Modul | D-CRM · Kontakte & Organisationen + Datenpflege |
|
||||
| Nutzerrolle | Maximalansicht (Admin) |
|
||||
| Startpunkt | Sidebar »Kontakte« |
|
||||
| Ziel | Kontakt gefunden/angelegt/gepflegt; Historie sichtbar |
|
||||
| Haupt-Archetyp | A2 Listen · **A3 Detail (Muster-Vorlage!)** · A5 Modals · A2 Settings-Listen |
|
||||
| Bespoke-Anteil | Keiner; Side-by-Side-Merge ist die aufwendigste Einzelkomponente |
|
||||
| Out of scope | Leads, Pipelines, Kampagnen-Anbindung (nur Anzeige im Verlauf) |
|
||||
|
||||
---
|
||||
|
||||
## 4. Entscheidungen (validiert 2026-07-08)
|
||||
|
||||
| Entscheidung | Status | Notiz |
|
||||
|---|---|---|
|
||||
| EIN großes Paket (inkl. Datenpflege-Seiten) | genommen | Davids Entscheidung |
|
||||
| Anlegen als **Modal** mit Live-Duplikat-Warnung | genommen | Nach Anlegen öffnet die Karteikarte |
|
||||
| **Inline-Anlegen in der Liste (Notion-Stil)** | dokumentiert / später | Davids Idee: Plus in der Liste → neue Zeile inline; funktioniert, weil nur der Name Pflicht ist; Zeile ohne Namen wird automatisch gelöscht. Erstmal nicht bauen |
|
||||
| Karteikarte = **Zweispalter + Reiter** | genommen | Links schmal: Stammdaten, eigene Felder, Tags, Verknüpfungen (inline editierbar). Rechts breit: Reiter Verlauf · Projekte · Aufgaben · Dateien · Notizen. Schnell-Aktionen im Kopf. **= Muster-Vorlage für alle Detailseiten** |
|
||||
| Kontaktmodell (fix aus Datenmodell) | genommen | EIN Kontakt-Datensatz für alles. Typ = Privatperson/Organisation (Organisations-Art wie Unternehmen/öffentl. Einrichtung = einfaches Auswahlfeld) · Status = Kontakt/Kunde/Bestandskunde · Kontaktart (Haupt-/Sekundär) = **Rolle der Verknüpfung**, nicht der Person |
|
||||
| **Zwei getrennte Reiter, keine Misch-Liste** | genommen | Reiter »Kontakte« (alle Personen) + Reiter »Organisationen« — nie beide Typen in einer Liste gemischt (validiert 2026-07-08) |
|
||||
| Kontakte-Reiter zeigt **ALLE Personen** | genommen | Auch Ansprechpartner, die in Organisationen stecken — mit sichtbarer Organisation + Rolle in der Zeile. Privatpersonen sowieso |
|
||||
| **Anlege-Regeln** | genommen | Privatperson: nur Name Pflicht, keine Kontaktart-Frage (steht für sich) · Organisation: auch ohne Person anlegbar, Ansprechpartner optional · Zuordnung Person→Organisation mit Rollen-Wahl · genau EIN Hauptkontakt je Organisation, erste zugeordnete Person automatisch (umhängbar) |
|
||||
| **Auch Privatpersonen können Sekundärkontakte haben** | genommen | Davids »Shell«-Gedanke: Verknüpfungen gehen an jeden Kontakt (z. B. Ehepartner/Mitbewohner an einer Privatperson) — gleiche Mechanik wie bei Organisationen, nur andere Felder |
|
||||
| Datenpflege-Seiten unter Einstellungen → Daten | genommen | passt zum Infrastruktur-Beschluss |
|
||||
| Querschnitts-Bausteine einbetten | genommen | Aufgaben-Reiter = V01 (P4) · Datei-Sektion (P4) · »Verlauf«-Drawer = M03 (P3 Audit) — werden referenziert, nicht neu gebaut |
|
||||
|
||||
### Happy Path
|
||||
|
||||
1. Sidebar »Kontakte« → Liste, tippen/filtern, Kontakt öffnen.
|
||||
2. Karteikarte: links Stammdaten direkt editieren; rechts im Verlauf sehen, was zuletzt lief (Anrufe, Mails, Notizen); Schnell-Aktion »Aufgabe« oder »Termin« direkt aus dem Kopf.
|
||||
3. Neuer Kunde ruft an → »+ Kontakt« → Modal, beim Tippen kommt ggf. »gibt's schon« → bestehenden öffnen statt Dublette anlegen.
|
||||
4. Aufräumen: Einstellungen → Duplikat-Tool → Paar nebeneinander → Feld für Feld übernehmen → zusammenführen.
|
||||
|
||||
### Meldungs-/Error-States (validiert)
|
||||
|
||||
| Ereignis | UI-Form | Blockiert? | Bauen? | Copy/Notiz |
|
||||
|---|---|---|---|---|
|
||||
| Fremder Kontakt bei `read_own` | 404 bzw. taucht in Liste nicht auf | ja | Wiederverwenden | Dev-Vorgabe |
|
||||
| Mögliches Duplikat beim Anlegen | Banner im Modal: »trotzdem anlegen« / »bestehenden öffnen« | nein | Nur dokumentieren | Live-Check beim Tippen |
|
||||
| Zusammenführen ist endgültig | Bestätigung mit Klartext | ja (Aktion) | Nur dokumentieren | »Kann nicht rückgängig gemacht werden« |
|
||||
| Großer CSV-Export | läuft im Hintergrund + Meldung | nein | Nur dokumentieren | Benachrichtigung wenn fertig |
|
||||
| Leere Liste (Filter/read_own) | Leer-Zustand mit Klartext | nein | Nur dokumentieren | »Keine Kontakte für diese Filter« |
|
||||
|
||||
---
|
||||
|
||||
## 7. Validierte Screen-Liste
|
||||
|
||||
| ID | Screen/Zustand | Typ | Umsetzung | Ort | Status |
|
||||
|---|---|---|---|---|---|
|
||||
| S01 | Kontakte-Liste | Liste | Bauen | `/contacts` | Validiert |
|
||||
| S02 | Organisationen-Liste | Liste | Bauen | `/contacts/companies` | Validiert |
|
||||
| S03 | Kontakt-Karteikarte ⭐ | Detail (Muster-Vorlage) | Bauen | `/contacts/:id` | Validiert |
|
||||
| S04 | Organisations-Karteikarte | Detail | Bauen | `/contacts/companies/:id` | Validiert |
|
||||
| M01 | Kontakt anlegen | Modal | Bauen | aus S01 + überall | Validiert |
|
||||
| M02 | Organisation anlegen | Modal | Bauen | aus S02 | Validiert |
|
||||
| S05 | Eigene Felder | Settings-Liste | Bauen | `/admin/custom-fields` | Validiert |
|
||||
| S06 | Tags | Settings-Liste | Bauen | `/admin/tags` | Validiert |
|
||||
| S07 | Duplikat-Tool | Settings-Liste | Bauen | `/admin/duplicates` | Validiert |
|
||||
| M03 | Zusammenführen (Seite an Seite) | Modal (groß) | Bauen | aus S07 | Validiert |
|
||||
| D01 | Inline-Anlegen in Liste (Notion-Stil) | Idee | Später | in S01 | Dokumentiert |
|
||||
| D02–D05 | Banner/Zustände (s. Tabelle) | Inline/Banner | Nur dokumentieren | — | Validiert |
|
||||
|
||||
---
|
||||
|
||||
## 8. Grid
|
||||
|
||||
```text
|
||||
Sidebar -> S01 <-> S02 (Reiter)
|
||||
S01 -> S03 (Karteikarte) / S02 -> S04
|
||||
S01 -> M01 (+ Kontakt) / S02 -> M02
|
||||
Einstellungen -> S05 / S06 / S07 -> M03 (Zusammenfuehren)
|
||||
S03/S04 betten ein: Aufgaben V01 (P4), Datei-Sektion (P4), Verlauf-Drawer M03 (P3 Audit)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9. Screen-Pakete
|
||||
|
||||
- [[S01 Kontakte-Liste]] · [[S02 Organisationen-Liste]]
|
||||
- [[S03 Kontakt-Karteikarte]] · [[S04 Organisations-Karteikarte]]
|
||||
- [[M01 Kontakt anlegen]] · [[M02 Organisation anlegen]]
|
||||
- [[S05 Eigene Felder]] · [[S06 Tags]] · [[S07 Duplikat-Tool]] · [[M03 Zusammenfuehren]]
|
||||
|
||||
---
|
||||
|
||||
## 10. Offene Fragen
|
||||
|
||||
- Inline-Anlegen (D01): wann/ob bauen → David entscheidet später
|
||||
- Reiter-Label: David sagte locker »Firmen oder sowas« — Spec-Vorgabe ist »Organisation« (öffentliche Einrichtungen sind keine Firmen); wir bleiben bei **»Organisationen«**, final beim Subframe-Bau
|
||||
- Sekundärkontakte an Privatpersonen (Shell-Gedanke): Datenmodell (KontaktRelation = Kontakt↔Kontakt) deckt das ab — beim Handoff kurz mit Dev bestätigen
|
||||
- Quick-Action »Anrufen« zeigt in v1 `tel:`-Link, AirCall-Anbindung kommt mit D-P15
|
||||
- Karteikarten-Muster nach Subframe-Bau als Standard dokumentieren (→ `04 Standards`, nur mit Davids Freigabe)
|
||||
|
||||
## Handoff-Check
|
||||
|
||||
- [x] Jeder Screen ist mit Umsetzung markiert.
|
||||
- [x] Meldungs-/Error-State-Matrix ist ausgefüllt.
|
||||
- [ ] Subframe-Link ist eingetragen. *(Subframe erst nach explizitem OK)*
|
||||
@@ -0,0 +1,57 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-P7
|
||||
package: WF-P7 Leads
|
||||
id: M01
|
||||
screen: Lead zu Projekt
|
||||
typ: Modal (gross)
|
||||
umsetzung: Bauen
|
||||
status: Validiert
|
||||
route: "aus S01/S02, nur bei Freigabe = ja"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# M01 — Lead → Projekt ⭐
|
||||
|
||||
## Ziel
|
||||
|
||||
Der Kern-Moment der Kette: aus einer guten Anfrage wird ein Projekt — kontrolliert, mit sauberem Kontakt dran.
|
||||
|
||||
## Was das Tool können muss
|
||||
|
||||
- **Daten-Vererbungs-Vorschau**: welche Lead-Felder ins Projekt fließen (Name, Nachricht, eigene Felder …)
|
||||
- **Ziel-Board + Start-Spalte wählen** (Default-Vorauswahl beim Subframe-Bau klären)
|
||||
- **Kontakt separat verknüpfen**: Auto-Match-Vorschlag (gleiche E-Mail/Telefon) → bestehenden wählen ODER neu anlegen (öffnet [[M01 Kontakt anlegen]] aus P6, vorbefüllt)
|
||||
- Fehlende Pflichtdaten (z. B. Name) direkt im Modal nachtragen (Mängel-Banner)
|
||||
- **Bulk-Variante** (Davids Ergänzung): mehrere Leads auf einmal — gemeinsame Board-Wahl, Kontakt-Match je Lead, Konfliktliste für Leads ohne Match
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A5 großes Modal (echtes Modal: DialogLayout → Dialog → Dialog.Content) mit drei Sektionen.
|
||||
|
||||
## Aufbau
|
||||
|
||||
1. **Was wird übernommen** — Vorschau der vererbten Felder
|
||||
2. **Wohin** — Pipeline/Board + Start-Spalte
|
||||
3. **Wer** — Kontakt (Match-Vorschlag / suchen / neu anlegen)
|
||||
|
||||
## Aktionen
|
||||
|
||||
- »Projekt erstellen« → Projekt existiert, Lead wird `converted`, Sprung zur Projekt-Detailseite (Toast mit Link)
|
||||
- Abbrechen
|
||||
|
||||
## Meldungsentscheidung
|
||||
|
||||
| Ereignis | UI-Form | Blockiert? | Umsetzung | Copy/Notiz |
|
||||
|---|---|---|---|---|
|
||||
| Pflichtdaten fehlen | Mängel-Banner + Inline-Nachtragen | ja (Aktion) | Nur dokumentieren | z. B. fehlender Name |
|
||||
| Bulk: Lead ohne Kontakt-Match | Konflikt-Zeile in Bulk-Ansicht | nein | Nur dokumentieren | einzeln nachziehen |
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
|
||||
## Notizen
|
||||
|
||||
- Ersetzt das alte 4-Optionen-Promotion-Modal (Pivot AD-20). Bulk-Machbarkeit → Dev-Frage beim Handoff.
|
||||
@@ -0,0 +1,42 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-P7
|
||||
package: WF-P7 Leads
|
||||
id: M02
|
||||
screen: Anfrage anlegen
|
||||
typ: Modal
|
||||
umsetzung: Bauen
|
||||
status: Validiert
|
||||
route: "aus S01 (Route /leads/new bleibt Dev-seitig)"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# M02 — Anfrage anlegen
|
||||
|
||||
## Ziel
|
||||
|
||||
Anruf kommt rein, kein passender Kontakt — Anfrage in Sekunden erfassen.
|
||||
|
||||
## Was das Tool können muss
|
||||
|
||||
- Schnelles Erfassen: Vor-/Nachname, E-Mail, Telefon, Nachricht, Quelle (Default: manuell), Verantwortlicher (Default: ich), Tags
|
||||
- **Live-Match-Check beim Tippen**: »Gibt es schon als Kontakt/Anfrage« mit Sprung-Link
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A5 Dialog, gleiche Mechanik wie »Kontakt anlegen« (P6).
|
||||
|
||||
## Aktionen
|
||||
|
||||
- »Anlegen« → Anfrage erscheint in der Inbox, Detail öffnet
|
||||
- Abbrechen
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
|
||||
## Notizen
|
||||
|
||||
- Davids Delta: Modal statt eigener Seite (Ticket sah `/leads/new` als Seite vor — UI-Form ist Designer-Freiheit).
|
||||
- D01 Inline-Anlegen (Plus → Zeile) als »Später«-Muster dokumentiert.
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-P7
|
||||
package: WF-P7 Leads
|
||||
id: M03
|
||||
screen: CSV-Import
|
||||
typ: Modal/Wizard
|
||||
umsetzung: Bauen
|
||||
status: Validiert (Davids Delta)
|
||||
route: "aus S01, Importieren-Knopf"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# M03 — CSV-Import-Wizard
|
||||
|
||||
## Ziel
|
||||
|
||||
Ganze Listen auf einmal reinholen (z. B. Messekontakte, Alt-Bestand) — mit sauberer Feld-Zuordnung statt Chaos. **Davids Delta: steht nicht im Dev-Ticket → Change-Request.**
|
||||
|
||||
## Was das Tool können muss
|
||||
|
||||
- CSV-Datei hochladen (Dropzone-Baustein aus P4)
|
||||
- **Spalten-Zuordnung**: jede CSV-Spalte einem Lead-Feld zuordnen (Auto-Vorschlag bei passenden Überschriften, eigene Felder wählbar, Spalte überspringen möglich)
|
||||
- **Vorschau vor dem Import**: erste Zeilen gemappt anzeigen, Fehler markieren (ungültige E-Mail, leere Pflichtwerte)
|
||||
- **Duplikat-Behandlung wählen**: überspringen / trotzdem anlegen / als möglichs Duplikat markieren
|
||||
- Import läuft im Hintergrund; Ergebnis-Meldung (»142 importiert, 3 übersprungen — Liste ansehen«)
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A5 mehrstufiger Wizard: 1. Datei → 2. Spalten zuordnen → 3. Vorschau + Duplikat-Regel → 4. Import läuft/Ergebnis.
|
||||
|
||||
## Meldungsentscheidung
|
||||
|
||||
| Ereignis | UI-Form | Blockiert? | Umsetzung | Copy/Notiz |
|
||||
|---|---|---|---|---|
|
||||
| Datei nicht lesbar / falsches Format | Schritt-Fehler | ja (Schritt) | Nur dokumentieren | Klartext + Beispiel-Hinweis |
|
||||
| Zeilen mit Fehlern | markierte Zeilen in Vorschau | nein | Nur dokumentieren | »werden übersprungen« |
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
|
||||
## Notizen
|
||||
|
||||
- Change-Request an Dev: Import-Job serverseitig, Duplikat-Logik, Feld-Mapping. Beim Handoff formulieren.
|
||||
- Gleiches Wizard-Muster ist später für Kontakt-Import wiederverwendbar (nur notiert, nicht beauftragt).
|
||||
@@ -0,0 +1,61 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-P7
|
||||
package: WF-P7 Leads
|
||||
id: S01
|
||||
screen: Lead-Inbox
|
||||
typ: Triage-Liste
|
||||
umsetzung: Bauen
|
||||
status: Validiert
|
||||
route: "/leads"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# S01 — Lead-Inbox
|
||||
|
||||
## Ziel
|
||||
|
||||
Keine Anfrage verlieren: alles Eingehende an einem Ort, in Sekunden sortiert.
|
||||
|
||||
## Was das Tool können muss
|
||||
|
||||
- Anfragen aus **allen Quellen** automatisch empfangen (Formular, E-Mail, Anruf, manuell, Webhook) — live, ohne Neuladen
|
||||
- Triage direkt in der Zeile: zuweisen, Status wechseln, **Zu Projekt machen**, als Spam markieren
|
||||
- Mehrfachauswahl mit Massenbearbeitung (zuweisen/Status/Spam/Archiv) **inkl. Massen-Konvertierung** (Davids Ergänzung)
|
||||
- Spam-Schutz sichtbar machen (Marker mit Begründung), ohne die Liste zu verstopfen
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A2 Liste mit Triage-Akzenten, Tabelle/Karten-Umschalter, cursor-paginiert.
|
||||
|
||||
## Daten
|
||||
|
||||
- Zeile: Identität (Name, sonst E-Mail/Telefon, sonst Quelle+Datum) · Quellen-Marker · Status · Freigabe (ja/nein/unklar) · Verantwortlicher · Eingegangen (relativ < 7 T) · 80-Zeichen-Nachrichten-Vorschau
|
||||
- Marker: »Mögliches Duplikat« · »Spam-Verdacht« · »Auto-promoviert«
|
||||
- Filter: Status (Default new+qualified), Quelle, Verantwortlicher (inkl. »nicht zugewiesen«), Zeitraum, Tags, eigene Felder
|
||||
- Toggle-Chips: **»Spam ausblenden« (Default an)** · **»Konvertierte einblenden« (Default aus)**
|
||||
|
||||
## Aktionen
|
||||
|
||||
- Zeile öffnen → [[S02 Lead-Detail]]
|
||||
- Inline: Zuweisen · Status · **»Zu Projekt«** → [[M01 Lead zu Projekt]] · Spam
|
||||
- Bulk: Zuweisen/Status/Spam/Archiv + **Bulk »Zu Projekt«** (M01 in Bulk-Variante)
|
||||
- »+ Anfrage« → [[M02 Anfrage anlegen]] · »Importieren« → [[M03 CSV-Import]]
|
||||
- »Statistiken« → [[S03 Lead-Statistiken]]
|
||||
|
||||
## Zustände
|
||||
|
||||
| Zustand | Beschreibung | Umsetzung |
|
||||
|---|---|---|
|
||||
| Leer | »Keine neuen Anfragen« | Nur dokumentieren |
|
||||
| Laden / Fehler | A7 | Wiederverwenden |
|
||||
| `read_own` | nur eigene sichtbar (server-seitig) | Wiederverwenden |
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
|
||||
## Notizen
|
||||
|
||||
- D01 Inline-Anlegen (Plus → Zeile mit Pflichtfeldern) — gemeinsames »Später«-Muster mit P6.
|
||||
@@ -0,0 +1,54 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-P7
|
||||
package: WF-P7 Leads
|
||||
id: S02
|
||||
screen: Lead-Detail
|
||||
typ: Detail
|
||||
umsetzung: Bauen
|
||||
status: Validiert
|
||||
route: "/leads/:id"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# S02 — Lead-Detail
|
||||
|
||||
## Ziel
|
||||
|
||||
Eine Anfrage komplett verstehen und entscheiden: weiterverarbeiten, ablehnen oder Spam.
|
||||
|
||||
## Was das Tool können muss
|
||||
|
||||
- **Herkunft transparent machen**: welches Formular (mit Submission), welcher E-Mail-Header, welcher Anruf (mit Aufnahme-Link)
|
||||
- **Freigabe-Entscheidung** festhalten (ja/nein/unklar) — bei »ja« wird »Zu Projekt« möglich
|
||||
- **Match-Hinweise**: existierende Kontakte mit gleicher E-Mail/Telefon (harte Treffer) oder ähnlichem Namen (weiche) — mit Direktsprung
|
||||
- Spam-Score mit Klartext-Begründung; Re-Submission-Verlauf (gleiche Person hat mehrfach angefragt)
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A3 Detail — gleiches Grundgerüst wie die Kontakt-Karteikarte (Zweispalter + Reiter).
|
||||
|
||||
## Daten
|
||||
|
||||
- Kopf: Identität, Status, Freigabe-Schalter, Quellen-Marker · Triage-Quick-Actions (Annehmen / Antworten / Anrufen / Notiz / Aufgabe / Termin)
|
||||
- Links: Stammdaten inline editierbar · eigene Felder · Match-Hinweise · DSGVO-Lösch-Countdown
|
||||
- Rechts, Reiter: Übersicht/Nachricht · Konversation · Verlauf (Activity)
|
||||
|
||||
## Aktionen
|
||||
|
||||
- **»Zu Projekt«** → [[M01 Lead zu Projekt]] (nur bei Freigabe = ja; sonst Hinweis)
|
||||
- Status wechseln (new/qualified/converted/lost/spam) · zuweisen
|
||||
- Match-Hinweis → Kontakt-Karteikarte öffnen oder direkt verknüpfen
|
||||
|
||||
## Zustände
|
||||
|
||||
| Zustand | Beschreibung | Umsetzung |
|
||||
|---|---|---|
|
||||
| DSGVO-Countdown | »Wird am [Datum] automatisch gelöscht« | Nur dokumentieren |
|
||||
| Nicht gefunden / kein Recht | 404 | Wiederverwenden |
|
||||
| Laden / Fehler | A7 | Wiederverwenden |
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
@@ -0,0 +1,45 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-P7
|
||||
package: WF-P7 Leads
|
||||
id: S03
|
||||
screen: Lead-Statistiken
|
||||
typ: KPI-Seite
|
||||
umsetzung: Bauen
|
||||
status: Validiert
|
||||
route: "/leads/statistics"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# S03 — Lead-Statistiken
|
||||
|
||||
## Ziel
|
||||
|
||||
Der Chef sieht: Woher kommen Anfragen, wie schnell reagieren wir, was wird daraus?
|
||||
|
||||
## Was das Tool können muss
|
||||
|
||||
- KPI-Kacheln: Eingegangen · Umwandlung Lead→Projekt · Lead→Gewonnen · Reaktionszeit · Spam-Quote · offene Anfragen > 24 h
|
||||
- Aufschlüsselung nach Quelle / Verantwortlichem / Tag / Wochentag / Status
|
||||
- Trend-Charts mit Vergleich zur Vorperiode (Zeitraum-Wahl + Vergleichs-Schalter)
|
||||
- **Drill-Down**: Klick auf eine Zahl → vorgefilterte Inbox
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A2 + KPI-Kit (Kacheln, Balken-/Linien-Charts aus dem Baukasten).
|
||||
|
||||
## Zustände
|
||||
|
||||
| Zustand | Beschreibung | Umsetzung |
|
||||
|---|---|---|
|
||||
| Zu wenig Daten | »Noch nicht genug Anfragen für Trends« | Nur dokumentieren |
|
||||
| Laden / Fehler | A7 | Wiederverwenden |
|
||||
|
||||
## Permissions / Gates
|
||||
|
||||
Aufschlüsselung nach Verantwortlichem nur mit `leads.read_all`.
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
@@ -0,0 +1,40 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-P7
|
||||
package: WF-P7 Leads
|
||||
id: S04
|
||||
screen: Quellen-Verwaltung
|
||||
typ: Settings-Liste
|
||||
umsetzung: Bauen
|
||||
status: Validiert
|
||||
route: "/admin/lead-sources (Einstellungen -> Arbeitsweise)"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# S04 — Quellen-Verwaltung
|
||||
|
||||
## Ziel
|
||||
|
||||
Steuern, woher Anfragen kommen — inkl. Anschluss fremder Websites.
|
||||
|
||||
## Was das Tool können muss
|
||||
|
||||
- Quellen-Liste: Name · Typ (System/eigene) · Anfragen der letzten 30 Tage · Status
|
||||
- Eigene Quelle anlegen (Name, Anzeige-Label, optional Standard-Verantwortlicher + Standard-Tags)
|
||||
- **Webhook-URL mit Token** je Quelle (Kopier-Knopf) — damit Fremd-Websites Anfragen direkt einliefern
|
||||
- Bearbeiten / Archivieren
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A2/A6 unter Einstellungen → Arbeitsweise.
|
||||
|
||||
## Zustände
|
||||
|
||||
| Zustand | Beschreibung | Umsetzung |
|
||||
|---|---|---|
|
||||
| Laden / Fehler / kein Zugriff | A7 | Wiederverwenden |
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
@@ -0,0 +1,41 @@
|
||||
---
|
||||
kind: screen
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-P7
|
||||
package: WF-P7 Leads
|
||||
id: S05
|
||||
screen: Spam-Schutz
|
||||
typ: Settings
|
||||
umsetzung: Bauen
|
||||
status: Validiert
|
||||
route: "/admin/lead-anti-spam (Einstellungen -> Arbeitsweise)"
|
||||
subframe: ""
|
||||
---
|
||||
|
||||
# S05 — Spam-Schutz
|
||||
|
||||
## Ziel
|
||||
|
||||
Spam automatisch abfangen, ohne echte Anfragen zu verlieren — alles in Klartext einstellbar.
|
||||
|
||||
## Was das Tool können muss
|
||||
|
||||
- **Limits**: max. Anfragen pro Quelle/Stunde und pro IP/Stunde
|
||||
- **Anomalie-Erkennung**: 10-facher Anstieg → Quelle pausiert automatisch (mit Benachrichtigung)
|
||||
- **Auto-Spam-Regeln als Schalter**: IP-Sperrliste · Wegwerf-E-Mail-Domains · Honeypot-Feld · Absenden unter 3 Sekunden
|
||||
- **Modus**: Quarantäne (landet markiert in der Inbox) vs. vollständig Spam (ausgeblendet)
|
||||
- Auto-Lösch-Frist für verlorene Anfragen (0 = nie); Spam fix 30 Tage
|
||||
|
||||
## Pattern / Archetyp
|
||||
|
||||
A6 Settings mit Toggle-Zeilen (je Regel Klartext-Beschreibung).
|
||||
|
||||
## Zustände
|
||||
|
||||
| Zustand | Beschreibung | Umsetzung |
|
||||
|---|---|---|
|
||||
| Laden / Fehler / kein Zugriff | A7 | Wiederverwenden |
|
||||
|
||||
## Subframe
|
||||
|
||||
- (erst nach explizitem OK)
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"nodes":[
|
||||
{"id":"md-paket","type":"file","file":"02 Wireframes/P7 Leads/WF-P7 Leads/WF-P7 Leads.md","x":-80,"y":-440,"width":460,"height":280},
|
||||
{"id":"group-triage","type":"group","x":-80,"y":-100,"width":1820,"height":380,"label":"Triage"},
|
||||
{"id":"group-stats","type":"group","x":1880,"y":-100,"width":540,"height":380,"label":"Auswertung"},
|
||||
{"id":"group-aktionen","type":"group","x":-80,"y":460,"width":1780,"height":380,"label":"Konvertieren, Anlegen, Import"},
|
||||
{"id":"group-settings","type":"group","x":1880,"y":460,"width":1080,"height":380,"label":"Einstellungen → Arbeitsweise"},
|
||||
{"id":"note-entry","type":"text","text":"# Einstieg\n\nSidebar → Leads (`/leads`).\n\nAlle Quellen landen hier automatisch: Formular, E-Mail, Anruf, Webhook, manuell.","x":0,"y":0,"width":360,"height":200},
|
||||
{"id":"s01","type":"file","file":"02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S01 Lead-Inbox.md","x":560,"y":0,"width":420,"height":200},
|
||||
{"id":"s02","type":"file","file":"02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S02 Lead-Detail.md","x":1240,"y":0,"width":420,"height":200},
|
||||
{"id":"s03","type":"file","file":"02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S03 Lead-Statistiken.md","x":1920,"y":0,"width":420,"height":200},
|
||||
{"id":"m02","type":"file","file":"02 Wireframes/P7 Leads/WF-P7 Leads/Screens/M02 Anfrage anlegen.md","x":40,"y":560,"width":420,"height":200},
|
||||
{"id":"m01","type":"file","file":"02 Wireframes/P7 Leads/WF-P7 Leads/Screens/M01 Lead zu Projekt.md","x":620,"y":560,"width":420,"height":200},
|
||||
{"id":"m03","type":"file","file":"02 Wireframes/P7 Leads/WF-P7 Leads/Screens/M03 CSV-Import.md","x":1200,"y":560,"width":420,"height":200},
|
||||
{"id":"s04","type":"file","file":"02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S04 Quellen-Verwaltung.md","x":1920,"y":560,"width":420,"height":200},
|
||||
{"id":"s05","type":"file","file":"02 Wireframes/P7 Leads/WF-P7 Leads/Screens/S05 Spam-Schutz.md","x":2500,"y":560,"width":420,"height":200}
|
||||
],
|
||||
"edges":[
|
||||
{"id":"e-entry","fromNode":"note-entry","fromSide":"right","toNode":"s01","toSide":"left","toEnd":"arrow","styleAttributes":{"path":"dotted"}},
|
||||
{"id":"e-open","fromNode":"s01","fromSide":"right","toNode":"s02","toSide":"left","toEnd":"arrow","label":"Anfrage öffnen"},
|
||||
{"id":"e-stats","fromNode":"s01","fromSide":"top","toNode":"s03","toSide":"top","toEnd":"arrow","label":"Statistiken · Drill-Down zurück in gefilterte Inbox"},
|
||||
{"id":"e-convert","fromNode":"s02","fromSide":"bottom","toNode":"m01","toSide":"top","toEnd":"arrow","label":"Zu Projekt (Freigabe = ja; aus S01 auch als Bulk)"},
|
||||
{"id":"e-new","fromNode":"s01","fromSide":"bottom","toNode":"m02","toSide":"top","toEnd":"arrow","label":"+ Anfrage"},
|
||||
{"id":"e-import","fromNode":"s01","fromSide":"bottom","toNode":"m03","toSide":"top","toEnd":"arrow","label":"Importieren (CSV)"}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
---
|
||||
kind: wireframe-package
|
||||
project: HiveGrid Screen Project
|
||||
ticket: D-P7
|
||||
package: WF-P7 Leads
|
||||
typ: Flow
|
||||
status: Validiert
|
||||
subframe: ""
|
||||
canvas: "WF-P7 Leads.canvas"
|
||||
---
|
||||
|
||||
# WF-P7 Leads
|
||||
|
||||
Status: Validiert (Screen-Liste)
|
||||
Subframe-Link: -
|
||||
Canvas: [Canvas](<WF-P7 Leads.canvas>)
|
||||
Stand: 2026-07-08
|
||||
|
||||
---
|
||||
|
||||
## 1. Kurzfassung
|
||||
|
||||
Der Lead-Eingang: Anfragen aus allen Quellen (Formular, E-Mail, Anruf, manuell, Webhook) landen automatisch in einer Triage-Liste. Dort wird sortiert, zugewiesen — und im Kern-Moment **»Zu Projekt machen«** startet die Kette Richtung Auftrag. Kontakt wird dabei separat verknüpft (kein altes Promotion-Modal, Pivot AD-20).
|
||||
|
||||
---
|
||||
|
||||
## 2. Intent Check
|
||||
|
||||
| Frage | Antwort |
|
||||
|---|---|
|
||||
| Welches Ticket/Modul ist betroffen? | D-P7, Dev-Pendant R-P7 |
|
||||
| Was soll der Nutzer am Ende schaffen? | Keine Anfrage verlieren, Spam loswerden, schnell reagieren, gute Anfragen zu Projekten machen |
|
||||
| Flow, Screen, Zustand oder Doku? | Triage-Liste + Detail + Konvertier-Modal + Statistiken + 2 Einstellungs-Seiten + Anlege-Modal |
|
||||
| Welche Planning-Quellen wurden geprüft? | `ticket-docs/D-P7.md`, ENTITY-MODEL (Pivot), SCREEN-MAP §2, HiveGrid Map |
|
||||
| Was ist sicher im Scope? | Alles oben + Anti-Spam + Webhook-Quellen |
|
||||
| Was ist sicher nicht im Scope? | Kontakt-/Organisations-Listen (P6), Projekt-Welt (P8), Promotion-Modal (existiert nicht mehr) |
|
||||
| Admin/Normalrolle-Unterschiede? | `leads.*`; bei `read_own` nur eigene (404); Statistiken-Aufschlüsselung nach Person nur mit `read_all` |
|
||||
| Unsichere Annahmen? | Massen-Konvertierung (Bulk »Zu Projekt«): UI validiert, technische Machbarkeit mit Dev bestätigen |
|
||||
|
||||
---
|
||||
|
||||
## 3. Scope
|
||||
|
||||
| Punkt | Inhalt |
|
||||
|---|---|
|
||||
| Ticket/Modul | D-P7 · Lead-Eingang |
|
||||
| Nutzerrolle | Maximalansicht (Admin) |
|
||||
| Startpunkt | Sidebar »Leads« |
|
||||
| Ziel | Anfrage triagiert → Projekt erstellt oder erledigt/Spam |
|
||||
| Haupt-Archetyp | A2 Triage-Liste · A3 Detail · A5 Modal · A6 Settings · KPI-Kit |
|
||||
| Bespoke-Anteil | Keiner |
|
||||
| Out of scope | Kampagnen-/Marketing-Quellen-Details (P14) |
|
||||
|
||||
---
|
||||
|
||||
## 4. Entscheidungen (validiert 2026-07-08)
|
||||
|
||||
| Entscheidung | Status | Notiz |
|
||||
|---|---|---|
|
||||
| Ein Paket für das ganze Feature | genommen | inkl. Quellen + Spam-Schutz (leben unter Einstellungen → Arbeitsweise) |
|
||||
| **Lead → Projekt als großes Modal** | genommen | Drei Sektionen: Daten-Vererbungs-Vorschau · Ziel-Board + Start-Spalte · Kontakt verknüpfen (Auto-Match oder neu via M01 aus P6). Man bleibt im Kontext der Liste |
|
||||
| **Mehrfachauswahl / Massenbearbeitung** | genommen | Davids Ergänzung: Bulk-Zuweisen/Status/Spam/Archiv UND Massen-Konvertierung (Modal in Bulk-Variante: gemeinsame Board-Wahl, Kontakt-Match je Lead). Machbarkeit Bulk-Convert mit Dev bestätigen |
|
||||
| Anfrage anlegen als Modal | genommen | Wie »Kontakt anlegen« (P6), mit Live-Duplikat-Check |
|
||||
| **Inline-Anlegen (Plus → Zeile mit Pflichtfeldern)** | dokumentiert / später | Davids Idee — gemeinsames Muster mit P6 (D01 dort); »muss gut gemacht werden«, erstmal Modal |
|
||||
| Spam standardmäßig ausgeblendet, Konvertierte ausgeblendet | genommen | Toggle-Chips laut Ticket |
|
||||
| Pivot-Regel | genommen | Freigabe (ja/nein/unklar) am Lead; bei »ja« → Projekt; Kontakt separat verknüpft; Status new/qualified/converted/lost/spam |
|
||||
| **CSV-Import-Wizard** | genommen — Davids Delta (2026-07-08) | Ganze Listen importieren: Datei hochladen → Spalten den Lead-Feldern zuordnen → Vorschau mit Fehlern/Duplikaten → Import. Steht NICHT im Dev-Ticket → als Change-Request/Delta an Dev |
|
||||
|
||||
### Happy Path
|
||||
|
||||
1. Anfrage kommt rein (Formular/Anruf/E-Mail) → erscheint live in der Inbox, ggf. mit Duplikat-/Spam-Marker.
|
||||
2. Triage direkt in der Zeile: zuweisen, Status, oder Spam.
|
||||
3. Gute Anfrage öffnen → Detail: Herkunft, Match-Hinweise (»könnte Kontakt X sein«), Freigabe auf »ja«.
|
||||
4. **»Zu Projekt machen«** → Modal: Vorschau der übernommenen Daten, Board + Start-Spalte wählen, Kontakt verknüpfen (Match oder neu) → Projekt existiert, Lead = konvertiert.
|
||||
5. Chef schaut in die Statistiken: Woher kommen Anfragen, wie schnell reagieren wir, was wird daraus?
|
||||
|
||||
### Meldungs-/Error-States (validiert)
|
||||
|
||||
| Ereignis | UI-Form | Blockiert? | Bauen? | Copy/Notiz |
|
||||
|---|---|---|---|---|
|
||||
| Spam-Verdacht / mögliches Duplikat / auto-promoviert | Marker in der Zeile + Begründung im Detail | nein | Nur dokumentieren | Klartext-Begründung (»3 Anfragen in 1 Min von gleicher IP«) |
|
||||
| Pflichtdaten fehlen beim Konvertieren (z. B. Name) | Mängel-Banner im Modal | ja (Aktion) | Nur dokumentieren | Felder direkt im Modal nachtragbar |
|
||||
| DSGVO-Auto-Löschung | Countdown-Hinweis im Detail | nein | Nur dokumentieren | »Wird am [Datum] automatisch gelöscht« (Spam 30 T, lost konfigurierbar) |
|
||||
| Fremder Lead bei `read_own` | unsichtbar / 404 | ja | Wiederverwenden | Dev-Vorgabe |
|
||||
| Leere Inbox | Leer-Zustand | nein | Nur dokumentieren | »Keine neuen Anfragen« |
|
||||
|
||||
---
|
||||
|
||||
## 7. Validierte Screen-Liste
|
||||
|
||||
| ID | Screen/Zustand | Typ | Umsetzung | Ort | Status |
|
||||
|---|---|---|---|---|---|
|
||||
| S01 | Lead-Inbox (Triage-Liste) | Liste | Bauen | `/leads` | Validiert |
|
||||
| S02 | Lead-Detail | Detail | Bauen | `/leads/:id` | Validiert |
|
||||
| M01 | Lead → Projekt ⭐ | Modal (groß, + Bulk-Variante) | Bauen | aus S01/S02 | Validiert |
|
||||
| S03 | Lead-Statistiken | KPI-Seite | Bauen | `/leads/statistics` | Validiert |
|
||||
| S04 | Quellen-Verwaltung | Settings-Liste | Bauen | `/admin/lead-sources` | Validiert |
|
||||
| S05 | Spam-Schutz | Settings | Bauen | `/admin/lead-anti-spam` | Validiert |
|
||||
| M02 | Anfrage anlegen | Modal | Bauen | aus S01 | Validiert |
|
||||
| M03 | CSV-Import-Wizard | Modal/Wizard | Bauen | aus S01 | Validiert (Davids Delta) |
|
||||
| D01 | Inline-Anlegen (Plus → Zeile) | Idee | Später | in S01 | Dokumentiert (gemeinsam mit P6) |
|
||||
| D02–D06 | Marker/Banner/Zustände (s. Tabelle) | Inline | Nur dokumentieren | — | Validiert |
|
||||
|
||||
---
|
||||
|
||||
## 8. Grid
|
||||
|
||||
```text
|
||||
Sidebar -> S01 (Inbox) -> S02 (Detail)
|
||||
S01/S02 -> M01 (Lead -> Projekt; aus S01 auch als Bulk)
|
||||
S01 -> M02 (+ Anfrage) / M03 (CSV-Import)
|
||||
S01 -> S03 (Statistiken; Drill-Down zurueck in gefilterte Inbox)
|
||||
Einstellungen -> S04 (Quellen) / S05 (Spam-Schutz)
|
||||
M01 nutzt M01 aus P6 (Kontakt anlegen) fuer neue Kontakte
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9. Screen-Pakete
|
||||
|
||||
- [[S01 Lead-Inbox]] · [[S02 Lead-Detail]] · [[M01 Lead zu Projekt]]
|
||||
- [[S03 Lead-Statistiken]] · [[M02 Anfrage anlegen]] · [[M03 CSV-Import]]
|
||||
- [[S04 Quellen-Verwaltung]] · [[S05 Spam-Schutz]]
|
||||
|
||||
---
|
||||
|
||||
## 10. Offene Fragen
|
||||
|
||||
- Massen-Konvertierung (Bulk »Zu Projekt«): technische Machbarkeit + Verhalten bei fehlenden Kontakt-Matches → Frage an Dev (beim Handoff)
|
||||
- CSV-Import (M03): Davids Delta, steht nicht im Dev-Ticket → als Change-Request formulieren (Import-Job, Duplikat-Behandlung serverseitig)
|
||||
- Ziel-Board-Vorauswahl im Konvertier-Modal (z. B. immer »Vertrieb«-Board als Default?) → beim Subframe-Bau
|
||||
- Statistiken: welche KPI-Kacheln auf Seite 1 → beim Subframe-Bau (Ticket-Liste ist Obermenge)
|
||||
|
||||
## Handoff-Check
|
||||
|
||||
- [x] Jeder Screen ist mit Umsetzung markiert.
|
||||
- [x] Meldungs-/Error-State-Matrix ist ausgefüllt.
|
||||
- [ ] Subframe-Link ist eingetragen. *(Subframe erst nach explizitem OK)*
|
||||
@@ -40,6 +40,8 @@ Diese Datei ist der erste Ort, um zu sehen:
|
||||
| WF-P4 Aufgaben | D-P4 | Aufgaben & Dateien | Validiert | [MD](<P4 Aufgaben und Dateien/WF-P4 Aufgaben/WF-P4 Aufgaben.md>) | [Canvas](<P4 Aufgaben und Dateien/WF-P4 Aufgaben/WF-P4 Aufgaben.canvas>) | - | Subframe nach explizitem OK | Screens validiert 2026-07-08; inkl. Davids Delta: Topbar-Button + Aufgaben-Drawer |
|
||||
| WF-P4 Dateien | D-P4 | Aufgaben & Dateien | Validiert | [MD](<P4 Aufgaben und Dateien/WF-P4 Dateien/WF-P4 Dateien.md>) | [Canvas](<P4 Aufgaben und Dateien/WF-P4 Dateien/WF-P4 Dateien.canvas>) | - | Subframe nach explizitem OK | Screens validiert 2026-07-08; Teilen/Ordner/Versionen sichtbar als Backlog v2 |
|
||||
| WF-P5 Integrationen | D-P5 | Integrationen | Validiert | [MD](<P5 Integrationen/WF-P5 Integrationen/WF-P5 Integrationen.md>) | [Canvas](<P5 Integrationen/WF-P5 Integrationen/WF-P5 Integrationen.canvas>) | - | Subframe nach explizitem OK | Screens validiert 2026-07-08; Sync-Verlauf als eigene Seiten; Connection-Card = Muster fuer P14/P15/P16 |
|
||||
| WF-P6 Kontakte und Organisationen | D-CRM | Kontakte | Validiert | [MD](<P6 Kontakte/WF-P6 Kontakte und Organisationen/WF-P6 Kontakte und Organisationen.md>) | [Canvas](<P6 Kontakte/WF-P6 Kontakte und Organisationen/WF-P6 Kontakte und Organisationen.canvas>) | - | Subframe nach explizitem OK | Screens validiert 2026-07-08; Karteikarte = Muster-Vorlage fuer alle Detailseiten (Zweispalter + Reiter) |
|
||||
| WF-P7 Leads | D-P7 | Leads | Validiert | [MD](<P7 Leads/WF-P7 Leads/WF-P7 Leads.md>) | [Canvas](<P7 Leads/WF-P7 Leads/WF-P7 Leads.canvas>) | - | Subframe nach explizitem OK | Screens validiert 2026-07-08; Lead->Projekt als grosses Modal (+Bulk); CSV-Import = Davids Delta/CR |
|
||||
|
||||
---
|
||||
|
||||
@@ -130,6 +132,25 @@ Diese Datei ist der erste Ort, um zu sehen:
|
||||
| M01 | Assistent OAuth | WF-P5 Integrationen | Modal/Wizard | Bauen | Validiert | aus S02 | [MD](<P5 Integrationen/WF-P5 Integrationen/Screens/M01 Assistent OAuth.md>) | - | [Canvas](<P5 Integrationen/WF-P5 Integrationen/WF-P5 Integrationen.canvas>) |
|
||||
| M02 | Assistent API-Schluessel | WF-P5 Integrationen | Modal/Wizard | Bauen | Validiert | aus S02 | [MD](<P5 Integrationen/WF-P5 Integrationen/Screens/M02 Assistent API-Schluessel.md>) | - | [Canvas](<P5 Integrationen/WF-P5 Integrationen/WF-P5 Integrationen.canvas>) |
|
||||
| M03 | Trennen-Bestaetigung | WF-P5 Integrationen | Modal | Bauen | Validiert | aus S02 | [MD](<P5 Integrationen/WF-P5 Integrationen/Screens/M03 Trennen-Bestaetigung.md>) | - | [Canvas](<P5 Integrationen/WF-P5 Integrationen/WF-P5 Integrationen.canvas>) |
|
||||
| S01 | Kontakte-Liste | WF-P6 Kontakte und Organisationen | Liste | Bauen | Validiert | `/contacts` | [MD](<P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S01 Kontakte-Liste.md>) | - | [Canvas](<P6 Kontakte/WF-P6 Kontakte und Organisationen/WF-P6 Kontakte und Organisationen.canvas>) |
|
||||
| S02 | Organisationen-Liste | WF-P6 Kontakte und Organisationen | Liste | Bauen | Validiert | `/contacts/companies` | [MD](<P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S02 Organisationen-Liste.md>) | - | [Canvas](<P6 Kontakte/WF-P6 Kontakte und Organisationen/WF-P6 Kontakte und Organisationen.canvas>) |
|
||||
| S03 | Kontakt-Karteikarte (Muster-Vorlage) | WF-P6 Kontakte und Organisationen | Detail | Bauen | Validiert | `/contacts/:id` | [MD](<P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S03 Kontakt-Karteikarte.md>) | - | [Canvas](<P6 Kontakte/WF-P6 Kontakte und Organisationen/WF-P6 Kontakte und Organisationen.canvas>) |
|
||||
| S04 | Organisations-Karteikarte | WF-P6 Kontakte und Organisationen | Detail | Bauen | Validiert | `/contacts/companies/:id` | [MD](<P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S04 Organisations-Karteikarte.md>) | - | [Canvas](<P6 Kontakte/WF-P6 Kontakte und Organisationen/WF-P6 Kontakte und Organisationen.canvas>) |
|
||||
| M01 | Kontakt anlegen | WF-P6 Kontakte und Organisationen | Modal | Bauen | Validiert | aus S01 + ueberall | [MD](<P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/M01 Kontakt anlegen.md>) | - | [Canvas](<P6 Kontakte/WF-P6 Kontakte und Organisationen/WF-P6 Kontakte und Organisationen.canvas>) |
|
||||
| M02 | Organisation anlegen | WF-P6 Kontakte und Organisationen | Modal | Bauen | Validiert | aus S02 | [MD](<P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/M02 Organisation anlegen.md>) | - | [Canvas](<P6 Kontakte/WF-P6 Kontakte und Organisationen/WF-P6 Kontakte und Organisationen.canvas>) |
|
||||
| S05 | Eigene Felder | WF-P6 Kontakte und Organisationen | Settings-Liste | Bauen | Validiert | `/admin/custom-fields` | [MD](<P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S05 Eigene Felder.md>) | - | [Canvas](<P6 Kontakte/WF-P6 Kontakte und Organisationen/WF-P6 Kontakte und Organisationen.canvas>) |
|
||||
| S06 | Tags | WF-P6 Kontakte und Organisationen | Settings-Liste | Bauen | Validiert | `/admin/tags` | [MD](<P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S06 Tags.md>) | - | [Canvas](<P6 Kontakte/WF-P6 Kontakte und Organisationen/WF-P6 Kontakte und Organisationen.canvas>) |
|
||||
| S07 | Duplikat-Tool | WF-P6 Kontakte und Organisationen | Settings-Liste | Bauen | Validiert | `/admin/duplicates` | [MD](<P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/S07 Duplikat-Tool.md>) | - | [Canvas](<P6 Kontakte/WF-P6 Kontakte und Organisationen/WF-P6 Kontakte und Organisationen.canvas>) |
|
||||
| M03 | Zusammenfuehren (Seite an Seite) | WF-P6 Kontakte und Organisationen | Modal (gross) | Bauen | Validiert | aus S07 | [MD](<P6 Kontakte/WF-P6 Kontakte und Organisationen/Screens/M03 Zusammenfuehren.md>) | - | [Canvas](<P6 Kontakte/WF-P6 Kontakte und Organisationen/WF-P6 Kontakte und Organisationen.canvas>) |
|
||||
| D01 | Inline-Anlegen in Liste (Notion-Stil) | WF-P6 Kontakte und Organisationen | Idee | Spaeter | Dokumentiert | in S01 | [MD](<P6 Kontakte/WF-P6 Kontakte und Organisationen/WF-P6 Kontakte und Organisationen.md>) | - | - |
|
||||
| S01 | Lead-Inbox (Triage) | WF-P7 Leads | Liste | Bauen | Validiert | `/leads` | [MD](<P7 Leads/WF-P7 Leads/Screens/S01 Lead-Inbox.md>) | - | [Canvas](<P7 Leads/WF-P7 Leads/WF-P7 Leads.canvas>) |
|
||||
| S02 | Lead-Detail | WF-P7 Leads | Detail | Bauen | Validiert | `/leads/:id` | [MD](<P7 Leads/WF-P7 Leads/Screens/S02 Lead-Detail.md>) | - | [Canvas](<P7 Leads/WF-P7 Leads/WF-P7 Leads.canvas>) |
|
||||
| M01 | Lead zu Projekt (Kern-Moment) | WF-P7 Leads | Modal (gross, +Bulk) | Bauen | Validiert | aus S01/S02 | [MD](<P7 Leads/WF-P7 Leads/Screens/M01 Lead zu Projekt.md>) | - | [Canvas](<P7 Leads/WF-P7 Leads/WF-P7 Leads.canvas>) |
|
||||
| S03 | Lead-Statistiken | WF-P7 Leads | KPI-Seite | Bauen | Validiert | `/leads/statistics` | [MD](<P7 Leads/WF-P7 Leads/Screens/S03 Lead-Statistiken.md>) | - | [Canvas](<P7 Leads/WF-P7 Leads/WF-P7 Leads.canvas>) |
|
||||
| M02 | Anfrage anlegen | WF-P7 Leads | Modal | Bauen | Validiert | aus S01 | [MD](<P7 Leads/WF-P7 Leads/Screens/M02 Anfrage anlegen.md>) | - | [Canvas](<P7 Leads/WF-P7 Leads/WF-P7 Leads.canvas>) |
|
||||
| M03 | CSV-Import-Wizard | WF-P7 Leads | Modal/Wizard | Bauen | Validiert (Delta) | aus S01 | [MD](<P7 Leads/WF-P7 Leads/Screens/M03 CSV-Import.md>) | - | [Canvas](<P7 Leads/WF-P7 Leads/WF-P7 Leads.canvas>) |
|
||||
| S04 | Quellen-Verwaltung | WF-P7 Leads | Settings-Liste | Bauen | Validiert | `/admin/lead-sources` | [MD](<P7 Leads/WF-P7 Leads/Screens/S04 Quellen-Verwaltung.md>) | - | [Canvas](<P7 Leads/WF-P7 Leads/WF-P7 Leads.canvas>) |
|
||||
| S05 | Spam-Schutz | WF-P7 Leads | Settings | Bauen | Validiert | `/admin/lead-anti-spam` | [MD](<P7 Leads/WF-P7 Leads/Screens/S05 Spam-Schutz.md>) | - | [Canvas](<P7 Leads/WF-P7 Leads/WF-P7 Leads.canvas>) |
|
||||
|
||||
---
|
||||
|
||||
@@ -199,6 +220,14 @@ Diese Datei ist der erste Ort, um zu sehen:
|
||||
| WF-P5 Integrationen | Sync-Verlauf-Ort | Genommen | Verlauf und Lauf-Detail als eigene Seiten (kein Drawer-Muster). | Davids Entscheidung 2026-07-08 |
|
||||
| WF-P5 Integrationen | Assistent-Varianten | Genommen | OAuth-Weg und API-Schluessel-Weg als eigene Frames. | Formular auto-generiert aus App-Schema |
|
||||
| WF-P5 Integrationen | Kommende Apps als Teaser? | Offen | Zeigt der Katalog nicht verfuegbare Apps mit Schloss (analog Abo-Gating)? | David/Dev |
|
||||
| WF-P6 Kontakte | Karteikarten-Grundgeruest | Genommen | Zweispalter + Reiter (links Stammdaten/Felder/Tags/Verknuepfungen, rechts Reiter Verlauf/Projekte/Aufgaben/Dateien/Notizen). | Muster-Vorlage fuer ALLE Detailseiten; nach Subframe-Bau als Standard festhalten (mit Freigabe) |
|
||||
| WF-P6 Kontakte | Anlegen | Genommen | Modal mit Live-Duplikat-Warnung; nur Name Pflicht; danach oeffnet Karteikarte. | Validiert 2026-07-08 |
|
||||
| WF-P6 Kontakte | Inline-Anlegen (Notion-Stil) | Spaeter | Plus in der Liste -> neue Zeile inline; leere Zeile loescht sich automatisch. | Davids Idee, dokumentiert; erstmal nicht bauen |
|
||||
| WF-P6 Kontakte | Listen-Struktur | Genommen | Zwei getrennte Reiter (Kontakte = ALLE Personen inkl. Ansprechpartner mit sichtbarer Org+Rolle; Organisationen separat); nie gemischt. | Validiert 2026-07-08 |
|
||||
| WF-P6 Kontakte | Anlege-Regeln + Hauptkontakt | Genommen | Privatperson ohne Kontaktart-Frage; Org auch ohne Person; genau EIN Hauptkontakt je Org, erste Person automatisch (umhaengbar); auch Privatpersonen koennen Sekundaerkontakte haben. | Validiert 2026-07-08 |
|
||||
| WF-P7 Leads | Lead->Projekt-Form | Genommen | Grosses Modal mit 3 Sektionen (Vererbungs-Vorschau, Board+Spalte, Kontakt verknuepfen); auch als Bulk-Variante (Massen-Konvertierung). | Bulk-Machbarkeit mit Dev bestaetigen |
|
||||
| WF-P7 Leads | CSV-Import-Wizard | Genommen (Delta) | Datei -> Spalten zuordnen -> Vorschau/Duplikat-Regel -> Import im Hintergrund. Steht nicht im Dev-Ticket. | Change-Request an Dev |
|
||||
| WF-P7 Leads | Anfrage anlegen | Genommen | Modal (wie Kontakt anlegen); Inline-Anlegen (Plus -> Zeile) als gemeinsames Spaeter-Muster mit P6 dokumentiert. | Validiert 2026-07-08 |
|
||||
|
||||
---
|
||||
|
||||
|
||||
+860
-288
File diff suppressed because it is too large.
Load diff
@@ -43,8 +43,8 @@ Gesamtkarte aller HiveGrid-v1-Features. Eine Karte = **ein Feature** (so benannt
|
||||
| Login, Registrierung & Workspace | Login & Zugänge | D-P2 | 🔵 | ✅ validiert |
|
||||
| Dashboard (Startseite) | Suche & Dashboard | D-DASH (Teil) | 🔵 | ⬜ offen |
|
||||
| Suche (Cmd+K) | Suche & Dashboard | D-DASH (Teil) | 🔴 klein | ⬜ offen |
|
||||
| Lead-Eingang (Anfragen) | Vertrieb | D-P7 | 🔵 | ⬜ offen |
|
||||
| Kontakte & Organisationen | Vertrieb | D-CRM | 🔵 | ⬜ offen |
|
||||
| Lead-Eingang (Anfragen) | Vertrieb | D-P7 | 🔵 | 🟡 vorgeplant |
|
||||
| Kontakte & Organisationen | Vertrieb | D-CRM | 🔵 | 🟡 vorgeplant |
|
||||
| Kanban-Board & Pipelines (Projekte) | Vertrieb | D-P8 + D-KANBAN | 🟠 | ⬜ offen |
|
||||
| Projekt-Akte (Auftrag) 📱 | Auftrag & Baustelle | D-P9 | 🟠 | ⬜ offen |
|
||||
| Plantafel (Einsatzplanung) 📱 | Auftrag & Baustelle | D-PLAN | 🔴 | ⬜ offen |
|
||||
@@ -193,25 +193,29 @@ Abhaken = in der groben Planung berücksichtigt (Screens/Flow verortet). Quelle:
|
||||
|
||||
### Vertrieb
|
||||
|
||||
#### Lead-Eingang (Anfragen) — `D-P7` — ⬜ offen
|
||||
- [ ] Eingangs-Liste (Quelle, Status, Freigabe ja/nein/unklar, Duplikat-/Spam-Marker, Schnell-Aktionen, Mehrfach-Aktionen, live)
|
||||
- [ ] Anfrage-Detail (Quelle im Detail, Spam-Wert mit Begründung, »könnte dieser Kontakt sein«-Hinweise, Verlauf bei Mehrfach-Anfragen)
|
||||
- [ ] »Zu Projekt machen« (Daten-Übernahme-Vorschau, Ziel-Board + Start-Spalte wählen, Kontakt anlegen oder verknüpfen)
|
||||
- [ ] Statistiken (eingegangen, Umwandlungsquote, Reaktionszeit, je Quelle)
|
||||
- [ ] Quellen-Verwaltung (inkl. Webhook-Link für Fremd-Websites)
|
||||
- [ ] Spam-Schutz-Einstellungen (Limits, automatische Markierung, Quarantäne, Auto-Löschfristen)
|
||||
- [ ] Anfrage von Hand anlegen (mit Duplikat-Check beim Tippen)
|
||||
#### Lead-Eingang (Anfragen) — `D-P7` — 🟡 vorgeplant (2026-07-08)
|
||||
- [x] Eingangs-Liste (Quelle, Status, Freigabe ja/nein/unklar, Duplikat-/Spam-Marker, Schnell-Aktionen, Mehrfach-Aktionen, live)
|
||||
- [x] Anfrage-Detail (Quelle im Detail, Spam-Wert mit Begründung, »könnte dieser Kontakt sein«-Hinweise, Verlauf bei Mehrfach-Anfragen)
|
||||
- [x] »Zu Projekt machen« als großes Modal (Daten-Übernahme-Vorschau, Ziel-Board + Start-Spalte, Kontakt anlegen oder verknüpfen) — auch als Bulk (Massen-Konvertierung, Davids Ergänzung)
|
||||
- [x] Statistiken (eingegangen, Umwandlungsquote, Reaktionszeit, je Quelle, Drill-Down in gefilterte Inbox)
|
||||
- [x] Quellen-Verwaltung (inkl. Webhook-Link für Fremd-Websites)
|
||||
- [x] Spam-Schutz-Einstellungen (Limits, automatische Markierung, Quarantäne, Auto-Löschfristen)
|
||||
- [x] Anfrage von Hand anlegen als Modal (mit Duplikat-Check beim Tippen); Inline-Anlegen als Später-Muster
|
||||
- Davids Delta: **CSV-Import-Wizard** (Datei → Spalten zuordnen → Vorschau → Import) — Change-Request an Dev
|
||||
- Paket: `02 Wireframes/P7 Leads/WF-P7 Leads/` (Screens validiert; Subframe steht aus)
|
||||
|
||||
#### Kontakte & Organisationen — `D-CRM` — ⬜ offen
|
||||
- [ ] Kontakt-Liste (Filter, Mehrfach-Aktionen, CSV-Export)
|
||||
- [ ] Organisations-Liste (heißt »Organisation«, nicht »Unternehmen«)
|
||||
- [ ] Kontakt-Detailseite = **Vorlage für alle Detailseiten** (direkt editierbar, Reiter: Projekte/Dateien/Aufgaben, eigene Felder, Notizen, kompletter Verlauf inkl. Mails + Anrufe, Schnell-Aktionen)
|
||||
- [ ] Organisations-Detailseite (verknüpfte Kontakte mit Rolle, Hauptkontakt markiert)
|
||||
- [ ] Eigene Felder verwalten (je Datentyp, SHK-Vorlagen vorbefüllt)
|
||||
- [ ] Tags verwalten (Farbe, zusammenführen)
|
||||
- [ ] Duplikate nebeneinander vergleichen und Feld für Feld zusammenführen
|
||||
- [ ] Kontakt-Logik: Typ (Privatperson/Organisation) · Status (Kontakt/Kunde/Bestandskunde) · Rolle bei Verknüpfung
|
||||
- [ ] Duplikat-Warnung schon beim Anlegen
|
||||
#### Kontakte & Organisationen — `D-CRM` — 🟡 vorgeplant (2026-07-08)
|
||||
- [x] Kontakt-Liste (Filter, Mehrfach-Aktionen, CSV-Export)
|
||||
- [x] Organisations-Liste (heißt »Organisation«, nicht »Unternehmen«)
|
||||
- [x] Kontakt-Karteikarte = **Vorlage für alle Detailseiten** — validiertes Grundgerüst: Zweispalter + Reiter (links Stammdaten/Felder/Tags/Verknüpfungen, rechts Verlauf/Projekte/Aufgaben/Dateien/Notizen, Schnell-Aktionen im Kopf)
|
||||
- [x] Organisations-Karteikarte (verknüpfte Kontakte mit Rolle, Hauptkontakt markiert)
|
||||
- [x] Eigene Felder verwalten (je Datentyp, SHK-Vorlagen vorbefüllt)
|
||||
- [x] Tags verwalten (Farbe, zusammenführen)
|
||||
- [x] Duplikate nebeneinander vergleichen und Feld für Feld zusammenführen
|
||||
- [x] Kontakt-Logik: Typ (Privatperson/Organisation) · Status (Kontakt/Kunde/Bestandskunde) · Rolle bei Verknüpfung
|
||||
- [x] Duplikat-Warnung schon beim Anlegen (Anlegen als Modal, nur Name Pflicht)
|
||||
- Davids Idee dokumentiert (Später): Inline-Anlegen in der Liste (Notion-Stil)
|
||||
- Paket: `02 Wireframes/P6 Kontakte/WF-P6 Kontakte und Organisationen/` (Screens validiert; Subframe steht aus)
|
||||
|
||||
#### Kanban-Board & Pipelines (Projekte) — `D-P8` + `D-KANBAN` — ⬜ offen
|
||||
- [ ] Kanban-Board: Spalten = Status, Karten ziehen = Status wechseln; Spaltenkopf mit Anzahl + Summe
|
||||
|
||||
Reference in new issue
Block a user