Gutschriften Phase 2a: Kleinunternehmer-Flag am Kunden + USt-Default
Kunden-Feld vatExempt (Kleinunternehmer/USt-befreit §19) + Migration (ADD COLUMN IF NOT EXISTS). Checkbox im Kundenformular nur fuer Firmenkunden. Gutschrift-Vorbelegung vatRelevant wird aus dem Kunden abgeleitet: Firmenkunde ohne USt-Befreiung -> USt-relevant an (Netto), sonst aus (wie Privat). Jede Gutschrift speichert ihren eigenen Snapshot, ein spaeterer Statuswechsel des Kunden aendert bestehende Gutschriften nicht. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -132,13 +132,26 @@ export async function getCreditNoteById(id: number) {
|
||||
return prisma.creditNote.findUnique({ where: { id } });
|
||||
}
|
||||
|
||||
// Ermittelt den Default-Kundentyp aus dem Vertrag (Firma vs. Privat).
|
||||
export async function getDefaultCustomerType(contractId: number): Promise<CreditNoteCustomerType> {
|
||||
// Ermittelt die Formular-Vorbelegung aus dem Kunden:
|
||||
// - customerType: Firma vs. Privat (aus Kunde.type)
|
||||
// - vatRelevant : Default nur bei Firmenkunde OHNE USt-Befreiung
|
||||
// (Kleinunternehmer §19 → wie Privat, keine USt-Vorbelegung).
|
||||
// WICHTIG: Das ist nur die Vorbelegung. Jede angelegte Gutschrift speichert
|
||||
// ihren eigenen Snapshot; ein späterer Statuswechsel des Kunden ändert
|
||||
// bestehende Gutschriften nicht.
|
||||
export async function getCreditNoteDefaults(
|
||||
contractId: number,
|
||||
): Promise<{ customerType: CreditNoteCustomerType; vatRelevant: boolean }> {
|
||||
const contract = await prisma.contract.findUnique({
|
||||
where: { id: contractId },
|
||||
select: { customer: { select: { type: true } } },
|
||||
select: { customer: { select: { type: true, vatExempt: true } } },
|
||||
});
|
||||
return contract?.customer?.type === 'BUSINESS' ? 'FIRMA' : 'PRIVAT';
|
||||
const isBusiness = contract?.customer?.type === 'BUSINESS';
|
||||
const vatExempt = !!contract?.customer?.vatExempt;
|
||||
return {
|
||||
customerType: isBusiness ? 'FIRMA' : 'PRIVAT',
|
||||
vatRelevant: isBusiness && !vatExempt,
|
||||
};
|
||||
}
|
||||
|
||||
export async function createCreditNote(
|
||||
|
||||
@@ -146,6 +146,7 @@ export async function createCustomer(data: {
|
||||
phone?: string;
|
||||
mobile?: string;
|
||||
taxNumber?: string;
|
||||
vatExempt?: boolean;
|
||||
businessRegistration?: string;
|
||||
commercialRegister?: string;
|
||||
notes?: string;
|
||||
@@ -173,6 +174,7 @@ export async function updateCustomer(
|
||||
phone?: string;
|
||||
mobile?: string;
|
||||
taxNumber?: string;
|
||||
vatExempt?: boolean;
|
||||
businessRegistration?: string;
|
||||
commercialRegister?: string;
|
||||
notes?: string;
|
||||
|
||||
Reference in New Issue
Block a user