Posts by modular

    Nein, wie schon geschrieben, direkt bei https://publikations-plattform.de/. Warum sollte ich einen externen Dienstleister nutzen der fast das doppelte kostet wie direkt beim Bundesanzeiger-Verbund?

    Weil es dort Support gibt und weil wir aufgrund von Arbeiten an der Linux-Version, auf die Du ja auch wartest, das direkte Bundesanzeigerformat auf das nächste Jahr verschoben haben. :)

    Mache bitte Folgendes:

    Downloade mod_pseudo und entpacke es in einen beliebigen Ordner.

    Öffne die paypal-Datei und stelle alles korrekt ein (Kodierung und Trennzeichen).

    Verbinde unter Feldinhalte ändern das Email-Feld mit den Emailfeldern in PP.

    Verbinde andere Felder, bei denen z.B. Personendaten enthalten sind, mit dem Feld Text oder lösche diese (Feldinhalte löschen).

    Wähle eine Zieldatei aus und erstelle die Daten.

    Maile die Zieldatei zum Testen an:

    Dabei auf diesen Forumspost verweisen.

    Download: https://www.taxpool.net/mod_pseudo/mod_pseudo.zip

    Programmbeschreibung

    mod_pseudo ist ein Werkzeug zur Anonymisierung, Pseudonymisierung und strukturierten Verarbeitung von Datenbeständen aus CSV-, TXT- und Excel-Dateien. Die Anwendung unterstützt Anwender dabei, sensible personenbezogene oder unternehmensbezogene Informationen so zu verändern, dass sie für Tests, Analysen, Supportfälle oder Entwicklungsumgebungen genutzt werden können, ohne auf reale Daten zurückgreifen zu müssen.

    Das Programm arbeitet feldbasiert: Für jede Spalte können gezielt Aktionen definiert werden, beispielsweise Löschen, Konvertieren oder Pseudonymisieren von Inhalten. Abhängig vom Einsatzzweck kann entweder eine echte Anonymisierung erfolgen – etwa durch vollständiges Entfernen von Feldinhalten – oder eine reversibel nachvollziehbare Pseudonymisierung, bei der der ursprüngliche Wert durch einen stabilen Ersatzwert ersetzt wird.

    Der Prozess der Pseudonymisierung erfolgt deterministisch auf Basis eines HMAC-Schlüssels. Dadurch erhalten identische Eingabewerte immer denselben Ergebniswert, auch über mehrere Dateien hinweg. Der Schlüssel wird nicht im Programm gespeichert, sondern verbleibt vollständig unter der Kontrolle des Anwenders. Dadurch bleiben sowohl Datenschutz- als auch Compliance-Anforderungen gewahrt. Optional kann eine Zuordnungsdatei generiert werden, die die Beziehung zwischen Original- und Ersatzwerten dokumentiert, sofern dies für Test- oder Migrationsszenarien erforderlich ist.

    Für häufige Feldtypen stehen spezialisierte Aktionen zur Verfügung, u. a. für Namen, Firmendaten, Adressen, Telefon- und Steuernummern, Datums- und Zeitangaben, Beträge, PLZ/Ort-Kombinationen, IP- und Mail-Adressen, UUIDs oder numerische Werte. Für Felder wie IBAN, USt-ID, BIC oder IP-Adressen können, sofern gewünscht, syntaktisch gültige, aber nicht existierende Werte erzeugt werden. Ebenso können numerische oder Datumswerte skaliert oder verschoben werden, sodass realistische, aber datenschutzkonforme Daten entstehen.

    mod_pseudo ermöglicht zudem die direkte Bearbeitung von Text- und Excel-Dateien, ohne dass externe Programme wie Excel oder LibreOffice erforderlich sind. Inhalte können geändert, konvertiert, formatiert oder um neue Spalten ergänzt werden. Damit eignet sich das Werkzeug nicht nur zur Anonymisierung, sondern auch zur Datenbereinigung, Strukturumwandlung oder zur Erstellung standardisierter Testdatensätze.

    Für erweiterte Automations- und Integrationsanforderungen steht eine JavaScript-Schnittstelle zur Verfügung. Über diese lassen sich Datensätze programmgesteuert analysieren, verändern, exportieren oder in Abläufe integrieren.

    mod_pseudo wurde insbesondere für den Einsatz in Softwaretests, Supportprozessen, Produktdokumentation, Datenmigrationen, Qualitätssicherung und Entwicklungsumgebungen entwickelt, in denen reale Daten aus Datenschutz-, Sicherheits- oder Verfügbarkeitsgründen nicht eingesetzt werden dürfen. Der Schwerpunkt liegt dabei auf Datenschutz, Reproduzierbarkeit, einfacher Bedienbarkeit und konsistenten Ergebnissen bei kleinen wie großen Datenmengen.


    Einstellungen

    Eingabedatei: In das Eingabefeld kann entweder ein Dateipfad eingegeben oder aus der Zwischenablage eingefügt werden. Mit dem Schalter Ändern erscheint ein Dateiauswahldialog.

    Aktualisieren: Setzt manuelle Änderungen (Bearbeitbar) zurück und lädt die Daten erneut so, wie sie beim ersten Import eingelesen wurden. Hinweis: Externe Änderungen an der Datei werden derzeit nicht berücksichtigt.

    Laden: Lädt eine Konfiguration, die zuvor mit Speichern gesichert wurde.

    Ab Zeile: Hier wird die Zeilennummer angegeben, ab der die Feldtitel beginnen. Existieren keine Feldtitel (Titel deaktiviert), muss hier die Zeilennummer eingetragen werden, an der die eigentlichen Daten beginnen.

    Wenn Feldtitel vorhanden sind, wird aktuell angenommen, dass die Datenzeile direkt darunter beginnt. Fehlen Feldtitel, erzeugt das Programm automatische Titel:

    • Bei Textdateien: Ganzzahlen (1, 2, 3 ...)
    • Bei Excel-Dateien: Excel-Spaltennamen (A, B, C ...)

    Hinweis: Bei DATEV-CSV-Dateien muss Titel aktiviert und bei Ab Zeile der Wert 2 eingetragen werden.

    Relaxed: Sollte immer aktiviert sein.

    Titel: Die Daten enthalten eine Kopfzeile mit Feldtiteln.

    Bearbeitbar: Daten können in der Listenansicht Eingabe: per Mausklick direkt bearbeitet werden.


    Einstellungen für Textdateien

    Zuerst sollte der passende Datenfeld-Separator festgelegt werden.

    Optional kann der Text-Separator für Zeichenketten definiert werden.

    Beispiele (Separator = Semikolon):

    VarianteBeispiel
    Doppelt"Version ""XT""";1200€
    Einfach'Version ''XT''';1200€
    Beide'Version ''XT''';"1200€"

    Escape-Sequenzen:

    • TwoQuote (Standard) Anführungszeichen in Texten bleiben erhalten. Beispiel: "Ausgabe-""Test""";1200€Ausgabe-"Test";1200€
    • Backslash Entfernt Backslashes.

    Kodierung: Bei Textdateien häufig: UTF-8, ISO-8859-1 oder UTF-32. Falls Umlaute falsch dargestellt werden, muss die Kodierung angepasst werden. In Notepad++ wird die erkannte Kodierung im Menü Codierung angezeigt.


    Feldaktionen

    Feldinhalte löschen (Anonymisieren): Durch Aktivieren des entsprechenden Datenfeldes werden alle Werte dieses Feldes in der Ausgabe gelöscht. Mehrfachauswahl ist möglich.

    Feldinhalte ändern (Pseudonymisieren oder Konvertieren): Im linken Auswahlfeld wird das Datenfeld ausgewählt, im rechten die gewünschte Aktion. Aktionen, die mit * enden, konvertieren nur, pseudonymisieren aber nicht.

    Mit dem Schalter Zuweisen wird die Aktion dem Datenfeld zugeordnet. Um eine Zuordnung zu entfernen, wird die leere Auswahl im Aktionsfeld ausgewählt und zugewiesen.

    Mit dem Schalter Konfigurieren können zusätzliche Optionen zur Verarbeitung bestimmter Datenfelder eingestellt werden. Diese erweiterten Einstellungen werden weiter unten beschrieben.


    Dateien

    Ausgabedatei: In das Eingabefeld kann entweder ein Dateipfad eingegeben oder aus der Zwischenablage eingefügt werden. Mit dem Schalter Ändern erscheint ein Dateiauswahldialog.

    Formatvorgaben:

    • Textdateien: .csv
    • Excel/OpenOffice: .xlsx

    Zuordnungsdatei: Erzeugt im Ausgabeordner eine Datei wie: mod_pseudo_map_yyyyMMdd_HHmmss.csv Diese enthält eine Gegenüberstellung der ursprünglichen und der geänderten Werte. Es werden nur Werte aufgelistet, die über Feldinhalte ändern verändert wurden.

    Scriptdatei: Aktiviert die Verwendung einer zusätzlichen JavaScript-Datei. In das Eingabefeld kann entweder ein Dateipfad eingegeben oder aus der Zwischenablage eingefügt werden. Mit dem Schalter Ändern erscheint ein Dateiauswahldialog.

    Die zusätzliche API wird weiter unten beschrieben.


    Verarbeitung

    Testen und Erstellen: Erzeugt die Ausgabedatei und ggf. die Zuordnungsdatei. Eine Vorschau der Ergebnisdaten erscheint in der Listenansicht Ausgabe:.

    Speichern: Speichert die aktuelle Konfiguration, sodass sie später über Laden wiederhergestellt werden kann.


    Zusätzliche Optionen für Feldaktionen — Zusammenfassung

    Die erweiterten Einstellungen wirken nur bei Datenfeldern, für die zuvor eine Aktion ausgewählt und zugewiesen wurde. Sie bestimmen, wie Werte erzeugt, verändert oder simuliert werden.


    Metadaten entfernen

    Entfernt alle Zeilen vor dem Tabellenkopf bzw. der ersten Datenzeile (falls keine Titel vorhanden) aus der Zieldatei. Die eigentlichen Spaltenüberschriften (Titelzeile der Tabelle) und die Daten bleiben erhalten. Hinweis: Bei DATEV-CSV-Dateien oder anderen Formaten, die einen Metadatenblock am Anfang zwingend benötigen, darf diese Einstellung nicht aktiviert werden.

    Echtwerte simulieren

    Erzeugt realistisch wirkende pseudonymisierte Werte für strukturierte Datenfelder wie:

    • PLZ
    • Straße / Hausnummer
    • Telefonnummer
    • Steuernummer
    • USt-ID
    • IP-Adresse

    Die erzeugten Werte orientieren sich am üblichen Format, sind jedoch nicht rückrechenbar und nicht real. Sie dienen ausschließlich dazu, Testdaten plausibel erscheinen zu lassen.

    DatenfeldErgebnisValidität
    PLZ, Straße, Telefonnummerstrukturell plausibelnicht garantiert gültig
    Steuernummer, USt-IDformatähnlichnicht prüfbar gültig
    IP-Adresseformal gültig (IPv4/IPv6)technisch gültig, aber nicht echt

    Gleitkomma immer als Text

    Speichert Dezimalwerte unabhängig vom System- oder Excel-Format als Text, um Lokalisierungs- oder Rundungsfehler zu vermeiden oder wenn eine Software ein spezielles Eingabeformat benötigt. Textwerte lassen sich in Excel oder LibreOffice nicht direkt für Berechnungen verwenden.

    Datumsverschiebung

    Verschiebt Datumswerte zufällig innerhalb eines definierten Bereichs. Optional kann eine einheitliche Verschiebung für alle Datumswerte verwendet werden, um zeitliche Beziehungen (z. B. Buchungs- und Leistungsdatum) beizubehalten. Hinweis: Der Minimalwert beträgt 30 Tage. Eine größere Verschiebung führt zu einer stärkeren Pseudonymisierung und erschwert Rückschlüsse auf den ursprünglichen Wert.

    Formatierung für Datum und Datum-Zeit

    Definiert Ein- und Ausgabeformatregeln (z. B. dd.MM.yyyy, yyyy-MM-dd, ISO-8601). Diese Formate steuern, wie Text als Datum erkannt und wie der Ausgabewert dargestellt wird.


    Aktionen


    AktionAusgabeBemerkung
    BICz.B. BCAADEA0001SWIFT/BIC-Werte werden syntaktisch korrekt erzeugt, entsprechen jedoch keiner realen Bank.
    Das bedeutet: Der Code ist formal gültig, kann aber nicht über externe Bankverzeichnisse zugeordnet werden.
    Betrag (Komma)
    Betrag (Punkt)
    Beispieleingabe: 600,00
    Einstellungen:
    Faktor für Gleitkommazahlen: 1,5.
    Gleitkomma immer als Text aktiv.
    900.00 (Punkt) 900,00 (Komma)
    Gleitkomma immer als Text inaktiv.
    900.00 intern, die Anzeigeformatierung ist vom Anzeigeformat, das meist lokale-abhängig ist, abhängig.
    Kann mit Faktor für Gleitkommazahlen 1,0 z.B. zum Konvertieren in einen Text verwendet werden.
    Sofern außer den reinen Zahlenwerten zusätzliche Texte wie z.B. CHF, EUR, etc. enthalten sind, wird die Ausgabe im Textformat gespeichert.
    DatumZufällig verschobener Datumswert innerhalb des eingestellten Bereichs.Einstellung für die Verschiebung in Tagen: Maximale Verschiebung für Datumswerte in Tagen
    Sofern der Eingabewert bei xlsx im Textformat vorliegt, (in Libreoffice STRG+F8 drücken um berechenbare Felder anzuzeigen) oder bei Textdateien, muss unter Text zu Datum: Formatierung die korrekte Formatierung des Datums eingegeben werden, ansonsten wird ein Leerfeld erzeugt.
    Falls die Einstellung Datum immer als Text aktiv ist, die Einstellung Datum zu Text: Formatierung beachten.
    Datum zu Text *Der ursprüngliche Datumswert in benutzerdefiniertem Datumsformat als Text.
    Keine Pseudonymisierung.
    Sofern der Eingabewert bereits als Text vorliegt: Die Einstellung Text zu Datum: Formatierung beachten.
    Für die Ausgabe die Einstellung Datum zu Text: Formatierung beachten.
    Datum-ZeitEin bzgl. des Eingabewerts um Tage und Sekunden verschobener Datumswert.Einstellung für die Verschiebung in Tagen: Maximale Verschiebung für Datumswerte in Tagen. Der Verschiebungsbereich für Sekunden beträgt 86400 sec (24h).
    Sofern der Eingabewert bereits als Text vorliegt: Die Einstellung Text zu Datum-Zeit: Formatierung beachten.
    Falls die Einstellung Datum-Zeit immer als Text aktiv ist, die Einstellung Datum-Zeit zu Text: Formatierung beachten.
    Datum-Zeit zu Text *Der ursprüngliche Datumswert in benutzerdefiniertem Datumsformat als Text.
    Keine Pseudonymisierung.
    Sofern der Eingabewert bereits als Text vorliegt: Die Einstellung Text zu Datum-Zeit: Formatierung beachten.
    Für die Ausgabe die Einstellung Datum-Zeit zu Text: Formatierung beachten.
    Domainz.B. xvddpatdirqt.invalid
    Emailz.b. byakorgaoeldvdls@example.invalid
    Firmaz.B. compmexgdsijvbunsu
    Fortlaufende ZahlFortlaufende Zahl von 1 beginnend.
    Ganzzahl
    Beispieleingabe: 600
    Einstellungen:
    Faktor für Ganzzahlen: 1,5.
    Resultat: 900
    IBANz.B. DE95000000000006545177IBAN-Werte werden syntaktisch korrekt erzeugt, entsprechen jedoch keiner realen Bank.
    Das bedeutet: Der Code ist formal gültig, kann aber nicht über externe Bankverzeichnisse zugeordnet werden.
    Die ersten zwei Buchstaben müssen einem gültigen EU-Land entsprechen, ansonsten Ausgabe: Unsupported.
    IPEinstellung Echtwerte simulieren: z.B. 2001:db8:dd1c:6035:79a2:18ac:d6d6:f11b
    ansonsten z.B. ippllfrrvvowelkbqd
    Ohne Echtwertsimulation Vorsilbe ip.
    Namez.B. nameudojgoljwtejxyVorsilbe name.
    Ortz.B. placegdvbyjkkeiusVorsilbe place.
    PLZEinstellung Echtwerte simulieren: z.B. 51128
    ansonsten z.B. 24339152
    SteuernummerEinstellung Echtwerte simulieren: z.B. 2967510019
    ansonsten z.B. stno71566000418276
    Ohne Echtwertsimulation Vorsilbe stno.
    Strassez.B. strtefbvhvmkfseVorsilbe str.
    Strasse NrEingabewert z.B. Weg 123.
    Einstellung Echtwerte simulieren: z.B. sjxuywwp 123
    ansonsten z.B. strsjxuywwpygxo 123
    Ohne Echtwertsimulation Vorsilbe str.
    TelefonEingabewert z.B. 030 000000.
    Einstellung Echtwerte simulieren: z.B. 922116720
    ansonsten z.B. tel46645331375772
    Ohne Echtwertsimulation Vorsilbe tel.
    Textz.B. txtzlhhmgcysorfytVorsilbe txt.
    USt-IDEinstellung Echtwerte simulieren: z.B. DE3856574700
    ansonsten z.B. vatldshaoxfphfkacfo
    Ohne Echtwertsimulation Vorsilbe vat.
    Uuidz.B. dce92d582e7143c993bac685465cc4aeGlobale eindeutige ID.

    DataSheetObject – JavaScript-API

    DataSheetObject stellt einen Zeilenbereich eines QAbstractItemModel für JavaScript zur Verfügung. Zeilen werden mit View-Index (viewRow) angesprochen, Spalten entweder über Index oder Feldnamen.


    Hinweise zu Zeilen- und Spaltenindizes

    • viewRow ist 0-basiert innerhalb des Bereichs: 0 <= viewRow < numRows().

    Hinweise zum Zugriff auf einen Spaltenindex per Feldnamen

    Die internen Feldnamen sind:

    • Bei Textdateien: Ganzzahlen (1, 2, 3 ...)
    • Bei Excel-Dateien: Excel-Spaltennamen (A, B, C ...)

    Sofern keine Titelzeile existiert, ist der Anzeigefeldname identisch mit dem internen Feldnamen. Existiert eine Titelzeile, ist der Anzeigefeldname der Spaltenname, der in der Feldnamenliste in eckigen Klammern steht.


    Basis-Informationen zum Datenbereich

    Zeilenbereich

    • int numRows() const Anzahl der Zeilen im Bereich. Ist endRow < startRow, ergibt sich 0.
    • bool isEmpty() const true, wenn numRows() == 0.

    Spalteninformationen

    • int numCols() const Anzahl der Spalten.
    • QString colName(int i, bool display = true) const Gibt den Spaltennamen zu Index i zurück.
      • display = true → Anzeigename (sichtbarer Feldtitel)
      • display = false → interner Name (z. B. A, B, 1, 2)
    • int colNo(const QString &name, bool display = true) const Liefert den Spaltenindex zu einem Feldnamen.
      • display = truename ist Anzeigename
      • display = falsename ist interner Name Rückgabe -1, wenn der Name nicht gefunden wird.

    Textzugriff (String-basiert)

    Lesen

    • QString getText(int viewRow, int col) const Liefert den Text der Zelle (Qt.DisplayRole). Ungültiger Index → leerer String.
    • QString getText(int viewRow, const QString &name, bool internal = false) const Wie oben, Spalte per Feldnamen.
      • internal = false → Anzeigename
      • internal = true → interner Name

    Schreiben

    • bool setText(int viewRow, int col, const QString &s) const Setzt den Text der Zelle (Qt.EditRole). Rückgabe: true bei Erfolg, sonst false.
    • bool setText(int viewRow, const QString &name, const QString &s, bool internal = false) const Wie oben, Spalte per Feldnamen.

    Generischer Zugriff mit QVariant

    Lesen

    • QVariant getValue(int viewRow, int col, int role = Qt.DisplayRole) const Liefert den Zellenwert als QVariant für eine bestimmte Rolle (z. B. Qt.DisplayRole, Qt.EditRole).
    • QVariant getValue(int viewRow, const QString &name, bool internal = false, int role = Qt.DisplayRole) const Wie oben, mit Spaltennamen.

    Schreiben

    • bool setValue(int viewRow, int col, const QVariant &v, int role = Qt.EditRole) const Setzt den Wert mit der angegebenen Rolle (Standard: EditRole).
    • bool setValue(int viewRow, const QString &name, const QVariant &v, bool internal = false, int role = Qt.EditRole) const Wie oben, mit Spaltennamen.

    Typisierte Setter (Int, Int64, Double, Bool, String, Date, DateTime)

    Alle diese Funktionen rufen intern setValue() mit einem passenden QVariant auf.

    • bool setInt(int viewRow, int col, int v) const
    • bool setInt(int viewRow, const QString &name, int v, bool internal = false) const
    • bool setInt64(int viewRow, int col, qint64 v, int role = Qt.EditRole) const
    • bool setInt64(int viewRow, const QString &name, qint64 v, bool internal = false, int role = Qt.EditRole) const
    • bool setDouble(int viewRow, int col, double v) const
    • bool setDouble(int viewRow, const QString &name, double v, bool internal = false) const
    • bool setBool(int viewRow, int col, bool v) const
    • bool setBool(int viewRow, const QString &name, bool v, bool internal = false) const
    • bool setString(int viewRow, int col, const QString &v) const
    • bool setString(int viewRow, const QString &name, const QString &v, bool internal = false) const
    • bool setDate(int viewRow, int col, const QDate &v) const
    • bool setDate(int viewRow, const QString &name, const QDate &v, bool internal = false) const
    • bool setDateTime(int viewRow, int col, const QDateTime &v) const
    • bool setDateTime(int viewRow, const QString &name, const QDateTime &v, bool internal = false) const

    Typisierte Getter (Int, Int64, Double, Bool, String, Date, DateTime)

    Hier steckt zusätzliche Logik, z. B. Parsing von Währungsstrings.

    Integer

    • int getInt(int viewRow, int col) const
      • Wenn Zelle QString ist → Parsing über parseCurrencyString(...).
      • Sonst → v.toInt().
    • int getInt(int viewRow, const QString &name, bool internal = false) const

    64-Bit Integer

    • qint64 getInt64(int viewRow, int col) const Falls String → Parsing wie oben, sonst toLongLong().
    • qint64 getInt64(int viewRow, const QString &name, bool internal = false) const

    Double

    • double getDouble(int viewRow, int col) const String → parseCurrencyString(...), sonst toDouble().
    • double getDouble(int viewRow, const QString &name, bool internal = false) const

    Bool

    • bool getBool(int viewRow, int col) const
      • QVariant::Bool → direkt.
      • String wird als true gewertet bei: "true", "1", "yes", "ja", "wahr" und als false bei: "false", "0", "no", "nein", "falsch"
      • Sonst Fallback → v.toBool().
    • bool getBool(int viewRow, const QString &name, bool internal = false) const

    String

    • QString getString(int viewRow, int col) const Liefert den Wert (EditRole) als String.
    • QString getString(int viewRow, const QString &name, bool internal = false) const

    Date

    • QDate getDate(int viewRow, int col) const
      • QDate → direkt
      • QDateTime → Datumsteil
      • QString → Parsing über dlg->readDateTime(...) (inkl. Excel/1900/1904-Unterstützung) Ungültig → leeres QDate.
    • QDate getDate(int viewRow, const QString &name, bool internal = false) const

    DateTime

    • QDateTime getDateTime(int viewRow, int col) const
      • QDateTime → direkt
      • QDate → Zeit = 00:00:00
      • QStringdlg->readDateTime(...) Ungültig → leeres QDateTime.
    • QDateTime getDateTime(int viewRow, const QString &name, bool internal = false) const

    Spalten hinzufügen

    • int insertColumn(QString dispName) Fügt am Ende des Datenblatts eine neue Spalte ein.

      Verhalten:

      • Bei CSV:
        • interner Name: laufende Nummer als Zeichenkette "1", "2", …
      • Bei XLSX:
        • interner Name: Excel-Spaltenname ("A", "B", …)
      • Wenn hasHeader == true:
        • in der Kopfzeile wird dispName eingetragen
      • Wenn hasHeader == false:
        • dispName wird auf den internen Namen gesetzt

      Rückgabewert:

      • >= 0 → Index der neuen Spalte
      • -1 → Einfügen fehlgeschlagen (z. B. Name doppelt oder Modell unterstützt die Operation nicht)

    Numerische Strings skalieren

    • QString scaleNumericString(const QString &s, double factor, int sep) const Skaliert einen numerischen Wert, der in einem String steht (z. B. Betrag).

      Parameter:

      • s → Eingabestring (z. B. "600,00" oder "600.00 EUR")
      • factor → Faktor (z. B. 1.5)
      • sep:
        • 0 → Dezimaltrennzeichen Komma
        • 1 → Dezimaltrennzeichen Punkt

      Bei Erfolg → skalierter String, sonst wird s unverändert zurückgegeben. Mit factor = 1.0 kann man z. B. auch nur das Format normalisieren.


    UI-Hilfsfunktionen

    • void messageBox(const QString &title, const QString &s) const Zeigt eine einfache Info-MessageBox.
    • void toClipBoard(const QString &s) const Kopiert den Text in die Systemzwischenablage.

    Dateien schreiben

    • bool writeUtf8TextFile(const QString &filePath, const QString &text, bool withBom) const Schreibt eine UTF-8-Textdatei atomar auf die Platte.
      • withBom = true → mit UTF-8-BOM
      • withBom = false → ohne BOM Rückgabe: true, wenn kein Fehler aufgetreten ist.
    • QString writeUtf8TextFileEx(const QString &filePath, const QString &text, bool withBom) const Erweiterte Variante mit Fehlertext:
      • Erfolg → leerer String
      • Fehler → Fehlermeldung als Text (für eigene Fehlerbehandlung im Script)

    Beispiel-Script


    DSGVO-Hinweis und empfohlene organisatorische Maßnahmen

    Die Nutzung von mod_pseudo kann dazu beitragen, personenbezogene Daten gemäß Art. 5, 25 und 32 DSGVO datenschutzgerecht für Entwicklungs-, Test-, Schulungs- oder Supportzwecke aufzubereiten. Bei Verwendung der Funktion Feldinhalte löschen (Anonymisieren) werden die entsprechenden Daten irreversibel entfernt und gelten damit als anonymisiert. Bei der Pseudonymisierung werden Daten deterministisch ersetzt, sodass weiterhin eine technische Zuordnung möglich sein kann, sofern der HMAC-Schlüssel erhalten bleibt. Der Schlüssel wird nicht im Programm abgelegt und verbleibt vollständig in der Verantwortung des Anwenders.

    Für einen DSGVO-konformen Einsatz werden folgende organisatorischen Maßnahmen empfohlen:

    • Trennung von Produktiv- und Testsystemen: Pseudonymisierte oder anonymisierte Daten sollten ausschließlich in Test- oder Entwicklungsumgebungen genutzt werden.
    • Sichere Schlüsselverwaltung: Der verwendete HMAC-Schlüssel sollte geschützt, dokumentiert und gemäß Sicherheitsrichtlinien verwahrt oder nach Bedarf gelöscht werden.
    • Protokollierung und Dokumentation: Verarbeitungsschritte sollten nachvollziehbar dokumentiert werden, insbesondere wenn Zuordnungsdateien erzeugt und aufbewahrt werden.
    • Minimierungsprinzip beachten: Es sollten nur diejenigen Felder pseudonymisiert oder anonymisiert werden, die für den vorgesehenen Zweck erforderlich sind.
    • Zugriffsbeschränkungen: Pseudonymisierte Daten sollten nur Berechtigten zugänglich gemacht werden.

    Diese Hinweise ersetzen keine rechtliche Beratung, unterstützen jedoch bei der sicheren und verantwortungsvollen Nutzung von mod_pseudo in datenschutzrelevanten Kontexten.


    Haftungsausschluss: Diese Software wird „wie geliefert“ bereitgestellt. Es wird keine Garantie für Vollständigkeit, Richtigkeit, Eignung für einen bestimmten Zweck oder Fehlerfreiheit übernommen. Jegliche Verantwortung für die Interpretation der Ergebnisse, die Weiterverarbeitung der erzeugten Daten oder die Einhaltung rechtlicher oder regulatorischer Anforderungen liegt beim Anwender. Der Hersteller übernimmt keine Haftung für direkte oder indirekte Schäden, Datenverlust oder wirtschaftliche Folgeschäden, die durch den Einsatz dieser Software entstehen können.


    © 2025 psynetic Software. Alle Rechte vorbehalten.


    Die offizielle Supportantwort dazu ist:

    Vermutlich wurde eine Handelsbilanz ausgewählt, aber nichts übergeleitet.

    Sofern keine Anlagen übermittelt oder keine Anlagen gebucht wurden, im Register 'Kontenzuweisung' der E-Bilanz auf den Schalter 'Anlagespiegel' gehen und dort die Einstellung 'Anlagespiegel ohne Werte übermitteln, da er sich nicht...' aktivieren.

    ANSONSTEN:
    Sofern Anlagen gebucht wurden und diese übermittelt werden sollen:

    Sofern die Anlagen in der Anlagenverwaltung erfasst wurden:

    Mit dem Schalter 'Werte aus der Anlagenverwaltung übernehmen' sollten die grundlegenden Werte (ohne evtl. Überleitungsrechnung) aus der Anlagenverwaltung übertragen werden.

    Diese Werte müssen evtl. um Werte für nicht mit der Anlagenverwaltung verwaltete Anlagen ergänzt werden.

    Sofern gar keine Anlagen in der Anlagenverwaltung erfasst wurden, sondern diese manuell gebucht wurden, muss der E-Bilanz-Anlagespiegel manuell ausgefüllt werden:
    Manuelle Abschreibungswerte eintragen

    Zu den KI-Sachen:

    UrsacheBeschreibungWirkung
    Fehlende öffentliche DatenReale E-Bilanz/XBRL-Daten kaum öffentlichKI kennt Struktur nicht
    Komplexe semantische BeziehungenHierarchische und kontextabhängige ZuordnungenKI „halluziniert“ plausible, aber falsche Mappings
    Zu große Token-MengenTaxonomien und SKR-Tabellen zu umfangreichModell verliert Fokus auf relevante Zusammenhänge

    chatGPT Plus im Abo ist auch einfach zu preiswert, es scheint derzeit stark ausgelastet zu sein, da es nicht strenge Nutzungslimits wie Claude hat, die Preise von Claude Pro/Max zeigen schon eher, was KI den Betreiber kostet.