# Phase II — Move Backend: Old Central Decommissioning

**Project:** Old Central Decommissioning
**Phase:** II — Backend Migration (Scripts & Scheduled Tasks)
**Owner:** Director of IT
**Created:** 2026-03-18
**ClickUp List:** Projects > Old Central Decomissioning > Phase II
**Status:** Planning Complete, Ready for Development

---

## 1. Executive Summary

Phase I moved all frontend pages from old Central (Phalcon) to new Central (Laravel/Filament). Phase II migrates all backend automation — 28 active cron jobs, 3 shell scripts, and 1 sub-application — from the `opsgoparts` server user to the `centralgoparts` Laravel application.

**Old System:** Phalcon PHP 8.0 framework at `/home/opsgoparts/www/central/`
**New System:** Laravel 11 + Filament 3 at `/home/centralgoparts/public_html/`
**Shared:** Both systems use the same MySQL server and `goparts` database. No data migration required.

**Total Tasks:** 36 (28 migrations + 3 evaluations + 2 infrastructure + 2 cutover + 1 reporting)

---

## 2. What Is Being Migrated

### 2.1 Old System Architecture

The old Central uses:
- **Phalcon CLI tasks** in `/home/opsgoparts/www/central/app/tasks/` (39 PHP files)
- **A DB-driven scheduler** (`scheduler` table + `SchedulerModel::runQueue()`) triggered every minute
- **A Phalcon cron engine** (`CronTask`) that reads active jobs from a `CronJob` database table
- **Shell scripts** in `/home/opsgoparts/public_html/central/shell/` for complex pipelines
- **A separate Laravel sub-app** (`goparts-ordering`) for Turn14/USAuto order processing
- **PHP 8.0** via `ea-php80`

### 2.2 New System Architecture

New Central uses:
- **Laravel Artisan Commands** in `app/Console/Commands/`
- **Laravel Task Scheduler** (`Kernel.php`) — single cron entry runs all tasks
- **Laravel Queue** (database driver) for async job processing
- **PHP 8.3** via `ea-php83`
- **Built-in overlap protection**, retry logic, and failure tracking

### 2.3 What Already Exists in New Central

| Command | Schedule | Purpose |
|---------|----------|---------|
| `shipping:cache-rates` | Every minute | Pre-calculates shipping rates for orders |
| `monitoring:sync-tracking` | Every 2 hours | Polls ShipEngine for tracking updates |
| `monitoring:send-morning-alerts` | Daily 7:00 AM PST | Operations morning alert emails |
| `snapshot:catalog` | Daily 00:05 | Warehouse inventory snapshot |

### 2.4 What Is Disabled / Skipped (No Migration Needed)

| Old Cron Entry | Reason |
|---|---|
| `margincalculator calculatemargin` | Commented out in crontab (both entries) |
| `finaleinventory syncStocks` | Replaced by WHIMS sync |
| `partslink jcautoImport` | Commented out |
| `partslink sync` | Commented out |
| `shipengine updateOrdersIsFullDeliveredFlag` | Disabled 2026-02-13, handled by `monitoring:sync-tracking` |

---

## 3. Complete Crontab Migration Map

### Old Crontab (`opsgoparts` user)

| # | Old Cron Expression | Old Command | Frequency | New Task | New Artisan Command |
|---|---|---|---|---|---|
| 1 | `*/1 * * * *` | `scheduler main` | Every 1 min | PH2-01 | Laravel Queue + `schedule:run` |
| 2 | `0 1 * * *` | `daily_run.sh` | Daily 1 AM | PH2-02 | `system:housekeeping` |
| 3 | `*/30 * * * *` | `order syncShippedOrders` | Every 30 min | PH2-03 | `orders:sync-shipped` |
| 4 | `*/30 * * * *` | `order syncCanceledOrders` | Every 30 min | PH2-04 | `orders:sync-canceled` |
| 5 | `*/15 * * * *` | `order processTracks` | Every 15 min | PH2-05 | `orders:process-tracks` |
| 6 | `*/15 * * * *` | `usauto main` | Every 15 min | PH2-06 | `usauto:generate-reports` |
| 7 | `*/2 * * * *` | `usauto updateTrackingInfoFromOrdering` | Every 2 min | PH2-07 | `usauto:sync-tracking` |
| 8 | `15 22 * * *` | `usauto_price.sh` | Daily 10:15 PM | PH2-08 | `usauto:import-prices` |
| 9 | `*/10 * * * *` | `psorders processOrders` | Every 10 min | PH2-09 | `ps:process-orders` |
| 10 | `*/15 * * * *` | `psorders syncPsTrackInfo` | Every 15 min | PH2-10 | `ps:sync-tracking` |
| 11 | `0 2 * * *` | `partscan createPartsquareVendorTable` | Daily 2 AM | PH2-11 | `ps:build-vendor-table` |
| 12 | `*/2 * * * *` | `shipstation preloadCarrierRates` | Every 2 min | PH2-12 | EVALUATE — may overlap with `shipping:cache-rates` |
| 13 | `5 * * * *` | `shipstation updateShipments` | Hourly :05 | PH2-13 | `shipstation:update-shipments` |
| 14 | `*/10 * * * *` | `shipengine batchSubscribe` | Every 10 min | PH2-14 | EVALUATE — may overlap with `monitoring:sync-tracking` |
| 15 | `*/15 * * * *` | `meyer processOrders` | Every 15 min | PH2-15 | `meyer:process-orders` |
| 16 | `*/15 * * * *` | `meyer processTracking` | Every 15 min | PH2-16 | `meyer:sync-tracking` |
| 17 | `*/15 * * * *` | `Lkqtracking processTracking` | Every 15 min | PH2-17 | `keystone:import-tracking` |
| 18 | `*/10 * * * *` | `amazon updateTrackings` | Every 10 min | PH2-18 | `amazon:sync-tracking` |
| 19 | `42 */4 * * *` | `rpmware import` | Every 4h :42 | PH2-19 | `rpmware:import-orders` |
| 20 | `14 */4 * * *` | `partslink maxzoneImport` | Every 4h :14 | PH2-20 | `supplier:import-maxzone` |
| 21 | `21 */4 * * *` | `partslink eltImport` | Every 4h :21 | PH2-21 | `supplier:import-elt` |
| 22 | `28 */4 * * *` | `partslink dtlImport` | Every 4h :28 | PH2-22 | `supplier:import-dtl` |
| 23 | `0 1 * * *` | `partslink expresspartsImport` | Daily 1 AM | PH2-23 | `supplier:import-expressparts` |
| 24 | `0 */4 * * *` | `partslink perfradiatorImport` | Every 4h :00 | PH2-24 | `supplier:import-perfradiator` |
| 25 | `49 */4 * * *` | `partslink pbiImport` | Every 4h :49 | PH2-25 | `supplier:import-pbi` |
| 26 | `32 2 * * *` | `partslink meyerImport` | Daily 2:32 AM | PH2-26 | `supplier:import-meyer-catalog` |
| 27 | `*/15 * * * *` | `partslink.sh` | Every 15 min | PH2-27 | `partslink:sync` |
| 28 | `0 6 * * *` | `partslink updateDiscontinuedPartsOutOfStock` | Daily 6 AM | PH2-28 | `partslink:mark-discontinued` |
| 29 | `5 * * * *` | `whimsinventory syncStocks` | Hourly :05 | PH2-29 | `whims:sync-inventory` |
| 30 | `30 4 * * *` | `price scheduleUpdatePriceTask` | Daily 4:30 AM | PH2-30 | `price:schedule-update` |
| 31 | `*/15 * * * *` | `Itemsuppliers update` | Every 15 min | PH2-31 | `item-suppliers:update` |
| 32 | `12 1 * * *` | `products syncMagentoUrlKeysToGoparts` | Daily 1:12 AM | PH2-32 | EVALUATE — may be obsolete |
| 33 | `30 0 * * *` | `ordersitems buildNonSellingItems` | Daily 00:30 | PH2-33 | `reporting:non-selling-items` |
| 34 | `* * * * *` | `goparts-ordering artisan schedule:run` | Every min | PH2-34 | EVALUATE — merge/keep/decommission |

---

## 4. Release Batches & Sequencing

Tasks are grouped into release batches. Each batch is deployed, verified, and signed off before the next begins. Within a batch, all tasks can be developed in parallel.

### Dependency Chain

```
PH2-01 (Infrastructure) ──> All other batches depend on this
                         ──> PH2-02 (Housekeeping) can go parallel

Then batches are INDEPENDENT of each other — release in any order.

All batches ──> PH2-35 (Parallel Run) ──> PH2-36 (Decommission)
```

### Batch Schedule

| # | Batch | Tasks | Count | Dependencies | Risk Level |
|---|---|---|---|---|---|
| 1 | **Infrastructure** | PH2-01, PH2-02 | 2 | None — do first | LOW |
| 2 | **Order Operations** | PH2-03, PH2-04, PH2-05 | 3 | PH2-01 | MEDIUM — touches Magento |
| 3 | **USAuto** | PH2-06, PH2-07, PH2-08 | 3 | PH2-01 | MEDIUM — supplier API |
| 4 | **PartSquare** | PH2-09, PH2-10, PH2-11 | 3 | PH2-01 | MEDIUM — order processing |
| 5 | **Shipping** | PH2-12, PH2-13, PH2-14 | 3 | PH2-01 | HIGH — 2 are evaluate tasks, ShipStation API |
| 6 | **Meyer** | PH2-15, PH2-16 | 2 | PH2-01 | HIGH — auto-places real orders |
| 7 | **Keystone/LKQ** | PH2-17 | 1 | PH2-01 | LOW — file-based, no API |
| 8 | **Amazon** | PH2-18 | 1 | PH2-01 | HIGH — Amazon SP-API, order status changes |
| 9 | **RPMWare** | PH2-19 | 1 | PH2-01 | MEDIUM — order import |
| 10 | **Supplier Imports** | PH2-20 to PH2-26 | 7 | PH2-01 | LOW — price data only, no order changes |
| 11 | **Partslink Core** | PH2-27, PH2-28 | 2 | PH2-01 | MEDIUM — affects product pricing |
| 12 | **WHIMS** | PH2-29 | 1 | PH2-01 | MEDIUM — inventory data |
| 13 | **Price** | PH2-30 | 1 | PH2-01 | MEDIUM — affects product prices |
| 14 | **Item Suppliers** | PH2-31 | 1 | PH2-01 | LOW — analytics/reporting only |
| 15 | **Magento** | PH2-32 | 1 | PH2-01 | LOW — evaluate only |
| 16 | **Reporting** | PH2-33 | 1 | PH2-01 | LOW — reporting only |
| 17 | **GoParts Ordering** | PH2-34 | 1 | PH2-01 | MEDIUM — evaluate sub-app |
| 18 | **Cutover** | PH2-35, PH2-36 | 2 | ALL above | HIGH — final switchover |

### Recommended Release Order (risk-first)

**Start with low-risk, high-visibility batches to build confidence:**

1. Infrastructure (PH2-01, 02) — foundation, must be first
2. Supplier Imports (PH2-20-26) — low risk, price data only, easy to verify
3. Reporting (PH2-33) + Item Suppliers (PH2-31) — analytics only, no operational impact
4. Keystone/LKQ (PH2-17) — file-based, simple
5. Partslink Core (PH2-27, 28) — affects pricing but well-understood
6. WHIMS (PH2-29) + Price (PH2-30) — inventory/pricing
7. Order Operations (PH2-03, 04, 05) — Magento sync
8. USAuto (PH2-06, 07, 08)
9. PartSquare (PH2-09, 10, 11)
10. RPMWare (PH2-19)
11. Shipping (PH2-12, 13, 14) — evaluate tasks first
12. Meyer (PH2-15, 16) — places real orders, test carefully
13. Amazon (PH2-18) — SP-API, high stakes
14. Magento (PH2-32) + GoParts Ordering (PH2-34) — evaluate tasks
15. Cutover (PH2-35, 36)

---

## 5. Standards & Conventions (All New Commands Must Follow)

### 5.1 Command Structure
- Every command gets `--dry-run` flag (logs what would change, makes no DB writes)
- Every command gets relevant options (e.g., `--days=N`, `--limit=N`)
- Signature naming: `{domain}:{action}` (e.g., `meyer:process-orders`)
- Reference template: `app/Console/Commands/SyncShipEngineTracking.php`

### 5.2 Logging
- **Dedicated daily channel** per command in `config/logging.php`
- **Directory per command:** `storage/logs/{command-name}/{command-name}-YYYY-MM-DD.log`
- **Rotation:** Daily files, 14-day retention, auto-deleted after that
- **Per-run logging:** Timestamp, records processed, each action taken, summary at end
- **Summary line format:** `[SUMMARY] total=X updated=Y skipped=Z errors=W duration=Ns`

### 5.3 Scheduling
- All tasks registered in `app/Console/Kernel.php`
- `withoutOverlapping()` on every task (replaces old file-lock patterns)
- `appendOutputTo()` to the command's log file
- Verify with: `ea-php83 artisan schedule:list`

### 5.4 Error Handling
- Catch exceptions per-record, log, and continue (don't abort entire run)
- Failed records counted in summary
- Exit code 0 for success, 1 for critical failure
- Critical failures should trigger notification (future: integrate with monitoring alerts)

---

## 6. Development Workflow Per Task

Each ClickUp task contains a **Dev Prompt** section — a complete, self-contained prompt that can be given directly to a developer or to Claude. The workflow for each task is:

```
1. SCOPE     → Move task to "Scoping" in ClickUp
               Read the Dev Prompt, understand the old code

2. DEVELOP   → Move to "In Development"
               Create the artisan command following the prompt
               Run: ea-php83 artisan {command} --dry-run

3. REVIEW    → Move to "In Review"
               Code review: matches old behavior? Follows standards?

4. TEST      → Move to "Testing"
               Run side-by-side with old cron for 24 hours
               Compare: same records processed, same DB changes

5. SHIP      → Move to "Shipped"
               Register in Kernel.php, deploy
               Begin monitoring period (1 week)
               Old cron stays active during monitoring

6. VERIFY    → After 1 week, confirm no discrepancies
               Then disable old cron entry for this task
```

---

## 7. Monitoring & Health Checks

### 7.1 Per-Command Monitoring

Every migrated command must be verifiable via:

| Check | How | Frequency |
|---|---|---|
| Task is scheduled | `ea-php83 artisan schedule:list` | After deploy |
| Task is running | Check log file has today's entries | Daily |
| Task is succeeding | Log summary line shows errors=0 | Daily |
| Output matches old | Compare DB state old vs new | During parallel run |

### 7.2 Global Health Dashboard

After all commands are migrated, the following should be monitored:

| Metric | Query / Check | Alert If |
|---|---|---|
| Scheduled tasks count | `ea-php83 artisan schedule:list \| wc -l` | Drops below expected count |
| Failed jobs | `SELECT COUNT(*) FROM failed_jobs` | > 0 |
| Log files exist today | `ls storage/logs/*/$(date +%Y-%m-%d)*` | Any command missing today's log |
| Queue backlog | `SELECT COUNT(*) FROM jobs` | Growing continuously |
| Disk usage | `du -sh storage/logs/` | > 5 GB (housekeeping not running) |

### 7.3 Parallel Run Comparison Queries

During the parallel run period (PH2-35), use these queries to compare old vs new:

```sql
-- Tracking records created (USAuto example)
SELECT 'last_hour' as period, COUNT(*) as count
FROM dropshipper_tracking
WHERE supplier_id = 16 AND created_at > NOW() - INTERVAL 1 HOUR;

-- Meyer orders placed
SELECT processed, COUNT(*) FROM meyer_orders
WHERE updated_at > NOW() - INTERVAL 1 HOUR GROUP BY processed;

-- Shipment updates
SELECT COUNT(*) FROM shipments
WHERE tracking_number IS NOT NULL AND updated_at > NOW() - INTERVAL 2 HOUR;

-- Order status syncs to Magento (check for stuck orders)
SELECT order_status_id, COUNT(*) FROM orders
WHERE date_placed > NOW() - INTERVAL 7 DAY GROUP BY order_status_id;
```

---

## 8. Risk Assessment

### 8.1 High-Risk Tasks

| Task | Risk | Mitigation |
|---|---|---|
| **PH2-15: Meyer Auto-Ordering** | Places real purchase orders with supplier | Extensive `--dry-run` testing. Manual verification of first 5 orders. Compare Meyer portal. |
| **PH2-18: Amazon Tracking** | Modifies order item statuses, creates tracking records, adds notes | Parallel run must show identical DropshipperTracking records (supplier_id=47) |
| **PH2-13: ShipStation Updates** | Updates tracking + shipping costs on shipments, triggers item status changes | Compare shipment records hourly during parallel run |
| **PH2-03/04: Magento Sync** | Pushes status changes to Magento storefront | Wrong sync = customer sees wrong order status. Test on subset first. |

### 8.2 Risks That Apply to All Tasks

| Risk | Likelihood | Impact | Mitigation |
|---|---|---|---|
| Duplicate processing during parallel run | HIGH | Records created twice | All commands must use INSERT-IF-NOT-EXISTS / dedup checks |
| Old helper classes not portable to Laravel | MEDIUM | Dev time increase | Port business logic as raw SQL where needed, don't over-engineer |
| API credentials missing in new system | MEDIUM | Command fails silently | Each task's acceptance criteria requires end-to-end test |
| Memory limits on large datasets | LOW | Command crashes | Port old memory_limit settings, add chunking where possible |
| File path differences between users | LOW | File not found | Document all cross-user file paths in each task |

### 8.3 Rollback Strategy

Every batch has a simple rollback:

1. **Disable new command** — comment out the line in `Kernel.php`, deploy
2. **Re-enable old cron** — uncomment the line in `opsgoparts` crontab
3. **Old system is untouched** throughout Phase II — it's always there as fallback

There is **no data migration** — both systems read/write the same database. Rollback is instant.

---

## 9. Key File Paths Reference

### Old System (read-only reference)
| Path | Contents |
|---|---|
| `/home/opsgoparts/www/central/app/tasks/` | 39 Phalcon CLI task files |
| `/home/opsgoparts/www/central/app/helpers/` | Business logic helpers |
| `/home/opsgoparts/www/central/app/models/` | Phalcon DB models |
| `/home/opsgoparts/www/central/app/library/` | API clients (ShipStation, Amazon, etc.) |
| `/home/opsgoparts/public_html/central/shell/` | Shell scripts (3 files) |
| `/home/opsgoparts/public_html/central/public/goparts-ordering/` | Separate Laravel sub-app |
| `/home/opsgoparts/www/central/storage/log/` | Old log files |

### New System
| Path | Contents |
|---|---|
| `/home/centralgoparts/public_html/app/Console/Commands/` | Artisan commands (currently 8, will grow to ~40) |
| `/home/centralgoparts/public_html/app/Console/Kernel.php` | Task scheduler registration |
| `/home/centralgoparts/public_html/config/logging.php` | Log channel definitions |
| `/home/centralgoparts/public_html/storage/logs/` | All log files (subdirs per command) |
| `/home/centralgoparts/public_html/config/database.php` | DB connections (may need goparts_ordering added) |

### Cross-User File Paths (commands that read from other users' directories)
| File Path | Used By | Notes |
|---|---|---|
| `/home/usauto/usauto_inv/` | PH2-08 (USAuto Price Import) | ZIP files uploaded by USAuto |
| `/home/goparts/go-parts.com/keystone/` | PH2-17 (Keystone Tracking) | ZIP/XML files from LKQ |
| `/home/ccctrue2/gbw/xml/qo/` | Existing `quotes:aggregate-ccc` | CCC quote XML files |

---

## 10. Decisions Pending

These items require a decision before development can proceed:

| # | Decision | Task | Options | Impact |
|---|---|---|---|---|
| 1 | **ShipStation rate preloading overlap** | PH2-12 | SKIP (new `shipping:cache-rates` covers it) or MIGRATE | Determines if we build a new command or not |
| 2 | **ShipEngine webhook vs polling** | PH2-14 | SKIP (2h polling sufficient) or MIGRATE (need real-time) | Affects tracking update latency |
| 3 | **Magento URL key sync still needed?** | PH2-32 | KEEP, TEMPORARY, or SKIP | If Magento sunset is planned, may be wasted effort |
| 4 | **GoParts Ordering sub-app fate** | PH2-34 | MERGE into Central, KEEP separate, or DECOMMISSION | Affects architecture and cron setup |

---

## 11. Success Criteria for Phase II Completion

Phase II is **complete** when ALL of the following are true:

- [ ] All 28 active cron jobs have equivalent Laravel artisan commands deployed and running
- [ ] All 3 evaluation tasks (PH2-12, 14, 32) have documented decisions
- [ ] GoParts Ordering sub-app (PH2-34) has a documented decision and action taken
- [ ] Every new command has been running successfully for 1+ week
- [ ] `opsgoparts` crontab is fully commented out (with date stamps)
- [ ] No operational team member reports missing data or broken workflows
- [ ] All new commands log to dedicated daily-rotated log files
- [ ] `ea-php83 artisan schedule:list` shows all expected tasks
- [ ] `failed_jobs` table has 0 unresolved entries
- [ ] Old Central codebase archived to `/home/opsgoparts/archive/`
- [ ] This document updated with final status and completion date

---

## 12. Old Crontab (Full Reference)

Preserved here for reference. This is the complete `opsgoparts` crontab as of 2026-03-18:

```crontab
*/1 * * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php scheduler main > /dev/null 2>&1
0 1 * * * /home/opsgoparts/public_html/central/shell/daily_run.sh > /dev/null 2>&1

15 22 * * * /home/opsgoparts/public_html/central/shell/usauto_price.sh > /home/opsgoparts/public_html/central/storage/log/price/usauto_price.log
*/15 * * * * /home/opsgoparts/public_html/central/shell/partslink.sh > /home/opsgoparts/public_html/central/storage/log/price/partslink.log

*/2 * * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php shipstation preloadCarrierRates > /dev/null 2>&1
*/10 * * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php psorders processOrders > /dev/null 2>&1

*/30 * * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php order syncShippedOrders > /dev/null 2>&1
*/30 * * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php order syncCanceledOrders > /dev/null 2>&1

*/10 * * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php shipengine batchSubscribe > /dev/null 2>&1
#DISABLED-2026-02-13 */10 * * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php shipengine updateOrdersIsFullDeliveredFlag > /dev/null 2>&1
*/15 * * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php psorders syncPsTrackInfo > /dev/null 2>&1
5 * * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php shipstation updateShipments > /dev/null 2>&1
*/10 * * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php amazon updateTrackings > /dev/null 2>&1

*/2 * * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php usauto updateTrackingInfoFromOrdering > /dev/null 2>&1
*/15 * * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php usauto main > /dev/null 2>&1
*/15 * * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php order processTracks > /dev/null 2>&1

### Profitability Cron
#*/10 * * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php margincalculator calculatemargin > /dev/null 2>&1

### MEYER Auto ordering
*/15 * * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php meyer processOrders > /home/opsgoparts/public_html/central/meyer_log.log
*/15 * * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php meyer processTracking > /dev/null 2>&1

30 4 * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php price scheduleUpdatePriceTask > /dev/null 2>&1

### WHIMS SYNC instead of Finale
5 * * * * /opt/cpanel/ea-php80/root/bin/php /home/opsgoparts/public_html/central/app/cli.php whimsinventory syncStocks > /dev/null 2>&1
#5 * * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php finaleinventory syncStocks > /dev/null 2>&1
0 2 * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php partscan createPartsquareVendorTable > /dev/null 2>&1

#7 */4 * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php partslink jcautoImport > /dev/null 2>&1
14 */4 * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php partslink maxzoneImport > /dev/null 2>&1
21 */4 * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php partslink eltImport > /dev/null 2>&1
28 */4 * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php partslink dtlImport > /dev/null 2>&1
0 1 * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php partslink expresspartsImport > /dev/null 2>&1
0 */4 * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php partslink perfradiatorImport > /dev/null 2>&1
42 */4 * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php rpmware import > /dev/null 2>&1
49 */4 * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php partslink pbiImport > /dev/null 2>&1
32 2 * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php partslink meyerImport > /dev/null 2>&1

#0 */3 * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php partslink sync > /dev/null 2>&1

# THIS SCRIPT WILL MARK OLD DISCONTINUED PARTS AS OUT-OF-STOCK
0 6 * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php partslink updateDiscontinuedPartsOutOfStock > /dev/null 2>&1

30 0 * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php ordersitems buildNonSellingItems > /dev/null 2>&1

12 1 * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php products syncMagentoUrlKeysToGoparts > /dev/null 2>&1

* * * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/public/goparts-ordering/AutoParts/artisan schedule:run > /home/opsgoparts/public_html/central/public/goparts-ordering/AutoParts/storage/logs/cron-test.log

*/15 * * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php Itemsuppliers update > /dev/null 2>&1

# LKQ CRON FOR IMPORTING TRACKING NUMBER FOR KEYSTONE
*/15 * * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php Lkqtracking processTracking > /home/central/www/central/storage/log/keystone-cron.log 2>&1

### Central Profitability data collector
#*/10 * * * * /opt/cpanel/ea-php80/root/usr/bin/php /home/opsgoparts/public_html/central/app/cli.php margincalculator calculatemargin >> /home/opsgoparts/www/central/storage/log/central-profitability.log 2>&1
```

---

*Document version: 1.0 | Last updated: 2026-03-18*
