Talent profile¶
Domain-specific scoring against twelve skills using a rule-based ontology. The score is the clamped sum of weights of rules that fire on the chart — explainable by construction.
Fetch — GET /v1/charts/{chart_id}/profile/talent¶
Required scope: charts:read
Response¶
{
"chart_id": "019e32b5-...",
"scores": [
{
"skill_id": "resilience",
"value": 0.80,
"level": "very_high",
"contributing_rules": [
"moon_in_fixed_resilience",
"mars_in_fixed_resilience",
"saturn_in_water_resilience"
]
},
{
"skill_id": "empathy",
"value": 0.45,
"level": "moderate",
"contributing_rules": ["moon_in_water"]
}
]
}
| Field | Type | Notes |
|---|---|---|
chart_id |
string | Echoed from the path. |
scores[].skill_id |
string | One of the twelve canonical skill ids. |
scores[].value |
float in [0, 1] |
Sum of rule weights, clamped. |
scores[].level |
enum | Coarse band the templates phrase from: very_low, low, moderate, high, very_high. |
scores[].contributing_rules |
string[] | Rule ids that fired. Empty if score is zero. |
Skill catalog¶
Twelve skills, six soft + six hard. The ids are stable.
| Skill id | Category | Description |
|---|---|---|
communication |
soft | Verbal expressiveness, articulation. |
leadership |
soft | Initiative, visibility, willingness to direct. |
analytical_thinking |
soft | Structured reasoning, modelling. |
empathy |
soft | Emotional attunement, relational awareness. |
discipline |
soft | Follow-through on routine and commitments. |
creativity |
soft | Generative thinking, novel combinations. |
resilience |
soft | Stress tolerance, recovery from setbacks. |
tech_engineering |
hard | Affinity for systems / tooling / engineering work. |
sales_negotiation |
hard | Persuasion, deal-making. |
creative_design |
hard | Aesthetic judgment, visual / craft work. |
management |
hard | People management, resource coordination. |
operations |
hard | Process design, procedural rigour. |
How scoring works¶
- The chart is flattened into a metrics view (
planets.sun.sign,houses.10.sign,counts.sign.scorpio, …). - Every rule in the ontology evaluates its conditions against that view.
- A rule that matches contributes its
weightto the rule'sskill. - Per-skill scores are summed and clamped to
[0, 1].
Example rule (excerpt from the published ontology)¶
- id: moon_in_water
skill: empathy
description: "Moon in a water sign deepens emotional attunement."
weight: 0.45
conditions:
- { path: planets.moon.sign, op: in, value: [cancer, scorpio, pisces] }
Rules are versioned with the ontology; breaking changes ship under a new major version and the old ontology stays available for at least 6 months.
Why a score might be zero¶
- The chart doesn't satisfy any rule for that skill. Common for
charts with heavy emphasis in one element — e.g., a fire-heavy chart
may score low on
operations(which is biased toward earth). - The skill is genuinely a soft spot for this configuration. Use the
risktemplate family in the Interpretations endpoint to surface this as recommended counter-balance.
Explainability — pairing with rule descriptions¶
The contributing_rules array carries rule ids; the human-readable
description for each id is part of the published ontology. A common
client pattern:
ontology = load_ontology() # ships with your SDK or as a separate download
for skill in profile["scores"]:
if skill["value"] >= 0.4:
print(skill["skill_id"], skill["value"])
for rule_id in skill["contributing_rules"]:
print(" •", ontology.rule_descriptions[rule_id])
This turns the score into a tooltip / explainer rather than a black box.