Merge branch 'worktree-agent-a02f88e8490625846'

# Conflicts:
#	GerbilManagerWebAPI/ApplicationContext.cs
#	GerbilManagerWebAPI/Program.cs
#	gerbil-manager-web/e2e/mock-data.ts
#	gerbil-manager-web/src/App.tsx
#	gerbil-manager-web/src/components/AppShell.tsx
#	gerbil-manager-web/src/strings/de.ts
This commit is contained in:
2026-06-22 23:07:22 +02:00
17 changed files with 2646 additions and 0 deletions

View File

@@ -0,0 +1,48 @@
using System.ComponentModel.DataAnnotations;
namespace GerbilManagerWebAPI.Models
{
/// <summary>
/// RÜCKNAHME (RPRO3 getback_tb): ein bereits abgegebenes Tier kommt zur Züchterin
/// zurück. Bewusst vom restlichen Modell entkoppelt — GerbilId/FromContactId sind
/// einfache nullable Guid-Spalten (KEINE Foreign Keys), genau wie bei <see cref="Feedback"/>.
/// Dadurch überleben Rücknahmen den Import-Re-Ingest-Wipe (IngestResolvedService löscht
/// Gerbils/Contacts, ohne diese Tabelle anzufassen). Der erfasste GerbilName hält den
/// Datensatz auch dann lesbar, wenn das referenzierte Tier neu eingespielt/entfernt wurde.
/// </summary>
public class ReturnRecord
{
[Key]
public Guid Id { get; set; }
/// <summary>Lose Referenz (kein FK) auf das zurückgekommene Tier (_TID).</summary>
public Guid? GerbilId { get; set; }
/// <summary>Erfasster Tiername — überlebt einen Ingest-Wipe (bleibt lesbar).</summary>
public string? GerbilName { get; set; }
/// <summary>Rücknahmedatum (_ZAM).</summary>
public DateTime? ReturnDate { get; set; }
/// <summary>Rücknahmepreis (_ZPREIS) — was die Züchterin bei der Rücknahme zahlte/erstattete.</summary>
public decimal? ReturnPrice { get; set; }
/// <summary>Ursprünglicher Abgabepreis (_PREIS), zur Historie mitgeführt.</summary>
public decimal? OriginalPrice { get; set; }
/// <summary>Ursprüngliches Abgabedatum (_AM), zur Historie mitgeführt.</summary>
public DateTime? OriginalSaleDate { get; set; }
/// <summary>Lose Referenz (kein FK) auf den Kontakt, von dem das Tier zurückkam (_ABN).</summary>
public Guid? FromContactId { get; set; }
/// <summary>Erfasster Kontaktname — überlebt einen Ingest-Wipe (bleibt lesbar).</summary>
public string? FromContactName { get; set; }
/// <summary>Freitext-Grund/Notiz zur Rücknahme (_BEM).</summary>
public string? Note { get; set; }
/// <summary>Server-seitige Anlagezeit.</summary>
public DateTimeOffset CreatedAt { get; set; }
}
}