PageSourceSearch

https://vizops360.ai/assets/settings.rate-card-DE-TRhBg.js

js vizops360.ai collected 2026-10-05 13:50:59 UTC 7,526 bytes, 1 lines download raw bytes

1import{d4 as h,h_ as g,r as s,j as e,L as f,K as v,x as I,C as N,as as j}from"./index-CpeGhXo5.js";import{a as E}from"./Panel-Cf_wAUzv.js";import{f as M}from"./estimationFormat-NEvhDFkE.js";const n={currency:"USD",rateUnit:"hour",rateType:"minimum_hourly_rate",groups:[{id:"frontend",label:"Frontend members",employees:[{employeeId:"EMP-001",employeeName:"Aman Sharma",role:"Junior Frontend Developer",level:"junior",minimumHourlyRateUsd:3.5,teamId:"frontend",teamLabel:"Frontend members"},{employeeId:"EMP-004",employeeName:"Simran Kaur",role:"Frontend Developer",level:"mid",minimumHourlyRateUsd:6,teamId:"frontend",teamLabel:"Frontend members"},{employeeId:"EMP-007",employeeName:"Karan Gill",role:"Senior Frontend Developer",level:"senior",minimumHourlyRateUsd:9,teamId:"frontend",teamLabel:"Frontend members"},{employeeId:"EMP-010",employeeName:"Manpreet Kaur",role:"Team Lead - Frontend",level:"team_lead",minimumHourlyRateUsd:12,teamId:"frontend",teamLabel:"Frontend members"}]},{id:"backend",label:"Backend members",employees:[{employeeId:"EMP-002",employeeName:"Neha Verma",role:"Junior Backend Developer",level:"junior",minimumHourlyRateUsd:4,teamId:"backend",teamLabel:"Backend members"},{employeeId:"EMP-005",employeeName:"Arjun Singh",role:"Backend Developer",level:"mid",minimumHourlyRateUsd:7,teamId:"backend",teamLabel:"Backend members"},{employeeId:"EMP-008",employeeName:"Nisha Kapoor",role:"Senior Backend Developer",level:"senior",minimumHourlyRateUsd:10,teamId:"backend",teamLabel:"Backend members"},{employeeId:"EMP-011",employeeName:"Rajiv Malhotra",role:"Team Lead - Backend",level:"team_lead",minimumHourlyRateUsd:13,teamId:"backend",teamLabel:"Backend members"}]},{id:"fullstack",label:"Full Stack members",employees:[{employeeId:"EMP-003",employeeName:"Rohan Kumar",role:"Junior Full Stack Developer",level:"junior",minimumHourlyRateUsd:4.5,teamId:"fullstack",teamLabel:"Full Stack members"},{employeeId:"EMP-006",employeeName:"Priya Mehta",role:"Full Stack Developer",level:"mid",minimumHourlyRateUsd:8,teamId:"fullstack",teamLabel:"Full Stack members"},{employeeId:"EMP-009",employeeName:"Harpreet Singh",role:"Senior Full Stack Developer",level:"senior",minimumHourlyRateUsd:11,teamId:"fullstack",teamLabel:"Full Stack members"},{employeeId:"EMP-012",employeeName:"Anjali Sharma",role:"Team Lead - Full Stack",level:"team_lead",minimumHourlyRateUsd:15,teamId:"fullstack",teamLabel:"Full Stack members"}]},{id:"devops",label:"DevOps members",employees:[{employeeId:"EMP-013",employeeName:"Vikram Sethi",role:"Junior DevOps Engineer",level:"junior",minimumHourlyRateUsd:4,teamId:"devops",teamLabel:"DevOps members"},{employeeId:"EMP-014",employeeName:"Meera Joshi",role:"DevOps Engineer",level:"mid",minimumHourlyRateUsd:7.5,teamId:"devops",teamLabel:"DevOps members"},{employeeId:"EMP-015",employeeName:"Sandeep Rana",role:"Senior DevOps Engineer",level:"senior",minimumHourlyRateUsd:10.5,teamId:"devops",teamLabel:"DevOps members"}]},{id:"qa",label:"QA members",employees:[{employeeId:"EMP-016",employeeName:"Pooja Bansal",role:"Junior QA Engineer",level:"junior",minimumHourlyRateUsd:3.5,teamId:"qa",teamLabel:"QA members"},{employeeId:"EMP-017",employeeName:"Deepak Yadav",role:"QA Engineer",level:"mid",minimumHourlyRateUsd:5.5,teamId:"qa",teamLabel:"QA members"},{employeeId:"EMP-018",employeeName:"Kavita Nair",role:"Senior QA Engineer",level:"senior",minimumHourlyRateUsd:8.5,teamId:"qa",teamLabel:"QA members"}]},{id:"ui_figma",label:"UI / Figma members",employees:[{employeeId:"EMP-019",employeeName:"Ishita Rao",role:"Junior UI Designer",level:"junior",minimumHourlyRateUsd:3.5,teamId:"ui_figma",teamLabel:"UI / Figma members"},{employeeId:"EMP-020",employeeName:"Aditya Bose",role:"UI/UX Designer",level:"mid",minimumHourlyRateUsd:6.5,teamId:"ui_figma",teamLabel:"UI / Figma members"},{employeeId:"EMP-021",employeeName:"Sneha Pillai",role:"Senior UI Designer",level:"senior",minimumHourlyRateUsd:9.5,teamId:"ui_figma",teamLabel:"UI / Figma members"}]},{id:"pm",label:"PM members",employees:[{employeeId:"EMP-022",employeeName:"Rahul Khanna",role:"Project Coordinator",level:"mid",minimumHourlyRateUsd:8,teamId:"pm",teamLabel:"PM members"},{employeeId:"EMP-023",employeeName:"Sonia Ahluwalia",role:"Project Manager",level:"senior",minimumHourlyRateUsd:12,teamId:"pm",teamLabel:"PM members"}]}],employees:[]};n.employees=n.groups?.flatMap(o=>o.employees)??[];function P(){const o=h(),{data:i,isLoading:d,isFetching:c,isError:y}=g(),[b,p]=s.useState({}
1),t=i?.groups?.length?i:n,r=s.useMemo(()=>t.groups??[],[t]),u=t.currency??"USD";s.useEffect(()=>{r.length&&p(a=>{const m={...a};for(const l of r)m[l.id]===void 0&&(m[l.id]=!0);return m})},[r]);const x=a=>{p(m=>({...m,[a]:!m[a]}))};return e.jsxs("div",{className:"p-3 flex flex-col gap-3 min-h-full",children:[e.jsx(E,{title:"Employee minimum rates",subtitle:"Finance minimum hourly rates for this organization. Sales estimation cannot go below these floors. Rates are stored in the database and seeded automatically on deploy.",accent:"mod-finance",actions:e.jsxs(f,{to:o,className:"h-7 px-2 rounded-[4px] border border-border bg-card hover:bg-accent text-[11px] inline-flex items-center gap-1",children:[e.jsx(v,{className:"w-3 h-3"})," Back"]})}),e.jsxs("div",{className:"bg-white border border-border rounded-[6px] p-3 space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-2 text-[11px] text-muted-foreground",children:[e.jsxs("span",{children:["Currency: ",e.jsx("strong",{className:"text-foreground",children:u})," · Unit: hour"]}),(d||c)&&e.jsx("span",{children:"Loading…"}),y?e.jsx("span",{className:"text-muted-foreground",children:"(showing the built-in catalog)"}):null]}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:"These minimums are the Finance constraint on Sales estimation rates. Names and rates stay inside the estimation editor and are omitted from client exports."}),r.length===0&&!d?e.jsx("p",{className:"text-[11px] text-muted-foreground italic",children:"No employee rate groups configured."}):e.jsx("div",{className:"space-y-2",children:r.map(a=>{const m=b[a.id]!==!1;return e.jsxs("div",{className:"border border-border rounded-[6px] overflow-hidden",children:[e.jsxs("button",{type:"button",className:"w-full flex items-center gap-2 px-3 py-2 bg-muted/30 hover:bg-muted/50 text-left",onClick:()=>x(a.id),children:[m?e.jsx(I,{className:"w-3.5 h-3.5 text-muted-foreground shrink-0"}):e.jsx(N,{className:"w-3.5 h-3.5 text-muted-foreground shrink-0"}),e.jsx("span",{className:"text-[12px] font-semibold",children:a.label}),e.jsxs("span",{className:"text-[10px] text-muted-foreground ml-auto",children:[a.employees.length," members"]})]}),m?e.jsx("div",{className:"divide-y divide-border",children:a.employees.map(l=>e.jsxs("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1 px-3 py-2 pl-8 text-[11px]",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("p",{className:"font-medium truncate",children:l.employeeName}),e.jsxs("p",{className:"text-[10px] text-muted-foreground truncate",children:[l.role," · ",l.employeeId]})]}),e.jsxs("div",{className:"text-right shrink-0",children:[e.jsxs("p",{className:"font-mono font-semibold text-sm",children:[M(l.minimumHourlyRateUsd,u),e.jsx("span",{className:"text-[10px] font-normal text-muted-foreground",children:"/hr min"})]}),e.jsx("p",{className:j("text-[10px] text-muted-foreground capitalize"),children:l.level.replace(/_/g," ")})]})]},l.employeeId))}):null]},a.id)})})]})]})}export{P as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.