"""Wspólne składanie markdown wniosku z sekcji projektu (PL tytuły).""" from scripts.seed_section_templates import TEMPLATES UNIVERSAL_FALLBACK_MAP = { "project_summary": "Streszczenie Projektu", "company_potential": "Opis przedsiębiorstwa i potencjał", "innovation_description": "Opis innowacji / B+R", "market_analysis": "Analiza rynku i konkurencji", "research_agenda": "Agenda badawcza / cele", "trl_levels": "Poziom gotowości technologii (TRL)", "budget_and_costs": "Budżet i kwalifikowalność kosztów", "work_schedule": "Harmonogram rzeczowo-finansowy", "project_team": "Zespół projektowy", "risk_management": "Zarządzanie ryzykiem", "social_impact_dnsh": "Wpływ społeczny i środowiskowy (DNSH)", "intellectual_property": "Prawa własności intelektualnej", "success_metrics": "Wskaźniki sukcesu i ewaluacja", "final_document": "Dokument końcowy", "FINAL_DOCUMENT": "Wniosek końcowy", "PROJECT_SUMMARY": "Streszczenie Projektu", "BUDGET": "Budżet i kwalifikowalność kosztów", "company_overview": "Przegląd firmy", "company": "Informacje o firmie", "dnsh": "Zasada DNSH", "risk": "Analiza Ryzyka", "schedule": "Harmonogram Projektu", "kpi": "Wskaźniki KPI", "budget_details": "Szczegóły Budżetu", "applicant": "Wnioskodawca i powiązania", "team": "Zespół zarządzający i projektowy", "market": "Analiza zapotrzebowania i rynku", "innovation": "Innowacyjność (TRL) i znaczenie projektu", "module_br": "Moduł B+R: Plan prac", "module_implementation": "Moduł Wdrożenie Innowacji", "module_infrastructure": "Moduł Infrastruktura B+R", "module_digitalization": "Moduł Cyfryzacja", "module_green": "Moduł Zazielenienie przedsiębiorstw", "module_internationalization": "Moduł Internacjonalizacja", "module_competence": "Moduł Kompetencje", "sustainable": "Zrównoważony rozwój i zasada DNSH", "budget": "Budżet", "kpi_risk": "Wskaźniki KPI i analiza ryzyka", "attachments": "Załączniki i Oświadczenia", "description": "Opis inwestycji", "animals": "Dobrostan zwierząt / modernizacja", "profitability": "Analiza opłacalności", "environment": "Wpływ na środowisko", "technical_attachments": "Załączniki techniczne", "risk_assessment": "Ocena ryzyka zawodowego", "improvement_plan": "Plan poprawy warunków pracy", "scope": "Zakres inwestycji BHP", "results": "Oczekiwane efekty", } def get_template_titles_for_project(project) -> dict: titles = {} for tmpl in TEMPLATES: if tmpl["program_type"] == project.program_type: titles[tmpl["section_type"]] = tmpl["title"] return titles def resolve_section_title(section, template_titles: dict | None = None) -> str: explicit = getattr(section, "title", None) if explicit and str(explicit).strip(): return str(explicit).strip() section_type = getattr(section, "section_type", "") or "" if template_titles and section_type in template_titles: return template_titles[section_type] return UNIVERSAL_FALLBACK_MAP.get( section_type, section_type.replace("_", " ").title(), ) def build_markdown_from_sections(project, sections, template_titles: dict | None = None) -> str: template_titles = template_titles or {} company_name = "" if project.external_context and "company_data" in project.external_context: company_name = project.external_context["company_data"].get("name", "") header = ( f"# Wniosek o dofinansowanie - {company_name}" if company_name else "# Wniosek o dofinansowanie" ) toc = ["## Spis Treści\n"] body_parts = [] section_num = 0 for sec in sections: if not sec.content or not str(sec.content).strip(): continue section_num += 1 title = resolve_section_title(sec, template_titles) toc.append(f"{section_num}. {title}") body_parts.append(f"## {section_num}. {title}\n\n{str(sec.content).strip()}") if not body_parts: return "" return header + "\n\n" + "\n".join(toc) + "\n\n" + "\n\n".join(body_parts)