Worum es geht
CodamAI ist die Software-Factory der Codamic AG. Damit baut man Geschäftsanwendungen, ohne jedes Mal bei null anzufangen. CodamAI besteht aus dem Hub und aus Modulen. Aus den Modulen ist jedes System gebaut, das mit CodamAI entsteht. Jedes Modul übernimmt eine klar abgegrenzte Aufgabe:
- CDMS (CodamAI Data Management System) verwaltet die Daten: Modelle, REST-API, Datenbank, Dateien, Historie.
- CIAS (CodamAI Identity & Access System) steuert Identität und Zugang im ganzen System: Benutzer, Mandanten, Rollen, Registrierung.
- CRMS (CodamAI Reporting Management System) erzeugt Berichte aus Vorlagen: PDF, HTML, Word und Excel, mit freigegebenen Vorlagen und fälschungssicher abgelegten Dokumenten. Mehr unter CRMS.
Der Hub ist die Fabrik. Dort legst du Projekte an, modellierst die Daten und stellst die Module eines Projekts ein. Beim Build holt sich dein System Modelle und Projektrahmen aus dem Hub. Danach läuft es eigenständig: Das fertige System hat keinen eigenen Hub. Der Hub selbst ist mit denselben Modulen gebaut wie jedes System, das er baut.
Im Hub bedienst du die Module über ihre Portale, also Oberflächen für Menschen: Im CDMS-Portal modellierst du deine Daten, im CRMS-Portal stellst du die Berichte eines Projekts ein.
CIAS hat keine eigenen Verwaltungsseiten. Es steuert die gesamte Benutzer- und Identitätslogik im System: Benutzer, Mandanten, Rollen, Gruppen und Registrierung. Dafür bietet es eine Verwaltungs-API (/cias/admin/…). Wie die Verwaltung aussieht, legt jedes Portal selbst fest: Es baut seine eigene Darstellung auf dieser API auf. Das CIAS-Portal zeigt nur, welche Dienste an CIAS hängen und wie.
Neben allem steht Keycloak, der Identity Provider. Dort melden sich die Menschen an.
Die Modulkarte
Jedes Modul hat eine feste Farbe. Dieselben Farben siehst du auf allen Seiten dieser Doku.
flowchart TB
subgraph HUBG["Hub – die Software-Fabrik"]
direction LR
CP["CDMS-Portal<br/>Modellieren"]
CIP["CIAS-Portal"]
CRP["CRMS-Portal"]
end
subgraph SYS["Dein System – läuft eigenständig"]
direction LR
CDMS["CDMS<br/>die Daten"]
CIAS["CIAS<br/>Identität und Zugang"]
CRMS["CRMS<br/>Berichte aus Vorlagen"]
end
KC["Keycloak<br/>Identity Provider"]
HUBG -- "baut" --> SYS
CDMS -- "bettet ein oder ruft" --> CIAS
CDMS -- "bettet ein oder ruft" --> CRMS
CRMS -- "nutzt" --> CIAS
CIAS -- "Adapter" --> KC
classDef hub fill:#4f46e5,stroke:#4f46e5,color:#fff
classDef sys fill:transparent,stroke:#64748b
classDef cdms fill:#1976d2,stroke:#1976d2,color:#fff
classDef cias fill:#8e24aa,stroke:#8e24aa,color:#fff
classDef crms fill:#ffc107,stroke:#b38600,color:#1f1a00
classDef idp fill:#c2410c,stroke:#c2410c,color:#fff
class HUBG hub
class SYS sys
class CDMS,CP cdms
class CIAS,CIP cias
class CRMS,CRP crms
class KC idp
| Farbe | Steht für |
|---|---|
| Kobaltblau | CDMS und das CDMS-Portal |
| Violett | CIAS und das CIAS-Portal |
| Gelb | CRMS und das CRMS-Portal |
| Indigo | der Hub |
| Orange | Keycloak |
Der Hub baut dein System, läuft aber nicht darin mit. Die Pfeile im System lesen sich so: „Eine CDMS-Anwendung bettet CIAS ein oder ruft es als eigenen Dienst auf.“ Einbetten heißt: CIAS läuft als Baustein im selben Programm mit, nicht als eigener Dienst. Was das bedeutet, erklärt Eingebettet und getrennt im Vergleich.
Die Module einzeln
- Aus einem Modell erzeugt der Generator beim Build den Code einer Spring-Boot-Anwendung
- REST-API zum Anlegen, Lesen, Suchen, Ändern, Löschen
- Datenbank je Mandant, Historie, Dateien
- Rechte auf Modellen, Zeilenfilter
- eigene Fachlogik über Hooks
- prüft bei jeder Anfrage Token und Mandant (Filterkette)
- Benutzer, Mandanten, Rollen, Gruppen, Attribute
- Registrierung, Einladung, Mails, Audit
- schreibt Rollen und Gruppen über einen Adapter nach Keycloak
- läuft eingebettet oder als eigener Dienst
- Vorlagen in FreeMarker auf drei Ebenen (System, Mandant, Benutzer), mit Revisionen und Freigabekette
- rendert Vorlage + Daten zu PDF (PDF/A, PDF/UA), HTML, Word und Excel
- Enddokumente als Revisionen in einer Hash-Kette, auf WORM-Speicher
- läuft eingebettet in einer CDMS-Anwendung oder als eigener Dienst
- je Projekt im CRMS-Portal konfiguriert
- Projekte, Dienste, Lizenzen, Personen, Rechte
- hält die Modelle aller Systeme, die er baut
- liefert beim Build den Projektrahmen und die Metadaten
- eigene Darstellung der Verwaltung aus CIAS (Bereich „Zugriff“)
- MCP-Server für KI-Clients
Ein paar Wörter aus der Tabelle:
- Ein Modell beschreibt eine Art von Ding, das deine Anwendung kennt, etwa „Kunde“ mit seinen Feldern. Mehr dazu unter Modellieren.
- Ein Mandant ist ein Kunde deiner Anwendung, dessen Daten von allen anderen getrennt sind.
- Ein Hook ist eigener Code, der sich in einen Ablauf von CDMS einhängt.
- MCP (Model Context Protocol) ist ein Protokoll, über das KI-Clients Werkzeuge aufrufen. Der MCP-Server des Hubs lässt sie Modelle lesen und kontrolliert ändern, siehe Schemaänderung über den MCP-Server.
Wie die Module zusammenhängen
Jedes Modul hat eine Aufgabe und fragt die anderen nur nach dem, was es selbst nicht weiß. So sprechen sie in deinem laufenden System miteinander. Der Hub kommt hier nicht vor, er hat seine Arbeit mit dem Build getan:
flowchart LR
U["Benutzer"]
KC["Keycloak"]
CDMS["CDMS<br/>die Daten"]
CIAS["CIAS<br/>Identität und Zugang"]
CRMS["CRMS<br/>Berichte"]
U -- "meldet sich an,<br/>bekommt ein Token" --> KC
U -- "Anfrage mit Token" --> CDMS
CDMS -- "wer fragt an, für welchen<br/>Mandanten, mit welchen Rollen?" --> CIAS
CDMS -- "Vorlage + Daten:<br/>erzeuge ein Dokument" --> CRMS
CRMS -- "wer fragt an,<br/>welche Mandanten gibt es?" --> CIAS
CIAS -- "prüft Tokens,<br/>pflegt Rollen und Gruppen" --> KC
classDef user fill:#0f766e,stroke:#0f766e,color:#fff
classDef idp fill:#c2410c,stroke:#c2410c,color:#fff
classDef cdms fill:#1976d2,stroke:#1976d2,color:#fff
classDef cias fill:#8e24aa,stroke:#8e24aa,color:#fff
classDef crms fill:#ffc107,stroke:#b38600,color:#1f1a00
class U user
class KC idp
class CDMS cdms
class CIAS cias
class CRMS crms
Fünf Dinge fallen auf:
- CIAS steht vor CDMS. Jede Anfrage läuft zuerst durch die Filterkette von CIAS. Sie prüft das Token und stellt fest, wer anfragt, für welchen Mandanten und mit welchen Rollen. Erst dann arbeitet CDMS. Mit diesen Rollen prüft CDMS, wer welches Modell lesen oder ändern darf, siehe Vom Login bis zu den Daten.
- CRMS hat keine eigenen Daten. Es liest nichts aus CDMS und schreibt nichts dorthin. Die Anwendung holt die Daten aus CDMS und gibt sie CRMS zusammen mit dem Namen der Vorlage. Wie das abläuft, steht unter Vom Klick bis zum Bericht.
- CRMS fragt CIAS. CRMS verwaltet keine Personen, Mandanten oder Rollen. Es fragt CIAS, wer gerade anfragt und welche Mandanten es gibt.
- Nur CIAS spricht mit Keycloak. Keycloak zeigt die Login-Seite und stellt Tokens aus. CIAS prüft diese Tokens und schreibt Rollen und Gruppen nach Keycloak. CDMS und CRMS kennen Keycloak nicht. Warum, steht unter CIAS als Brücke zum Identity Provider.
- Die Wege bleiben gleich, egal wie die Module laufen. CIAS und CRMS können im selben Programm wie CDMS laufen (eingebettet) oder als eigener Dienst. Dann wird aus einem Methodenaufruf ein HTTP-Aufruf. Wer wen was fragt, ändert sich nicht, siehe Eingebettet und getrennt im Vergleich und CRMS in den Betriebsarten.
Fallen
Weiter
- Die Beteiligten einer Anfrage: wer bei einer Anfrage mit wem spricht
- Die wichtigsten Begriffe in Bildern
- Wer entscheidet was?
- Eingebettet und getrennt im Vergleich
- CRMS in den Betriebsarten