FM27: add Staff.job, and include people with no contract in staff()

Open
#44 3 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
48/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Active
Tech stack
python
Domain
data

Research direction

Start by reading the staff() implementation and how it represents contract rows and coded values; compare its output with the FM27 behavior described here. Check how current jobs and people without contracts can be distinguished, and investigate the unresolved job codes and past-job rule. Done means staff rows include a job, retain only each person's current job, and include club people without contracts with their team and job.

Written by the indexing model from the issue text.

Description

No save files or real data
  • I have not attached or linked a save file, screenshot, or any real player data
What is missing

staff() has no job field, and it leaves out people who work for a club with no contract, such as the chairperson and directors. On FM27, a person's stored contract rows can also describe past jobs.

How the results compare with the game

The comparisons below used a local build, because 0.8.0 refuses this on FM27. I compared one club with the All Staff screen.

  • All 25 people on the screen appear, each with the right job and the right team, including the board and the under-18 staff.
  • People with no contract appear with has_contract false.
  • No person has more than one row, across all 12,032 rows. Before I dropped past jobs, some teams had several managers.
  • Of the 472 first teams in league tables, 370 have a manager. 93 have no staff in the save at all. The other 9 have staff but no manager, and 2 of those have an open vacancy.
Suggested approach
  • Staff.job: add a CodedValue with a StaffJob enum, on FM27 first.
  • Past jobs: keep only the row of the current job for each person.
  • No contract: add a pass for club people with no contract, and keep team_id and the job code on those rows.
What remains uncertain
  • I checked one career, from the start of the first season to early August. I will send the saves and matching screens by email.
  • Job labels come from one club's screen. Codes 26, 46, 58, 44, 62, 66, 70 and 86 are common on other clubs and have no label yet. One person hired after that screen has one of these codes, so I can check it in the game if that helps.
  • The past-job rule rests on this career. I have not seen it across a season change.
  • I do not know why 7 of those 9 first teams have no manager and no vacancy. They may be real gaps between appointments, or a current job this rule drops.
Versions
  • fmsave 0.8.0 (main at 418c837), Python 3.13.13, macOS 27.2
  • FM27 build 27.0.0+2486695
Dominant language
Python
Stars
28
Forks
8
Avg merge
42m
Merged PRs (30d)
33

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from rhiever/fmsave

All issues in rhiever/fmsave

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.