chore(kb): notițe youtube mai, fix email tools, update newsletter/anaf-monitor
Adaugă 4 notițe YouTube (llama.cpp, Mario Zechner, bonificatie impozit, AI scaffolding) + notă coaching grok. Actualizează index KB. Fix email_digest și email_forward. Update newsletter cercetasi + cron jobs. ANAF monitor hashes/snapshots/versions la zi. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -10,5 +10,5 @@
|
||||
"D205": "d3c20a7ae70f4c18bbb7add42af035e3746d323b2e6df37a4e31ed625ddb86d9",
|
||||
"D390": "4726938ed5858ec735caefd947a7d182b6dc64009478332c4feabdb36412a84e",
|
||||
"BILANT_2024": "fbb8d66c2e530d8798362992c6983e07e1250188228c758cb6da4cde4f955950",
|
||||
"BILANT_2025": "03fe3c9095345d8ab912bafe789ce69d5957a85d94df38ce03f0d0b11d4a809b"
|
||||
"BILANT_2025": "81a9b74ad2b6b302a507063673134caeab65555a8e9ed75a6da660a8ee764e98"
|
||||
}
|
||||
@@ -1,26 +1,11 @@
|
||||
S1002-S1003-S1004-S1005
|
||||
S1002-S1003-S1004-S1005
|
||||
S1010
|
||||
S1011
|
||||
S1014-S1015
|
||||
S1019
|
||||
S1020-S1022
|
||||
S1023-S1044
|
||||
S1024-S1043
|
||||
S1025
|
||||
S1026-S1077
|
||||
S1030
|
||||
S1039
|
||||
S1040-S1041
|
||||
S1042
|
||||
S1046
|
||||
S1047-S1049
|
||||
S1051-S1052-S1053-S1054
|
||||
S1056
|
||||
S1061
|
||||
S1070
|
||||
S1072
|
||||
S1079
|
||||
Tabel
|
||||
codificări
|
||||
tipuri de situaţii financiare şi raportări anuale
|
||||
@@ -29,25 +14,24 @@ Programe asistenţă
|
||||
Instrucţiuni/ Documentaţie
|
||||
PDF
|
||||
JAVA
|
||||
Atenție! Momentan se pot depune doar S1002,S1003 şi S1005.
|
||||
S1002-S1005
|
||||
Situaţii financiare anuale la
|
||||
31 decembrie 2025
|
||||
întocmite de către entităţile al căror exerciţiu financiar coincide cu anul calendaristic, prevăzute la pct. 1.1 din Anexa 1 la
|
||||
întocmite de către entităţile al căror exerciţiu financiar coincide cu anul calendaristic, prevăzute la pct. 1.1 din Anexa nr. 1 la
|
||||
OMF nr. 2036/23.12.2025
|
||||
privind principalele aspecte legate de întocmirea şi depunerea situaţiilor financiare anuale şi a raportărilor contabile anuale ale operatorilor economici la Agentia Nationala de Administrare Fiscala. Potrivit art. 185 din Legea societăţilor nr. 31/1990, republicată, cu modificările şi completările ulterioare, consiliul de administraţie, respectiv directoratul, este obligat să depună la ANAF numai în format electronic pe portalul www.e-guvernare.ro, având ataşată o semnătură electronică extinsă, situaţiile financiare anuale, raportul lor, raportul cenzorilor sau raportul auditorilor financiari, după caz. Formatul electronic al situaţiilor financiare anuale la 31 decembrie 2023, generat prin programele de asistenţă, constă într-un fişier PDF având ataşat un fişier xml (care conţine formularele cod 10, cod 20, cod 30 şi cod 40), la care trebuie ataşat şi un fişier cu extensia zip.
|
||||
Fişierul cu extensia zip va conţine prima pagină din situaţiile financiare anuale listată cu ajutorul programului de asistenţă elaborat de Ministerul Finanţelor, semnată, potrivit legii, precum şi documentele cerute de lege (de exemplu: note explicative la situaţiile financiare anuale, situaţia modificărilor capitalului propriu şi situaţia fluxurilor de numerar, după caz; raportul administratorilor; raportul de audit sau raportul comisiei de cenzori, după caz; propunerea de distribuire a profitului sau de acoperire a pierderii contabile; declaraţia scrisă a persoanelor prevăzute la art. 10 alin. (1) din legea contabilităţii, prin care îşi asumă răspunderea pentru întocmirea situaţiilor financiare anuale), aşa cum acestea sunt întocmite de entităţi, toate acestea fiind scanate, alb-negru, lizibil şi cu o rezoluţie care să permită încadrarea în limita a 9,5 MB a fişierului PDF la care este ataşat fişierul zip. Fişierele zip ataşate situaţiilor financiare anuale nu vor conţine parolă.
|
||||
privind principalele aspecte legate de întocmirea şi depunerea situaţiilor financiare anuale şi a raportărilor contabile anuale ale operatorilor economici la Agentia Nationala de Administrare Fiscala.
|
||||
Potrivit art. 185 din Legea societăţilor nr. 31/1990, republicată, cu modificările şi completările ulterioare, consiliul de administraţie, respectiv directoratul, este obligat să depună la ANAF, în format hârtie şi în format electronic sau numai în formă electronică pe portalul
|
||||
www.e-guvernare.ro
|
||||
, având ataşată o semnătură electronică extinsă, situaţiile financiare anuale, raportul lor, raportul cenzorilor sau raportul auditorilor financiari, după caz. Formatul electronic al situaţiilor financiare anuale la 31 decembrie 2023, generat prin programele de asistenţă, constă într-un fişier PDF având ataşat un fişier xml (care conţine formularele cod 10, cod 20, cod 30 şi cod 40), la care trebuie ataşat şi un fişier cu extensia zip. Fişierul cu extensia zip va conţine documentele cerute de lege (de exemplu: note explicative la situaţiile financiare anuale, situaţia modificărilor capitalului propriu şi situaţia fluxurilor de numerar, după caz; raportul administratorilor; raportul de audit sau raportul comisiei de cenzori, după caz; propunerea de distribuire a profitului sau de acoperire a pierderii contabile; declaraţia scrisă a persoanelor prevăzute la art. 10 alin. (1) din legea contabilităţii, prin care îşi asumă răspunderea pentru întocmirea situaţiilor financiare anuale) scanate alb-negru, lizibil, şi cu o rezoluţie care să permită încadrarea în limita a 10 MB a fişierului PDF la care este ataşat fişierul zip. Fişierul zip ataşat situaţiilor financiare anuale nu va conţine parolă.
|
||||
- publicat în data de
|
||||
28.01.2026
|
||||
soft A
|
||||
actualizat în data
|
||||
27.03.2026
|
||||
soft J - S1002
|
||||
soft J - S1003
|
||||
soft J - S1004
|
||||
soft J - S1005
|
||||
Schema XSD 1002
|
||||
Schema XSD 1003
|
||||
Schema XSD 1004
|
||||
Schema XSD 1005
|
||||
Structura
|
||||
*softul J se adresează doar contribuabililor care îşi generează fişierul xml din aplicaţiile informatice proprii
|
||||
@@ -40,16 +40,15 @@
|
||||
"soft_j_date": "16.02.2026"
|
||||
},
|
||||
"BILANT_2025": {
|
||||
"soft_a_url": "https://static.anaf.ro/static/10/Anaf/Declaratii_R/AplicatiiDec/bilant_SC_1225_XML_270326.pdf",
|
||||
"soft_a_date": "27.03.2026",
|
||||
"soft_j_S1002_url": "https://static.anaf.ro/static/10/Anaf/Declaratii_R/AplicatiiDec/S1002_20260128.zip",
|
||||
"soft_j_S1002_date": "28.01.2026",
|
||||
"soft_a_url": "https://static.anaf.ro/static/10/Anaf/Declaratii_R/AplicatiiDec/bilant_SC_1225_XML_110226.pdf",
|
||||
"soft_a_date": "11.02.2026",
|
||||
"soft_j_S1002_url": "https://static.anaf.ro/static/10/Anaf/Declaratii_R/AplicatiiDec/S1002_20260513.zip",
|
||||
"soft_j_S1002_date": "13.05.2026",
|
||||
"soft_j_S1004_url": "https://static.anaf.ro/static/10/Anaf/Declaratii_R/AplicatiiDec/S1004_20250204.zip",
|
||||
"soft_j_S1004_date": "04.02.2025",
|
||||
"soft_j_S1003_url": "https://static.anaf.ro/static/10/Anaf/Declaratii_R/AplicatiiDec/S1003_20260210.zip",
|
||||
"soft_j_S1003_date": "10.02.2026",
|
||||
"soft_j_S1004_url": "https://static.anaf.ro/static/10/Anaf/Declaratii_R/AplicatiiDec/S1004_20260224.zip",
|
||||
"soft_j_S1004_date": "24.02.2026",
|
||||
"soft_j_S1005_url": "https://static.anaf.ro/static/10/Anaf/Declaratii_R/AplicatiiDec/S1005_20260317.zip",
|
||||
"soft_j_S1005_date": "17.03.2026"
|
||||
"soft_j_S1005_url": "https://static.anaf.ro/static/10/Anaf/Declaratii_R/AplicatiiDec/S1005_202060203.zip"
|
||||
},
|
||||
"SIT_FIN_SEM_2025": {
|
||||
"soft_j_1012_url": "https://static.anaf.ro/static/10/Anaf/Declaratii_R/AplicatiiDec/S1012_20250723.zip",
|
||||
|
||||
@@ -28,6 +28,16 @@ from tools.email_process import (
|
||||
from src.config import Config
|
||||
|
||||
BRIDGE_URL = "http://127.0.0.1:8098"
|
||||
|
||||
|
||||
def clean_urls(text: str) -> str:
|
||||
"""Remove %0A and wrapped newlines from URLs in plain text emails."""
|
||||
def _clean_url(m):
|
||||
url = m.group(0)
|
||||
url = url.replace('%0A', '').replace('%0a', '')
|
||||
url = re.sub(r'\s+', '', url)
|
||||
return url.rstrip('.')
|
||||
return re.sub(r'https?://\S+', _clean_url, text)
|
||||
DRY_RUN = "--dry-run" in sys.argv
|
||||
|
||||
|
||||
@@ -100,6 +110,8 @@ def generate_summary(subject: str, from_full: str, date: str, body: str) -> str:
|
||||
display_from = extract_original_sender(subject, body, from_full)
|
||||
display_subject = re.sub(r'^(Fwd?|Fw)\s*[:\s]\s*', '', subject, flags=re.IGNORECASE).strip() or subject
|
||||
|
||||
body = clean_urls(body)
|
||||
|
||||
prompt = f"""Mai jos este conținutul unui email. Scrie un rezumat factual pentru WhatsApp.
|
||||
|
||||
EMAIL:
|
||||
@@ -116,7 +128,7 @@ Instrucțiuni:
|
||||
* Prima propoziție: cine a trimis mesajul original, ce, cui.
|
||||
* Ce conține mesajul — concret și direct. Omite politețuri și amabilități; include doar faptele.
|
||||
* Dacă există termene, date, locuri sau acțiuni cerute — menționează-le explicit.
|
||||
* Dacă există URL-uri relevante (articole, documente, formulare, linkuri de citit online, resurse), adaugă o secțiune LINKURI la final cu URL-urile complete, câte unul pe rând.
|
||||
* Dacă un item menționează un formular, document sau resursă cu link, include URL-ul direct după item, pe același rând sau pe rândul imediat următor — inline, nu secțiune separată la final. Copiază URL-urile COMPLET, fără trunchieri sau '...'.
|
||||
- Nu adăuga secțiuni goale sau care nu se aplică emailului.
|
||||
- Plain text, fără markdown. Fără emoji.
|
||||
- Răspunde DOAR cu rezumatul, nimic altceva."""
|
||||
|
||||
@@ -186,6 +186,7 @@ def fetch_unread_emails():
|
||||
att_data[fname] = payload
|
||||
|
||||
results.append({
|
||||
'id': eid.decode(),
|
||||
'subject': decode_mime_header(msg['Subject']),
|
||||
'from_full': from_addr,
|
||||
'date': msg['Date'],
|
||||
@@ -198,6 +199,21 @@ def fetch_unread_emails():
|
||||
return results
|
||||
|
||||
|
||||
def mark_as_seen(email_ids: list[str]) -> None:
|
||||
"""Marchează emailurile ca citite pe server IMAP."""
|
||||
if not email_ids:
|
||||
return
|
||||
try:
|
||||
mail = imaplib.IMAP4_SSL(IMAP_SERVER, IMAP_PORT)
|
||||
mail.login(IMAP_USER, IMAP_PASS)
|
||||
mail.select('INBOX')
|
||||
for eid in email_ids:
|
||||
mail.store(eid.encode(), '+FLAGS', '\\Seen')
|
||||
mail.logout()
|
||||
except Exception as e:
|
||||
print(f"[warn] Marcare Seen esuata: {e}", file=sys.stderr)
|
||||
|
||||
|
||||
def run_forward():
|
||||
print("Verific emailuri necitite...")
|
||||
emails = fetch_unread_emails()
|
||||
@@ -223,12 +239,14 @@ def run_forward():
|
||||
if em.get('attachment_data'):
|
||||
print(f"Atașamente: {list(em['attachment_data'].keys())}")
|
||||
else:
|
||||
wa_ok = True
|
||||
for part in parts:
|
||||
ok = send_whatsapp(owner_jid, part)
|
||||
if not ok:
|
||||
print(f"Trimitere esuata: {subject}")
|
||||
wa_ok = False
|
||||
break
|
||||
else:
|
||||
if wa_ok:
|
||||
print(f"Trimis pe WhatsApp ({len(parts)} mesaje): {subject}")
|
||||
|
||||
full_text = "\n".join(parts)
|
||||
@@ -245,6 +263,9 @@ def run_forward():
|
||||
else:
|
||||
print(f"Atașament eșuat: {fname}")
|
||||
|
||||
if wa_ok:
|
||||
mark_as_seen([em['id']])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
run_forward()
|
||||
|
||||
Reference in New Issue
Block a user