Spaces:
Running
Running
| """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) | |