Click accept_470
Opens vtg-bid-intake form in new tab
Manual
Fill Intake Form
Sales Exec · Blueprints · delivery · partner · mfr · due date · bond
Manual
Click any step to open detail panel →
Monday_Item_ID__c as the external ID — creating new SF records or updating existing ones idempotently. After the SF upsert, the Worker writes the Salesforce Account ID back to the UID column (text_mm6s8adk) on the monday.com Accounts board, completing the cross-system link. A backfill script (backfill.mjs) ran against all 791 existing accounts to populate Salesforce and stamp the UID column. Complements vtg-monday-sf-sync which syncs Bids — this Worker handles the CRM Account/Contact layer.link_mm591mdg, and creates a bond subitem + email if bond is required. The accept also sends a trigger to El Nova, which creates the Accepted Monitor board item.link_mm591mdg, and creates a bond subitem + email if required. Patched Sep 3 2026: fixed Account/Contact lookup (items_page + contains_text — previously used unreliable items_by_multiple_column_values), fixed SOV Builder link not being written, bond section redesigned (Surety bond read-only), retries bumped 3→4.?item={monday_item_id}. Supports multi-tab buildings, ADD-ALTS tab, Summary tab, section type picker (Wired/Wireless/Firewall/UPS/Cable/MIBS/Fiber/Other), SKU dropdown, per-row labor, markup overrides, and bond toggle. Save & Submit generates a jsPDF SOV PDF and uploads it to the Bids #3 Files column. Saved payload includes a vendorPOs array pre-grouped by vendor — ready for future NetSuite PO creation.logo file column. Sets logo_status to Logo Found / Needs Manual Logo / No Website. Triggered on Account creation. Companion script vtg-logo-backfill (backfill.mjs) ran against all 786 existing Accounts.config/tools.json is source of truth for tool entries. Docs backed by GitHub markdown files.sso.us.tdsynnex.com, caches the token in KV with auto-refresh, and exposes a /api/lookup?pn=PARTNUMBER endpoint. Handles both numeric part numbers (synnexSKU) and alphanumeric (mfgPN). Falls back to SKU_CATALOG KV for VTG-specific items (labor, Cloudpath). Called internally by vtg-sov-builder via a [[services]] binding — never exposed directly to the browser. Key bug fixed at build: TD Synnex returns HTTP 200 with status: "Not found" for unknown SKUs (not a 404), requiring an explicit status-string check to trigger the KV fallback.text_mm6s8adk) on the Accounts board. A backfill script (backfill.mjs) ran against all 791 existing accounts to populate Salesforce and stamp the UID column. Complements vtg-monday-sf-sync which syncs Bids — this Worker handles the CRM Account/Contact layer.document_status_changed webhook when a SOW finishes generating, downloads the .docx, and routes by template name — currently hardcoded to ScopeStack eRate Template V2; needs update to V3 template name once V3 is uploaded to ScopeStack. Uploads to Bids #3 SOW Document column (file_mm6wm4hn); anything else goes to El Nova Leads Customer Summary (file_mkw7hy4z). Endpoint 2 (POST /generate): triggered by a "Generate SOW" button click on a Bids #3 item — reads the 470# from the item, finds the matching ScopeStack project, and triggers programmatic SOW generation; the webhook then auto-delivers the doc. 470# extracted from filename or via project API lookup when filename is null. ⚠ Pending: template routing update to V3; vtg-cs-form needs 6 PM task subitems added (Project Kickoff, Site Access, Install Scheduling, Weekly Status, Documentation, Closeout).remote ap-cli <MAC> "get lldp neighbors" on each via SSH, parses output to extract switch hostname, port, chassis MAC, and management IP, displays as a formatted console table, exports to a timestamped CSV, and optionally writes LLDP data back to each AP's description field via controller CLI. Built to run locally because remote sites lack public-facing IPs on the controller. Uses prompt-based SSH waiting (_wait_for()) rather than blind sleeps. Added to VTG portal as tool #23.text_mm6s8adk) by the vtg-sf-account-sync Worker after a successful Account upsert. Serves as the permanent cross-system identifier linking a monday.com Account record to its Salesforce counterpart. The external ID field Monday_Item_ID__c on the SF Account object is the join key used for idempotent upserts — UID is what comes back.wrangler deploy from Command Prompt (not PowerShell — blocked by Norton). Source files at OneDrive\VTG Flows\<worker-name>\.https://{accountId}.suitetalk.api.netsuite.com/…/oauth2/v1/token.wrangler deploy), manage KV keys (wrangler kv key put/get/delete), and set secrets (wrangler secret put). Must be run from Command Prompt (not PowerShell — blocked by Norton AV)./admin/skus. Lets Jon manage the product catalog without touching code or running wrangler commands: browse all vendor SKUs, add individual parts, upload JSON catalog files, and see the wrangler CLI commands for bulk pushes. Vendor catalogs loaded: Ruckus switches/APs, N1C UPS (62 SKUs at 2026-27 Platinum pricing), VTG cabling (shared with Materials Log).query (the GraphQL mutation), variables (JSON with {"file": null}), map (JSON with {"0": ["variables.file"]}), and the file itself as field "0". The simpler variables[file] form-append approach silently returns a 200 OK but does not actually persist the file. Endpoint: https://api.monday.com/v2/file (not the standard /v2 endpoint). Used by vtg-scopestack-doc-sync to attach SOW .docx files to board items.| ID | Trigger | Action | Notes |
|---|---|---|---|
| 615242921 | When an item is created | Send a webhook | Fires vtg-account-logo Worker on Account creation to scrape + upload district logo |
| 615244207 | When column text_mkxpgyv6 (website URL) changes | Send a webhook | Re-triggers logo fetch when El Nova website URL is updated on an existing Account |
| SF sync webhook | When Account created or updated | Send webhook → vtg-sf-account-sync | LIVE Sep 8 2026 — upserts Account + Contact to Salesforce via Monday_Item_ID__c external ID; writes SF Account ID back to UID column (text_mm6s8adk) |
| ID | Trigger | Action | Notes |
|---|---|---|---|
| 7920733007 | When "Accept 470" button clicked | Set Status column (color_mm599ptd) → Accepted | The first step in the accept chain — status change then triggers the webhook below |
| 608965294 | When Status → Accepted (color_mm599ptd) | Send webhook | Fires vtg-bid-intake Worker to create the Bids #3 item; also sends El Nova accept trigger |
| 615218876 / 615223909 | When "Accept 470" button (button_mkw37e4e) changes | Send webhook (×2) | El Nova integration webhooks registered via API (source: API, app 1573784) — El Nova listens for these to update its own system on accept |
| 617748761 | When file column (file_mkw7hy4z) changes | Send webhook | Fires when a USAC PDF or addendum is uploaded — used by the Opportunity Score extraction Worker (CAM Leads) |
| 490861922 | When "Accept 470" button clicked | Move item to group (Accepted group) | Austin's original El Nova automation — physically moves the lead item to the Accepted group on the board |
| 490862005 | When "Reject 470" button clicked | Move item to Rejected group | Routes rejected leads off the active list — rejected leads do NOT go to Accepted Monitor |
| 493350968 / 493351900 / 493355183 / 493355373 | When addendum file column changes + item is in specific group | Move item to group + notify assigned person | Four automations covering two file columns × two group contexts — notifies the assigned sales person: "New addendum for {District} - 470#: {name}" |
| 566810401 / 566810403 | When item created / When item name changes | AI: extract "470 #" from item name → text_mm2f36c column | monday AI automation — parses the 470# out of the lead item name and writes it to a dedicated text column for downstream useAI |
| ScopeStack webhook (Sep 8) | ScopeStack document_status_changed (status=finished, type=sow) | Download .docx → upload to Bids #3 file_mm6wm4hn or El Nova Leads file_mkw7hy4z | vtg-scopestack-doc-sync · LIVE Sep 8 2026 |
| ID | Trigger | Action | Notes |
|---|---|---|---|
| 482374702 | New item created | Set Bid Creation Date (deal_creation_date) to today | Timestamps every new bid automatically |
| 482374703 | New item created | Set Bid Stage → Folder Creation | All new bids start at stage Folder Creation (index 15) |
| 482374765 | New item created | Create 23 subitems (full bid lifecycle task list) | The backbone of the bid task system — creates all tasks from Folder Creation through Awaiting Results in one shot, each pre-tagged by stage and pre-dated from Bid Due Date |
| 483152942 | New item created | Mirror Bid Due Date to subitem "Bid Due Date Mirror" column | Keeps subitem task due date formula in sync from the parent bid due date |
| 483296416 | New item created | Refresh Bid Name Formula column (formula_mkwrhcw) | Forces the formula "District - 470#: XXXXXXXXX" to populate on creation |
| 482374704 | Stage → Deal Reg | Create linked item on Deal Reg board (18176632827) | Auto-creates the Deal Reg record when stage changes; links back via connect_boards1 relation |
| 482374714 | Stage → Deal Reg | Move item to Deal Reg group | Group = physical location of the item in the board view |
| 482374721 | Stage → Bid Building | Move item to Bid Building group | |
| 482374719 | Stage → Bid Compilation | Move item to Bid Compilation group | |
| 482374720 | Stage → Bid Submittal | Move item to Bid Submittal group | |
| 482374739 | Stage → Awaiting Results | Move item to Awaiting Results group | |
| 482374746 | Stage → Post-Sale | Create 6 Post-Sale subitems + move to Post-Sale group | LOI, CW contract (dead task), FCDL/SPI tasks, PO, SOV update |
| 482374740 | Stage → Post-Monday | Move item to Post-Monday group | |
| 559103546 | Item enters Post-Monday group | Create item on E-Rate Deals board (18406412794) | The active Post-Monday handoff — replaces the inactive 482374713 (Projects #4) and 482374738 (CS/PM notification) |
| 482374717 | Stage → Wins Archive | Post completion update + move to Wins Archive group | Message: "This Bid has been completed and billed in full! Congrats! Bid Creation Date: {date} Bid Close Date: {date}" |
| 482374723 | Stage → Lost | Post update + move to Lost group + rename item | Message: "This Bid was lost. Please update all attached Boards, and fill in final amounts and results." |
| 562741747 | Stage → Post-Sale (status index 12) | Send webhook to vtg-cs-form | One of two vtg-cs-form webhook triggers |
| 483153616 | Stage → Post-Sale (secondary trigger) | Send webhook to vtg-cs-form | Redundant webhook for vtg-cs-form reliability |
| 482374706 | Subitem status → ARCHIVE | Archive the subitem | Manual archive — hides completed/irrelevant tasks from the active subitem view |
| 482374707 | Subitem status → You're Up! | Notify assignee | "You're Up! {task} is due {date} for {bid name}. You're not waiting on anyone." |
| 482374711 | Subitem status → N/A | Clear assignee, due date, and Bid Stage Subitem | Effectively removes the task from the active queue; used for inapplicable BEAR/SPI tasks |
| 482374715 | Subitem due date set + Sales Rep = Jake | Auto-assign Jake to subitem | Watches deal_owner column — assigns Jake (92155649) to his subitems automatically |
| 482374716 | Subitem due date set + Sales Rep = Alan | Auto-assign Alan to subitem | Watches deal_owner column — assigns Alan (92155651) to his subitems automatically |
| 482374722 | Subitem due date = today (noon ET) | Notify subitem assignee | "Task due today: {task} is due {date} for {bid name}" |
| 482374728 / 482374735 / 482374751 | Subitem due date = today (11am ET) + not complete | Set parent status (Jake/Alan/Dylan Subitem Status) → Due Today | Three automations, one per person — highlights bids that need same-day attention on the parent item view |
| 482374745 / 482374748 / 482374755 | Subitem status → Complete + assignee = Dylan/Alan/Jake | Clear parent Subitem Status column (remove Due Today) | Clears the parent highlight once the person's task is done |
| 482374724Inactive | Bid Due Date - 5 days | Notify assigned reps | "Bid due in 5 days: {bid name} is due {date}. Delivery Method: {method}" |
| 482374730Inactive | Subitem due date + 3 days (overdue) | Notify subitem assignee | 3-day overdue task reminder — currently off |
| 482374713Inactive | Item enters Post-Monday group | Create item on Projects #4 + link via connect_boards6 | Replaced by 559103546 (E-Rate Deals creation). Left inactive as reference. |
| 482374738Inactive | Stage → Post-Monday | Notify CS/PM team | "Hello CS and PM, this project now has a PO and is ready for processing." Replaced by E-Rate Deals flow. |
| 7917794784 (workflow) | When Bid Stage status changes to something | Create a subitem | General-purpose workflow used to add subitems on specific stage transitions beyond the initial 23-task creation |
| 7917866595 (workflow) | When subitem column changes | Change parent item Bid Stage column to match | Keeps parent Bid Stage in sync when a subitem's Bid Stage Subitem column is manually changed |
| 566854668 / 566856009 / 566856718 (integrations) | Blueprint column → Wireless/Fiber Optic/BMIC | Overwrite item with matching item template | Three project-type templates applied when Blueprint is set on Bids #3 itemsApp |
| 545905802 / 545905803 (AI) | New item created / Item name changes | AI: extract "470#:" from item name → text_mkqz3hww | monday AI extraction automationAI |
| 578063979 / 578063986 (AI) | Item created (if Project Year empty) / text_mkqz3hww changes | AI: categorize into Project Year dropdown (dropdown_mkqz1ay) | Sets Project Year dropdown by AI-categorizing the 470# text columnAI |
| 591750313 | Stage → Ready for Invoicing (lead_status index 3) | Send webhook to vtg-billing-ready | Triggers billing notification email to eratebilling@vtgus.com |
| 628087115 | NS Sales Order # column (text_mm6hv20b) changes | Send webhook to vtg-po-sync | Live Aug 25 2026 — triggers PO sync back from NetSuite |
| Generate SOW button (Sep 8) | Generate SOW button (button_mm70vvrb) clicked on Bids #3 item | Send webhook to vtg-scopestack-doc-sync /generate endpoint | Triggers programmatic SOW generation in ScopeStack; webhook auto-delivers the .docx back to Bids #3 SOW Document column (file_mm6wm4hn) |
| ID | Trigger | Action | Notes |
|---|---|---|---|
| 482368826 | New item created | Set Project Stage → New (index 6) | All new Projects #4 items start at New stage automatically |
| 482368825 | Stage → Kick Off | Move to Kick Off group | |
| 482368827 | Stage → All Products Received | Move to All Products Received group | |
| 482368829 | Stage → Pre-Install Staging (index 7) | Move to Construction Hold / Phased Install group | Group is "Construction Hold or Phased install" — covers hold and staging scenarios |
| 482368831 | Stage → Pre-Install Staging (index 11) | Move to Equipment Only group | Equipment-only projects route to the Equipment Only group on pre-install staging |
| 482368832 | Stage → Installing (index 8) | Move to Installing group | |
| 482368830 | Stage → Closeout (index 9) | Move to Closeout group | |
| 482368834 | Stage → Ready for Invoicing (index 3) | Move to Ready for Invoicing group | |
| 482368833 | Stage → Closed (index 4) | Move to Closed group | |
| 482368828Error | Stage → Waiting for Product | Move to Waiting for Product group | Error: "missing_group" — target group no longer exists. Group was likely deleted or renamed. |
| 591750313 (Projects webhook) | Stage → Ready for Invoicing | Send webhook to vtg-billing-ready | Fires billing notification email to eratebilling@vtgus.com via vtg-billing-ready Worker |
| 628087115 (Projects PO webhook) | NS Sales Order # column (text_mm6hv20b) changes | Send webhook to vtg-po-sync | Live Aug 25 2026 — fires vtg-po-sync when SO# is manually entered or backfilled |
| 545905802 / 545905803 (AI) | New item created / Item name changes | AI: extract "470#" from item name → text_mkqz3hww | AI extracts 470# for reporting and linkingAI |
| 545919569 / 545919570Error | New item / name change | AI: extract Company → lead_company column | Error: "The chosen column no longer exists." Column was deleted; automations broken.AI |
| 578063979 / 578063986 (AI) | Item created (if Project Year empty) / text changes | AI: categorize into Project Year dropdown | Sets dropdown_mkqz1ay (Project Year) by AI categorization of the 470# textAI |
| 566854668 / 566856009 / 566856718 (integrations) | Blueprint column (color_mm2frt9j) → Wireless / Fiber Optic / BMIC | Overwrite item with matching item template | Three blueprint templates: "Wireless deployment - VectorFi - Wired", "Fiber Optic Cabling", "BMIC"App |
| 7917221940 (workflow) | Stage → Accept (index 6) | Move item to Construction Hold / Phased Install group | |
| 7917971701 (workflow) Inactive | Subitem status → Done (from anything) | Move parent item to Ready for Invoicing group | An older subitem-driven billing trigger — now superseded by vtg-materials-log stage advancement |
| 7917999463 (workflow) | Stage → Ready for Invoicing | Notify Accounting team | "This project is complete and ready to bill in full" — notifies the Accounting team (team ID 1424500) in monday.com |
| 7918015674 (workflow) | Blueprint column changes + contains BMIC | Create subitem assigned to Engineer team | "Insert the first row here" + "This might be a spot for the task" — a partially-configured placeholder; may need refinement |
| 7918629648 (workflow) | Stage → Equipment Only (index 11) | Move to Equipment Only group | |
| 7918731761 (workflow) | Blueprint column changes + Blueprint = Equipment Only (label 8) | Move to Equipment Only group | Routes equipment-only projects to the correct group when Blueprint is selected |
| 7920172789 (workflow) | Stage → Ready for Invoicing | Set Actual Revenue Month (date_mm4tatyy) = today | Stamps the revenue date for Forecast vs. Actual dashboard |
| 7920172818 (workflow) | Stage → Closed | Set Actual Revenue Month (date_mm4tatyy) = today | Also stamps revenue date on Closed — covers projects that skip Ready for Invoicing |
| 7920230690 (workflow) | Stage → Closed | Notify Branden Sumerix + Dylan Lindhout | "Performance Bond Complete — notify the bonding company that this project is complete." |
| 7920569056 (workflow) | Stage → Ready for Invoicing | Set Ready for Invoicing Date (date_mm54qwps) = today | Timestamps the Ready for Invoicing date for billing SLA tracking |
| 7922447604 (workflow) | Stage → Installing | Set Materials Log link column (link_mm6mhdcx) = vtg-materials-log URL for this item | Live Aug 27 2026 — auto-populates the PM's one-click link to the materials log tool |
| backfill (Sep 3) | One-time | Populate new 📊 SOV Builder column (link_mm6vbks) for all 156 existing bids | Manual backfill completed Sep 3 2026; vtg-bid-intake now stamps both link_mm6vbks and link_mm591mdg on new bid creation going forward |
config/tools.json. Admin is currently password-gated; Azure AD SSO is planned.A record of all process changes, new Workers, and infrastructure updates to the VTG Lead → Invoice system.
| Date | Version | Type | Change |
|---|---|---|---|
| September 10, 2026 | |||
| Sep 10 | v1.8 | Infrastructure | SKU Catalog architecture revised — vtg-sku-catalog is now the single master key containing all vendors merged into one JSON array. Worker reads only this key. Separate vendor keys remain in KV as backups but are not read by loadSKUs(). Fixes disappearing-catalog bug where pushes to individual vendor keys weren't appearing in the SOV Builder. |
| Sep 10 | v1.8 | Infrastructure | Ruckus catalog rebuilt from full Sep 2026 price list — 3,631 SKUs (692 wireless, 1,389 switches, 1,415 licensing, 89 transceivers, 46 accessories). All 4 Ruckus discount tiers now stored per SKU: Bidder VAR (RKS-0436), Driver VAR (RKS-0437), RSD VAR (RKS-0438), E-Rate Takeout (IDC017). Bidder VAR is the default; others selectable at bid time. Actual AP hardware units (R370, R670, R750, R770, T350, T670, T750, etc.) now in catalog with correct pricing. |
| Sep 10 | v1.8 | Infrastructure | vtg-sku-catalog total: 5,042 SKUs — Ruckus 3,631 · VTG Cabling 1,031 · Fortinet 318 · N1C 62. Juniper/Mist excluded (single-customer, not worth catalog maintenance). Vertiv and TP-Link Omada pending price lists. |
| Sep 10 | v1.8 | Infrastructure | ScopeStack eRate SOW Template V3 built — updated company branding (Vector Powered by VTG), FY2027 labor rates (Cabling $110, L1 $195, L2 $225, L3 $265, L4 Negotiated), five office locations in footer. New "Project Management — E-Rate" service (ID 471786) and blueprint (PM-ERATE, ID 6702) created in ScopeStack under eRate > Professional Services. PM blueprint applies to all installation bids; skip for equipment-only. vtg-scopestack-doc-sync template routing still hardcoded to V2 — needs update when V3 is uploaded. |
| September 8, 2026 | |||
| Sep 8 | v1.7 | UI | Slide-out detail panel — replaced bottom-of-page detail section with a slide-in drawer. Click any step card in the diagram to open the panel from the right. Close with ✕, Escape, or clicking the overlay. |
| Sep 8 | v1.6 | New Worker | vtg-sf-account-sync — syncs monday.com Accounts (#1) and Contacts (#2) to Salesforce as Account and Contact objects using Monday_Item_ID__c as external ID. Writes SF Account ID back to UID column (text_mm6s8adk) on Accounts board. Backfill ran against all 791 existing accounts. |
| Sep 8 | v1.6 | New Worker | vtg-scopestack-doc-sync — two-endpoint Worker. Endpoint 1: catches ScopeStack document_status_changed webhook, downloads .docx SOW, routes by template to Bids #3 SOW Document column (file_mm6wm4hn) or El Nova Leads. Endpoint 2: triggered by Generate SOW button (button_mm70vvrb) on Bids #3 to programmatically trigger SOW generation. First confirmed delivery: North Branch Area Schools, 470# 260005778. |
| Sep 8 | v1.6 | Infrastructure | Fortinet catalog added to SKU_CATALOG KV — 318 SKUs (54 HW, 132 UTP bundles, 132 UTP licenses) covering FortiGate FG-30G through FG-900G at MSRP. Added via vtg-sov-builder /admin/skus. |
| Sep 8 | v1.6 | Infrastructure | Live on vtg-process-map.pages.dev — process map deployed to Cloudflare Pages via GitHub (vtg-portal/vtg-process-map). Auto-redeploys within ~30 seconds of any push. URL is permanent and shareable. |
| September 4–5, 2026 | |||
| Sep 4 | v1.5 | New Tool | vsz-lldp-neighbors.py — local Python script that SSHes into Ruckus SmartZone, runs LLDP neighbor discovery across all APs in a zone, exports to timestamped CSV, optionally writes back to AP description. Added to vtg-portal as tool #23. |
| September 3, 2026 | |||
| Sep 3 | v1.4 | Process Change | Intake form redesigned — Sales Executive and ScopeStack Blueprint(s) are now entered inside the vtg-bid-intake form (after accept_470), not before. Blueprint selection in the form triggers ScopeStack proposal creation. Eliminates the pre-accept manual entry step. |
| Sep 3 | v1.4 | Bug Fix | vtg-bid-intake patched — fixed Account/Contact lookup (replaced unreliable items_by_multiple_column_values with items_page + contains_text). Fixed SOV Builder link not being written on form submit. Bond section redesigned with Surety bond read-only. Retries bumped 3→4. |
| Sep 3 | v1.4 | New Worker | vtg-tdsynnex — TD Synnex Partner API OAuth 2.0 integration. Exposes /api/lookup for live contracted pricing. Called internally by vtg-sov-builder via service binding. Falls back to SKU_CATALOG KV for non-TD Synnex items. TOKEN_CACHE KV with auto-refresh. |
| Sep 3 | v1.4 | Update | vtg-sov-builder enhanced — live TD Synnex pricing with LIVE badge, category filter bar (All / Switches / Wireless / Transceivers / Cables / Licensing / Accessories / Labor), /admin/skus catalog admin UI. Sep 10 2026: SKU catalog rebuilt — 5,042 SKUs across Ruckus (3,631), VTG Cabling (1,031), Fortinet (318), N1C (62). All 4 Ruckus discount tiers (Bidder/Driver/RSD/Takeout VAR) stored per SKU. Full AP hardware catalog now loaded. |
| Sep 3 | v1.4 | Process Change | Bids #3 column restructure — new 📊 SOV Builder column (link_mm6vbks) created; all 156 existing bids backfilled. Customer Intake Form column (link_mm591mdg) now dedicated to intake form links only. vtg-bid-intake stamps both columns on new bid creation. |
| August 25–30, 2026 | |||
| Aug 30 | v1.3 | Doc | Process map published — initial 7-tab HTML document covering E-Rate, Commercial, and E-Rate Op System tracks. Includes Flow Diagram, Written SOP, Gap Analysis, Workers, Glossary, Automations, and Dashboards tabs. |
| Aug 27 | v1.2 | Update | vtg-materials-log v2 — Save Draft system with daily accumulation, timestamped log view, running totals, confirmation modal before final submission, 3-second countdown auto-close after successful submit. |
| Aug 27 | v1.2 | New Worker | vtg-revenue-month-sync — fires on Projects #4 Timeline column change, extracts end date, writes to Revenue Month (date_mm39fh8x). Skips Closed items and cleared timelines. |
| Aug 27 | v1.2 | New Worker | vtg-msp-csop — Commercial/non-E-Rate CSOP form deployed. Bypasses Bids #3 and El Nova entirely. Creates Projects #4 item directly with task list subitems built from form fields. |
| Aug 27 | v1.2 | Infrastructure | Cabling Install Scheduler board — new monday.com board (ID 18427983069) for 10-person crew scheduling. 4 stage groups, 33 jobs pre-loaded, 2 automations (tomorrow reminder + crew assignment notification). |
| Aug 25 | v1.1 | New Worker | vtg-po-sync — syncs NetSuite PO numbers and approval status back to Projects #4. Webhook on NS SO# column change + cron every 4h. KV: PO_SYNC_KV. |
| Aug 25 | v1.1 | New Worker | vtg-ns-so-backfill — one-time utility Worker to backfill NetSuite Sales Order numbers into Projects #4 text_mm6hv20b column for historical records. |
| Aug 25 | v1.1 | Gap Resolved | NS process documentation — vtg-ns-audit Node.js tool built. First-ever NetSuite process documentation for VTG via OAuth 2.0 M2M + SuiteQL. Generated self-contained HTML report tying NS data to each process step. |
| Prior to August 25, 2026 | |||
| Aug 13 | v1.0 | New Worker | vtg-monday-sf-sync — Bids #3 stage changes sync to Salesforce as Opportunity upserts via Monday_Item_ID__c external ID. First SF record: Shaker Heights City School District. |
| Aug 13 | v1.0 | Infrastructure | vtg-ns-mcp-sync auth live — NetSuite production OAuth 2.0 M2M auth established. Six bidirectional sync flows coded. Blocked on customer ID mapping (vtg-ns-compare) and NS service item ID. |
| Ongoing | v1.0 | New Worker | vtg-cs-form — CS Order Processing form generated and emailed to erateops@vtgus.com when Bids #3 moves to Post-Sale. KV-based deduplication. monday subitem auto-created. |
| Ongoing | v1.0 | New Worker | vtg-sov-builder — SOV quoting tool for sales. Multi-tab buildings, SKU catalog, section types, per-row labor, markup overrides, jsPDF generation, upload to Bids #3 Files column. |
| Ongoing | v1.0 | New Worker | vtg-bid-intake — triggered by accept_470. Creates Bids #3 item, auto-links Account/Contact, serves intake form, handles bond creation. Core of the E-Rate lead intake flow. |
| Ongoing | v1.0 | New Worker | vtg-materials-log — cabling materials accounting for Projects #4. PM submits fiber/copper parts on stage → Installing. Auto-advances to Ready for Invoicing and fires billing notification email. |
| Ongoing | v1.0 | New Worker | vtg-account-logo — scrapes district website for logo, falls back to Clearbit, uploads to Accounts board logo column. Backfill ran against 786 existing accounts. |