feat(co-messung): bis zu 6 frei benennbare Gase/Schadstoffe statt nur CO
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 25/100
調査の方向性
Start with the listed entry points: Domain/CoMeasurement and Incident.cs, then trace persistence, Sync, CoMessprotokollViewModel.cs, CoMessprotokollView.axaml, and Documents/Sections/CoMessprotokollSection.cs. Review issue #403 for threshold configuration and #404 for PDF layout constraints before deciding the design. Done means multi-gas values, units, colors, sync, PDF output, and loading legacy CO data are handled; the issue also leaves key design choices open.
索引モデルが issue の本文から書いたものです。
説明
Heute
Das CO-Messprotokoll kennt genau einen Messwert je Wohnung: Dwelling.CoValue, ein int? in ppm.
// src/LageBuch.Domain/CoMeasurement/Dwelling.cs
public int? CoValue { get; private init; }
public Dwelling WithCoValue(int? coValue) => this with { CoValue = coValue };
Die Trupps gehen aber mit Mehrgasmessgeräten ins Objekt. Ein Warngerät zeigt neben CO regelmäßig noch CO₂, H₂S, CH₄ (%UEG) und O₂ an, bei Sonderlagen auch etwas ganz anderes (Propan, Ammoniak, ein Messröhrchen-Ergebnis). Alles außer CO landet heute bestenfalls im ETB-Freitext und taucht in der Messprotokoll-Matrix und im Bericht überhaupt nicht auf — genau dort, wo der Einsatzleiter hinschaut.
Vorschlag
Bis zu 6 Gase/Schadstoffe, je Einsatz als Freitext benannt.
Der Einsatz definiert einmal eine Liste von maximal 6 Gas-Slots mit frei eingebbarem Namen (Vorbelegung: CO). Jede Wohnung erfasst dann einen Wert je Slot — die Slots sind die Spalten der Matrix und des Berichts:
Einsatz: Gase = [CO] [CO2] [H2S] [CH4] [ ] [ ]
Haus A, 2. OG
Whg. 1 CO 120 ppm CO2 — H2S 3 ppm CH4 —
Whg. 2 CO 15 ppm CO2 — H2S — CH4 12 %UEG
Bewusst nicht je Wohnung frei benannt: eine gemeinsame Spaltenliste ist das, was ein Trupp mit einem Gerät tatsächlich misst, und nur so bleiben Matrix und PDF eine feste Spaltenmenge statt einer Liste heterogener Namen je Zelle.
Wert + Einheit statt nur ppm. %UEG und Vol-% sind das, was das Gerät für CH₄ und O₂ anzeigt, und 20,9 Vol-% O₂ ist als int-ppm nicht darstellbar. Je Slot also eine kurze Einheit (Freitext, Vorschlagsliste ppm / %UEG / Vol-% / mg/m³) und ein Wert, der Nachkommastellen zulässt.
Farbbänder: mitgelieferte Schwellen je bekanntem Gas. CO behält seine Bänder unverändert (30/200/800 ppm, CoSeverityClassifier). Für die gängigen weiteren Gase werden Default-Schwellen ausgeliefert und über den eingegebenen Namen (normalisiert, CO2/CO₂/Kohlendioxid) zugeordnet; ein Name ohne Treffer wird ohne Farbe dargestellt, nie mit falscher.
Damit erbt dieses Feature die Frage aus #403 (Schwellen sind am deutschen AGW aufgehängt) — Konsequenz: die neuen Schwellen gehören von Anfang an in dieselbe Struktur, die #403 konfigurierbar machen will, und nicht in weitere const int-Felder.
Betroffene Stellen
| Ebene | Was |
|---|---|
Domain/CoMeasurement |
Gas-Slot-Definition am Einsatz; Dwelling.CoValue → Messwerte je Slot; CoSeverityClassifier nimmt Gas + Einheit statt nur ppm |
Domain/Incident.cs |
RecordCoValue (≈ Zeile 991) bekommt den Slot als Parameter; ETB-Eintrag nennt das Gas |
Persistence |
Migration ab CurrentVersion = 21: Slot-Tabelle je Einsatz + Messwerte je Wohnung/Slot; co_dwellings.co_value bleibt lesbar und wandert beim Laden in Slot 1 |
Sync |
RecordCoValueCommand + DwellingDto/IncidentSnapshot um den Slot erweitern; Slot-Liste gehört in den Snapshot, sonst sieht ein beigetretenes Gerät nur Werte ohne Spaltennamen |
AppLogic/ViewModels/CoMessprotokollViewModel.cs |
Editor und Zell-VM je Slot statt eines CoValue; CoDisplay/CoCompact/IsCoElevated… werden Slot-bezogen |
App.Shared/Views/CoMessprotokollView.axaml |
CoValueInput (NumericUpDown, Max 9999) → bis zu 6 Eingaben; Zellen-Kompaktdarstellung muss mit 6 Werten noch lesbar bleiben |
Documents/Sections/CoMessprotokollSection.cs |
Spalten je Gas im PDF; bei 6 Gasen wird A4 hochkant eng (siehe #404) |
docs/master-data.example.json |
falls die Gas-Vorbelegung in die Stammdaten wandert |
Kompatibilität
Ein vor diesem Feature gespeicherter Einsatz hat genau ein Gas: CO, Einheit ppm, mit den heutigen Bändern. Das muss beim Laden ohne Rückfrage so herauskommen — co_value darf nicht verloren gehen und nicht plötzlich als „Slot 1 unbenannt" erscheinen. Ein Vorwärts-Kompat-Test analog zu den bestehenden gehört dazu.
Offene Punkte
- Ist 6 die richtige Obergrenze, oder soll die Zahl weich sein und nur die Darstellung begrenzen?
- Darstellung in der Matrix bei 6 Gasen: alle Werte in der Zelle, oder nur das „schlimmste" Gas farbig und der Rest im Detail-Editor?
- Sollen die Gas-Slots aus den Stammdaten vorbelegt werden (jede Wehr misst immer dasselbe) statt je Einsatz neu eingegeben zu werden?
- 主要言語
- C#
- スター
- 1
- フォーク
- 3
- 平均マージ
- 4時間 34分
- マージ済み PR(30日)
- 182
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
CodeForFire/lagebuch のほかの issue
-
bug ux
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
CodeForFire/lagebuch#714 ·
メンテナーはふだん 1 日以内に返信
-
bug ux
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
CodeForFire/lagebuch#713 ·
メンテナーはふだん 1 日以内に返信
-
enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
CodeForFire/lagebuch#405 ·
メンテナーはふだん 1 日以内に返信
-
documentation good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
CodeForFire/lagebuch#349 ·
メンテナーはふだん 1 日以内に返信
-
documentation good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
CodeForFire/lagebuch#348 ·
メンテナーはふだん 1 日以内に返信
CodeForFire/lagebuch の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 73/100
メンテナーはふだん 1 日以内に返信
-
enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
KnifeLemon/Filee#363 ·
メンテナーはふだん 1 日以内に返信
-
enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
-
area-Native untriaged
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
dotnet/machinelearning#7837 ·
メンテナーはふだん 2 日以内に返信