fscope Presales Report

{{ requirements|length }}
Requirements
{{ scenario_mapping|length }}
Mapped Scenarios
{% set roadmap_count = count_scenario(scenario_mapping, 'roadmap') %} {% set custom_count = count_scenario(scenario_mapping, 'custom') %} {% set existing_count = scenario_mapping|length - roadmap_count - custom_count %}
{{ existing_count }}
Existing Features
{{ roadmap_count }}
Roadmap Items
{{ custom_count }}
Customizations

1. Project Background & Client Requirements

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

No background entries recorded. Use fscope req add with source files to populate this section.

{% 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 }}
{{ e.actor }} {% if e.source %}Source: {{ e.source }}{% endif %}
{% if e.notes %}
{{ e.notes }}
{% endif %}
{% endfor %}
{% else %}

No timeline events recorded.

{% endif %}

3. CareVoice Proposed Solution

{% if solution %} {% for s in solution %} {% endfor %}
ComponentDescriptionService ProviderReference
{{ s.component }}{{ s.description }}{{ s.service_provider }}{{ s.reference }}
{% else %}

No solution components recorded.

{% endif %}

4. Requirements Evaluation

{% for r in requirements %} {% endfor %}
IDTitleCategoryStatusSource
{{ r.id }}{{ r.title }}{{ r.category }}{{ r.status }}{{ r.source }}

5. Scenario Mapping

{% if scenario_mapping %} {% set has_hier = false %} {% for s in scenario_mapping %}{% if s.scenario or s.sub_scenario or s.scenario_item %}{% set has_hier = true %}{% endif %}{% endfor %} {% if has_hier %} {% set groups = namespace(dict={}) %} {% for s in scenario_mapping %} {% set sc = s.scenario or 'Uncategorized' %} {% set su = s.sub_scenario or '—' %} {% set si = s.scenario_item or '—' %} {% if sc not in groups.dict %}{% set _ = groups.dict.update({sc: {}}) %}{% endif %} {% if su not in groups.dict[sc] %}{% set _ = groups.dict[sc].update({su: {}}) %}{% endif %} {% if si not in groups.dict[sc][su] %}{% set _ = groups.dict[sc][su].update({si: []}) %}{% endif %} {% set _ = groups.dict[sc][su][si].append(s) %} {% endfor %} {% for sc in groups.dict|sort %}

{{ sc }}

{% for su in groups.dict[sc]|sort %}

{{ su }}

{% for si in groups.dict[sc][su]|sort %} {% for s in groups.dict[sc][su][si] %} {% endfor %} {% endfor %}
SourceService ProviderScenario ItemTypeProviderPricingWeeksTeamPhase
{{ s.categorization }}{{ s.service_provider }}{{ si }}{{ s.scenario_type }}{{ s.provider }}{{ s.pricing_strategy }}{{ s.effort_weeks }}{{ s.team_size }}{{ s.phase }}
{% endfor %} {% endfor %} {% else %} {% for s in scenario_mapping %} {% endfor %}
Req IDCapabilityProviderScenario_TypeComplexityWeeksTeamPhase
{{ s.requirement_id }}{{ s.capability }}{{ s.provider }}{{ s.scenario_type }}{{ s.complexity }}{{ s.effort_weeks }}{{ s.team_size }}{{ s.phase }}
{% endif %} {% else %}

No scenario mappings recorded.

{% endif %}

6. 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 }}
{% for cls_name in bd|sort %} {% set cd = bd[cls_name] %} {% endfor %}
Scenario_TypeWeeksMandaysCost (RMB)Cost (USD)
{{ cls_name }} {{ cd.weeks }} {{ cd.mandays }} ¥{{ cd.cost_rmb }} ${{ cd.cost_usd }}
{% endfor %} {% else %}

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

{% endif %}

7. Delivery Timeline

{% if delivery_timeline %} {% set phases = namespace(dict={}) %} {% for t in delivery_timeline %} {% set p = t.phase or 'Unknown' %} {% if p not in phases.dict %}{% set _ = phases.dict.update({p: []}) %}{% endif %} {% set _ = phases.dict[p].append(t) %} {% endfor %} {% set tasks_json = [] %} {% for phase_name in phases.dict %} {% for t in phases.dict[phase_name] %} {% set sub = t.sub_phase or '' %} {% set start = t.start_date or '' %} {% set end = t.end_date or '' %} {% set dur = t.duration_weeks|float if t.duration_weeks else 0 %} {% set sub_lower = sub|lower %} {% if 'publish' in sub_lower or 'release' in sub_lower %} {% set css = 'gantt-crit' %} {% elif 'development' in sub_lower %} {% set css = 'gantt-active' %} {% else %} {% set css = 'gantt-standard' %} {% endif %} {% set name = phase_name ~ ' - ' ~ sub if sub else phase_name %} {% set task = '{id:"' ~ t.id ~ '",name:"' ~ name ~ '",start:"' ~ start ~ '",end:"' ~ end ~ '",progress:0,custom_class:"' ~ css ~ '",dependencies:""}' %} {% set _ = tasks_json.append(task) %} {% endfor %} {% endfor %}
{% for phase_name in phases.dict %} {% for t in phases.dict[phase_name] %} {% endfor %} {% endfor %}
PhaseSub-PhaseStartEndWeeksDeliverables
{{ t.phase }}{{ t.sub_phase }}{{ t.start_date }}{{ t.end_date }}{{ t.duration_weeks }}{{ t.deliverables }}
{% else %}

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

{% endif %}