What you will accomplish with this guide
Create services in the Catalog → build a mixed quotation (products + services) → convert it into a contract → fill in Party B and acceptance milestones → send the contract (.docx) → upload the signed version → issue invoices by installment → review the accounting journal entries.
Before you begin
| # | Requirement | Why it's needed |
|---|---|---|
| 1 | Log in to GTG CRM with CRM management permissions (creating products, services, quotations, and contracts). | To complete the entire workflow. |
| 2 | The Chart of Accounts (CoA) has been set up, and (for issuing invoices) the workspace invoice/ERP configuration is in place. | So invoices are posted to the accounting ledger. |
| 3 | A contact or company to act as the customer (Party B). | The contract needs a counterparty to sign. |
Step 1 — Create a service in the Catalog
- Open CRM → Catalog → Services → Create.
- Create "Website Design" — price
20,000,000, billing type One-time. Save. Then create "Monthly SEO" — price5,000,000, Recurring → monthly. Save.
✅ Expected result: The services appear under Catalog ▸ Services; each service has a price and a billing cycle. (Products appear under Catalog ▸ Products and can also be set to recur.)
Step 2 — Create a mixed quotation (products + services)
- Open CRM → Sales → Quotations → Create, and select a contact.
- Line 1: Type = Service → "Website Design" (1). Line 2: Type = Service → "Monthly SEO" (1). Line 3: Type = Product → "Hosting License" (quantity 3).
- Save the quotation → Send → mark as Accepted (DRAFT → SENT → ACCEPTED).
✅ Expected result: Each line shows a Type tag (Service = green, Product = blue); service lines display their billing cycle. The totals cover all lines. Once ACCEPTED, the Convert to Contract button appears.
Step 3 — Convert the quotation → Contract
- Move the quotation to the Accepted status: open the quotation → Mark as Sent → Mark as Accepted (confirm).
- On the Accepted quotation row in the Quotations table, click the Convert to Contract icon (row action button — NOT inside the detail drawer; the drawer only has Convert to Order). Open the newly created contract under Sales → Contracts.
✅ Expected result: A toast/result message shows the contract number in the format CTR-YYYYMM-NNNNN. The contract keeps each line's type/cycle; totals are split into a one-time total and a monthly total plus VAT. The quotation changes to CONVERTED/ACCEPTED.
Step 4 — Fill in Party B and acceptance milestones
- In the contract, open the Party B section → select a contact/company; the details (legal name, tax code, address, legal representative) auto-fill when enriched company data is available.
- Set the acceptance milestones (Nghiệm thu) to drive the payment schedule; (optional) enable bilingual mode.
✅ Expected result: Party B appears in the contract; the acceptance milestones generate the corresponding payment schedule.
Step 5 — Send the contract to the customer (.docx)
- Open the contract details (click the + / contract number to open the panel). In the Documents (Tài liệu) section: click Generate contract to create a .docx version, or use Upload document to attach a contract file. Once a document exists, each document has a Send / Download button to send it to the customer.
✅ Expected result: The system creates or attaches the contract document; the Send button (to email the customer) and Download appear on the document row in the Documents section.
ℹ️ Note: The Documents section of the contract has Generate contract + Upload document; once a document exists, each document row shows Send / Download. Please fill in Party B (Step 4) before Generate contract; if Party B is not yet filled in, you can still use Upload document to attach the contract file.
Step 6 — Upload the signed copy
- After the customer signs and sends it back, in the Documents section click Upload document → select the file (type Signed copy) → confirm. (A hint appears right below: "Upload the signed contract to activate it.")
✅ Expected result: The signed file is attached (Type Signed copy) along with the signing time; the contract automatically switches to ACTIVE/Ongoing and Signed at is filled in. The Billing (payment schedule) table and the Issue invoice button appear (no journal entries generated yet).
Step 7 — Issue invoices by installment
- On the active contract, in the Billing table, click Issue invoice for the installment to be invoiced → the Issue invoice dialog opens with 3 options: Issue now / Save as draft / Mark paid now (with the note: "Issuing records revenue + receivable (AR). Marking paid records the cash receipt.") → select an option and confirm.
✅ Expected result: The invoice for the payment installment is issued through the ERP/invoice workflow; the installment is linked to the newly issued invoice; the payment status is updated.
⚠️ Prerequisite: Issuing invoices requires the workspace to be configured with e-invoicing / a connection to a tax authority provider. If not connected, the Issue invoice dialog will still show a preview, but the issuing step cannot be completed. Once e-invoicing is connected, the installment will issue the invoice and automatically generate journal entries (Step 8).
Step 8 — View accounting journal entries
- Open Management (Quản lý) → Accounting (Kế toán) → Journal Entries (Sổ cái / Bút toán).
✅ Expected result: When an invoice is issued, a balanced entry is posted automatically: Debit Accounts Receivable (131) / Credit Revenue (511) / Credit Output VAT (for a workspace that newly set up the Vietnamese chart of accounts, this is posted to account 33311 Output VAT, under group 3331. Workspaces that already existed keep the account this line was already using). When a payment is recorded: Debit Cash (111/112) / Credit Accounts Receivable (131).
ℹ️ Note: The contract revenue entry (Debit 131 / Credit 511 / Credit 3331) appears only after the invoice is issued, meaning after you have connected e-invoicing (see Step 7).
Quick reference for expected results
| Action | Result you will see |
|---|---|
| Create service (Step 1) | Service in Catalog ▸ Services + price + billing cycle |
| Mixed quote (Step 2) | Type tag on each line; ACCEPTED → Convert to Contract button |
| Convert (Step 3) | CTR-2026-… ; total split as one-time / monthly; quote CONVERTED |
| Party B + acceptance (Step 4) | Party B pre-filled; payment schedule by milestone |
| Send (.docx) (Step 5) | .docx email sent to customer; SENT |
| Upload signed copy (Step 6) | Signer + timestamp; SIGNED → ACTIVE; payment schedule created |
| Issue invoice (Step 7) | Preview → confirm → invoice for the installment is issued |
| General ledger (Step 8) | Entry Debit 131/Credit 511+3331; payment Debit 111/Credit 131 |
Notes
- Quote → Order still copies only product lines (services belong to the contract), by design.
- Importing a product catalog supports any spreadsheet format (AI automatically maps the columns); importing services is a upcoming feature on the roadmap.
- VAT: if the tax is set to 0%, VAT based on the workspace's country (e.g., 10% for Vietnam) can still be applied from the price package. This is existing behavior.