RPM-App
Mit AI-Agenten erstellen
RPM App Backend

Remote-Patientenüberwachungs-App Backend-Vorlage
Sicheren Zugang zu Patientendaten von wohnbasierten IoT-Medizinprodukten für effektive Überwachung bereitstellen

Ein produktionsbereites RPM App Backend auf Back4app für sicheren Zugang zu Patientendaten von IoT-Geräten, einschließlich Überwachungsprotokollen und Benutzer-Nachrichten, mit einem zentralisierten Audit-Log. Es enthält ein ER-Diagramm, Datenwörterbuch, JSON-Schema, API-Spielplatz und einen AI Agent Prompt für schnelles Bootstrapping.

Wichtigste Erkenntnisse

Liefern Sie ein Backend für die Fernüberwachung von Patienten mit sicheren Zugriffskontrollen, Abruf von IoT-Daten und Überwachungsprotokollen, damit Ihr Produktteam sich auf Benutzererfahrung und Compliance konzentrieren kann.

  1. IoT-erster DatenmodellHalten Sie die Identität des Patienten, Gerätedaten und Überwachungsprotokolle deutlich getrennt, aber für Authentifizierung und Autorisierung verknüpft.
  2. Sichere NachrichtenübermittlungThreaded-Nachrichten zwischen Patienten und Kliniken mit klaren Lesebestätigungen und Aufbewahrungskontrollen.
  3. Versionierte GerätedatenSpeichern Sie Gerätedaten mit Versionsmetadaten, um sicherzustellen, dass aktualisierte Messwerte und Benachrichtigungen effektiv verfolgt werden.
  4. Protokollierung des Lebenszyklus überwachenVerwalten Sie Überwachungsprotokolle effizient, indem Sie Benutzerinteraktionen und den Status von Geräten im Laufe der Zeit dokumentieren.
  5. Compliance-freundliche PrüfprotokollierungDas zentralisierte AuditLog erfasst sensible Ereignisse zur Überprüfung und Einhaltung der Gesundheitsvorschriften.

Was ist die RPM App Backend-Vorlage?

Back4app ist ein Backend-as-a-Service (BaaS) für eine schnelle Bereitstellung. Die RPM App Backend-Vorlage bietet ein vorgefertigtes Schema für Patientenprofile, IoT-Gerätedaten, Überwachungsprotokolle, sichere Nachrichten und Audit-Protokolle. Verbinden Sie Ihr bevorzugtes Frontend (React, Flutter, Next.js und mehr) und liefern Sie schneller.

Am besten für:

Apps zur Fernüberwachung von PatientenZugriff auf IoT-GerätedatenSichere Nachrichtenübermittlung für KlinikerPatientenüberwachungTeams, die konforme Prototypen im Gesundheitswesen entwickeln

Übersicht

RPM-Apps erfordern starke Datengrenzen, auditierbare Transaktionen und zuverlässige Lieferung sensibler Patienteninformationen, die von IoT-Geräten gesammelt wurden.

Diese Vorlage definiert die Klassen PatientProfile, DeviceData, MonitoringLog, UserMessage und AuditLog mit Eigentums- und rollenbasierten Regeln, damit Teams RPM-Apps schnell und sicher implementieren können.

Zentrale RPM-App-Funktionen

Jede Technologiekarte in diesem Hub nutzt dasselbe RPM-App-Backend-Schema mit PatientProfile, DeviceData, MonitoringLog, UserMessage und AuditLog.

Patientenprofil & Authentifizierung

Patientenprofil speichert Identität, Kontaktdaten und Präferenzen mit einem Link zum authentifizierten Benutzer.

Versionierte Gerätedaten

Gerätedaten speichern Gerätetyp, Rohdaten, erfasst am, Version und Benutzerherkunft.

Verwaltung von Überwachungsprotokollen

MonitoringLog verfolgt Patienteninteraktionen, die chronologisch mit Status dokumentiert sind.

Sichere Kommunikation zwischen Kliniker und Patient

UserMessage erleichtert den Austausch zwischen Providers und Patienten mit Unterstützung für Anhänge und Zustell-/Lesestatus.

Zentralisierte Auditprotokolle

AuditLog erfasst Einblicke in die von Benutzern durchgeführten Aktionen und stellt so eine klare Verantwortlichkeit sicher.

Warum Ihr RPM-App-Backend mit Back4app erstellen?

Back4app verwaltet Backend-Grundlagen—Sicherheit, Datenpersistenz, APIs und Echtzeit-Updates—damit Sie Benutzererfahrung, Datenschutz und klinische Integration priorisieren können.

  • Sichere Übertragung von Patientendaten: Integrierte Authentifizierung und Zugriffskontrollen ermöglichen es Ihnen, die Sichtbarkeit für bestimmte Benutzer für jede Geräteanzeige, Überwachungsprotokoll oder Nachricht einzuschränken.
  • Prüfung und Herkunftsnachverfolgung: AuditLog protokolliert, wer sensible Daten aufgerufen, veröffentlicht oder geändert hat, um die Einhaltung von Vorschriften sicherzustellen.
  • Messaging und Echtzeit-Benachrichtigungen: Threaded-Nachrichten, Anhänge und optionale Live-Updates erleichtern die reibungslose Kommunikation zwischen Patienten und Gesundheits-Providers.

Setzen Sie schnell ein sicheres RPM-App-Backend ein und konzentrieren Sie sich darauf, klinische Arbeitsabläufe statt Backend-Komplexitäten zu iterieren.

Kernvorteile

Ein RPM-App-Backend, das Datenschutz, Herkunft und agile Bereitstellung priorisiert.

Schnellere Patientenerfahrung

Versenden Sie schnell Ansichten von Gerätedaten, Überwachungsfunktionen und sichere Nachrichten, indem Sie eine vorvalidierte Backend-Struktur nutzen.

Starke Datenherkunft

Halten Sie Versionen für Gerätedaten und Protokollierung ein, damit klinische Maßnahmen nachvollziehbar sind.

Granulare Berechtigungen

Schützen Sie sensible Aufzeichnungen mit rollenbasiertem Zugriffskontrolle und sorgen Sie dafür, dass nur autorisiertes Personal spezifische Daten anzeigen kann.

Integrierte Nachrichtenübermittlung

Threaded Messaging und Echtzeit-Updates verbessern die Kommunikation zwischen Patienten und Gesundheitsdienstleistern.

Compliance-fähiges Logging

Zentralisiertes AuditLog bewahrt detaillierte Aufzeichnungen für die Gesundheits-Compliance und Business Intelligence.

KI-unterstützte Erstkonfiguration

Starten Sie die Entwicklung mit einem kuratierten KI-Agenten-Prompt, um Schema, Berechtigungen und grundlegenden Integrationscode zu erstellen.

Bereit, eine sichere RPM-App zu erstellen?

Erlauben Sie dem Back4app KI-Agenten, Ihr RPM-App-Backend zu erstellen und Patientenprofile, Gerätedaten, Überwachungsprotokolle und Audit-Protokolle aus einem Prompt zu generieren.

Kostenlos starten — 50 AI-Agent-Prompts/Monat, keine Kreditkarte erforderlich

Technologischer Stack

Alles enthalten in dieser RPM-App-Backend-Vorlage.

Frontend
13+ Technologien
Backend
Back4app
Datenbank
MongoDB
Auth
Integrierte Authentifizierung + Sitzungen
API
REST und GraphQL
Echtzeit
Live Queries

ER-Diagramm

Entitätsbeziehungsmodell für das Backend-Schema der RPM-App.

Diagrammquelle anzeigen
Mermaid
erDiagram
    PatientProfile ||--o{ LabResult : "has"
    PatientProfile ||--o{ TreatmentPlan : "receives"
    PatientProfile ||--o{ Message : "context for"
    PatientProfile ||--o{ Appointment : "scheduled in"
    _User ||--o{ Message : "sends/receives"
    _User ||--o{ TreatmentPlan : "authors"
    _User ||--o{ Appointment : "provides"

    PatientProfile {
        String objectId PK
        Pointer user FK
        String medicalRecordNumber
        String displayName
        Date dateOfBirth
        String primaryClinic
        Boolean isActive
        Date createdAt
        Date updatedAt
    }

    LabResult {
        String objectId PK
        Pointer patient FK
        Pointer orderedBy FK
        String testCode
        String testName
        String resultValue
        String units
        String referenceRange
        String status
        Date publishedAt
        Array attachments
        Date createdAt
        Date updatedAt
    }

    TreatmentPlan {
        String objectId PK
        Pointer patient FK
        Pointer createdBy FK
        String summary
        String details
        String status
        Date startDate
        Date endDate
        Date createdAt
        Date updatedAt
    }

    Message {
        String objectId PK
        String conversationId
        Pointer from FK
        Pointer to FK
        Pointer patient FK
        String body
        Array attachments
        Boolean isRead
        Date sentAt
        Date createdAt
        Date updatedAt
    }

    Appointment {
        String objectId PK
        Pointer patient FK
        Pointer provider FK
        Date startAt
        Date endAt
        String location
        String status
        String reason
        Date createdAt
        Date updatedAt
    }

    AuditLog {
        String objectId PK
        Pointer actor FK
        String entityType
        String entityId
        String action
        String summary
        Object metadata
        Date createdAt
        Date updatedAt
    }

Integrationsfluss

Typischer Ablauf zur Laufzeit für Authentifizierung, Datenabruf, Überwachungsaktualisierungen und Messaging.

Diagrammquelle anzeigen
Mermaid
sequenceDiagram
  participant User as Patient
  participant App as RPM Dashboard App
  participant Clinician
  participant Back4app as Back4app Cloud

  User->>App: Sign in with email or SSO
  App->>Back4app: POST /login (credentials/SSO token)
  Back4app-->>App: Return Session Token + Patient context

  User->>App: Open Dashboard (profile & recent labs)
  App->>Back4app: GET /classes/PatientProfile?where={"user":Pointer("_User", "u123")}
  Back4app-->>App: PatientProfile object
  App->>Back4app: GET /classes/LabResult?where={"patient":Pointer("PatientProfile","p123")}&order=-publishedAt
  Back4app-->>App: List of LabResult (latest first)

  User->>App: View active Treatment Plan
  App->>Back4app: GET /classes/TreatmentPlan?where={"patient":Pointer("PatientProfile","p123"),"status":"active"}
  Back4app-->>App: TreatmentPlan object

  User->>App: Send secure message to clinician
  App->>Back4app: POST /classes/Message (conversationId, body, to: Pointer(_User, clinicianId))
  Back4app-->>App: Message objectId

  Back4app-->>App: LiveQuery -> new Message or LabResult update
  App-->>User: Real-time notification (new message / result available)

  Clinician->>Back4app: Update LabResult (finalize)
  Back4app-->>App: LiveQuery event -> App fetches updated LabResult
  App-->>User: Alert: "New lab result available"

Datenlexikon

Vollständige Feldreferenz für jede Klasse im RPM-App-Schema.

FeldTypBeschreibungErforderlich
objectIdStringAuto-generated unique identifierAuto
userPointer<_User>Linked Back4app user account
medicalRecordNumberStringUnique MRN for the patient
displayNameStringPatient full name shown in UI
dateOfBirthDatePatient date of birth
primaryClinicStringPrimary clinic or provider group
isActiveBooleanActive portal access flag
createdAtDateAuto-generated creation timestampAuto
updatedAtDateAuto-generated last-update timestampAuto

9 Felder in PatientProfile

Sicherheit und Berechtigungen

Wie ACL, CLP und Verschlüsselungsstrategien Patientendaten, IoT-Daten, Nachrichten und Auditprotokolle sichern.

Rollenbasierter Zugriff und Eigentum

Wenden Sie ACLs an, damit Patienten ihre eigenen Gerätedaten und Protokolle einsehen können, während Kliniker Daten sehen können, die für ihre zugewiesenen Patienten relevant sind; CLPs verhindern unbefugte Aktionen auf Klassen.

Verschlüsselte Payloads und Anhänge

Speichern Sie sensible Daten sicher mit Verschlüsselung und nutzen Sie signierte URLs für den sicheren Zugriff auf große Dateien.

Nur-Anhang-Protokolle

Protokollieren Sie AuditLog-Ereignisse aus serverseitigen Funktionen, um historische Compliance-Daten vor Manipulation zu schützen.

Schema (JSON)

Rohe JSON-Schemadefinition, bereit zum Kopieren in Back4app oder als Implementierungsreferenz zu verwenden.

JSON
{
  "classes": [
    {
      "className": "PatientProfile",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "user": {
          "type": "Pointer",
          "required": true,
          "targetClass": "_User"
        },
        "medicalRecordNumber": {
          "type": "String",
          "required": true
        },
        "displayName": {
          "type": "String",
          "required": true
        },
        "dateOfBirth": {
          "type": "Date",
          "required": false
        },
        "primaryClinic": {
          "type": "String",
          "required": false
        },
        "isActive": {
          "type": "Boolean",
          "required": true
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "LabResult",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "patient": {
          "type": "Pointer",
          "required": true,
          "targetClass": "PatientProfile"
        },
        "orderedBy": {
          "type": "Pointer",
          "required": false,
          "targetClass": "_User"
        },
        "testCode": {
          "type": "String",
          "required": false
        },
        "testName": {
          "type": "String",
          "required": true
        },
        "resultValue": {
          "type": "String",
          "required": false
        },
        "units": {
          "type": "String",
          "required": false
        },
        "referenceRange": {
          "type": "String",
          "required": false
        },
        "status": {
          "type": "String",
          "required": true
        },
        "publishedAt": {
          "type": "Date",
          "required": false
        },
        "attachments": {
          "type": "Array",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "TreatmentPlan",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "patient": {
          "type": "Pointer",
          "required": true,
          "targetClass": "PatientProfile"
        },
        "createdBy": {
          "type": "Pointer",
          "required": true,
          "targetClass": "_User"
        },
        "summary": {
          "type": "String",
          "required": true
        },
        "details": {
          "type": "String",
          "required": false
        },
        "status": {
          "type": "String",
          "required": true
        },
        "startDate": {
          "type": "Date",
          "required": false
        },
        "endDate": {
          "type": "Date",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Message",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "conversationId": {
          "type": "String",
          "required": true
        },
        "from": {
          "type": "Pointer",
          "required": true,
          "targetClass": "_User"
        },
        "to": {
          "type": "Pointer",
          "required": true,
          "targetClass": "_User"
        },
        "patient": {
          "type": "Pointer",
          "required": true,
          "targetClass": "PatientProfile"
        },
        "body": {
          "type": "String",
          "required": true
        },
        "attachments": {
          "type": "Array",
          "required": false
        },
        "isRead": {
          "type": "Boolean",
          "required": true
        },
        "sentAt": {
          "type": "Date",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Appointment",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "patient": {
          "type": "Pointer",
          "required": true,
          "targetClass": "PatientProfile"
        },
        "provider": {
          "type": "Pointer",
          "required": true,
          "targetClass": "_User"
        },
        "startAt": {
          "type": "Date",
          "required": true
        },
        "endAt": {
          "type": "Date",
          "required": true
        },
        "location": {
          "type": "String",
          "required": false
        },
        "status": {
          "type": "String",
          "required": true
        },
        "reason": {
          "type": "String",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "AuditLog",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "actor": {
          "type": "Pointer",
          "required": true,
          "targetClass": "_User"
        },
        "entityType": {
          "type": "String",
          "required": true
        },
        "entityId": {
          "type": "String",
          "required": true
        },
        "action": {
          "type": "String",
          "required": true
        },
        "summary": {
          "type": "String",
          "required": true
        },
        "metadata": {
          "type": "Object",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    }
  ]
}

Mit AI-Agent bauen

Verwenden Sie den Back4app AI-Agenten, um eine RPM-App aus dieser Vorlage zu generieren, einschließlich Backend-Schema, Zugriffssteuerungen und Starter-Frontend-Integration.

Back4app KI-Agent
Bereit zum Erstellen
Erstelle ein RPM-App-Backend auf Back4app mit diesem Schema und Verhalten.

Schema:
1. PatientProfile: user (Zeiger auf User, erforderlich), fullName (String, erforderlich), dob (Datum, optional), contact (Objekt), medicalRecordNumber (String, erforderlich, einzigartig); objectId, createdAt, updatedAt.
2. DeviceData: patient (Zeiger auf PatientProfile, erforderlich), deviceType (String), dataPayload (Objekt), recordedAt (Datum, erforderlich), version (Zahl, Standard 1); objectId, createdAt, updatedAt.
3. MonitoringLog: patient (Zeiger auf PatientProfile, erforderlich), data (Zeiger auf DeviceData, erforderlich), timestamp (Datum, erforderlich), status (String, erforderlich); objectId, createdAt, updatedAt.
4. UserMessage: sender (Zeiger auf User, erforderlich), recipient (Zeiger auf User, erforderlich), threadId (String, erforderlich), body (String), attachments (Array von Dateien), status (String: gesendet, zugestellt, gelesen), sentAt (Datum); objectId, createdAt, updatedAt.
5. AuditLog: actor (Zeiger auf User, erforderlich), action (String, erforderlich), entityType (String, erforderlich), entityId (String, erforderlich), payload (Objekt, optional), createdAt (Datum); objectId, createdAt, updatedAt.

Sicherheit:
- Erzwinge ACLs, damit Patienten nur ihre DeviceData und MonitoringLog-Einträge lesen. Klinikern sehen zugewiesene Patienten. Verwende Cloud Code für empfindliche Übergänge und um AuditLog-Einträge serverseitig zu schreiben. Sichere deine Daten mit Verschlüsselung.

Auth:
- Unterstützung der Anmeldung für Patienten und Klinikern; Rollenverteilung; sichere Anmeldung und Sitzungsmanagement.

Verhalten:
- Patient meldet sich an, holt sich die neuesten DeviceData und MonitoringLogs, sendet Nachrichten an Kliniker-Threads und erhält Benachrichtigungen. Klinikern veröffentlicht Gerätedaten und Überwachungsprotokolle; das System schreibt AuditLog-Einträge für Veröffentlichungsaktionen.

Liefern:
- Back4app App mit Schema, CLPs, ACLs, Cloud Code-Hooks für Veröffentlichung und Audit-Protokollierung sowie Starter-Frontend-Integration für Patienten- und Klinikansichten.

Drücke den Button unten, um den Agenten mit diesem vorab ausgefüllten Template-Prompt zu öffnen.

Dies ist der Basis-Prompt ohne Technologie-Suffix. Du kannst den generierten Frontend-Stack anschließend anpassen.

In Minuten bereitstellen50 kostenlose Prompts / MonatKeine Kreditkarte erforderlich

API-Spielplatz

Versuchen Sie REST- und GraphQL-Endpunkte gegen das RPM-App-Schema. Antworten verwenden Mock-Daten und erfordern kein Back4app-Konto.

common.loadingPlayground

Verwendet dasselbe Schema wie diese Vorlage.

Wählen Sie Ihre Technologie

Erweitern Sie jede Karte für Integrationsschritte, Statusmuster, Datenmodellbeispiele und Offline-Notizen.

Flutter RPM App Backend

React RPM App Backend

React Native RPM App Backend

Next.js RPM App Backend

JavaScript RPM App Backend

Android RPM App Backend

iOS RPM App Backend

Vue RPM App Backend

Angular RPM App Backend

GraphQL RPM App Backend

REST API RPM App Backend

PHP RPM App Backend

.NET RPM App Backend

Was Sie mit jeder Technologie erhalten

Jeder Stack verwendet dasselbe RPM-App-Backend-Schema und API-Regeln.

Vorgefertigtes Patientenprofil-Schema

Verwalten und Greifen Sie einfach auf Patientendaten mit einer einheitlichen rpm Dashboard Struktur zu.

IoT-Gerätedatenintegration

Nahtlose Verbindung und Überwachung von IoT-Geräten für Echtzeit rpm Dashboard Einblicke.

Sichere Kommunikation für rpm Dashboard

Sichere Kommunikation mit Patienten und Providers über verschlüsselte Nachrichten.

Umfassende Überwachungsprotokolle

Verfolgen Sie Patientenaktivitäten und Gesundheitsmetriken mit detaillierten Protokollen für rpm Dashboard.

REST/GraphQL APIs Unterstützung

Flexible API-Optionen, um effizient mit Ihrem rpm Dashboard Backend zu interagieren.

Prüfprotokolle für die Einhaltung

Aufrechterhaltung der Compliance mit detaillierten Prüfpfaden für alle rpm Dashboard Aktivitäten.

Rpm Dashboard Framework Vergleich

Bewerten Sie die Einrichtungsgeschwindigkeit, SDK-Stile und KI-Unterstützung über alle unterstützten Technologiestacks hinweg.

FrameworkEinrichtungszeitRpm Dashboard VorteilSDK-TypKI-Unterstützung
~3–7 minEinzelner Code für das rpm Dashboard auf Mobil und Web.Typed SDKVoll
Schnelle (5 min) EinrichtungSchnelles Web-Dashboard für das rpm Dashboard.Typed SDKVoll
~5 minPlattformübergreifende mobile App für das rpm Dashboard.Typed SDKVoll
Ungefähr 5 minServergerenderte Web-App für das rpm Dashboard.Typed SDKVoll
~3 minLeichte Web-Integration für das rpm Dashboard.Typed SDKVoll
~3–7 minNative Android App für das rpm Dashboard.Typed SDKVoll
Schnelle (5 min) EinrichtungNative iOS App für das rpm Dashboard.Typed SDKVoll
~5 minReactive Web-Benutzeroberfläche für das rpm Dashboard.Typed SDKVoll
Ungefähr 5 minEnterprise-Web-App für das rpm Dashboard.Typed SDKVoll
Schnelle (2 min) EinrichtungFlexible GraphQL API für das rpm Dashboard.GraphQL APIVoll
~2 minREST API Integration für das rpm Dashboard.REST APIVoll
Unter 5 minServerseitiges PHP Backend für das rpm Dashboard.REST APIVoll
~5 min.NET Backend für das rpm Dashboard.Typed SDKVoll

Die Einrichtungszeit gibt die erwartete Dauer von der Projektinitialisierung bis zum ersten Patienten-Login und der Abfrage von Gerätedaten unter Verwendung dieses Vorlage-Schemas an.

Häufig gestellte Fragen

Allgemeine Anfragen zum Aufbau eines RPM-App-Backends mit dieser Vorlage.

Was ist ein RPM-App-Backend?
Was beinhaltet die RPM-App-Vorlage?
Warum Back4app für eine RPM-App wählen?
Wie rufe ich die neuesten Gerätedaten und deren Status in einem Aufruf ab?
Wie kann ich eine Nachricht als gelesen markieren?
Kann React Native Protokolle zur Überwachung im Cache für die Offline-Nutzung speichern?
Wie verhindere ich unbefugten Zugriff auf sensible Gerätedaten?
Was ist die optimale Strategie, um Überwachungsprotokolle mit Nachrichten zu verbinden?
Wie funktioniert der Audit-Logging-Mechanismus von Anfang bis Ende?
Wie gehe ich mit Patientenbestätigungen für Überwachungsprotokolle um?

Vertraut von Entwicklern weltweit

Treten Sie Teams bei, die sichere RPM-Apps schneller mit Back4app-Templates bereitstellen.

G2 Users Love Us Badge

Bereit, Ihre RPM-App zu erstellen?

Starten Sie Ihr RPM-App-Projekt in nur wenigen Minuten. Keine Kreditkarte nötig.

Technologie wählen