Skip to content

Project

A Project is a single talent engagement run for an organisation. It is the widest table in the application: alongside a handful of descriptive fields it stores the metrics and extracted intelligence rendered across the project pages.

Projects are the unit of work the platform is built around. Each one records who the search is for, its status and dates, and the quantitative talent metrics gathered during delivery. Most of its columns are JSON payloads written by the extraction agents, each paired with an *_imported_at timestamp recording when that section was last refreshed. Reports, focus individuals, cities and extractions all hang off a project.

Projects are read on nearly every authenticated page and written by the extraction pipeline.

  • app/Services/ProjectService.php — project queries with eager loading, and the aggregated report list that merges focus individuals in as pseudo-reports.
  • app/Http/Controllers/Projects/ — one single-action controller per project page (ProjectsIndexController, ProjectsGovernanceController, ProjectsGeographyController, and so on).
  • app/Jobs/RunProjectExtractionJob.php — runs an extraction agent and writes the resulting JSON column plus its import timestamp.
  • app/Filament/Resources/ProjectResource.php — staff administration of projects.
  • app/Observers/ProjectObserver.php — attached via #[ObservedBy] on the model.
Relation Type Related model
organization belongsTo Organization
stakeholder belongsTo User
logo belongsTo Attachment
divergenceReport belongsTo Attachment
intelligenceReport belongsTo Attachment
attachments belongsToMany Attachment
configurationResources belongsToMany ConfigurationResource
extractions hasMany ProjectExtraction
focusIndividuals hasMany FocusIndividual
cities hasMany ProjectCity
reports hasMany Report
feedbacks hasMany Feedback
creditAudit hasOne CreditAudit
dataCreditReport hasOne Report
focusIndividualsAllReport hasOne Report
talentDebriefReport hasOne Report
creditAuditReport hasOne Report
briefingConfirmationReport hasOne Report

The five *Report relations are all hasOne onto reports, each constrained to one type with a non-null file_id and ordered newest first.

Table projects. Primary key is a UUID (HasUuids).

Column Type Notes
id uuid Primary key
organization_id uuid Nullable, FK to organizations
stakeholder_id uuid Nullable, FK to users
logo_id uuid Nullable, FK to attachments
name string Search name
role_name string Nullable, the role being searched
description text Nullable
status string Engagement status
specialism array JSON cast
start_at date Cast to date
completed_at date Nullable, cast to date
refresh_booked_at datetime Nullable
divergence_report_id uuid Nullable, FK to attachments
intelligence_report_id uuid Nullable, FK to attachments
created_at, updated_at datetime Timestamps
Column Type Notes
females integer Nullable
ethnic_minority integer Nullable
actively_interviewing integer Nullable
talent_in_motion integer Nullable
focus integer Nullable
high, primary, secondary integer Nullable, pipeline tiers
influencers integer Nullable
career_mobility_low integer Nullable
career_mobility_medium integer Nullable
career_mobility_high integer Nullable
Column Type Notes
capability_divergence_score integer Nullable
capability_divergence_range string Nullable
capability_divergence_label string Nullable
capability_performance_score integer Nullable
capability_performance_range string Nullable
capability_performance_label string Nullable
capability_potential_score integer Nullable
capability_potential_range string Nullable
capability_potential_label string Nullable
capability_agency_score integer Nullable
capability_agency_range string Nullable
capability_agency_label string Nullable
Column Type Notes
geography array Nullable, JSON cast
geography_imported_at datetime Nullable
highlighted_countries array Nullable, JSON cast
highly_competitive_countries array Nullable, JSON cast
untapped_locations array Nullable, JSON cast
global_work_exposure array Nullable, JSON cast
global_agility array Nullable, JSON cast
global_talent array Nullable, JSON cast

Each pair below is written by one extraction agent; the *_imported_at column records the last successful run.

Column Type Notes
outcome, outcome_imported_at array, datetime Nullable
people, people_imported_at array, datetime Nullable
weighting_influences, weighting_influences_imported_at array, datetime Nullable
career_mobility, career_mobility_imported_at array, datetime Nullable
groupings, groupings_imported_at array, datetime Nullable
taps_roadmap, taps_roadmap_imported_at array, datetime Nullable
governance, governance_imported_at array, datetime Nullable
industry_trends, industry_trends_imported_at array, datetime Nullable
Column Type Notes
functional_expertise array Nullable, JSON cast
focus_individuals_capability array Nullable, JSON cast
educational_background array Nullable, JSON cast
disciplines array Nullable, JSON cast
top_qualifications array Nullable, JSON cast
top_skills array Nullable, JSON cast
key_stats array Nullable, JSON cast
recent_moves array Nullable, JSON cast
talent_adjacency array Nullable, JSON cast
capabilities_shaping_success array Nullable, JSON cast
top_priorities array Nullable, JSON cast
research_base array Nullable, JSON cast
leadership_composition array Nullable, JSON cast
edi_reporting array Nullable, JSON cast
present_slides array Nullable, slide visibility config

Project::referenceNumber() derives a display reference (001, 002, …) from the project’s position among its organisation’s completed projects, ordered by start_at. It is computed, not stored, and returns null for incomplete projects.