| name | plan-sala-qr |
| description | Planul de sală și codurile QR prin MCP + link direct + screenshot — muți/redimensionezi/rotești mese, grilă, raioane per ospătar, rutarea zonei la imprimantă/KDS, programări de sală pe zile, QR pe mese și QR-uri dinamice. La „rearanjează terasa", „mută masa 5", „adaugă un raion", „de ce nu iese bonul de la masa X la bucătărie", „generează QR pentru mese", „schimbă unde duce QR-ul", „layout pentru Revelion". |
Plan de sală + coduri QR — hands-free, prin MCP + navigare + screenshot
Planul de sală (/plan-sala) e cel mai click-greu ecran din Symbai: zeci de mese trase cu mouse-ul, grupate în raioane, fiecare zonă rutată la imprimante. Tu NU tragi nimic cu mouse-ul — faci munca prin tool-uri MCP (muți/aranjezi/rutezi/programezi din apeluri), NAVIGHEZI cu link direct și ARĂȚI rezultatul cu screenshot. Click pe pixeli = ultima soluție, nu prima.
Înainte de orice
- Citește
knowledge/condu-chrome.md (doctrina „click-rarely": tool MCP → deep-link → click pe element; screenshot = livrabilul; refresh resetează starea; confirmă-prin-citire) și, pentru context conceptual + onboarding-ul de sală, knowledge/onboarding/06-sala-qr.md (ierarhia Zonă→Masă→Configurație→Program→Raion, capcanele de ordine, jargonul de evitat) + knowledge/plan-sala-qr.md (geometrie pe canvas, dubla scriere, sistemele de QR, cum arăți userului).
- Context:
list_brands + list_locations → brandId/locationId. Apoi list_floor_zones (ce zone există) și ia configId-ul configurației de sală cu list_floor_configs (id + nume + locație pentru fiecare configurație; fallback list_entities {entityType:"floor_configs"}). configId = cheia pentru aproape tot ce ține de geometrie/raioane.
- Citește ÎNAINTE să scrii:
get_floor_config(configId, section:"tables") îți dă dbId-urile meselor (cheia pentru mutări/raioane), section:"sections" raioanele (cu id-urile sec_…), section:"zones" zonele de pe canvas. get_floor_config fără section = meta + numărători. NU citi configul cu SQL (e trunchiat).
Fluxul hibrid — ce intenție → ce tool → cum arăți
Tabel intenție → tool MCP (toate scrierile cer modulul Setări & Configurare = setari; QR dinamice tot pe setari):
| Userul cere… | Tool MCP | Note |
|---|
| „mută/redimensionează/rotește masa X" | set_floor_table_geometry | tableId(=dbId) + oricare din x,y,width,height,rotation,zoneId,sectionId. Scrie în AMBELE locuri (rândul mesei + canvas) automat. |
| „aranjează mai multe mese deodată" (poziții calculate de tine) | bulk_set_floor_table_geometry | listă updates[{tableId, x?, y?, …}], până la 500. |
| „pune mesele în grilă / rearanjează terasa frumos" | arrange_tables_grid | floorConfigId (toate mesele canvas-ului) sau tableIds[]; cols/spacing/originX/originY. Punct de pornire curat, apoi ajustezi fin. |
| „fă raioanele / împarte mesele pe ospătari" | set_config_sections apoi move_tables_to_section | set_config_sections ÎNLOCUIEȘTE lista de raioane → vezi Regula raioanelor. move_tables_to_section: floorConfigId + sectionId(string) + tableDbIds[] (sau sectionId:null ca să scoți). În onboarding-ul vechi poți întâlni assign_tables_to_section; răspunsul lui assignedCount numără mese DISTINCTE, nu desktop+mobile dublat. |
| „mută o masă în alt raion" | set_floor_table_geometry cu sectionId | sau move_tables_to_section pentru mai multe. |
| „de ce nu iese bonul la bucătărie/bar / rutează zona la imprimantă/KDS" | list_zone_routing → set_zone_routing | zoneId + fiscalPrinterId/billPrinterId/shiftClosePrinterId/kitchenPrinterId/barPrinterId/kitchenScreenId/barScreenId. Ia id-urile cu list_printers/list_kds_screens. Trimite doar ce schimbi. |
Citirile read-only (cer grantul readModule al domeniului pe token): get_floor_config, list_zone_routing, list_floor_config_schedules, list_dynamic_qr_codes, list_qr_field_presets.
Cum NAVIGHEZI (deep-link stabil — NU click prin meniu)
- Designerul de sală (unde se DESENEAZĂ):
navigate("/plan-sala"). Aici tu nu lucrezi cu mouse-ul — doar deschizi pagina ca să ARĂȚI rezultatul mutărilor tale prin MCP (canvas-ul reflectă schimbarea — tool-urile scriu direct în configurația de sală). ⚠ Selecția configurației/brandului e în dropdown-urile din capul paginii (nu în URL) și se poate reseta la refresh — re-verifică.
- Viewer-ul LIVE (read-only, operațiuni):
navigate("/floorplan") — pentru a-i arăta userului starea live a meselor, NU pentru editare.
- Coduri QR:
navigate("/qr-codes") (tab QR Mese) și navigate("/qr-codes?tab=dynamic") (QR-uri dinamice — link scurt, contor scanări, export PNG/SVG/PDF). De aici userul printează/exportă.
- Reguli QR per raion (preset câmpuri pe rutarea comenzii):
navigate("/staff?tab=floor-schedule") (Program Salon). Contexte QR (Terasă/Piscină/Cameră): navigate("/settings/qr-contexts").
- Nu inventa URL-uri — dacă nu ești sigur,
gaseste_in_aplicatie("plan de sală designer") / gaseste_in_aplicatie("coduri QR mese") îți dau pagina + linkul direct.
Cum ARĂȚI userului (screenshot = livrabilul)
Userul nu vede conexiunea ta. După o rearanjare/rutare, deschide pagina relevantă (/plan-sala pentru layout, /qr-codes pentru QR-uri) și fă-i screenshot „uite cum arată acum" — ai nevoie de extensia Chrome (claude-in-chrome) + user logat. Fără extensie poți tot face munca prin MCP, dar nu i-o poți arăta — spune-i clar și dă-i linkul direct ca să dea refresh (condu-chrome.md, regula h).
Cazurile rare care cer un CLICK
Aproape tot e prin MCP. Click pe element (nu pe pixeli, după read_page/find) doar pentru:
- Salvarea finală în Designer dacă userul a tras ceva manual între timp (mutările tale prin MCP se salvează singure — scriu și în rândul mesei, și în canvas).
- Printarea/exportul QR-urilor din
/qr-codes (butonul de print/PDF) — generarea e prin MCP, dar tipărirea fizică o face userul. În dialogul „Printează pe șablon", câmpurile {{customText1}}...{{customText4}} apar automat dacă șablonul le folosește.
- Crearea de la zero a unei configurații noi / ștergerea de zone/mese/configurații întregi — NU există prin MCP (regula platformei). Ghidează userul în aplicație (sau folosește tool-urile de onboarding
create_floor_config/add_zones_to_config din 06-sala-qr.md pentru structura nouă).
Reguli (cele care contează)
- Citește dbId-urile întâi. Orice mutare/raion cere
dbId-ul mesei (get_floor_config section:"tables") și sectionId-ul raionului (string sec_…, din section:"sections") — nu numărul mesei, nu numele raionului.
set_config_sections ÎNLOCUIEȘTE lista de raioane. Ca să PĂSTREZI raioanele existente și doar să adaugi, citește întâi get_floor_config(section:"sections"), retrimite lista completă + cele noi (păstrând id-urile existente, altfel rupi asignările de mese). Apoi asignează cu move_tables_to_section.
- Numără mesele unice, nu item-ele de canvas. Planul salvează aceeași masă în view-ul desktop și în view-ul mobile. După
move_tables_to_section sau assign_tables_to_section, assignedCount înseamnă dbId-uri distincte; dacă ai trimis 10 mese și tool-ul spune 10, acesta e numărul real. Verifică prin get_floor_config(section:"tables") că fiecare masă are sectionId corect.
- Rutarea = de ce iese bonul corect. „Bonul nu iese la bar" se rezolvă cel mai des prin
set_zone_routing (zona greșit/ne-rutată). Verifică întâi list_zone_routing. set_zone_routing face merge — trimite doar câmpurile pe care le schimbi.
- Raioanele nu rutează singure — comanda QR ajunge la ospătarul corect abia când tura lui e legată de raion (modulul
personal, vezi gestioneaza-personal). Spune-i userului asta.
- Culoarea raionului se editează în designer (
/plan-sala, pe raion) — utilă ca ospătarii să-și recunoască dintr-o privire mesele; nu e nevoie să recreezi raionul ca să-i schimbi culoarea.
- Auto-anularea comenzilor QR neconfirmate: dacă niciun ospătar nu acceptă comanda QR în fereastra setată, comanda expiră singură (clientul vede fereastra chiar la confirmarea comenzii). Se setează în Configurare Platformă Clienți Web → tab QR: fereastra în minute, implicit 15; 0 = oprit. La „de ce s-a anulat singură comanda QR / de ce a dispărut", verifică întâi setarea asta.
- Două sisteme de QR, separate: QR de masă (
generate_table_qr_codes, idempotent, /t/<cod>) ≠ QR dinamic (create_/set_dynamic_qr, link editabil ). Nu le amesteca. Nu există ștergere de QR prin MCP — dezactivezi un QR dinamic cu .
Legături
- Doctrina generală Chrome (deep-link, screenshot = livrabil, click pe element, fallback fără extensie) →
knowledge/condu-chrome.md.
- Geometria pe canvas + dubla scriere + cele două sisteme de QR (detaliu tehnic-pe-înțeles) →
knowledge/plan-sala-qr.md.
- Structura inițială a sălii (zone/mese/configurații/program prin MCP, capcanele de ordine) →
knowledge/onboarding/06-sala-qr.md + skill-ul onboarding-symbai.
- Legarea turei ospătarului de raion (ca să ruteze comenzile QR) → skill-ul
gestioneaza-personal (Program Salon, modalul de tură).
- Imprimante & ecrane KDS (id-urile pentru
set_zone_routing) → knowledge/echipamente-kds-imprimante.md.
- Navigare pură / link direct la o pagină → skill-ul
gaseste-pagina (gaseste_in_aplicatie).
- Blocaj (ceva ce nu se poate prin conexiune) →
trimite_ticket_symbai (sugestie) + ghidează în aplicație.