Workflow: Contract Approval + Digital Signature

Modules involved: Contracts · Document Management · Workflow Automation · Proposals
Who uses it: Legal, Account manager, Manager vânzări, Clienți
Durata tipică: 1 zi – 2 săptămâni (depinde de numărul de aprobatori)

Overview

Fluxul complet de semnare a unui document contractual: de la redactarea din șablon, prin aprobarea internă multi-nivel, la trimiterea spre semnătură digitală a clientului și arhivarea contractului semnat. Contractele nesemnate sau expirate generează remindere automate.


Diagrama fluxului

[ȘABLON CONTRACT]
  │  bibliotecă de template-uri cu merge fields
  │  ↓ Creare contract (manual / din propunere / din oportunitate)
  │
[CONTRACT — Draft]
  │  câmpuri: subiect, client, tip, valoare, dată start/end
  │  content: HTML cu merge fields populate automat
  │
  ├── [APROBARE INTERNĂ — opțional]
  │     │  flux multi-nivel configurat în Document Management
  │     │  wh_approval_setting → aprobatori notificați
  │     │  status aprobare: pending → approved / rejected
  │     │  ↓ Aprobat intern → se trimite clientului
  │
  ├── [TRIMIS LA CLIENT]
  │     │  email cu link unic (hash URL) + PDF atașat
  │     │  clientul accesează portalul cu linkul primit
  │
  └── [SEMNĂTURĂ CLIENT]
        │  Method A: Semnătură digitală în portal
        │            → signed = 1, signature = fișier PNG
        │            → dmg_approval_detail_eids: IP, timestamp, nume
        │  Method B: Marcare manuală de agent
        │            → marked_as_signed = 1
        │
        ↓
[CONTRACT SEMNAT ✓]
  │  blocat la editare
  │  alarme expirare: isexpirynotified → email reminder
  │
[EXPIRARE / REÎNNOIRE]
  │  renew() → contract nou cu aceleași clauze
  │  semnătura: păstrată (renew_keep_signature) sau resetată

Pas cu pas

1. Șabloane și tipuri de contract

Unde: /admin/contracts/templates și /admin/contracts/types

Tipuri de contract (/admin/contracts/types)

Clasifică contractele organizațional: NDA, Contract Cadru, Contract Prestări Servicii, Anexă, etc.
Fiecare tip poate avea un șablon implicit de conținut.

Șabloane (/admin/contracts/templates)

Documente HTML pre-redactate cu merge fields care se populează automat la crearea contractului:

Merge field Valoare
{client_name} Numele clientului
{client_email} Email client
{client_phone} Telefon client
{contract_subject} Subiectul contractului
{contract_value} Valoarea contractului
{contract_nr} Numărul contractului
{datestart} Data de start
{dateend} Data de expirare
{staff_name} Agentul responsabil
{current_date} Data curentă

2. Crearea contractului

Unde: /admin/contracts

Surse de creare:

Câmpuri cheie (tblcontracts):

Câmp Note
subject Titlul contractului
client Clientul asociat (obligatoriu)
contract_type Tipul (NDA, prestări, etc.)
datestart / dateend Perioada de valabilitate
contract_value Valoarea monetară
nr Numărul contractului (manual sau auto)
content Conținutul HTML al contractului
project_id Proiectul asociat (opțional)
not_visible_to_client Dacă e ascuns în portalul clientului
hash Token unic de 32 caractere pentru URL-ul de semnare

La creare: signed = 0, marked_as_signed = 0, isexpirynotified = 0


3. Aprobare internă (opțional, prin Document Management)

Unde: /admin/document_management

Dacă organizația impune verificare internă înainte de trimiterea la client, contractul poate fi supus unui flux de aprobare configurat în Document Management.

Configurare flux (dmg_approval_setting):

Câmp Note
notification_recipient JSON cu aprobatorii (staff IDs, departamente)
number_day_approval Deadline aprobare în zile
choose_when_approving Dacă aprobatorul poate alege acțiunea
departments / job_positions Restricții cine poate aproba

Procesul de aprobare (dmg_approval_details):

Câmp Valori
approve pendingapproved / rejected
staff_approve ID-ul aprobatorului
date Timestamp aprobare
note Comentariul aprobatorului

Efecte:


4. Trimiterea la client

Unde: Din contractul deschis → buton Trimite

Ce se întâmplă:

  1. Email generat din template contract_send_to_customer cu merge fields populate
  2. Dacă document_attachment_on_email = 1 → PDF-ul contractului atașat la email
  3. Email conține link unic: https://firma.ro/contract/{hash} — fiecare contract are hash distinct
  4. Clientul accesează linkul fără autentificare (hash = autentificare implicită)

5. Semnătura digitală a clientului

Unde: Portalul client (URL cu hash unic)

Method A — Semnătură digitală:

  1. Clientul citește contractul în browser (HTML sau PDF)
  2. Desenează semnătura în câmpul dedicat (canvas touchscreen/mouse)
  3. Apasă Accept & Semnează
  4. Sistemul înregistrează în dmg_approval_detail_eids:
Câmp Valoare
firstname / lastname Numele semnatarului
email Emailul semnatarului
ip_address IP-ul de la care s-a semnat
date_of_signing Timestamp exact al semnării
approve signed
  1. Pe contractul din CRM: signed = 1, signature = {filename.png} (imaginea semnăturii)
  2. Notificare automată trimisă agentului responsabil: "Contractul X a fost semnat de client"

Method B — Marcare manuală:

Agentul marchează contractul ca semnat manual (ex: a primit contractul fizic semnat):

Blocare editare post-semnare:
Dacă signed = 1 SAU marked_as_signed = 1 → câmpurile contractului sunt locked și nu mai pot fi modificate. Orice modificare necesită un act adițional (contract nou sau amendament).


6. Monitorizarea și expirarea contractului

Remindere de expirare:

Sistemul verifică zilnic dateend pe contractele active:

Reînnoire (renew()):

Vizibilitate portalul client:


Tipuri de contracte în CRMConnect

Tip URL Descriere
Documente Clienți /admin/contracts Contracte cu clienți
Documente Furnizori /admin/contracts_vendor Contracte cu furnizori
Documente Oportunități /admin/contracts_opportunity Atașate la oportunități

Fiecare tip are modelul său propriu dar structura de semnare este identică.


Workflow Automation — automatizări utile

Combinat cu modulul Workflow Automation, poți automatiza:

Trigger: Contract semnat (signed = 1)
  → Acțiune: Creează Proiect de implementare
  → Acțiune: Trimite email de bun venit clientului
  → Acțiune: Notifică echipa de delivery

Trigger: dateend − 30 zile
  → Acțiune: Task "Contactează clientul pentru reînnoire" → agent responsabil
  → Acțiune: Email reminder către client

Trigger: Contract respins la aprobare internă
  → Acțiune: Notificare redactor + notă cu motivul respingerii

Ce se creează automat

Eveniment Se creează automat
Contract creat din propunere Client și valoare preluate; hash generat
Aprobare internă inițiată Notificări trimise aprobatorilor din configurație
Contract trimis la client Email cu link hash + PDF (dacă activat)
Client semnează digital signed=1; fișier PNG semnătură; log dmg_approval_detail_eids
Contract semnat Notificare agent; activitate log pe fișa clientului
Data expirare apropiată Email reminder client; isexpirynotified=1

Puncte unde fluxul poate bloca

Problemă Cauză probabilă Soluție
Clientul nu poate deschide linkul Hash incorect sau sesiune expirată Retrimite contractul — se generează un email nou cu același hash
Nu se poate edita contractul semnat signed=1 sau marked_as_signed=1 blochează editarea Creează act adițional (contract nou) sau resetează manual din BD
Merge fields neînlocuite Câmpuri lipsă pe fișa clientului (ex: email gol) Completează fișa clientului înainte de creare contract
Clientul nu primește emailul SMTP nesetat sau email client invalid Verifică SMTP și adresa email din fișa clientului
Remindere de expirare retrimise zilnic isexpirynotified nu e setat Verifică funcția de verificare expirare (CRON activ?)
Aprobare internă blocată Aprobatorul nu a primit notificarea Verifică wh_approval_setting și emailul aprobatorului

Rapoarte și vizibilitate


Module implicate — documentație detaliată

← Înapoi la Workflows