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:
@@ -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) => ({
|
||||
|
||||
403
docs/FALUKANT_DEBTORS_PRISON_CONCEPT.md
Normal file
403
docs/FALUKANT_DEBTORS_PRISON_CONCEPT.md
Normal 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.
|
||||
|
||||
Reference in New Issue
Block a user