Portfolio project: a verified weekly business reporting assistant
In this article (6 sections)
A strong reporting-assistant portfolio project should show how its answer is calculated, checked and handed over for review. The finished demonstration should include a correct run, a deliberately wrong answer and an explanation of what the checker cannot establish.
This original project supplies a working local scaffold with synthetic data and authored narrative. It does not claim a live language-model integration, a real client outcome or an approved report. Adding and evaluating a model adapter is an optional extension.
Define a bounded weekly question
Prepare a summary of paid events occurring from January 5, 2026 at 00:00 UTC inclusive through January 12 exclusive. Use occurrence time for eligibility, deduplicate identical event IDs and reject conflicting duplicates. Apply the source-readiness checks before producing the report.
The source has seven raw rows and six unique events after one replay. E1, E2 and E5 are the three eligible paid events. Their amount is 3,500 paise, or INR 35.00. E2 arrives after the period ends but belongs to the week under the supplied readiness contract.
This fixed historical exercise is separate from the monthly completed-order lab. Its event population, timezone and 3,500-paise result must not be mixed with the monthly 104,000-paise measure.
Reproduce the reference packet
The complete project case links the source files, pipeline, checker, generated review packet and proposed assessment rubric.
from copy import deepcopy
from weekly_assistant import prepare,check,verify
from review import digest
packet = prepare()
assert packet['selected_event_ids']==['E1','E2','E5']
assert packet['metrics']['amount_paise']==3500
assert packet['metrics']['selected_events']==3
assert packet['metrics']['by_region']['Unknown']['amount_paise']==500
assert check(packet['candidate'],packet)['structured_checks_passed']
wrong = deepcopy(packet['candidate'])
wrong['selected_events']=7
assert 'selected_events_mismatch' in check(wrong,packet)['issues']
assert verify()['checks_passed']==12
assert packet['review_status']=='pending' and packet['distribution']=='not_sent'
print({'packet_sha256':digest(packet),'amount_paise':3500,
'selected_events':3,'wrong_raw_row_denominator_rejected':True,
'live_model_calls':0,'review_status':'pending'})North, South and Unknown contribute 1,000, 2,000 and 500 paise respectively. Their sum reconciles to the total. The scaffold preserves source hashes, configuration evidence, selected IDs and the narrative in one review packet.
Demonstrate failures that matter
The supplied tests reject a wrong amount, use of all seven raw rows as the selected-event count, a wrong unit, a shifted period, missing evidence and a numeric string. These are authored failure cases used to test the checking workflow.
A causal sentence with correct structured fields still passes the narrow checker. Show that limitation during the project demonstration and explain why human semantic review must reject the claim. Concealing the blind spot would make the portfolio less credible.
Editing the narrative changes the packet hash. A future approval process should bind its decision to that exact version. The current reference remains pending review and cannot send or publish anything.
Write a proportionate management summary
The reference wording reports INR 35.00 across three selected events, notes INR 5.00 from Unknown-region events and states that no prior-period or causal comparison is established. It does not call the amount profit or recognized revenue.
That summary is generated by a deterministic authored template. If a language model is added, keep arithmetic in the calculator and give the model a bounded evidence packet. Preserve the actual response and evaluate unsupported claims rather than assuming a more natural paragraph is more accurate.
Submit evidence a reviewer can inspect
Include the business question, metric contract, data dictionary, reproduction command, expected results, failure matrix, narrative and operating notes. Demonstrate a clean run from the documented directory, then show a seeded failure and its diagnostic.
The proposed project rubric awards points for correctness, reproducibility, verification, reasoning and review handover. Critical failures such as invented evidence or an unexplained monetary mismatch require rework regardless of presentation quality. These are proposed assessment criteria, not a claimed learner score.
Exercise: add a second synthetic week and specify how to compare it fairly. Check completeness and consistent definitions before writing a growth statement. Record the new expected values independently of any assistant output.
NeuraPath's Data Analytics with Generative AI course connects reporting automation and AI verification. This project gives learners a concrete way to demonstrate both a useful answer and the evidence needed to trust it within its stated limits.
Continue learning
This article is part of the Generative AI for verified analyst work sequence. Use the neighbouring tasks when you need the prerequisite or the next application.
- Review the preceding task in Create an analyst AI verification protocol with pass criteria.
- Return to the cluster foundation in Verify an AI-generated revenue answer against source rows.
Pankit Kumar has 10 years in Data Science & AI, building and shipping production systems in regulated pharma and clinical environments. He is a freelance trainer at Boston Institute of Analytics, AnalytixLabs and Scaler, and has taught this material to thousands of working professionals.
This article is part of our Data Analytics with Generative AI programme — 3–4 months. The full analyst stack — Excel, SQL, Power BI and Python pipelines — then a generative-AI layer you can prove is right.
Explore Data Analytics with Generative AI