Antrag auf Schweizer Kantone elektronischer Gebäude.
Dieses Repository enthält den Quellcode für die Webanwendungen, die zur Verarbeitung elektronischer Gebäudegenehmigungen und vergleichbarer Prozesse in den Schweizer Kantonen von Bern, Grisons, Schwyz, Solothurn und URI verwendet werden.
Das folgende Bild zeigt einen Überblick über die Architektur auf hoher Ebene:
ember-ebau-core
freigeben. ├── compose # docker-compose files
├── db # database Dockerfile and utils
├── django # backend code, containing both API and Caluma
├── document-merge-service # document generation templates and config
├── ember-caluma-portal # Caluma-based portal
├── ember-camac-ng # Ember.js app optimized for embedding in other applications
├── ember-ebau # Ember.js based application for internal area
├── ember-ebau-core # Ember.js addon for code sharing between multiple Ember.js apps
├── keycloak # Keycloak configuration for local development
├── proxy # Nginx configuration for local development
└── tools # miscellaneous utilities
Aufgrund der laufenden Modernisierungsarbeiten sind einige Frontend-Module noch nicht in ember-ebau
integriert, sondern noch Teil von ember-camac-ng
. Nur wenige Frontend -Module sind noch nicht Teil dieses Repositorys. In der folgenden Tabelle sind die wichtigsten Module im "internen" Teil der Anwendung und deren jeweils Vollständigkeits- / Integrationszustand (in der demo
-Konfiguration) aufgeführt.
Modul | Beschreibung | Backend | Frontend | Teil von Ember-EBAU |
---|---|---|---|---|
Hauptnav (Ressource) | ||||
Dossierliste | Zeigen Sie eine Liste von Dossiers | ✔️ | ✔️ | ✔️ |
Aufgabenliste | Zeigen Sie eine Liste von Aufgaben | ✔️ | ✔️ | ✔️ |
Vorlagen | Dokumentvorlagen verwalten (DOCX) | ✔️ | ✔️ | ✔️ |
Organisation / Berechtigungen | Verwalten Sie eigene Organisation und Berechtigungen | ✔️ | ✔️ | ✔️ |
Statischer Inhalt | Statischer Inhalt, Markdown -Editor | ✔️ | ✔️ | ✔️ |
Textkomponenten | Verwalten Sie Snippets für die Verwendung in Textfeldern | ✔️ | ⏳ | ⏳ |
Subnav (Instanzressource) | ||||
Aufgaben | Aufgaben anzeigen und verwalten | ✔️ | ✔️ | ✔️ |
Bilden | Hauptformular anzeigen und bearbeiten | ✔️ | ✔️ | ✔️ |
Verteilung | Holen Sie sich Feedback von anderen Organisationen | ✔️ | ✔️ | ✔️ |
Alexandria | Dokumentverwaltung | ✔️ | ✔️ | ✔️ |
Vorlage | Dokument aus der Vorlage generieren | ✔️ | ✔️ | ✔️ |
Zeitschrift | Kollaboratives Notizbuch | ✔️ | ✔️ | ✔️ |
Geschichte | Zeigt Meilensteine und historische Daten | ✔️ | ✔️ | ✔️ |
Veröffentlichung | Veröffentlichung in der Zeitung verwalten | ✔️ | ✔️ | ✔️ |
Einwände | Einwände verwalten | ✔️ | ✔️ | ✔️ |
Verantwortlich | Zuweisen verantwortungsbewusste Benutzer | ✔️ | ✔️ | ✔️ |
Ansprüche | Bitten Sie den Bewerber nach zusätzlichen Informationen | ✔️ | ✔️ | ✔️ |
Ablehnung | Instanz ablehnen | ✔️ | ✔️ | ✔️ |
Abrechnung | Abrechnungseinträge verwalten | ✔️ | ✔️ | ✔️ |
Prüfung | Strukturierte Prüfung durchführen | ✔️ | ✔️ | ⏳ |
Audit-Log | Zeigt Formänderungen | ✔️ | ⏳ | ⏳ |
Die bevorzugte Entwicklungsumgebung basiert auf Docker.
Für die lokale Entwicklung:
Python:
Glut:
Docker kann verwendet werden, um EBAU schnell zum Laufen zu bringen. Das folgende Skript führt Sie durch den Setup -Prozess. Wir empfehlen die Verwendung der kt_gr
oder kt_so
-Konfiguration vorerst, da andere Kantone immer noch auf Legacy -Komponenten für den internen Bereich angewiesen sind, die nicht Teil dieses Repositorys sind.
make start-dev-env
Falls Sie die folgenden Domänen manuell ändern möchten, müssen sie auf 127.0.0.1 (Localhost) verweisen:
ebau-portal.local ebau.local ebau-keycloak.local ember-ebau.local ebau-rest-portal.local
Für automatische Überprüfungen während des Ausschusses (Formatierung, Leinen) können Sie einen Git -Haken mit den folgenden Befehlen einrichten:
pip install pre-commit
pre-commit install
Danach sollten Sie in der Lage sein, die folgenden Dienste zu nutzen:
Die folgenden Administratoren sind in Keycloak bzw. in der DB vorhanden:
Anwendung | Rolle | Benutzername | Passwort | Notizen |
---|---|---|---|---|
Demo | Administrator | Benutzer | Benutzer | |
kt_schwyz | Administrator | Administrator | Administrator | |
Verlagung | Adsy | Adsy | ||
kt_uri | Administrator | Administrator | Administrator | |
Portaluser | Portal | Portal | ||
KT_BERN | Administrator | Benutzer | Benutzer | |
kt_gr | Administrator | Administrator | Administrator | |
Antragsteller | Editor | Editor | Bewerber -Editor -Rolle | |
Antragsteller | Readonly | Readonly | Antragsteller readonly Rolle | |
kt_so | Administrator | Administrator | Administrator | |
Antragsteller | Editor | Editor | Bewerber -Editor -Rolle | |
Antragsteller | Readonly | Readonly | Antragsteller readonly Rolle |
make debug-django
Mit Docker Compose können Sie an einen laufenden Container (im Grunde genommen gleichwertig zu docker compose up
ohne das Flag -d
) anhängen und über Stdin interagieren.
docker compose attach django
Dies ermöglicht es Ihnen
A. Senden Sie Signale an den Container
B. Lassen Sie sich auf eine PDB -Shell fallen, wenn die Anwendung in einen breakpoint
läuft
Da die Dev-Konfiguration den Django Development-Server ausführt, der in Dateiänderungen nachgeladen wird, ist das Einfügen dieser Haltepunkte unmittelbar nach dem Speichern der Datei wirksam.
Drücken Sie CTRL-p + CTRL-q
HINWEIS: Da standardmäßig der attach
Signale an den Container weiterleitet, müssen Sie die Drücke aus dieser Sequenz beenden (was die Standardeinstellung für --detach-keys
ist und überschrieben werden kann). Durch das Drücken CTRL-c
wird jedoch nicht nur die TTY abgetötet, sondern auch die SIGINT in den Container senden und ihn stoppen.
DOCS: https://docs.docker.com/reference/cli/docker/container/attach/
docker-compose up -d --build db django
cd {ember | ember-camac-ng | ember-caluma-portal | ember-ebau} # Enter ember from the top level of the repo
pnpm install # Install dependencies
pnpm test # Run tests
pnpm start-proxy # Run dev server with proxy to django api
Da dies ein großes Projekt mit vielen Dateien ist, kann die Standardeinrichtung von Ember möglicherweise nicht richtig wieder aufbauen, da es nicht alle diese Dateien ansehen kann.
Um dies zu beheben, installieren Sie Watchman als Dateibeobachter und passen Sie die inotify
-Einstellungen an:
echo fs.inotify.max_user_watches=1000000 | sudo tee -a /etc/sysctl.conf # adjust settings
sudo sysctl -p # re-read config
Stellen Sie sicher, dass der letztere Befehl nur einen Wert zurückgibt, andernfalls müssen die Einstellungen dupliziert und gereinigt werden.
Beachten Sie jedoch, dass die Apps ember-caluma-portal
, ember-camac-ng
, ember-ebau
und der Addon ember-ebau-core
über einen PNPM-Arbeitsbereich denselben Knotenmodulbaum teilen.
Der gemeinsame PNPM -Arbeitsbereich ermöglicht es uns, Code (z. B. Addons) zwischen den Apps zu teilen, die Teil dieses Repo sind (anstatt dem typischen Ansatz der Veröffentlichungsveröffentlichungen auf NPM zu folgen). Dies bedeutet auch, dass das
node_modules
ember-caluma-portal
und ember-camac-ng
müssen synchronisiert werden Um django-silk
zum Profilieren zu aktivieren, fügen Sie einfach DJANGO_ENABLE_SILK=True
Ihrer django/.env
Datei hinzu. Starten Sie dann den Django -Container neu und stöbern Sie in http: //eebau.local/api/silk/.
Um von der demo
-Konfiguration auf kt_bern
umzusteigen, muss sicherstellen, dass die Frontend -Apps die richtigen Umgebungsvariablen aufnehmen.
pnpm start-proxy
begonnen habenmake kt_bern
docker-compose up -d && make loadconfig
docker-compose down
make kt_bern
docker-compose build
docker-compose up -d
durchDie Remote -Debugger -Einstellungen für den VS -Code sind dem Repository verpflichtet.
.vscode/launch.json
. Um das Debuggen im Django -Container zu ermöglichen, muss der PTVSD -Server gestartet werden. Da dieser Debug -Server mit anderen Setups (Pycharm, Pydev) kollidiert wird, wird er erst gestartet, wenn der Env Var ENABLE_PTVSD_DEBUGGER
in django/.env
auf True
eingestellt ist.
Um mit der Authentifizierung mit dem Endpunkt /graphql
zu sprechen, können Sie ein GraphQL -Tool (ähnlich wie Postman) installieren. Tools, die Sie hier in Betracht ziehen:
Das GWR -Modul wird in zwei separaten Repositories entwickelt:
Wenn Sie das GWR -Modul verwenden, müssen Sie einen Fernet -Schlüssel gemäß der Dokumentation des GWR -Backends erstellen.
Sie müssen diesen Schlüssel in jeder Umgebung/Server in Ihrer Env -Datei festlegen. Generieren Sie für jede Umgebung einen separaten Schlüssel, da diese zum Speichern / Lesen der GWR -Benutzerkennwörter verwendet werden.
Die API sollte in gewisser Weise gestaltet werden, die es ermöglicht, von jedem EBAU -Projekt verwendet zu werden. Für die erforderliche Anpassung gelten die folgenden Regeln:
Für verschiedene Feature -Flags und -berechtigungen finden Sie APPLICATIONS
in Einstellungen.py.
Im Entwicklungsmodus ist die Anwendung so konfiguriert, dass alle E -Mails an eine MailPit -Instanz gesendet werden. Wenn Sie also nichts anderes angeben, wird keine E -Mail aus der Entwicklungsumgebung gesendet.
Sie können über http: //ebbau.local/mailpit/ auf den MailPit zugreifen. Jede gesendete E -Mail ist dort sofort sichtbar.
Abschnitt zum Sammeln von Informationen zu Modulen und Kantonen. Dieser Abschnitt soll Know-how-Transfer, Urlaubs Handovers und Debugging-Support-Fälle erleichtern.
Modul in kt verwendet. SZ und KT. Ur (bald), der den Bauprozess nach der Entscheidung begleitet. Die Gemeinde (bis jetzt sind nur Fälle abgedeckt, in denen die Hauptbehörde die Gemeinde ist) und der Antragsteller interagiert durch eine Reihe von Arbeiten mit Dokumenten.
Es gibt Bauphasen ("Baueretappen"), die aus dynamisch wählbaren Konstruktionsschritten bestehen. Konstruktionsschritte sind eine Reihe von Arbeiten, die normalerweise dem Muster der Beginn eines an den Antragstellers gerichteten Arbeitsmusters folgen, gefolgt von einer oder mehreren Arbeitsbeamten, die an die Gemeinde gerichtet sind. Der Antragsteller bestätigt, dass sie sich an die definierten Vorschriften eingehalten haben, und die Muncipality überprüft sie. Mit dem endgültigen Arbeitsaufwand kann die Muncipalität entscheiden, ob der Prozess fortgesetzt oder bis zum Beginn des Bauschritts wieder eingerichtet werden soll.
Das Modul ist stark durch den konfigurierten Workflow definiert. Welche Konstruktionsschritte und daher, welche Arbeiten durchgeführt werden, werden durch dynamische Aufgaben behandelt. Konstruktionsschrittkonfiguration (z. B. welche Aufgabe zu welchem Konstruktionsschritt gehört) ist in den Meta von Aufgaben konfiguriert, die zu einem Konstruktionsschritt gehören. Bauschritte sind im Wesentlichen eine Gruppierung von Aufgaben, es gibt kein Modell, das sie darstellt.
Die Bauphasen sind ein multiple Instanzarbeit mit einem Kinderfall. Der Kinderfall enthält die Bauschritte. Die erste Bauphase wird bei der Initialisierung des Konstruktionsüberwachungsprozesses erstellt. Danach kann eine neue Bauphase durch eine Work-item-Mutation für die vorhandene Arbeit (im Status Ready) initialisiert werden. Achten Sie auf, um sicherzustellen, dass immer eine neue Bauphase erstellt werden kann, solange der Bauüberwachungsprozess nicht abgeschlossen ist, die Arbeiten der Bauphase bleiben bereit, während das Kinderfall der Bauphase bereits abgeschlossen wurde.
Die Kernlogik ist hauptsächlich im Bauweitfluss der Konstruktionsüberwachung und der Formkonfiguration des Kantons, der Caluma -Ereignisse für die Konstruktionsüberwachung, Moduleinstellungen, einige benutzerdefinierte Sichtbarkeit und Berechtigungslogik enthalten.
Im Kanton von Solothurn verwenden wir einen benutzerdefinierten Autorisierungsmechanismus für das EBAU -Portal. Das EBAU -Portal kann nur mit einer Login von My.So.ch, der Egov -Portal -Software, verwendet werden. Da sie keine OIDC -Autorisierung anbieten, mussten wir eine benutzerdefinierte Lösung mit dem Token Exchange und direkten Nakeditationsfunktionen von Keycloak implementieren.
Die Genehmigung soll ein verschlüsselter und signiertes JWT -Token zurückliegen, das dann von Keycloak in ein reguläres OIDC -JWT -Token umgewandelt wird:
sequenzieren
Autonumber
Teilnehmer F als EBAU -Portal
Teilnehmer M als Egov -Portal
Teilnehmer B als EBAU -API
Teilnehmer K als Schlüsselkloak
F->>+m: Umleiten zur Prestation
Hinweis Recht von M: verschlüsselt und signiert JWT -Token mit Benutzerdaten
M->>-F: Umleiten Sie sich mit dem Egov-Token aus
F->>+b: token senden (post to/api/v1/auth/token-exchange)
B->> B: Entschlüsseln und überprüfen Sie Egov-Token, extrahieren Sie Benutzerdaten vom Token
B->>+K: Benutzer erstellen oder aktualisieren
K->> B: Benutzer zurückgeben
B->> K: Token-Austausch mit direkter nackter Imitation
K->>-B: Rückgabe-Token für den Benutzer
B->>-F: Rückkehr-Token
Um die Funktion zu aktivieren, muss die folgende Konfiguration erfolgen:
Standardmäßig ist KeyCloak bereits ordnungsgemäß konfiguriert, um diesen Autorisierungsmechanismus zu unterstützen. Um eine andere Umgebung zu konfigurieren, lesen Sie bitte die Dokumentation
# .env
ENABLE_TOKEN_EXCHANGE =true
Dies ermöglicht die Funktion mit einem Dummy Egov -Portal, das auf unserem Nginx -Proxy gehostet wird. Um mit der EGOV -Portal -Testumgebung zu testen, müssen wir einige weitere Umgebungsvariablen festlegen (die zensierten Werte finden Sie im Tresor):
# .env
EGOV_PORTAL_URL =****
EGOV_PRESTATION_PATH =****
# django/.env
TOKEN_EXCHANGE_JWT_ISSUER =****
TOKEN_EXCHANGE_JWT_SECRET =****
TOKEN_EXCHANGE_JWE_SECRET =****
Dieses Projekt ist unter der EUPL-1.2-oder-Laterin lizenziert. Weitere Informationen finden Sie in Lizenz.