COGZCQ — Ricostruzione impegni¶
Sorgente: cbl/cogzcq.cbl | Program-ID: cogzcq | Tipo: Programma interattivo GUI a maschera (con modalita' batch automatica)
Menu: Lab.Odont. > Operativo > Impegni > Ricostruzione impegni
Scopo¶
Ricalcola da zero gli impegni degli operatori sulle commesse di laboratorio. Per ogni riga commessa aperta, il programma cancella l'impegno esistente e ne ricostruisce uno nuovo assegnando l'operatore, la data e le ore piu' opportune, appoggiandosi alla subroutine di gestione impegni COGZC5. Al termine produce un documento Word/XML (cogzcq.doc) con l'elenco delle commesse elaborate e degli eventuali errori (commesse che non rispettano i tempi di consegna, operatori non trovati).
Puo' essere selezionata una singola commessa (studio/paziente/progetto o numero commessa) oppure lavorare su tutte le commesse aperte. Se il parametro di lancio (wo-parametro) inizia con "A", il programma gira in modalita' automatica senza interfaccia (ricalcolo dal giorno successivo alla data di sistema), tipicamente da schedulatore.
Il programma e' attivo solo se il parametro di configurazione labod-impegni (gruppo abilita) vale "A"; in caso contrario esce subito.
File e tabelle¶
| File | Copybook | Accesso | Scopo |
|---|---|---|---|
| LODIMPDT | (via cogzcq.select/.prc) |
Lettura/riscrittura sequenziale (chia2) |
Impegni dettaglio: sorgente degli impegni da cancellare e ricostruire |
| LODCMTES | Lettura diretta e sequenziale | Testate commesse (stato impegno, piano, coefficiente) | |
| LODCMRIG | Lettura sequenziale (notmin) |
Righe commessa: azione, reparto, elementi, stato | |
| LODPRESC | lodpresc.k04 |
Lettura per chiave (chia4 per numero) |
Prescrizioni: stato, tipo lavoro, data/ora consegna, medico |
| LODPNRIG | Lettura diretta | Righe piano di fabbricazione (flag check "C", tipo "T"/"X") |
|
| CLOCMRIG | Lettura sequenziale (notmin) |
Righe commessa di consegna (data/ora consegna prevista) | |
| LODAZION | Lettura diretta | Anagrafica azioni (tempo standard/aggiunto, coefficiente tempo, reparto) | |
| LODAZOPE | Lettura diretta e sequenziale | Collegamento azione-operatore (assegnazione per azione) | |
| COGANAPP | Lettura diretta | Dati estesi anagrafica cliente (giorni in prova gg-in-prova = 99) |
|
| PRNTOPER | Lettura sequenziale (notmin) |
Operatori: candidati all'assegnazione dell'impegno | |
| COGTRANS | FD interno + cogtrans.k01/.k02 |
I-O temporaneo (indexed) | Transito impegni ricostruiti (chiave per commessa/riga e per data/ora) |
| COGTRANS2 | FD interno + cogtran2.k01/.k02 |
I-O temporaneo (indexed) | Transito per commessa: prima data/ora impegno, chiave per data |
I due file di transito COGTRANS e COGTRANS2 sono file indicizzati temporanei con record ridefiniti direttamente nel sorgente (SELECT + FD manuali). I nomi fisici sono costruiti in apri come ext-tmp-dir/$#cogzcq.{operatore} e ext-tmp-dir/#$cogzcq.{operatore}.
Programmi chiamati (CALL)¶
| Programma | Condizione | Scopo |
|---|---|---|
| COGZC5 | ripetutamente | Subroutine di gestione impegni: cancella ("x"), ricerca ("S"), forza ("F") e imposta stato ("I") l'impegno di una riga commessa; chiusura file con cogzc5-chiudi-files |
| COGS98W | accept campi chiave | Gestione del gruppo di campi prescrizione (studio/paziente/progetto/numero) sulla maschera |
| WORDMDL | stampa-dati |
Generazione documento Word da modello XML: apre (Apri-XML), aggiunge tag (Aggiungi-XML), chiude (Chiudi-XML), esegue (Esegui) con modello cogzcq.doc |
| DTPRG / PRGDT | vari | Conversione data ↔ progressivo per calcoli di scorrimento giorni |
| RNEWCONF | x99-confi |
Lettura dei 6 parametri di configurazione |
Copybook incluse¶
Working Storage¶
feurtab.fd, cogfiles.cpy, cogzcq.fd, cogzcq.select, cogzcq.wrk, k-personal.cpy, wgrave.cpy, wnscr.cpy, wopenf.cpy, wstato.cpy, cogazien.cpy, utils52.cpy, utilncnf.cpy, utilwordmdl.cpy, utilcogzcf.cpy, utilcogzc5.cpy, utils98.cpy
Linkage / Screen¶
wcont.cpy, wcont1.cpy, cogzcq-01.scr
Procedure Division¶
cogzcq.decla, grave.cpy, mmmask.cpy, opengen.cpy, stato.cpy, stato1.cpy, winmsg.cpy, cogzcq.prc, lodpresc.k04, lodimpdt.k02, cogtrans.k01/.k02, cogtran2.k01/.k02
Parametri di configurazione (RNEWCONF)¶
Caricati in x99-confi (gruppo "C" = gestore):
| Gruppo | Chiave | Variabile interna | Effetto |
|---|---|---|---|
labimp |
assegnazione-operatori |
tm-cfg-assegnazione-ope |
Modalita' assegnazione: "R" = per reparto/sottoreparto, "M" = per minuti/tempo standard azione, altro = per azione-operatore |
abilita |
labod-impegni |
tm-cfg-labod-impegni |
Deve valere "A" perche' il programma sia attivo |
labimp |
ore ritardo consentite |
tm-cfg-ore-ritardo |
Ore di ritardo tollerate (spostamento data/ora nel confronto con l'impegno precedente) |
labimp |
file-ricalcolo-impegno |
tm-cfg-file-ricalcolo |
Percorso di salvataggio del documento prodotto (con macro $data$ sostituita dalla data di sistema) |
labimp |
gg-lavoro-in-prova |
tm-cfg-gg-lav-in-prova |
Se = 99 forza la logica "lavoro in prova" (flag fl-prova-99) |
labimp |
tipo-ricalcolo-impegno |
tm-cfg-tipo-ricalcolo |
Se "D" esegue carica-ordine per riordinare le commesse per data consegna |
Logica di elaborazione¶
- Apertura (
apri): inizializza maschera e transiti, verifica abilitazione, imposta data (giorno successivo alla data di sistema). In modalita' automatica salta l'interfaccia e va diretto al calcolo. carica-trs: scorreLODIMPDT; per ogni impegno non chiuso di una commessa/riga valida (testata e riga esistenti, stato non"C", stato impegno non"F") copia i dati suCOGTRANS, aggiorna inCOGTRANS2la prima data/ora della commessa e cancella l'impegno originale viaCOGZC5(cancella-riga). Le righe chiuse (imd-stato = "C"o riga chiusa) vengono annullate anche nella relativa attivita' (COGZCF).carica-altri: aggiunge aCOGTRANS2le commesse aperte (stato impegno non"N"/"F", prescrizione non chiusa/evasa, tipo lavoro ≠"K") non ancora presenti, con data fittizia99999999.carica-ordine(solotipo-ricalcolo = "D"): riordina le commesse inCOGTRANS2per data/ora di consegna della prescrizione.tratta-trs2→tratta-commessa: per ogni commessa scorre le righe (LODCMRIG); per ogni riga da impegnare determina se provvisoria ("P"/LODPNRIGtip"X") o definitiva ("D"/tip"T"), cerca prima l'operatore che aveva l'impegno precedente (cerca-ope-prec) e in mancanza il miglior operatore disponibile (cerca-ope) secondo la modalita' di assegnazione, quindi forza l'impegno viaCOGZC5("F"). Se non trova un operatore ma l'impegno e' calcolabile (calcola-impegno> 0) registra l'errore "Non trovato operatore".ctrl-commessa/cerca-data-cons/cerca-impdt: verifica che gli impegni ricostruiti rispettino la data/ora di consegna; in caso contrario registra l'errore "Commessa non rispetta tempi" e imposta lo stato"I"sull'impegno viaCOGZC5.- Produzione documento: tutte le righe commessa e gli errori vengono scritti come tag XML (
scrivi-tag) e trasformati in documento Word tramiteWORDMDL.
Paragrafi chiave¶
| Paragrafo | Scopo |
|---|---|
apri |
Inizializzazione, pulsanti, nomi transiti, configurazione, abilitazione |
a-inizio-calcolo |
Ricrea (open output → i-o) i due file di transito e avvia stampa-dati |
stampa-dati |
Orchestrazione: carica-trs, carica-altri, carica-ordine, stampa-trs2, tratta-trs2, generazione documento |
carica-trs |
Copia gli impegni esistenti su transito e li cancella |
carica-altri |
Aggiunge le commesse aperte prive di impegno |
tratta-commessa |
Ricostruisce gli impegni riga per riga |
cerca-ope-prec |
Cerca l'operatore che aveva l'impegno precedente |
cerca-ope |
Cerca il miglior operatore disponibile (per reparto o per azione) |
sistema-ore |
Applica il ritardo consentito allo scorrimento data/ora |
calcola-impegno |
Calcola il tempo impegno dall'azione ("F" fisso, "U" unitario) — nota: se modificato verificare anche COGZC8 |
ctrl-commessa / cerca-impdt |
Verifica rispetto dei tempi di consegna |
x99-confi / sistema-nome-file |
Caricamento configurazione e risoluzione del nome file di salvataggio |
Note¶
- Il paragrafo
calcola-impegnoreca un commento esplicito: eventuali modifiche vanno replicate inCOGZC8(che ospita la stessa logica di calcolo). - La generazione del documento Word finale (
WORDMDLconEsegui) e' cablata alla personalizzazioneaz-personal = k-personal-lab-kronose viene eseguita solo in modalita' non automatica. - Il codice fa ampio uso di
PERFORM ... THRUeGO TO(stile legacy del programma originale del 2010): in caso di manutenzione prestare attenzione allo scope dei loop.