feat(handelsware-datev): API, Kontenliste mit Zeilenschutz und DATEV-Export
- Prisma-Modelle HandelswareDatevConfig und HandelswareKonto mit Zeilenschutz (Migration 20261002130000) - XLSX lesen (B1 Kopf, A/B ab Zeile 2, Zahl oder deutscher Text), Konten zuordnen, TXT erzeugen - neue Konten werden nur beim Export in einer mandantengebundenen Transaktion gespeichert (409 bei geaenderter Liste) - Konten-CSV Import (alles ersetzen) und Export mit Schutz vor Formeleinschleusung - Einstellungen nur fuer Administratoren, statische Routen vor accounts/:id Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
import { Transform } from 'class-transformer';
|
||||
import { IsInt, IsString, Length, Matches, Max, Min } from 'class-validator';
|
||||
|
||||
const trim = ({ value }: { value: unknown }) => (typeof value === 'string' ? value.trim() : value);
|
||||
|
||||
/** Anlegen und Aendern eines Kontos der Kontenliste (quick-261002-fm5). */
|
||||
export class HandelswareAccountDto {
|
||||
@Transform(trim)
|
||||
@IsString({ message: 'Der Name muss angegeben werden' })
|
||||
@Length(1, 120, { message: 'Der Name muss 1 bis 120 Zeichen lang sein' })
|
||||
@Matches(/^[^\t\r\n]*$/, {
|
||||
message: 'Der Name darf keine Tabulatoren oder Zeilenumbrüche enthalten',
|
||||
})
|
||||
name!: string;
|
||||
|
||||
@IsInt({ message: 'Das Gegenkonto muss eine ganze Zahl sein' })
|
||||
@Min(1, { message: 'Das Gegenkonto muss mindestens 1 sein' })
|
||||
@Max(999999999, { message: 'Das Gegenkonto darf höchstens 999999999 sein' })
|
||||
gegenkonto!: number;
|
||||
|
||||
@IsInt({ message: 'Das Erlöskonto muss eine ganze Zahl sein' })
|
||||
@Min(1, { message: 'Das Erlöskonto muss mindestens 1 sein' })
|
||||
@Max(999999999, { message: 'Das Erlöskonto darf höchstens 999999999 sein' })
|
||||
erloeskonto!: number;
|
||||
}
|
||||
Reference in New Issue
Block a user