Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
사업자 매출 중 실제 내 손에 남는 금액과 저축 시기를 계산, 데이터는 브라우저에만 보관
Quanto dei tuoi incassi con partita IVA è davvero tuo, quanto mettere da parte e quando esce. Forfettario e ordinario. I dati restano nel tuo browser.
금융TypeScript · JavaScriptGitHub @gabrieleferretti32온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Il cruscotto economico, fiscale e finanziario del libero professionista italiano. La domanda a cui risponde in tre secondi, appena si apre: di questi soldi, quanti sono davvero miei? Stato: fasi 1-7 completate — tutte le schermate del prodotto sono in piedi. Resta la fase 8 di rifinitura.README 전문 보기 ↗
Il cruscotto economico, fiscale e finanziario del libero professionista italiano. La domanda a cui risponde in tre secondi, appena si apre: di questi soldi, quanti sono davvero miei?
Stato: fasi 1-7 completate — tutte le schermate del prodotto sono in piedi. Resta la fase 8 di rifinitura.
npm run dev # sviluppo su http://localhost:3000
npm test # suite del motore fiscale
npm run typecheck # TypeScript in modalità strict
npm run lint
npm run build # export statico in out/
npx serve out # serve la build statica
Local-first, nessun server. output: "export" produce un sito statico: non
esiste un runtime a cui i dati possano arrivare. I dati fiscali di una persona
vivono nel suo browser, con export e import JSON per backup e passaggio di
dispositivo. Il data layer sta dietro un'interfaccia StorageAdapter perché un
eventuale sync cloud sia un'aggiunta, non una riscrittura.
src/lib/fisco/ motore fiscale — modulo puro, niente React, niente Dexie
aritmetica.ts round2 e compagnia: perché Math.round non basta
parametri/2026.ts aliquote e soglie di legge, versionate per anno
tipi.ts modello dati e parametri
documenti.ts campi derivati di fatture e costi
motore.ts la catena di calcolo, dal reddito al saldo
iva.ts liquidazione mensile e trimestrale
confronto.ts simulatore forfettario contro ordinario
fixture.ts i due casi verificati a mano sull'Excel
src/lib/dati/ persistenza — tutto dietro l'interfaccia StorageAdapter
adapter.ts il contratto: depositi, lettura e scrittura complete
db.ts schema IndexedDB e indici
dexie-adapter.ts implementazione su IndexedDB
memoria-adapter.ts implementazione in memoria, per i test
backup.ts export e import JSON, con convalida riga per riga
demo.ts un anno dimostrativo di 46.050 € di fatturato
hooks.ts lo strato reattivo su useLiveQuery
src/lib/format.ts formattazione italiana: 1.234,56 €, mai €1,234.56
src/components/ui/ primitive ristilizzate sui token del progetto
src/components/fisco/ semaforo fiscale
calendario.ts festività italiane e slittamento delle scadenze
scadenze.ts lo scadenzario dell'anno, filtrato per regime
spiegazioni.ts il prospetto riga per riga, con la formula in italiano
src/lib/analisi/ aggregati, avvisi, cashflow e pianificazione, puri e testati
src/lib/periodo.ts mese, trimestre, anno, personalizzato — puro e testato
src/lib/stato/ preferenze di interfaccia, persistite in localStorage
src/components/guscio/ navigazione, selettore di periodo, toggle di regime
src/components/tabella/ modifica in linea, ordinamento, barra di ricerca
src/components/grafici/ i due grafici del cruscotto
src/lib/rotte.ts gli indirizzi del sito e dell'app, scritti in un posto solo
src/app/page.tsx la pagina di vendita, alla radice del dominio
src/app/app/ le schermate di lavoro, dentro il guscio, sotto /app
contenuti/ i testi legali pubblicati così come sono, uno per pagina
L'applicazione vive sotto /app perché la radice del dominio è la pagina di
vendita. I percorsi non si scrivono a mano: stanno in src/lib/rotte.ts, una
regola di eslint rifiuta le stringhe di percorso nel sorgente e
strumenti/verifica-link.mjs apre ogni pagina del sito costruito per
verificare che nessun link interno sia morto.
Ogni riga porta la formula applicata ai numeri di questa persona, in italiano:
«5.850,00 € × 26,07 %, fino al massimale di 122.295,00 €». Non è una nota
d'aiuto generica — serve a fidarsi del totale, o ad accorgersi che
un'impostazione è sbagliata. Vive in spiegazioni.ts, fuori dalla schermata,
perché servirà anche all'esportazione da mandare al commercialista.
Il semaforo fiscale scompone il denaro davvero entrato in cassa — compensi più IVA incassata — in netto, imposte, contributi e IVA da girare all'erario.
Gli avvisi portano un'azione: «vedi le fatture scadute» apre il registro già filtrato. Un avviso senza un'azione è solo un modo elegante di preoccupare qualcuno.
I colori dei grafici sono due passi dello stesso indaco, verificati per contrasto e per le tre forme di daltonismo. Nessun tooltip fluttuante: il valore del mese sotto il cursore compare in testa alla card, dove l'occhio è già, e le due serie si aggiornano insieme.
Le scadenze che cadono di sabato, di domenica o in un giorno festivo slittano al primo giorno lavorativo successivo — festività mobili comprese, il lunedì dell'Angelo si calcola. L'Excel lo diceva in nota senza applicarlo, e mostrava date che nella realtà non esistono.
Fatture e costi si filtrano sulla data del documento, non su quella di incasso o pagamento: il registro è un elenco di documenti emessi. Il calcolo delle imposte resta annuale e per cassa, perché scaglioni, massimali e soglie sono grandezze dell'anno — filtrare il prospetto a «marzo» produrrebbe un numero privo di significato.
Ogni cella modificabile salva subito e lascia per qualche secondo un toast con l'annullamento: il valore precedente è tenuto in memoria, non riletto dall'archivio. Le colonne che il regime non usa spariscono — l'IVA in forfettario, deducibilità e quota deducibile fra i costi — perché una colonna di zeri occupa spazio senza dire nulla.
Due implementazioni di StorageAdapter: IndexedDB per l'app, memoria per i
test. La stessa suite gira su entrambe, così l'interfaccia resta un contratto
verificato e non una decorazione — se non bastasse a scrivere l'adapter in
memoria, non basterebbe nemmeno a scrivere un adapter cloud.
L'adapter delega direttamente a Dexie, quindi useLiveQuery continua a
osservare le tabelle anche quando la lettura passa dall'interfaccia: la React
layer resta reattiva senza conoscere il database.
Il file di backup porta un marcatore di formato e la versione dello schema. In lettura è severo: una data nel formato sbagliato o un importo non numerico fermano l'import e vengono elencati, invece di lasciare l'archivio a metà. I campi calcolati che si trovassero nel file vengono scartati.
Funzioni pure da input a output: nessun new Date() nascosto, nessuna lettura
dal database. La data di riferimento è un parametro, così stessi ingressi
producono sempre lo stesso risultato.
Le aliquote non sono scritte nel codice: vivono in lib/fisco/parametri/<anno>.ts.
L'aggiornamento di gennaio è la modifica di un file solo.
Perché esiste aritmetica.ts. Math.round(4324.9 * 0.15 * 100) / 100 in
JavaScript vale 648,73; il foglio di calcolo e l'Agenzia delle Entrate dicono
648,74. Il prodotto in virgola mobile è 648.73499999999989996. Un centesimo
qui invalida l'intero prospetto, quindi ogni arrotondamento passa da round2.
Concordati prima di scrivere il codice, tutti verificati dai test:
contributi si deducono quelli; altrimenti si ricade sulla competenza, come
faceva l'Excel. Il prospetto dichiara quale delle due strade sta usando.Strumento gestionale di pianificazione e controllo: produce stime, non dichiarazioni fiscali. Non considera altri redditi che in regime ordinario concorrono a formare il reddito complessivo e possono spostare lo scaglione IRPEF. I numeri definitivi restano quelli del commercialista.
L'elenco completo di quello che il motore non calcola o semplifica sta in
APPROSSIMAZIONI.md, con la ragione di ogni scelta. In
fondo allo stesso file c'è la parte sull'interfaccia: quello che si sa essere
stretto sul piccolo e che si è deciso di lasciare così.
Quello che si sa e non si corregge — con la data, e con il criterio che decide
cosa si chiude prima del lancio — sta in APPUNTI.md.
I testi di Privacy, Termini e Cookie stanno in contenuti/:
si pubblicano così come sono, e aggiornarne uno è cambiare quel file e
nient'altro. Quello che i Termini promettono e il prodotto non fa ancora —
tutto ciò che riguarda l'acquisto, che non esiste — sta in
CHECKOUT.md.
Inter e Plus Jakarta Sans arrivano da npm e sono serviti dal progetto: nessuna
CDN, perché un font caricato da rete significa numeri che non si incolonnano
proprio quando servono. Per attivare Satoshi vedi public/fonts/LEGGIMI.md.