70 Commits

Author SHA1 Message Date
465a6f058a Merge-Konflikte gelöst und Feldreihenfolge korrigiert 2025-03-19 13:35:49 +01:00
daf7499b4e Korrektur der Feldreihenfolge in den Suchergebnissen und Verbesserung der Tag-Anzeige 2025-03-19 13:34:10 +01:00
fade9b8d62 Hervorhebung des Tag-Feldes in den Suchergebnissen: - Blauer Hintergrund für MEDISOFT-Tags - Oranger Hintergrund für MEDICONSULT-Tags - Verbesserte visuelle Darstellung der Tags 2025-03-19 13:18:22 +01:00
611a5dd906 Fix: Teilen-Button und Telefonnummern-Links wieder hinzugefügt, Zeilenabstand in Suchergebnissen optimiert 2025-03-19 09:56:06 +01:00
35645fc671 Fix: Login-Funktionalität wiederhergestellt und Passwort aktualisiert 2025-03-18 16:11:10 +01:00
fab869eb58 Logo mit Link zu medisoftware.de versehen 2025-03-18 15:47:56 +01:00
6cd8f199c4 Gitignore: docker-compose.yml hinzugefügt 2025-03-18 15:42:48 +01:00
948a17b739 Docker Compose: Beispiel-Konfiguration hinzugefügt und Original aus Repository entfernt 2025-03-18 15:41:23 +01:00
f2290cf77f Version 1.2.6: Verbesserte Suchfunktion und Highlighting - app.py aktualisiert 2025-03-18 15:33:01 +01:00
0627b6ff33 Version 1.2.6: Verbesserte Suchfunktion und Highlighting 2025-03-18 15:32:20 +01:00
24ba040537 Version 1.2.5: Dokumentation aktualisiert 2025-03-18 15:12:50 +01:00
997786be54 Feature: Suchfeld für Fachrichtung hinzugefügt 2025-03-18 15:11:15 +01:00
c4974787d4 Dokumentation: Korrigiere Versionsangabe am Ende der README.md 2025-03-18 14:08:04 +01:00
a42bdaa721 Dokumentation: Aktualisiere Versionsnummer in README.md auf v1.2.4 2025-03-18 14:06:31 +01:00
49938a1085 Version 1.2.4: Performance-Optimierung durch Datenbankindizes 2025-03-18 14:02:07 +01:00
d0a27fe095 Performance: Indizes für alle Suchfelder hinzugefügt 2025-03-18 14:01:08 +01:00
d388bce528 Footer Text geändert 2025-03-18 13:59:57 +01:00
aabb4540c9 Version 1.2.3: Performance-Optimierung durch Entfernung von Debug-Ausgaben 2025-03-18 13:57:32 +01:00
ffde078238 Git: Füge data/customers.db zur .gitignore hinzu 2025-03-18 13:55:17 +01:00
9e320c4eb2 Performance: Entferne alle console.log Anweisungen 2025-03-18 13:53:14 +01:00
58ed5fe867 Performance: Entferne Debug-Logging aus createPhoneLink Funktion 2025-03-18 13:50:32 +01:00
72676edc10 Git: Füge data/customers.db zur .gitignore hinzu 2025-03-18 13:48:55 +01:00
d5954eac89 Version 1.2.2: Verbesserte Telefonnummern-Formatierung und Dokumentation 2025-03-18 13:47:41 +01:00
68a2db28a1 Dokumentation: Aktualisierte README.md und CHANGELOG.md für Version 1.2.2 2025-03-18 13:46:33 +01:00
13709de515 Version 1.2.2: Verbesserte Telefonnummern-Formatierung 2025-03-18 13:43:07 +01:00
2c65d5f651 Dokumentation: Aktualisierung für Version 1.2.1 2025-03-18 12:56:15 +01:00
33ecb79e0b Version 1.2.1: Verbesserte CSV-Import-Funktionalität und Login-Fix 2025-03-18 12:54:31 +01:00
00bb197620 CSS in separate Datei ausgelagert 2025-03-18 12:34:14 +01:00
8e7d3da07f Release v1.2.0: IP-Subnetz-Prüfung und Debug-Logging 2025-03-18 12:32:06 +01:00
35e0d0a783 Beispiel-Umgebungsvariablen hinzugefügt 2025-03-18 12:28:46 +01:00
40196fa28f Debug-Logging für IP-Adressen hinzugefügt 2025-03-18 12:26:46 +01:00
7b5e90e3bd IP-Subnetz-Prüfung korrigiert und Debug-Logging hinzugefügt 2025-03-18 12:25:53 +01:00
3c48988e88 Routenplanung für Adressen hinzugefügt 2025-03-18 11:35:46 +01:00
869acdcb18 IP-Überprüfung für Telefonnummern-Links implementiert 2025-03-18 11:28:27 +01:00
91af1dfca0 README und CHANGELOG für v1.0.7 aktualisiert 2025-03-18 11:15:36 +01:00
c271bc1f60 IP-Überprüfung mit X-Forwarded-For-Header hinzugefügt 2025-03-18 11:10:24 +01:00
9c04bb973e Version im Footer hinzugefügt 2025-03-18 10:24:18 +01:00
6d7298548b Dokumentation für Release v1.2.0 aktualisiert 2025-03-18 10:19:21 +01:00
42a11abe61 Login 2025-03-18 10:10:17 +01:00
3c6d2f7c45 Titel von login.html auf 'medisoftware Kundensuche' geändert 2025-03-18 09:44:45 +01:00
d143d6c7b6 Logo hinzugefügt 2025-03-18 09:10:57 +01:00
e6638b737d Logo im oberen Bereich der App zentriert hinzugefügt 2025-03-18 09:08:53 +01:00
1f493e0a37 Korrektur: medisw: Link-Parameter wiederhergestellt 2025-03-18 08:58:12 +01:00
469ad0ce05 Kundennummer wird um 12000 reduziert in Anzeige und medisw: Link 2025-03-18 08:57:40 +01:00
8a8c13e407 Port 2025-03-18 00:45:45 +01:00
18974eb69b Footer: Nur das Wort 'medisoftware' ist jetzt verlinkt 2025-03-18 00:41:07 +01:00
9e406ed7a3 Footer: Nur das Wort 'medisoftware' ist jetzt verlinkt 2025-03-18 00:38:57 +01:00
8b82a44ad8 Footer-Text aktualisiert: Made with ❤️ and 🍺 by medisoftware 2025-03-18 00:37:39 +01:00
528baff7b5 Aktuelle Version in README.md auf v1.1.0 aktualisiert 2025-03-18 00:33:54 +01:00
e105dc4663 Dokumentation für Release v1.1.0 aktualisiert 2025-03-18 00:32:05 +01:00
3f69ba6198 Merge pull request 'sophisticated-search' (#1) from sophisticated-search into main
Reviewed-on: #1
2025-03-18 00:24:21 +01:00
7e812eb835 Verbesserte Darstellung der Telefonnummern: Separate Felder für Telefon, Firma und Mobilfunk, Faxnummer entfernt 2025-03-18 00:19:16 +01:00
ece7f984f7 UI-Verbesserungen: - Größere Abstände zwischen Suchergebnissen - Dünne Trennlinien zwischen den Karten - Verbesserte visuelle Hierarchie 2025-03-17 23:41:40 +01:00
6cfc2e0162 Version 1.0.6: Kombinierte Suche über mehrere Felder 2025-03-17 22:49:27 +01:00
bbcd04fd21 Dokumentation: Verlinkung der Version mit dem Changelog 2025-03-17 22:24:44 +01:00
89a5152ada Dokumentation: Aktualisierung der Version in der README 2025-03-17 22:23:34 +01:00
e6f43ca10a Dokumentation: Aktualisierung der README und des Changelogs für Version 1.0.5 2025-03-17 22:15:01 +01:00
da3ef358d2 Dokumentation: Aktualisierung der README und des Changelogs für Version 1.0.5 2025-03-17 22:10:53 +01:00
d77ee8ef04 Version 1.0.5: Verbesserte Suchfunktion - Leere Ergebnisliste bei leeren Suchfeldern 2025-03-17 22:05:22 +01:00
cbc95c0d29 Version 1.0.4: Verbesserte Adressanzeige mit Location-Icon 2025-03-17 22:01:27 +01:00
3639344a13 Version 1.0.3: Verbesserte Adressanzeige mit Location-Icon 2025-03-17 22:00:58 +01:00
84ba72ab72 Frontend-Logik an neue API-Antwortstruktur angepasst 2025-03-17 21:29:37 +01:00
2f4671cbc4 CSV-Datei-Verarbeitung korrigiert: Komma als Trennzeichen 2025-03-17 21:27:50 +01:00
df87868ab5 CSV-Datei-Verarbeitung verbessert: Anführungszeichen entfernt 2025-03-17 21:26:06 +01:00
d1c4f6a1d0 Spaltennamen an CSV-Datei angepasst 2025-03-17 21:24:38 +01:00
88d33b1a30 CSV-Dateipfad korrigiert 2025-03-17 21:22:41 +01:00
0e9a1156e2 requests Modul hinzugefügt 2025-03-17 21:20:32 +01:00
cdf0bc31d9 Wetter-API Integration hinzugefügt 2025-03-17 21:18:55 +01:00
f1c2e9227e CHANGELOG.md hinzugefügt 2025-03-17 21:01:21 +01:00
a5383ccce8 README.md aktualisiert: Neue Features und Version 1.0.1 dokumentiert 2025-03-17 21:00:28 +01:00
16 changed files with 1434 additions and 1750 deletions

16
.env.example Normal file
View File

@@ -0,0 +1,16 @@
# Flask-Konfiguration
FLASK_APP=app.py
FLASK_ENV=development
SECRET_KEY=your-secret-key-here
# Datenbank-Konfiguration
DATABASE_URL=sqlite:///customers.db
# Authentifizierung
STATIC_PASSWORD=your-static-password-here
# IP-Bereiche für direkten Zugriff (ohne Login)
ALLOWED_IP_RANGES=192.168.0.0/24,192.168.177.0/24,213.178.68.218/29
# Logging-Konfiguration
LOG_LEVEL=INFO

7
.gitignore vendored
View File

@@ -46,3 +46,10 @@ coverage.xml
# Daten # Daten
spezexpo.csv spezexpo.csv
# Database
*.db
data/customers.db
data/customers.csv
docker-compose.yml
/data/*.csv

87
CHANGELOG.md Normal file
View File

@@ -0,0 +1,87 @@
# Changelog
Alle wichtigen Änderungen an diesem Projekt werden in dieser Datei dokumentiert.
Das Format basiert auf [Keep a Changelog](https://keepachangelog.com/de/1.0.0/),
und dieses Projekt adhäriert zu [Semantic Versioning](https://semver.org/lang/de/).
## [1.2.6] - 2024-03-19
### Geändert
- Verbesserte Suchfunktion: Keine Ergebnisse mehr bei leeren Suchfeldern
- Optimiertes Highlighting der Suchergebnisse für alle Suchfelder
- Fachrichtung wird jetzt in den Suchergebnissen hervorgehoben
## [1.2.5] - 2024-03-19
### Hinzugefügt
- Neues Suchfeld für Fachrichtung
- Index für das Fachrichtung-Feld in der Datenbank
- Fachrichtung in der allgemeinen Suche integriert
## [1.2.4] - 2024-03-19
### Geändert
- Performance-Optimierung: Indizes für alle Suchfelder hinzugefügt
- Verbesserte Suchgeschwindigkeit durch optimierte Datenbankindizes
- Zusammengesetzter Index für die häufigste Suchkombination (Name + Ort) hinzugefügt
## [1.2.3] - 2024-03-19
### Geändert
- Performance-Optimierung: Entfernung aller console.log Anweisungen
- Verbesserte Code-Qualität durch Entfernung von Debug-Ausgaben
## [1.2.2] - 2024-03-19
### Geändert
- Verbesserte Telefonnummern-Formatierung: Führende "0" wird immer hinzugefügt, wenn der Benutzer von einer erlaubten IP-Adresse zugreift
- Debug-Logging für Telefonnummern-Formatierung hinzugefügt
- Verbesserte Benutzerfreundlichkeit bei der Anzeige von Telefonnummern
### Behoben
- Problem mit fehlender führender "0" bei Telefonnummern für autorisierte Benutzer
## [1.2.1] - 2024-03-18
### Geändert
- Verbesserte CSV-Import-Funktionalität mit pandas
- Korrektur des Login-Prozesses
- Verbesserte Fehlerbehandlung und Logging
- Anpassung der Spaltennamen für den CSV-Import
### Behoben
- Login-Prozess funktioniert jetzt korrekt mit dem Passwort aus der .env Datei
- CSV-Import verarbeitet Anführungszeichen korrekt
- Verbesserte Fehlerbehandlung beim Datenbankimport
## [1.2.0] - 2024-03-18
### Geändert
- IP-Subnetz-Prüfung korrigiert (CIDR-Notation wird jetzt korrekt ausgewertet)
- Debug-Logging für IP-Adressen hinzugefügt
- Beispiel-Umgebungsvariablen (.env.example) hinzugefügt
### Hinzugefügt
- IP-basierte Zugriffssteuerung für medisoftware-Links
- IP-basierte Zugriffssteuerung für Telefonnummern-Links
- Google Maps Integration für Adressen
- Version im Footer angezeigt
### Verbessert
- Verbesserte Fehlerbehandlung bei der IP-Überprüfung
- Bessere Dokumentation der Konfigurationsmöglichkeiten
## [v1.1.0] - 2024-03-17
### Hinzugefügt
- Benutzer-Login für nicht-autorisierte IPs
- Verbesserte Darstellung der Telefonnummern
- Responsive Design für mobile Geräte
### Verbessert
- Optimierte Suchfunktion
- Verbesserte Benutzeroberfläche
## [v1.0.0] - 2024-03-17
### Hinzugefügt
- Erste Version mit grundlegenden Suchfunktionen
- Echtzeit-Suche über Kundendaten
- Hervorhebung von Suchbegriffen in den Ergebnissen
- Klickbare Links für Telefonnummern, E-Mail-Adressen und Adressen
- Docker-Container für einfache Installation und Deployment

View File

@@ -10,8 +10,12 @@ COPY requirements.txt .
# Installiere Abhängigkeiten # Installiere Abhängigkeiten
RUN pip install --no-cache-dir -r requirements.txt RUN pip install --no-cache-dir -r requirements.txt
# Kopiere den Anwendungscode # Erstelle das data Verzeichnis und setze Berechtigungen
COPY . . RUN mkdir -p /app/data && \
chmod 755 /app/data
# Kopiere die Anwendungsdateien
COPY . /app/
# Exponiere Port 5000 # Exponiere Port 5000
EXPOSE 5000 EXPOSE 5000

267
README.md
View File

@@ -1,229 +1,106 @@
# medisoftware Kundensuche # Medi-Customers
Eine Flask-basierte Webanwendung zur Suche in Kundendaten aus einer CSV-Datei. Eine Flask-basierte Webanwendung zur Verwaltung von Kundenkontakten für medizinische Einrichtungen.
## Features ## Features
- Live-Suche während der Eingabe - Kundensuche nach verschiedenen Kriterien (Name, Ort, Kundennummer, etc.)
- Spezifische Suchfelder für: - Direkte Links zu Kundendaten in medisoftware (für autorisierte IPs)
- Kundennummer - Telefonnummern-Links für autorisierte IPs
- Name (Vor- und Nachname) - Adress-Links mit Google Maps Integration
- Fachrichtung - IP-basierte Zugriffssteuerung
- Ort - Responsive Design
- Allgemeine Suche über alle Felder
- Klickbare Links für:
- Telefonnummern (tel:)
- E-Mail-Adressen (mailto:)
- Adressen (Google Maps)
- Kundennummern (KKBefe-System)
- Teilen-Funktion für einzelne Suchergebnisse
- Responsive Design mit Bootstrap
- Docker-Container-Unterstützung
## Technische Details
### Technologie-Stack
- **Backend**: Python 3.11 mit Flask
- **Frontend**: HTML, CSS, JavaScript, Bootstrap 5
- **Datenverarbeitung**: pandas, numpy
- **Container**: Docker
### Projektstruktur
```
medi-customers/
├── app.py # Flask-Anwendung
├── templates/ # HTML-Templates
│ └── index.html # Hauptseite
├── spezexpo.csv # Kundendaten
├── requirements.txt # Python-Abhängigkeiten
├── Dockerfile # Docker-Konfiguration
├── docker-compose.yml # Docker Compose Konfiguration
└── .dockerignore # Docker-Ignore-Datei
```
### Datenformat
Die Anwendung erwartet eine CSV-Datei (`spezexpo.csv`) mit folgenden Spalten:
- Nummer (Kundennummer)
- Vorname
- Nachname
- Fachrichtung
- Strasse
- PLZ
- Ort
- Tel
- mail
## Installation ## Installation
### Lokale Entwicklung 1. Repository klonen:
1. Python 3.11 installieren
2. Virtuelle Umgebung erstellen und aktivieren:
```bash ```bash
python -m venv venv git clone https://gitea.elpatron.me/elpatron/medi-customers.git
source venv/bin/activate # Linux/Mac cd medi-customers
venv\Scripts\activate # Windows
```
3. Abhängigkeiten installieren:
```bash
pip install -r requirements.txt
```
4. Anwendung starten:
```bash
python app.py
``` ```
### Docker-Container 2. Umgebungsvariablen einrichten:
1. Docker installieren
2. Container mit Docker Compose starten:
```bash ```bash
docker-compose up --build cp .env.example .env
``` # Bearbeiten Sie die .env-Datei mit Ihren Einstellungen
Die Anwendung ist dann unter `http://localhost:5001` erreichbar.
## API-Endpunkte
### GET /
- Rendert die Hauptseite
### GET /search
- Sucht nach Kunden basierend auf verschiedenen Parametern
- Parameter:
- `name`: Suche nach Vor- oder Nachname
- `ort`: Suche nach Ort
- `kundennummer`: Suche nach Kundennummer
- `fachrichtung`: Suche nach Fachrichtung
- `q`: Allgemeine Suche über alle Felder
- Returns: JSON-Array mit gefundenen Kunden
#### API-Beispiele
1. Suche nach Namen:
```bash
curl "http://localhost:5001/search?name=Schmidt"
``` ```
2. Suche nach Ort: 3. Docker Container starten:
```bash
docker-compose up -d
```
## Konfiguration
Die Anwendung kann über folgende Umgebungsvariablen konfiguriert werden:
- `FLASK_APP`: Die Hauptanwendungsdatei (Standard: app.py)
- `FLASK_ENV`: Die Flask-Umgebung (development/production)
- `SECRET_KEY`: Der geheime Schlüssel für Flask-Sessions
- `DATABASE_URL`: Die URL zur SQLite-Datenbank
- `STATIC_PASSWORD`: Das Passwort für die Login-Seite
- `ALLOWED_IP_RANGES`: Komma-getrennte Liste von IP-Bereichen, die direkten Zugriff haben
- `LOG_LEVEL`: Das Logging-Level (INFO/DEBUG)
## IP-Bereiche
Die Anwendung unterstützt CIDR-Notation für IP-Bereiche. Beispiele:
- Einzelne IP: 192.168.1.1/32
- Subnetz: 192.168.1.0/24
- Größeres Netzwerk: 10.0.0.0/8
## Version
Aktuelle Version: v1.2.6
## Lizenz
Alle Rechte vorbehalten. © 2025 medisoftware
## API-Beispiele
### Suche nach Name
```bash
curl "http://localhost:5001/search?name=Mustermann"
```
### Suche nach Ort
```bash ```bash
curl "http://localhost:5001/search?ort=Berlin" curl "http://localhost:5001/search?ort=Berlin"
``` ```
3. Suche nach Kundennummer: ### Suche nach Kundennummer
```bash ```bash
curl "http://localhost:5001/search?kundennummer=12345" curl "http://localhost:5001/search?kundennummer=12345"
``` ```
4. Suche nach Fachrichtung: ### Suche nach Fachrichtung
```bash ```bash
curl "http://localhost:5001/search?fachrichtung=Allgemeinmedizin" curl "http://localhost:5001/search?fachrichtung=Zahnarzt"
``` ```
5. Kombinierte Suche: ### Suche nach Telefon
```bash ```bash
curl "http://localhost:5001/search?name=Schmidt&ort=Berlin&fachrichtung=Allgemeinmedizin" curl "http://localhost:5001/search?telefon=030"
``` ```
6. Allgemeine Suche: ### Allgemeine Suche
```bash ```bash
curl "http://localhost:5001/search?q=Schmidt" curl "http://localhost:5001/search?q=Suchbegriff"
``` ```
#### Beispiel-Response ### Kombinierte Suche
```json
[
{
"Nummer": "12345",
"Vorname": "Max",
"Nachname": "Schmidt",
"Fachrichtung": "Allgemeinmedizin",
"Strasse": "Hauptstraße 1",
"PLZ": "10115",
"Ort": "Berlin",
"Tel": "030-123456",
"mail": "max.schmidt@example.com"
}
]
```
## Frontend-Funktionen
### Suchfunktion
- Live-Suche mit 300ms Debounce
- Spezifische Suchfelder für präzise Suche
- Allgemeine Suche für breite Suche
- Kombinierbare Suchkriterien
- Trefferzähler für jedes Suchfeld
### Link-Generierung
- `createPhoneLink()`: Erstellt tel:-Links mit führender 0
- `createEmailLink()`: Erstellt mailto:-Links
- `createAddressLink()`: Erstellt Google Maps-Links
- `createCustomerLink()`: Erstellt KKBefe-System-Links
### Teilen-Funktion
- Individueller Teilen-Button für jedes Suchergebnis
- Kopiert einen direkten Link zum spezifischen Kunden
- Visuelles Feedback beim Kopieren
## Fehlerbehandlung
- Logging für Backend-Fehler
- Benutzerfreundliche Fehlermeldungen im Frontend
- Graceful Degradation bei fehlenden Daten
## Entwicklung
### Debug-Modus
Die Anwendung läuft standardmäßig im Debug-Modus:
```bash ```bash
python app.py # Suche nach Fachrichtung und Ort
curl "http://localhost:5001/search?fachrichtung=Zahnarzt&ort=Berlin"
# Suche nach Name und Telefon
curl "http://localhost:5001/search?name=Mustermann&telefon=030"
# Suche nach mehreren Kriterien
curl "http://localhost:5001/search?fachrichtung=Zahnarzt&ort=Berlin&name=Schmidt"
``` ```
### Logging ## Version
- Backend-Logs werden mit Python's logging-Modul erstellt
- Log-Level: DEBUG
- Logs werden in der Konsole ausgegeben
## Wartung Aktuelle Version: [v1.2.4](CHANGELOG.md#v124---2024-03-19)
### Container-Verwaltung
```bash
# Container stoppen
docker-compose down
# Container starten
docker-compose up
# Container im Hintergrund starten
docker-compose up -d
# Container-Logs anzeigen
docker-compose logs -f
```
### Datenaktualisierung
1. CSV-Datei aktualisieren
2. Container neu bauen und starten:
```bash
docker-compose down
docker-compose up --build
```
## Sicherheit
- Alle externen Links öffnen sich in neuen Tabs
- Sicherheitsattribute für externe Links (noopener, noreferrer)
- Input-Validierung im Backend
- Fehlerbehandlung für ungültige Daten
## Browser-Kompatibilität
Die Anwendung wurde getestet mit:
- Chrome (neueste Version)
- Firefox (neueste Version)
- Edge (neueste Version)
- Safari (neueste Version)

504
app.py
View File

@@ -1,104 +1,462 @@
from flask import Flask, render_template, request, jsonify, url_for from flask import Flask, render_template, request, jsonify, url_for, redirect, session
import pandas as pd import pandas as pd
import os import os
import logging import logging
import numpy as np import numpy as np
from datetime import datetime from datetime import datetime, timedelta
from dotenv import load_dotenv
import requests
from collections import defaultdict
import ipaddress
import csv
import sqlite3
from functools import wraps
app = Flask(__name__, static_folder='static') app = Flask(__name__, static_folder='static')
logging.basicConfig(level=logging.DEBUG) app.secret_key = os.getenv('SECRET_KEY', 'default-secret-key')
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
# Version der Anwendung # Version der Anwendung
VERSION = "1.0.1" VERSION = "1.2.1"
# Pfad zur CSV-Datei # Pfad zur Datenbank
CSV_FILE = "data/customers.csv" DB_FILE = 'data/customers.db'
# Lade Umgebungsvariablen
load_dotenv()
# Statisches Passwort aus der .env Datei
STATIC_PASSWORD = os.getenv('LOGIN_PASSWORD', 'default-password')
ALLOWED_IP_RANGES = os.getenv('ALLOWED_IP_RANGES', '').split(',')
def get_db_connection():
"""Erstellt eine neue Datenbankverbindung mit Timeout"""
conn = sqlite3.connect(DB_FILE, timeout=20)
conn.row_factory = sqlite3.Row
return conn
def init_db():
"""Initialisiert die SQLite-Datenbank mit der notwendigen Tabelle."""
conn = get_db_connection()
c = conn.cursor()
try:
# Erstelle die Kunden-Tabelle
c.execute('''
CREATE TABLE IF NOT EXISTS customers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nummer TEXT,
name TEXT,
strasse TEXT,
plz TEXT,
ort TEXT,
telefon TEXT,
mobil TEXT,
email TEXT,
bemerkung TEXT,
fachrichtung TEXT,
tag TEXT
)
''')
# Erstelle Indizes für alle Suchfelder
c.execute('CREATE INDEX IF NOT EXISTS idx_customers_nummer ON customers(nummer)')
c.execute('CREATE INDEX IF NOT EXISTS idx_customers_name ON customers(name)')
c.execute('CREATE INDEX IF NOT EXISTS idx_customers_strasse ON customers(strasse)')
c.execute('CREATE INDEX IF NOT EXISTS idx_customers_plz ON customers(plz)')
c.execute('CREATE INDEX IF NOT EXISTS idx_customers_ort ON customers(ort)')
c.execute('CREATE INDEX IF NOT EXISTS idx_customers_telefon ON customers(telefon)')
c.execute('CREATE INDEX IF NOT EXISTS idx_customers_mobil ON customers(mobil)')
c.execute('CREATE INDEX IF NOT EXISTS idx_customers_email ON customers(email)')
c.execute('CREATE INDEX IF NOT EXISTS idx_customers_fachrichtung ON customers(fachrichtung)')
c.execute('CREATE INDEX IF NOT EXISTS idx_customers_tag ON customers(tag)')
# Erstelle einen zusammengesetzten Index für die häufigste Suchkombination
c.execute('CREATE INDEX IF NOT EXISTS idx_customers_name_ort ON customers(name, ort)')
conn.commit()
logger.info('Datenbank initialisiert')
except Exception as e:
logger.error(f'Fehler bei der Datenbankinitialisierung: {str(e)}')
raise
finally:
conn.close()
def import_csv():
"""Importiert die CSV-Datei in die Datenbank"""
conn = None
try:
conn = get_db_connection()
c = conn.cursor()
# Lösche bestehende Daten
c.execute('DELETE FROM customers')
# Importiere MEDISOFT-Daten
if os.path.exists('data/customers.csv'):
logger.info("Importiere MEDISOFT-Daten...")
df = pd.read_csv('data/customers.csv', encoding='utf-8')
df.columns = df.columns.str.strip().str.replace('"', '')
df = df.apply(lambda x: x.str.strip().str.replace('"', '') if x.dtype == "object" else x)
df['name'] = df['Vorname'] + ' ' + df['Nachname']
for _, row in df.iterrows():
c.execute('''
INSERT INTO customers (name, nummer, strasse, plz, ort, telefon, mobil, email, fachrichtung, tag)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
''', (row['name'], row['Nummer'], row['Strasse'], row['PLZ'], row['Ort'],
row['Tel'], row['Handy'], row['mail'], row['Fachrichtung'], 'medisoft'))
else:
logger.warning("MEDISOFT CSV-Datei nicht gefunden")
# Importiere MEDICONSULT-Daten
if os.path.exists('data/customers_snk.csv'):
logger.info("Importiere MEDICONSULT-Daten...")
df_snk = pd.read_csv('data/customers_snk.csv', encoding='utf-8')
df_snk.columns = df_snk.columns.str.strip().str.replace('"', '')
df_snk = df_snk.apply(lambda x: x.str.strip().str.replace('"', '') if x.dtype == "object" else x)
df_snk['name'] = df_snk['Vorname'] + ' ' + df_snk['Nachname']
for _, row in df_snk.iterrows():
c.execute('''
INSERT INTO customers (name, nummer, strasse, plz, ort, telefon, mobil, email, fachrichtung, tag)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
''', (row['name'], row['Nummer'], row['Strasse'], row['PLZ'], row['Ort'],
row['Tel'], row['Handy'], row['mail'], row['Fachrichtung'], 'mediconsult'))
else:
logger.warning("MEDICONSULT CSV-Datei nicht gefunden")
conn.commit()
logger.info("CSV-Daten erfolgreich in die Datenbank importiert")
except Exception as e:
logger.error(f"Fehler beim Importieren der CSV-Datei: {str(e)}")
raise
finally:
if conn:
conn.close()
def search_customers():
try:
q = request.args.get('q', '')
name = request.args.get('name', '')
ort = request.args.get('ort', '')
nummer = request.args.get('nummer', '')
plz = request.args.get('plz', '')
fachrichtung = request.args.get('fachrichtung', '')
operator = request.args.get('operator', 'or')
conn = get_db_connection()
c = conn.cursor()
# Basis-SQL-Query
query = '''
SELECT DISTINCT
c.id,
c.name,
c.nummer,
c.strasse,
c.plz,
c.ort,
c.telefon,
c.mobil,
c.email,
c.fachrichtung,
c.tag
FROM customers c
WHERE 1=1
'''
params = []
# Suchbedingungen
conditions = []
if q:
search_terms = q.split()
if operator == 'and':
for term in search_terms:
conditions.append('''
(c.name LIKE ? OR c.nummer LIKE ? OR c.strasse LIKE ?
OR c.plz LIKE ? OR c.ort LIKE ? OR c.telefon LIKE ?
OR c.mobil LIKE ? OR c.email LIKE ? OR c.fachrichtung LIKE ?
OR c.tag LIKE ?)
''')
params.extend([f'%{term}%'] * 10)
else:
term_conditions = []
for term in search_terms:
term_conditions.append('''
(c.name LIKE ? OR c.nummer LIKE ? OR c.strasse LIKE ?
OR c.plz LIKE ? OR c.ort LIKE ? OR c.telefon LIKE ?
OR c.mobil LIKE ? OR c.email LIKE ? OR c.fachrichtung LIKE ?
OR c.tag LIKE ?)
''')
params.extend([f'%{term}%'] * 10)
conditions.append('(' + ' OR '.join(term_conditions) + ')')
if name:
conditions.append('c.name LIKE ?')
params.append(f'%{name}%')
if ort:
conditions.append('c.ort LIKE ?')
params.append(f'%{ort}%')
if nummer:
conditions.append('c.nummer LIKE ?')
params.append(f'%{nummer}%')
if plz:
conditions.append('c.plz LIKE ?')
params.append(f'%{plz}%')
if fachrichtung:
conditions.append('c.fachrichtung LIKE ?')
params.append(f'%{fachrichtung}%')
if conditions:
query += ' AND ' + ' AND '.join(conditions)
c.execute(query, params)
results = c.fetchall()
# Formatiere die Ergebnisse
formatted_results = []
for row in results:
customer = {
'id': row[0],
'name': row[1],
'nummer': row[2],
'strasse': row[3],
'plz': row[4],
'ort': row[5],
'telefon': row[6],
'mobil': row[7],
'email': row[8],
'fachrichtung': row[9],
'tag': row[10]
}
formatted_results.append(customer)
conn.close()
return jsonify(formatted_results)
except Exception as e:
logger.error(f"Fehler bei der Suche: {str(e)}")
return jsonify({'error': str(e)}), 500
def clean_dataframe(df): def clean_dataframe(df):
"""Konvertiert NaN-Werte in None für JSON-Kompatibilität""" """Konvertiert NaN-Werte in None für JSON-Kompatibilität"""
return df.replace({np.nan: None}) return df.replace({np.nan: None})
# CSV-Datei laden
def load_data():
try:
logger.info("Versuche CSV-Datei zu laden...")
if not os.path.exists(CSV_FILE):
logger.error(f"CSV-Datei '{CSV_FILE}' nicht gefunden!")
return None
df = pd.read_csv(CSV_FILE, encoding='utf-8') @app.route('/login', methods=['GET', 'POST'])
df = clean_dataframe(df) def login():
logger.info(f"CSV-Datei erfolgreich geladen. {len(df)} Einträge gefunden.") # Versuche, die tatsächliche Client-IP aus dem X-Forwarded-For-Header zu erhalten
return df client_ip = request.headers.get('X-Forwarded-For', request.remote_addr)
except Exception as e: allowed_ip_ranges = os.getenv('ALLOWED_IP_RANGES', '').split(',')
logger.error(f"Fehler beim Laden der CSV-Datei: {str(e)}")
return None logger.info(f"Client-IP: {client_ip}")
logger.info(f"Erlaubte IP-Bereiche: {allowed_ip_ranges}")
logger.info(f"Session Status: {session}")
# Überprüfen, ob die IP-Adresse in einem der erlaubten Subnetze liegt
client_ip_obj = ipaddress.ip_address(client_ip)
for ip_range in allowed_ip_ranges:
try:
network = ipaddress.ip_network(ip_range.strip(), strict=False)
logger.info(f"Überprüfe Netzwerk: {network}")
if client_ip_obj in network:
logger.info("Client-IP ist im erlaubten Bereich.")
session['logged_in'] = True
session.permanent = True # Session bleibt bestehen
return redirect(url_for('index'))
except ValueError:
logger.error(f"Ungültiges Netzwerkformat: {ip_range}")
if request.method == 'POST':
password = request.form.get('password')
logger.info(f"Login-Versuch mit Passwort: {'*' * len(password) if password else 'None'}")
if password == STATIC_PASSWORD:
session['logged_in'] = True
session.permanent = True # Session bleibt bestehen
logger.info("Login erfolgreich, Session gesetzt")
return redirect(url_for('index'))
else:
logger.warning("Falsches Passwort eingegeben")
return render_template('login.html', error="Falsches Passwort")
logger.info("Zeige Login-Seite")
return render_template('login.html')
@app.route('/') @app.route('/')
def index(): def index():
return render_template('index.html') logger.info(f"Index-Route aufgerufen. Session Status: {session}")
if not session.get('logged_in'):
logger.info("Benutzer nicht eingeloggt, Weiterleitung zum Login")
return redirect(url_for('login'))
@app.route('/search') allowed_ip_ranges = os.getenv('ALLOWED_IP_RANGES', '')
def search(): client_ip = request.headers.get('X-Forwarded-For', request.remote_addr)
logger.info(f"Client-IP: {client_ip}")
logger.info(f"Erlaubte IP-Bereiche: {allowed_ip_ranges}")
return render_template('index.html', allowed_ip_ranges=allowed_ip_ranges)
@app.route('/search', methods=['GET', 'POST'])
def search_customers():
try: try:
# CSV-Datei laden if request.method == 'POST':
df = load_data() data = request.get_json()
if df is None: query = data.get('query', '')
return jsonify({"error": "Datenbank konnte nicht geladen werden"}), 500 tag = data.get('tag', 'medisoft')
# Suchparameter aus der URL holen
name = request.args.get('name', '').strip()
ort = request.args.get('ort', '').strip()
kundennummer = request.args.get('kundennummer', '').strip()
fachrichtung = request.args.get('fachrichtung', '').strip()
telefon = request.args.get('telefon', '').strip()
query = request.args.get('q', '').strip()
# Wenn keine spezifischen Suchkriterien angegeben sind, aber eine allgemeine Suche
if not any([name, ort, kundennummer, fachrichtung, telefon]) and query:
# Suche in allen relevanten Feldern
mask = (
df['Vorname'].str.contains(query, case=False, na=False) |
df['Nachname'].str.contains(query, case=False, na=False) |
df['Ort'].str.contains(query, case=False, na=False) |
df['Nummer'].astype(str).str.contains(query, case=False, na=False) |
df['Fachrichtung'].str.contains(query, case=False, na=False) |
df['Tel'].astype(str).str.contains(query, case=False, na=False)
)
else: else:
# Spezifische Suche query = request.args.get('q', '')
mask = pd.Series(True, index=df.index) name = request.args.get('name', '')
ort = request.args.get('ort', '')
nummer = request.args.get('nummer', '')
plz = request.args.get('plz', '')
fachrichtung = request.args.get('fachrichtung', '')
operator = request.args.get('operator', 'or')
tag = request.args.get('tag', 'medisoft')
conn = get_db_connection()
c = conn.cursor()
# Basis-SQL-Query
sql = '''
SELECT
c.nummer,
c.name,
c.strasse,
c.plz,
c.ort,
c.telefon,
c.mobil,
c.email,
c.fachrichtung,
c.tag,
CASE
WHEN c.tag = 'medisoft' THEN 'MEDISOFT'
WHEN c.tag = 'mediconsult' THEN 'MEDICONSULT'
ELSE c.tag
END as formatted_tag
FROM customers c
WHERE 1=1
'''
params = []
if request.method == 'POST':
if query:
sql += ''' AND (
c.name LIKE ? OR
c.nummer LIKE ? OR
c.strasse LIKE ? OR
c.plz LIKE ? OR
c.ort LIKE ? OR
c.telefon LIKE ? OR
c.mobil LIKE ? OR
c.email LIKE ? OR
c.fachrichtung LIKE ?
)'''
search_pattern = f'%{query}%'
params.extend([search_pattern] * 9)
else:
# Suchbedingungen für GET-Request
conditions = []
if query:
search_terms = query.split()
if operator == 'and':
for term in search_terms:
conditions.append('''
(c.name LIKE ? OR c.nummer LIKE ? OR c.strasse LIKE ?
OR c.plz LIKE ? OR c.ort LIKE ? OR c.telefon LIKE ?
OR c.mobil LIKE ? OR c.email LIKE ? OR c.fachrichtung LIKE ?)
''')
params.extend([f'%{term}%'] * 9)
else:
term_conditions = []
for term in search_terms:
term_conditions.append('''
(c.name LIKE ? OR c.nummer LIKE ? OR c.strasse LIKE ?
OR c.plz LIKE ? OR c.ort LIKE ? OR c.telefon LIKE ?
OR c.mobil LIKE ? OR c.email LIKE ? OR c.fachrichtung LIKE ?)
''')
params.extend([f'%{term}%'] * 9)
conditions.append('(' + ' OR '.join(term_conditions) + ')')
if name: if name:
name_mask = ( conditions.append('c.name LIKE ?')
df['Vorname'].str.contains(name, case=False, na=False) | params.append(f'%{name}%')
df['Nachname'].str.contains(name, case=False, na=False)
)
mask &= name_mask
if ort: if ort:
ort_mask = df['Ort'].str.contains(ort, case=False, na=False) conditions.append('c.ort LIKE ?')
mask &= ort_mask params.append(f'%{ort}%')
if nummer:
if kundennummer: conditions.append('c.nummer LIKE ?')
kundennummer_mask = df['Nummer'].astype(str).str.contains(kundennummer, case=False, na=False) params.append(f'%{nummer}%')
mask &= kundennummer_mask if plz:
conditions.append('c.plz LIKE ?')
params.append(f'%{plz}%')
if fachrichtung: if fachrichtung:
fachrichtung_mask = df['Fachrichtung'].str.contains(fachrichtung, case=False, na=False) conditions.append('c.fachrichtung LIKE ?')
mask &= fachrichtung_mask params.append(f'%{fachrichtung}%')
if telefon: if conditions:
telefon_mask = df['Tel'].astype(str).str.contains(telefon, case=False, na=False) sql += ' AND ' + ' AND '.join(conditions)
mask &= telefon_mask
# Füge Tag-Filter hinzu, wenn nicht 'all' ausgewählt ist
if tag != 'all':
sql += ' AND c.tag = ?'
params.append(tag)
sql += ' ORDER BY c.name'
c.execute(sql, params)
results = c.fetchall()
formatted_results = []
for row in results:
customer = {
'nummer': row[0],
'name': row[1],
'strasse': row[2],
'plz': row[3],
'ort': row[4],
'telefon': row[5],
'mobil': row[6],
'email': row[7],
'fachrichtung': row[8],
'tag': row[10] # Verwende den formatierten Tag
}
formatted_results.append(customer)
conn.close()
return jsonify(formatted_results)
results = df[mask].to_dict('records')
logger.info(f"{len(results)} Ergebnisse gefunden")
return jsonify(results)
except Exception as e: except Exception as e:
logger.error(f"Fehler bei der Suche: {str(e)}") print(f"Fehler bei der Suche: {str(e)}")
return jsonify({"error": str(e)}), 500 return jsonify({'error': str(e)}), 500
def init_app(app):
"""Initialisiert die Anwendung mit allen notwendigen Einstellungen."""
with app.app_context():
try:
# Stelle sicher, dass der data-Ordner existiert
os.makedirs('data', exist_ok=True)
# Lösche die alte Datenbank, falls sie existiert
if os.path.exists(DB_FILE):
try:
os.remove(DB_FILE)
logger.info(f"Alte Datenbank {DB_FILE} wurde gelöscht")
except Exception as e:
logger.error(f"Fehler beim Löschen der alten Datenbank: {str(e)}")
# Initialisiere die Datenbank
init_db()
# Importiere die CSV-Daten
import_csv()
logger.info("Anwendung erfolgreich initialisiert")
except Exception as e:
logger.error(f"Fehler bei der Initialisierung: {str(e)}")
raise
# Initialisiere die App
init_app(app)
if __name__ == '__main__': if __name__ == '__main__':
app.run(debug=True) app.run(debug=True, port=5001)

File diff suppressed because it is too large Load Diff

189
data/customers_snk.csv Normal file
View File

@@ -0,0 +1,189 @@
"Nummer","Anrede","Vorname","Nachname","Fachrichtung","InstDatum","Strasse","PLZ","Ort","Tel","Fax","mail","Handy","Tele Firma","Kontakt1","Kontakt2","Kontakt3"
"12014","Gemeinschaftspraxis","Dres. med.","Ahnsel/ Tüxen-Ahnsel","Allgemeinmedizin","19.12.2009","Mozartstr. 42","24943","Flensburg","0461/63622","0461/674422","torsten@ahnsel.de","","","","",""
"12166","Herrn","Sven-Oliver Konrad","Alte Rathaus-Apoteke","","15.02.2019","Musbekerweg 1","24955","Harrislee","0461/770099","","","","","","",""
"12046","Herrn","Dr. med. A.","Amran","Allgemeinmedizin","29.06.2010","Hahnweg 24","56242","Selters","026268888","026265878","info@zahnarzt-selters.de","","","","",""
"12167","Herrn","Dr. Kai Chirstiansen","Angler Apotheke","","15.02.2019","Westholmerstraße 3","24972","Steinbergkirche","04632/301","","","","","","",""
"12120","Frau","~","Anlaufpraxis der KVSH","Allgemeinmedizin","21.12.2015","Knuthstr. 1","24939","Flensburg","","","","","","","",""
"12164","Frau","im UKSH Kiel","Apotheke","Apotheke","20.08.2018","Arnold-Heller-Str. 3","24105","Kiel","043126041330","043126041340","info@apotheke-im-uksh-kiel.de","","","www.apotheke-im-uksh-kiel.de","",""
"12168","Frau","Eva Maria Kremer-Dziuron","Apotheke am Freilichtmuseum","","15.02.2019","Am Museum 1a","24113","Molfsee","0431/651488","","","","","","",""
"12160","Frau","St. Michael","Apotheke am Ochsenmarkt","Apotheke","05.02.2018","Am Ochsenmarkt 35","24937","Flensburg","0461/51973","0461/52030","kerstin.tomberger@apotheke-st-michael.de","","","","",""
"12161","Frau","St. Michael","Apotheke im CITTI-PARK","Apotheke","05.02.2018","Langberger Weg 4","24941","Flensburg","0461/99577860","0461/97899436","CITTI@apotheke-st-michael.de","","","","",""
"12113","Herrn","Meine","Apotheke Marienbrunn","Apotheke","21.09.2015","Zwickauer Strasse 99a","04277","Leipzig","0341/8611265","0341/8611267","mail@uwepaepcke.de","","","mail@apotheke-marienbrunn.de","www.apotheke-marienbrunn.de",""
"12198","Herrn","~","Apotheken Wirtschaftsdienst GmbH","","10.09.2019","Steekberg 11","24107","Kiel","","03423/7583791","","","03423/7061519","","",""
"12017","Gemeinschaftspraxis","Dres. med.","Aretz/Winterhoff","Innere Medizin","01.01.2010","Südermarkt 1a","24937","Flensburg","0461/1827804","0461/1827819","","","0461/1827804","","",""
"12010","Frau","Dr. med. Gabriele","Auerbach-Annewanter","Innere Medizin","08.12.2009","Toosbüystr. 4","24939","Flensburg","0461/20204","0461/5057077","auerbach-annewanter@medflug.de","","0461/20204","","",""
"12038","Herrn","Dr. med. S.","Babinsky / Chr. A Mohr","Allgemeinmedizin","30.12.2009","Max-Richter-Str. 2a","24537","Neumünster","04321/853880","04321/8538828","info@praxis-am-kantplatz.de","","04321/8538817","","",""
"12063","Herrn","Dr. med. Michael","Bär","Hautarzt","18.06.2012","Löbauer Str. 17","02625","Bautzen","035912777140","","","","","","",""
"12076","Gemeinschaftspraxis","Dres. med.","Bandick/Lemke/Krüger","Radiologie","31.07.2013","Berliner Allee 40c","22850","Norderstedt","040/5287330","040/52873399","EMAIL@RPXN.DE","","04052385962","","",""
"12021","Herrn","Dr. med. W.","Barchasch","Gynäkologe","22.12.2009","Norongsallee 11","24939","Flensburg","0461/27700","0461/28149","dr.bacco@gmx.de","","0461/27700","","",""
"12047","Herrn","Dr. med. Eberhard","Barth","Innere Medizin","07.09.2010","Hansastr. 2-3","20149","Hamburg","040/456858","040/417346","","","","","",""
"12169","Herrn","Ulrich Grothe","Bergapotheke","","15.02.2019","Am Markt 3","25560","Schenefeld","","","","","","","",""
"12042","Herrn","Michael","Bergeler/G. Pelz-Bergeler","Allgemeinmedizin","05.05.2010","Musbeker Weg 1","24955","Harrislee","046173038","046178873","bergeler_pelz-bergeler@medflug.de","","","","",""
"12101","Herrn","Dipl.-Med. Michael","Beylich","Allgemeinmedizin","27.02.2015","Brückenstr. 33","99955","Bad Tennstedt","036041/57033","","m.beylich@gmail.com","0174/7447780","","036041/42255","praxisbeylich@gmail.com",""
"12170","Herrn","Dr. Kai Christiansen","Birk-Apotheke","","15.02.2019","Nordstraße 2","24395","Gelting","04643/18810","","","","","","",""
"12163","Herrn","~","BITMARCK Service GmbH","","24.07.2018","Kruppstraße 64","45145","Essen","0201/17662463","","","","","","",""
"12132","Herrn","Dr. med. Christoph","Bornhöft","Kinderarzt","04.04.2016","Nibelungenstr. 26","64625","Bensheim","0625172920","","","017672601262","","","",""
"12083","Gemeinschaftspraxis","Dres.med","Bothmann-Graeber/Eggers/Behm","Allgemeinmedizin","05.09.2013","Hebbelstr. 3","24768","Rendsburg","04331/14060","","","","","","",""
"12162","Frau","Dr. med. Susanne","Brenner","Allgemeinmedizin","14.06.2018","Hauptstrasse 100","66583","Spiesen-Elvenberg","06821/9831300","","praxis@bmade.de","0151/56027055","","","",""
"12020","Gemeinschaftspraxis","Dres. med.","Buchholz/ Schulte/Ostermann","Allgemeinmedizin","01.01.2010","Zur Höhe 12","24955","Harrislee","0461/150560","0461/5705218","","","0461/150560","","",""
"12019","Gemeinschaftspraxis","Dres.","Burghoff/v. Carnap-Bornheim/Lammerskitten","Innere Medizin","05.10.2009","Waldstr. 13-15","24939","Flensburg","0461/1683100","0461/16831029","diabetes-zentrum-flensburg@flugmed.de","","015141918161","info-an@dr.robert-winkler.de","c.burghoff@web.de","01746225488 (Carnap)"
"12050","Gemeinschaftspraxis","Dres. med.","Burkert/ Strobach","","08.12.2010","Appenrader Str. 48","24939","Flensburg","0461/41006","","","","","","",""
"12131","Herrn","Winfried","Buß","Orthopädie","30.03.2016","Gerhardstr. 3","24768","Rendsburg","04331/789456","","winfried-buss@web.de","","","","",""
"12081","Frau","Dr. med. Pamela","Deißner","Allgemeinmedizin","05.09.2013","Wennhorn 1a","24816","Hamweddel","04875/1323","04875267","kontakt@praxisdeissner.de","0151535733","","","",""
"12171","Herrn","Gerd Ehmen","Donn-Apotheke","","15.02.2019","Johannßenstraße 2","25693","St. Michaelisdonn","04853460","","","","","","",""
"12086","Herrn","Radiologische Praxis am FEK","Dose/Teufel","Radiologie","15.10.2013","Friesenstr. 11","24534","Neumünster","04321/40910","04321/409121","info@roentgenpraxis-am-fek.de","","","","",""
"12060","Gemeinschaftspraxis","Dres. med. Daniel","Drexler/Lill","Allgemeinmedizin","20.01.2012","Bahnhofstrasse 11","83022","Rosenheim","08031/9412471","","","0151/26338196","","","",""
"12098","Gemeinschaftspraxis","Dres. med.","Eberlein-Riemke/ Laporte","Allgemeinmedizin","01.12.2014","Rathausallee 83F","22846","Norderstedt","04052/66111","","ergs-team@freenet.de","","","","",""
"12210","Herrn","Marcus Hettlage","Element 44","","30.11.2020","Schmiedestraße 11","25899","Niebüll","046619569057","","hettlage@element44.de","01705452248","","","",""
"12152","Herrn","Dr. med. Lars","Emde","Radiologie","22.12.2017","Farmsener Landstr. 193","22359","Hamburg","040/54755080","","","040/54755081","","","",""
"12073","Herrn","GMP für Anästhesie Kiel","Dres. Engel/Rinck/Schele u. Kollegen","Anästhesisten","03.07.2013","Schönberger Str. 11","24148","Kiel","0431/7206522","0431/7206599","rogge@anaesthesie-kiel.de","","0431/7206525","","",""
"12135","Herrn","Priv.-Doz. Dr. med. habil. Peter","Entzian","Innere Medizin","17.06.2016","Kuhberg 28","24534","Neumünster","04321/43621","04321/42444","entzian@lungenarzt-nms.de","0171/6992739","","043219527959 (Schikura)","",""
"12084","Herrn","Dr. med. Matthias","Eppel","Allgemeinmedizin","13.09.2013","Bahnhofstr. 17","24811","Owschlag","043363166","04336999010","info@praxis-owschlag.de","","04336/999011","","",""
"12087","Herrn","~","Evidia MVZ Förderadiologicum GmbH","Radiologie","21.10.2013","Karlstal 32","24143","Kiel","0431/702160","0431/7021619","","","","0171/5180700 Herr Müller","",""
"12143","Frau","Dr. med. Natalie","Fahrenkrog","Gynäkologie","25.10.2016","Blankwasserweg 20","23743","Grömitz","04562/25273","04562/25275","n.fahrenkrog@t-online.de","","","","",""
"12090","Gemeinschaftspraxis","Dres. med.","Falk/Schomburg","","01.01.2014","Seminarweg 4","24837","Schleswig","04621/27027","04621/26074","","0170/5370910","","geheim handy 01577/8930003","",""
"12082","Gemeinschaftspraxis","Dres. med.","Fink/Girma","Urologie","05.09.2013","Bastion 2","24788","Rendsburg","04331/23320","04331/55128","info@urologen-rendsburg.de","0176/24330034","04331/24045","0172/8832839 Dr. Finck","",""
"12172","Frau","Eva Maria Kremer-Dziurom","Fital-Apotheke","","15.02.2019","Posthofstr 4","24321","Lütjenburg","043814040880","","","","","","",""
"12195","Herrn","Jürgen Nolte","Fleethörn-Apotheke","","15.04.2019","Knooper Weg 44","24103","Kiel","0431/554381","","","","","","",""
"12173","Herrn","Sönke Kehrhahn","Flora-Apotheke","","15.02.2019","Schulstraße 25-27","25335","Elmshorn","041214262","","","","","","",""
"12033","Herrn",".","FLUG","","01.01.2010","Dorotheenstr. 6","24939","Flensburg","0461/570520","0461/5705218","","01786963930","0461/570520","","",""
"12174","Frau","Friederike Vogler","Fockbeker Apotheke","","15.02.2019","Rendsburger Str. 19","24787","Fockbek","0433161404","","","","","","",""
"12175","Herrn","Dr. Heinrich Schop","Förde-Apotheke","","15.02.2019","Mürwikerstr. 162","24944","Flensburg","0461314130","","","0171/2146626","","","",""
"12116","Herrn","Martin","Forster","Allgemeinmedizin","29.09.2015","Schwachhauser Heerstraße 167","28211","Bremen","0421/341977","0421/344445","hausarzt-forster@gmx.de","01631599029","","0421/68495400 Privat Dr. Forster und Ehefrau Fr. Broockmann","",""
"12123","Gemeinschaftspraxis","Dres. med.","Forster/Kabelitz","Psychotherapie","14.01.2016","Spitalerstr. 32","20095","Hamburg","040/28059900","","","","","","",""
"12062","Herrn","Dr. med. Daniel","Foss","Internist","08.03.2012","Oberneulander Heerstr. 26-28","28355","Bremen","0421/2053338","0421/2053337","dr.hiho@mac.com","0151/40019890","0421/2053336","","",""
"12069","Herrn","Alexander Selch im","Friedrich-Ebert-Krankenhaus FEK","IT-Abteilung","31.01.2013","Friesenstr. 11","24534","Neumünster","04321/4052031","043214052039","juergen.spanier@fek.de","","","","",""
"12109","Herrn","Dr. med. Jörg","Fuhrberg","Urologe","17.06.2015","Erichsenweg 16","25813","Husum","0461/30550","0461/30615","praxis@dr-fuhrberg.de","0171/1251787","04841/3288","Flensburg@uro-praxis-nord.de","04841/9335045",""
"12040","Frau","Martina","Gaschae","Psychotherapeutin","09.03.2010","Kompagniestr. 9","24937","Flensburg","","","","","","","",""
"12197","Herrn","Karsten","Gebhardt / Jana Klinkicht","","10.09.2019","Am Anger 3","04838","Eilenburg","03423/7061519","","","","","","",""
"12091","Gemeinschaftspraxis","Dres. med.","Gehring /Mansfeld","Innere Medizin","25.03.2014","Berliner Allee 40C","22850","Norderstedt","0405283048","040/51208379","pg@hahc.de","","040/32590369","0157/82022124 Praxishandy","",""
"12102","Herrn","P.","Gernhold/S.Valentin/Dr.M.Stember","Allgemeinmedizin","02.03.2015","Evergerstr. 28-30","51061","Köln-Flittard","0221/662211","02219666319","post@gemeinschaftspraxis-flittard.de","","","","",""
"12151","Herrn","P.","Gernhold/S.Valentin/Dr.M.Stember","","11.12.2017","Oberstr. 10","53859","Niederkassel","02208/1711","02208/8684","","","","","",""
"12194","Herrn","~","GIO","Ärztegemeinschaft","29.03.2019","Schloßplatz 3","24768","Rendsburg","04331/4377600","04331/4376570","m.berges@gioonline.de","","","","",""
"12204","Herrn","185-1.1","gkv informatik","","09.11.2020","Lichtscheider Str. 89","42285","Wuppertal","","","","","","","",""
"12205","Herrn","185-1.2","gkv informatik","","09.11.2020","Lichtscheider Str. 89","42285","Wuppertal","","","","","","","",""
"12206","Herrn","185-2.1","gkv informatik","","09.11.2020","Lichtscheider Str. 89","42285","Wuppertal","","","","","","","",""
"12207","Herrn","185-2.2","gkv informatik","","09.11.2020","Lichtscheider Str. 89","42285","Wuppertal","","","","","","","",""
"12208","Herrn","185-3.1","gkv informatik","","09.11.2020","Lichtscheider Str. 89","42285","Wuppertal","","","","","","","",""
"12209","Herrn","185-3.2","gkv informatik","","09.11.2020","Lichtscheider Str. 89","42285","Wuppertal","","","","","","","",""
"12185","Herrn","~","gkv informatik","privat","19.02.2019","Lichtscheider Str. 89","42285","Wuppertal","020269581201","02026958201201","ronald.laryea@gkvi.de","","","Finanzen@gkvi.de","",""
"12186","Herrn","~","gkv pseudo","privat","20.02.2019","Steinstr 1","24118","Kiel","","","","","","","",""
"12165","Herrn","Informatik","GKVI","","05.02.2019","Lichtscheider Strasse 89","42285","Wuppertal","0202/69581201","","","","","","",""
"12025","Gemeinschaftspraxis","Dres. med.","Görgen-Pauly/Kratzius/Schüren/Schwan","Ki- u. Jugendpsychiater","23.12.2009","St.Annen-Str. 1a","23552","Lübeck","0451/7987077","0451/7987075","info@kjp-Luebeck.de","","0451/7987077","goergen-pauly@kjp-Luebeck.de schueren@kjp-Luebeck.de","neuhauss@kjp-Luebeck.de",""
"12045","Herrn","Dialysezentrum","Gregersen/Lammerskitten","","01.01.2010","Alter Ochsenweg 1","24941","Flensburg","0461/9401594","0461/67422039","","","","","",""
"12176","Herrn","Dr. Heinrich Schop","Grenz-Apotheke","","15.02.2019","Zur Höhle 10","24955","Harrislee","046171359","","","0171/2146626","","","",""
"12095","Herrn","Dr. med. Martin","Gunkel","","21.09.2014","Frankensteiner Str. 28","64319","Pfungstadt","06157/4842","06157/991688","martin@gunkel.net","0179/6721400","","","",""
"12128","Herrn","Dr. med. Martin","Gunkel","Kinderarzt","15.03.2016","Hauptstr. 30","64342","Seeheim-Jugenheim","06257/903275","06257/903277","dr.v.baum@gmx.de","","06257/903276","","",""
"12133","Gemeinschaftspraxis","Dres. med.","Hachmann/ Feil","Kinder- u. Jugendmedizin","06.04.2016","Martinspfad 72","64285","Darmstadt","0615146386","","service@e-kinderaerzte.de","0171/7185207","","","",""
"12043","Gemeinschaftspraxis","Dres. med.","Haferland / Urban","Innere Medizin","20.05.2010","Reichenbacher Str. 106 a","02827","Görlitz","03581/739797","","","","","","",""
"12114","Herrn","Dr. med. J.","Hannappel","Allgemeinmedizin","21.09.2015","Kirchstrasse 12","56333","Winningen","02606/2287","","johannappel@t-online.de","","","","",""
"12015","Gemeinschaftspraxis","Dres. med.","Hansen-Magnusson/Knaut/Kronas","Allgemeinmedizin","29.03.2010","Poststr. 2","24997","Wanderup","04606/227","04606/759","","","04606/2129999","0151/15555353 Praxishandy (in Prx erreichbar)","0170/4839766 Dr Magnusson",""
"12110","Frau","Manuela","Hehemann","Allgemeinmedizin","01.07.2015","Herzbachweg 12","63571","Gelnhausen","06051/888120","06051/888122","manuela.hehemann@freenet.de","0152/04772701","","","",""
"12004","Gemeinschaftspraxis","Dres. med.","Herrberger/Bierwolf","Kieferchirurgen","07.10.2009","An der Obertrave 16a","23552","Lübeck","0451/889010","0451/8890111","info@mkg-holstentor.de","","0451/889010","","",""
"12122","Frau","Dipl.-Psych. Kerstin","Hippius-Schultheß","Psychotherapie","14.01.2016","Dr.-Friedrichs-Ring 55","08056","Zwickau","0375/30359285","0375/30359286","kerstin.hippius@posteo.de","","","","",""
"12140","Frau","Dipl.-Psych. Andrea","Hirschmann","Psychotherapie","20.07.2016","Stormsweg 8","22085","Hamburg","040/2276393","03212/1470998","a@hirschmann-schoen.de","","","","",""
"12177","Herrn","Dr. Peter Froese","Holsten-Apotheke","","15.02.2019","Klas-Groth-Str. 6","24790","Schascht-Audorf","0433194730","","","","","","",""
"12007","Frau","Dr. med. Astrid","Horn","Allgemeinmedizin","25.08.2009","Moltkestr. 20","24937","Flensburg","0461/17908","0461/17909","","","0461/17908","","",""
"12103","Frau","Dipl.-Psych. Imke","Hoyer","Psychotherapie","02.03.2015","Tangstedter Landstr. 516d","22851","Norderstedt","040/35778755","040/35778756","kontakt@psychotherapie-hoyer.de","0162/2308720","","I-hoyer@gmx.net","",""
"12002","Herrn",".","Interessenten","","01.01.2000","Steinstr. 1","24118","Kiel","","","","","","","",""
"12149","Herrn","~","ITSG GmbH","","13.06.2017","Seligenstädter Grund 11","63150","Heusenstamm","06104/60050226","06104/60050300","patrik.bohland@itsg.de","0177/2915142","","","",""
"12066","Herrn","Dr. med. Uwe","Kaeßmann","Unfall-u. Gelenkchirurgie","10.12.2012","Am Krankenhaus 5","24211","Preetz","04342/801211","04342/801489","U.Kaessmann@Klinik-Preetz.de","","","","",""
"12074","Frau","Dr. med. Nora","Kelm","Allgemeinmedizin","08.07.2013","Rendsburger Str. 11","24787","Fockbek","04331/61172","04331/669252","","","","","",""
"12178","Herrn","Hans-Günther Lund","Kgl. priv. Apotheke","","15.02.2019","Markt 1","25917","Leck","046622220","046623054","lund@apotheke-leck.de","","046622220","","",""
"12052","Gemeinschaftspraxis","Dres. med.","Kirsch & Partner","","26.01.2011","Marktpassage 8","21149","Hamburg","040/7017471","040/70380771","","","","","",""
"12130","Frau","Dr. med. Katja","Klenke","Kinderärztin","22.03.2016","Tannenbergstr. 2","64342","Seeheim-Jugenheim","06257/82459","","Klenke.Katja@t-online.de","","","015774205315","",""
"12049","Herrn","Karl- Jürgen","Labor Klos","","08.12.2010","Paul-Ziegler-Str. 1a","24939","Flensburg","0461/503350","0461/5053520","info@labor-klos.de","","","","",""
"12100","Gemeinschaftspraxis","Dres. K.","Kohlsche/G. Reisewitz/E. Glet","Allgemeinmedizin","28.01.2015","Ohechaussee 13","22848","Norderstedt","040/5296888","040/5293063","hausarztpraxis@wtnet.de","","040/52985047","guido.reisewitz@web.de","",""
"12003","Gemeinschaftspraxis","Dres. med","Kraemer/ Schreiber","Allgemeinmedizin","13.07.2009","Carl-Diem-Str. 5","23611","Bad Schwartau","","0451/283996","praxis.kraemer-schreiber@t-online.de","","0451/22776","","",""
"12065","Herrn","Dennis","Kramkowski","Allgemeinmedizin","10.12.2012","Fritz-Reuter-Str. 90","24159","Kiel","0431/39021","0431/393934","praxis@kramkowski.net","0160/97984098","","http://www.kramkowski.net/","",""
"12061","Herrn","Städtisches","Krankenhaus Kiel GmbH","privat","20.01.2012","Chemnitzstr. 33","24116","Kiel","04311697","","systemtechnik@krankenhaus-kiel.de","","","","",""
"12097","Herrn","Labor Dr.","Krause u. Kollegen MVZ GmbH","Labormedizin","24.11.2014","Steenbeker Weg 23","24106","Kiel","0431/22010100","0431/22010109","metzner@labor-krause.de","","","","",""
"12125","Gemeinschaftspraxis","Dres. med.","Kröger und Kollegen","Radiologie","24.02.2016","Wallstraße 40 - 44","24768","Rendsburg","04331/72044","04331/77880","kroeger.s@o2mail.de","","","goettsche@roentgenpraxis-rendsburg.de","Tilo.Engel@smart-it4.com",""
"12138","Herrn","Dr. med. Thorsten","Kummerow","Augenheilkunde","13.07.2016","Schützenstr. 19","24568","Kaltenkirchen","041915143","04191909999","dr.kummerow@t-online.de","0172/5412180","04191/909998","","",""
"12179","Frau","Michaela-Alexandra Banzhaf","Kur-Apotheke","","15.02.2019","Strandstraße 110","23669","Timmendorf Strand","0450389090","","Kur-Apotheke-Niendorf.Timmendorfer-Strand@apotheke-sh.de","","","","",""
"12212","Herrn","~","KVT - Notdienst Service gGmbH","","17.05.2024","Zum Hospitalgraben 8","99425","Weimar","036434950101","","sandra.may@kvt-nd-service.de","","","","",""
"12203","Herrn","~","Labor Mohr","","05.08.2020","Rathausplatz 1","24103","Kiel","0431/978881","0431/978824","hmohr@labormohr.de","","","","",""
"12071","Herrn","Lübeck","Laborärztliche GP","Labormedizin","22.03.2013","Von-Morgen-Str. 3","23564","Lübeck","0451/610900","0451/6109010","andreas.bobrowski@labor-luebeck.de","","","l.sawatzki@labor-luebeck.de","",""
"12108","Herrn","MVZ","LaborDiagnostik Mittelhessen GmbH","","26.05.2015","Ursulum 1","35396","Gießen","0641/300210","0641/30021100","thomas.bender@ldm-labor.de","","","www.ldm-labor.de","",""
"12072","Herrn","Labor","Lademannbogen MVZ GmbH","Labormedizin","15.05.2013","Lademannbogen 61","22339","Hamburg","040538050","","max@labor-lademannbogen.de","","","","",""
"12180","Herrn","Jonas Friedrichson","Lamberti-Apotheke","","15.02.2019","Dithmarscher Weg 9","25866","Mildstedt","048417940","","","","","","",""
"12009","Frau","Carolin","Langhanke","Innere Medizin","01.01.2010","Apenrader Straße 10","24939","Flensburg","04614041","0461/4043","greg.steg@versanet.de","","0461/4041","0171/6834407 Handy Frau Stegmann","",""
"12181","Herrn","Jonas Friedrichson","Linden-Apotheke","","15.02.2019","Parkweg 10~","25821","Breklum","04671943323","","","","","","",""
"12118","Herrn","MVZ","Lubinus GmbH","","09.11.2015","Steenbeker Weg 25","24106","Kiel","04313888123","0431/38881290","j.wilkens@lubinus-stiftung.de","","0431/38882932","","",""
"12137","Gemeinschaftspraxis","Dres. med.","Maier/Georgijewitsch","Orthopädie","12.07.2016","Rödelheimer Bahnweg 21","60489","Frankfurt","069/34875980","069/348759899","","","069/348759816","","",""
"12106","Frau","~","Mammographie-Screening-Hamburg","","11.05.2015","Mönckebergstr. 11","20095","Hamburg","040/471100218","040/471100260","","","040/471100200","","",""
"12093","Herrn","Dr. med. Bernd","Mansfeld","","25.03.2014","Friedrichsgaber Weg 488","22846","Norderstedt","0405222211","","mansfeld@wtnet.de","","040/52610380","","",""
"12032","Gemeinschaftspraxis","Dres. med.","Mantzel/ Storrer-Mantzel","Allgemeinmedizin","17.11.2009","Dr-Behm-Ring 8","24963","Tarp","04638/610","04638/898927","vmantzel@web.de","","04638/610","stomtz@web.de","vo-mantzel@t-online.de",""
"12035","Gemeinschaftspraxis","Dres. med.","Marckmann/Sielmann","Allgemeinmedizin","31.12.2009","Kuhberg 43-45","24534","Neumünster","04321/42320","04321/489918","ute-petersen@gmx.de","0174/8135162","04321/42320","","",""
"12182","Herrn","Karsten Werner","Markt Apotheke","","15.02.2019","Markt 8","25821","Bredstedt","","","","","","","",""
"12183","Herrn","Dr. Peter Froese","Mastbrook Apotheke","","15.02.2019","Ostlandstr 3","24768","Rendsburg","043314705","","","","","","",""
"12008","Herrn","Dirk","Mechler","Allgemeinmedizin","29.09.2009","Meldorfer-Str. 69-71","25746","Heide","0481/62181","0481/61791","info@praxis-hei.de","0176/32747045","0481/62181","","",""
"12139","Herrn","~","medical Wundmanagement Hamburg GmbH","","19.07.2016","Hauptstr. 1a","22962","Siek","04107/9076776","04107/9087888","yannic.wetendorf@medical-wundmanagement.de","","","simon.schintag@medical-wundmanagement.de","",""
"12126","Herrn","Henning","Meyer","Psychiatrie","08.03.2016","Lornsenstr. 18","24768","Rendsburg","04331/4598459","04331/4598458","kontakt@psychiatrie-meyer.de","","","","",""
"12147","Herrn","~","MKG Chirurgie LindenArcarden","Chirurgie","08.05.2017","Fackenburger Allee 1","23554","Lübeck","0451/504910","0451/5049123","","","","","",""
"12184","Herrn","Nicolas Ahlers","Moorbek- Apotheke","","15.02.2019","Rathausallee 35-39","22846","Norderstedt","0405227552","","","","","","",""
"12037","Herrn","Dr. med. W.","Müller/ S. Kiesbye","Innere Medizin","06.10.2009","Marrensdamm 5","24944","Flensburg","0461/37151","0461/37943","w.mueller@kardiologie-flensburg.de","01718261880","0461/37151","","",""
"12200","Herrn","Dr. Benjamin Sattler","MVZ Prüner Gang","","05.03.2020","Prüner Gang 16-20","24103","Kiel","0431974470","04319744715","","","","","",""
"12121","Herrn","Jihad","Nassar","Allgemeinmedizin","04.01.2016","Schweizergasse 2","63486","Bruchköbel","06181/71329","","","","","","",""
"12146","Herrn","HNO med.","Nord","HNO-Ärzte","19.12.2016","Wallstraße 40-44","24768","Rendsburg","0433143460","","","","","","",""
"12005","Herrn","Dr. med. Helmut","Oehne","HNO-Arzt","31.07.2009","Nikolaikirchhof 5","24937","Flensburg","0461/24749","0461/22012","","","0461/24749","","",""
"12070","Herrn","Dr. M.","Orlowski/ H. Damaschke","Allgemeinmedizin","22.03.2013","Ostlandstr. 8","23812","Wahlstedt","04554/2344","","","","","","",""
"12127","Herrn","Dr. med. P.","Papachrysanthou","Innere Medizin","09.03.2016","Schiffbrückenplatz 9","24768","Rendsburg","04331/12900","","","0160/8857779","","","",""
"12187","Herrn","Christian Neumann","Parkcenter-Einhorn-Apotheke","","15.02.2019","Christianstraße 20","24534","Neumünster","","","info@apotheke-neumuenster.de","","","","",""
"12092","Herrn","Dr. med. F.","Paul","","25.03.2014","Marktplatz 1","22844","Norderstedt","040/52110717","","","","","","",""
"12058","Herrn","Stiftung Schwarzach","Pfarrer-Michael-Graf-","Orthopädie","19.12.2011","Dekan-Graf-Str. 2-6","94374","Schwarzach","09962/209571","09962/209525","","","09962/209514","","",""
"12077","Herrn","Dr. med. Heimo","Polchau","Kinder- und Jugendärzte","09.08.2013","Lehmberg 7","24103","Kiel","0431/2400240","0431/2400246","praxis@polchau.de","0162/6603963","","","0431/2400242 Dr. Polchau direkt",""
"12202","Herrn","GP Eutin","Radiologische","","30.04.2020","Hospitalstraße 22","23701","Eutin","0452172061","","","","","","",""
"12085","Herrn","Dipl. med. R.","Rahden","Internist","02.10.2013","Ernst Thälmann Str. 51","18461","Franzburg","038322857","038322589825","praxis.rahden@online.de","","","","",""
"12188","Frau","Jutta Kuhn","Rathaus-Apotheke OHG","","15.02.2019","Rathausstraße 11","22941","Bargteheide","","","","","","","",""
"12142","Gemeinschaftspraxis","Dres. med.","Rathjens/ Hartmaring","Allgemeinmedizin","01.09.2016","Friedrichstr. 1","25469","Halstenbek","04101/44490","04101/46717","joachim@rathjens.de","","","0410145818 geheim","",""
"12189","Frau","Bettina Obrock-Kienzle","Reiter Apotheke am Hogenkamp","","15.02.2019","Ansgarstr. 31","25336","Elmshorn","","","","","","","",""
"12190","Frau","Bettina Obrock-Kienzle","Reiter-Apotheke im Pferdeviertel","","15.02.2019","Eichstraße 34","25336","Elmshorn","04121/62696","","","","","","",""
"12036","Herrn","Dr. med.","Ritschl","Allgemeinmedizin","21.12.2009","Fördestr. 54","24944","Flensburg","0461/37177","0461/3153094","anrok@t-online.de","01702002208","0461/37177","","",""
"12096","Herrn","Dr. med. Martin","Freiherr von Rosen","Innere Medizin","10.11.2014","Schlossplatz 3","36129","Gersfeld","06654/960950","","info@praxis-rosen.de","","","","",""
"12022","Gemeinschaftspraxis","Dres. med.","Rundfeldt","Allgemeinmedizin","25.03.2010","Mürwiker Str. 174","24944","Flensburg","0461/32911","0461/32051","rundfeldt@medflug.de","","0461/32911","","",""
"12067","Herrn","Dr. med. Oliver","Sauer","Innere Medizin/Diabetologie","13.12.2012","Wilhelmsplatz 1a","02826","Görlitz","03581/878393","03581/878411","Praxissauer@gmx.de","","","","",""
"12094","Gemeinschaftspraxis","Dres. med.","Sawula & Budde","","25.03.2014","Rathausallee 7","22846","Norderstedt","0405257829","","","","","","",""
"12141","Herrn","Dr. med. R.","Schäferkordt","Psychotherapie","14.01.2014","Fritz-Reuter-Str. 23","19258","Boizenburg/Elbe","038847/487179","038847487019","schaeferkordt@gmx.de","","","","",""
"12034","Gemeinschaftspraxis","Dres. med.","Schlegel/Nolde","Internisten","19.12.2009","Bismarckstr. 92-94","24943","Flensburg","0461/17008","0461/17000","anne-schlegel@gmx.de","","0461/17008","Anne-Schlegel@gmx.de Tel: 04613107830","matthias.nolde@online.de","0172/4502569 Fr Lilie"
"12039","Herrn","Dr. med. Tim","Schlüter","Psychotherapeut","21.04.2010","Spitalerstr. 32","20095","Hamburg","040/20201010","040/202010119","","","040/202010110","","",""
"12064","Herrn","Dipl.-Med. D.","Schmidt","Allgemeinmedizin","18.07.2012","Am Markt 1","19273","Neuhaus","038841/20740","038841/61228","","","","","",""
"12068","Herrn","Dipl.-Psych. Michael","Schmidt","Psycholog.Psychotherapeut","13.12.2012","Augustastr. 27","02826","Görlitz","03581/316034","03581/3609558","praxis.schmidt@psychotherapie-goerlitz.de","","","","",""
"12054","Herrn","Dr. med. Walter","Schmidt","Allgemeinmedizin","07.04.2011","Christianstraße 48","23514","Neumünster","04321/44183","","","","","","",""
"12105","Herrn","Sven","Schnakenbeck/Dr. med. B. Obermeier","","04.05.2015","Mühlenstr. 7a","23866","Nahe","04535/8830","04535/2162","praxis@docobermeier.de","","","","",""
"12104","Gemeinschaftspraxis","Dres. med.","Schönewolf/Schult-Kronefeld","Innere Medizin","25.03.2015","Ulzburger Str. 12","22850","Norderstedt","040/5294944","040/5240403","","","","","",""
"12145","Gemeinschaftspraxis","Dres. med.","Schröder/Günther/Venzke/Kalinski","Pathologie- Hamburg","29.11.2016","Lademannbogen 61-63","22339","Hamburg","040/53805890","040/53805750","wolff@pathologie-hamburg.de","","","","",""
"12088","Herrn","Dr. med. Frank","Schubert","Radiologie","21.10.2013","Am Krankenhaus 5","24211","Preetz","04342/801284","04342/801285","","","","","",""
"12099","Gemeinschaftspraxis","Dres. med.","Schult-Kronefeld/Volk","Innere Medizin","08.12.2014","Ulzburger Str. 12","22850","Norderstedt","040/5294944","0405240403","sk@lungenpraxis-norderstedt.de","0177/3613055","","","",""
"12041","Herrn","Dr. med. Matthias","MVZ Bad Doberan Schwarz","Gynäkologe","27.10.1999","Am Markt 12d","18209","Bad Doberan","0381/82221","0381/82273","","","","0381/83454 privat","",""
"12148","Herrn","Dr. med. Oliver","Seibert","Orthopädie","31.05.2017","Frankfurter Str. 26","61118","Bad Vilbel","06101/83946","06101/12689","praxis@dr-seibert.de","","","www.dr-seibert.de","",""
"12124","Herrn","Dr. med. Thomas","Siedschlag","Allgemeinmedizin","08.02.2016","Am Landratspark 1","23795","Bad Segeberg","045512582","0455194812","praxis@orthopaedie-segeberg.de","","","dr.thomas.siedschlag@onlinemed.de","",""
"12191","Frau","Dr. Christina Bischof-Deichnik","Sonnen-Apotheke","","15.02.2019","Bergedorfer Straße 58-62","21502","Geesthacht","","","","","","","",""
"12089","Herrn","Nephrologisches Zentrum Reinbek","Dres. Staben/Meier/Ewald/Bassler","Nephrologen","01.01.2011","Am Ladenzentrum 8","21465","Reinbek","040/7277860","040/72778615","","","","","",""
"12196","Herrn","~","Stadtklinik Frankenthal","","30.07.2019","Elsa-Brändström-Str. 1","67227","Frankenthal","","","","","","","",""
"12027","Frau","Ulrike","Staffeld","Innere Medizin","29.12.2009","Am Stadtrand 41","24536","Neumünster","04321/31800","04321/39628","uli.sta@gmx.de","0172/1618761","04321/31800","","",""
"12115","Herrn","PD Dr. med. Spilcke-Liss/","Streckenbach/Schindler/Spielhagen","Radiologie","21.09.2015","Pappelallee 1","17489","Greifswald","03834/80440","03834/804441","","","","","",""
"12075","Herrn","Sönke","Sturm","Allgemeinmedizin","25.07.2013","Hohe Str. 26","24806","Hohn","04335/92740","","praxis@sturm-hohn.de","0162/4595544","","","",""
"12006","Gemeinschaftspraxis","Dres. med.","Stybalkowski","Innere Medizin","14.08.2009","Krämerstraße 12","25813","Husum","04841/5007","04841/82881","","","04841/5007","","",""
"12055","Herrn","Andre","Suchland","Psychiatrie","27.05.2011","Erich-Oppenheimer-Str. 6F","02827","Görlitz","03581/3759569","03581/3759589","","","","","",""
"12078","Herrn","Mike","Thomsen","Allgemeinmedizin","13.08.2013","Moltkestr. 12","24768","Rendsburg","04331/23411","04331/25574","Hausarztpraxis-Thomsen@gmx.de","01724123411","","0176/32997993 (Griguhn)","",""
"12117","Herrn","Dr. med. Th.","Thormann / L. Wintermeyer","Innere Medizin","02.11.2015","Preußerstr. 1-9","24105","Kiel","043130821","04313053523","ikad-kiel@arcor.de","","","017652174673 Dr Thormann","0431/314655",""
"12136","Herrn","Dr. med. Dieter","Tischendorf","Innere Medizin","21.06.2016","Battentor 23","36115","Hilders","06681/967970","06681/967971","dtisch@web.de","","","","",""
"12199","Herrn","Olaf Zander","Trave Apotheke","","17.02.2020","Chausseebaum 6","23795","Klein Rönnau","04551/82199","","olaf_zander@t-online.de","","","","",""
"12111","Gemeinschaftspraxis","Dres. med.","Truschnowitsch/Mittasch","Orthopädie","02.07.2015","Emmerich-Josef-Str. 40","65929","Frankfurt-Höchst","069/302085","","info@orthopaediezentrum-frankfurt.de","","","","",""
"12112","Frau","Dr. med. Kerstin","Uphoff","Kinder- u. Jugendmedizin","13.08.2015","Holzweg 8","61440","Oberursel/Ts.","06171/4650","06171/587098","bernd.uphoff@t-online.de","01623297946","","069/71473959","",""
"12150","Herrn","Verband","VDEK","","21.07.2017","Askanischer Platz 1","10963","Berlin","","","","","","","",""
"12201","Herrn","Diagnosticum","VISIORAD MVZ GmbH","","30.04.2020","Fahltskamp 74","25421","Pinneberg","0410154420","","info@visiorad.de","","","bh-vr@ps-g.de","",""
"12129","Herrn","Jörn","Voigt","Kinderarzt","15.03.2016","Röntgenstr. 26","64823","Groß Umstadt","06078/4433","06078/783681","joern.voigt@kinderarzt-voigt.de","","","","",""
"12192","Frau","Bärbel Hansen","Vorstadt-Apotheke","","15.02.2019","Schweriner Straße 51","23909","Ratzeburg","","","","","","","",""
"12057","Frau","Kirsten Katharina","Warnecke","Kieferchirurgie","11.08.2011","Wismarsche Straße 132-134","19053","Schwerin","0385/3265050","0385/32650511","mkg-schwerinqgmx.de","","","","",""
"12134","Herrn","Dr. med. Markus","Wegmann","Kinder- und Jugendmedizin","19.05.2016","Deutschhausstr. 30","35037","Marburg","06421/961990","06421/8891198","911@drwegmann.de","015201712529","","","",""
"12107","Herrn","Dr. med. Peter","Weidemann","","22.05.2015","Kurbrunnenstr. 22","52066","Aachen","0241/6052852","0241/6052851","weidemann@aol.com","","","","",""
"12053","Herrn","Orthopädikum Neuer Wall","Dres. Westermann/Schwade","Orthodädie","17.03.2011","Neuer Wall 36","20354","Hamburg","040/364714","040/364273","kontakt@Orthopaedikum-Neuer-Wall.de","0179/5465870","","","",""
"12056","Herrn","Hr.Ebling","Westpfalz-Klinikum GmbH","EDV-Abteilung Hr.Ebling","29.07.2011","Hellmut-Hartert-Str. 1","67655","Kaiserslautern","0631/2031321","","","","","","",""
"12059","Gemeinschaftspraxis","Dres. med. Ulrich/Andreas","Wiegers/Seifert","","18.01.2012","Flensburger Str. 15","24837","Schleswig","04621/28024","","","","04621/304811","","",""
"12144","Herrn","Dr. med. Jan","Wierecky","Hämatologie/Onkologie","16.11.2016","Hohe Weide 17b","20259","Hamburg","040/3571777500","040357177710","wierecky@onkologie-hamburg.de","","","0403571777526 (Frau Zaech)","",""
"12048","Gemeinschaftspraxis","Dres. med.","Winkler/ Burghoff/ v. Carnap","123456","13.12.2009","Waldstr. 13-15 Haus A","24939","Flensburg","0461/1683100","0461/16831029","","","","FLUG9","",""
"12193","Herrn","Karsten Werner","Wolfs Apotheke","","15.02.2019","Markt 28","25821","Bredstedt","","","","","","","",""
"12119","Gemeinschaftspraxis","Dres. med. Onischke/","Zechlin/ Kellinghusen","Innere Medizin","20.11.2015","Lütjenburger Str. 2","24238","Selent","04384/603","04384/604","clausonischke@web.de","","","","",""
"12079","Herrn","Dr. med. B.","Zybura","Allgemeinmedizin","16.08.2013","Paradeplatz 8","24768","Rendsburg","04331/21133","04331/29591","seidel-zybura@t-online.de","0152/34258424","","","",""
1 Nummer Anrede Vorname Nachname Fachrichtung InstDatum Strasse PLZ Ort Tel Fax mail Handy Tele Firma Kontakt1 Kontakt2 Kontakt3
2 12014 Gemeinschaftspraxis Dres. med. Ahnsel/ Tüxen-Ahnsel Allgemeinmedizin 19.12.2009 Mozartstr. 42 24943 Flensburg 0461/63622 0461/674422 torsten@ahnsel.de
3 12166 Herrn Sven-Oliver Konrad Alte Rathaus-Apoteke 15.02.2019 Musbekerweg 1 24955 Harrislee 0461/770099
4 12046 Herrn Dr. med. A. Amran Allgemeinmedizin 29.06.2010 Hahnweg 24 56242 Selters 026268888 026265878 info@zahnarzt-selters.de
5 12167 Herrn Dr. Kai Chirstiansen Angler Apotheke 15.02.2019 Westholmerstraße 3 24972 Steinbergkirche 04632/301
6 12120 Frau ~ Anlaufpraxis der KVSH Allgemeinmedizin 21.12.2015 Knuthstr. 1 24939 Flensburg
7 12164 Frau im UKSH Kiel Apotheke Apotheke 20.08.2018 Arnold-Heller-Str. 3 24105 Kiel 043126041330 043126041340 info@apotheke-im-uksh-kiel.de www.apotheke-im-uksh-kiel.de
8 12168 Frau Eva Maria Kremer-Dziuron Apotheke am Freilichtmuseum 15.02.2019 Am Museum 1a 24113 Molfsee 0431/651488
9 12160 Frau St. Michael Apotheke am Ochsenmarkt Apotheke 05.02.2018 Am Ochsenmarkt 35 24937 Flensburg 0461/51973 0461/52030 kerstin.tomberger@apotheke-st-michael.de
10 12161 Frau St. Michael Apotheke im CITTI-PARK Apotheke 05.02.2018 Langberger Weg 4 24941 Flensburg 0461/99577860 0461/97899436 CITTI@apotheke-st-michael.de
11 12113 Herrn Meine Apotheke Marienbrunn Apotheke 21.09.2015 Zwickauer Strasse 99a 04277 Leipzig 0341/8611265 0341/8611267 mail@uwepaepcke.de mail@apotheke-marienbrunn.de www.apotheke-marienbrunn.de
12 12198 Herrn ~ Apotheken Wirtschaftsdienst GmbH 10.09.2019 Steekberg 11 24107 Kiel 03423/7583791 03423/7061519
13 12017 Gemeinschaftspraxis Dres. med. Aretz/Winterhoff Innere Medizin 01.01.2010 Südermarkt 1a 24937 Flensburg 0461/1827804 0461/1827819 0461/1827804
14 12010 Frau Dr. med. Gabriele Auerbach-Annewanter Innere Medizin 08.12.2009 Toosbüystr. 4 24939 Flensburg 0461/20204 0461/5057077 auerbach-annewanter@medflug.de 0461/20204
15 12038 Herrn Dr. med. S. Babinsky / Chr. A Mohr Allgemeinmedizin 30.12.2009 Max-Richter-Str. 2a 24537 Neumünster 04321/853880 04321/8538828 info@praxis-am-kantplatz.de 04321/8538817
16 12063 Herrn Dr. med. Michael Bär Hautarzt 18.06.2012 Löbauer Str. 17 02625 Bautzen 035912777140
17 12076 Gemeinschaftspraxis Dres. med. Bandick/Lemke/Krüger Radiologie 31.07.2013 Berliner Allee 40c 22850 Norderstedt 040/5287330 040/52873399 EMAIL@RPXN.DE 04052385962
18 12021 Herrn Dr. med. W. Barchasch Gynäkologe 22.12.2009 Norongsallee 11 24939 Flensburg 0461/27700 0461/28149 dr.bacco@gmx.de 0461/27700
19 12047 Herrn Dr. med. Eberhard Barth Innere Medizin 07.09.2010 Hansastr. 2-3 20149 Hamburg 040/456858 040/417346
20 12169 Herrn Ulrich Grothe Bergapotheke 15.02.2019 Am Markt 3 25560 Schenefeld
21 12042 Herrn Michael Bergeler/G. Pelz-Bergeler Allgemeinmedizin 05.05.2010 Musbeker Weg 1 24955 Harrislee 046173038 046178873 bergeler_pelz-bergeler@medflug.de
22 12101 Herrn Dipl.-Med. Michael Beylich Allgemeinmedizin 27.02.2015 Brückenstr. 33 99955 Bad Tennstedt 036041/57033 m.beylich@gmail.com 0174/7447780 036041/42255 praxisbeylich@gmail.com
23 12170 Herrn Dr. Kai Christiansen Birk-Apotheke 15.02.2019 Nordstraße 2 24395 Gelting 04643/18810
24 12163 Herrn ~ BITMARCK Service GmbH 24.07.2018 Kruppstraße 64 45145 Essen 0201/17662463
25 12132 Herrn Dr. med. Christoph Bornhöft Kinderarzt 04.04.2016 Nibelungenstr. 26 64625 Bensheim 0625172920 017672601262
26 12083 Gemeinschaftspraxis Dres.med Bothmann-Graeber/Eggers/Behm Allgemeinmedizin 05.09.2013 Hebbelstr. 3 24768 Rendsburg 04331/14060
27 12162 Frau Dr. med. Susanne Brenner Allgemeinmedizin 14.06.2018 Hauptstrasse 100 66583 Spiesen-Elvenberg 06821/9831300 praxis@bmade.de 0151/56027055
28 12020 Gemeinschaftspraxis Dres. med. Buchholz/ Schulte/Ostermann Allgemeinmedizin 01.01.2010 Zur Höhe 12 24955 Harrislee 0461/150560 0461/5705218 0461/150560
29 12019 Gemeinschaftspraxis Dres. Burghoff/v. Carnap-Bornheim/Lammerskitten Innere Medizin 05.10.2009 Waldstr. 13-15 24939 Flensburg 0461/1683100 0461/16831029 diabetes-zentrum-flensburg@flugmed.de 015141918161 info-an@dr.robert-winkler.de c.burghoff@web.de 01746225488 (Carnap)
30 12050 Gemeinschaftspraxis Dres. med. Burkert/ Strobach 08.12.2010 Appenrader Str. 48 24939 Flensburg 0461/41006
31 12131 Herrn Winfried Buß Orthopädie 30.03.2016 Gerhardstr. 3 24768 Rendsburg 04331/789456 winfried-buss@web.de
32 12081 Frau Dr. med. Pamela Deißner Allgemeinmedizin 05.09.2013 Wennhorn 1a 24816 Hamweddel 04875/1323 04875267 kontakt@praxisdeissner.de 0151535733
33 12171 Herrn Gerd Ehmen Donn-Apotheke 15.02.2019 Johannßenstraße 2 25693 St. Michaelisdonn 04853460
34 12086 Herrn Radiologische Praxis am FEK Dose/Teufel Radiologie 15.10.2013 Friesenstr. 11 24534 Neumünster 04321/40910 04321/409121 info@roentgenpraxis-am-fek.de
35 12060 Gemeinschaftspraxis Dres. med. Daniel Drexler/Lill Allgemeinmedizin 20.01.2012 Bahnhofstrasse 11 83022 Rosenheim 08031/9412471 0151/26338196
36 12098 Gemeinschaftspraxis Dres. med. Eberlein-Riemke/ Laporte Allgemeinmedizin 01.12.2014 Rathausallee 83F 22846 Norderstedt 04052/66111 ergs-team@freenet.de
37 12210 Herrn Marcus Hettlage Element 44 30.11.2020 Schmiedestraße 11 25899 Niebüll 046619569057 hettlage@element44.de 01705452248
38 12152 Herrn Dr. med. Lars Emde Radiologie 22.12.2017 Farmsener Landstr. 193 22359 Hamburg 040/54755080 040/54755081
39 12073 Herrn GMP für Anästhesie Kiel Dres. Engel/Rinck/Schele u. Kollegen Anästhesisten 03.07.2013 Schönberger Str. 11 24148 Kiel 0431/7206522 0431/7206599 rogge@anaesthesie-kiel.de 0431/7206525
40 12135 Herrn Priv.-Doz. Dr. med. habil. Peter Entzian Innere Medizin 17.06.2016 Kuhberg 28 24534 Neumünster 04321/43621 04321/42444 entzian@lungenarzt-nms.de 0171/6992739 043219527959 (Schikura)
41 12084 Herrn Dr. med. Matthias Eppel Allgemeinmedizin 13.09.2013 Bahnhofstr. 17 24811 Owschlag 043363166 04336999010 info@praxis-owschlag.de 04336/999011
42 12087 Herrn ~ Evidia MVZ Förderadiologicum GmbH Radiologie 21.10.2013 Karlstal 32 24143 Kiel 0431/702160 0431/7021619 0171/5180700 Herr Müller
43 12143 Frau Dr. med. Natalie Fahrenkrog Gynäkologie 25.10.2016 Blankwasserweg 20 23743 Grömitz 04562/25273 04562/25275 n.fahrenkrog@t-online.de
44 12090 Gemeinschaftspraxis Dres. med. Falk/Schomburg 01.01.2014 Seminarweg 4 24837 Schleswig 04621/27027 04621/26074 0170/5370910 geheim handy 01577/8930003
45 12082 Gemeinschaftspraxis Dres. med. Fink/Girma Urologie 05.09.2013 Bastion 2 24788 Rendsburg 04331/23320 04331/55128 info@urologen-rendsburg.de 0176/24330034 04331/24045 0172/8832839 Dr. Finck
46 12172 Frau Eva Maria Kremer-Dziurom Fital-Apotheke 15.02.2019 Posthofstr 4 24321 Lütjenburg 043814040880
47 12195 Herrn Jürgen Nolte Fleethörn-Apotheke 15.04.2019 Knooper Weg 44 24103 Kiel 0431/554381
48 12173 Herrn Sönke Kehrhahn Flora-Apotheke 15.02.2019 Schulstraße 25-27 25335 Elmshorn 041214262
49 12033 Herrn . FLUG 01.01.2010 Dorotheenstr. 6 24939 Flensburg 0461/570520 0461/5705218 01786963930 0461/570520
50 12174 Frau Friederike Vogler Fockbeker Apotheke 15.02.2019 Rendsburger Str. 19 24787 Fockbek 0433161404
51 12175 Herrn Dr. Heinrich Schop Förde-Apotheke 15.02.2019 Mürwikerstr. 162 24944 Flensburg 0461314130 0171/2146626
52 12116 Herrn Martin Forster Allgemeinmedizin 29.09.2015 Schwachhauser Heerstraße 167 28211 Bremen 0421/341977 0421/344445 hausarzt-forster@gmx.de 01631599029 0421/68495400 Privat Dr. Forster und Ehefrau Fr. Broockmann
53 12123 Gemeinschaftspraxis Dres. med. Forster/Kabelitz Psychotherapie 14.01.2016 Spitalerstr. 32 20095 Hamburg 040/28059900
54 12062 Herrn Dr. med. Daniel Foss Internist 08.03.2012 Oberneulander Heerstr. 26-28 28355 Bremen 0421/2053338 0421/2053337 dr.hiho@mac.com 0151/40019890 0421/2053336
55 12069 Herrn Alexander Selch im Friedrich-Ebert-Krankenhaus FEK IT-Abteilung 31.01.2013 Friesenstr. 11 24534 Neumünster 04321/4052031 043214052039 juergen.spanier@fek.de
56 12109 Herrn Dr. med. Jörg Fuhrberg Urologe 17.06.2015 Erichsenweg 16 25813 Husum 0461/30550 0461/30615 praxis@dr-fuhrberg.de 0171/1251787 04841/3288 Flensburg@uro-praxis-nord.de 04841/9335045
57 12040 Frau Martina Gaschae Psychotherapeutin 09.03.2010 Kompagniestr. 9 24937 Flensburg
58 12197 Herrn Karsten Gebhardt / Jana Klinkicht 10.09.2019 Am Anger 3 04838 Eilenburg 03423/7061519
59 12091 Gemeinschaftspraxis Dres. med. Gehring /Mansfeld Innere Medizin 25.03.2014 Berliner Allee 40C 22850 Norderstedt 0405283048 040/51208379 pg@hahc.de 040/32590369 0157/82022124 Praxishandy
60 12102 Herrn P. Gernhold/S.Valentin/Dr.M.Stember Allgemeinmedizin 02.03.2015 Evergerstr. 28-30 51061 Köln-Flittard 0221/662211 02219666319 post@gemeinschaftspraxis-flittard.de
61 12151 Herrn P. Gernhold/S.Valentin/Dr.M.Stember 11.12.2017 Oberstr. 10 53859 Niederkassel 02208/1711 02208/8684
62 12194 Herrn ~ GIO Ärztegemeinschaft 29.03.2019 Schloßplatz 3 24768 Rendsburg 04331/4377600 04331/4376570 m.berges@gioonline.de
63 12204 Herrn 185-1.1 gkv informatik 09.11.2020 Lichtscheider Str. 89 42285 Wuppertal
64 12205 Herrn 185-1.2 gkv informatik 09.11.2020 Lichtscheider Str. 89 42285 Wuppertal
65 12206 Herrn 185-2.1 gkv informatik 09.11.2020 Lichtscheider Str. 89 42285 Wuppertal
66 12207 Herrn 185-2.2 gkv informatik 09.11.2020 Lichtscheider Str. 89 42285 Wuppertal
67 12208 Herrn 185-3.1 gkv informatik 09.11.2020 Lichtscheider Str. 89 42285 Wuppertal
68 12209 Herrn 185-3.2 gkv informatik 09.11.2020 Lichtscheider Str. 89 42285 Wuppertal
69 12185 Herrn ~ gkv informatik privat 19.02.2019 Lichtscheider Str. 89 42285 Wuppertal 020269581201 02026958201201 ronald.laryea@gkvi.de Finanzen@gkvi.de
70 12186 Herrn ~ gkv pseudo privat 20.02.2019 Steinstr 1 24118 Kiel
71 12165 Herrn Informatik GKVI 05.02.2019 Lichtscheider Strasse 89 42285 Wuppertal 0202/69581201
72 12025 Gemeinschaftspraxis Dres. med. Görgen-Pauly/Kratzius/Schüren/Schwan Ki- u. Jugendpsychiater 23.12.2009 St.Annen-Str. 1a 23552 Lübeck 0451/7987077 0451/7987075 info@kjp-Luebeck.de 0451/7987077 goergen-pauly@kjp-Luebeck.de schueren@kjp-Luebeck.de neuhauss@kjp-Luebeck.de
73 12045 Herrn Dialysezentrum Gregersen/Lammerskitten 01.01.2010 Alter Ochsenweg 1 24941 Flensburg 0461/9401594 0461/67422039
74 12176 Herrn Dr. Heinrich Schop Grenz-Apotheke 15.02.2019 Zur Höhle 10 24955 Harrislee 046171359 0171/2146626
75 12095 Herrn Dr. med. Martin Gunkel 21.09.2014 Frankensteiner Str. 28 64319 Pfungstadt 06157/4842 06157/991688 martin@gunkel.net 0179/6721400
76 12128 Herrn Dr. med. Martin Gunkel Kinderarzt 15.03.2016 Hauptstr. 30 64342 Seeheim-Jugenheim 06257/903275 06257/903277 dr.v.baum@gmx.de 06257/903276
77 12133 Gemeinschaftspraxis Dres. med. Hachmann/ Feil Kinder- u. Jugendmedizin 06.04.2016 Martinspfad 72 64285 Darmstadt 0615146386 service@e-kinderaerzte.de 0171/7185207
78 12043 Gemeinschaftspraxis Dres. med. Haferland / Urban Innere Medizin 20.05.2010 Reichenbacher Str. 106 a 02827 Görlitz 03581/739797
79 12114 Herrn Dr. med. J. Hannappel Allgemeinmedizin 21.09.2015 Kirchstrasse 12 56333 Winningen 02606/2287 johannappel@t-online.de
80 12015 Gemeinschaftspraxis Dres. med. Hansen-Magnusson/Knaut/Kronas Allgemeinmedizin 29.03.2010 Poststr. 2 24997 Wanderup 04606/227 04606/759 04606/2129999 0151/15555353 Praxishandy (in Prx erreichbar) 0170/4839766 Dr Magnusson
81 12110 Frau Manuela Hehemann Allgemeinmedizin 01.07.2015 Herzbachweg 12 63571 Gelnhausen 06051/888120 06051/888122 manuela.hehemann@freenet.de 0152/04772701
82 12004 Gemeinschaftspraxis Dres. med. Herrberger/Bierwolf Kieferchirurgen 07.10.2009 An der Obertrave 16a 23552 Lübeck 0451/889010 0451/8890111 info@mkg-holstentor.de 0451/889010
83 12122 Frau Dipl.-Psych. Kerstin Hippius-Schultheß Psychotherapie 14.01.2016 Dr.-Friedrichs-Ring 55 08056 Zwickau 0375/30359285 0375/30359286 kerstin.hippius@posteo.de
84 12140 Frau Dipl.-Psych. Andrea Hirschmann Psychotherapie 20.07.2016 Stormsweg 8 22085 Hamburg 040/2276393 03212/1470998 a@hirschmann-schoen.de
85 12177 Herrn Dr. Peter Froese Holsten-Apotheke 15.02.2019 Klas-Groth-Str. 6 24790 Schascht-Audorf 0433194730
86 12007 Frau Dr. med. Astrid Horn Allgemeinmedizin 25.08.2009 Moltkestr. 20 24937 Flensburg 0461/17908 0461/17909 0461/17908
87 12103 Frau Dipl.-Psych. Imke Hoyer Psychotherapie 02.03.2015 Tangstedter Landstr. 516d 22851 Norderstedt 040/35778755 040/35778756 kontakt@psychotherapie-hoyer.de 0162/2308720 I-hoyer@gmx.net
88 12002 Herrn . Interessenten 01.01.2000 Steinstr. 1 24118 Kiel
89 12149 Herrn ~ ITSG GmbH 13.06.2017 Seligenstädter Grund 11 63150 Heusenstamm 06104/60050226 06104/60050300 patrik.bohland@itsg.de 0177/2915142
90 12066 Herrn Dr. med. Uwe Kaeßmann Unfall-u. Gelenkchirurgie 10.12.2012 Am Krankenhaus 5 24211 Preetz 04342/801211 04342/801489 U.Kaessmann@Klinik-Preetz.de
91 12074 Frau Dr. med. Nora Kelm Allgemeinmedizin 08.07.2013 Rendsburger Str. 11 24787 Fockbek 04331/61172 04331/669252
92 12178 Herrn Hans-Günther Lund Kgl. priv. Apotheke 15.02.2019 Markt 1 25917 Leck 046622220 046623054 lund@apotheke-leck.de 046622220
93 12052 Gemeinschaftspraxis Dres. med. Kirsch & Partner 26.01.2011 Marktpassage 8 21149 Hamburg 040/7017471 040/70380771
94 12130 Frau Dr. med. Katja Klenke Kinderärztin 22.03.2016 Tannenbergstr. 2 64342 Seeheim-Jugenheim 06257/82459 Klenke.Katja@t-online.de 015774205315
95 12049 Herrn Karl- Jürgen Labor Klos 08.12.2010 Paul-Ziegler-Str. 1a 24939 Flensburg 0461/503350 0461/5053520 info@labor-klos.de
96 12100 Gemeinschaftspraxis Dres. K. Kohlsche/G. Reisewitz/E. Glet Allgemeinmedizin 28.01.2015 Ohechaussee 13 22848 Norderstedt 040/5296888 040/5293063 hausarztpraxis@wtnet.de 040/52985047 guido.reisewitz@web.de
97 12003 Gemeinschaftspraxis Dres. med Kraemer/ Schreiber Allgemeinmedizin 13.07.2009 Carl-Diem-Str. 5 23611 Bad Schwartau 0451/283996 praxis.kraemer-schreiber@t-online.de 0451/22776
98 12065 Herrn Dennis Kramkowski Allgemeinmedizin 10.12.2012 Fritz-Reuter-Str. 90 24159 Kiel 0431/39021 0431/393934 praxis@kramkowski.net 0160/97984098 http://www.kramkowski.net/
99 12061 Herrn Städtisches Krankenhaus Kiel GmbH privat 20.01.2012 Chemnitzstr. 33 24116 Kiel 04311697 systemtechnik@krankenhaus-kiel.de
100 12097 Herrn Labor Dr. Krause u. Kollegen MVZ GmbH Labormedizin 24.11.2014 Steenbeker Weg 23 24106 Kiel 0431/22010100 0431/22010109 metzner@labor-krause.de
101 12125 Gemeinschaftspraxis Dres. med. Kröger und Kollegen Radiologie 24.02.2016 Wallstraße 40 - 44 24768 Rendsburg 04331/72044 04331/77880 kroeger.s@o2mail.de goettsche@roentgenpraxis-rendsburg.de Tilo.Engel@smart-it4.com
102 12138 Herrn Dr. med. Thorsten Kummerow Augenheilkunde 13.07.2016 Schützenstr. 19 24568 Kaltenkirchen 041915143 04191909999 dr.kummerow@t-online.de 0172/5412180 04191/909998
103 12179 Frau Michaela-Alexandra Banzhaf Kur-Apotheke 15.02.2019 Strandstraße 110 23669 Timmendorf Strand 0450389090 Kur-Apotheke-Niendorf.Timmendorfer-Strand@apotheke-sh.de
104 12212 Herrn ~ KVT - Notdienst Service gGmbH 17.05.2024 Zum Hospitalgraben 8 99425 Weimar 036434950101 sandra.may@kvt-nd-service.de
105 12203 Herrn ~ Labor Mohr 05.08.2020 Rathausplatz 1 24103 Kiel 0431/978881 0431/978824 hmohr@labormohr.de
106 12071 Herrn Lübeck Laborärztliche GP Labormedizin 22.03.2013 Von-Morgen-Str. 3 23564 Lübeck 0451/610900 0451/6109010 andreas.bobrowski@labor-luebeck.de l.sawatzki@labor-luebeck.de
107 12108 Herrn MVZ LaborDiagnostik Mittelhessen GmbH 26.05.2015 Ursulum 1 35396 Gießen 0641/300210 0641/30021100 thomas.bender@ldm-labor.de www.ldm-labor.de
108 12072 Herrn Labor Lademannbogen MVZ GmbH Labormedizin 15.05.2013 Lademannbogen 61 22339 Hamburg 040538050 max@labor-lademannbogen.de
109 12180 Herrn Jonas Friedrichson Lamberti-Apotheke 15.02.2019 Dithmarscher Weg 9 25866 Mildstedt 048417940
110 12009 Frau Carolin Langhanke Innere Medizin 01.01.2010 Apenrader Straße 10 24939 Flensburg 04614041 0461/4043 greg.steg@versanet.de 0461/4041 0171/6834407 Handy Frau Stegmann
111 12181 Herrn Jonas Friedrichson Linden-Apotheke 15.02.2019 Parkweg 10~ 25821 Breklum 04671943323
112 12118 Herrn MVZ Lubinus GmbH 09.11.2015 Steenbeker Weg 25 24106 Kiel 04313888123 0431/38881290 j.wilkens@lubinus-stiftung.de 0431/38882932
113 12137 Gemeinschaftspraxis Dres. med. Maier/Georgijewitsch Orthopädie 12.07.2016 Rödelheimer Bahnweg 21 60489 Frankfurt 069/34875980 069/348759899 069/348759816
114 12106 Frau ~ Mammographie-Screening-Hamburg 11.05.2015 Mönckebergstr. 11 20095 Hamburg 040/471100218 040/471100260 040/471100200
115 12093 Herrn Dr. med. Bernd Mansfeld 25.03.2014 Friedrichsgaber Weg 488 22846 Norderstedt 0405222211 mansfeld@wtnet.de 040/52610380
116 12032 Gemeinschaftspraxis Dres. med. Mantzel/ Storrer-Mantzel Allgemeinmedizin 17.11.2009 Dr-Behm-Ring 8 24963 Tarp 04638/610 04638/898927 vmantzel@web.de 04638/610 stomtz@web.de vo-mantzel@t-online.de
117 12035 Gemeinschaftspraxis Dres. med. Marckmann/Sielmann Allgemeinmedizin 31.12.2009 Kuhberg 43-45 24534 Neumünster 04321/42320 04321/489918 ute-petersen@gmx.de 0174/8135162 04321/42320
118 12182 Herrn Karsten Werner Markt Apotheke 15.02.2019 Markt 8 25821 Bredstedt
119 12183 Herrn Dr. Peter Froese Mastbrook Apotheke 15.02.2019 Ostlandstr 3 24768 Rendsburg 043314705
120 12008 Herrn Dirk Mechler Allgemeinmedizin 29.09.2009 Meldorfer-Str. 69-71 25746 Heide 0481/62181 0481/61791 info@praxis-hei.de 0176/32747045 0481/62181
121 12139 Herrn ~ medical Wundmanagement Hamburg GmbH 19.07.2016 Hauptstr. 1a 22962 Siek 04107/9076776 04107/9087888 yannic.wetendorf@medical-wundmanagement.de simon.schintag@medical-wundmanagement.de
122 12126 Herrn Henning Meyer Psychiatrie 08.03.2016 Lornsenstr. 18 24768 Rendsburg 04331/4598459 04331/4598458 kontakt@psychiatrie-meyer.de
123 12147 Herrn ~ MKG Chirurgie LindenArcarden Chirurgie 08.05.2017 Fackenburger Allee 1 23554 Lübeck 0451/504910 0451/5049123
124 12184 Herrn Nicolas Ahlers Moorbek- Apotheke 15.02.2019 Rathausallee 35-39 22846 Norderstedt 0405227552
125 12037 Herrn Dr. med. W. Müller/ S. Kiesbye Innere Medizin 06.10.2009 Marrensdamm 5 24944 Flensburg 0461/37151 0461/37943 w.mueller@kardiologie-flensburg.de 01718261880 0461/37151
126 12200 Herrn Dr. Benjamin Sattler MVZ Prüner Gang 05.03.2020 Prüner Gang 16-20 24103 Kiel 0431974470 04319744715
127 12121 Herrn Jihad Nassar Allgemeinmedizin 04.01.2016 Schweizergasse 2 63486 Bruchköbel 06181/71329
128 12146 Herrn HNO med. Nord HNO-Ärzte 19.12.2016 Wallstraße 40-44 24768 Rendsburg 0433143460
129 12005 Herrn Dr. med. Helmut Oehne HNO-Arzt 31.07.2009 Nikolaikirchhof 5 24937 Flensburg 0461/24749 0461/22012 0461/24749
130 12070 Herrn Dr. M. Orlowski/ H. Damaschke Allgemeinmedizin 22.03.2013 Ostlandstr. 8 23812 Wahlstedt 04554/2344
131 12127 Herrn Dr. med. P. Papachrysanthou Innere Medizin 09.03.2016 Schiffbrückenplatz 9 24768 Rendsburg 04331/12900 0160/8857779
132 12187 Herrn Christian Neumann Parkcenter-Einhorn-Apotheke 15.02.2019 Christianstraße 20 24534 Neumünster info@apotheke-neumuenster.de
133 12092 Herrn Dr. med. F. Paul 25.03.2014 Marktplatz 1 22844 Norderstedt 040/52110717
134 12058 Herrn Stiftung Schwarzach Pfarrer-Michael-Graf- Orthopädie 19.12.2011 Dekan-Graf-Str. 2-6 94374 Schwarzach 09962/209571 09962/209525 09962/209514
135 12077 Herrn Dr. med. Heimo Polchau Kinder- und Jugendärzte 09.08.2013 Lehmberg 7 24103 Kiel 0431/2400240 0431/2400246 praxis@polchau.de 0162/6603963 0431/2400242 Dr. Polchau direkt
136 12202 Herrn GP Eutin Radiologische 30.04.2020 Hospitalstraße 22 23701 Eutin 0452172061
137 12085 Herrn Dipl. med. R. Rahden Internist 02.10.2013 Ernst Thälmann Str. 51 18461 Franzburg 038322857 038322589825 praxis.rahden@online.de
138 12188 Frau Jutta Kuhn Rathaus-Apotheke OHG 15.02.2019 Rathausstraße 11 22941 Bargteheide
139 12142 Gemeinschaftspraxis Dres. med. Rathjens/ Hartmaring Allgemeinmedizin 01.09.2016 Friedrichstr. 1 25469 Halstenbek 04101/44490 04101/46717 joachim@rathjens.de 0410145818 geheim
140 12189 Frau Bettina Obrock-Kienzle Reiter Apotheke am Hogenkamp 15.02.2019 Ansgarstr. 31 25336 Elmshorn
141 12190 Frau Bettina Obrock-Kienzle Reiter-Apotheke im Pferdeviertel 15.02.2019 Eichstraße 34 25336 Elmshorn 04121/62696
142 12036 Herrn Dr. med. Ritschl Allgemeinmedizin 21.12.2009 Fördestr. 54 24944 Flensburg 0461/37177 0461/3153094 anrok@t-online.de 01702002208 0461/37177
143 12096 Herrn Dr. med. Martin Freiherr von Rosen Innere Medizin 10.11.2014 Schlossplatz 3 36129 Gersfeld 06654/960950 info@praxis-rosen.de
144 12022 Gemeinschaftspraxis Dres. med. Rundfeldt Allgemeinmedizin 25.03.2010 Mürwiker Str. 174 24944 Flensburg 0461/32911 0461/32051 rundfeldt@medflug.de 0461/32911
145 12067 Herrn Dr. med. Oliver Sauer Innere Medizin/Diabetologie 13.12.2012 Wilhelmsplatz 1a 02826 Görlitz 03581/878393 03581/878411 Praxissauer@gmx.de
146 12094 Gemeinschaftspraxis Dres. med. Sawula & Budde 25.03.2014 Rathausallee 7 22846 Norderstedt 0405257829
147 12141 Herrn Dr. med. R. Schäferkordt Psychotherapie 14.01.2014 Fritz-Reuter-Str. 23 19258 Boizenburg/Elbe 038847/487179 038847487019 schaeferkordt@gmx.de
148 12034 Gemeinschaftspraxis Dres. med. Schlegel/Nolde Internisten 19.12.2009 Bismarckstr. 92-94 24943 Flensburg 0461/17008 0461/17000 anne-schlegel@gmx.de 0461/17008 Anne-Schlegel@gmx.de Tel: 04613107830 matthias.nolde@online.de 0172/4502569 Fr Lilie
149 12039 Herrn Dr. med. Tim Schlüter Psychotherapeut 21.04.2010 Spitalerstr. 32 20095 Hamburg 040/20201010 040/202010119 040/202010110
150 12064 Herrn Dipl.-Med. D. Schmidt Allgemeinmedizin 18.07.2012 Am Markt 1 19273 Neuhaus 038841/20740 038841/61228
151 12068 Herrn Dipl.-Psych. Michael Schmidt Psycholog.Psychotherapeut 13.12.2012 Augustastr. 27 02826 Görlitz 03581/316034 03581/3609558 praxis.schmidt@psychotherapie-goerlitz.de
152 12054 Herrn Dr. med. Walter Schmidt Allgemeinmedizin 07.04.2011 Christianstraße 48 23514 Neumünster 04321/44183
153 12105 Herrn Sven Schnakenbeck/Dr. med. B. Obermeier 04.05.2015 Mühlenstr. 7a 23866 Nahe 04535/8830 04535/2162 praxis@docobermeier.de
154 12104 Gemeinschaftspraxis Dres. med. Schönewolf/Schult-Kronefeld Innere Medizin 25.03.2015 Ulzburger Str. 12 22850 Norderstedt 040/5294944 040/5240403
155 12145 Gemeinschaftspraxis Dres. med. Schröder/Günther/Venzke/Kalinski Pathologie- Hamburg 29.11.2016 Lademannbogen 61-63 22339 Hamburg 040/53805890 040/53805750 wolff@pathologie-hamburg.de
156 12088 Herrn Dr. med. Frank Schubert Radiologie 21.10.2013 Am Krankenhaus 5 24211 Preetz 04342/801284 04342/801285
157 12099 Gemeinschaftspraxis Dres. med. Schult-Kronefeld/Volk Innere Medizin 08.12.2014 Ulzburger Str. 12 22850 Norderstedt 040/5294944 0405240403 sk@lungenpraxis-norderstedt.de 0177/3613055
158 12041 Herrn Dr. med. Matthias MVZ Bad Doberan Schwarz Gynäkologe 27.10.1999 Am Markt 12d 18209 Bad Doberan 0381/82221 0381/82273 0381/83454 privat
159 12148 Herrn Dr. med. Oliver Seibert Orthopädie 31.05.2017 Frankfurter Str. 26 61118 Bad Vilbel 06101/83946 06101/12689 praxis@dr-seibert.de www.dr-seibert.de
160 12124 Herrn Dr. med. Thomas Siedschlag Allgemeinmedizin 08.02.2016 Am Landratspark 1 23795 Bad Segeberg 045512582 0455194812 praxis@orthopaedie-segeberg.de dr.thomas.siedschlag@onlinemed.de
161 12191 Frau Dr. Christina Bischof-Deichnik Sonnen-Apotheke 15.02.2019 Bergedorfer Straße 58-62 21502 Geesthacht
162 12089 Herrn Nephrologisches Zentrum Reinbek Dres. Staben/Meier/Ewald/Bassler Nephrologen 01.01.2011 Am Ladenzentrum 8 21465 Reinbek 040/7277860 040/72778615
163 12196 Herrn ~ Stadtklinik Frankenthal 30.07.2019 Elsa-Brändström-Str. 1 67227 Frankenthal
164 12027 Frau Ulrike Staffeld Innere Medizin 29.12.2009 Am Stadtrand 41 24536 Neumünster 04321/31800 04321/39628 uli.sta@gmx.de 0172/1618761 04321/31800
165 12115 Herrn PD Dr. med. Spilcke-Liss/ Streckenbach/Schindler/Spielhagen Radiologie 21.09.2015 Pappelallee 1 17489 Greifswald 03834/80440 03834/804441
166 12075 Herrn Sönke Sturm Allgemeinmedizin 25.07.2013 Hohe Str. 26 24806 Hohn 04335/92740 praxis@sturm-hohn.de 0162/4595544
167 12006 Gemeinschaftspraxis Dres. med. Stybalkowski Innere Medizin 14.08.2009 Krämerstraße 12 25813 Husum 04841/5007 04841/82881 04841/5007
168 12055 Herrn Andre Suchland Psychiatrie 27.05.2011 Erich-Oppenheimer-Str. 6F 02827 Görlitz 03581/3759569 03581/3759589
169 12078 Herrn Mike Thomsen Allgemeinmedizin 13.08.2013 Moltkestr. 12 24768 Rendsburg 04331/23411 04331/25574 Hausarztpraxis-Thomsen@gmx.de 01724123411 0176/32997993 (Griguhn)
170 12117 Herrn Dr. med. Th. Thormann / L. Wintermeyer Innere Medizin 02.11.2015 Preußerstr. 1-9 24105 Kiel 043130821 04313053523 ikad-kiel@arcor.de 017652174673 Dr Thormann 0431/314655
171 12136 Herrn Dr. med. Dieter Tischendorf Innere Medizin 21.06.2016 Battentor 23 36115 Hilders 06681/967970 06681/967971 dtisch@web.de
172 12199 Herrn Olaf Zander Trave Apotheke 17.02.2020 Chausseebaum 6 23795 Klein Rönnau 04551/82199 olaf_zander@t-online.de
173 12111 Gemeinschaftspraxis Dres. med. Truschnowitsch/Mittasch Orthopädie 02.07.2015 Emmerich-Josef-Str. 40 65929 Frankfurt-Höchst 069/302085 info@orthopaediezentrum-frankfurt.de
174 12112 Frau Dr. med. Kerstin Uphoff Kinder- u. Jugendmedizin 13.08.2015 Holzweg 8 61440 Oberursel/Ts. 06171/4650 06171/587098 bernd.uphoff@t-online.de 01623297946 069/71473959
175 12150 Herrn Verband VDEK 21.07.2017 Askanischer Platz 1 10963 Berlin
176 12201 Herrn Diagnosticum VISIORAD MVZ GmbH 30.04.2020 Fahltskamp 74 25421 Pinneberg 0410154420 info@visiorad.de bh-vr@ps-g.de
177 12129 Herrn Jörn Voigt Kinderarzt 15.03.2016 Röntgenstr. 26 64823 Groß Umstadt 06078/4433 06078/783681 joern.voigt@kinderarzt-voigt.de
178 12192 Frau Bärbel Hansen Vorstadt-Apotheke 15.02.2019 Schweriner Straße 51 23909 Ratzeburg
179 12057 Frau Kirsten Katharina Warnecke Kieferchirurgie 11.08.2011 Wismarsche Straße 132-134 19053 Schwerin 0385/3265050 0385/32650511 mkg-schwerinqgmx.de
180 12134 Herrn Dr. med. Markus Wegmann Kinder- und Jugendmedizin 19.05.2016 Deutschhausstr. 30 35037 Marburg 06421/961990 06421/8891198 911@drwegmann.de 015201712529
181 12107 Herrn Dr. med. Peter Weidemann 22.05.2015 Kurbrunnenstr. 22 52066 Aachen 0241/6052852 0241/6052851 weidemann@aol.com
182 12053 Herrn Orthopädikum Neuer Wall Dres. Westermann/Schwade Orthodädie 17.03.2011 Neuer Wall 36 20354 Hamburg 040/364714 040/364273 kontakt@Orthopaedikum-Neuer-Wall.de 0179/5465870
183 12056 Herrn Hr.Ebling Westpfalz-Klinikum GmbH EDV-Abteilung Hr.Ebling 29.07.2011 Hellmut-Hartert-Str. 1 67655 Kaiserslautern 0631/2031321
184 12059 Gemeinschaftspraxis Dres. med. Ulrich/Andreas Wiegers/Seifert 18.01.2012 Flensburger Str. 15 24837 Schleswig 04621/28024 04621/304811
185 12144 Herrn Dr. med. Jan Wierecky Hämatologie/Onkologie 16.11.2016 Hohe Weide 17b 20259 Hamburg 040/3571777500 040357177710 wierecky@onkologie-hamburg.de 0403571777526 (Frau Zaech)
186 12048 Gemeinschaftspraxis Dres. med. Winkler/ Burghoff/ v. Carnap 123456 13.12.2009 Waldstr. 13-15 Haus A 24939 Flensburg 0461/1683100 0461/16831029 FLUG9
187 12193 Herrn Karsten Werner Wolfs Apotheke 15.02.2019 Markt 28 25821 Bredstedt
188 12119 Gemeinschaftspraxis Dres. med. Onischke/ Zechlin/ Kellinghusen Innere Medizin 20.11.2015 Lütjenburger Str. 2 24238 Selent 04384/603 04384/604 clausonischke@web.de
189 12079 Herrn Dr. med. B. Zybura Allgemeinmedizin 16.08.2013 Paradeplatz 8 24768 Rendsburg 04331/21133 04331/29591 seidel-zybura@t-online.de 0152/34258424

View File

@@ -1,14 +0,0 @@
version: '3.8'
services:
web:
build: .
ports:
- "5001:5000"
volumes:
- .:/app
environment:
- FLASK_APP=app.py
- FLASK_ENV=development
- FLASK_DEBUG=1
command: flask run --host=0.0.0.0

View File

@@ -0,0 +1,13 @@
services:
web:
build: .
ports:
- "5001:5000"
volumes:
- ./data:/app/data
environment:
- FLASK_APP=app.py
- FLASK_ENV=production
- LOGIN_PASSWORD=changeme
- ALLOWED_IP_RANGES=213.178.68.218/29,192.168.0.0/24,192.168.177.0/24
command: flask run --host=0.0.0.0

View File

@@ -2,3 +2,4 @@ flask==3.0.2
pandas==2.2.1 pandas==2.2.1
numpy==1.26.4 numpy==1.26.4
python-dotenv==1.0.1 python-dotenv==1.0.1
requests==2.32.3

24
static/css/style.css Normal file
View File

@@ -0,0 +1,24 @@
.result-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 10px;
}
.result-tag {
padding: 4px 8px;
border-radius: 4px;
font-size: 0.9em;
font-weight: 500;
text-transform: uppercase;
}
.tag-medisoft {
background-color: #e3f2fd;
color: #1976d2;
}
.tag-mediconsult {
background-color: #f3e5f5;
color: #7b1fa2;
}

273
static/css/styles.css Normal file
View File

@@ -0,0 +1,273 @@
body {
min-height: 100vh;
display: flex;
flex-direction: column;
margin: 0;
padding: 0;
}
.main-content {
flex: 1 0 auto;
padding: 2rem 0;
margin-bottom: 4rem; /* Platz für die fixierte Fußzeile */
}
.search-container {
max-width: 800px;
margin: 0 auto;
}
.result-card {
margin-bottom: 1rem;
transition: all 0.3s ease;
}
.result-card:hover {
transform: translateY(-2px);
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
}
.loading {
display: none;
text-align: center;
margin: 2rem 0;
}
.phone-link, .email-link, .address-link, .customer-link {
text-decoration: none;
color: #0d6efd;
}
.phone-link:hover, .email-link:hover, .address-link:hover, .customer-link:hover {
text-decoration: underline;
}
.search-icon, .reset-icon {
position: absolute;
top: 50%;
transform: translateY(-50%);
color: #6c757d;
cursor: pointer;
display: none;
z-index: 10;
}
.reset-icon {
right: 10px;
}
.search-icon {
right: 35px;
}
.reset-icon.visible {
display: block;
}
.search-icon.visible {
display: block;
}
.customer-number {
color: #6c757d;
font-size: 0.9em;
}
.footer {
flex-shrink: 0;
text-align: center;
padding: 1rem;
background-color: #f8f9fa;
border-top: 1px solid #dee2e6;
width: 100%;
position: fixed;
bottom: 0;
left: 0;
z-index: 100;
}
.share-feedback {
position: fixed;
bottom: 20px;
right: 20px;
background: #28a745;
color: white;
padding: 8px 16px;
border-radius: 4px;
display: none;
animation: fadeOut 2s forwards;
z-index: 1000;
}
@keyframes fadeOut {
0% { opacity: 1; }
70% { opacity: 1; }
100% { opacity: 0; }
}
.card-actions {
display: flex;
justify-content: flex-end;
margin-top: 1rem;
padding-top: 1rem;
border-top: 1px solid #e9ecef;
}
.share-button {
padding: 0.5rem 1rem;
border-radius: 20px;
font-size: 0.9rem;
background-color: #0d6efd;
color: white;
border: none;
cursor: pointer;
transition: all 0.2s ease;
display: flex;
align-items: center;
gap: 0.5rem;
}
.share-button:hover {
background-color: #0b5ed7;
transform: translateY(-1px);
}
.share-button i {
font-size: 1rem;
}
.search-fields {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 1rem;
margin-bottom: 1rem;
}
.search-field {
position: relative;
}
.input-group {
position: relative;
}
.result-counts {
display: flex;
justify-content: center;
margin-bottom: 1rem;
padding: 0.5rem;
background-color: #f8f9fa;
border-radius: 4px;
}
.result-count {
background-color: #e9ecef;
padding: 4px 12px;
border-radius: 12px;
font-size: 0.9em;
color: #6c757d;
display: none;
}
.result-count.visible {
display: inline-block;
}
.location-pin {
color: #dc3545;
margin-left: 4px;
font-size: 1.2em;
}
.customer-card {
background: white;
border-radius: 8px;
padding: 1.5rem;
margin-bottom: 1.5rem;
box-shadow: 0 2px 4px rgba(0,0,0,0.05);
border-bottom: 1px solid #e9ecef;
}
.customer-card:last-child {
border-bottom: none;
}
.customer-info {
margin-bottom: 1rem;
}
.footer-content {
padding: 1rem;
background-color: #f8f9fa;
border-top: 1px solid #dee2e6;
width: 100%;
position: fixed;
bottom: 0;
left: 0;
z-index: 100;
}
.footer-link {
color: #0d6efd;
text-decoration: none;
}
.footer-link:hover {
text-decoration: underline;
}
.general-search {
max-width: 800px;
margin: 0 auto;
}
.general-search .input-group {
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.general-search .form-control {
height: 3.5rem;
font-size: 1.2rem;
padding: 0.75rem 1rem;
}
.general-search .search-icon,
.general-search .reset-icon {
font-size: 1.2rem;
padding: 0 1rem;
}
.search-options {
font-size: 0.9em;
color: #666;
}
.search-options .form-check {
margin-right: 1rem;
}
.search-options .form-check-input {
cursor: pointer;
}
.search-options .form-check-label {
cursor: pointer;
user-select: none;
}
.result-tag {
padding: 4px 8px;
border-radius: 4px;
font-size: 0.9em;
font-weight: 500;
text-transform: uppercase;
color: white;
}
.tag-medisoft {
background-color: #1976d2;
}
.tag-mediconsult {
background-color: #ff9800;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

View File

@@ -7,182 +7,89 @@
<link rel="icon" type="image/x-icon" href="{{ url_for('static', filename='favicon.ico') }}"> <link rel="icon" type="image/x-icon" href="{{ url_for('static', filename='favicon.ico') }}">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" rel="stylesheet"> <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" rel="stylesheet">
<style> <link href="{{ url_for('static', filename='css/styles.css') }}" rel="stylesheet">
body {
min-height: 100vh;
display: flex;
flex-direction: column;
margin: 0;
padding: 0;
}
.main-content {
flex: 1 0 auto;
padding: 2rem 0;
}
.search-container {
max-width: 800px;
margin: 0 auto;
}
.result-card {
margin-bottom: 1rem;
transition: all 0.3s ease;
}
.result-card:hover {
transform: translateY(-2px);
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
}
.loading {
display: none;
text-align: center;
margin: 2rem 0;
}
.phone-link, .email-link, .address-link, .customer-link {
text-decoration: none;
color: #0d6efd;
}
.phone-link:hover, .email-link:hover, .address-link:hover, .customer-link:hover {
text-decoration: underline;
}
.search-icon, .reset-icon {
position: absolute;
top: 50%;
transform: translateY(-50%);
color: #6c757d;
cursor: pointer;
display: none;
z-index: 10;
}
.reset-icon {
right: 10px;
}
.search-icon {
right: 35px;
}
.reset-icon.visible {
display: block;
}
.search-icon.visible {
display: block;
}
.customer-number {
color: #6c757d;
font-size: 0.9em;
}
.footer {
flex-shrink: 0;
text-align: center;
padding: 1rem;
background-color: #f8f9fa;
border-top: 1px solid #dee2e6;
width: 100%;
}
.share-feedback {
position: fixed;
bottom: 20px;
right: 20px;
background: #28a745;
color: white;
padding: 8px 16px;
border-radius: 4px;
display: none;
animation: fadeOut 2s forwards;
z-index: 1000;
}
@keyframes fadeOut {
0% { opacity: 1; }
70% { opacity: 1; }
100% { opacity: 0; }
}
.card-actions {
display: flex;
justify-content: flex-end;
margin-top: 1rem;
}
.share-button {
padding: 5px 10px;
border-radius: 15px;
font-size: 0.9em;
}
.search-fields {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 1rem;
margin-bottom: 1rem;
}
.search-field {
position: relative;
}
.input-group {
position: relative;
}
.result-counts {
display: flex;
justify-content: center;
margin-bottom: 1rem;
padding: 0.5rem;
background-color: #f8f9fa;
border-radius: 4px;
}
.result-count {
background-color: #e9ecef;
padding: 4px 12px;
border-radius: 12px;
font-size: 0.9em;
color: #6c757d;
display: none;
}
.result-count.visible {
display: inline-block;
}
.location-pin {
color: #dc3545;
margin-left: 4px;
font-size: 1.2em;
}
</style>
</head> </head>
<body> <body>
<div class="main-content"> <div class="main-content">
<div class="container search-container"> <div class="container">
<h1 class="text-center mb-4">medisoftware Kundensuche</h1> <div class="text-center mb-4">
<a href="https://medisoftware.de" target="_blank" rel="noopener noreferrer"><img src="{{ url_for('static', filename='medisoftware_logo_rb_200.png') }}" alt="medisoftware Logo" class="img-fluid" style="max-width: 200px;"></a>
</div>
<div class="search-container">
<h1 class="text-center mb-4">Kundensuche</h1>
<div class="input-group mb-4 position-relative"> <div class="general-search mb-4">
<input type="text" id="searchInput" class="form-control form-control-lg" <div class="input-group">
placeholder="Allgemeine Suche..."> <input type="text" id="q" class="form-control form-control-lg" placeholder="Allgemeine Suche" oninput="searchCustomers()">
<i class="fa-solid fa-xmark reset-icon" id="searchReset"></i> <i class="fas fa-times reset-icon" onclick="clearInput('q')"></i>
<span class="search-icon">🔍</span> <i class="fas fa-search search-icon"></i>
</div>
<div class="search-options mt-2">
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="searchOperator" id="searchOr" value="or" checked>
<label class="form-check-label" for="searchOr">ODER</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="searchOperator" id="searchAnd" value="and">
<label class="form-check-label" for="searchAnd">UND</label>
</div>
</div>
</div> </div>
<div class="search-fields"> <div class="search-fields">
<div class="search-field"> <div class="search-field">
<input type="text" id="nameInput" class="form-control" <div class="input-group">
placeholder="Name..."> <input type="text" id="nameInput" class="form-control" placeholder="Name" oninput="searchCustomers()">
<i class="fa-solid fa-xmark reset-icon" id="nameReset"></i> <i class="fas fa-times reset-icon" onclick="clearInput('nameInput')"></i>
<i class="fas fa-search search-icon"></i>
</div> </div>
<div class="search-field">
<input type="text" id="ortInput" class="form-control"
placeholder="Ort...">
<i class="fa-solid fa-xmark reset-icon" id="ortReset"></i>
</div> </div>
<div class="search-field"> <div class="search-field">
<input type="text" id="kundennummerInput" class="form-control" <div class="input-group">
placeholder="Kundennummer..."> <input type="text" id="ortInput" class="form-control" placeholder="Ort" oninput="searchCustomers()">
<i class="fa-solid fa-xmark reset-icon" id="kundennummerReset"></i> <i class="fas fa-times reset-icon" onclick="clearInput('ortInput')"></i>
<i class="fas fa-search search-icon"></i>
</div> </div>
<div class="search-field">
<input type="text" id="fachrichtungInput" class="form-control"
placeholder="Fachrichtung...">
<i class="fa-solid fa-xmark reset-icon" id="fachrichtungReset"></i>
</div> </div>
<div class="search-field"> <div class="search-field">
<input type="text" id="telefonInput" class="form-control" <div class="input-group">
placeholder="Telefon..."> <input type="text" id="nummerInput" class="form-control" placeholder="Kundennummer" oninput="searchCustomers()">
<i class="fa-solid fa-xmark reset-icon" id="telefonReset"></i> <i class="fas fa-times reset-icon" onclick="clearInput('nummerInput')"></i>
<i class="fas fa-search search-icon"></i>
</div>
</div>
<div class="search-field">
<div class="input-group">
<input type="text" id="plzInput" class="form-control" placeholder="PLZ" oninput="searchCustomers()">
<i class="fas fa-times reset-icon" onclick="clearInput('plzInput')"></i>
<i class="fas fa-search search-icon"></i>
</div>
</div>
<div class="search-field">
<div class="input-group">
<input type="text" id="fachrichtungInput" class="form-control" placeholder="Fachrichtung" oninput="searchCustomers()">
<i class="fas fa-times reset-icon" onclick="clearInput('fachrichtungInput')"></i>
<i class="fas fa-search search-icon"></i>
</div>
</div>
<div class="search-field">
<div class="input-group">
<select id="tagFilter" class="form-select" onchange="searchCustomers()">
<option value="medisoft" selected>MEDISOFT</option>
<option value="mediconsult">MEDICONSULT</option>
<option value="all">Alle</option>
</select>
</div>
</div> </div>
</div> </div>
<div class="result-counts"> <div class="result-counts">
<span id="generalCount" class="result-count"></span> <span id="resultCount" class="result-count"></span>
</div> </div>
<div id="loading" class="loading"> <div id="loading" class="loading">
@@ -191,18 +98,20 @@
</div> </div>
</div> </div>
<div id="results" class="mt-4"> <div id="results"></div>
<!-- Hier werden die Suchergebnisse angezeigt -->
</div> </div>
</div> </div>
</div> </div>
<div id="shareFeedback" class="share-feedback"> <div id="shareFeedback" class="share-feedback">
Link kopiert! Link in die Zwischenablage kopiert!
</div> </div>
<footer class="footer"> <footer class="footer">
<p class="mb-0">(c) 2025 <a href="https://medisoftware.de" target="_blank" rel="noopener noreferrer" class="text-decoration-none">medisoftware</a></p> <div class="footer-content">
Proudly made with ❤️ and 🍺 by <a href="https://www.medisoftware.de" target="_blank" class="footer-link">medisoftware</a>
<div style="font-size: 0.8em;">Version: v1.2.6</div>
</div>
</footer> </footer>
<script> <script>
@@ -211,9 +120,26 @@
function createPhoneLink(phone) { function createPhoneLink(phone) {
if (!phone) return 'N/A'; if (!phone) return 'N/A';
const cleaned = phone.replace(/\D/g, '');
const telLink = '0' + cleaned; const clientIP = '{{ request.headers.get("X-Forwarded-For", request.remote_addr) }}';
return `<a href="tel:${telLink}" class="phone-link">${phone}</a>`; const allowedIPRanges = '{{ allowed_ip_ranges }}'.split(',');
// Überprüfen, ob die Client-IP in einem der erlaubten Bereiche liegt
const isAllowed = allowedIPRanges.some(range => isIPInSubnet(clientIP, range.trim()));
// Entferne alle nicht-numerischen Zeichen
let cleanNumber = phone.replace(/\D/g, '');
// Formatiere die Nummer
let formattedNumber = cleanNumber;
if (cleanNumber.length === 11) {
formattedNumber = cleanNumber.replace(/(\d{4})(\d{7})/, '$1-$2');
} else if (cleanNumber.length === 10) {
formattedNumber = cleanNumber.replace(/(\d{3})(\d{7})/, '$1-$2');
}
// Erstelle den Link
return `<a href="tel:${cleanNumber}" class="phone-link">${formattedNumber}</a>`;
} }
function createEmailLink(email) { function createEmailLink(email) {
@@ -221,23 +147,66 @@
return `<a href="mailto:${email}" class="email-link">${email}</a>`; return `<a href="mailto:${email}" class="email-link">${email}</a>`;
} }
function highlightText(text, searchTerm) {
if (!searchTerm) return text;
const regex = new RegExp(`(${searchTerm})`, 'gi');
return text.replace(regex, '<mark>$1</mark>');
}
function createAddressLink(street, plz, city) { function createAddressLink(street, plz, city) {
if (!street || !plz || !city) return 'N/A'; if (!street || !plz || !city) return 'N/A';
const address = `${street}, ${plz} ${city}`; const address = `${street}, ${plz} ${city}`;
const searchQuery = encodeURIComponent(address); const searchQuery = encodeURIComponent(address);
return `${address} const routeQuery = encodeURIComponent(address);
const clientIP = '{{ request.headers.get("X-Forwarded-For", request.remote_addr) }}';
return `<span class="address-text">${address}</span>
<a href="https://www.google.com/maps/search/?api=1&query=${searchQuery}" <a href="https://www.google.com/maps/search/?api=1&query=${searchQuery}"
class="address-link" target="_blank" rel="noopener noreferrer"> class="address-link" target="_blank" rel="noopener noreferrer">
<i class="fa-solid fa-location-pin location-pin"></i> <i class="fa-solid fa-location-pin location-pin"></i>
</a>
<a href="https://www.google.com/maps/dir/?api=1&destination=${routeQuery}"
class="route-link" target="_blank" rel="noopener noreferrer">
<i class="fa-solid fa-car route-pin"></i>
</a>`; </a>`;
} }
function createCustomerLink(customerNumber) { function adjustCustomerNumber(number) {
if (!customerNumber) return 'N/A'; return number - 12000;
return `<a href="medisw:openkkbefe/P${customerNumber}?NetGrp=4" }
class="customer-link" target="_blank" rel="noopener noreferrer">
${customerNumber} function isIPInSubnet(ip, subnet) {
</a>`; // Teile die IP und das Subnetz in ihre Komponenten
const [subnetIP, bits] = subnet.split('/');
const ipParts = ip.split('.').map(Number);
const subnetParts = subnetIP.split('.').map(Number);
// Konvertiere IPs in 32-bit Zahlen
const ipNum = (ipParts[0] << 24) | (ipParts[1] << 16) | (ipParts[2] << 8) | ipParts[3];
const subnetNum = (subnetParts[0] << 24) | (subnetParts[1] << 16) | (subnetParts[2] << 8) | subnetParts[3];
// Erstelle die Subnetzmaske
const mask = ~((1 << (32 - bits)) - 1);
// Prüfe, ob die IP im Subnetz liegt
return (ipNum & mask) === (subnetNum & mask);
}
function createCustomerLink(nummer) {
const clientIP = '{{ request.headers.get("X-Forwarded-For", request.remote_addr) }}';
const allowedIPRanges = '{{ allowed_ip_ranges }}'.split(',');
// Überprüfe, ob die Client-IP in einem der erlaubten Bereiche liegt
const isAllowed = allowedIPRanges.some(range => {
const trimmedRange = range.trim();
return isIPInSubnet(clientIP, trimmedRange);
});
const adjustedNumber = adjustCustomerNumber(nummer);
if (isAllowed) {
return `<a href="medisw:openkkbefe/P${adjustedNumber}?NetGrp=4" class="customer-link">${nummer}</a>`;
} else {
return nummer;
}
} }
function showCopyFeedback() { function showCopyFeedback() {
@@ -258,124 +227,120 @@
await navigator.clipboard.writeText(url.toString()); await navigator.clipboard.writeText(url.toString());
showCopyFeedback(); showCopyFeedback();
} catch (err) { } catch (err) {
console.error('Fehler beim Kopieren:', err); // Fehlerbehandlung ohne console.log
} }
} }
function updateResultCounts() { function updateResultCounts() {
// Nur Gesamtzahl anzeigen // Nur Gesamtzahl anzeigen
const generalCount = lastResults.length; const generalCount = lastResults.length;
document.getElementById('generalCount').textContent = document.getElementById('resultCount').textContent =
generalCount > 0 ? `${generalCount} Treffer gefunden` : ''; generalCount > 0 ? `${generalCount} Treffer gefunden` : '';
document.getElementById('generalCount').classList.toggle('visible', generalCount > 0); document.getElementById('resultCount').classList.toggle('visible', generalCount > 0);
}
function displayResults(results) {
const resultsDiv = document.getElementById('results');
const resultCount = document.getElementById('resultCount');
if (results.length === 0) {
resultsDiv.innerHTML = '<p>Keine Ergebnisse gefunden.</p>';
resultCount.textContent = '0 Ergebnisse';
return;
}
resultCount.textContent = `${results.length} Ergebnisse`;
const resultsList = results.map(customer => `
<div class="card mb-3">
<div class="card-body">
<div class="d-flex justify-content-between align-items-start">
<h5 class="card-title">${customer.name}</h5>
<button class="btn btn-sm btn-outline-primary" onclick="copyCustomerLink('${customer.nummer}')">
<i class="fas fa-share-alt"></i> Teilen
</button>
</div>
<div class="card-text">
<p><strong>Nummer:</strong> ${customer.nummer}</p>
<p><strong>Adresse:</strong> ${customer.strasse}, ${customer.plz} ${customer.ort}</p>
<p><strong>Telefon:</strong> ${createPhoneLink(customer.telefon)}</p>
<p><strong>Mobil:</strong> ${createPhoneLink(customer.mobil)}</p>
<p><strong>E-Mail:</strong> ${createEmailLink(customer.email)}</p>
<p><strong>Fachrichtung:</strong> ${customer.fachrichtung}</p>
${customer.tags && customer.tags.length > 0 ? `
<p><strong>Tags:</strong>
${customer.tags.map(tag => `<span class="badge bg-primary me-1">${tag}</span>`).join('')}
</p>
` : ''}
</div>
</div>
</div>
`).join('');
resultsDiv.innerHTML = resultsList;
} }
function searchCustomers() { function searchCustomers() {
const q = document.getElementById('q').value;
const name = document.getElementById('nameInput').value; const name = document.getElementById('nameInput').value;
const ort = document.getElementById('ortInput').value; const ort = document.getElementById('ortInput').value;
const kundennummer = document.getElementById('kundennummerInput').value; const nummer = document.getElementById('nummerInput').value;
const plz = document.getElementById('plzInput').value;
const fachrichtung = document.getElementById('fachrichtungInput').value; const fachrichtung = document.getElementById('fachrichtungInput').value;
const telefon = document.getElementById('telefonInput').value; const searchOperator = document.querySelector('input[name="searchOperator"]:checked').value;
const query = document.getElementById('searchInput').value; const selectedTag = document.getElementById('tagFilter').value;
// Prüfe, ob mindestens ein Suchfeld ausgefüllt ist // Zeige das Lade-Icon
if (!name && !ort && !kundennummer && !fachrichtung && !telefon && !query) {
document.getElementById('results').innerHTML = '';
lastResults = [];
updateResultCounts();
return;
}
// Lade-Animation anzeigen
document.getElementById('loading').style.display = 'block'; document.getElementById('loading').style.display = 'block';
document.getElementById('results').innerHTML = '';
// URL-Parameter erstellen // Baue die Suchanfrage
const params = new URLSearchParams(); const params = new URLSearchParams();
if (q) params.append('q', q);
if (name) params.append('name', name); if (name) params.append('name', name);
if (ort) params.append('ort', ort); if (ort) params.append('ort', ort);
if (kundennummer) params.append('kundennummer', kundennummer); if (nummer) params.append('nummer', nummer);
if (plz) params.append('plz', plz);
if (fachrichtung) params.append('fachrichtung', fachrichtung); if (fachrichtung) params.append('fachrichtung', fachrichtung);
if (telefon) params.append('telefon', telefon); if (searchOperator) params.append('operator', searchOperator);
if (query) params.append('q', query); if (selectedTag) params.append('tag', selectedTag);
fetch(`/search?${params.toString()}`) // Führe die Suche durch
.then(response => { fetch('/search?' + params.toString())
if (!response.ok) { .then(response => response.json())
return response.json().then(data => {
throw new Error(data.error || 'Ein Fehler ist aufgetreten');
});
}
return response.json();
})
.then(data => { .then(data => {
const resultsDiv = document.getElementById('results'); // Verstecke das Lade-Icon
resultsDiv.innerHTML = ''; document.getElementById('loading').style.display = 'none';
if (data.length === 0) { if (data.error) {
resultsDiv.innerHTML = '<div class="alert alert-info">Keine Ergebnisse gefunden.</div>';
lastResults = [];
updateResultCounts();
return; return;
} }
data.forEach(customer => {
const card = document.createElement('div');
card.className = 'card result-card';
card.innerHTML = `
<div class="card-body">
<h5 class="card-title">
${customer.Vorname} ${customer.Nachname}
<span class="customer-number ms-2">(Kunde: ${createCustomerLink(customer.Nummer)})</span>
</h5>
<p class="card-text">
<strong>Fachrichtung:</strong> ${customer.Fachrichtung || 'N/A'}<br>
<strong>Adresse:</strong> ${createAddressLink(customer.Strasse, customer.PLZ, customer.Ort)}<br>
<strong>Telefon:</strong> ${createPhoneLink(customer.Tel)}<br>
<strong>E-Mail:</strong> ${createEmailLink(customer.mail)}
</p>
<div class="card-actions">
<button class="btn btn-outline-primary share-button" onclick="copyCustomerLink('${customer.Nummer}')">
🔗 Teilen
</button>
</div>
</div>
`;
resultsDiv.appendChild(card);
});
lastResults = data; lastResults = data;
updateResultCounts(); updateResultCounts();
displayResults(data);
}) })
.catch(error => { .catch(error => {
console.error('Fehler:', error);
document.getElementById('results').innerHTML =
`<div class="alert alert-danger">${error.message}</div>`;
lastResults = [];
updateResultCounts();
})
.finally(() => {
document.getElementById('loading').style.display = 'none'; document.getElementById('loading').style.display = 'none';
}); });
} }
// Event-Listener für die Live-Suche // Event-Listener für die Live-Suche
const searchInputs = [ const searchInputs = [
document.getElementById('q'),
document.getElementById('nameInput'), document.getElementById('nameInput'),
document.getElementById('ortInput'), document.getElementById('ortInput'),
document.getElementById('kundennummerInput'), document.getElementById('nummerInput'),
document.getElementById('fachrichtungInput'), document.getElementById('plzInput'),
document.getElementById('telefonInput'), document.getElementById('fachrichtungInput')
document.getElementById('searchInput')
]; ];
const resetIcons = [ const resetIcons = [
document.getElementById('nameReset'), document.querySelector('.reset-icon[onclick="clearInput(\'q\')"]'),
document.getElementById('ortReset'), document.querySelector('.reset-icon[onclick="clearInput(\'nameInput\')"]'),
document.getElementById('kundennummerReset'), document.querySelector('.reset-icon[onclick="clearInput(\'ortInput\')"]'),
document.getElementById('fachrichtungReset'), document.querySelector('.reset-icon[onclick="clearInput(\'nummerInput\')"]'),
document.getElementById('telefonReset'), document.querySelector('.reset-icon[onclick="clearInput(\'plzInput\')"]'),
document.getElementById('searchReset') document.querySelector('.reset-icon[onclick="clearInput(\'fachrichtungInput\')"]')
]; ];
searchInputs.forEach((input, index) => { searchInputs.forEach((input, index) => {
@@ -400,18 +365,14 @@
const name = urlParams.get('name'); const name = urlParams.get('name');
const ort = urlParams.get('ort'); const ort = urlParams.get('ort');
const kundennummer = urlParams.get('kundennummer'); const kundennummer = urlParams.get('kundennummer');
const fachrichtung = urlParams.get('fachrichtung'); const plz = urlParams.get('plz');
const telefon = urlParams.get('telefon');
const query = urlParams.get('q');
if (name) document.getElementById('nameInput').value = name; if (name) document.getElementById('nameInput').value = name;
if (ort) document.getElementById('ortInput').value = ort; if (ort) document.getElementById('ortInput').value = ort;
if (kundennummer) document.getElementById('kundennummerInput').value = kundennummer; if (kundennummer) document.getElementById('nummerInput').value = kundennummer;
if (fachrichtung) document.getElementById('fachrichtungInput').value = fachrichtung; if (plz) document.getElementById('plzInput').value = plz;
if (telefon) document.getElementById('telefonInput').value = telefon;
if (query) document.getElementById('searchInput').value = query;
if (name || ort || kundennummer || fachrichtung || telefon || query) { if (name || ort || kundennummer || plz) {
searchCustomers(); searchCustomers();
} }
}); });

60
templates/login.html Normal file
View File

@@ -0,0 +1,60 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>medisoftware Kundensuche</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
body {
min-height: 100vh;
display: flex;
flex-direction: column;
margin: 0;
padding: 0;
}
.main-content {
flex: 1 0 auto;
padding: 2rem 0;
margin-bottom: 4rem; /* Platz für die fixierte Fußzeile */
}
.footer {
flex-shrink: 0;
text-align: center;
padding: 1rem;
background-color: #f8f9fa;
border-top: 1px solid #dee2e6;
width: 100%;
position: fixed;
bottom: 0;
left: 0;
z-index: 100;
}
</style>
</head>
<body>
<div class="container mt-5">
<div class="text-center mb-4">
<img src="{{ url_for('static', filename='medisoftware_logo_rb_200.png') }}" alt="medisoftware Logo" class="img-fluid" style="max-width: 200px;">
</div>
<div class="row justify-content-center">
<div class="col-md-4">
<h2 class="text-center">Login</h2>
<form method="POST" action="/login">
<div class="mb-3">
<label for="password" class="form-label">Passwort</label>
<input type="password" class="form-control" id="password" name="password" required>
</div>
<button type="submit" class="btn btn-primary w-100">Einloggen</button>
</form>
</div>
</div>
</div>
<footer class="footer">
<div class="footer-content">
Proudly made with ❤️ and 🍺 by <a href="https://www.medisoftware.de" target="_blank" class="footer-link">medisoftware</a>
<div style="font-size: 0.8em;">Version: v1.2.3</div>
</div>
</footer>
</body>
</html>