JinJin48
JinJin48
SAP Consultant | BTP · S/4HANA · US Global Rollout
· 13 min read

SAP SF Position

Position is the master data object that represents a single, fillable seat in the org structure — combining a Job Code (what the work is) and a Department (where it sits organizationally) into one addressable slot that an employee’s Job Information record occupies. It is the terminal node of the Job Structure Management branch in SuccessFactors Employee Central: unlike Job Family and Job Code, which classify work in the abstract, a Position is concrete — it can be vacant, filled, frozen, or planned ahead of a future hire, and it carries its own reporting line (“Reports To”) independent of Department nesting. This article covers what Position is, how it terminates the Job Family → Job Code → Position chain while also being directly referenced from Employee Data, and every field an Employee Central consultant configures for it.


Part 1: Position — Core Concepts (All Modules)

1.1 What Is the Position?

Hub-and-spoke diagram showing Position at center, connected to Job Code, Department, Job Information/Employment, and Recruiting position-driven requisitions

Position is the seat object — it does not classify job content the way Job Code does, and it does not classify organizational placement the way Department does. It is the concrete, addressable unit that combines both: every Position points to exactly one Job Code for its job content and exactly one Department for its org placement, and it is that combined unit — not Job Code or Department alone — that an employee’s Job Information record occupies when they are hired into or moved into the seat.

AspectDetails
RoleTerminal node of the Job Structure Management branch — combines Job Code and Department into a single fillable seat that an employee’s Job Information record occupies
Modules using itEmployee Central (owner — Foundation Object framework, and the optional Position Management add-on when a client runs position-centric mode), Recruiting (position-driven Job Requisitions can be opened directly against a specific vacant Position rather than a generic Job Code), Workforce Planning / People Analytics (headcount, vacancy, and org-chart reporting is most granular at the Position level), Compensation (indirectly — a seat’s budget/headcount context feeds planning, though pay-range resolution itself happens through the incumbent’s Compensation Information, not through Position)
TransactionsAdmin Center → “Manage Organization, Pay and Job Structures” (create/edit Position Foundation Object); “Manage Positions” / Position Org Chart view (when the Position Management add-on is enabled); “Import and Export Data” (mass load via CSV)
Key TablesOData API entity FOPosition (Foundation Object) — SuccessFactors has no classic ABAP table; each record is effective-dated rather than table-row based. Extended Position Management attributes (when the add-on is active) are stored as additional MDF fields on the same entity
S/4HANA notePosition maps conceptually to Position (Planstelle) in classic SAP HCM Organizational Management (PO13/PP01) — both represent a single fillable seat distinct from its occupant — but no delivered synchronization ships between SuccessFactors Position and an on-premise S/4HANA HCM Position; where both exist, alignment is manual or custom-built

1.2 Position Configuration Variants

Comparison grid of Position variants: Regular, Vacant, Frozen/On-Hold, Matrix/Dual-Report, To-Be-Hired, showing how each affects Recruiting and reporting

Position does not come from a fixed SAP-delivered list of types the way, say, an EEO Category does — every Position is a client-created seat. What varies is the seat’s current state and reporting configuration, and getting these wrong has direct, visible consequences: a Vacant Position left un-flagged skews headcount reports, and a Frozen Position left active lets Recruiting open a requisition against headcount that was never actually approved.

Position VariantCode / FlagUse CaseKey Behavior
Regular PositionStandard (no special flag)A seat currently occupied by one active employeeDefault state; the seat’s Job Information reference resolves to exactly one active employee record
Vacant PositionIncumbent reference emptyAn approved, budgeted seat with no employee currently assignedDrives position-driven Recruiting requisitions and vacancy/headcount reporting; the seat keeps its Job Code and Department context even with no incumbent
Frozen / On-Hold PositionStatus = FrozenApproved headcount temporarily blocked from hiring (hiring freeze, budget review, reorg pending)Excluded from position-driven requisition creation while frozen, without deleting the underlying seat or its history
Matrix / Dual-Report PositionMatrix Relationship field populatedSeat reports solid-line to one manager’s Position and dotted-line to a secondAdds a secondary “Matrix Manager” Position reference alongside the primary “Reports To” Position, used for cross-functional or regional matrix org structures
To-Be-Hired (Planned) PositionPlanned/Budgeted flag, future Effective Start DateA future-dated seat created ahead of an anticipated hire or reorgEffective-dated forward; becomes active and selectable on Job Information only once its Effective Start Date arrives

Design principle: Whether a client runs position-centric (Position Management enabled, every hire tied to an existing Position) or position-less (Job Information carries Job Code and Department directly, with no Position layer) is a foundational blueprint decision, not a toggle to revisit casually — retrofitting Position Management onto an already-live position-less instance requires backfilling one Position record for every current employee.


1.3 Organizational Levels and Data Hierarchy

Zone crop from the SuccessFactors Master Data Landscape showing Zone B — Position as the terminal node of the Job & Pay Structure branch, with its Zone A reference chip to Department and the Zone E reference chips from Job Information

Data hierarchy with a concrete example

Client (SuccessFactors Instance)
   │
   └── Job Family "JF_Sales" — Sales family, Job group
          │
          └── Job Code "JC_SalesRep" — Sales Representative, of JF_Sales
                 │
                 └── Position "POS_SalesMgr01" — Sales Manager, seat
                        │
                        └── assigned to ──> Department "DEPT_S01" — Sales Team 1 (org hierarchy chain, Zone A)

Employment "EMP_000001" (Employee Data branch, Zone E)
   │
   └── Job Information "JI_001" — Sales Mgr assignment
          ├── references ──> Position "POS_SalesMgr01" (seat occupied)
          └── references ──> Job Code "JC_SalesRep" (job content, direct — not resolved only through Position)

MANDATORY landscape verification note: the module Master.md’s Setup Flow and ER Diagram describe “Position ← (Job Code, Department)” and “Job Information ← (Employment, Position, Job Code)” in prose. The published SuccessFactors Master Data Landscape (sf-a01/images/04-sf-a01-master-landscape.html) confirms both exactly as drawn: a solid parent-child connector runs from Job Code to Position within Zone B, a ↗ DEPT_S01 reference chip runs from Position to Department in Zone A, and — from Zone E — Job Information carries two separate reference chips, ↗ POS_SalesMgr01 and ↗ JC_SalesRep, meaning Job Information references Position and Job Code independently rather than resolving Job Code only by traversing through Position. Unlike the Job Code↔Pay Grade discrepancy found from both sides in SF-A02-08 and SF-A02-09, Position shows no discrepancy between source prose and drawn topology. One finding worth flagging: the landscape draws no connector at all between Position and Pay Grade — a seat’s compensation range is never resolved through Position; it is resolved only when Compensation Information is entered against the employee occupying the seat, referencing Pay Grade directly.

Design principle: Position is the terminal node of the Job Structure Management branch (Job Family → Job Code → Position) and is also the only object in that branch referenced back from the Employee Data branch — every Job Information record that assigns a seat to an employee points to Position directly. Because Position is fed by two upstream objects (Job Code for job content, Department for org placement) but referenced by a downstream Employee Data object, any Position redesign — splitting one seat into two, or re-pointing a seat’s Department — is best evaluated by checking active Job Information references first, not treated as a config-only change with no employee-facing consequence.


1.4 Integration with Other Master Data Objects

Hub-and-spoke showing Position at center connected to Job Code (direct parent), Department (direct reference), Job Information (referenced by), Reports-To Position (self-reference), and Job Family (indirect via Job Code)

Position sits at a junction point: it is the only object in the Job Structure Management branch that both consumes references (from Job Code and Department) and is itself consumed by a reference (from Job Information) — which is what makes it the object most org-chart and headcount reporting actually keys off, rather than Job Code or Department individually.

ObjectRelationshipPractical Notes
Job CodeDirect parent (N:1) — every Position references exactly one Job Code for its job contentThis configured link is what gives the seat its job title, description, and EEO classification; see SF-A02-08 for Job Code’s own field detail. Reassigning a Position’s Job Code — a promotion or role redefinition for the seat itself, distinct from replacing its incumbent — is a routine Position Management transaction.
DepartmentDirect reference (N:1) — every Position references exactly one Department for organizational placementThis is what actually drives the seat’s place in the org chart and reporting-line rollups, not Job Code. A Position’s Department can move independently of its Job Code — e.g. a “Sales Representative” seat reassigned from one regional Department to another without changing the job content.
Job FamilyIndirect only, via Job Code — Position carries no direct Job Family referenceJob-Family-level headcount reporting on Position data resolves through the Position → Job Code → Job Family chain; there is no shortcut reference directly from Position to Job Family.
Pay GradeNo direct link — the landscape draws no connector between Position and Pay Grade at allA seat’s expected compensation range is never resolved through Position. It is resolved only at the employee-record level, when Compensation Information (a child of Employment) references Pay Grade directly for whoever occupies the seat — see SF-A02-09 for the same finding confirmed from Pay Grade’s side.
Job Information (Employment)Referenced by (1:N, direct) — every Job Information record that assigns an employee to a seat references exactly one PositionThis is the reverse of the Job Code/Department relationships above: here Position is the target, not the source. Job Information also references Job Code independently of Position (see the 1.3 verification note), so a Position and its incumbent’s Job Information can, in principle, momentarily disagree on Job Code during a transition — most implementations add a business rule to keep the two synchronized.
Reports-To Position (self-reference)Self-reference (N:1) — a Position’s “Reports To” field points to another Position, building the org-chart reporting lineNot a separate object type, so it is not drawn as a cross-object landscape connector — it is a field on Position itself. This is how the position-based org chart is rendered independently of Department nesting: two Positions in different Departments can still report directly to one another (e.g. a regional seat reporting to a headquarters seat).

Part 2: SF-Specific Field Details

2.0 Scope of SF Ownership

Checklist showing full Employee Central ownership across Position data sections: Core Identification, Organizational & Reporting Assignment, Headcount & Status

Data SectionSF InvolvementNotes
Core Identification◎ OwnerPosition ID, Position Title, Job Code, Effective Start Date
Organizational & Reporting Assignment◎ OwnerDepartment, Location, Cost Center, Reports To (Higher Position), Matrix Relationship
Headcount & Status◎ OwnerFTE / Standard Hours, To-Be-Hired / Vacancy Flag, Status, Regular/Temporary Indicator

Legend: ◎ = Owner / Critical, ○ = Direct involvement


2.1 Core Identification

Checklist of key Position core identification fields: Position ID, Position Title, Job Code, Effective Start Date

Core Identification is the minimum record a Position needs to exist — it is what every Job Information record occupying it, and every Position-filtered org-chart or headcount report, resolves back to.

FieldDescriptionPractical Usage
Position IDUnique identifier for the Position (External Code)The key value every Job Information record’s Position reference, and every position-driven Job Requisition, points to. Agree the coding convention (e.g. Department prefix + sequence) once with the HRIS team; renumbering after go-live requires re-mapping every incumbent and open requisition attached to it.
Position TitleDisplay name of the seat, shown on Job Information, the org chart, and position-driven Job RequisitionsCommonly mirrors the Job Code Name but can be overridden per seat (e.g. “Sales Manager — East Region”) to reflect the specific seat’s scope. Keep this consistent with what the incumbent’s own title actually says on business cards and email signatures — a mismatch here is a frequent source of employee-facing confusion.
Job CodeThe parent Job Code this Position references (mandatory, N:1)Drives the job title, description, and EEO/statutory classification the seat inherits. Changing it after go-live is a real reclassification event for the seat and its current incumbent, not a cosmetic edit.
Effective Start DateDate this version of the record becomes activeEvery field change — a Department move, a Job Code reassignment, a status change — is captured as a new effective-dated row rather than an overwrite, following the same effective-dating pattern used across the SF Foundation Object framework.

2.2 Organizational & Reporting Assignment

Checklist of Position organizational and reporting fields: Department, Location, Cost Center, Reports To, Matrix Relationship

This section is what actually places the seat on the org chart and in the reporting-line structure — separate from the job-content fields in Core Identification.

FieldDescriptionPractical Usage
DepartmentThe Department this Position belongs to (mandatory, N:1)This — not Job Code — is what drives the seat’s place in the Legal Entity → Business Unit → Division → Department chain and its cost/reporting rollups. Moving a Position between Departments is a routine reorg transaction and does not, by itself, require changing the incumbent’s Job Code.
LocationThe physical work location associated with the seatFrequently, though not always, inherited from the Department’s default Location; can be overridden on the Position for a specific remote or field-based seat. Feeds the incumbent’s default work-site assignment on hire.
Cost CenterThe Cost Center this Position’s headcount is budgeted againstOften mirrors the Department’s Cost Center by default but can be overridden — for example, a seat funded by a different budget owner than the rest of its Department. This is the field Finance and Workforce Planning actually reconcile against for headcount-vs.-budget tracking, not the Department’s default Cost Center alone.
Reports To (Higher Position)Self-referencing field pointing to the Position this seat reports toBuilds the position-based org chart independently of Department nesting — two Positions in different Departments can still have a direct reporting line. Leaving this blank on a non-top seat breaks the org-chart rendering for that branch, a common data-quality gap after a bulk Position load.
Matrix RelationshipSecondary self-referencing field for a dotted-line “Matrix Manager” PositionPopulated only for seats with a genuine dual-reporting structure (cross-functional, regional matrix). Leaving it populated after a matrix relationship ends is a frequent stale-data issue, since nothing forces a review of this field on its own cadence.

2.3 Headcount & Status

Checklist of Position headcount and status fields: FTE / Standard Hours, To-Be-Hired flag, Status, Regular/Temporary Indicator

These fields govern whether the seat is currently fillable, how much headcount it consumes, and what kind of employment it is intended for — the fields Workforce Planning and Recruiting actually query when deciding whether a seat can be opened.

FieldDescriptionPractical Usage
FTE / Standard HoursFull-time-equivalent value or standard weekly hours the seat is budgeted forUsed to reconcile headcount reporting against a client’s approved FTE budget rather than raw employee counts — two 0.5-FTE Positions consuming the same headcount as one 1.0-FTE Position is a distinction Finance cares about, not just HR.
To-Be-Hired / Vacancy FlagIndicates whether the seat currently has no incumbentDrives whether a Position is eligible for a position-driven Job Requisition in Recruiting. Left un-flagged after an employee’s Job Information moves off the seat, this field silently understates vacancy reporting until someone reconciles it.
StatusActive / Frozen / InactiveFrozen blocks new Recruiting requisitions against the seat without deleting it — used during hiring freezes or reorg reviews. Inactive removes it from selection entirely; check for any Job Information record still referencing it before setting a Position Inactive.
Regular/Temporary IndicatorFlags whether the seat is intended for a permanent or temporary/contingent assignmentFrequently defaults from the parent Job Code but can be overridden per seat — a client may run a temporary Position against an otherwise permanent Job Code for a fixed-term project role. Feeds downstream requisition-approval routing and workforce-planning headcount budgets differently depending on the value.

L1) Big Picture

IDCategoryTitle
sf-001OverviewWhat is SAP SuccessFactors?

L2-A) Master Data

IDCategoryTitle
sf-a01OverviewSAP SuccessFactors Master Data: Overview, Hierarchy & Relationships
sf-a02-01Master DataSAP SF Legal Entity
sf-a02-02Master DataSAP SF Business Unit
sf-a02-03Master DataSAP SF Division
sf-a02-04Master DataSAP SF Department
sf-a02-05Master DataSAP SF Cost Center
sf-a02-06Master DataSAP SF Location
sf-a02-07Master DataSAP SF Job Family
sf-a02-08Master DataSAP SF Job Code
sf-a02-09Master DataSAP SF Pay Grade
sf-a02-10Master DataSAP SF Position 📍
sf-a03-01Master DataSAP SF Permission Group
sf-a03-02Master DataSAP SF Permission Role
sf-a03-03Master DataSAP SF Holiday Calendar
sf-a03-04Master DataSAP SF Work Schedule
sf-a03-05Master DataSAP SF Time Type
sf-a03-06Master DataSAP SF Time Profile
sf-a03-07Master DataSAP SF Rating Scale
sf-a03-08Master DataSAP SF Goal Plan Template
sf-a03-09Master DataSAP SF Performance Form Template
sf-a03-10Master DataSAP SF Route Map
sf-a03-11Master DataSAP SF Compensation Plan
sf-a04-01Master DataSAP SF Person
sf-a04-02Master DataSAP SF Employment
sf-a04-03Master DataSAP SF Employee Profile

L2-B) Transaction

IDCategoryTitle
sf-b01OverviewSAP SuccessFactors Transactions: Process Flow, Hierarchy & Relationships