+
    jC;              
         R t ^ RIHt ^ RIt^ RIHtHtHt ]P                  ! R]P                  4      ]P                  ! R]P                  4      ]P                  ! R]P                  ]P                  ,          4      .t]P                  ! R]P                  4      t]P                  ! R]P                  4      tR	 R
 ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltRRRRRRRRR ]P.                  /R! R" lltR# )#u  Şekli eksiklik tarayıcısının deterministik (LLM'siz) kuralları.

Her kural, başvuru metinlerini regex/string analiziyle inceler ve sıfır
veya daha fazla `Finding` döndürür. LLM gerektirmez — ücretsiz, anında ve
%100 tekrarlanabilir.

Kurallar TürkPatent Patent Başvuru Kılavuzu ve 6769 sayılı SMK
Yönetmeliği'ne dayanır. Kural kimlikleri (rule_id) kararlıdır; UI ve
testler bunlara güvenir.
)annotationsN)FindingJurisdictionSeverityu   ba[ğg]ı?ms[ıi]z\s+istemu   ba[ğg]ı?ml[ıi]\s+istemu@   ^\s*(y[öo]ntem|sistem|[üu]r[üu]n|aparat|kullan[ıi]m)\s+istemz^\s*(\d+)\s*[.)]\s+u%   [İIi]stem\s+\d+\s+(ila|ile|ve)\s+\d+c                    V ^8  d   QhRRRR/# )   textstrreturn )formats   "^/Users/zincirx/Documents/projelerim/patentyazar/backend-python/app/services/formality/rules.py__annotate__r   (   s     ; ; ; ;    c                ~    \         P                  ! RRT ;'       g    R4      P                  4       P                  4       # )uH   Metni karşılaştırma için sadeleştirir: küçük harf, tek boşluk.z\s+  )resubstriplower)r   s   &r   _normr   (   s-    66&#tzzr*00288::r   c                    V ^8  d   QhRRRR/# r   claimsr	   r
   list[Finding]r   )r   s   "r   r   r   1   s      S ] r   c                   . p\          F|  pTP                  T ;'       g    R4      pV'       g   K(  VP                  ^ 4      P                  4       pVP	                  \        R\        P                  RRRRV R2VRR	7      4        V# 	  V# )
u5   İstemler bölümünde alt başlık kullanılmamalı.r   zclaims.no_subheadingsistemleru'   İstemlerde alt başlık kullanılmışu   İstemler; bağımsız, bağımlı, yöntem veya sistem istemi gibi alt başlıklar altında gruplanamaz. İstemler 1'den başlayarak kesintisiz numaralandırılmalıdır."uv   " gibi alt başlıkları kaldırın; istem metinlerini olduğu gibi bırakıp yalnızca başlık satırlarını silin.3   TürkPatent Patent Başvuru Kılavuzu — İstemlerrule_idseveritysectiontitledetail
suggestionexcerptlegal_basis)_SUBHEADING_PATTERNSsearchgroupr   appendr   r   ERROR)r   findingspatmlines   &    r   check_claims_subheadingsr2   1   s     H#JJv||$1771:##%DOO3%^^&CL
 TF #0 0 ! U!( O3 $2 Or   c                    V ^8  d   QhRRRR/# r   r   )r   s   "r   r   r   P   s     2 23 2= 2r   c                \   \         P                  T ;'       g    R4       Uu. uF  p\        VP                  ^4      4      NK  	  ppV'       g"   \	        R\
        P                  RRRRRR7      .# . pV^ ,          ^8w  d;   VP                  \	        R	\
        P                  RR
RV^ ,           R2RRR7      4       \        W"R,          RR7       FU  w  rEWT^,           8w  g   K  VP                  \	        R\
        P                  RRRV RV RV^,            R2RRR7      4        V# 	  V# u upi )uA   İstemler 1, 2, 3 ... şeklinde kesintisiz numaralandırılmalı.r   zclaims.no_numbered_claimsr   u   Numaralı istem bulunamadıuZ   İstemler bölümünde '1.', '2.' biçiminde numaralandırılmış istem tespit edilemedi.u7   Her istemi sıra numarasıyla (1., 2., ...) başlatın.r   r!   r"   r#   r$   r%   r&   r(   zclaims.numbering_startu,   İstem numaralandırması 1'den başlamıyoru   İlk istem u$    numarasıyla başlıyor; 1 olmalı.u?   İstemleri 1'den başlayacak şekilde yeniden numaralandırın.:   NNF)strictzclaims.numbering_gapu'   İstem numaralandırmasında atlama var   İstem z'den sonra z
 geliyor; z
 beklenir.u6   İstemleri kesintisiz (1, 2, 3, ...) numaralandırın.)
_CLAIM_STARTfinditerintr+   r   r   WARNINGr,   r-   zip)r   r0   numsr.   prevcurs   &     r   check_claims_numberingrA   P   s=   %1%:%:6<<R%HI%HC
O%HDI3!))"3. UQ
 	
 !HAw!|0!"D$T!WI-QR\Q
	
 Bx6	(?OO2%^^&C!${3%z!8*J0  X U O# 7" Oa Js   #D)c                    V ^8  d   QhRRRR/# r   r   )r   s   "r   r   r      s      # - r   c                    \         P                  T ;'       g    R4      pV'       g   . # \        R\        P                  RRRVP                  ^ 4       R2RVP                  ^ 4      RR	7      .# )
uK   Çoklu bağımlı istemlerde 'İstem 1 ila 3' gibi biçimler kabul edilmez.r   zclaims.bad_multi_dependencyr   u'   Hatalı çoklu bağımlı istem ifadesir   uv   " biçimi kabul edilmez. Çoklu bağımlı istemler alternatif yolla gönderme yapmalıdır (örn. 'İstem 1 veya 2').uO   'ila', 'ile', 've' yerine 'veya' kullanın (örn. 'İstem 3 veya 4'teki gibi').u;   TürkPatent Patent Başvuru Kılavuzu — İstemler sf. 8-9r    )_BAD_MULTI_DEPr*   r   r   r<   r+   )r   r0   s   & r   check_claims_multi_dependencyrE      sr    fll+A	1%%;QWWQZL !- -
7 GGAJU	
 r   c                    V ^8  d   QhRRRR/# r   r   )r   s   "r   r   r      s     ) ) ) )r   c                   T ;'       g    RP                  4       '       g   . # \        \        P                  V 4      4      pV'       g   . # . p\	        V4       F  w  r4VP                  4       pV^,           \        V4      8  d   W^,           ,          P                  4       M
\        V 4      pWV P                  4       pVP                  R4      '       d   VRR MTp\        P                  ! RV4      p	V	'       g   K  VP                  \        R\        P                  RRVP                  ^4       R2R	R
RR7      4       K  	  V# )u  Her istem tek cümle olmalı; sonda yalnızca bir nokta bulunmalı.

Basit sezgisel: bir istem bloğunun içinde (sondaki nokta hariç) cümle
sonu noktası varsa uyarı verilir. Kısaltmalar (No., vb.) yanlış pozitif
üretebileceğinden bu kural WARNING seviyesindedir.
r   .Nz(?<!\d)\.(?:\s|$)zclaims.multi_sentencer   r8   u    birden fazla cümle içeriyoru   Her istem tek cümle olarak yazılmalı; nokta yalnızca istemin sonunda bir kez kullanılmalıdır. Gerekli yerde virgül veya noktalı virgül kullanın.ud   İstem içindeki cümle sonu noktalarını ';' ile değiştirip istemi tek cümleye dönüştürün.u,   TürkPatent Patent Başvuru Kılavuzu sf. 11r5   )r   listr9   r:   	enumerateendlenstartendswithr   r*   r,   r   r   r<   r+   )
r   startsr.   ir0   beginrL   bodycoreinners
   &         r   check_claims_single_sentencerV      s    LLb!!	,''/0F	 H&!'(1us6{':fUm!!#FC &&( MM#..tCRyD		.55OO3%--&#AGGAJ</MNC
L !O "6 Or   c               $    V ^8  d   QhRRRRRR/# )r   abstractr	   invention_titler
   r   r   )r   s   "r   r   r      s!      s S ] r   c           
         T;'       g    RP                  4       '       g   . # \        V 4      p\        V4      pV'       d	   W29   d   . # \        R\        P                  RRRRVP                  4        R2RR	7      .# )
u9   Özet başlığı altına buluş başlığı yazılmalı.r   zabstract.missing_titleozetu   Özette buluş başlığı yoku   Özet sayfasının başına 'ÖZET' ifadesinin altına, başvuru formu ve tarifnamedeki ile aynı buluş başlığı yazılmalıdır.u8   Özet metninin başına buluş başlığını ekleyin: "r   u6   TürkPatent Patent Başvuru Kılavuzu — Özet sf. 14r5   )r   r   r   r   r-   )rX   rY   norm_abs
norm_titles   &&  r   check_abstract_has_titler^      s    !!r((**	XH'Jj,	,^^2W$**,-R1 Q	
 r   c                    V ^8  d   QhRRRR/# )r   rX   r	   r
   r   r   )r   s   "r   r   r      s      C M r   c           
         \        \        P                  ! RT ;'       g    R4      4      pV^8:  d   . # \        R\        P
                  RRV R2RV R2R	V^,
           R
2RR7      .# )u4   Özet, yönetmelik gereği ~150 kelimeyi aşmamalı.z\S+r   zabstract.too_longr[   u   Özet çok uzun (z kelime)u4   Özet en fazla 150 kelime olmalıdır. Mevcut özet u    kelime içeriyor.u   Özeti yaklaşık u    kelime kısaltın.u   SMK Yönetmeliği — Özetr5   )rM   r   findallr   r   r<   )rX   wordss   & r   check_abstract_lengthrc      s|    

68>>r23E|	'%%%eWH5F'+- ,ECK=8KL5	
 r   c               (    V ^8  d   QhRRRRRRRR/# )r   descriptionr	   r   rX   r
   r   r   )r   s   "r   r   r     s,      !-0r   c                p   . pRV R3RVR3RVR3.pV F  w  rVpT;'       g    RP                  4       '       g   K(  \        V4      R,          pVP                  4       V9  g   KQ  VP                  \	        V R	2\
        P                  VR
V R2VP                  4        RV R2RV R2RR7      4       K  	  V# )u5   Başvuru unsurları doğru başlıklarla başlamalı.	tarifnameu
   TARİFNAMEr   u	   İSTEMLERr[   u   ÖZETr   :Nx   Nz.missing_heading'u   ' başlığı görünmüyorz	 unsuru 'u!   ' başlığıyla başlamalıdır.u   Metnin en başına 'u   ' başlığını ekleyin.%   TürkPatent Patent Başvuru Kılavuzur5   )r   r   r   r,   r   r   r<   
capitalize)	re   r   rX   r.   checksr#   r   expectedheads	   &&&      r   check_section_headingsro     s     !H	k<0	V[)	7#F
 $*x

!!##T{4 >>4'OO&i'78%--#hZ'BC"--/0	( D+ + "6hZ?XY G $*& Or   c               (    V ^8  d   QhRRRRRRRR/# )r   rY   r	   re   rX   r
   r   r   )r   s   "r   r   r   #  s,      '*69r   c                   T ;'       g    RP                  4       '       g   . # . p\        V 4      pRV3RV33 F  w  rVT;'       g    RP                  4       '       g   K'  V\        V4      9  g   K9  VP                  \        V R2\        P
                  VRV R2RVP                  4        RV P                  4        R	2R
R7      4       K  	  V# )u6   Buluş başlığı tarifname ve özette aynı olmalı.r   rg   r[   z.title_mismatchu   Buluş başlığı u    içinde bulunamadıuS   Buluş başlığı; başvuru formu, tarifname ve özette birebir aynı olmalıdır.u"    içindeki buluş başlığını "u   " ile eşleştirin.rj   r5   )r   r   r,   r   r   INFOrk   )rY   re   rX   r.   r]   r#   r   s   &&&    r   check_title_consistencyrs   #  s     !!r((**	 H'J&4vx6HI

!!##U4[(OO&i7%]]#/y8LM5 #--/0 1,22455IK !H	 J* Or   re   r   r   rX   rY   jurisdictionc               0    V ^8  d   QhRRRRRRRRRRRR	/# )
r   re   r	   r   rX   rY   rt   r   r
   r   r   )r   s   "r   r   r   G  sF     0 00 0 	0
 0 0 0r   c                   . pV\        V4      ,          pV\        V4      ,          pV\        V4      ,          pV\        V4      ,          pV\        P
                  8X  dM   V\        V4      ,          pV\        W#4      ,          pV\        WV4      ,          pV\        W0V4      ,          pV# V\        P                  8X  d   ^ RIHp WV! WVR7      ,          pV# V\        P                  8X  d   ^ RIHp WW! WVR7      ,          pV# )u  Deterministik kuralları çalıştırır ve bulguları birleştirir.

Ofise (jurisdiction) göre kural seti seçilir:
- Ortak kurallar (istem numaralandırma, çoklu bağımlılık, tek cümle,
  özet uzunluğu) her ofiste geçerlidir.
- TR-özel kurallar (Türkçe bölüm başlıkları, özette buluş başlığı,
  başlık tutarlılığı) yalnızca TürkPatent başvurularında çalışır.
- EP/US-özel kurallar ilgili modüllerden gelir (epo.py, uspto.py).
)check_epo_rules)re   r   rX   )check_uspto_rules)r2   rA   rE   rV   r   TRrc   r^   ro   rs   EPapp.services.formality.eporw   USapp.services.formality.usptorx   )re   r   rX   rY   rt   r.   rw   rx   s   $$$$$   r   run_deterministic_checksr~   G  s   " !H (00H&v..H-f55H,V44H |&)(33,XGG*;II+O(SS O 
	(>O#X
 	
 O 
	(B%#X
 	
 Or   )__doc__
__future__r   r   app.services.formality.modelsr   r   r   compile
IGNORECASE	MULTILINEr)   r9   rD   r   r2   rA   rE   rV   r^   rc   ro   rs   ry   r~   r   r   r   <module>r      s  	 # 	 I I JJ,bmm<JJ+R]];JJR}}r||+-  zz0",,?
 ,bmm
;>2j4)`62@H00 0 	0
 0 ".0 0r   