Refactor political office type references in FalukantService: Update the alias for PoliticalOfficeType from 'officeType' to 'type' in multiple locations to improve clarity and consistency in candidate ranking logic.

This commit is contained in:
Torsten Schulz (local)
2026-03-23 11:11:40 +01:00
parent 57ab85fe10
commit f2343098d2
2 changed files with 409 additions and 6 deletions

View File

@@ -5373,7 +5373,7 @@ class FalukantService extends BaseService {
const [politicalOffices, politicalHistories] = await Promise.all([
PoliticalOffice.findAll({
where: { characterId: character.id },
include: [{ model: PoliticalOfficeType, as: 'officeType', attributes: ['name'] }],
include: [{ model: PoliticalOfficeType, as: 'type', attributes: ['name'] }],
attributes: ['officeTypeId']
}),
PoliticalOfficeHistory.findAll({
@@ -5385,8 +5385,8 @@ class FalukantService extends BaseService {
const candidates = [
...politicalOffices.map((office) => ({
rank: POLITICAL_OFFICE_RANKS[office.officeType?.name] || 0,
name: office.officeType?.name || null
rank: POLITICAL_OFFICE_RANKS[office.type?.name] || 0,
name: office.type?.name || null
})),
...politicalHistories.map((history) => ({
rank: POLITICAL_OFFICE_RANKS[history.officeTypeHistory?.name] || 0,
@@ -5407,7 +5407,7 @@ class FalukantService extends BaseService {
const [politicalOffices, politicalHistories, churchOffices] = await Promise.all([
PoliticalOffice.findAll({
where: { characterId: character.id },
include: [{ model: PoliticalOfficeType, as: 'officeType', attributes: ['name'] }],
include: [{ model: PoliticalOfficeType, as: 'type', attributes: ['name'] }],
attributes: ['officeTypeId']
}),
PoliticalOfficeHistory.findAll({
@@ -5424,8 +5424,8 @@ class FalukantService extends BaseService {
const candidates = [
...politicalOffices.map((office) => ({
rank: POLITICAL_OFFICE_RANKS[office.officeType?.name] || 0,
name: office.officeType?.name || null,
rank: POLITICAL_OFFICE_RANKS[office.type?.name] || 0,
name: office.type?.name || null,
source: 'political'
})),
...politicalHistories.map((history) => ({

View File

@@ -0,0 +1,403 @@
# Falukant: Schuldturm, Pfändung und wirtschaftlicher Zusammenbruch
Dieses Dokument beschreibt das Zielmodell für den **Schuldturm** in Falukant. Ausgangspunkt ist das bestehende Kreditsystem mit `credit` und dem bereits vorhandenen, aber noch ungenutzten Datenmodell `debtors_prism`.
## 1. Bestandsaufnahme
Bereits vorhanden:
- Kredite in `falukant_data.credit`
- `amount`
- `remaining_amount`
- `interest_rate`
- `falukant_user_id`
- Bankübersicht in [BankView.vue](/mnt/share/torsten/Programs/YourPart3/frontend/src/views/falukant/BankView.vue)
- Modell `falukant_data.debtors_prism` über [debtors_prism.js](/mnt/share/torsten/Programs/YourPart3/backend/models/falukant/data/debtors_prism.js)
- Kreditaufnahme und Bankübersicht im Backend in [falukantService.js](/mnt/share/torsten/Programs/YourPart3/backend/services/falukantService.js)
Noch nicht vorhanden:
- fällige Kreditraten mit Verzug
- automatische Mahnlogik
- echte Schuldturm-Logik
- Pfändung / Verwertung von Vermögen
- Reputations- und Sozialfolgen
- Beziehungsfolgen für Liebhaber/Mätressen
- UI für Haftstatus / wirtschaftlichen Zusammenbruch
Wichtig:
- `debtors_prism` existiert bereits, ist aber funktional bisher nicht eingebunden.
- Ein Teil der eigentlichen Tick-Logik gehört in den externen Daemon.
- Das Backend muss dennoch Datenmodell, APIs und UI-Basis bereitstellen.
## 2. Kernidee
Wer seine Kreditverpflichtungen **über 3 Tage** nicht bedient, kommt in den **Schuldturm**.
Schuldturm bedeutet:
- Verlust wirtschaftlicher Handlungsfähigkeit
- staatliche / herrschaftliche Pfändung
- Zwangsverwertung veräußerbarer Güter
- sozialer und familiärer Absturz
Das System soll nicht nur eine Geldstrafe sein, sondern ein spürbarer Statuswechsel im Spiel.
## 3. Auslöser
### 3.1 Kreditverzug
Der Daemon prüft täglich:
- welche Kreditrate fällig war
- ob sie bedient wurde
- wie viele Verzugstage bestehen
Regel:
- `missed_days >= 3` bei mindestens einem aktiven Kredit
- danach Eintritt in den Schuldturm
### 3.2 Verhältnis zu Bankrott
Schuldturm ist der **harte Bankrottpfad für private Kreditverschuldung**.
Das bedeutet:
- nicht jeder Geldmangel führt sofort in den Schuldturm
- aber anhaltender Kreditverzug schon
Bankrott und Schuldturm können später getrennt modelliert werden:
- `wirtschaftlicher Bankrott`
- `privater Kreditverzug / Schuldturm`
Für die erste Stufe dürfen sie aber gekoppelt sein.
## 4. Zustand "im Schuldturm"
Ein Charakter im Schuldturm hat:
- kein normales wirtschaftliches Standing
- stark eingeschränkten Zugriff auf Vermögen
- massive Reputations- und Standesfolgen
Empfohlene Effekte:
- keine neuen Kredite
- keine neuen großen Investitionen
- keine Standeserhöhung
- keine neuen prestigeträchtigen Ämter
- evtl. eingeschränkte politische / kirchliche Karriere
## 5. Pfändungsreihenfolge
Beim Eintritt in den Schuldturm oder im Anschluss über mehrere Ticks wird Vermögen verwertet.
Empfohlene Reihenfolge:
1. frei verfügbares Geld
2. Transportmittel / Fahrzeuge
3. Lagerbestände / verwertbare Waren
4. Häuser / Hausbesitz
5. Schließung von Standorten / Niederlassungen
Wichtig:
- Nicht alles muss in einem Tick geschehen.
- Sinnvoll ist ein mehrstufiger Abbau, damit die UI den Prozess sichtbar machen kann.
## 6. Verwertbare Güter
### 6.1 Fahrzeuge
Transportmittel sollen verkauft werden, sofern sie nicht unpfändbar markiert sind.
Folgen:
- geringere Handlungsfähigkeit
- weniger Handelsoptionen
### 6.2 Lager und Waren
Lagerbestände und handelbare Waren sollen mit Abschlag verwertet werden.
Ziel:
- offene Kreditschuld reduzieren
- laufende Produktion destabilisieren
### 6.3 Haus
Das Haus soll gepfändet werden, wenn die Schuld nicht anders gedeckt werden kann.
Folgen:
- Rückfall auf ein niedrigeres Haus
- Einbruch bei Hauszustand, Hausstand und Dienerschaft
- negative Effekte auf Ehe, Haushalt und Stand
### 6.4 Niederlassungen
Standorte sollen geschlossen werden können, wenn Fahrzeuge/Waren/Haus nicht ausreichen.
Empfehlung:
- zuerst unrentable oder niedrigwertige Niederlassungen
- danach teurere / prestigeträchtigere
## 7. Soziale Folgen
### 7.1 Reputation
Beim Eintritt in den Schuldturm:
- spürbarer einmaliger Reputationsverlust
Während der Haft:
- täglicher oder periodischer weiterer Malus
### 7.2 Kreditwürdigkeit
Es braucht einen eigenen Zustand oder Wert:
- `creditworthiness`
oder
- `credit_penalty_level`
Folgen:
- geringere `availableCredit`
- höhere Gebühren
- evtl. komplette Kreditsperre für längere Zeit
### 7.3 Liebhaber / Mätressen
Liebhaber/Mätressen können abspringen.
Wirkung:
- hohe Chance bei geringer Zuneigung oder niedriger Finanzierung
- höhere Chance bei öffentlich gewordenem Schuldturm
- repräsentative Beziehungen brechen eher bei massivem Statusverlust
Mögliche Folgen:
- Beziehungsende
- starke Senkung von `affection`
- Sichtbarkeit eines Skandals
### 7.4 Ehe und Familie
Der Schuldturm soll auch auf Ehe und Hausfrieden wirken:
- `marriage_satisfaction` sinkt
- `household_tension_score` steigt
- Kinder-/Erbpfad kann instabiler werden
## 8. Bezug zu bereits existierenden Systemen
Der Schuldturm soll sich an bestehende Falukant-Systeme ankoppeln:
- Kredite
- Haus / Dienerschaft
- Familie / Liebschaften
- Reputation
- Produktionszertifikat
- Sozialstatus
### 8.1 Produktionszertifikat
Bankrott / Schuldturm kann ein Sonderfall für Zertifikatsverlust sein.
Das passt zur bereits dokumentierten Regel:
- Herabstufung bei `Bankrott`
### 8.2 Sozialstatus
Während oder nach schwerem Schuldturm:
- kein Aufstieg im Stand
- evtl. spätere Herabstufung im Extremfall
Für die erste Stufe reicht:
- Aufstieg blockieren
## 9. Daemon-Aufgaben
Der externe Daemon soll:
### 9.1 täglich prüfen
- fällige Kreditraten
- bezahlte / unbezahlte Beträge
- Verzugstage je Kredit oder Nutzer
### 9.2 Schuldturm auslösen
Wenn Verzug >= 3 Tage:
- Schuldturmstatus setzen
- Reputations- und Kreditwürdigkeits-Malus anwenden
- Socket-Events senden
### 9.3 Verwertung durchführen
In geordneter Reihenfolge:
- Geld abbuchen
- Fahrzeuge verkaufen
- Waren verwerten
- Häuser pfänden
- Niederlassungen schließen
### 9.4 Familienfolgen anwenden
- Ehe verschlechtern
- Haushaltsspannung erhöhen
- Liebschaften destabilisieren
## 10. Event-Kommunikation zwischen Daemon und UI
Neue Events:
### 10.1 `falukantUpdateDebt`
```json
{
"event": "falukantUpdateDebt",
"user_id": 123,
"reason": "delinquency"
}
```
Mögliche `reason`:
- `delinquency`
- `debtors_prison_entered`
- `asset_seizure`
- `branch_closure`
- `vehicle_liquidation`
- `house_seizure`
- `debtors_prison_released`
### 10.2 UI-Reaktion
- Bankansicht neu laden
- Haus neu laden
- Niederlassungen neu laden
- Statusbar / Dashboard neu laden
- Familienansicht ggf. neu laden
Zusätzlich sinnvoll:
- Toast für Eintritt in den Schuldturm
- Toast für Pfändung / Zwangsverkauf
## 11. Backend-Aufgaben außerhalb des Daemons
Das Backend muss:
- Schuldturmstatus lesbar machen
- Bankansicht um Verzug / Haftstatus erweitern
- veräußerbare Güter für den Daemon eindeutig bereitstellen
- Endpunkte und UI-Infos für den Schuldturm liefern
### 11.1 Datenmodell
Da `debtors_prism` bereits existiert, bietet sich dieses Modell an für:
- `character_id`
- `entered_at`
- `released_at`
- `status`
- `debt_at_entry`
- `remaining_debt`
- `reason`
Falls die Tabelle noch nur `character_id` enthält, muss sie erweitert werden.
### 11.2 Bank-API
Die Bankübersicht soll später zusätzlich liefern:
- `inDebtorsPrison`
- `daysOverdue`
- `nextForcedAction`
- `creditworthiness`
## 12. UI-Anforderungen
### 12.1 Bank
In [BankView.vue](/mnt/share/torsten/Programs/YourPart3/frontend/src/views/falukant/BankView.vue):
- Hinweis auf Zahlungsverzug
- Warnstufe bei 1 / 2 / 3 Tagen
- eigener Block für Schuldturmstatus
### 12.2 Übersicht / Status
In Falukant-Overview / StatusBar:
- sichtbarer Status "Schuldturm"
- evtl. reduzierter Handlungsstatus
### 12.3 Haus / Niederlassungen
- Hinweise bei Pfändung / Zwangsverkauf
- Schließungsereignisse sichtbar machen
### 12.4 Familie
- Hinweise auf abgesprungene Liebhaber / Mätressen
- Auswirkungen auf Ehe / Haushalt sichtbar
## 13. Empfohlene Umsetzung in Phasen
### Phase D1: Basis
- `debtors_prism` fachlich ausbauen
- Bank-API um Verzug und Haftstatus erweitern
- UI-Warnungen in Bank und Status
### Phase D2: Verwertung
- Fahrzeuge, Waren und Häuser als verwertbare Assets modellieren
- Daemon führt Pfändung schrittweise aus
### Phase D3: Soziale Folgen
- Reputation
- Kreditwürdigkeit
- Liebhaber / Mätressen
- Ehe / Hausfrieden
### Phase D4: Langfristige Folgen
- Produktionszertifikat
- Stand / Karriereblockaden
- eventuelle spätere Herabstufung
## 14. Offene Punkte
- genaue Kreditratenlogik im Daemon
- wie stark Häuser und Niederlassungen mit Abschlag verkauft werden
- ob Schuldturm zeitlich begrenzt oder rein schuldgetrieben endet
- ob Kreditwürdigkeit als eigener numerischer Wert gespeichert wird
## 15. Empfehlung
Für die erste echte Umsetzung:
1. `debtors_prism` ausbauen
2. Verzugstage im Daemon sauber pflegen
3. Eintritt in den Schuldturm sichtbar machen
4. zuerst Fahrzeuge/Waren/Haus, erst danach Niederlassungen
So bleibt der Spielzustand hart, aber nachvollziehbar und technisch gut integrierbar.