🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
187 lines
5.4 KiB
Markdown
187 lines
5.4 KiB
Markdown
# Splicing Field Mapping Guide
|
|
|
|
This document maps shapefile fields to Verofy API fields for splicing.
|
|
|
|
## Data Analysis Summary
|
|
|
|
**Source:** Map Project ID 15685
|
|
**Total Splicing Records (from API):** 0 (no existing data in this map)
|
|
**Total Splicing Records (from shapefile):** 100
|
|
**Date Retrieved:** 2025-12-09
|
|
|
|
## Shapefile Structure
|
|
|
|
From `splicing.shp`:
|
|
|
|
| Field Name | Data Type | Sample Values |
|
|
|------------|-----------|---------------|
|
|
| AKA | String | "EUR_CBSP_005_600D", "EUR_Z05_MST_018", "EUR_Z05_SP_004_450D" |
|
|
| Type | String | "Splice", "MST" |
|
|
| Group 1 | String | "Zone 02", "Zone 03" |
|
|
| Group 2 | String | "EUR_Z05 225-228", null |
|
|
| Latitude | Float | 40.778622 |
|
|
| Longitude | Float | -124.144169 |
|
|
| UID | Integer | 0, 1, 2, ... |
|
|
|
|
### Unique Values Analysis
|
|
|
|
**Type values found:**
|
|
- "Splice" (majority)
|
|
- "MST" (Mechanical Splice Terminal)
|
|
|
|
**Group 1 values:**
|
|
- "Zone 02"
|
|
- "Zone 03"
|
|
|
|
**Group 2 values:**
|
|
- Various zone identifiers like "EUR_Z05 225-228"
|
|
- Many null values
|
|
|
|
## Verofy API Structure
|
|
|
|
Based on `/map-splice` API endpoint and pattern from similar models:
|
|
|
|
| Field Name | Data Type | Required | Sample Values |
|
|
|------------|-----------|----------|---------------|
|
|
| id | Integer | Auto | (auto-generated) |
|
|
| mapProjectId | Integer | **Yes** | 15685 |
|
|
| name | String | **Yes** | "EUR_CBSP_005_600D" |
|
|
| latitude | String | **Yes** | "40.778622" |
|
|
| longitude | String | **Yes** | "-124.144169" |
|
|
| typeId | Integer | **Yes** | 1 (Splice), 2 (FTP), 3 (MST) |
|
|
| statusId | Integer | **Yes** | 1 (Planned), 2 (Splicing Required), 3 (Splicing Completed) |
|
|
| group1 | String | No | "Zone 02" |
|
|
| group2 | String | No | "EUR_Z05 225-228" |
|
|
| locked | Integer | No | 0 (unlocked), 1 (locked) |
|
|
| custom | Integer | No | 0 |
|
|
|
|
## Field Mapping
|
|
|
|
### Direct Mappings
|
|
|
|
| Shapefile Field | API Field | Transformation |
|
|
|-----------------|-----------|----------------|
|
|
| AKA | name | Direct copy (string) - This is the primary identifier |
|
|
| Latitude | latitude | Convert float to string |
|
|
| Longitude | longitude | Convert float to string |
|
|
| Group 1 | group1 | Direct copy (string) |
|
|
| Group 2 | group2 | Direct copy (string) |
|
|
|
|
### Type Mapping (Lookup Required)
|
|
|
|
The shapefile `Type` field (string) must be mapped to API `typeId` (integer) using the MapSpliceType reference:
|
|
|
|
| Shapefile Type Value | API typeId | Type Name in Verofy |
|
|
|----------------------|------------|---------------------|
|
|
| "Splice" | 1 | Splice |
|
|
| "FTP" | 2 | FTP (Fiber Termination Panel) |
|
|
| "MST" | 3 | MST (Mechanical Splice Terminal) |
|
|
|
|
### Generated/Default Values
|
|
|
|
| API Field | Value | Notes |
|
|
|-----------|-------|-------|
|
|
| mapProjectId | User provided | Required parameter |
|
|
| name | {AKA} or "Splice-{UID}" | Use AKA field, fallback to generated name |
|
|
| statusId | 1 | Default to "Planned" |
|
|
| locked | 0 | Default to unlocked |
|
|
| custom | 0 | Default value |
|
|
|
|
### Unused Shapefile Fields
|
|
|
|
| Field | Usage |
|
|
|-------|--------|
|
|
| UID | Used only as fallback if AKA is empty |
|
|
|
|
## API Endpoint
|
|
|
|
**Endpoint:** `POST /v1/map-splice/create`
|
|
**Authentication:** Bearer token required
|
|
**Success Response:** 201 Created
|
|
|
|
## Example API Request
|
|
|
|
### Example 1: Splice Point
|
|
```json
|
|
{
|
|
"mapProjectId": 15685,
|
|
"name": "EUR_CBSP_005_600D",
|
|
"latitude": "40.778622",
|
|
"longitude": "-124.144169",
|
|
"typeId": 1,
|
|
"statusId": 1,
|
|
"group1": "Zone 02",
|
|
"group2": null,
|
|
"locked": 0
|
|
}
|
|
```
|
|
|
|
### Example 2: MST Point
|
|
```json
|
|
{
|
|
"mapProjectId": 15685,
|
|
"name": "EUR_Z05_MST_018",
|
|
"latitude": "40.783264",
|
|
"longitude": "-124.142093",
|
|
"typeId": 3,
|
|
"statusId": 1,
|
|
"group1": "Zone 02",
|
|
"group2": "EUR_Z05 225-228",
|
|
"locked": 0
|
|
}
|
|
```
|
|
|
|
## Implementation Notes
|
|
|
|
1. **Type Lookup:** The current `verofy_uploader.py` incorrectly maps `Type` to `type` (string field). It should map to `typeId` (integer) using the MapSpliceType reference lookup.
|
|
|
|
2. **Reference Data:** Load MapSpliceType references from `MapSpliceType_references.json`.
|
|
|
|
3. **AKA Field Importance:** The AKA field contains meaningful identifiers that should be preserved as the name. Examples:
|
|
- "EUR_CBSP_005_600D" - Cabinet splice point
|
|
- "EUR_Z05_MST_018" - Zone 5 MST #18
|
|
- "EUR_Z05_SP_004_450D" - Zone 5 splice point #4
|
|
|
|
4. **Error Handling:** If a Type value from the shapefile is not found in the lookup table:
|
|
- Log a warning with the unknown type
|
|
- Default to typeId: 1 (Splice) as it's the most common type
|
|
- Continue processing rather than failing
|
|
|
|
5. **Status Default:** Default to statusId: 1 (Planned) for new imports. This can be updated later based on actual splicing progress.
|
|
|
|
## Status Reference
|
|
|
|
| statusId | Status Name | Description |
|
|
|----------|-------------|-------------|
|
|
| 1 | Planned | Splice location is planned but not yet worked |
|
|
| 2 | Splicing Required | Location identified, splicing work needed |
|
|
| 3 | Splicing Completed | Splicing work has been completed |
|
|
|
|
Default to statusId: 1 (Planned) for new imports.
|
|
|
|
## Type Reference
|
|
|
|
| typeId | Type Name | Description |
|
|
|--------|-----------|-------------|
|
|
| 1 | Splice | Standard fiber splice point |
|
|
| 2 | FTP | Fiber Termination Panel |
|
|
| 3 | MST | Mechanical Splice Terminal |
|
|
|
|
## Key Differences from Current Implementation
|
|
|
|
**Current (Incorrect):**
|
|
```python
|
|
splicing_data = {
|
|
"type": str(row['Type']) # ❌ Wrong - sends string
|
|
}
|
|
```
|
|
|
|
**Corrected:**
|
|
```python
|
|
splicing_data = {
|
|
"typeId": type_lookup.get(row['Type'], 1), # ✅ Correct - sends integer ID
|
|
"statusId": 1, # ✅ Added required field
|
|
"locked": 0 # ✅ Added default field
|
|
}
|
|
```
|