Registrar interacciones contra un Contacto o contra una Organizacion sin forzar a pasar por uno u otro.
restriccion: Algunas interacciones son con una persona especifica (una llamada a un contacto); otras son con la org entera (una reunion sin asistente nombrado). Las dos tienen que aparecer en el mismo timeline ordenado por fecha.
Interaction tiene contact_id Y organization_id nulleables, mas type (email/llamada/reunion/nota/evento). El query del timeline es un scope Eloquent que hace left-join a los dos y proyecta una fila unificada. created_by + updated_by los llena un observer auth-aware para que la auditoria no requiera escrituras extra.
class Contact extends Model
{
use HasFactory, SoftDeletes;
protected $fillable = [
'first_name', 'last_name', 'email', 'phone',
'position', 'organization_id',
'tags', 'custom_fields',
'status', 'source', 'created_by',
];
protected $casts = [
'tags' => 'array',
'custom_fields' => 'array',
'created_at' => 'datetime',
'updated_at' => 'datetime',
'deleted_at' => 'datetime',
];
}