COGZD1 — Preparazione commessa #2¶
Sorgente: cbl/cogzd1.cbl | Program-ID: cogzd1 | Tipo: Programma interattivo GUI complesso a due griglie (prestazioni + fasi), ~17.000 righe
Menu: Lab.Odont. > Operativo > Preparazione commessa #2
Scopo¶
E' il programma centrale di preparazione della commessa di laboratorio: attribuisce alla commessa un piano di fabbricazione personalizzato (tipo "TEMPORANEO") e genera i record commessa (LODCMTES/LODCMRIG) con il riferimento al piano da cui provengono le righe. E' costruito sulla base di COGZ20, ma richiede all'inizio il riferimento alla commessa/prescrizione e lavora su un piano temporaneo.
L'operatore parte da una prescrizione (studio/paziente/progetto), ricerca e associa uno o piu' piani di fabbricazione (PDF), e ottiene una lista di prestazioni; da queste il programma esplode le fasi (azioni) che compongono la commessa, ordinandole, aggregandole per gruppo azione, e calcolando materiali, reparti, tempi e consegne. La maschera presenta due griglie sincronizzate:
- Griglia prestazioni (
e-grid-prest): le prestazioni selezionate sulla commessa; - Griglia fasi (
e-grid-fasi): le fasi/azioni derivate, con reparto, materiali obbligatori, note, date impegno/rientro.
Al termine (F3 aggiorna) i dati vengono trasferiti dalle tabelle di transito interne alle tabelle definitive della commessa. Il programma gestisce inoltre blocco/sblocco commessa, riapertura, note (cliente, fase, interne), analisi rischi, fascicolo tecnico, archiviazione allegati, gestione impegni e invio email ai responsabili.
Fa uso di un file di configurazione .CNF denominato ODONTO.CNF e di numerose chiavi RNEWCONF.
Tabelle di transito interne¶
Il cuore dell'elaborazione avviene su tabelle di transito indicizzate, dichiarate manualmente (SELECT + FD) e mappate sulle routine di COGTRANS tramite COPY ... REPLACING:
| File di transito | Chiave / Contenuto | Scopo |
|---|---|---|
T-PRESTAZIONI (cogzd1-t-prestazioni.fd) |
mappato su verbi COGTRANS |
Prestazioni selezionate sulla commessa (alimenta la griglia prestazioni) |
| T-FASI | t-fas-chia1 (id) + chiavi ordinamento/ricerca per prestazione |
Fasi/azioni esplose dalle prestazioni (alimenta la griglia fasi); contiene sequenza, azione, reparto, materiali, date, note |
| T-PROPRIETA | t-ppt-chia1 (id prestazione + proprieta') |
Proprieta' selezionate per prestazione e materiale collegato |
| T-AZ-PREST | t-cpa-chia1 (prestazione + fase) |
Collegamento azioni ↔ prestazioni |
I nomi fisici sono costruiti in apri in ext-tmp-dir con schema #$cogzd1_fasi.{operatore}, #$cogzd1_prestazioni.{operatore}, #$cogzd1_proprieta.{operatore}, #$cogzd1_az_prest.{operatore}.
File e tabelle (archivi definitivi)¶
| File | Copybook | Accesso | Scopo |
|---|---|---|---|
| LODPRESC | lodpresc.k01-agg, lodpresc.k04 |
Lettura/scrittura | Prescrizione: dati anagrafici, consegna, stato commessa |
| LODCMTES | lodcmtes.k02 |
Lettura/scrittura/riscrittura | Testata commessa generata (piano, stato, blocco) |
| LODCMRIG | lodcmrig.k01-agg |
Lettura/scrittura | Righe commessa (una per fase/azione) |
| LODCMDET | lodcmdet.k01-agg |
Lettura/scrittura | Dettaglio righe commessa |
| LODCMAG2 | (via .prc) |
Lettura/scrittura/riscrittura | Dati aggiuntivi commessa |
| LODCMPRA | lodcmpra.k02 |
Lettura | Proprieta' commessa |
| LODPDFPR | lodpdfpr.k02 |
Lettura | Prestazioni del piano di fabbricazione |
| LODPFSTD | lodpfstd.k02 |
Lettura | Piani di fabbricazione standard |
| LODPNRIG | lodpnrig.k01-agg |
Lettura | Righe del piano di fabbricazione (fasi/azioni) |
| LODPNMAT | lodpnmat.k01-agg |
Lettura | Materiali del piano di fabbricazione |
| LODPREAZ | lodpreaz.k02 |
Lettura | Azioni della prestazione |
| LODPRMDT | lodprmdt.k02 |
Lettura | Materiali/dettaglio prestazione |
| LODDESCR | loddescr.k01-agg |
Lettura/scrittura | Descrizioni lavoro (da piano) |
| LODINFCC | lodinfcc.k02 |
Lettura | Informazioni |
| LODRAPNC | lodrapnc.k02 |
Lettura | Raccordi |
| LODIMPDT | lodimpdt.k02 |
Lettura | Impegni dettaglio |
LODTMDES (lodtmdes.fd/.cpy) |
lodtmdes.k01 |
I-O temporaneo | Transito descrizioni (temp per operatore) |
LODTMMAT (lodtmmat.fd/.cpy, is external) |
lodtmmat.k01 |
I-O temporaneo | Transito materiali (temp per operatore) |
| COGMERCI | Lettura | Anagrafica merci | |
| COGANRAG | Lettura | Raggruppamento articoli | |
| COGGEANA | Lettura | Anagrafica clienti | |
| PRNTOPER | Lettura | Operatori (reparto operatore corrente) |
Programmi chiamati (CALL)¶
Data la complessita', COGZD1 orchestra un'ampia catena di sottoprogrammi del modulo laboratorio:
| Programma | Scopo |
|---|---|
| COGS98W | Gestione campi prescrizione (studio/paziente/progetto) |
| WINZ04 / WINZ07 / WINZ22 | Finestre di ricerca piani (wz04), ricerca (wz07), ricerca prestazioni (wz22) |
| COGZD1A | Costruzione tag/etichetta note per cliente/pdf/azione |
| COGZC5 / COGZC8 | Subroutine gestione impegni |
| COGZCF / COGZCH / COGZCN | Subroutine di supporto commessa/fasi/note |
| COGZDC / COGZDEW | Subroutine di dettaglio/gestione |
| COGZSA | Subroutine supporto |
| COGZ13 / COGZ25 / COGZ30 / COGZ31 / COGZ39 / COGZ45 / COGZ48 / COGZ50 / COGZ51 / COGZ60 / COGZ61 / COGZ85 / COGZ88 / COGZ89 / COGZ93 | Catena di funzioni del modulo laboratorio (prescrizione, avanzamento, note, stato commessa, stampe, ecc.) |
| COGZA6 / COGZB6 / COGZS5 / COGZS7 | Subroutine di supporto commessa/numerazione |
| COGU06 / COGU10W | Subroutine di utilita' (divisa/importi) |
| COGS62 / COGS94W | Subroutine di supporto |
| WIN036 | Finestra ausiliaria |
| POSTA / DIALOGS | Invio email ai responsabili; dialog di scelta |
| GRIDADMN | Gestione/personalizzazione delle due griglie |
| RNEWCONF | Lettura configurazione (chiamato piu' volte: x99-confi, x99-confi-indice, x99-confi-operatore) |
| W$KEYBUF | Gestione buffer tastiera (utility runtime) |
Copybook incluse (principali)¶
Working Storage¶
feurtab.fd, cogfiles.cpy, cogzd1.fd, cogzd1.select, lodtmdes.fd, lodtmmat.fd, cogzd1-t-prestazioni.fd/.cpy, cogzd1.wrk, k-personal.cpy, costanti-labod.cpy, wgrave.cpy, wnscr.cpy, wopenf.cpy, wstato.cpy, cogazien.cpy, acucobol.def, utildlg.cpy, wgrid.cpy, utilgdad.cpy, utilncnf.cpy, utilzde.cpy, utils52.cpy, utils62.cpy, utils68.cpy, utils93.cpy, utils94.cpy, utils98.cpy, utilu06.cpy, utilu20.cpy, utilw36.cpy, utilw80.cpy, utilwz03/04/07/22.cpy, utilz25/30/31/39/93/60.cpy, utilza6.cpy, utilzc1.cpy, utilzs5.cpy, utilzs7.cpy, utilu10.cpy, utilpost.cpy, utilmymail.cpy, utilcogzc5/c8/ch/d1a/cf/cn.cpy, utilcogzsa.cpy, utilcogzdc.cpy, utilgesdebug.cpy
Linkage / Screen¶
wcont.cpy, utilz23/zd1/z45/z48/z50/z51/z61/f12/zb6/z88/z89/z85.cpy, wcont1.cpy, cogzd1-01.scr
Procedure Division¶
cogzd1.decla, grave.cpy, mmmask.cpy, opengen.cpy, stato.cpy, stato1.cpy, winmsg.cpy, cogzd1.prc, sendw80.cpy, sendwz03.cpy, sendwz07.cpy, gesdebug.cpy, chiavi secondarie lod*.k0*, e le remap cogtrans.k01-k06 per i quattro file di transito.
Parametri di configurazione (RNEWCONF)¶
COGZD1 legge oltre 30 chiavi (x99-confi, x99-confi-indice, x99-confi-operatore). Le principali:
| Gruppo | Chiave | Variabile interna | Effetto (sintesi) |
|---|---|---|---|
ODONTO |
GESTIONE-REPARTI |
tm-cfg-fl-rep |
Gestione reparti sulle fasi |
ODONTO |
ESCLUDI-MATERIALI-ALLERGICI |
tm-cfg-escludi |
Esclusione materiali allergici |
ODONTO |
SELEZIONE-MAT-PREST |
tm-cfg-mat-prest |
Selezione materiali per prestazione (influenza il nome del transito LODTMMAT) |
LABPREPARA |
DES-LAVORO-DA-PIANO |
tm-cfg-des-piano |
Descrizione lavoro derivata dal piano |
odonto |
azione-iniziale-automatica |
tm-cfg-azione-accett |
Azione di accettazione automatica |
ODONTO |
DOCUMENTO-ACCOMPAGNAMENTO |
tm-cfg-tip-doc |
Tipo documento di accompagnamento |
labprepara |
stampa-scheda-interna |
tm-cfg-scheda-interna |
Stampa scheda interna |
odonto |
modifica-commessa-con-documenti |
tm-cfg-mod-com-doc |
Modificabilita' commessa con documenti |
LABPREPARA |
RIAPERTURA-CON-DOCUMENTI / RIAPERTURA-CON-STATO |
tm-cfg-riapri-se-doc / tm-cfg-riapri-stato |
Regole di riapertura commessa |
LABPREPARA |
AZIONE-BLOCCO-COMMESSA |
tm-cfg-azione-blocco |
Azione che blocca la commessa |
abilita |
labod-impegni |
tm-cfg-labod-impegni |
Gestione impegni |
LABPREPARA |
FORZO-PREST-AUTOMATICA |
tm-cfg-forzo-prest-auto |
Forza prestazione automatica |
LABPREPARA |
MODO-RICERCA-PIANI |
tm-cfg-ricerca-piani |
Modalita' ricerca piani |
ODONTO |
AZIONE-CONTROLLO-QUALITA |
tm-cfg-azione-cq |
Azione di controllo qualita' |
LABPREPARA |
ELIMINA-PREST-EVASE |
tm-cfg-elimina-prest-evase |
Eliminazione prestazioni evase |
LABPREPARA |
N-CAR-X-AGGR-AZIONI-GRUPPO |
tm-cfg-n-car-x-aggr-azioni |
Caratteri per aggregazione azioni per gruppo |
LABPREPARA |
COMMESSA-FAST |
tm-cfg-commessa-fast |
Modalita' commessa "fast" |
ODONTO |
NUMERO-COMMESSA-AUTOMATICO |
tm-cfg-num-aut |
Numerazione automatica commessa |
ODONTO |
GESTIONE-MULTI-SEDE |
tm-cfg-multi-sede |
Multi-sede |
LABAVANZ |
AVANZAMENTO-WEB |
tm-cfg-avanzamento-web |
Avanzamento via web |
labpresc |
path-archiviazione-auto |
tm-cfg-path-archiviazione-auto |
Cartella archiviazione allegati |
odonto |
modifica-qta-su-prestazioni |
tm-cfg-modifica-qta-prest |
Modifica quantita' su prestazioni |
azienda |
email-resp-commerciale / email-resp-produzione |
— | Destinatari email di notifica |
(Elenco completo nel paragrafo x99-confi, indici 01-31 piu' chiavi condizionali per gesso/progetto/email/operatore-clinica.)
Logica di elaborazione¶
apri: inizializza gesdebug, costruisce i nomi dei quattro transiti e dei transitiLODTMDES/LODTMMAT, apre i file, definisce i numerosi pulsanti custom (F5 commessa, F7 togli/aggiungi, F6 rientro/gestione/blocca, F1 riapri/prestazione, F5 materiali, F9 note, S-F1 presc, S-F5 avanzamento, S-F7 fascicolo/allegati, S-F2 note interne, S-F8 gestione impegno, F5 analisi rischi), carica la configurazione e prepara le due griglie.a4: (ri)apre i transiti temporaneiLODTMMAT/LODTMDEScon controllo "funzione gia' in uso", ricava reparto operatore, divisa conto, azzera le griglie.- Accept campi chiave (
a-tm-cli,a-tm-cod-dsp,a-tm-rep,a-tm-des,a-tm-data-scadenza, ...): acquisizione prescrizione, tipo dispositivo, reparto, descrizione, scadenza. - Ricerca piani/prestazioni: se la commessa e' vuota, entra direttamente in ricerca PDF (
WINZ04) e prestazioni (WINZ22); le prestazioni scelte popolanoT-PRESTAZIONI. - Esplosione fasi (
a01-*,a02-prepara-aggiornamenti,a03-add-prest): per ogni prestazione esplode le azioni dal piano (LODPNRIG/LODPREAZ), le ordina, le aggrega per gruppo azione (secondoN-CAR-X-AGGR-AZIONI-GRUPPO), assegna reparto/materiali/tempi e popolaT-FASIeT-AZ-PREST. Include gestione automatica di azioni speciali (accettazione, gesso, progetto, controllo qualita'). - Gestione griglie (
a-grid-prest,a-grid-fasi,a-grid-propr): l'operatore modifica prestazioni/fasi/proprieta', note (cliente/fase/interne), materiali, blocca/sblocca (a12/a13). - Aggiornamento (F3): trasferisce i dati dai transiti alle tabelle definitive (
LODCMTES/LODCMRIG/LODCMDET/LODCMAG2/LODDESCR), scrive il piano temporaneo (w-tip-piano = "T"), aggiorna la prescrizione e, se configurato, invia le email di notifica ai responsabili.
Paragrafi chiave¶
| Paragrafo | Scopo |
|---|---|
apri |
Inizializzazione completa: transiti, pulsanti, configurazione, griglie |
a4 |
(Ri)apertura transiti LODTMMAT/LODTMDES, reset griglie |
a-tm-cli / a-tm-cod-dsp / a-tm-rep / a-tm-des / a-tm-data-scadenza |
Accept dei campi di testata commessa |
x-ricerca-pdf / x-ricerca-prestazioni |
Ricerca piani e prestazioni (WINZ04/WINZ22) |
a01-d-aggiorna-fasi-da-prest |
Esplosione/aggiornamento fasi a partire dalle prestazioni |
a02-prepara-aggiornamenti |
Preparazione degli aggiornamenti su commessa |
a03-add-prest |
Aggiunta di una prestazione alla commessa |
a-grid-prest / a-grid-fasi / a-grid-propr |
Cicli di gestione delle griglie |
a12-blocca-commessa / a13-sblocca-commessa |
Blocco/sblocco commessa (rwr LODCMTES/LODCMRIG) |
c3-aggiorna-note-cli / f3-aggiorna-note-fase |
Gestione note cliente / note fase |
x99-confi / x99-confi-indice / x99-confi-operatore |
Caricamento configurazione |
Note¶
- Problema noto — errore 93/47 sui file temporanei. I file temporanei (i quattro transiti
#$cogzd1_*,LODTMDEScon schema#$cogzd1.{operatore}eLODTMMATcon##cogzd1.{operatore}oLODTMMAT.{operatore}) sono nominati usando solo il codice operatore (wo-oper), senza PID di processo. Se lo stesso operatore ha piu' istanze del programma (o resti di sessioni precedenti) il nome del file temporaneo collide: l'open outputfallisce con errore 93 (lock sulodtmdesper nome non univoco) e innesca a catena errori 47 suLODTMMAT/COGTRANS. Il fix proposto e' rendere univoco il nome del file temporaneo aggiungendo il PID di processo (come gia' fatto per la famiglia COGV60, cfr.tran-v60) e/o verificare l'aperturai-oprima di forzare l'open output.LODTMMATe' dichiaratois external, quindi il nome deve restare coerente con gli altri programmi che lo condividono: valutare l'impatto prima di modificarlo. - Il programma e' molto grande (~17.000 righe) e usa estensivamente
PERFORM ... THRUeGO TO(stile legacy derivato da COGZ20): in manutenzione modificare un paragrafo alla volta e verificare lo scope dei loop e leCLOSE/OPENdei transiti. - Fa uso di
gesdebug(gesdebug-loadconf,gesdebug-apri-principale) per la diagnostica.