THE MASTER MODEL

Teamcenter Data-Model Mapping

Every element in the neutral bundle lands in Teamcenter as a first-class business object with its native type — not a blob attached to a dataset, not a property bag. This page is the exact map: bundle element to Teamcenter type, the nested Logical BOM that carries four domains in one tree, and the identity rules that make every re-publish an update instead of a duplicate.

Why real types matter

We could have stamped each publish into Teamcenter as an opaque file and called it integration. We deliberately did not. Every publish materializes typed items, typed relations, and real BOM occurrences — and that decision pays three ways:

Searchable. Objects we create come back through Active Workspace global search with correct type facets — during bring-up a single test round returned its objects faceted as System Block Revision, Function Revision, Logical Connection Revision, and Exchange Item Revision, with Teamcenter's own function icons. No custom index, no side database.

Viewable. Active Workspace renders our structure with its stock views: the Content tree walks the LBOM occurrences, Teamcenter auto-draws an Architecture diagram of nested System Blocks, GDE ports surface in the Interfaces views, and Seg0Allocate edges appear in the Relations graph. We wrote no viewer for any of that.

Survives us. Because the objects are native, Teamcenter's own business rules bind them — naming rules, GRM rules, structure rules. That is occasionally restrictive (see the error-46147 story below), but it is exactly why the data is trustworthy: any downstream consumer — change management, workflows, another integration — sees ordinary Teamcenter data. If our middleware disappeared tomorrow, the master model stands.

NATIVE TC TYPES IN PLAY
12+
ALLOCATION RELATION
Seg0Allocate (rev-level)
WILDFIRE RE-PUSH
0 created · 134 existing
TYPE MAPPING
fully config-driven

The mapping table

Every row below was created, re-published, and read back live on Capital 2512 ⇄ Teamcenter 2506 proven live. Types are configuration, not code: tc-service/config.json keys under teamcenter.* select them, so an instance that prefers the Arcadia/Capella family swaps Fnd0LogicalBlock for Sys0LogicalComp without touching a line of the pipeline.

Bundle elementTeamcenter typeHow it attachesNotes
components[]Fnd0LogicalBlock (config componentType; Sys0LogicalComp for Arcadia instances)Item + occurrence in the LBOMItem id = the bundle id; ensure-then-create is idempotent
functions[]Functionality (config functionType; Sys0LogicalFunc alternate)ItemRelated to blocks via allocations; never LBOM occurrences of their own
allocations[]Seg0AllocateRevision level: block revision ← function revisionThe GRM rule demands revisions — item-level is rejected (error 89020)
components[].portsFnd0LogicIntrfceGDEs attached as GDELine occurrences in the component's own structureThis is precisely what feeds AW's Interfaces views
function portsNetwork_PortGDE under the owning FunctionalityDirection = fnd0Direction, LOV values fnd0Input / fnd0Output / fnd0Bidirectional — plain "Output" is rejected; read via dbValues, not uiValues
signals[]SignalItemThe E/E payload
signal exchanges (derived, one per routed signal)Network (Item > PSConnection)Trace-linked to its Signal and both Network_Port endpoints at revision levelGives every flow a directed, port-anchored edge
networks[] (carriers)Fnd0LogicConn (config carrierType)ItemSignal-to-carrier assignment recorded as Seg0Allocate connection rev ← exchange rev
connections[]Fnd0LogicConnFND_TraceLink to both endpoint blocksSeg0Allocate connection rev ← carrier rev when a carrier implements the edge; names derived human-readable ("COMP2 - COMP1 via Carrier 1")
interface contractsSeg0Interface + Seg0IntfSpecOne Seg0Interface (contract) per connection, one Seg0IntfSpec (exchange item) per signalBound via Seg0ExchangeAllocation, Seg0InterfaceAssignment (offering Provided/Required — creatable only through createObjects with tagProps) and Seg0Implements
requirementLinks[]Requirement + IMAN_requirement relationsRelations only — never LBOM occurrences. Primary = the satisfying element revision, secondary = the requirement revision (item-level fallback if the GRM rule rejects)The type enforces the id naming rule "REQ-"nnnnnn (six digits): REQ-123 is rejected, REQ-000123 passes
logic devices / connectorscomponentType items with revision seg0Kind = LogicDevice / LogicConnectorDevices nest under the platform component they realize; connectors under the LBOM rootWhy not a dedicated type — see the callout below
conductors (logic nets/wires)Fnd0LogicConnTrace-linked to their endpoint device and component itemsRound-trips: the extractor rebuilds them with device-level endpoints
Why logic devices are componentType items, not a dedicated type The BMIDE structure rule on this data model rejects every non-exact child type under a System Block — probe-verified as error 46147; even Sys0LogicalComp fails. So detail items stay componentType, and the device/connector distinction rides on the revision's native seg0Kind attribute. Two hard-won mechanics: seg0Kind is multi-valued (send stringArrayProps, not stringProps), and it must be stamped at creation via createObjects compound create input — property updates are a silent no-op on the 2506 JSON gateway (every setProperties variant returns success and writes nothing; probe-verified).

The effective type map, as deployed:

"teamcenter": {
  "componentType":       "Fnd0LogicalBlock",
  "functionType":        "Functionality",
  "allocationRelation":  "Seg0Allocate",
  "portType":            "Fnd0LogicIntrfce",
  "functionPortType":    "Network_Port",
  "signalType":          "Signal",
  "networkType":         "Network",
  "carrierType":         "Fnd0LogicConn",
  "requirementType":     "Requirement",      // code default, overridable
  "requirementRelation": "IMAN_requirement", // code default, overridable
  "runTag":              "",
  "legacyRunTags":       ["T7"]
}

One nested LBOM, four domains

The structural backbone is a single root Fnd0LogicalBlock named <PROJECT>-LBOM. Everything beneath it is a real Fnd0LogicalBOMLine parent-child occurrence — native BOM structure that Active Workspace rolls up on its own, not a web of trace links.

With contract v1.2, the MIL-STD-1808 logical spine becomes the parent skeleton: UAV is the root's single top occurrence, the chapter nodes (24 Electrical Power, 28 Fuel) and chapter groups hang beneath it, and every domain-authored element nests under the spine node named by its parentId. Logic devices nest one level further — under the platform component they realize. The result is one tree spanning what four tools authored: the SysML spine sysml and its architect additions sysml-add, Capital's platform schematic elec and new electrical elements elec-add, and NX fuel equipment fuel-add — each element carrying its provenance and effectivity as stamped properties.

ONE COMMON LBOM — THE MIL-STD-1808 SPINE CARRIES EVERY DOMAIN REQ-000123 sustain 5 min inverted flight ≥151 ▾ UAV_PLATFORM-LBOM ▸ UAV ▾ [24] Electrical Power ▾ [24 50] AC Fuel System Circuit Breakers ◆ Invert Fuel Pump Circuit Breaker ≥151 ▾ [28] Fuel ▾ [28 10] Storage - Inverted ≥151 ◆ Fuel Pump ≥151 FUEL +SW +ELEC ▸ Fuel Pump-DEV logic device · seg0Kind ◆ Reservoir ≥151 ▸ [28 40] Indicating - Inverted ≥151 PROVENANCE — WHO ADDED WHAT ● sysmlarchitecture baseline (Cameo) ● sysml-addarchitect's change (this wave) ● elecelectrical baseline (Capital) ● elec-addelectrical engineer's change ● fuel-addfuel engineer's change (NX) EFFECTIVITY ≥151 applies from unit 151 on — stamped once per change wave, carried on every element automatically
The MIL-STD-1808 spine: one nested LBOM spanning architecture, electrical, fluid, and logic detail.

How a published component becomes an occurrence in that tree:

Ensure the item

We look the bundle id up in Teamcenter (getItemFromId) and create the typed item only if it is missing. Existing items are adopted, never re-minted.

Resolve the parent

The hub resolves parentId first among items created in the same push, then live in Teamcenter — so a fuel publish can nest under a spine node the SysML seed created weeks earlier. An unresolvable parent is reported in summary.errors and the element falls back to the LBOM root: a visible failure, never silent wrong-nesting.

Attach the occurrence

ensure_structure opens the parent's BOM window, diffs existing children, adds only what is missing, and saves. Re-publishing the same structure adds zero occurrences.

Stamp enrichment

TC_PROVENANCE, TC_EFFECTIVITY, and the MIL-address properties ride on the object (demo semantics: stamped properties, not Teamcenter unit effectivity — we say so out loud).

Proven on the UAV Platform: the full spine push landed with nested_parents = 15, occurrences_added = 25, errors = [] proven live, and the live step-7 beat — a breaker drawn in Systems Architect — created one item and one occurrence nested under LOG-ACFSCB with zero errors. Requirements deliberately stay out of this tree: they connect by relation only, keeping the root → UAV structure pristine.

Identity: item ids are the join key

One id follows an element through every tool. The Teamcenter item id is the bundle id is the Element ID property in Capital. When the hub materializes Teamcenter data into a Capital project, every function and component carries <property name="Element ID"> = its TC item id — the same slot the Cameo bridge uses for SysML GUIDs. When Capital publishes back, external-id resolution runs TC_ID property → Element ID property → Capital UID. That chain is what closed the round trip at Wildfire scale: TC-author → materialize in Capital → publish back = 0 items created, 134 existing, 199 relations existing, 0 errors.

Names are never identity — a rename changes a mutable display property, never the id. And because regenerating a logical design mints all-new Capital-internal UIDs, the logic publisher derives stable ids from what survives regeneration:

ElementItem-id conventionExample
Spine nodeMIL-<address, spaces→hyphens>[-SLUG]MIL-28-10-STORAGE-INVERTED
Logic device<component id>-DEV (keyed on the device's Component_Base_ID back-link)T7WF-CMP-ECN-DEV
Logic connector<PROJ>-LC-<name> (bundle id owner-qualified: LC-<ownerKey>-<name>)WILDFIRE_PLATFORM-LC-P4
Logic net / wireLNET-<name> / LWIRE-<name>, uniquified in document orderLNET-COND1
Requirement"REQ-"nnnnnn (native TC naming rule)REQ-000123
LBOM root<PROJECT>-LBOMUAV_PLATFORM-LBOM

runTag namespacing. During bring-up, every test round prefixed all created ids and names with a tag (T1T7) — disposable namespaces inside a shared instance. Production runs with runTag = "", and that is mandatory: cross-publish parent resolution looks spine ids up untagged, so a lingering tag silently breaks nesting. Estates minted under an older tag are not stranded — teamcenter.legacyRunTags lets the push adopt those ids instead of re-minting (production mode only). The Wildfire T7 estate was adopted exactly this way: the publish-back reported zero creates.

What Active Workspace shows

Because the mapping targets native types, Active Workspace is a working client of this data with no customization. Opening <PROJECT>-LBOM in Content renders the nested logical structure exactly as published: one child UAV, the 1808 chapters beneath, and fuel, electrical, and logic-detail elements nested under their logical parents.

Active Workspace Content view of the UAV_PLATFORM-LBOM nested structure
The nested LBOM in Active Workspace: one tree, four authoring tools, native Fnd0LogicalBOMLine occurrences.

The port GDEs we attach are the exact objects AW's Interfaces views read — Fnd0LogicIntrfce and Network_Port GDELine occurrences surface as interfaces on the block occurrences. The Relations graph shows Seg0Allocate edges from any revision node. And requirements navigate both ways: open REQ-000123 and its IMAN_requirement relations fan out to the seven inverted-flight function revisions (satisfies) and the two architecture adds (derives); open any function revision and the relation points back.

REQ-000123 in Active Workspace with its IMAN_requirement relations
REQ-000123 "Sustain 5 minutes of inverted flight at full power" — nine live trace relations, zero LBOM occurrences.
Known limit, honestly stated AW's Interface Details connection views read occurrence-level wiring (TC_Connected_To appearance-path relations), which item-level trace links don't feed — enabling that wiring is a Teamcenter-admin work item on the handoff list, not a contract change. Everything else on this page renders in stock AW today.