HR-ATS-Portal/frontend
Talha Ahmed 600d438af3 Analytics: report library, NL ask, TTH baseline, source spend
Builds the four remaining analytics gaps from the architecture plan:

- Report library (REQ-ANL-03): new backend/reports module - saved reports
  as parameterisations of the governed analytics queries (never free-form
  SQL), rolling window_days filters, recorded runs, CSV export via
  Content-Disposition. Reports screen gains the library card with
  create/run/export/delete plus a results modal.
- Natural-language analytics (REQ-ANL-05, ADR-0010): POST /analytics/ask
  maps a question onto one whitelisted intent, runs the same governed
  query the dashboard uses, then narrates the numbers. Ask Analytics card
  on the Analytics screen; LLM outages 503 without touching the charts.
- Time-to-hire baseline (REQ-ANL-08): KPIs surface tth_baseline_* from
  org setting analytics.tth_baseline ({days,source}); not hardcoded
  per OPEN-12. analytics added to org-settings categories. Reports TTH
  card shows the delta when set.
- Source spend (REQ-ANL-09 cost side): hiring costs can be tagged with a
  source channel; source performance returns tagged spend and
  cost-per-application, including spend-only rows for channels with zero
  applications (wasted spend must stay visible). Log-cost modal and
  Source Performance table on Reports; untagged spend stays
  cost-per-hire only.

Verified live: migration autogenerated and applied (saved_reports,
report_runs, hiring_costs.source_channel_id), 50 backend tests, vite
build + smoke/token/theme suites, and a headless-browser drive of both
screens end to end.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 17:24:35 +05:00
..
.vite/deps update 2026-08-12 13:57:53 +05:00
dist Talent tab: LinkedIn sourcing per job via Apify 2026-08-20 22:27:18 +05:00
node_modules Merge branch 'Talha' of https://git.utopiadeals.com/utopia-ai/HR-ATS-Portal into Vibe-Coding 2026-08-18 12:47:25 +05:00
src Analytics: report library, NL ask, TTH baseline, source spend 2026-08-21 17:24:35 +05:00
.dockerignore push the scoring connect 2026-08-17 14:31:30 +05:00
.env.development Candidate 2026-08-05 18:25:34 +05:00
.env.production REACTJS STACK WITH RBAC TESTED 2026-08-05 17:41:46 +05:00
Dockerfile ip changed in dockerfile 2026-08-18 12:20:47 +05:00
index.html REACTJS STACK WITH RBAC TESTED 2026-08-05 17:41:46 +05:00
nginx.conf push the scoring connect 2026-08-17 14:31:30 +05:00
package-lock.json REACTJS STACK WITH RBAC TESTED 2026-08-05 17:41:46 +05:00
package.json theme updated 2026-08-19 19:34:16 +05:00
smoke.test.mjs Talent tab: LinkedIn sourcing per job via Apify 2026-08-20 22:27:18 +05:00
theme.test.mjs theme updated 2026-08-19 19:34:16 +05:00
token.test.mjs REACTJS STACK WITH RBAC TESTED 2026-08-05 17:41:46 +05:00
vite.config.js REACTJS STACK WITH RBAC TESTED 2026-08-05 17:41:46 +05:00