1+ import { HttpHeaders } from '@angular/common/http' ;
2+
13import type { MedicationRequest } from '../../../../core/data-access/clinical/clinical.types' ;
24import type { ConceptLabels } from '../../../../core/data-access/terminology/terminology.types' ;
35import { prescriptionList , type SimulatedPrescription } from '../../../../core/mock/fixtures/clinic' ;
46import { record } from '../../../../core/mock/fixtures/concepts' ;
7+ import { PACIENTE } from '../../../../core/mock/fixtures/people' ;
8+ import { registrarClinica } from '../../../../core/mock/handlers/clinical.handlers' ;
9+ import { MockRouter , type MockMethod , type MockReply } from '../../../../core/mock/mock-router' ;
10+ import { buscarUsuario , type MockUser } from '../../../../core/mock/mock-session' ;
511import { isOrderableRow , orderablePrescriptionOf } from './orderable-prescription' ;
612
713/** Una fila del resumen clínico de la receta `enc-a`, con lo mínimo que se mira. */
@@ -125,7 +131,7 @@ describe('el simulador usa los códigos de estado de la API (FAR-03)', () => {
125131 medicationConceptId : rx . medicationConceptId ,
126132 statusConceptId : rx . statusConceptId ,
127133 createdAt : new Date ( rx . createdAt ) ,
128- validTo : new Date ( rx . validTo ) ,
134+ ... ( rx . validTo === null ? { } : { validTo : new Date ( rx . validTo ) } ) ,
129135 ...( rx . issuedAt === null ? { } : { issuedAt : new Date ( rx . issuedAt ) } ) ,
130136 ...( rx . encounterId === undefined ? { } : { encounterId : rx . encounterId } ) ,
131137 } ;
@@ -149,6 +155,39 @@ describe('el simulador usa los códigos de estado de la API (FAR-03)', () => {
149155 }
150156 } ) ;
151157
158+ it ( 'una receta continua creada y emitida en el simulador (sin validTo) se puede pedir' , ( ) => {
159+ const router = new MockRouter ( ) ;
160+ registrarClinica ( router ) ;
161+ const medica = buscarUsuario ( 'medica' ) ! ;
162+ const call = ( method : MockMethod , path : string , body : unknown ) : MockReply => {
163+ const match = router . match ( method , path ) ;
164+ if ( match === null ) throw new Error ( `No existe ${ method } ${ path } ` ) ;
165+ return match . handler ( {
166+ method,
167+ path,
168+ params : match . params ,
169+ query : new URLSearchParams ( ) ,
170+ body,
171+ headers : new HttpHeaders ( ) ,
172+ user : medica as MockUser ,
173+ } ) as MockReply ;
174+ } ;
175+
176+ const created = call ( 'POST' , '/clinical/medication-requests' , {
177+ patientProfileId : PACIENTE . id ,
178+ medicationConceptId : 'med-continua' ,
179+ indicationText : 'Tratamiento crónico' ,
180+ } ) ;
181+ const id = ( created . body as { id : string } ) . id ;
182+ call ( 'POST' , `/clinical/medication-requests/${ id } /sign` , { } ) ;
183+ call ( 'POST' , `/clinical/medication-requests/${ id } /issue` , { } ) ;
184+
185+ const issued = prescriptionList . get ( id ) ! ;
186+ const asRead = asRequest ( issued ) ;
187+ expect ( asRead . validTo ) . toBeUndefined ( ) ;
188+ expect ( isOrderableRow ( asRead , mockLabels , new Date ( ) ) ) . toBe ( true ) ;
189+ } ) ;
190+
152191 it ( 'el catálogo simulado ya no tiene los códigos propios del simulador' , ( ) => {
153192 for ( const code of [ 'RX-ACTIVE' , 'RX-DRAFT' , 'RX-COMPLETED' , 'RX-CANCELLED' ] ) {
154193 expect ( record . has ( code ) ) . toBe ( false ) ;
0 commit comments