o
    M it!                     @   s^   d dl Z d dlZdd Zdd Zdd Zdd	 Zd
d Zdd Zdd Ze	dkr-e  dS dS )    Nc                 C   sN   | r| dkrdS |  dd} |  } tjdd| tjd} d|  } |  S )zAClean seller name by removing NBSP, extra spaces, and 'Under PMA'-      z\s*Under\s+PMA\s*)flags)replacestripresub
IGNORECASEjoinsplit)name r   >/var/www/html/minaions-tender/ai-engine/refine_gem_bid_data.pyclean_seller_name   s   r   c                 C   sH   i }| D ]}dD ]}||v r || r || dkr || ||<  nqq|S )z7Extract common offeredItems/itemCategories from sellers)offeredItemofferedItemsitemCategoriesr   r   )sellers_listcommon_itemssellerkeyr   r   r   extract_common_items   s   r   c                 C   sT   i }|   D ]!\}}||v rq|dkrq|dkr#t|}|r"|||< q|||< q|S )zClean individual seller datar   
sellerName)itemsr   )r   keys_to_removecleanedr   valuecleaned_namer   r   r   clean_seller_data    s   
r    c                 C   s   h d}i }|r
g } | D ]}t ||}|d}|r|||< q|D ]}t ||}|d}|r?||v r;|| | q!|||< q!| | }t|}	dd | D }
|
|	fS )z0Merge technical and financial evaluation sellers>   serialNomseCategoryr   r   r   participatedOntotalPriceNumericr   c                 S   s   g | ]	}| d r|qS )r   )get).0r   r   r   r   
<listcomp>`   s    z!merge_sellers.<locals>.<listcomp>)r    r%   updater   values)tech_sellersfin_sellersis_single_packetr   
seller_mapr   cleaned_sellerseller_nameall_sellersr   merged_sellersr   r   r   merge_sellers7   s,   



r2   c           	      C   s   | rd| vr| S |   }| d   }g }g }d|v r&d|d v r&|d d }d|v r6d|d v r6|d d }t|||\}}|sB|r^d|i|}d|v rZd|d v rZ|d d |d< ||d< |dd |dd ||d< |S )	z Process the detailedInfo sectionsectionstechnicalEvaluationsellersfinancialEvaluationqualifiedSellerssummary
evaluationN)copyr2   pop)	detailed_infor,   	processedr3   r*   r+   r1   r   evaluation_sectionr   r   r   process_detailed_infod   s.   r?   c                 C   sN  | d g d}h d}d}d}t dt| d  | d D ]}i }|d7 }|ddgd dk}| D ]i\}}	||v r<q3|d	kr[d
|v rO|d
|	d gd n|	d }
d|
 |d	< q3|dkr{|	d }d|v ru|d d }| d| d}|g||< q3|dkr|	||< d|d< q3|dkrt|	|||< q3|dvr|	||< q3|d | q|S )z9Process and clean the bids data according to requirementsmetadata)r@   bids>   b.b_created_byidb_typeb_cat_idb_status	is_rc_bid
b_bid_type
b_is_bunchb_bid_to_rab_eval_typeb_ra_to_bidra_b_statusb_is_inactiveb_buyer_statusb_is_custom_itemb_total_quantitybd_details_is_boqra_b_buyer_statusbd_details_new_boqfinal_end_date_sortfinal_start_date_sortba_official_details_minNameba_official_details_deptNamer   zTotal number of bids:rA      ba_is_single_packetb_idb_id_parentz+https://bidplus.gem.gov.in/showbidDocument/b_bid_numberb_bid_number_parentz
 (Parent: )bd_category_namer   b_scope_workdetailedInfo)r^   r\   )printlenr%   r   r?   append)dataprocessed_datar   cnt_1cnt_2bidprocessed_bidr,   r   r   bid_id
bid_numberparent_numberr   r   r   process_bids_data   sB   &
ro   c               
   C   s  zt dddd} t| }W d   n1 sw   Y  W n( ty,   td Y dS  tjyF } ztd|  W Y d}~dS d}~ww td t|}zit d	d
dd} tj|| ddd W d   n1 skw   Y  td td tdt|d  d d}|d D ]$}d|v rd|d v rd|d d v r|t|d d d 	dg 7 }qtd|  W dS  t
y } ztd|  W Y d}~dS d}~ww )z&Main function to process the bids dataz/content/gem_bids_complete.jsonrzutf-8)encodingNz,Error: sample_bids_data.json file not found!zError parsing JSON: zProcessing bids data...zprocessed_bids_data.jsonw   F)indentensure_asciiu+   ✅ Data processing completed successfully!u/   📄 Output saved to 'processed_bids_data.json'u   📊 Processed rA   z bidsr   rb   r3   r9   r5   u+   👥 Total unique sellers across all bids: zError saving processed data: )openjsonloadFileNotFoundErrorrc   JSONDecodeErrorro   dumprd   r%   	Exception)filerf   erg   total_sellersrj   r   r   r   main   sB    r   __main__)
rw   r	   r   r   r    r2   r?   ro   r   __name__r   r   r   r   <module>   s    -)@'
