@php $lotEmbedding = (array) ($lot->embedding_input ?? []); $companyEmbedding = (array) ($primaryCompany->embedding_input ?? []); $lotNeedTokens = collect(array_merge( $lotEmbedding['need_summary'] ?? [], $lotEmbedding['services_deliverables'] ?? [], $lotEmbedding['skills_capabilities'] ?? [], $lotEmbedding['constraints_compliance'] ?? [] ))->filter()->map(fn ($t) => \Illuminate\Support\Str::lower($t))->unique(); $companyTokens = collect(array_merge( $companyEmbedding['core_activities'] ?? [], $companyEmbedding['services_deliverables'] ?? [], $companyEmbedding['skills_capabilities'] ?? [], $companyEmbedding['constraints_compliance'] ?? [], $companyEmbedding['company_profile'] ?? [] ))->filter()->map(fn ($t) => \Illuminate\Support\Str::lower($t))->unique(); $overlap = $lotNeedTokens->intersect($companyTokens)->take(3)->values()->all(); $expectations = array_filter(array_merge( data_get($lot->meta, 'expectations.service_scope', []), data_get($lot->meta, 'expectations.deliverables', []), data_get($lot->meta, 'expectations.operational_requirements', []) )); $needLines = $lotEmbedding['need_summary'] ?? []; $servicesLines = $lotEmbedding['services_deliverables'] ?? []; $skillsLines = $lotEmbedding['skills_capabilities'] ?? []; $constraintLines = $lotEmbedding['constraints_compliance'] ?? []; $companyKeywords = collect(array_merge( $companyEmbedding['core_activities'] ?? [], $companyEmbedding['services_deliverables'] ?? [], $companyEmbedding['skills_capabilities'] ?? [], $companyEmbedding['constraints_compliance'] ?? [], $primaryCompany->certifications ?? [] ))->filter()->unique()->take(10)->values()->all(); $deadlineText = $tender->deadline_at?->format('d/m') ?? '?'; $callScript = [ 'accroche' => sprintf('Bonjour %s, ici %s. Je vous appelle pour le lot %s de %s.', $primaryCompany->name ?? 'entreprise', config('app.name', 'FlowTender'), $lot->number ?? $lot->title, $tender->buyer_name ?? 'un acheteur public' ), 'pitch' => [ sprintf('Besoin : %s.', $needLines ? implode(', ', array_slice($needLines, 0, 3)) : ($lot->title ?? 'prestations spécialisées')), sprintf('Livrables attendus : %s.', $servicesLines ? implode(', ', array_slice($servicesLines, 0, 3)) : 'analyses et reporting'), sprintf('Contrainte principale : %s.', $constraintLines ? implode(', ', array_slice($constraintLines, 0, 2)) : 'respect des délais et normes en vigueur'), ], 'questions' => array_filter([ 'Êtes-vous disponibles sur la période annoncée ? (deadline '.$deadlineText.')', $skillsLines ? 'Disposez-vous en interne des compétences clés : '.implode(', ', array_slice($skillsLines, 0, 3)).' ?' : null, 'Souhaitez-vous recevoir le DCE complet par email ?' ]), 'next' => [ 'Partager le lien du lot et la date limite par email.', 'Confirmer l’interlocuteur et coordonner un envoi de documents.', 'Planifier un rappel si besoin pour vérifier la décision.', ], ]; @endphp
Lot / AO
{{ $tender->title }}
{{ $tender->buyer_name ?? 'Acheteur inconnu' }} · {{ $tender->region ?? 'Région ?' }}
Ce qui est attendu
Embedding – besoin
{{ $needLines ? implode(', ', array_slice($needLines, 0, 5)) : '—' }}
Services
{{ $servicesLines ? implode(', ', array_slice($servicesLines, 0, 5)) : '—' }}
Compétences
{{ $skillsLines ? implode(', ', array_slice($skillsLines, 0, 5)) : '—' }}
Contraintes
{{ $constraintLines ? implode(', ', array_slice($constraintLines, 0, 5)) : '—' }}
Entreprise cible
{{ $primaryCompany->city ?? 'Ville ?' }} · {{ $primaryCompany->regions[0] ?? $primaryCompany->country ?? '—' }}
Ce qu’ils font
Pourquoi eux ?
@if(!empty($overlap)) Points communs : {{ implode(', ', $overlap) }}. @else Alignement sur les compétences clés et la zone géographique. @endif
Script d’appel
Accroche
{{ $callScript['accroche'] }}
Pitch
Questions
Next step
Statut call center
{{ \App\Support\CallCenter::label($callStatus) }}
Changer d’entreprise
Top 5
{{ $company->name }}
{{ number_format($score->proximity_score, 1) }} / 100
@if(!empty($companyPhones))📞 {{ $companyPhones[0] }}
@elseif(!empty($companyEmails))✉️ {{ $companyEmails[0] }}
@endif