sync: auto-sync from GURU-BEAST-ROG at 2026-05-22 11:46:56

Author: Mike Swanson
Machine: GURU-BEAST-ROG
Timestamp: 2026-05-22 11:46:56
This commit is contained in:
2026-05-22 11:46:57 -07:00
parent e0688c6654
commit 3ad96ac7b9
4 changed files with 123 additions and 2 deletions

View File

@@ -50,6 +50,12 @@ Create, update, close, comment on, and bill tickets in Syncro PSA.
**Always pass `"taxable": false` explicitly on labor line items.** Labor products are configured with `taxable: false` in Syncro, but `add_line_item` via API does not inherit the product's taxable setting — it posts the line item as `taxable: true` regardless. Always include `"taxable": false` in the payload to match the product's configured value.
**Appointment dates — always verify day-of-week before the preview.** Day-of-week math is easy to get wrong. Before including any appointment date in a preview, run a live check and display the full day name alongside the date (e.g. "Saturday 2026-05-23", never just "2026-05-23"). The user confirms the day name at the preview step — if the name is wrong, the date is wrong. Incident: #32312 booked Sunday May 24 instead of Saturday May 23 (2026-05-21). Reported by Winter.
```bash
py -c "import datetime; d = datetime.date(YYYY, M, D); print(d.strftime('%A %Y-%m-%d'))"
```
**After every write operation, post a summary + link to #bot-alerts.** Every ticket created, updated, closed, or commented, every billing run, and every customer created posts a one-line alert to the team's live feed in Discord. This runs AFTER the write succeeds (never before — no alert for an action that didn't happen) and applies regardless of who runs the skill or where (workstation or the Discord bot). Read-only commands (list / view / search) post nothing. Full format, link mapping, and helper call are in "Post to #bot-alerts" below.
## Implementation
@@ -342,8 +348,8 @@ Do Not Email: <yes/no>
APPOINTMENT (omit section if no appointment)
-----------
Type: <type name>
Start: <start_at>
End: <end_at> (90 min)
Start: <Weekday YYYY-MM-DD> at <HH:MM AM/PM> ← day name verified with py datetime
End: <Weekday YYYY-MM-DD> at <HH:MM AM/PM> (90 min default)
Location: <location or blank>
ASSET: <asset name or none>