File size: 1,685 Bytes
e418416 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | from typing import Any
def _value(analysis: Any, key: str):
if isinstance(analysis, dict):
return analysis.get(key, "")
return getattr(analysis, key, "")
def generate_markdown_report(analysis: Any) -> str:
lines = [
f"# Informe de Análisis: {_value(analysis, 'fit_score')}% de ajuste",
"",
f"**Decisión:** {_value(analysis, 'decision')}",
"",
"## Resumen Ejecutivo",
_value(analysis, "executive_summary"),
"",
"## Requisitos Clave",
]
for req in _value(analysis, "key_requirements") or []:
lines.append(f"- {req}")
lines.append("")
lines.append("## Riesgos")
for risk in _value(analysis, "risks") or []:
if isinstance(risk, dict):
lines.append(f"- **{risk.get('title', 'Riesgo')}** ({risk.get('severity', 'Medium')}): {risk.get('explanation', '')}")
else:
lines.append(f"- {str(risk)}")
lines.append("")
lines.append("## Brechas de Cumplimiento")
for gap in _value(analysis, "compliance_gaps") or []:
lines.append(f"- {str(gap)}")
lines.append("")
lines.append("## Plan de Acción")
for item in _value(analysis, "action_plan") or []:
if isinstance(item, dict):
lines.append(
f"- **{item.get('task', 'Tarea')}** | Prioridad: {item.get('priority', 'Medium')} | Responsable: {item.get('owner', 'Team')} | Tiempo: {item.get('timeline', 'TBD')}"
)
else:
lines.append(f"- {str(item)}")
lines.append("")
lines.append("## Borrador de Propuesta")
lines.append(_value(analysis, "proposal_draft"))
return "\n".join(lines)
|