{{ notification.message }}
A new version of this portal is available.
ZENQOR Logo
ZENQOR Logo
{{ forgotPasswordFlow.error }}

Notifications

{{ n.message }}

{{ formatDateTime(n.timestamp) }}

No notifications yet

You'll see updates here as they happen.

Billing & Documents

Create and manage client quotations and invoices in a standard corporate format.

CLIENT INFORMATION (BILL TO)

{{ getInitials(docForm.clientName) }}

{{ docForm.clientName || 'Untitled Client' }}

{{ docForm.clientSSM || 'No SSM / TIN set' }}

{{ clientSavedForDocument ? 'Saved Client' : 'Unsaved Draft' }}

Company Identity

Contact Details

Client Portal Access

Comma-separated. Anyone signing in with these emails can also access this client's Client Portal, projects and documents — in addition to the primary Email Address above.

Address

ATTACHMENT / RECEIPT (MAX 2MB)

{{ docForm.paymentAttachment ? 'Receipt Attached' : 'No file selected' }}

Complete the required Client Information fields and click Save Client before adding items or saving the document.

LIST OF ITEMS & SERVICES

Description / Product Qty Unit Price (RM) Total (RM)
{{ formatCurrency(item.qty * item.price) }}
Subtotal:RM {{ docSubtotal.toFixed(2) }}
SST (8%):RM {{ docSST.toFixed(2) }}
Grand Total:RM {{ docGrandTotal.toFixed(2) }}

Payroll Management

Automated statutory contribution engine for EPF, SOCSO, EIS and PCB, with MTD/YTD tracking.

EMPLOYEE & BANKING INFORMATION

{{ getInitials(payForm.name) }}

{{ payForm.name || 'Untitled Employee' }}

{{ payForm.position || 'No position set' }}

{{ payForm.dept }}

{{ selectedPayEmployeeId ? 'From HR Directory' : 'Manual Entry' }}

Identity

Employment

Banking & Statutory

EARNINGS - RM

STATUTORY DEDUCTIONS - RM

Gross Salary:RM {{ payCalc.gross.toFixed(2) }}
Total Deductions:RM {{ payCalc.deduct.toFixed(2) }}
Net Salary:RM {{ payCalc.net.toFixed(2) }}

Claims & Payment Vouchers

Submit and track expense claims and payment vouchers through the approval workflow.

{{ legacyPaymentVouchersCount }} legacy Payment Voucher record(s) are still stored inside the Claims collection. Migrate them into the dedicated Payment Vouchers collection (requires firestore.rules to already be deployed).

NEW EXPENSE CLAIM APPLICATION

{{ getInitials(claimForm.name) }}

{{ claimForm.name || 'Untitled Applicant' }}

{{ claimForm.dept || 'No department set' }}

{{ selectedClaimEmployeeId ? 'From HR Directory' : 'Manual Entry' }}

Applicant Information

ASSIGN TO HR APPROVER *

Human Resource Management

The claim is assigned to the HR role group. All registered HR users can review it; it then moves to Account and Director for final approval.

RECEIPT ATTACHMENT (MAX 2MB) *

{{ claimForm.receiptAttachment ? `${claimForm.receiptAttachmentName || 'Receipt Attached'} · stored ${formatFileSize(getDataUrlSize(claimForm.receiptAttachment))}` : 'PNG, JPG or JPEG · total application files max 2MB' }}

NEW PAYMENT VOUCHER APPLICATION

{{ getInitials(voucherForm.name) }}

{{ voucherForm.name || 'Untitled Requester' }}

{{ voucherForm.dept || 'No department set' }}

{{ selectedVoucherEmployeeId ? 'From HR Directory' : 'Manual Entry' }}

Requester Information

The actual date the money will be used/paid out — editable, not locked to today.

ASSIGN TO HR APPROVER *

Human Resource Management

The voucher is assigned to the HR role group. All registered HR users can review it; it then moves to Account and Director for final approval.

SUPPORTING DOCUMENT (MAX 2MB) *

{{ voucherForm.receiptAttachment ? `${voucherForm.receiptAttachmentName || 'Document Attached'} · stored ${formatFileSize(getDataUrlSize(voucherForm.receiptAttachment))}` : 'PNG, JPG or JPEG · total application files max 2MB' }}

CLAIM RECORDS & APPROVAL STATUS

{{ selectedClaimIds.length }} claim(s) selected
Date & Receipt No. Employee Category & Sub-Category Amount (RM) Status Assigned To Actions
{{ clm.expenseDate }} Claim REF: {{ clm.receiptNo }} {{ requesterNameLive(clm.empNo, clm.name) }} {{ clm.empNo }} {{ clm.category }} {{ clm.subCategory }} {{ formatCurrency(clm.amount) }} {{ clm.status }}

Approved by {{ approverNameLive(clm.approvedByUid, clm.approvedByName) }} ({{ clm.approvedByRole }})

{{ formatDateTime(clm.approvedAt) }}

{{ clm.assignedToName || '-' }} {{ clm.assignedToRole || '-' }}

{{ claimsHistory.length ? 'No matching claim records' : 'No expense claims yet' }}

{{ claimsHistory.length ? 'No claims match your current search.' : 'Submitted expense claims will appear here for review and approval.' }}

Page {{ claimsCurrentPage }} of {{ claimsTotalPages }}

PAYMENT VOUCHER RECORDS & APPROVAL STATUS

{{ selectedVoucherIds.length }} voucher(s) selected
Date & Voucher No. Payee Category & Sub-Category Amount (RM) Status Assigned To Actions
{{ pv.paymentDate }} Voucher REF: {{ pv.voucherNo }} {{ pv.payeeName }} {{ pv.payeeType }} · Requested by {{ requesterNameLive(pv.empNo, pv.name) }} {{ pv.category }} {{ pv.subCategory }} {{ formatCurrency(pv.amount) }} {{ pv.status }}

Approved by {{ approverNameLive(pv.approvedByUid, pv.approvedByName) }} ({{ pv.approvedByRole }})

{{ formatDateTime(pv.approvedAt) }}

{{ pv.assignedToName || '-' }} {{ pv.assignedToRole || '-' }}

{{ paymentVouchers.length ? 'No matching voucher records' : 'No payment vouchers yet' }}

{{ paymentVouchers.length ? 'No payment vouchers match your current search.' : 'Payment vouchers will appear here for review and approval.' }}

Page {{ vouchersCurrentPage }} of {{ vouchersTotalPages }}

Project Progress

Live project workflow overview.

My Assigned Project Activities

Activities requiring your action, ordered by due date.

OverdueTodayNext 3 DaysScheduled{{ myPendingProjectActivities.length }} Open

{{ activity.projectRef }} · {{ activity.activityType }}

{{ activity.summary }}

Due {{ activity.dueDate }}

{{ projectActivityDueState(activity).label }}

{{ activity.projectTitle }}

Staff Employee Dashboard

Welcome, {{ userProfile.name }}. View your latest payslips and expense claim status.

{{ formatCurrency(myLatestNetSalary) }}

Latest Net Salary

Last Generated Payslip

{{ myPendingClaimsCount }}

Pending Claims

Status: Pending

{{ formatCurrency(myApprovedClaimsAmount) }}

Approved Claims (YTD)

Status: Approved

My Claims & Payslip History

Date Type Reference / Description Amount (RM) Status
{{ c.expenseDate }} Claim {{ c.category }} - {{ c.receiptNo }} {{ formatCurrency(c.amount) }} {{ c.status }}
{{ v.paymentDate }} Voucher {{ v.category }} - {{ v.voucherNo }} {{ formatCurrency(v.amount) }} {{ v.status }}
{{ p.date }} Payslip {{ p.docNo }} ({{ p.raw?.month || 'Monthly Salary' }}) {{ formatCurrency(p.amount) }} PAID

No records yet

Your claims, payment vouchers and payslips will appear here once submitted or issued.

Client Portal

Secure Workspace

Welcome back, {{ userProfile.name }}

Here's your live project, document and account snapshot.

{{ myClientDocs.length }}

Total Documents

Quotations & Invoices

{{ formatCurrency(myUnpaidInvoicesAmount) }}

Unpaid Invoices

{{ myUnpaidInvoicesCount }} Invois Unpaid

{{ formatCurrency(myPaidInvoicesAmount) }}

Total Paid Amount

Status: Paid

{{ clientActiveProjectsCount }}

Active Projects

{{ projects.length }} total project(s)

Recent Project Updates

Latest messages from your project team.

{{ clientRecentUpdates.length }} recent

No updates yet

Project updates will appear here once your project starts.

Your workspace is protected

Secure sign-in, trusted-device verification and role-based access help protect your company records.

Identity verified

Private company workspace

Activity securely logged

Project Progress

Live workflow status for projects assigned to your Client Portal account.

+{{ projects.length - 3 }} more project(s) — view all for full tracker

Your workspace is ready

Your project tracker will activate automatically when the Zenqor team assigns your first project.

01 · COMPLETE

Portal account activated

02 · NEXT

Project assignment

03 · UPCOMING

Live milestones & updates

Your Company Official Documents

Your five most recent quotations and invoices.

Date Type Document No. Amount (RM) Status Action
{{ d.date }} {{ d.type }} {{ d.docNo }} {{ formatCurrency(d.amount) }} {{ d.status || 'Unpaid' }}

No official documents yet

Quotations and invoices issued to your company will appear here automatically.

Enterprise Executive Dashboard

Real-time monitoring of financial KPIs, HR, corporate documents, and system activities.

Live data

{{ employees.length }}

Total Employees

{{ activeEmployeesCount }} Active

{{ customers.length }}

Total Clients

{{ priorityClients.length }} Priority

{{ totalQuotations }}

Total Quotations

{{ formatCurrency(totalQuotationValue) }}

{{ totalInvoices }}

Total Invoices

{{ paidInvoicesCount }} Paid / {{ unpaidInvoicesCount }} Unpaid

{{ formatCurrency(totalRevenuePaid) }}

Revenue (Paid)

Collected Inflow

{{ formatCurrency(totalRevenuePending) }}

Pending Receivables

{{ unpaidInvoicesCount }} Invoices Unpaid

{{ formatCurrency(totalPayrollNet) }}

Total Payroll (Net)

{{ payslipHistory.length }} Payslips Generated

{{ formatCurrency(totalApprovedClaimsAmount) }}

Claims & Vouchers (Approved)

{{ pendingClaimsCount }} Pending Approval

Priority Clients{{ priorityClients.length }}

Priority Clients

No Priority-tier clients yet

Clients set to the Priority tier in the Client Directory will appear here.

Staff Workload Across Clients{{ overloadedEmployeeCount }} Overloaded

Active project and activity assignments per staff member — a view only possible because HR and Client records share one system.

Staff Workload Across Clients

No active workload right now

Staff members with active project or activity assignments will appear here.

Financial & Revenue Trend

Document & Invoice Status Distribution

Claims & Payment Voucher Pipeline

{{ claimsPipelineTotal }} total record{{ claimsPipelineTotal === 1 ? '' : 's' }}
{{ stage.label }}
{{ stage.count }} {{ stage.pct }}%
Finance notification: {{ financePendingClaims.length }} claim(s) and/or payment voucher(s) are pending Finance approval.

Recent Activities & Document List

Date Module Ref No. Recipient / Employee Amount (RM) Status Actions
{{ item.date }} {{ item.type }} {{ item.docNo }} {{ item.name }} {{ formatCurrency(item.amount) }} {{ getActivityStatus(item).label }}

{{ getActivityStatus(item).detail }}

{{ (recentActivityFilter !== 'all' || recentActivityAttentionOnly || searchQuery) ? 'No matching activities' : 'No activity yet' }}

Page {{ currentPage }} of {{ totalPages }}

Client Directory

Maintain client company records used across quotations and invoices.

Registered Client Directory

Total Clients: {{ customers.length }}
Reg No. / TIN Client / Company Name Contact & Email Address & Location Actions
{{ cust.clientSSM || '-' }}
{{ getInitials(cust.clientName) }}
{{ cust.clientName }} {{ cust.clientPosition }}
New {{ clientTierMeta(cust.clientTier).label }} {{ clientHealthScore(cust).label }}
{{ cust.clientContactPerson || '-' }} {{ cust.clientPhone }} {{ cust.clientEmail }} {{ formattedClientAddress(cust) || '—' }}

No clients yet

Client records are created automatically the first time you generate a quotation or invoice for them.

Employee Management

Maintain employee profiles, statutory contributions, and employment records.

Registered Employee Directory

Total Employees: {{ employees.length }}
Employee ID & Presence Name & Position ID / Passport & Bank Account (PDPA Masked) Contributions (EPF/SOCSO/PCB) Basic Salary (RM) Actions
{{ emp.empNo }} {{ employeePresenceLabel(emp) }} {{ employeeLastSeen(emp) }} {{ emp.status === 'Aktif' ? 'Active' : emp.status }} {{ emp.employmentType || 'Not set' }} · Joined {{ emp.joinDate || '-' }} 60+ Senior
{{ getInitials(emp.name) }}
{{ emp.name }} {{ emp.position }} {{ emp.dept }} {{ emp.email }}
{{ maskIC(emp.ic) }} {{ maskBank(emp.bankAcc) }} EPF: {{ maskSensitive(emp.epfNo) }}
SOCSO: {{ maskSensitive(emp.socsoNo) }}
PCB: {{ maskSensitive(emp.taxNo) }}
{{ formatCurrency(emp.basicSalary) }}

No employees yet

Add your first employee to begin managing profiles, statutory contributions and payroll.

Enterprise Reports & Data Export

Export financial, employee, and document reports to CSV/Excel.

Payroll Report

Employee Directory

Invoice & Quotation Report

Claims & Payment Vouchers

Cross-Domain Insights

Combined HR + Client analytics — unique to a unified HRMS/CDTS platform.

Top Clients by Revenue

{{ r.clientName }} {{ formatCurrency(r.revenue) }}

No paid invoices yet — client revenue will rank here once invoices are paid.

Staff Engaged per Client

{{ s.clientName }} {{ s.staffCount }} staff

No project assignments yet — staff engagement will rank here once projects are assigned.

Delivery Velocity

{{ avgActiveProjectAgeDays }}days

Average age of active projects still in progress.

{{ overloadedEmployeeCount }}staff

Currently overloaded across client work (4+ active items).

{{ userProfile.role === 'Client' ? 'My Project Tracker' : 'Project Activities' }}

{{ userProfile.role === 'Client' ? 'Follow your project progress across five workflow stages, in real time.' : 'Real-time project progress across five controlled workflow stages.' }}

{{ project.projectRef }}

{{ project.title }}

{{ project.targetDate || 'Not scheduled' }}
{{ project.ownerName || 'ZENQOR Team' }}

No projects assigned yet

Projects assigned to your account will appear here with real-time progress.

{{ stage }}

{{ getProjectsByStage(stage).length }}
New Client {{ clientTierMeta(clientTierForId(group.clientDirectoryId)).label }}
{{ project.projectRef }} {{ projectTargetDateState(project).label }}

No projects here

Reference / ProjectClientPerson In ChargeTarget DateWorkflow StatusActions

{{ project.projectRef }}

{{ project.title }}

{{ project.description }}

{{ project.clientEmail }}

New{{ clientTierMeta(clientTierForId(project.clientDirectoryId)).label }}

{{ project.ownerName || '—' }}

{{ project.ownerPosition }}

{{ project.ownerEmail }}

Assigned {{ formatDateTime(project.ownerAssignedAt) }}

{{ projectPicPresenceDetail(project) }}

{{ project.targetDate || '—' }} {{ project.status }}

{{ projects.length ? 'No matching projects' : 'No projects yet' }}

{{ projects.length ? 'No projects match your current scope or search.' : 'Projects will appear here once they are created.' }}

Client Workspace

{{ currentTab === 'client-documents' ? 'Documents & Billing' : currentTab === 'client-updates' ? 'Project Updates' : 'Help & Support' }}

{{ currentTab === 'client-documents' ? 'Manage your quotations, invoices and payment records.' : currentTab === 'client-updates' ? 'Follow the latest information shared by your project team.' : 'Get assistance and contact the ZENQOR support team.' }}

Client WorkspaceSecure & Live

Welcome, {{ clientPortalIdentity.clientName }}

Everything for your projects, official documents and payment progress is gathered here in one secure workspace.

{{ getInitials(clientPortalIdentity.clientName) }}

{{ clientPortalIdentity.clientName }}

{{ clientPortalIdentity.clientSSM || 'Business profile pending' }}

{{ clientTierMeta(clientPortalIdentity.clientTier).label }} Client

{{ clientPortalIdentity.clientEmail }}

Protected client access

Documents

{{ clientPortalDocs.length }}

Official files available

Paid

{{ myClientPaidCount }}

Invoices completed

Action Needed

{{ myClientUnpaidCount }}

Unpaid invoices

Active Projects

{{ clientActiveProjectsCount }}

Currently in progress

Your Project Progress

Your next project will appear here

Once our team assigns a project to your account, you can follow every milestone and update in real time.

Recent Updates

Latest information shared by your project team.

{{ update.title || update.status || 'Project update' }}

{{ update.message || update.details || 'A new update is available for your project.' }}

{{ formatDateTime(update.createdAt || update.updateDate) }}

All caught up

New project updates will be shown here automatically.

How can we help?

Choose the most suitable channel below. For project-specific questions, open My Projects so your message stays connected to the correct project history.

Email Support

Send a general account, document or billing enquiry.

{{ company.email || 'admin@zenq0r.com' }}

Call Our Team

For urgent assistance during normal business hours.

{{ company.phone }}

Before contacting support

Include reference number

Provide the project or document number.

Describe the issue

Explain what happened and the expected result.

Attach evidence

Include a screenshot when relevant.

Documents & Billing

Review and print your official quotations and invoices.

Showing {{ filteredClientPortalDocs.length }} of {{ clientPortalDocs.length }} document(s)
Type Document No. Date Amount (RM) Status Actions

{{ clientPortalDocs.length ? 'No documents match this filter' : 'Your document centre is ready' }}

{{ clientPortalDocs.length ? 'Choose another type or payment status to see more records.' : 'Official quotations and invoices will appear here automatically when issued by our team.' }}

{{ d.type }} {{ d.docNo }} {{ d.date }} {{ formatCurrency(d.amount) }} {{ d.status || 'Unpaid' }}

{{ userProfile.role === 'Client' ? 'My Workspace' : 'Operation Center' }}

Signed Documents

Fill in, sign and finalize your Authorization Letter, Client Information Form, NDA and Service Agreement online.

Loading documents…

{{ signedDocuments.error }}

{{ userProfile.role !== 'Client' && signedDocuments.items.length ? 'No matching documents' : 'No documents yet' }}

{{ userProfile.role !== 'Client' && signedDocuments.items.length ? 'No documents match your client or status filter.' : 'Signed documents will appear here once created.' }}

{{ documentTemplates[d.templateId] ? documentTemplates[d.templateId].label.en : d.templateId }}

{{ d.clientName }} · {{ d.referenceNo }} · Updated {{ formatDateTime(d.updatedAt) }}

{{ signedDocumentStatusLabel(d.status) }} Deletion Requested

Website Content

Manage what's shown on zenqor-tech / www.zenqor.com.my — changes go live immediately. Restricted to Superadmin, Director and IT.

System Audit & Security Logs

Real-time user security and activity logs from Firebase.

Automatic Audit Log Retention

Available only to Director, Superadmin and IT. Expired records are removed automatically by Firestore TTL.

{{ auditRetention.message }}

{{ auditRetention.error }}

Timestamp User Action Activity / Target IP & Browser
{{ new Date(log.timestamp).toLocaleString('en-MY') }} {{ log.userName || log.user }}{{ log.user }}{{ log.role }} {{ log.action }} {{ log.details }}Module: {{ log.module }}UID: {{ log.uid }} {{ log.ip || 'Unavailable' }}{{ log.browser || 'Unknown Browser' }}{{ log.os || 'Unknown OS' }} · {{ log.device || 'Unknown Device' }}{{ log.userAgent || log.browser }}

No audit events yet

Security and compliance events will be recorded here automatically as they happen.

{{ currentTab === 'settings' ? 'Global Company Settings' : 'Admin Profile & Portal Access Management' }}