> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tangoanalytics.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Space hr inbound file

# Tango Space HR Inbound — File

> Generated from `Tango Space HR Inbound Integration Design Specification V 2.2.docx` in SharePoint folder `03 Space Integrations`.
> OAS spec: [`space-hr-inbound-file.yaml`](./space-hr-inbound-file.yaml)

## Overview

SFTP file-based inbound. Client drops a pipe-delimited file of Person/HR records; Tango updates People records in Space Management.

**Owner:** Tango Analytics
**Spec version:** 2.2
**Status:** Draft (auto-generated — needs review)

## Transport

| Attribute | Value | |
| - | - | - |
| Direction | Inbound (Client → Tango) | |
| Mechanism | SFTP file drop | |
| File format | Pipe-delimited (\` | `) text, `.txt\` |
| Path | `/inbound/hr` | |

## Retention sentinels ⚠

**Important convention**: To retain an existing value (i.e., NOT update it), send a sentinel value instead of an empty cell. The sentinel differs by data type:

| Type | Sentinel | Example |
| - | - | - |
| String | `~` (tilde) | `~` means "keep existing email" |
| Date | `01/01/1800` | A literal 1800-01-01 means "keep existing date" |
| Number | `0.0001` | A literal 0.0001 means "keep existing number" |

Without these sentinels, an empty cell would null-out the field.

## Integration logic

* Upsert key: `PERSON_NUMBER`.
* `COST_CENTER` is optional initially; once an employee is assigned to a department in Tango, it cannot be cleared via this integration.

## Data fields (required ✅)

| Field | Type | Req | Sample | Notes |
| - | - | - | - | - |
| `CLIENT_ID` | VARCHAR | ✅ | `290` | |
| `BRAND_ID` | VARCHAR | ✅ | `987` | |
| `COUNTRY` | VARCHAR | – | `USA` | |
| `PERSON_NUMBER` | VARCHAR | ✅ | `0006575` | Upsert key |
| `COST_CENTER` | VARCHAR | – | `10003A` | See integration logic |
| `PRIMARY_EMAIL` | VARCHAR | – | | |
| `EMPLOYEE_TYPE` | VARCHAR | – | | Lookup |
| `HIRE_DATE` ⚠ | DATE | – | | `MM/DD/YYYY` |
| `END_DATE` ⚠ | DATE | – | | `MM/DD/YYY` typo in source — should be 4-digit year |
| `FIRST_NAME` | VARCHAR | ✅ | `Thomas` | |
| `LAST_NAME` | VARCHAR | ✅ | `Smith` | |
| `MIDDLE_NAME` | VARCHAR | – | `R` | |
| `OTHER_NAME` | VARCHAR | – | `Tom` | "Nickname" |
| `BUILDING_ASSIGNED` | VARCHAR | – | | Must exist in Tango |
| `GRADE_LEVEL` | VARCHAR | – | | Lookup |
| `TITLE` | VARCHAR | – | `IT Business Services Analyst` | |
| `MANAGER_ID` | VARCHAR | – | `0004839` | |
| `SHIFT_WORKER` | VARCHAR | – | `Y` | Y/N |
| `WORK_FROM_HOME` | VARCHAR | – | `Y` | Y/N |
| `PRIMARY_PHONE` / `MOBILE_NUMBER` | VARCHAR | – | | |
| `STATUS` | VARCHAR | ✅ | `Active` | Lookup |
| `SEATING_TYPE` | VARCHAR | – | | Lookup `SEATING_TYPE` |
| `C_EXT_ATTR1..10` | VARCHAR | – | | Custom strings |
| `C_EXT_LOV1..5` | VARCHAR | – | | Custom lookups |
| `D_EXT_ATTR1..5` | DATE | – | | `D_EXT_ATTR1` typed VARCHAR in source — typo |
| `N_EXT_ATTR1..5` | NUMBER | – | | |
| `ZIP` | VARCHAR | – | | Zip Code |

## Open Questions / Assumptions

* [ ] **`END_DATE` typed `MM/DD/YYY`** (3-digit year) in source. Almost certainly typo for `MM/DD/YYYY`. `HIRE_DATE` correctly uses 4-digit.
* [ ] **`D_EXT_ATTR1` typed VARCHAR** while `D_EXT_ATTR2..5` are DATE. Likely doc typo — treated as DATE.
* [ ] **File naming convention not explicitly stated** in extracted text — likely `{ClientName}_HR_MMDDYYYYHHMMSS.txt` matching similar integrations. Confirm.
* [ ] **SFTP credentials** are `<TBD>`.
* [ ] **Lookup codes** (`EMPLOYEE_TYPE`, `GRADE_LEVEL`, `STATUS`, `SHIFT_WORKER`, `WORK_FROM_HOME`, `SEATING_TYPE`) are `<TBD>` in Appendix.

## Changelog (compressed)

| Ver | Date | Description | Author |
| - | - | - | - |
| 1.0–2.1 | 2020-2025 | (see source doc — 12 revisions) | Various |
| 2.2 | 03/24/2026 | Added logic for optional fields | Alpna Bansal |
