TRPG Agile Trasparenza Retributiva & Gender Pay Gap

TRPG Agile come Provider di Dati Retributivi

TRPG Agile espone una Services API REST che permette a sistemi GRC e ESG esterni di leggere dati di Gender Pay Gap, score di compliance UE 2023/970, metriche VSME e alert aperti. Auth via API Key dedicata, rate limiting 100 req/ora, firma HMAC-SHA256 per webhook outbound.

Sistemi Integrabili
Disponibile

231 Agile (lg231)

Integrazione MOG D.Lgs. 231/2001 + Trasparenza Retributiva. GPG elevato → rischio Art. 25-quinquies, compliance UE → evidenze OdV, metriche VSME → pillar formazione.

Guida integrazione lg231 →
Pianificato

AllRisk Agile

Feed rischi HR per piattaforma ERM. GPG per categoria/livello mappato su categorie ISO 31000 — discriminazione retributiva come rischio operativo.

Pianificato

SustainAI Agile

Metriche VSME B08/B10/C5 nel report di sostenibilita' (CSRD, GRI 405). Score parità di genere come KPI ESG dashboard.

Pianificato

HR Platform (Zucchetti / TeamSystem)

Feed bidirezionale: importa dati dipendenti in real-time, restituisce GPG calcolato e alert soglia direttamente nel gestionale HR.

Novità v2026.03

AI Chat Agent
Chat tool-use con 9 strumenti su 4 database + RAG normativa
Report AI Word
Documento .docx 8 sezioni con testo AI + dati strutturati
Stampa PDF
Report HTML con toolbar stampa, CSS @page A4, layout ottimizzato
PWA Installabile
App nativa su desktop e mobile, aggiornamento automatico, offline
Base URL: https://trpg.agile.software/api/services
Auth: Header X-API-Key: trpg_xxxx   Rate limit: 100 req/ora per chiave   Caller header: X-Caller: lg231-agile/1.0 (obbligatorio)
Endpoint disponibili
MetodoEndpointScopeDescrizione
GET /status Health check, versione API, timestamp. Nessuna autenticazione richiesta.
GET /gpg-summary read:gpg GPG base e mediano, conteggio dipendenti M/F, status (ok/medium/high/critical), flag requires_joint_assessment, alert aperti. Query: ?period=YYYY-MM
GET /employees-summary read:employees Aggregati forza lavoro: totale, breakdown genere, per categoria CCNL. Nessun dato personale — solo aggregati. Query: ?period=YYYY-MM
GET /compliance-score read:compliance Score complessivo UE 2023/970 (0-100), breakdown per articolo (Art.5/6/9/10), data ultimo assessment, status per articolo.
GET /vsme-metrics read:vsme Metriche VSME: B08 (forza lavoro), B09 (salute/sicurezza), B10 (retribuzioni/GPG), C5 (diversity). Query: ?codes=B08,B10,C5
GET /alerts read:gpg Alert aperti con severity (medium/high/critical), tipo, categoria CCNL, livello, valore GPG. Query: ?status=open&severity=high,critical
Scopes disponibili
ScopeAccesso
read:allAccesso completo a tutti gli endpoint (raccomandato per lg231)
read:gpgGPG summary + alerts
read:employeesEmployee summary aggregato
read:complianceCompliance score + articoli UE 2023/970
read:vsmeMetriche VSME
Esempio risposta /gpg-summary
// GET /api/services/gpg-summary?period=2025-01 // X-API-Key: trpg_Abc123... { "success": true, "data": { "gpg_base": 8.2, "gpg_median": 6.1, "employee_count": 150, "female_count": 62, "male_count": 88, "status": "high", "period": "2025-01", "requires_joint_assessment": true, "alerts_open": 3 }, "meta": { "period": "2025-01", "company_id": 5, "generated_at": "2026-03-07T10:00:00Z" } }
Esempio risposta /compliance-score
// GET /api/services/compliance-score { "success": true, "data": { "overall_score": 72, "assessment_date": "2026-03-01", "directive": "UE 2023/970", "articles": { "Art. 5": { "score": 90, "status": "compliant" }, "Art. 6": { "score": 60, "status": "partial" }, "Art. 9": { "score": 80, "status": "compliant" }, "Art. 10": { "score": 40, "status": "non_compliant" } } } }
Endpoint per LG231 (struttura org, KPI, azioni)
Cross-System TRPG → LG231: questi endpoint forniscono dati strutturali per popolare organigramma, evidenze OdV Pillar 4 e widget dashboard azioni.
MetodoEndpointScopeDescrizione
GET /employees-summary read:employees Struttura organizzativa completa: totali M/F, breakdown per dipartimento, categoria CCNL, livello, tipo contratto. Solo aggregati, nessun dato personale. Query: ?period=YYYY-MM
GET /kpi-targets read:compliance Obiettivi retributivi e compliance: codice KPI, valore attuale, target, soglie warning/critical, status (on_track/at_risk/off_track/achieved). Categorie: gpg, compliance, vsme, diversity, safety.
GET /actions-dashboard read:compliance Riepilogo azioni correttive: totali per tipo/stato, azioni scadute, prossime scadenze, KPI associati. Ideale per widget nella dashboard OdV di LG231.
Near Miss & VSME B09 (per LG231 e SustainAI)
Near Miss (D.L. 159/2025): mancati infortuni registrati, analizzati e comunicati al Ministero. LG231 usa i near miss come segnale di rischio Art. 25-septies (omicidio colposo/lesioni). SustainAI usa i near miss + INAIL per la metrica VSME B09 (salute e sicurezza).
MetodoEndpointScopeDescrizioneConsumer
GET /near-miss-summary read:compliance Conteggi aggregati: totale, da analizzare, rischio alto/critico, azioni generate, per categoria, per mese. LG231, SustainAI
GET /near-miss-dashboard read:compliance Dashboard completa near miss: totali, trend, ultimi eventi, per rischio. Per widget OdV in LG231. LG231
GET /vsme-b09 read:vsme Metriche VSME B09 dettagliate: infortuni, near miss, tasso frequenza/gravita', premi INAIL, rapporto near miss/infortuni. Query: ?year=2026 SustainAI
Esempio /near-miss-summary
// GET /api/services/near-miss-summary { "success": true, "data": { "total": 12, "da_analizzare": 3, "rischio_alto": 2, "rischio_critico": 1, "azioni_generate": 3, "chiusi": 8, "by_category": [ { "category": "caduta", "cnt": 4 }, { "category": "urto", "cnt": 3 }, { "category": "ergonomia", "cnt": 2 } ], "by_risk": [ { "risk_level": "basso", "cnt": 5 }, { "risk_level": "medio", "cnt": 4 }, { "risk_level": "alto", "cnt": 2 }, { "risk_level": "critico", "cnt": 1 } ] } }
Esempio /vsme-b09 (per SustainAI)
// GET /api/services/vsme-b09?year=2026 { "success": true, "data": { "year": 2026, "infortuni_totali": 3, "di_cui_gravi": 1, "malattie_prof": 0, "giorni_persi": 45, "ore_lavorate": 312000, "tasso_frequenza": 9.62, "tasso_gravita": 0.14, "premio_inail": 18500.00, "near_miss_total": 12, "near_miss_critici": 1, "near_miss_alti": 2, "near_miss_con_azione": 3, "rapporto_nm_infortuni": 4.0 } }
Per LG231: i near miss con rischio alto/critico generano automaticamente un'azione correttiva in TRPG. LG231 li importa come rischi HR (Art. 25-septies) via /near-miss-summary e monitora le azioni via /actions-dashboard.
Per SustainAI: l'endpoint /vsme-b09 fornisce tutte le metriche VSME B09 in un unico JSON: infortuni + near miss + tassi + premi INAIL. Pronto per il bilancio di sostenibilita'.
Esempio /employees-summary (per organigramma)
// GET /api/services/employees-summary?period=2025-01 { "success": true, "data": { "total": 150, "female": 62, "male": 88, "female_pct": 41.3, "male_pct": 58.7, "by_department": [ { "department": "Produzione", "total": 52, "female": 18, "male": 34 }, { "department": "Amministrazione", "total": 35, "female": 22, "male": 13 }, { "department": "Commerciale", "total": 28, "female": 10, "male": 18 }, { "department": "IT", "total": 20, "female": 5, "male": 15 }, { "department": "Direzione", "total": 15, "female": 7, "male": 8 } ], "by_category": [ { "category": "Impiegati", "total": 65, "female": 30, "male": 35 }, { "category": "Operai", "total": 45, "female": 15, "male": 30 }, { "category": "Quadri", "total": 25, "female": 10, "male": 15 }, { "category": "Dirigenti", "total": 15, "female": 7, "male": 8 } ], "by_level": [ { "category": "Dirigenti", "level": "D1", "total": 7, "female": 2, "male": 5 }, { "category": "Dirigenti", "level": "D2", "total": 8, "female": 5, "male": 3 }, { "category": "Impiegati", "level": "5-7", "total": 37, "female": 15, "male": 22 } ], "by_contract": [ { "contract_type": "permanent", "total": 120, "female": 50, "male": 70 }, { "contract_type": "temporary", "total": 20, "female": 8, "male": 12 }, { "contract_type": "part_time", "total": 10, "female": 4, "male": 6 } ] } }
Esempio /actions-dashboard (per widget OdV)
// GET /api/services/actions-dashboard { "success": true, "data": { "totals": { "total": 8, "corrective": 5, "improvement": 3, "open": 4, "closed": 3, "overdue": 1 }, "overdue": [ { "id": 12, "title": "Piano riequilibrio Dirigenti", "severity": "critical", "deadline": "2025-03-01", "action_type": "corrective" } ], "upcoming": [ { "id": 15, "title": "Valutazione Congiunta Art.10 Quadri", "severity": "major", "deadline": "2025-06-30", "status": "in_progress" } ], "kpis": [ { "kpi_code": "GPG_BASE", "kpi_name": "GPG Base", "current_value": 12.3, "target_value": 5.0, "status": "off_track", "direction": "lower_is_better" }, { "kpi_code": "COMPLIANCE_SCORE", "kpi_name": "Score UE 2023/970", "current_value": 62, "target_value": 80, "status": "at_risk", "direction": "higher_is_better" } ] } }
Report API (JWT Auth)
Nota: Gli endpoint report richiedono autenticazione JWT (non API Key). Il consulente o l'utente genera il report dalla piattaforma TRPG; i sistemi esterni possono triggerare la generazione via API.
MetodoEndpointDescrizione
POST /api/compliance/{cid}/report/generate Genera report. Body: {"report_type":"gpg|compliance|vsme|biennial|transparency","format":"pdf|excel|xbrl","period":"YYYY-MM"}
GET /api/compliance/{cid}/report/view?id={id} Visualizza report HTML inline (per stampa/PDF dal browser). Header Content-Disposition: inline.
GET /api/compliance/{cid}/report/download?id={id} Scarica report come file (attachment). Formati: .html (PDF), .csv (Excel), .xml (XBRL).
GET /api/compliance/{cid}/report/list Lista ultimi 50 report generati per l'azienda, con URL download.
AI API (JWT Auth)
MetodoEndpointDescrizione
POST /api/ai/chat Chat AI tool-use: domande su GPG, compliance, dati aziendali. 9 tool su 4 database + Knowledge Base RAG.
POST /api/ai/analyze/{cid} Analisi completa azienda: executive summary, punti critici, raccomandazioni AI.
POST /api/ai/report/{cid} Genera Report Word .docx (8 sezioni, testo AI + dati strutturati).
POST /api/ai/kb/search Ricerca semantica RAG nella Knowledge Base normativa (Voyage 3-lite embeddings).
Headers risposta
HeaderValore
X-TRPG-API-Version1.0
X-TRPG-Company-IdID azienda (intero)
X-RateLimit-Limit100 (req/ora per chiave)
X-RateLimit-RemainingRichieste rimaste nella finestra corrente
Processi Cross-System TRPG ↔ LG231
Le non conformità retributive rilevate da TRPG generano automaticamente NC e azioni correttive nel sistema 231. Il flusso è bidirezionale: LG231 può aggiornare lo stato delle azioni e TRPG riflette il progresso nel compliance score.
Flusso Non Conformità (TRPG → LG231)
Trigger TRPGNon Conformità GenerataGravitàRiferimento
GPG > 5% in una categoria CCNLNC retributiva di genere — obbligo valutazione congiunta Art. 10MajorArt. 25-quinquies D.Lgs. 231/01
GPG > 10% non giustificatoNC critica — discriminazione retributiva sistematicaCriticalArt. 25-quinquies + Art. 10 UE 2023/970
GPG > 15% (alert critico)NC critica + segnalazione OdV automaticaCriticalWhistleblowing D.Lgs. 24/2023
Squilibrio M/F > 70/30 per categoriaNC discriminazione nelle assunzioniMajorArt. 25-duodecies D.Lgs. 231/01
Art. 5 non conforme (range retributivo assente)NC trasparenza pre-assunzioneMajorArt. 5 UE 2023/970 + D.Lgs. 125/2023
Art. 6 non conforme (info su richiesta mancante)NC diritto informazione dipendentiMajorArt. 6 UE 2023/970
Art. 9 non conforme (report non pubblicato)NC reporting obbligatorio GPGCriticalArt. 9 UE 2023/970
Valutazione congiunta non avviata entro 180ggNC procedura Art. 10 scadutaCriticalArt. 10 UE 2023/970
Azioni Correttive Generate Automaticamente
Non ConformitàAzione CorrettivaResponsabileScadenza
GPG > 5% categoriaAvviare Valutazione Congiunta Art. 10 con rappresentanze sindacaliHR / Consulente30 giorni
GPG > 10% non giustificatoPiano di riequilibrio retributivo con target e timelineHR Director90 giorni
GPG > 15% criticoNotifica OdV + piano emergenziale + report straordinarioOdV / Compliance15 giorni
Art. 5 non conformeAggiornare template offerte lavoro con range retributivoHR / Recruiting30 giorni
Art. 6 non conformeImplementare procedura informazione su richiesta dipendenteHR / Legal60 giorni
Art. 9 non conformeGenerare e pubblicare report GPG annualeHR / ConsulenteScadenza legale
Squilibrio M/F > 70/30Revisione politiche assunzione + piano diversitàHR Director90 giorni
API Endpoint per NC & Azioni (X-API-Key)
MetodoEndpointScopeDescrizione
GET /non-conformities read:compliance Lista NC aperte per l'azienda. Filtri: ?severity=critical,major&status=open
GET /corrective-actions read:compliance Lista azioni correttive. Filtri: ?status=open,in_progress&nc_id={id}
GET /compliance-gaps read:compliance Gap analysis: articoli UE 2023/970 non conformi con dettaglio requisiti mancanti.
Esempio risposta /non-conformities
// GET /api/services/non-conformities?severity=critical&status=open { "success": true, "data": [ { "id": "NC-TRPG-2025-001", "type": "gpg_threshold", "severity": "critical", "status": "open", "title": "GPG 12.3% in categoria Dirigenti - Obbligo Art. 10", "description": "Gender Pay Gap del 12.3% rilevato nella categoria Dirigenti D1. Supera la soglia critica del 10%. Richiede piano di riequilibrio e notifica OdV.", "trigger": { "metric": "gpg_base", "value": 12.3, "threshold": 10.0, "category": "Dirigenti D1", "period": "2025-01" }, "legal_refs": ["Art. 25-quinquies D.Lgs. 231/01", "Art. 10 UE 2023/970"], "corrective_actions": [ { "id": "CA-TRPG-2025-001", "action": "Avviare Valutazione Congiunta Art. 10", "responsible": "HR Director", "deadline": "2025-04-01", "status": "open" }, { "id": "CA-TRPG-2025-002", "action": "Piano riequilibrio retributivo con target e timeline", "responsible": "HR Director", "deadline": "2025-06-30", "status": "open" } ], "created_at": "2025-01-15T10:30:00Z" } ] }
Esempio risposta /compliance-gaps
// GET /api/services/compliance-gaps { "success": true, "data": { "overall_score": 62, "gaps": [ { "article": "Art. 6", "score": 40, "status": "non_compliant", "missing": [ "Procedura informazione retributiva su richiesta non implementata", "Template risposta ai dipendenti non disponibile" ], "nc_id": "NC-TRPG-2025-003", "suggested_actions": [ "Implementare procedura Art. 6 entro 60 giorni", "Formare HR su risposta richieste retributive" ] }, { "article": "Art. 10", "score": 30, "status": "non_compliant", "missing": [ "Valutazione congiunta non avviata per 2 categorie con GPG > 5%" ], "nc_id": "NC-TRPG-2025-004", "suggested_actions": [ "Avviare valutazione congiunta per Dirigenti e Quadri", "Contattare rappresentanze sindacali entro 15 giorni" ] } ] } }
Integrazione LG231: Flusso Operativo
// ── Nel monitoring-ms di LG231: importa NC e azioni da TRPG ── // 1. Leggi NC aperte $ncs = TrpgClient::get('/non-conformities', $apiKey, [ 'status' => 'open', 'severity' => 'critical,major' ]); foreach ($ncs['data'] as $nc) { // 2. Crea o aggiorna non conformita' in odv_non_conformities $this->upsertNonConformity([ 'source' => 'trpg_agile', 'source_ref' => $nc['id'], 'category' => 'Trasparenza retributiva', 'severity' => $nc['severity'], 'description' => $nc['title'], 'legal_refs' => implode(', ', $nc['legal_refs']), 'pillar' => 5, // OdV monitoraggio ]); // 3. Crea azioni correttive associate foreach ($nc['corrective_actions'] as $ca) { $this->upsertCorrectiveAction([ 'nc_source_ref' => $nc['id'], 'source_ref' => $ca['id'], 'description' => $ca['action'], 'responsible' => $ca['responsible'], 'deadline' => $ca['deadline'], 'status' => $ca['status'], ]); } } // 4. Leggi gap compliance per evidenze OdV $gaps = TrpgClient::get('/compliance-gaps', $apiKey); foreach ($gaps['data']['gaps'] as $gap) { // Aggiorna pillar 5 OdV con evidenze TRPG $this->updateOdvEvidence([ 'item_code' => 'TRPG-' . str_replace(' ', '', $gap['article']), 'compliance_score' => $gap['score'], 'status' => $gap['status'], 'gaps_detail' => $gap['missing'], ]); }
Bidirezionalità: quando LG231 chiude un'azione correttiva o aggiorna lo stato di una NC, può notificare TRPG tramite il webhook corrective_action.completed. TRPG aggiornerà automaticamente lo status della checklist compliance e ricalcolerà il punteggio.
Webhook Bidirezionali (LG231 → TRPG)
corrective_action.completed Azione correttiva completata in LG231 → TRPG aggiorna compliance score
nc.status_changed NC chiusa o declassata in LG231 → TRPG aggiorna alert status
odv.review_completed OdV ha completato revisione evidenze TRPG → TRPG registra audit trail
Checklist Cross-System
Per l'agente Claude di lg231: questo tab descrive esattamente cosa implementare in lg231 Agile per consumare TRPG come provider di dati di trasparenza retributiva e compliance UE 2023/970.
Perché integrare lg231 con TRPG
Dato TRPGRilevanza D.Lgs. 231/2001
GPG > 5% non giustificato (Art.10 UE 2023/970)Rischio presupposto Art. 25-quinquies — discriminazione retributiva di genere
Squilibrio M/F per categoria > 70/30Art. 25-duodecies — discriminazione nelle assunzioni, caporalato
Score compliance UE 2023/970Evidenza OdV (Pillar 5 monitoraggio) — prova adempimento direttiva
Metriche VSME B10/C5 (formazione, diversity)Pillar 6 MOG — programmi di formazione e aggiornamento
Alert GPG critico (> 15%)Segnalazione automatica OdV — potenziale whistleblowing Art. 25-quinquies
Valutazione congiunta avviata (Art.10)Attivita' OdV obbligatoria — vigilanza su processo valutazione
1. Configurare TRPG nel company-ms

File: services/company-ms/public/index.php — route PATCH /companies/{id}/provider-config

// Aggiungere a $allowed in provider-config: $allowed = [ 'certisource_pat', 'nis2_api_key', 'nis2_org_id', 'nis2_enabled', // ── Nuovo provider TRPG ── 'trpg_api_key', // chiave da TRPG → Settings → API Keys 'trpg_company_id', // ID azienda TRPG (intero) 'trpg_enabled', // bool: abilitare pull automatico 'trpg_last_sync', // ISO 8601 timestamp ultimo sync ];
2. TrpgClient (shared lib)
// File: shared/trpg-lib/src/TrpgClient.php class TrpgClient { const BASE_URL = 'https://trpg.agile.software/api/services'; public static function get(string $endpoint, string $apiKey, array $query = []): array { $url = self::BASE_URL . $endpoint; if ($query) $url .= '?' . http_build_query($query); $ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 10, CURLOPT_HTTPHEADER => [ 'X-API-Key: ' . $apiKey, 'Accept: application/json', 'X-Caller: lg231-agile/1.0', ], ]); $body = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return $code === 200 && $body ? ['success' => true, 'data' => json_decode($body, true)['data']] : ['success' => false, 'http_code' => $code]; } public static function isEnabled(array $meta): bool { return !empty($meta['trpg_enabled']) && !empty($meta['trpg_api_key']); } }
3. Sincronizzazione rischi GPG → risk-ms

Route: GET /risks/sync-from-trpg?company_id={id} nel risk-ms

// TrpgIntegrationService::syncGpgRisk() $meta = $this->getCompanyMeta($companyId); if (!TrpgClient::isEnabled($meta)) return; $gpg = TrpgClient::get('/gpg-summary', $meta['trpg_api_key']); if (!$gpg['success'] || $gpg['data']['gpg_base'] <= 5) return; $gpgValue = $gpg['data']['gpg_base']; $prob = match(true) { $gpgValue > 15 => 'very_high', $gpgValue > 10 => 'high', default => 'medium', }; // Upsert risk in 'risks' table: // area: 'hr' // reato_catalog_id: (Art. 25-quinquies — discriminazione di genere) // probability: $prob // description: "GPG {$gpgValue}% — Direttiva UE 2023/970 Art.10" // controls: "Compliance TRPG Agile — Valutazione Congiunta" // source: 'trpg_agile' // source_ref: $gpg['data']['period'] // Se GPG > 10% e requires_joint_assessment: crea whistleblowing_report if ($gpgValue > 10 && $gpg['data']['requires_joint_assessment']) { // category: 'Discriminazione retributiva di genere' // severity: $gpgValue > 15 ? 'critical' : 'high' // reported_by: 'sistema_trpg_agile' // subject: "GPG {$gpgValue}% — Richiede Valutazione Congiunta Art.10" }
4. Evidenze OdV → monitoring-ms

Route: POST /monitoring/import-trpg-evidence?company_id={id} nel monitoring-ms

// TrpgEvidenceService::importComplianceEvidence() $score = TrpgClient::get('/compliance-score', $meta['trpg_api_key']); if (!$score['success']) return; $d = $score['data']; // Crea odv_checklist_items: // pillar_number: 5 (OdV — monitoraggio) // item_code: 'TRPG-UE2023-970' // item_description: "Conformita' Direttiva UE 2023/970 — Score: {$d['overall_score']}%" // compliance_status: $d['overall_score'] >= 70 ? 'completed' : 'in_progress' // evidence_provided: "Report TRPG del {$d['assessment_date']}" // source: 'trpg_agile' // VSME → Pillar 6 (Formazione) $vsme = TrpgClient::get('/vsme-metrics', $meta['trpg_api_key'], ['codes' => 'B10,C5']); if ($vsme['success']) { // Aggiorna mog_pillars WHERE pillar_number=6 // data.trpg_vsme_sync = { B10: ..., C5: ..., synced_at: now } }
5. Widget TRPG nella company view
// Renderizza nel company detail del frontend lg231: // ┌───────────────────────────────────────────┐ // │ TRPG Agile — Trasparenza Retributiva │ // │ GPG: 8.2% [!] Alto │ // │ Compliance UE 2023/970: 72% │ // │ Dipendenti: 150 (62F / 88M) │ // │ Alert aperti: 3 │ // │ [Importa Rischi] [Importa Evidenze] │ // │ [Apri TRPG Agile] │ // └───────────────────────────────────────────┘ $apiKey = $meta['trpg_api_key'] ?? null; if ($apiKey && !empty($meta['trpg_enabled'])) { $gpg = TrpgClient::get('/gpg-summary', $apiKey); $score = TrpgClient::get('/compliance-score', $apiKey); // Mostrare gauge GPG + badge status + score compliance // Link: https://trpg.agile.software/ }
Checklist implementazione lg231
Nota CORS: tutte le chiamate a TRPG devono avvenire server-to-server (PHP cURL), non da browser. TRPG non accetta origini lg231 in CORS per sicurezza delle API key.
TRPG invia notifiche push su eventi tramite webhook HTTPS firmati HMAC-SHA256. Il sistema esterno riceve la notifica in tempo reale senza polling.
Eventi disponibili
gpg.recalculated GPG ricalcolato per un periodo (variazione > 1%) → aggiorna risk HR
alert.created_critical Nuovo alert GPG critico (> 15%) creato → whistleblowing OdV
assessment.joint_started Valutazione congiunta Art.10 avviata → attivita' OdV
compliance.score_changed Variazione score UE 2023/970 > 5% → aggiorna evidenze OdV
report.generated Nuovo report GPG/Compliance/VSME generato → documento OdV
Payload webhook
// Headers inviati da TRPG: X-TRPG-Event: gpg.recalculated X-TRPG-Signature: sha256=abc123... ← HMAC-SHA256 del body X-TRPG-Delivery: uuid-delivery-id Content-Type: application/json // Body esempio per gpg.recalculated: { "event": "gpg.recalculated", "company_id": 5, "period": "2025-01", "data": { "gpg_base": 8.2, "gpg_median": 6.1, "status": "high", "requires_joint_assessment": true }, "timestamp": "2026-03-07T10:00:00Z" }
Verifica firma HMAC (endpoint ricevente lg231)
$secret = $meta['trpg_webhook_secret']; $body = file_get_contents('php://input'); $expected = 'sha256=' . hash_hmac('sha256', $body, $secret); $received = $_SERVER['HTTP_X_TRPG_SIGNATURE'] ?? ''; if (!hash_equals($expected, $received)) { http_response_code(401); exit; } $event = $_SERVER['HTTP_X_TRPG_EVENT'] ?? ''; $payload = json_decode($body, true); switch ($event) { case 'gpg.recalculated': // sync risk HR... break; case 'alert.created_critical': // crea whistleblowing... break; case 'assessment.joint_started': // crea attivita' OdV... break; }
Creare la prima API Key
  1. Login su TRPG Agile con ruolo owner o editor
  2. Vai su Settings → API Keys
  3. Click "Nuova API Key" → nome descrittivo (es: "lg231 Integration") → scope: read:all
  4. Copia la chiave — formato trpg_XXXX... — visibile una sola volta
  5. Nota il Company ID dall'URL della dashboard TRPG
  6. In lg231: salva via PATCH /companies/{id}/provider-config con trpg_api_key e trpg_company_id
Test rapido (curl)
# 1. Verifica senza auth curl https://trpg.agile.software/api/services/status # 2. GPG Summary curl -H "X-API-Key: trpg_TUA_CHIAVE" \ -H "X-Caller: lg231-agile/1.0" \ "https://trpg.agile.software/api/services/gpg-summary?period=2025-01" # 3. Compliance score curl -H "X-API-Key: trpg_TUA_CHIAVE" \ -H "X-Caller: lg231-agile/1.0" \ "https://trpg.agile.software/api/services/compliance-score" # 5. Employee summary (solo aggregati) curl -H "X-API-Key: trpg_TUA_CHIAVE" \ -H "X-Caller: lg231-agile/1.0" \ "https://trpg.agile.software/api/services/employees-summary" # 4. Alert critici curl -H "X-API-Key: trpg_TUA_CHIAVE" \ -H "X-Caller: lg231-agile/1.0" \ "https://trpg.agile.software/api/services/alerts?severity=high,critical" # 5. Metriche VSME curl -H "X-API-Key: trpg_TUA_CHIAVE" \ -H "X-Caller: lg231-agile/1.0" \ "https://trpg.agile.software/api/services/vsme-metrics?codes=B08,B10,C5"
Riferimenti
App TRPG Agilehttps://trpg.agile.software
Gestione API KeyslicenseExt.html
Specifiche OpenAPIGET /api/services/openapi.json (prossimamente)
Amministratorecristiano.benassati@gmail.com
NormativaDirettiva UE 2023/970 — Trasparenza Retributiva e Gender Pay Gap