taohopdong

Tạo hợp đồng: tra cứu thông tin doanh nghiệp từ masothue.com và ghi vào Google Sheet (sheet Hợp đồng). Use when user asks to: tra cứu mã số thuế, ghi thông tin công ty vào sheet, tạo hợp đồng, thêm dữ liệu doanh nghiệp từ masothue, hoặc yêu cầu format: "MST + Số tiền + Dịch vụ" để điền sheet.

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "taohopdong" with this command: npx skills add minhduongqngai/taohopdong

Tạo Hợp Đồng (taohopdong)

Tra cứu thông tin doanh nghiệp từ masothue.com và ghi vào Google Sheet Hợp đồng.

Yêu cầu: gog CLI đã authenticated, env GOG_ACCOUNT được set, và Odoo connector sẵn sàng (~/clawd/skills/odoo-connector).

Sheet Structure

  • Spreadsheet ID: 1ciSmGaKqO03w4DaMnx_JSaTz0gdyIuj26ucYNKkpMU0
  • Sheet name: Hợp đồng (gid: 1568677042)
  • Header row: dòng 4
  • Dữ liệu bắt đầu: dòng 5 trở đi

Column layout

CộtNội dungVí dụ
AMã (MST)0312712411
CMã hợp đồngW231224/SEO
DTên doanh nghiệpCÔNG TY TNHH TM DV MONA
EĐịa chỉSố 65, Đường Số 3, CityLand...
FMã số thuế0314927902
GNgười đại diệnVŨ THỊ NGA
HSĐT(trống nếu không có)
ISố tiền14.000.000
JDịch vụSEO

Google Sheets via gog CLI

Dùng gog để đọc/ghi sheet. Set env GOG_ACCOUNT trước:

export GOG_ACCOUNT="openclaw@my-project-1675840178144.iam.gserviceaccount.com"

Đọc dữ liệu hiện có:

gog sheets get 1ciSmGaKqO03w4DaMnx_JSaTz0gdyIuj26ucYNKkpMU0 "Hợp đồng!A4:J" --json --no-input

Ghi (cập nhật specific range):

gog sheets update 1ciSmGaKqO03w4DaMnx_JSaTz0gdyIuj26ucYNKkpMU0 \
  "Hợp đồng!A5:J5" \
  --values-json '[["0312712411","","W231224/SEO","TÊN CÔNG TY","Địa chỉ","0312712411","NGƯỜI ĐD","","14.000.000","SEO"]]' \
  --input USER_ENTERED \
  --no-input

Lưu ý: gog tự xử lý encoding tên sheet tiếng Việt, không cần URL-encode thủ công.

Input Format

User có thể cung cấp thông tin theo các format sau:

  1. Link masothue.com đầy đủ: https://masothue.com/0314927902-cong-ty-tnhh-thuong-mai-dich-vu-mona

  2. Chỉ MST (tự động ghép URL): 0314927902https://masothue.com/{mst}

  3. Cú pháp đầy đủ 1 dòng: {Mã HĐ} {URL/MST} {Số tiền} {Dịch vụ} Ví dụ: W231224/SEO https://masothue.com/0314927902... 14.000.000 SEO

Workflow

Bước 1: Xác định MST và URL masothue

  • Nếu user gửi full URL (slug) → dùng luôn
  • Nếu user gửi MST số → dùng search URL: https://masothue.com/Search/?q={mst}&type=masothue → web_fetch sẽ tự redirect sang slug đúng
  • Nếu user gửi cả mã HĐ + URL + số tiền + dịch vụ → parse từng phần

Lưu ý: URL trần https://masothue.com/{mst} (chỉ số) không redirect — sẽ 404. Luôn dùng search URL hoặc slug đầy đủ.

Bước 2: Scrape masothue.com

Dùng web_fetch với URL masothue (search URL hoặc full slug). Parse kết quả để lấy:

FieldPattern trong web_fetch output
Tên công tyDòng đầu tiên sau title (thường là tên in hoa)
Mã số thuếDòng có Mã số thuế → value bên dưới
Địa chỉDòng Địa chỉ (không phải Địa chỉ Thuế) → value
Người đại diệnDòng có Người đại diện → tên trong []

Ưu tiên Địa chỉ (address thật) hơn Địa chỉ Thuế (tax address).

Bước 3: Tìm dòng trống tiếp theo trong sheet

Dùng gog để đọc dữ liệu hiện tại:

gog sheets get 1ciSmGaKqO03w4DaMnx_JSaTz0gdyIuj26ucYNKkpMU0 "Hợp đồng!A4:J" --json --no-input

Tìm dòng cuối có dữ liệu trong cột A (MST). Dòng tiếp theo là rowNum = lastRow + 1.

Bước 4: Ghi vào Google Sheet

Ghi range Hợp đồng!A{rowNum}:J{rowNum} với:

values = [[
    mst,           # A - Mã (MST)
    "",            # B - (nếu có)
    ma_hop_dong,   # C - Mã hợp đồng
    ten_cong_ty,   # D - Tên doanh nghiệp
    dia_chi,       # E - Địa chỉ
    mst,           # F - Mã số thuế (lặp lại)
    nguoi_dai_dien,# G - Người đại diện
    "",            # H - SĐT
    so_tien,       # I - Số tiền
    dich_vu        # J - Dịch vụ
]]

Lệnh gog:

gog sheets update 1ciSmGaKqO03w4DaMnx_JSaTz0gdyIuj26ucYNKkpMU0 \
  "Hợp đồng!A${rowNum}:J${rowNum}" \
  --values-json '[[mst,"",ma_hop_dong,ten_cong_ty,dia_chi,mst,nguoi_dai_dien,"",so_tien,dich_vu]]' \
  --input USER_ENTERED \
  --no-input

Cảnh báo: Luôn ghi đủ A:J để giữ nguyên các cột D-G (tên, địa chỉ, MST, người đại diện) đã có. Không ghi range C:J riêng lẻ.

Bước 5: Verify

Đọc lại dòng vừa ghi để xác nhận:

gog sheets get 1ciSmGaKqO03w4DaMnx_JSaTz0gdyIuj26ucYNKkpMU0 \
  "Hợp đồng!A${rowNum}:J${rowNum}" --json --no-input

Thông báo ngắn gọn: Dòng {rowNum} Đã thêm thành công

Bước 6 (Tự động): Tạo khách hàng trên Odoo CRM

Sau khi ghi sheet, tự động tạo (hoặc cập nhật) khách hàng (res.partner) trên Odoo với thông tin doanh nghiệp vừa tra cứu.

Kiểm tra trùng: Tra cứu res.partner theo vat (MST) trước. Nếu đã tồn tại thì bỏ qua, không tạo trùng.

import sys
sys.path.insert(0, '~/clawd/skills/odoo-connector')
from odoo_skill.client import OdooClient

client = OdooClient()

# Kiểm tra đã có partner với MST này chưa
existing = client.search_read('res.partner', [['vat', '=', mst]], fields=['id', 'name'])

if not existing:
    partner_id = client.create('res.partner', {
        'name': ten_cong_ty,
        'vat': mst,
        'street': dia_chi,
        'phone': sdt or '',       # nếu có SĐT từ masothue
        'is_company': True,
        'company_type': 'company',
    })
    print(f'✅ Odoo Partner #{partner_id}: {ten_cong_ty}')
else:
    print(f'ℹ️ Đã tồn tại partner #{existing[0]["id"]}: {existing[0]["name"]} — bỏ qua')

Lưu ý: Nếu user có cung cấp SĐT riêng (trong input), ưu tiên dùng SĐT đó thay vì SĐT từ masothue.

Bước 7 (Tự động): Tạo cơ hội trên Odoo CRM

Sau khi tạo (hoặc tìm thấy) partner, tự động tạo một crm.lead (opportunity) ở stage Hợp Đồng Mẫu (ID: 5) để theo dõi hợp đồng này.

import sys
sys.path.insert(0, '~/clawd/skills/odoo-connector')
from odoo_skill.client import OdooClient

client = OdooClient()

opp_id = client.create('crm.lead', {
    'name': f'{ma_hop_dong} - {dich_vu} - {ten_cong_ty_ngan}',  # VD: "W21/256565/SEO - SEO - Bao Bì Rồng Việt"
    'partner_id': partner_id,                     # ID từ Bước 6
    'contact_name': nguoi_dai_dien or '',
    'type': 'opportunity',
    'stage_id': 5,                                # Hợp Đồng Mẫu
    'expected_revenue': so_tien_so,               # số tiền dạng số, VD: 14000000
    'probability': 50,
})
print(f'✅ Odoo Opp #{opp_id}: {ma_hop_dong} - {dich_vu} - {ten_cong_ty_ngan}')

Lưu ý: so_tien_so là số tiền dạng integer (VD: 14000000), parse từ so_tien string (VD: "14.000.000"). ten_cong_ty_ngan là tên công ty rút gọn (bỏ "CÔNG TY TNHH"... để tên opportunity gọn hơn) — có thể lấy nguyên tên đầy đủ nếu muốn đơn giản. Tên opportunity theo format {Mã HĐ} - {Dịch vụ} - {Tên}.

Edge Cases

  • MST bắt đầu bằng số 0 (VD: 0312712411): Google Sheets có thể ăn mất số 0 nếu ghi dạng số. Luôn dùng --input USER_ENTERED và truyền dạng string "0312712411" để giữ nguyên số 0.
  • Dữ liệu đã tồn tại: Kiểm tra MST trong sheet trước khi ghi để tránh trùng.
  • Không tìm thấy masothue: Thử search Google với format "mã số thuế {mst}" hoặc báo user.

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

🫧 GPT Image 2 — Pro Pack on RunComfy

Generate and edit images with OpenAI GPT Image 2 (ChatGPT Images 2.0) on RunComfy. Documents GPT Image 2's strengths (embedded text, logos, multilingual typo...

Registry SourceRecently Updated
General

MigraQ

腾讯云迁移平台(CMG/MSP)全流程能力。触发词:资源扫描、扫描阿里云/AWS/华为云/GCP资源、生成云资源清单、选型推荐、对标腾讯云、推荐规格、帮我推荐、给我推荐、ECS对应什么腾讯云产品、成本分析、TCO、迁移报价、询价、价格计算器、cmg-scan、cmg-recommend、cmg-tco

Registry SourceRecently Updated
General

Okx 402 Payment

Sign an x402 payment authorization for an EXTERNAL / third-party payment-gated resource. Use only when the user explicitly mentions 'x402' (or 'sign x402 pay...

Registry SourceRecently Updated
General

PRD Generator

Use when drafting, improving, reviewing, or explaining PRDs, product requirements, feature specs, user stories, acceptance criteria, scope boundaries, MVP de...

Registry SourceRecently Updated