Skip to content

Commit dc47820

Browse files
committed
iteration #1
1 parent cc72c96 commit dc47820

9 files changed

Lines changed: 266 additions & 48 deletions

File tree

.github/ISSUE_TEMPLATE.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<!-- Bitte Beschreibung des Problems oder Vorschlags -->
2+
3+
### Art
4+
- [ ] Bug
5+
- [ ] Feature
6+
- [ ] Datenkorrektur
7+
8+
### Beschreibung
9+
10+
Beschreibe kurz, worum es geht.

README.md

Lines changed: 70 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,44 +2,101 @@ Awesome Fachverfahren
22

33
Eine community-geführte "Awesome"-Liste für kommunale Fachverfahren, die in deutschen Kommunalverwaltungen verwendet werden.
44

5-
Repository-Struktur
5+
Struktur
66

77
```
88
awesome-fachverfahren/
9-
├── README.md
10-
├── CONTRIBUTING.md
11-
├── LICENSE
12-
├── requirements.txt
9+
├── README.md # Dieses Dokument
10+
├── CONTRIBUTING.md # Beiträge-Richtlinien
11+
├── LICENSE # MIT Lizenz
12+
├── requirements.txt # Python-Abhängigkeiten
1313
├── data/
14+
│ ├── fachverfahren/ # YAML-Dateien für jedes Fachverfahren
15+
│ ├── kategorien.yaml # Verfügbare Kategorien
16+
│ ├── anbieter.yaml # Liste der Anbieter
17+
│ └── tags.yaml # Tags
1418
├── schema/
19+
│ ├── fachverfahren.schema.json
20+
│ ├── kategorien.schema.json
21+
│ └── anbieter.schema.json
1522
├── scripts/
16-
└── docs/
23+
│ ├── validate.py # Validiere YAML gegen JSON-Schemata
24+
│ ├── build_index.py # Generiere docs/data.json
25+
│ └── generate_site.py # Generiere index.html
26+
├── .github/
27+
│ └── workflows/ # GitHub Actions Workflows
28+
├── docs/
29+
│ ├── index.html # Statische Webseite
30+
│ ├── data.json # Generierte JSON-Daten (auto)
31+
│ └── assets/
32+
│ ├── style.css
33+
│ └── search.js
34+
└── .gitignore
35+
```
36+
37+
Fachverfahren-Format
38+
39+
Jedes Fachverfahren wird als YAML-Datei in `data/fachverfahren/` gespeichert:
40+
41+
```yaml
42+
id: meso
43+
name: VOIS|MESO
44+
provider: HSH Software
45+
categories:
46+
- Meldewesen
47+
- Bürgerdienste
48+
license: Proprietary # z.B. Proprietary, MIT, AGPL-3.0, GPL-2.0
49+
open_source: false
50+
deployment:
51+
- on-premise
52+
- cloud
53+
technical:
54+
language: C#
55+
database: MSSQL
56+
interfaces:
57+
- XDM
58+
- OSCI
59+
link: https://www.hsh.de/
60+
description: >
61+
Kommunales Fachverfahren für das Meldewesen.
1762
```
1863
1964
Quickstart
2065
21-
- Abhängigkeiten installieren:
66+
1. Abhängigkeiten installieren (optional, mit virtualenv):
2267
2368
```bash
69+
python3 -m venv .venv
70+
source .venv/bin/activate
71+
python3 -m pip install --upgrade pip
2472
python3 -m pip install -r requirements.txt
2573
```
2674

27-
- YAML-Validierung lokal ausführen:
75+
2. YAML-Validierung:
2876

2977
```bash
3078
python3 scripts/validate.py
3179
```
3280

33-
- Index und statische Seite bauen:
81+
3. Index und statische Seite bauen:
3482

3583
```bash
3684
python3 scripts/build_index.py
3785
python3 scripts/generate_site.py
3886
```
3987

40-
CI
88+
4. Lokal testen (HTTP-Server):
89+
90+
```bash
91+
python3 -m http.server 8000 --directory docs
92+
# Dann öffnen: http://localhost:8000/
93+
```
94+
95+
CI/CD
96+
97+
- **Pull Requests**: `validate-data.yml` prüft neue/geänderte YAML-Dateien gegen die JSON-Schemata.
98+
- **Merge in main**: `build-site.yml` baut die statische Seite und deployed nach GitHub Pages.
4199

42-
- Pull Requests: `validate-data.yml` prüft YAML gegen JSON-Schemata.
43-
- Merge nach `main`: `build-site.yml` baut die statische Seite und deployed `docs/` via GitHub Pages.
100+
Lizenz
44101

45-
Lizenz: MIT
102+
MIT License - siehe `LICENSE`

data/anbieter.yaml

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
- id: anbieter-a
2-
name: Anbieter A
3-
website: https://anbieter-a.example
4-
- id: kommunalsoft
5-
name: KommunalSoft GmbH
6-
website: https://kommunalsoft.example
1+
- id: hsh-software
2+
name: HSH Software
3+
website: https://www.hsh.de/
4+
- id: vendor-a
5+
name: Vendor A
6+
website: https://vendor-a.example
7+
- id: code-for-germany
8+
name: Code for Germany
9+
website: https://codefor.de/

data/fachverfahren/meso.yaml

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,20 @@
11
id: meso
2-
name: MESO
3-
description: Modell für elektronische Sozialleistungen
4-
category: soziales
5-
provider_id: kommunalsoft
6-
tags:
7-
- kommerziell
8-
- soziales
9-
website: https://meso.example
2+
name: VOIS|MESO
3+
provider: HSH Software
4+
categories:
5+
- Meldewesen
6+
- Bürgerdienste
7+
license: Proprietary
8+
deployment:
9+
- on-premise
10+
- cloud
11+
technical:
12+
language: C#
13+
database: MSSQL
14+
interfaces:
15+
- XDM
16+
- OSCI
17+
open_source: false
18+
link: https://www.hsh.de/
19+
description: >
20+
Kommunales Fachverfahren für das Meldewesen.
Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
11
id: open_prosoz
22
name: Open ProSoz
3-
description: Offenes Fachverfahren für soziale Prozesse
4-
category: soziales
5-
provider_id: anbieter-a
6-
tags:
7-
- open-source
8-
- soziales
9-
website: https://openprosoz.example
3+
provider: Code for Germany
4+
categories:
5+
- Soziales
6+
- Jugendhilfe
7+
license: AGPL-3.0
8+
deployment:
9+
- on-premise
10+
- cloud
11+
technical:
12+
language: Python
13+
database: PostgreSQL
14+
interfaces:
15+
- REST API
16+
open_source: true
17+
link: https://openprosoz.example
18+
description: >
19+
Open source Fachverfahren für soziale Prozesse und Jugendhilfe-Management.

data/fachverfahren/voiss_geso.yaml

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
id: voiss_geso
22
name: VOISS GESO
3-
description: Fachverfahren für GESO-Daten
4-
category: verwaltung
5-
provider_id: anbieter-a
6-
tags:
7-
- kommerziell
8-
- geodata
9-
website: https://voiss.example
3+
provider: Vendor A
4+
categories:
5+
- Verwaltung
6+
license: Proprietary
7+
deployment:
8+
- cloud
9+
technical:
10+
language: Java
11+
database: PostgreSQL
12+
interfaces:
13+
- OSCI
14+
open_source: false
15+
link: https://voiss.example
16+
description: >
17+
Fachverfahren für GESO-Daten und geodätische Verwaltung.

data/kategorien.yaml

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
1+
- id: meldewesen
2+
name: Meldewesen
3+
description: Meldewesen und Bürgerangelegenheiten
4+
- id: buergerdienste
5+
name: Bürgerdienste
6+
description: Bürgerdienste und Bürgerservices
17
- id: verwaltung
28
name: Verwaltung
3-
description: Prozesse und Anwendungen für allgemeine Verwaltungsaufgaben
9+
description: Allgemeine Verwaltungsprozesse
410
- id: soziales
511
name: Soziales
6-
description: Fachverfahren für Sozial- und Jugendhilfe
12+
description: Soziale Dienste und Leistungen
13+
- id: jugendhilfe
14+
name: Jugendhilfe
15+
description: Jugend- und Familienleistungen

docs/assets/search.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
(function(){
2+
async function load() {
3+
try {
4+
const res = await fetch('data.json');
5+
if (!res.ok) throw new Error('HTTP ' + res.status);
6+
const items = await res.json();
7+
const container = document.getElementById('list');
8+
container.innerHTML = '';
9+
items.forEach(it => {
10+
const d = document.createElement('div');
11+
d.className = 'item';
12+
const catStr = (it.categories || []).join(', ');
13+
const deplStr = (it.deployment || []).join(', ');
14+
const intStr = (it.interfaces || []).join(', ');
15+
const techStr = (it.technical ? `${it.technical.language || '-'} / ${it.technical.database || '-'}` : '-');
16+
d.innerHTML = `<strong><a href="${it.link}" target="_blank" rel="noopener">${it.name}</a></strong>
17+
<div>${it.description || ''}</div>
18+
<table style="margin-top:0.5rem;width:100%;border-collapse:collapse;">
19+
<tr><td style="width:150px;"><em>Provider:</em></td><td>${it.provider || '-'}</td></tr>
20+
<tr><td><em>Categories:</em></td><td>${catStr || '-'}</td></tr>
21+
<tr><td><em>License:</em></td><td>${it.license || '-'}</td></tr>
22+
<tr><td><em>Open Source:</em></td><td>${it.open_source ? 'Yes' : 'No'}</td></tr>
23+
<tr><td><em>Deployment:</em></td><td>${deplStr || '-'}</td></tr>
24+
<tr><td><em>Tech Stack:</em></td><td>${techStr}</td></tr>
25+
<tr><td><em>Interfaces:</em></td><td>${intStr || '-'}</td></tr>
26+
</table>`;
27+
container.appendChild(d);
28+
});
29+
} catch (err) {
30+
const c = document.getElementById('list');
31+
c.textContent = 'Error loading data: ' + err;
32+
}
33+
}
34+
window.addEventListener('DOMContentLoaded', load);
35+
})();
36+
async function loadData(){
37+
try{
38+
const r = await fetch('data.json');
39+
const data = await r.json();
40+
const el = document.getElementById('list');
41+
if(!data.length) el.textContent = 'Keine Einträge.';
42+
el.innerHTML = '';
43+
data.forEach(d=>{
44+
const div = document.createElement('div');
45+
div.className = 'item';
46+
div.innerHTML = `<strong>${d.name}</strong> — ${d.description || ''} <br><a href="${d.website}">${d.website}</a>`;
47+
el.appendChild(div);
48+
})
49+
}catch(e){
50+
document.getElementById('list').textContent = 'Fehler beim Laden der Daten.';
51+
console.error(e);
52+
}
53+
}
54+
loadData();

docs/assets/style.css

Lines changed: 61 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,61 @@
1-
body { font-family: Arial, sans-serif; margin: 2rem; }
2-
h1 { color: #0b5; }
3-
#list { margin-top: 1rem; }
4-
.item { border-bottom: 1px solid #eee; padding: 0.5rem 0; }
5-
.item a { color: #0366d6; text-decoration: none }
1+
body {
2+
font-family: Arial, sans-serif;
3+
margin: 2rem;
4+
line-height: 1.6;
5+
}
6+
7+
h1 {
8+
color: #0b5;
9+
margin-bottom: 0.5rem;
10+
}
11+
12+
#list {
13+
margin-top: 1rem;
14+
}
15+
16+
.item {
17+
border-bottom: 1px solid #eee;
18+
padding: 1.5rem 0;
19+
}
20+
21+
.item:last-child {
22+
border-bottom: none;
23+
}
24+
25+
.item a {
26+
color: #0366d6;
27+
text-decoration: none;
28+
}
29+
30+
.item a:hover {
31+
text-decoration: underline;
32+
}
33+
34+
.item strong {
35+
font-size: 1.1em;
36+
}
37+
38+
.item div {
39+
margin: 0.5rem 0;
40+
color: #555;
41+
}
42+
43+
.item table {
44+
margin-top: 0.5rem;
45+
width: 100%;
46+
border-collapse: collapse;
47+
font-size: 0.95em;
48+
}
49+
50+
.item td {
51+
padding: 0.3rem 0;
52+
}
53+
54+
.item td:first-child {
55+
font-weight: bold;
56+
padding-right: 1rem;
57+
}
58+
59+
.item em {
60+
color: #666;
61+
}

0 commit comments

Comments
 (0)