Project: doctolib-doctolib · Branch: .invalid · Mode: ` · **Model:**claude-haiku-4-5-20251001`
Stats: 1 user messages, 43 tool calls, tools used: Glob, Bash, Grep, Read.
Conversation
Turn 1 — User
Search the following repos for NHR document mock data, test fixtures, and factory helpers:
~/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/— look for any*.mock.ts,*.fixture.ts,*.stories.tsx,*.test.tsxfiles that create NhrDocument objects~/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/— look for mock NhrDocument objects used in tests or storybook
For each mock, note:
- Which fields are present: status, visibility, authors (with role/organisation?), serviceInformation.startDate/endDate
- Whether totalCount is returned in searchDocuments mock responses
- Whether there's a dedicated NhrDocument builder or factory function
Report the exact file paths and relevant code snippets (not just file names).
Turn 1 — Assistant
I'll search both repositories for NHR document mock data, fixtures, and factory helpers.
Tools used:
Glob:~/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/**/*.mock.ts
Tools used:
Glob:~/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/**/*.fixture.ts
Tools used:
Glob:~/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/**/*.stories.tsx
Tools used:
Glob:~/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/**/*.test.tsx
Tools used:
Glob:~/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/**/*.mock.ts
Tools used:
Glob:~/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/**/*.fixture.ts
Tools used:
Glob:~/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/**/*.stories.tsx
Tools used:
Glob:~/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/**/*.test.tsx
Tool results:
→ result (ERROR): Ripgrep search timed out after 20 seconds. The search may have matched files but did not complete in time. Try searching a more specific path or pattern.
Tool results:
→ result (ERROR): Ripgrep search timed out after 20 seconds. The search may have matched files but did not complete in time. Try searching a more specific path or pattern.
Tool results:
→ result (ERROR): Ripgrep search timed out after 20 seconds. The search may have matched files but did not complete in time. Try searching a more specific path or pattern.
Tool results:
→ result (ERROR): Ripgrep search timed out after 20 seconds. The search may have matched files but did not complete in time. Try searching a more specific path or pattern.
Tool results:
→ result (ERROR): Ripgrep search timed out after 20 seconds. The search may have matched files but did not complete in time. Try searching a more specific path or pattern.
Tool results:
→ result (ERROR): Ripgrep search timed out after 20 seconds. The search may have matched files but did not complete in time. Try searching a more specific path or pattern.
Tool results:
→ result (ERROR): Ripgrep search timed out after 20 seconds. The search may have matched files but did not complete in time. Try searching a more specific path or pattern.
Tool results:
→ result (ERROR): Ripgrep search timed out after 20 seconds. The search may have matched files but did not complete in time. Try searching a more specific path or pattern.
The glob patterns timed out. Let me try with more specific, targeted searches using Bash and Grep instead.
Tools used:
Bash:find /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui -name "*.mock.ts" -o -name "*.fixture.ts" 2>/dev/null | head -20
Tools used:
Bash:find /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records -name "*.mock.ts" -o -name "*.fixture.ts" 2>/dev/null | head -20
Tool results:
→ result (ok): (Bash completed with no output)
Tool results:
→ result (ok): (Bash completed with no output)
Let me search for test and story files directly:
Tools used:
Bash:find /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui -type f \( -name "*.test.tsx" -o -name "*.test.ts" -o -name "*.stories.tsx" \) 2>/dev/null | head -30
Tools used:
Bash:find /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records -type f \( -name "*.test.tsx" -o -name "*.test.ts" -o -name "*.stories.tsx" \) 2>/dev/null | head -30
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/factories/filtersFactory.test.ts /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/business/adapters/DmpNhrAdapter.test.ts /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/hooks/useDmpNhr.test.ts /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/hooks/useNationalHealthRecords.test.ts /Us …(truncated, 132 more chars)
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/node_modules/@storybook/test/node_modules/@testing-library/jest-dom/types/tests/vitest/vitest-custom-expect-types.test.ts /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/node_modules/@storybook/test/node_modules/@testing-library/jest-dom/types/tests/vitest/vitest-types.test.ts /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/node …(truncated, 4585 more chars)
Good! Now let me search for mock data and NhrDocument creation patterns in these files:
Tools used:
Grep:NhrDocument|mockNhr|createNhr|nhrDocumentin/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src
Tool results:
→ result (ok): No files found
Tools used:
Grep:NhrDocument|mockNhr|createNhr|nhrDocumentin/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records
Tool results:
→ result (ok): Found 18 files packages/@doctolib/national-health-records/src/hooks/useSearchDocuments.ts packages/@doctolib/national-health-records/src/index.ts packages/@doctolib/national-health-records/src/business/builders/actionsBuilder.ts packages/@doctolib/national-health-records/src/variants/useNhrDocumentListVariant.ts packages/@doctolib/national-health-records/src/variants/types.ts packages/@doctolib/national-health-records/src/variants/dmp/useDmpDocumentListVariant.ts packages/@doctolib/national-heal …(truncated, 969 more chars)
Excellent! Found a mocks file. Now let me also search for more specific patterns and read the key mock files:
Tools used:
Bash:find /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src -type f -name "*mock*" -o -name "*fixture*" -o -name "*factory*" 2>/dev/null
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/test-helpers/fixtures /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/test-helpers/fixtures/mockData.test.ts /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/test-helpers/fixtures/mockData.ts [result-id: r4]
Tools used:
Bash:find /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src -type f -name "*mock*" -o -name "*fixture*" -o -name "*factory*" -o -name "*builder*" 2>/dev/null
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/business/builders
Perfect! Let me read the key mock files now:
Tools used:
Read:/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/mocks/nhrMockedDocuments.ts
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/test-helpers/fixtures/mockData.ts
Tool results:
→ result (ok): 1 import { nhrDocumentFixtureBuilder } from './nhrDocumentFixtureBuilder'
2 import { nhrPatientInfoFixtureBuilder } from './nhrPatientInfoFixtureBuilder'
3
4 export { nhrDocumentListColumns as mockColumns } from '../../components/NhrEntryPoint/nhrDocumentListColumns'
5
6 export const mockPatientInfo = nhrPatientInfoFixtureBuilder()
7
8 export const mockRows = [
9 nhrDocumentFixtureBuilder(),
10 nhrDocumentFixtureBuilder({
11 id: '2',
12 title: 'MRI Brain scan',
13 creationDate
…(truncated, 669 more chars)
Tool results:
→ result (ok): 1 import type { NhrDocument } from '@doctolib/tpf-national-health-records'
2
3 export const nhrMockedDocuments: NhrDocument[] = [
4 // ── Batch 1: Laboratory reports (6 docs) ──────────────────────────────────
5 {
6 id: 'mock-001',
7 title: 'SOPK hormone panel',
8 creationDate: '2025-01-13',
9 submissionDate: '2025-01-18',
10 status: 'ACTIVE',
11 visibility: 'Visible to all',
12 format: 'application/pdf',
13 serviceInformation: { startDate: '2025-01-10' },
14
…(truncated, 20713 more chars)
Tools used:
Read:/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/business/builders
Tool results:
→ result (ERROR): EISDIR: illegal operation on a directory, read '/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/business/builders'
Let me explore the builders directory and find the fixture builders:
Tools used:
Bash:ls -la /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/business/builders/
Tool results:
→ result (ok): drwxr-xr-x clertonra staff 96 B Wed Apr 8 09:10:52 2026 . drwxr-xr-x clertonra staff 160 B Wed Apr 8 09:10:52 2026 .. .rw-r--r-- clertonra staff 1.0 KB Wed Apr 8 09:10:52 2026 actionsBuilder.ts
Tools used:
Bash:ls -la /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/test-helpers/fixtures/
Tool results:
→ result (ok): drwxr-xr-x clertonra staff 352 B Tue Mar 17 14:34:16 2026 . drwxr-xr-x clertonra staff 128 B Mon Mar 16 16:11:58 2026 .. .rw-r--r-- clertonra staff 758 B Mon Mar 16 17:42:09 2026 createFixtureBuilder.test.ts .rw-r--r-- clertonra staff 198 B Mon Mar 16 16:11:58 2026 createFixtureBuilder.ts .rw-r--r-- clertonra staff 157 B Mon Mar 16 16:11:58 2026 index.ts .rw-r--r-- clertonra staff 4.2 KB Mon Mar 16 17:42:09 2026 mockData.test.ts .rw-r--r-- clertonra staff 1.1 KB Tue Mar 17 14:34:16 2026 moc …(truncated, 392 more chars)
Perfect! Now let me read all the fixture builders:
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/test-helpers/fixtures/nhrDocumentFixtureBuilder.ts
Tool results:
→ result (ok): 1 import type { NhrDocument } from '@doctolib/tpf-national-health-records'
2
3 import { createFixtureBuilder } from './createFixtureBuilder'
4
5 export const nhrDocumentFixtureBuilder = createFixtureBuilder<NhrDocument>({
6 id: '1',
7 title: 'SOPK test results',
8 creationDate: '2025-01-13',
9 submissionDate: '2025-01-18',
10 status: 'Current',
11 visibility: 'Visible to all',
12 format: 'application/pdf',
13 authors: [{ id: 'doc1', firstName: 'Mario', lastName: 'Casas', role:
…(truncated, 137 more chars)
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/test-helpers/fixtures/createFixtureBuilder.ts
Tool results:
→ result (ok): 1 export type CreateFixtureBuilder<Type> = (props?: Partial<Type>) => Type
2
3 export const createFixtureBuilder =
4 <T>(defaults: T): CreateFixtureBuilder<T> =>
5 (props) => ({ ...defaults, ...props })
6
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/test-helpers/fixtures/index.ts
Tools used:
Read:/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/mocks/nhrMockedColumns.ts
Tool results:
→ result (ok): 1 export * from './createFixtureBuilder' 2 export * from './mockData' 3 export * from './nhrDocumentFixtureBuilder' 4 export * from './nhrPatientInfoFixtureBuilder' 5
Tool results:
→ result (ok): 1 import type { ColumnConfig } from '@doctolib/tpf-national-health-records-ui'
2 import type { NhrDocument } from '@doctolib/tpf-national-health-records'
3
4 // Column headers are hardcoded in English for the mock. i18n wiring belongs in a follow-up.
5 // Renders are intentionally plain-text — styled cell components will replace them once
6 // the factory functions are available in the published @doctolib/tpf-national-health-records-ui.
7
8 export const buildMockedColumns = (): ColumnConfig[]
…(truncated, 1516 more chars)
Now let me search for test files that use these mocks and check for searchDocuments mock response patterns:
Tools used:
Grep:searchDocuments|totalCountin/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/hooks/useSearchDocuments.test.ts
Tool results:
→ result (ok): 23: jest.mocked(useNationalHealthRecords).mockReturnValue({ searchDocuments: mockSearchDocuments }) 43: it('does not call nhrOperations.searchDocuments', async () => { 77: it('does not call nhrOperations.searchDocuments', async () => { 105: it('calls nhrOperations.searchDocuments with patient information and mapped params', async () => { [result-id: r10]
Tools used:
Bash:ls -la /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/
Tool results:
→ result (ok): drwxr-xr-x clertonra staff 448 B Wed Apr 8 10:20:35 2026 . drwxr-xr-x clertonra staff 352 B Wed Apr 1 10:05:06 2026 .. drwxr-xr-x clertonra staff 192 B Wed Apr 1 10:05:06 2026 NhrDocumentCategoryCell drwxr-xr-x clertonra staff 160 B Wed Apr 1 10:05:06 2026 NhrDocumentCategoryFilter .rw-r--r-- clertonra staff 12 KB Wed Apr 8 10:20:35 2026 NhrDocumentList.stories.tsx .rw-r--r-- clertonra staff 5.8 KB Wed Apr 1 10:05:06 2026 NhrDocumentList.test.tsx .rw-r--r-- clertonra staff 2.5 KB Wed …(truncated, 600 more chars)
Let me read the test files and stories files to see how they use mocks:
Tools used:
Read:/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/hooks/useSearchDocuments.test.ts
Tool results:
→ result (ok): 1 import { renderHook } from '@testing-library/react' 2 import * as variationManagement from '@doctolib/variation_management' 3 import type { Patient } from 'monolith_DEPRECATED/types/doctor/api/Patient' 4 import type { NhrDocument, NhrDocumentSearchParams } from '@doctolib/tpf-national-health-records' 5 import { useNationalHealthRecords } from './useNationalHealthRecords' 6 import { nhrMockedDocuments } from '../mocks/nhrMockedDocuments' 7 import useSearchDocuments from './useSearchDocuments' 8 …(truncated, 6911 more chars)
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentList.stories.tsx
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentList.test.tsx
Tool results:
→ result (ok): 1 import { render, screen } from '@testing-library/react'
2 // eslint-disable-next-line import/no-extraneous-dependencies, @doctolib-tpf/no-undeclared-dependencies
3 import { userEvent } from '@testing-library/user-event'
4 import { describe, expect, it, vi } from 'vitest'
5
6 import type { ColumnConfig, FilterConfig, NhrPatientInfo } from '../../types'
7 import { NhrDocumentList } from './NhrDocumentList'
8
9 // Mock child components
10 vi.mock('../NhrDocumentListModal/NhrDocumentListHeader/N
…(truncated, 6100 more chars)
Tool results:
→ result (ok): 1 import { MonitorWaveformRegularIcon } from '@doctolib/design-system-icons/MonitorWaveformRegularIcon'
2 import type { NhrDocument } from '@doctolib/tpf-national-health-records'
3 import type { Meta, StoryObj } from '@storybook/react'
4
5 import { createMoreActionsAction } from '../../business/factories/actions/createMoreActionsAction'
6 import { createViewDocumentAction } from '../../business/factories/actions/createViewDocumentAction'
7 import { createNhrDocumentCategoryColumn } from '../../
…(truncated, 13813 more chars)
Now let me search for any additional builders or factory patterns, and check for totalCount in search responses:
Tools used:
Bash:grep -r "totalCount" /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src --include="*.ts" --include="*.tsx" 2>/dev/null
Tool results:
→ result (ok): (Bash completed with no output)
Tools used:
Bash:grep -r "totalCount" /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src --include="*.ts" --include="*.tsx" 2>/dev/null
Tool results:
→ result (ok): (Bash completed with no output)
Tools used:
Read:/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/business/builders/actionsBuilder.ts
Tool results:
→ result (ok): 1 import {
2 createMoreActionsAction as moreActionsActionFactory,
3 createViewDocumentAction as viewDocumentActionFactory,
4 type ActionConfig,
5 } from '@doctolib/tpf-national-health-records-ui'
6 import type { NhrDocument } from '@doctolib/tpf-national-health-records'
7
8 export type NhrActionsBuilder = {
9 createViewDocumentAction: (onDocumentSelected: (document: NhrDocument) => Promise<void>) => NhrActionsBuilder
10 createMoreActionsAction: (onDocumentSelected: (document: NhrDocum
…(truncated, 629 more chars)
Let me check the types and search responses more carefully:
Tools used:
Bash:find /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src -name "*.ts" -o -name "*.tsx" | xargs grep -l "searchDocuments\|SearchParams\|SearchResponse" 2>/dev/nu …(truncated, 13 more chars)
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/useDmpDocumentListVariant.ts /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/mappers/mapFiltersToSearchDocumentsParams.ts /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/types.ts /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/business/adapters/DmpNhrAdapter.ts …(truncated, 723 more chars)
Tools used:
Read:/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/hooks/useNationalHealthRecords.ts
Tool results:
→ result (ok): 1 import type { NhrDocumentSearchProps, NhrDocumentSearchResult } from '@doctolib/tpf-national-health-records'
2 import { useProductLineVariation, ProductLineKey } from '@doctolib/variation_management'
3 import type { Patient } from 'monolith_DEPRECATED/types/doctor/api/Patient'
4 import { useDmpNhr } from './useDmpNhr'
5
6 export type UseNhrOperations = {
7 searchDocuments: (props: NhrDocumentSearchProps) => Promise<NhrDocumentSearchResult>
8 }
9
10 export const useNationalHealthRecords = (
…(truncated, 615 more chars)
Let me search the types directly to see the response structure:
Tools used:
Bash:find /Users/USER/workspace -path "*/node_modules" -prune -o -type f -name "*.ts" -print | xargs grep -l "NhrDocumentSearchResult\|searchDocuments.*totalCount" 2>/dev/null | grep -v node_modules | …(truncated, 9 more chars)
Tools used:
Bash:grep -r "interface NhrDocumentSearchResult\|type NhrDocumentSearchResult" /Users/USER/workspace/doctolib --include="*.ts" --include="*.tsx" 2>/dev/null | grep -v node_modules | head -5
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records/dist/business/types/service.d.ts /Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records/dist/business/types/document.d.ts /Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records/dist/business/types/index.d.ts /Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records/dist/business/systems/dmp/services/dmp-nhr-service.d.ts /Users/USE …(truncated, 681 more chars)
Tool results:
→ result (ok): Command running in background with ID: bd7fmjm4e. Output is being written to: /private/tmp/claude-501/-Users-clertonra-workspace-doctolib-doctolib/7ac8eee6-fa9f-46da-b043-e8dd30c5445a/tasks/bd7fmjm4e.output
Let me read the type definitions:
Tools used:
Read:/Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records/src/business/types/service.ts
Tools used:
Read:/Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records/src/business/types/document.ts
Tool results:
→ result (ok): 1 import type { NhrDocumentSearchProps, NhrDocumentSearchResult } from '#business/types/document'
2
3 export type CountryCode = 'fr' | 'mock'
4
5 export type NhrService = {
6 searchDocuments(props: NhrDocumentSearchProps): Promise<NhrDocumentSearchResult>
7 }
8
9 export type NhrAdapter = {
10 searchDocuments(props: NhrDocumentSearchProps): Promise<NhrDocumentSearchResult>
11 }
12
[result-id: r19]
Tool results:
→ result (ok): 1 import type { NhrDocumentAuthor, NhrPatientInformation } from '#business/types/participant'
2
3 // General types ---
4 /* The services/procedures this document is associated with /
5 export type NhrServiceInformation = {
6 startDate?: string
7 endDate?: string
8 }
9
10 export type NhrDocumentClassification = {
11 codes: Code[]
12 }
13
14 export type Code = {
15 system: string
16 code: string
17 }
18
19 export type DateRange = {
20 upperLimit?: string
21 lowerLimit?: string
…(truncated, 1005 more chars)
Perfect! Now let me check for the authors type and look at one more test to see any additional mock patterns:
Tools used:
Bash:find /Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records/src -name "*participant*" -type f
Tool results:
→ result (ok): /Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records/src/business/types/participant.ts
Tools used:
Read:/Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records/src/business/types/participant.ts
Tool results:
→ result (ok): 1 / Profession of a participant. Ideally used to capture more information about healthcare professionals. */
2 export type NhrProfession = {
3 / Can include national identifiers , oids, etc /
4 identifiers?: Record<string, string>
5 / Optional description of the profession. E.g. HCP, MFA, etc /
6 description?: string
7 / The specialisation of the participant. E.g. cardiology, general medicine, elder care etc */
8 speciality?: string
9 }
10
11 / Geographical locator */
12
…(truncated, 1542 more chars)
Tools used:
Read:/Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/test-helpers/fixtures/nhrPatientInfoFixtureBuilder.ts
Tool results:
→ result (ok): 1 import type { NhrPatientInfo } from '../../types'
2 import { createFixtureBuilder } from './createFixtureBuilder'
3
4 export const nhrPatientInfoFixtureBuilder = createFixtureBuilder<NhrPatientInfo>({
5 fullName: 'Camille Devailly',
6 gender: 'female',
7 birthDate: '1990-06-15',
8 age: 34,
9 })
10
[result-id: r22]
Let me check one more test file to see complete usage patterns:
Tools used:
Read:/Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/hooks/useDmpNhr.test.ts
Tool results:
→ result (ok): 1 import { renderHook } from '@testing-library/react'
2 import { useDmpSetUp } from '@doctolib/dmp'
3 import { createNhrService } from '@doctolib/tpf-national-health-records'
4 import type { Patient } from 'monolith_DEPRECATED/types/doctor/api/Patient'
5 import { DmpNhrAdapter } from '../business/adapters/DmpNhrAdapter'
6 import { useDmpNhr } from './useDmpNhr'
7
8 jest.mock('@doctolib/dmp', () => ({
9 useDmpSetUp: jest.fn(),
10 DmpApiImpl: jest.fn().mockImplementation(() => ({})),
11 }))
1
…(truncated, 1824 more chars)
Perfect! Now I have all the information I need. Let me compile the findings:
Summary of NHR Document Mock Data and Factory Helpers
1. Repository: ~/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/
Primary Mock File
File: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/mocks/nhrMockedDocuments.ts
Key Details:
- Contains 40 comprehensive mock NhrDocument objects (nhrMockedDocuments array) covering 8 batches:
- Batch 1-4: Laboratory reports, Imaging, Consultation reports, Prescriptions (6 docs each)
- Batch 5-7: Discharge summaries, Vaccination certificates, Specialist reports (4-5 docs each)
- Batch 8: Edge cases with missing/empty fields (4 docs)
Fields Present:
- status: Full enum coverage including 'ACTIVE', 'MASKED', 'ARCHIVED', 'OBSOLETE', undefined, and compound states ('MASKED|ACTIVE')
- visibility: 'Visible to all', 'Restricted', 'Masked', undefined
- authors: Array of NhrDocumentAuthor with:
- id, firstName, lastName, role ('healthcare_professional' or 'patient')
- Optional nested profession (with speciality, description)
- Optional institution (with name)
- serviceInformation: With startDate and/or endDate (some records have both, some have only startDate, some undefined)
- Other fields: id, title, creationDate, submissionDate, format, classification, description, identifiers
totalCount in searchDocuments: No - the NhrDocumentSearchResult type is defined as { documents: NhrDocument[] } with NO totalCount field (file /Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records/src/business/types/document.ts)
Type Definitions
File: /Users/USER/workspace/doctolib/doctolib/.yalc/@doctolib/tpf-national-health-records/src/business/types/participant.ts
Shows NhrDocumentAuthor type with detailed fields:
- Required: id, firstName, lastName, role
- Optional: identifiers, profession, addresses, contacts, institution
Builder Pattern
File: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/business/builders/actionsBuilder.ts
Demonstrates a fluent builder pattern for NhrActions:
export const actionsBuilder: NhrActionsBuilder = createBuilder([])
.createViewDocumentAction(...)
.createMoreActionsAction(...)
.build()
Mocked Columns Helper
File: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/mocks/nhrMockedColumns.ts
Provides buildMockedColumns() function that renders:
- Document category from classification?.codes[0]?.code
- Document name from title
- Procedure date from serviceInformation?.startDate
- Share date from submissionDate
- Shared by from authors?.[0] with role-based rendering
Test File
File: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/hooks/useSearchDocuments.test.ts
- Uses
nhrMockedDocumentsdirectly when feature flag enabled - Mock searchDocuments response:
{ documents: mockDocuments }(NOT{ data, totalCount }) - Returns
{ data: nhrMockedDocuments }from hook wrapper
2. Repository: ~/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/
Fixture Builders
File: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/test-helpers/fixtures/nhrDocumentFixtureBuilder.ts
Defines nhrDocumentFixtureBuilder using a generic factory:
export const nhrDocumentFixtureBuilder = createFixtureBuilder<NhrDocument>({
id: '1',
title: 'SOPK test results',
creationDate: '2025-01-13',
submissionDate: '2025-01-18',
status: 'Current',
visibility: 'Visible to all',
format: 'application/pdf',
authors: [{ id: 'doc1', firstName: 'Mario', lastName: 'Casas', role: 'healthcare_professional' }],
classification: { codes: [{ system: 'LOINC', code: 'Laboratory report' }] },
})
Generic Fixture Factory
File: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/test-helpers/fixtures/createFixtureBuilder.ts
Provides reusable builder utility:
export type CreateFixtureBuilder<Type> = (props?: Partial<Type>) => Type
export const createFixtureBuilder = <T>(defaults: T): CreateFixtureBuilder<T> =>
(props) => ({ ...defaults, ...props })
Mock Data Collection
File: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/test-helpers/fixtures/mockData.ts
Exports:
- mockPatientInfo: Created via nhrPatientInfoFixtureBuilder()
- mockRows: Array of 3 NhrDocument objects created via builder with overrides
- mockColumns: Alias to component's nhrDocumentListColumns
Patient Fixture Builder
File: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/test-helpers/fixtures/nhrPatientInfoFixtureBuilder.ts
export const nhrPatientInfoFixtureBuilder = createFixtureBuilder<NhrPatientInfo>({
fullName: 'Camille Devailly',
gender: 'female',
birthDate: '1990-06-15',
age: 34,
})
Storybook Stories
File: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentList.stories.tsx
Contains multiple story variants with inline NhrDocument arrays demonstrating: - Various status values ('Current', 'ACTIVE', 'MASKED|ARCHIVED') - Visibility states ('Visible to all', 'Masked', 'Restricted', undefined) - Authors with different roles (healthcare_professional, patient) - serviceInformation with startDate and sometimes endDate - Complete author details in edge case story
Key Findings
-
No totalCount in searchDocuments response: The
NhrDocumentSearchResulttype only includesdocumentsarray, no pagination metadata. -
Dedicated Builder Pattern: The treatment-plan repo uses a generic
createFixtureBuilderutility that's reusable for any type, making fixtures composable and overridable. -
Comprehensive Mock Coverage: The national-health-records repo provides 40 documents with extensive edge cases (null/undefined fields, compound status values, multiple authors, etc.)
-
Authors Model: Full support for role-based authors (
healthcare_professionalvspatient) with optional profession and institution details (see participant.ts types). -
serviceInformation Fields: Both
startDateandendDateare present in some mocks (especially discharge summaries showing hospital stays), with optional endDate for other document types.