diff --git a/backend-compliance/compliance/services/founding_wizard/wizard_to_context.py b/backend-compliance/compliance/services/founding_wizard/wizard_to_context.py index db4dd851..0ec89332 100644 --- a/backend-compliance/compliance/services/founding_wizard/wizard_to_context.py +++ b/backend-compliance/compliance/services/founding_wizard/wizard_to_context.py @@ -280,6 +280,103 @@ def base_context(state: dict[str, Any]) -> dict[str, Any]: "POST_EXIT_BAD_MONTHS": 24, "ROLES_DESCRIPTION": _roles_description(gesellschafter), "SIGNATURE_DATE": notar.get("notarial_date", "[Datum]"), + # Gesellschafterliste + "LIST_DATE": notar.get("notarial_date", "[Datum]"), + "LIST_AUTHOR": gf_list[0].get("name", "") if gf_list else "", + "LIST_AUTHOR_ROLE": "Geschäftsführer", + "LIST_REASON": "Erstaufstellung gemäß § 40 GmbHG", + "SIGNATORY_NAME": gf_list[0].get("name", "") if gf_list else "", + "SIGNATORY_ROLE": "Geschäftsführer", + "SIGNATORY_2_NAME": gf_list[1].get("name", "") if len(gf_list) > 1 else "", + "SIGNATORY_2_ROLE": "Geschäftsführer", + "MULTI_SIGNATORY": len(gf_list) > 1, + # Bestellungsbeschluss + "MEETING_LOCATION": notar.get("notary_place", "[Notarsitz]"), + "RESOLUTION_FORM": "notariell beurkundet", + "ANWESENHEITSQUOTE_PCT": 100, + "IS_EINSTIMMIG": True, + "BESCHLUSS_MEHRHEIT_PCT": 100, + "IS_PRESENCE_MEETING": True, + "IS_SINGLE_APPOINTMENT": num_gf == 1, + "IS_MULTI_APPOINTMENT": num_gf > 1, + "IS_FIRST_APPOINTMENT": True, + "IS_PLURAL_GF": num_gf > 1, + "GF_NAME": gf_list[0].get("name", "") if gf_list else "", + "GF_BIRTHDATE": gf_list[0].get("geburtsdatum", "") if gf_list else "", + "GF_BIRTHDATE_PLACE": "[Geburtsort]", + "GF_ADDRESS": gf_list[0].get("adresse", "") if gf_list else "", + "GF_VERTRETUNG": "einzelvertretungsberechtigt" if num_gf == 1 else "gemeinsam mit einem weiteren Geschäftsführer vertretungsberechtigt", + "GF_PARA_181_RELEASE": True, + "GF_LISTE_MIT_VERTRETUNGSART": "\n".join( + f"- {g.get('name', '')}, geb. {g.get('geburtsdatum', '')}, wohnhaft in {g.get('adresse', '')}, " + f"vertretungsberechtigt {'allein' if num_gf == 1 else 'gemeinsam'}; § 181 BGB-Befreiung erteilt" + for g in gf_list + ), + "HAS_RESSORT_ZUWEISUNG": True, + "HAS_DIENSTVERTRAG": True, + "SIGNATURES_GESELLSCHAFTER": "\n".join( + f"___________________________\n{g.get('name', '')}" + for g in gesellschafter + ), + "HAS_VERSICHERUNG_BESTELLT": True, + "BELEHRUNG_DURCH": "den beurkundenden Notar", + "HAS_DELAYED_START": False, + # HRB-Anmeldung + "VERTRETUNGSREGELUNG": ( + "Die Gesellschaft wird durch einen Geschäftsführer allein vertreten." + if num_gf == 1 else + "Die Gesellschaft wird durch zwei Geschäftsführer gemeinsam vertreten. " + "Bei nur einem bestellten Geschäftsführer Einzelvertretung." + ), + "GF_SIGNATURES_BEGLAUBIGUNG": "\n".join( + f"___________________________\n{g.get('name', '')}, Geschäftsführer" + for g in gf_list + ), + "HAS_EMPFANGSBERECHTIGTER": False, + "EMPFANGSBERECHTIGTER_NAME": "", + "EMPFANGSBERECHTIGTER_ADDRESS": "", + "HAS_GENEHMIGUNG": False, + "GENEHMIGUNG_DETAILS": "", + "NEXT_DOC_NUMBER": 6, + # GF-Dienstvertrag (Defaults für alle GFs, einzelne Felder per Contract überschreiben) + "COMPANY_REPRESENTATIVE": "die Gesellschafterversammlung", + "APPOINTMENT_DATE": notar.get("notarial_date", "[Datum]"), + "GF_INTERNAL_TITLE": gf_list[0].get("internal_role", "Geschäftsführer") if gf_list else "Geschäftsführer", + "CONTRACT_START_DATE": notar.get("notarial_date", "[Datum]"), + "HAS_PARA_181_RELEASE": True, + "PARA_181_RELEASE_DATE": notar.get("notarial_date", "[Datum]"), + "HAS_BONUS": False, "HAS_TANTIEME": False, "HAS_COMPANY_CAR": False, "HAS_BAV": False, + "HAS_HINTERBLIEBENEN_VERSORGUNG": False, "HAS_KOPPLUNG_BESTELLUNG_VERTRAG": False, + "HAS_NONCOMPETE_COMPENSATION": False, + "POST_CONTRACT_NONCOMPETE_MONTHS": 12, + "GROSS_ANNUAL_SALARY_EUR": "84.000", + "COMPANY_CAR_CLASS": "", + "BAV_EMPLOYER_PCT": 0, + "SV_STATUS": "sozialversicherungsfrei", + "VACATION_DAYS": 30, + "KRANKHEIT_FORTZAHLUNG_WOCHEN": 6, + "AU_BESCHEINIGUNG_TAG": 4, + "HINTERBLIEBENEN_VERSORGUNG_MONATE": 6, + "DO_INSURANCE_EUR": "5.000.000", + "KUENDIGUNGSFRIST_GESELLSCHAFT_MONATE": 6, + "KUENDIGUNGSFRIST_GF_MONATE": 3, + "ANNEX_LIST": "- Anlage 1: Bonusplan (sofern vereinbart)\n- Anlage 2: D&O-Versicherungspolice", + # IP-Assignment + "ASSIGNOR_NAME": gf_list[0].get("name", "") if gf_list else "", + "ASSIGNOR_BIRTHDATE": gf_list[0].get("geburtsdatum", "") if gf_list else "", + "ASSIGNOR_ADDRESS": gf_list[0].get("adresse", "") if gf_list else "", + "ASSIGNOR_ROLE": gf_list[0].get("internal_role", "Gründer und Geschäftsführer") if gf_list else "Gründer", + "AGREEMENT_DATE": notar.get("notarial_date", "[Datum]"), + "HAS_BAR_VERGUETUNG": False, + "HAS_SHARES_AS_COMPENSATION": True, + "HAS_NO_VERGUETUNG": False, + "IP_VERGUETUNG_EUR": 0, + "ZAHLUNGSFRIST_TAGE": 30, + "GUARANTEE_VERJAEHRUNG_JAHRE": 3, + "HAS_ACADEMIC_BACKGROUND": has_academic, + "SIGNATURE_LOCATION": basics.get("company_seat", "[Sitz]"), + "IP_LIST_DETAILS": "- Software-Architektur und Quellcode (bestehend zum Zeitpunkt der Gründung)\n- Konzepte, Designs, Datenbankstrukturen\n- Marken, Logos, Domainnamen", + "IP_EXCEPTIONS_DETAILS": "Keine Ausnahmen bekannt.", } # Ressort-Variablen aus GF-Liste ableiten (1 Ressort pro GF) ressort_defaults = [