
    ;j              	          d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZmZmZ ddd	d	d	d	d	d
dZh dZddZddZddZefddZd Zedk(  r e        yy)    )annotationsN)Path)Iterable)load_all_projects)DB_PATHinit_schemasync_projectsg      ?皙?皙?g?industry_fitproblem_pressurecompany_fittechnical_fiteconomic_valuereachabilitysale_probabilityevidence_quality>      füriminzualsaufbeidasderdieeinmitundvoneinefueroderc                    t        j                  d| xs dj                               }|D ch c]  }|t        vs| c}S c c}w )Nu   [a-z0-9äöüß-]{3,} )refindalllowerSTOP)valuewordsws      lead_scoring_v2.pytokensr0      s:    JJ/%+21D1D1FGE.!A...s
   AAc                    t        |       t        |      }}|r|syt        ||z        }t        d|t        dt        t        |      t        |                  z  dz        S )N              $@   )setlenminmax)absasboverlaps        r/   overlap_scorer>      sU    VSVBR"r'lGtWs1c#b'3r7&;<<tCDD    c                8   t        | j                  dd            }t        dj                  |j                              }t	        ||      }dj                  | j                  d      xs d| j                  d      xs d| j                  d      xs d| j                  d      xs dg      }t	        t        |      t        |j
                              }t	        t        |      t        |j                              }d}| j                  d      r|d	z  }| j                  d
      r|d	z  }| j                  d      r|dz  }|j                  xs d}	d}
| j                  d      r|
dz  }
| j                  d      r|
d	z  }
| j                  d      r|
dz  }
d}| j                  d      r|d	z  }| j                  d      r|dz  }| j                  d      r|dz  }| j                  d      r|dz  }| j                  d      r|dz  }t        d|dz  |dz  z   |
dz  z   |dz  z         }||t        d|      |t        d|	      t        d|
      |t        d|      dt        fdt        D              }d|dd|dd|dd|
dd|dd }i t        |d!      |d"S )#Nindustryr'    company_description
pain_pointnoteskey_productsg       @g      @company_sizeg      @r2   emailwebsitephoneenrichment_sourcelinkedin_urlg      ?r3   g?g333333?r
   r   r   c              3  <   K   | ]  }|   t         |   z    y w)N)WEIGHTS).0kpartss     r/   	<genexpr>z score_contact.<locals>.<genexpr>Z   s     <qU1X
*<s   zBranchen-Fit z.1fz/10; Problemdruck z/10; technischer Fit z/10; Erreichbarkeit z/10; Evidenz z/10.   )
lead_score	rationale)r0   getjointarget_industriesr>   customer_problemdescriptionpotential_scorer7   sumrN   round)contactprojectindustry_wordstarget_wordsr   evidence_textr   r   r   r   r   r   r   rT   rU   rQ   s                  @r/   score_contactrc   %   s   GKK
B78N#((7#<#<=>L >LHH)*0bL!'RG"N#)r	 M %VM%:F7C[C[<\]!&"7@S@S9TUMK{{()s{{>"s{{:s,,3NL{{7{{9{{7{{()C{{< C{{9C{{&'C{{>"C4,"47G#7M"MP\_bPb"beux{e{"{}$,4-&dN3D,/,&67	E <G<<J
S));<LS;Q R(--A,sAS T#C(	. 
 QeP5Q#7iPPr?   c                t   t        |       t        |       t               }t        j                  |      }t        j
                  |_        |j                  d| f      j                         D cg c]  }t        |       }}d}|D ]  }|D ]  }t        ||      }	|j                  d|d   |j                  |	d   |	d   |	d   |	d   |	d	   |	d
   |	d   |	d   |	d   |	d   t        j                  d|j                  d      id      f       |dz  }  |j                          |j!                          |S c c}w )Nz/SELECT * FROM cold_contacts WHERE campaign_id=?r   a  
                INSERT OR REPLACE INTO lead_project_matches (
                  contact_id, project_id, industry_fit, problem_pressure,
                  company_fit, technical_fit, economic_value, reachability,
                  evidence_quality, sale_probability, lead_score, rationale,
                  evidence_json, status, human_gate, updated_at
                ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,'researched','pending',CURRENT_TIMESTAMP)
            idr   r   r   r   r   r   r   r   rT   rU   sourcerK   F)ensure_asciir4   )r   r	   r   sqlite3connectRowrow_factoryexecutefetchalldictrc   
project_idjsondumpsrV   commitclose)
campaign_iddb_pathprojectsconnrcontactswrittencpss
             r/   score_campaignr~   c   sO   ' "H??7#D{{D!%9K>"hjAQ H  G  	Aa#ALL  $q'8!<N:O- !O"4a8H6I.!1%7#8!<N:O,;XquuM`Ga<bqv1w	 qLG	" 	KKMJJLN/s   .D5c                     dd l } | j                  d      }|j                  dt        d       |j	                         }t        |j                        }t        d|        y )Nr   zLead Engine 2.0 scoring)rZ   z
--campaignT)typerequiredzscored_matches=)argparseArgumentParseradd_argumentint
parse_argsr~   campaignprint)r   parserargscounts       r/   mainr      sY    $$1J$KF
3>D4==)E	OE7
#$r?   __main__)r,   strreturnzset[str])r9   Iterable[str]r:   r   r   float)r^   rn   r   rn   )rt   r   ru   r   r   r   )
__future__r   rp   r(   rh   pathlibr   typingr   project_catalogr   	v2_schemar   r   r	   rN   r+   r0   r>   rc   r~   r   __name__ r?   r/   <module>r      s    "  	    - 9 9 	 p/E;Q| 6= @% zF r?   