# Equipment Planner Data Structure Documentation

## Overview
This document explains the data structures used in the `getEquipmentActivitiesByLocation` function for organizing equipment by location.

## Source Data: equipmentModels Array

Total equipment records: **51**

```javascript
equipmentModels = [
  { equipment_id: "PRE009", location: "Comp-01", eqp_sequence: null },
  { equipment_id: "PRE063", location: "B-2", eqp_sequence: null },
  { equipment_id: "PRE211", location: "B-3", eqp_sequence: null },
  { equipment_id: "#2020", location: "Hyd", eqp_sequence: null },
  { equipment_id: "PRE140", location: "160 BPM Line", eqp_sequence: null },
  { equipment_id: "PRE141", location: "Imprinting area", eqp_sequence: null },
  { equipment_id: "PRE0243", location: "Capsulation - 04", eqp_sequence: null },
  { equipment_id: "PRE0230", location: "Capsulation-03", eqp_sequence: null },
  { equipment_id: "PRE128", location: "Coating-4", eqp_sequence: null },
  { equipment_id: "PRE175", location: "Coating-5", eqp_sequence: null },
  { equipment_id: "PRE084", location: "Comp-04", eqp_sequence: null },
  { equipment_id: "PRE0279", location: "Capsulation-01", eqp_sequence: null },
  { equipment_id: "PRE0291", location: "Imprinting area", eqp_sequence: null },
  { equipment_id: "PRE0301", location: "Coating-8", eqp_sequence: null },
  { equipment_id: "PRE001", location: "FBP", eqp_sequence: null },
  { equipment_id: "#2017", location: "Hyder", eqp_sequence: null },
  { equipment_id: "#2018", location: "Mum", eqp_sequence: null },
  { equipment_id: "#2011", location: "Sec", eqp_sequence: null },
  { equipment_id: "PRE392A", location: "", eqp_sequence: null },
  { equipment_id: "PRE392", location: "", eqp_sequence: null },
  { equipment_id: "#2021", location: "Hyderabad", eqp_sequence: null },
  { equipment_id: "PRE444", location: "PR", eqp_sequence: null },
  { equipment_id: "#6", location: "A", eqp_sequence: null },
  { equipment_id: "#1234", location: "Jaipur A", eqp_sequence: null },
  { equipment_id: "#7", location: "B", eqp_sequence: null },
  { equipment_id: "PRE061 ", location: "", eqp_sequence: null },
  { equipment_id: "PRE058 ", location: "", eqp_sequence: null },
  { equipment_id: "#2345", location: "Kolkata", eqp_sequence: null },
  { equipment_id: "PRE082", location: "FBP-02", eqp_sequence: null },
  { equipment_id: "PRE119  ", location: "", eqp_sequence: null },
  { equipment_id: "PRE117  ", location: "", eqp_sequence: null },
  { equipment_id: "PRE005", location: "FBP-01", eqp_sequence: null },
  { equipment_id: "PRE006", location: "Unknown", eqp_sequence: null },
  { equipment_id: "PRE035", location: "Comp-02", eqp_sequence: null },
  { equipment_id: "PRE065", location: "Coating-2", eqp_sequence: null },
  { equipment_id: "PRE083", location: "Coating-3", eqp_sequence: null },
  { equipment_id: "PRE185", location: "Capsulation - 02", eqp_sequence: null },
  { equipment_id: "PRE192", location: "Comp-06", eqp_sequence: null },
  { equipment_id: "PRE209", location: "Automatic Inspection area", eqp_sequence: null },
  { equipment_id: "PRE221", location: "Capsulation-03", eqp_sequence: null },
  { equipment_id: "PRE222", location: "Imprinting area", eqp_sequence: null },
  { equipment_id: "PRE0278", location: "Capsulation-01", eqp_sequence: null },
  { equipment_id: "PRE0267", location: "Unknown", eqp_sequence: null },
  { equipment_id: "PRE0244", location: "Unknown", eqp_sequence: null },
  { equipment_id: "PRE0290", location: "Coating-7", eqp_sequence: null },
  { equipment_id: "PRE0245", location: "Unknown", eqp_sequence: null },
  { equipment_id: "PRE0241", location: "Coating-6", eqp_sequence: null },
  { equipment_id: "PRE197", location: "FBP-03", eqp_sequence: null },
  { equipment_id: "PRE0292", location: "FBP-05", eqp_sequence: null },
  { equipment_id: "PRE0349", location: "FBP-06", eqp_sequence: null },
  { equipment_id: "PRE0403", location: "FBP-07", eqp_sequence: null }
]
```

## Map Structures

### 1. locationEquipmentMap
**Purpose:** Group equipment under locations  
**Type:** `Map<string, string[]>`  
**Size:** 38 locations  
**Example:** `"Comp-01" → ["PRE009", "PRE035", "PRE084"]`

```javascript
Map(38) {
  "Comp-01" => ["PRE009"],
  "B-2" => ["PRE063"],
  "B-3" => ["PRE211"],
  "Hyd" => ["#2020"],
  "160 BPM Line" => ["PRE140"],
  "Imprinting area" => ["PRE141", "PRE0291", "PRE222"],
  "Capsulation - 04" => ["PRE0243"],
  "Capsulation-03" => ["PRE0230", "PRE221"],
  "Coating-4" => ["PRE128"],
  "Coating-5" => ["PRE175"],
  "Comp-04" => ["PRE084"],
  "Capsulation-01" => ["PRE0279", "PRE0278"],
  "Coating-8" => ["PRE0301"],
  "FBP" => ["PRE001"],
  "Hyder" => ["#2017"],
  "Mum" => ["#2018"],
  "Sec" => ["#2011"],
  "Hyderabad" => ["#2021"],
  "PR" => ["PRE444"],
  "A" => ["#6"],
  "Jaipur A" => ["#1234"],
  "B" => ["#7"],
  "Kolkata" => ["#2345"],
  "FBP-02" => ["PRE082"],
  "FBP-01" => ["PRE005"],
  "Unknown" => ["PRE006", "PRE0267", "PRE0244", "PRE0245"],
  "Comp-02" => ["PRE035"],
  "Coating-2" => ["PRE065"],
  "Coating-3" => ["PRE083"],
  "Capsulation - 02" => ["PRE185"],
  "Comp-06" => ["PRE192"],
  "Automatic Inspection area" => ["PRE209"],
  "Coating-7" => ["PRE0290"],
  "Coating-6" => ["PRE0241"],
  "FBP-03" => ["PRE197"],
  "FBP-05" => ["PRE0292"],
  "FBP-06" => ["PRE0349"],
  "FBP-07" => ["PRE0403"]
}
```

### 2. equipmentLocationMap
**Purpose:** Reverse lookup - find location of any equipment instantly  
**Type:** `Map<string, string>`  
**Size:** 45 equipment entries  
**Example:** `"PRE009" → "Comp-01"`

```javascript
Map(45) {
  "PRE009" => "Comp-01",
  "PRE063" => "B-2",
  "PRE211" => "B-3",
  "#2020" => "Hyd",
  "PRE140" => "160 BPM Line",
  "PRE141" => "Imprinting area",
  "PRE0243" => "Capsulation - 04",
  "PRE0230" => "Capsulation-03",
  "PRE128" => "Coating-4",
  "PRE175" => "Coating-5",
  "PRE084" => "Comp-04",
  "PRE0279" => "Capsulation-01",
  "PRE0291" => "Imprinting area",
  "PRE0301" => "Coating-8",
  "PRE001" => "FBP",
  "#2017" => "Hyder",
  "#2018" => "Mum",
  "#2011" => "Sec",
  "#2021" => "Hyderabad",
  "PRE444" => "PR",
  "#6" => "A",
  "#1234" => "Jaipur A",
  "#7" => "B",
  "#2345" => "Kolkata",
  "PRE082" => "FBP-02",
  "PRE005" => "FBP-01",
  "PRE006" => "Unknown",
  "PRE035" => "Comp-02",
  "PRE065" => "Coating-2",
  "PRE083" => "Coating-3",
  "PRE185" => "Capsulation - 02",
  "PRE192" => "Comp-06",
  "PRE209" => "Automatic Inspection area",
  "PRE221" => "Capsulation-03",
  "PRE222" => "Imprinting area",
  "PRE0278" => "Capsulation-01",
  "PRE0267" => "Unknown",
  "PRE0244" => "Unknown",
  "PRE0290" => "Coating-7",
  "PRE0245" => "Unknown",
  "PRE0241" => "Coating-6",
  "PRE197" => "FBP-03",
  "PRE0292" => "FBP-05",
  "PRE0349" => "FBP-06",
  "PRE0403" => "FBP-07"
}
```

### 3. equipmentSequenceMap
**Purpose:** Store equipment display order  
**Type:** `Map<string, number>`  
**Size:** 45 equipment entries  
**Current State:** All sequences are `0` (null values converted to 0)

```javascript
Map(45) {
  "PRE009" => 0,
  "PRE063" => 0,
  "PRE211" => 0,
  "#2020" => 0,
  "PRE140" => 0,
  "PRE141" => 0,
  "PRE0243" => 0,
  "PRE0230" => 0,
  "PRE128" => 0,
  "PRE175" => 0,
  "PRE084" => 0,
  "PRE0279" => 0,
  "PRE0291" => 0,
  "PRE0301" => 0,
  "PRE001" => 0,
  "#2017" => 0,
  "#2018" => 0,
  "#2011" => 0,
  "#2021" => 0,
  "PRE444" => 0,
  "#6" => 0,
  "#1234" => 0,
  "#7" => 0,
  "#2345" => 0,
  "PRE082" => 0,
  "PRE005" => 0,
  "PRE006" => 0,
  "PRE035" => 0,
  "PRE065" => 0,
  "PRE083" => 0,
  "PRE185" => 0,
  "PRE192" => 0,
  "PRE209" => 0,
  "PRE221" => 0,
  "PRE222" => 0,
  "PRE0278" => 0,
  "PRE0267" => 0,
  "PRE0244" => 0,
  "PRE0290" => 0,
  "PRE0245" => 0,
  "PRE0241" => 0,
  "PRE197" => 0,
  "PRE0292" => 0,
  "PRE0349" => 0,
  "PRE0403" => 0
}
```

### 4. locationSequenceMap
**Purpose:** Store location display order (first equipment's sequence)  
**Type:** `Map<string, number>`  
**Size:** 38 locations  
**Current State:** All sequences are `0`

```javascript
Map(38) {
  "Comp-01" => 0,
  "B-2" => 0,
  "B-3" => 0,
  "Hyd" => 0,
  "160 BPM Line" => 0,
  "Imprinting area" => 0,
  "Capsulation - 04" => 0,
  "Capsulation-03" => 0,
  "Coating-4" => 0,
  "Coating-5" => 0,
  "Comp-04" => 0,
  "Capsulation-01" => 0,
  "Coating-8" => 0,
  "FBP" => 0,
  "Hyder" => 0,
  "Mum" => 0,
  "Sec" => 0,
  "Hyderabad" => 0,
  "PR" => 0,
  "A" => 0,
  "Jaipur A" => 0,
  "B" => 0,
  "Kolkata" => 0,
  "FBP-02" => 0,
  "FBP-01" => 0,
  "Unknown" => 0,
  "Comp-02" => 0,
  "Coating-2" => 0,
  "Coating-3" => 0,
  "Capsulation - 02" => 0,
  "Comp-06" => 0,
  "Automatic Inspection area" => 0,
  "Coating-7" => 0,
  "Coating-6" => 0,
  "FBP-03" => 0,
  "FBP-05" => 0,
  "FBP-06" => 0,
  "FBP-07" => 0
}
```

## Summary Statistics

- **Total Equipment Records:** 51
- **Equipment with Locations (non-empty):** 45
- **Equipment with Empty Locations:** 6
  - PRE392A, PRE392, PRE061, PRE058, PRE119, PRE117
- **Total Unique Locations:** 38
- **Locations with Multiple Equipment:**
  - Imprinting area: 3 equipment (PRE141, PRE0291, PRE222)
  - Capsulation-03: 2 equipment (PRE0230, PRE221)
  - Capsulation-01: 2 equipment (PRE0279, PRE0278)
  - Unknown: 4 equipment (PRE006, PRE0267, PRE0244, PRE0245)

## Data Issues & Recommendations

1. **Null eqp_sequence values:** All equipment have `null` sequences, defaulting to 0
   - **Recommendation:** Populate `eqp_sequence` in `equipment_model` table for proper display ordering

2. **Empty location strings:** 6 equipment records have empty location strings
   - These are excluded from the maps (filtered out by `location: { [Op.ne]: null }`)

3. **Whitespace in equipment_ids:** Some IDs have trailing spaces
   - Examples: "PRE061 ", "PRE058 ", "PRE119  ", "PRE117  "
   - **Handled by:** `.trim()` and `.toUpperCase()` normalization

4. **Inconsistent location naming:**
   - "Unknown" used for unmapped equipment
   - Empty strings vs "Unknown" - inconsistent handling

## Code Location

This data structure is generated in:
- **File:** `app/controllers/equipment_planner.controller.js`
- **Function:** `getEquipmentActivitiesByLocation()`
- **Lines:** 515-538
