{{ env.get('CLIENT_NAME', 'Client') }} × {{ branding.brand_name|default(env.get('VENDOR_NAME', 'Vendor')) }}

{{ env.get('PROJECT_NAME', 'fscope Presales Report') }}

{{ env.get('SCOPE_SUMMARY', 'A consolidated view of the proposed scope, implementation estimate, and delivery programme.') }}

{% set total_md = namespace(val=0) %}{% for s in scenario_mapping %}{% set total_md.val = total_md.val + (s.mandays|float if s.mandays else (s.effort_weeks|float * s.team_size|float)) %}{% endfor %} {% set daily_rate = env.get('DAILY_RATE', '2000')|float %} {% set usd_rate = env.get('USD_RATE', '7.1')|float %} {% set total_cost = total_md.val * daily_rate %} {% set total_cost_usd = (total_cost / usd_rate)|round(2) if usd_rate else 0 %}
{{ total_md.val|int }}Total Mandays
{{ scenario_mapping|length }}Capabilities Mapped
¥{{ '{:,.0f}'.format(total_cost) }}Estimated Cost (RMB)
${{ '{:,.2f}'.format(total_cost_usd) }}Estimated Cost (USD)

1. Project Background

{% if background %} {% for b in background %}{% endfor %}
SectionContentSource
{{ b.section }}{{ b.content }}{{ b.source_file }}
{% else %}

No background entries recorded.

{% endif %}

2. Key Events Timeline

{% if event_timeline %} {% set sorted_events = event_timeline|sort(attribute='date') %}
{% for e in sorted_events %}
{{ e.date }}
{{ e.event }}
{% if e.actor %}{{ e.actor }}{% endif %}{% if e.source %} · Source: {{ e.source }}{% endif %}
{% if e.notes %}
{{ e.notes }}
{% endif %}
{% endfor %}
{% else %}

No timeline events recorded.

{% endif %}

3. Assumptions

Planning assumptions that shape scenario mapping, estimates and delivery sequencing.
{% if assumptions %} {% for a in assumptions %}{% endfor %}
IDAssumptionRationaleImpactSourceStatus
{{ a.id }}{{ a.assumption }}{{ a.rationale }}{{ a.impact }}{{ a.source }}{{ a.status }}
{% else %}

No assumptions recorded.

{% endif %}

4. Scope & Estimate

A capability-led view of all functionality and integrations.
{% if scenario_mapping %} {% set epics = namespace(dict={}) %} {% for s in scenario_mapping %} {% set ep = s.epic or 'Uncategorized' %} {% if ep not in epics.dict %}{% set _ = epics.dict.update({ep: []}) %}{% endif %} {% set _ = epics.dict[ep].append(s) %} {% endfor %} {% for epic_name in report_order.epics %} {% set items = epics.dict[epic_name] %} {% for s in items %} {% set st = (s.scenario or '')|lower %} {% if st == 'existing' or st == 'platform' %}{% set badge_class = 'included' %} {% elif st == 'customization' %}{% set badge_class = 'configuration' %} {% else %}{% set badge_class = 'implementation' %}{% endif %} {% set row_md = s.mandays|float if s.mandays else (s.effort_weeks|float * s.team_size|float) %} {% endfor %} {% endfor %} {% else %}{% endif %}
EpicReqDescriptionProviderScenarioComplexityWeeksTeamPhasePricing
{{ epic_name }}
{{ epic_name }} {{ s.requirement_id }} {{ s.capability }} {{ s.provider }} {{ (s.scenario or '')|capitalize }} {{ s.complexity }} {{ s.effort_weeks }} {{ s.team_size }} {{ s.phase }} {{ s.pricing_strategy }}
No scope items recorded. Run 'fscope scenario map' to add.

5. Cost Estimation

{% if cost_estimation %} {% for c in cost_estimation %}{% set phase = c.phase or '' %}{% set bd = {} %}{% if c.breakdown_json %}{% set bd = c.breakdown_json|json_loads %}{% endif %}

{{ phase }}

TeamTotal WeeksTotal MandaysCost (RMB)Cost (USD)
{{ c.team_size }}{{ c.total_weeks }}{{ c.total_mandays }}¥{{ c.cost_rmb }}${{ c.cost_usd }}
{% if bd %} {% set ordered = report_order.types.get(phase, bd.keys()) %}{% for scenario_name in ordered %}{% if scenario_name in bd %}{% set cd = bd[scenario_name] %} {% endif %}{% endfor %}
ScenarioWeeksMandaysCost (RMB)Cost (USD)
{{ scenario_name|scenario_label }}{{ cd.weeks }}{{ cd.mandays }}¥{{ cd.cost_rmb }}${{ cd.cost_usd }}
{% endif %}
{% endfor %} {% else %}

No cost data. Run 'fscope cost estimate' first.

{% endif %}

6. Delivery Timeline

{% if gantt_bars %} {% set total_weeks = total_weeks|default(12)|int %}{% if total_weeks < 1 %}{% set total_weeks = 12 %}{% endif %} {% set week_step = week_step|default(1)|int %}{% if week_step < 1 %}{% set week_step = 1 %}{% endif %} {% set phases = namespace(list=[]) %}{% for b in gantt_bars %}{% if b.phase not in phases.list %}{% set _ = phases.list.append(b.phase) %}{% endif %}{% endfor %} {% if gantt_legend %}
{% for item in gantt_legend %}{{ item.label }}{% endfor %}
{% endif %}
Phase
Scenario
{% for w in range(1, total_weeks+1) %}{% if w == 1 or w % week_step == 0 or w == total_weeks %}
W{{ w }}
{% else %}
{% endif %}{% endfor %}
{% set phase_state = namespace(last='') %}{% for bar in gantt_bars %}
{{ bar.phase if bar.phase != phase_state.last else '' }}
{{ bar.scenario_label }}{{ bar.weeks }}w{{ bar.start_date }} - {{ bar.end_date }}
{{ bar.scenario_label }}
{% set phase_state.last = bar.phase %} {% endfor %}
Week counts are indicative and subject to detailed planning. Total: {{ total_weeks }} weeks.
{% else %}

No timeline data. Run 'fscope timeline plan' first.

{% endif %}

7. Report Change Log

Human-requested report edits, comments and resulting data changes.
{% if report_change_log %}
{% for c in report_change_log %}
{{ c.timestamp }}
{{ c.actor }} {{ c.action }} {{ c.target }}
{{ c.summary }}{% if c.source %} · Source: {{ c.source }}{% endif %}
{% if c.data_changes %}
{{ c.data_changes }}
{% endif %}
{% endfor %}
{% else %}

No report change log entries recorded.

{% endif %}