Rebrand: rename ondeck->horizon in package.json, docker-compose, SERVER.md, docs; production stack at /opt/stacks/horizon

This commit is contained in:
lorentz 2026-04-12 23:59:20 +00:00
parent 77f23e12cd
commit bbdbe1ddc0
8 changed files with 464 additions and 46 deletions

View file

@ -6,11 +6,11 @@ The Designation Admin Interface allows administrators to create and manage clien
## Key Concepts
### Designations are Created in OnDeck
### Designations are Created in Horizon
**All designations are created and managed within the OnDeck application.** They are NOT imported from AFW. Instead:
**All designations are created and managed within the Horizon application.** They are NOT imported from AFW. Instead:
1. **Create a designation** in OnDeck (e.g., "Shape", "Premium", "VIP")
1. **Create a designation** in Horizon (e.g., "Shape", "Premium", "VIP")
2. **Optionally map it to an AFW ANotId** (a GUID that identifies customers in AMS360)
3. **Sync to automatically assign** clients based on their AFW data
@ -19,12 +19,12 @@ The Designation Admin Interface allows administrators to create and manage clien
Each designation can have an **optional AFW ANotId** field:
- This is a GUID from AMS360/AFW (e.g., `13CF7DCB-F6AF-42C2-A7AB-26641A216A81`)
- It identifies a group of customers in the AFW database
- When you sync, clients with this ANotId in AFW get assigned to this designation in OnDeck
- When you sync, clients with this ANotId in AFW get assigned to this designation in Horizon
### Example Workflow
```
1. Admin creates "Shape" designation in OnDeck
1. Admin creates "Shape" designation in Horizon
- Name: Shape
- Color: Indigo
- AFW ANotId: 13CF7DCB-F6AF-42C2-A7AB-26641A216A81
@ -35,7 +35,7 @@ Each designation can have an **optional AFW ANotId** field:
3. Admin saves the designation
4. Admin clicks "Sync" on the Shape designation
- OnDeck queries AFW for customers with ANotId 13CF7DCB-...
- Horizon queries AFW for customers with ANotId 13CF7DCB-...
- Finds matching clients in local database
- Updates their designationId to "Shape"
- Result: 145 clients updated, 5 skipped (already had Shape)

View file

@ -9,14 +9,14 @@
### What this script does
This script imports historical SHAPE task completion data from the team's SharePoint Excel files into OnDeck. It is a **one-time migration tool** — not part of the ongoing sync.
This script imports historical SHAPE task completion data from the team's SharePoint Excel files into Horizon. It is a **one-time migration tool** — not part of the ongoing sync.
Each team member has a folder on SharePoint at:
```
Claims/SHAPE Accounts/{MEMBER_FOLDER}/{Client}.xlsx
```
The script reads every client Excel file for each advocate, matches it to a client in OnDeck, and records whether each SHAPE task was completed, marked N/A, or left blank.
The script reads every client Excel file for each advocate, matches it to a client in Horizon, and records whether each SHAPE task was completed, marked N/A, or left blank.
### Team member folders
@ -52,12 +52,12 @@ After running, the report shows:
| Stat | Meaning |
|---|---|
| **Files processed** | Excel files successfully downloaded and parsed |
| **Clients matched** | Clients in the Excel that were found in OnDeck |
| **Clients matched** | Clients in the Excel that were found in Horizon |
| **Clients unmatched** | Clients that could not be matched — need manual review |
| **Fuzzy matches** | Clients matched by approximate name — review for correctness |
| **Tasks updated** | Existing tasks whose status was set to Completed or N/A |
| **Tasks assigned** | Tasks that had the advocate linked to them |
| **Tasks created** | Tasks from the Excel that didn't exist in OnDeck yet |
| **Tasks created** | Tasks from the Excel that didn't exist in Horizon yet |
| **Duplicates deleted** | Extra copies of the same task removed from the DB |
| **Ad-hoc created** | "Additional Services" rows and unmatched tasks saved as free-form tasks |
| **Advocates assigned** | Clients that had their Claims Advocate set from this import |
@ -65,7 +65,7 @@ After running, the report shows:
### What gets skipped
The script will **not** import a row if:
- The client name in the Excel cannot be matched to any OnDeck client (logged as "unmatched")
- The client name in the Excel cannot be matched to any Horizon client (logged as "unmatched")
- The file is named `archive*`, contains `template`, `master workbook`, or starts with `all shape` — these are intentionally excluded
Nothing else is filtered. Every task row in every matched client file is processed.
@ -80,9 +80,9 @@ Specifically: if the database already has two identical tasks for the same clien
After running the dry run, check the **"Unmatched Clients"** section of the report. For each one:
1. Check if the client exists in OnDeck under a different spelling
2. If yes — either rename the client in OnDeck to match, or rename the Excel file
3. If no — create the client in OnDeck first, then re-run the import
1. Check if the client exists in Horizon under a different spelling
2. If yes — either rename the client in Horizon to match, or rename the Excel file
3. If no — create the client in Horizon first, then re-run the import
---
@ -116,7 +116,7 @@ Each .xlsx file:
4. processFile() × N For each file:
└── parseExcelFile() Parse XLSX without external libraries (custom ZIP+XML)
└── parseExcelBlocks() Extract client blocks and task rows
└── matchClient() Match Excel client name → OnDeck client
└── matchClient() Match Excel client name → Horizon client
└── processTaskRow() × N For each task row:
└── findMatchingTasks() Look up existing task in DB (±5-day window)
└── deduplication Delete extras if >1 match