semillero-INVIMA/diagramas/frontend-clases.svg

947 lines
79 KiB
XML

<svg version="1.1" baseProfile="full" width="4232.0" height="1535.0" viewBox="0 0 4232 1535" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events">
<desc >#.interface: fill=lightblue
#.enumeration: fill=lightgreen
#.type: fill=lightgray
[App||]
[&lt;type&gt;AuthUser|+id: string \| number;+username: string;+fullName: string;+role: string|]
[&lt;type&gt;AuthSession|+user: AuthUser;+accessToken: string;+expiresAt: string|]
[&lt;type&gt;ApiEnvelope&lt;T&gt;|+ok: boolean;+data: T|]
[&lt;type&gt;InvimaDataset|+key: string;+id: string;+name: string;+defaultCategory: string|]
[&lt;type&gt;InvimaCategory|+categoria: string;+slug: string;+total: number|]
[&lt;type&gt;InvimaFilterOption|+value: string;+total: number|]
[&lt;type&gt;InvimaCatalogItem|+source_dataset_key: string;+source_dataset_id: string;+source_dataset_name: string;+categoria_linea: string;+categoria_canonica: string;+categoria_slug: string;+expediente?: string;+registro_sanitario?: string;+producto?: string;+titular?: string;+estado_registro?: string;+fecha_expedicion?: string;+fecha_vencimiento?: string;+modalidad?: string;+grupo?: string;+marca?: string;+principio_activo?: string;+forma_farmaceutica?: string;+presentacion_comercial?: string;+atc?: string;+rol_nombre?: string;+rol_tipo?: string;+ciudad_titular?: string;+pais_titular?: string;+fabricante?: string;+importador?: string;+vigencia?: string;+score?: number|]
[&lt;type&gt;InvimaCatalogResponse|+items: InvimaCatalogItem\[\];+total: number;+limit: number;+offset: number|]
[&lt;type&gt;InvimaFiltersResponse|+estados: InvimaFilterOption\[\];+modalidades: InvimaFilterOption\[\];+grupos: InvimaFilterOption\[\]|]
[&lt;type&gt;InvimaSyncSummary|+datasets: number;+fetched: number;+persisted: number;+pages: number;+failed?: number;+requested?: number|]
[&lt;type&gt;InvimaSyncResponse|+ok: boolean;+alreadyRunning?: boolean;+job?: InvimaSyncJob \| null;+summary?: InvimaSyncSummary;+failed?: { datasetKey: string; error: string; }\[\]|]
[&lt;type&gt;InvimaSyncJobDataset|+key: string;+datasetKey: string;+datasetId: string \| null;+name: string;+status: &quot;pending&quot; \| &quot;running&quot; \| &quot;completed&quot; \| &quot;failed&quot;;+fetched: number;+persisted: number;+pages: number;+warnings: string\[\];+error: string \| null;+startedAt: string \| null;+updatedAt: string;+finishedAt: string \| null|]
[&lt;type&gt;InvimaSyncJob|+id: string;+status: &quot;running&quot; \| &quot;completed&quot; \| &quot;failed&quot;;+requested: number;+completed: number;+failed: number;+fetched: number;+persisted: number;+pages: number;+concurrency?: number;+pageSize?: number;+datasets: InvimaSyncJobDataset\[\];+summary?: InvimaSyncSummary \| null;+error?: string \| null;+startedAt: string;+updatedAt: string;+finishedAt: string \| null|]
[&lt;type&gt;InvimaSyncDatasetStats|+key: string;+id: string;+name: string;+localRows: number;+selected: boolean|]
[&lt;type&gt;InvimaSyncStats|+at: string;+totals: { catalogRows: number; rawRows: number; categories: number; datasetsWithData: number; vigentes: number; vencidos: number; maxUpdatedAt: string \| null; };+datasets: InvimaSyncDatasetStats\[\]|]
[AuthSession] - [AuthUser]
[InvimaCatalogResponse] - 0..* [InvimaCatalogItem]
[InvimaFiltersResponse] - 0..* [InvimaFilterOption]
[InvimaFiltersResponse] - 0..* [InvimaFilterOption]
[InvimaFiltersResponse] - 0..* [InvimaFilterOption]
[InvimaSyncResponse] - [InvimaSyncJob]
[InvimaSyncResponse] - [InvimaSyncSummary]
[InvimaSyncJob] - 0..* [InvimaSyncJobDataset]
[InvimaSyncJob] - [InvimaSyncSummary]
[InvimaSyncStats] - 0..* [InvimaSyncDatasetStats]
[AuthService|-apiBase: &quot;/api/auth&quot;;-_token: WritableSignal&lt;string \| null&gt;;-_user: WritableSignal&lt;AuthUser \| null&gt;;+user: Signal&lt;AuthUser \| null&gt;;+isAuthenticated: Signal&lt;boolean&gt;;-http: HttpClient|-hydrate(): void;-setSession(): void;+clearSession(): void;+getAccessToken(): string \| null;+login(): Observable&lt;AuthSession&gt;;+me(): Observable&lt;AuthUser&gt;;+logout(): Observable&lt;boolean&gt;]
[InvimaService|-apiBase: &quot;/api/invima&quot;;-http: HttpClient|-buildExportParams(): HttpParams;-buildFallbackFilename(): string;-extractFilename(): string;+getDatasets(): Observable&lt;{ items: InvimaDataset\[\]; }&gt;;+getCategories(): Observable&lt;{ items: InvimaCategory\[\]; }&gt;;+getFilterOptions(): Observable&lt;InvimaFiltersResponse&gt;;+searchCatalog(): Observable&lt;InvimaCatalogResponse&gt;;+sync(): Observable&lt;InvimaSyncResponse&gt;;+getSyncStats(): Observable&lt;InvimaSyncStats&gt;;+getSyncJob(): Observable&lt;{ ok: boolean; job: InvimaSyncJob \| null; }&gt;;+exportCatalog(): Observable&lt;InvimaExportFile&gt;;+buildExportUrl(): string]
[&lt;type&gt;CatalogQuery|+q?: string;+categorias?: string\[\];+datasets?: string\[\];+estados?: string\[\];+modalidades?: string\[\];+grupos?: string\[\];+fechaVencDesde?: string;+fechaVencHasta?: string;+fechaExpDesde?: string;+fechaExpHasta?: string;+onlyVigentes?: boolean;+limit?: number;+offset?: number|]
[&lt;type&gt;InvimaExportFile|+blob: Blob;+filename: string;+contentType: string|]
[LoginPageComponent|-auth: AuthService;-router: Router;-route: ActivatedRoute;+loading: WritableSignal&lt;boolean&gt;;+error: WritableSignal&lt;string&gt;;+identifier: string;+password: string|+submit(): void]
[LoginPageComponent] - [AuthService]
[DashboardPageComponent|-auth: AuthService;+fullName: Signal&lt;string&gt;|]
[DashboardPageComponent] - [AuthService]
[CatalogPageComponent|-invima: InvimaService;+loading: WritableSignal&lt;boolean&gt;;+error: WritableSignal&lt;string&gt;;+exporting: WritableSignal&lt;&quot;csv&quot; \| &quot;xlsx&quot; \| null&gt;;+exportMessage: WritableSignal&lt;string&gt;;+exportError: WritableSignal&lt;string&gt;;+items: WritableSignal&lt;InvimaCatalogItem\[\]&gt;;+total: WritableSignal&lt;number&gt;;+categories: WritableSignal&lt;InvimaCategory\[\]&gt;;+datasets: WritableSignal&lt;InvimaDataset\[\]&gt;;+estados: WritableSignal&lt;InvimaFilterOption\[\]&gt;;+modalidades: WritableSignal&lt;InvimaFilterOption\[\]&gt;;+grupos: WritableSignal&lt;InvimaFilterOption\[\]&gt;;+selectedCategories: WritableSignal&lt;string\[\]&gt;;+selectedDatasets: WritableSignal&lt;string\[\]&gt;;+limit: WritableSignal&lt;number&gt;;+offset: WritableSignal&lt;number&gt;;+page: Signal&lt;number&gt;;+hasMore: Signal&lt;boolean&gt;;+qText: string;+estado: string;+modalidad: string;+grupo: string;+fechaVencDesde: string;+fechaVencHasta: string;+fechaExpDesde: string;+fechaExpHasta: string;+onlyVigentes: boolean|-buildQuery(): CatalogQuery;-loadMetadata(): void;-loadData(): void;+applyFilters(): void;+clearFilters(): void;+toggleCategory(): void;+isCategorySelected(): boolean;+toggleDataset(): void;+isDatasetSelected(): boolean;+changeLimit(): void;+nextPage(): void;+prevPage(): void;+download(): void;+formatDate(): string;+isVigente(): boolean;+isVencido(): boolean]
[CatalogPageComponent] - [InvimaService]
[SyncPageComponent|-invima: InvimaService;-refreshMs: 10000;-refreshHandle: number \| null;-announcedFinalJobId: string \| null;+loading: WritableSignal&lt;boolean&gt;;+message: WritableSignal&lt;string&gt;;+statsError: WritableSignal&lt;string&gt;;+jobError: WritableSignal&lt;string&gt;;+datasets: WritableSignal&lt;InvimaDataset\[\]&gt;;+selected: WritableSignal&lt;string\[\]&gt;;+stats: WritableSignal&lt;InvimaSyncStats \| null&gt;;+job: WritableSignal&lt;InvimaSyncJob \| null&gt;;+baselineTotal: WritableSignal&lt;number \| null&gt;;+baselineByDataset: WritableSignal&lt;Record&lt;string, number&gt;&gt;;+liveAdded: Signal&lt;number&gt;;+pageSize: number;+concurrency: number|+ngOnDestroy(): void;-loadStats(): void;-loadJob(): void;-ensureBaseline(): void;-refreshLiveMessage(): void;-buildFinalMessage(): string;-captureBaselineFromCurrentStats(): void;+datasetDelta(): number;+formatNumber(): string;+formatDateTime(): string;+toggle(): void;+isSelected(): boolean;+selectAll(): void;+sync(): void]
[OnDestroy]&lt;:--[SyncPageComponent]
[SyncPageComponent] - [InvimaService]
[MainLayoutComponent|+auth: AuthService;-router: Router;+menu: MenuItem\[\];+initials: Signal&lt;string&gt;|+logout(): void]
[&lt;type&gt;MenuItem|+label: string;+path: string;+hint: string|]
[MainLayoutComponent] - [AuthService]
[MainLayoutComponent] - 0..* [MenuItem]</desc>
<g stroke-width="1.0" text-align="left" font="12pt Helvetica, Arial, sans-serif" font-size="12pt" font-family="Helvetica" font-weight="normal" font-style="normal">
<g font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" stroke-width="3.0" stroke-linejoin="round" stroke-linecap="round" stroke="#33322E">
<g stroke="transparent" fill="transparent">
<rect x="0.0" y="0.0" height="1535.0" width="4232.0" stroke="none"></rect>
</g>
<g transform="translate(8, 8)" fill="#33322E">
<g transform="translate(20, 20)" fill="#33322E" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal">
<path d="M179.5 186.0 L179.5 287 L179.5 635 L179.5 635.0 " fill="none"></path>
<text x="1349.5" y="432.5" stroke="none">0..*</text>
<path d="M1384.5 194.0 L1384.5 287 L1384.5 440.5 L1384.5 440.5 " fill="none"></path>
<text x="933.8" y="643.5" stroke="none">0..*</text>
<path d="M1126.9 186.0 L1213.25 287 L968.7628518971849 651.5 L968.8 651.5 " fill="none"></path>
<text x="904.3" y="643.5" stroke="none">0..*</text>
<path d="M1033.2 186.0 L939.25 287 L939.25 651.5 L939.3 651.5 " fill="none"></path>
<text x="871.0" y="643.5" stroke="none">0..*</text>
<path d="M937.0 182.8 L630.75 287 L906.0211138310893 651.5 L906.0 651.5 " fill="none"></path>
<path d="M2169.8 218.0 L2280.25 287 L2280.25 538 L2280.3 538.0 " fill="none"></path>
<path d="M1979.3 218.0 L1934.25 287 L1934.25 695.5 L1934.25 695.5 L1934.25 1104 L1934.25 1104 L1946.503164556962 1225 L1946.5 1225.0 " fill="none"></path>
<text x="2308.3" y="1160.0" stroke="none">0..*</text>
<path d="M2288.0 853.0 L2300.25 1104 L2300.25 1168 L2300.3 1168.0 " fill="none"></path>
<path d="M2213.5 853.0 L2107.25 1104 L2013.5132911392404 1225 L2013.5 1225.0 " fill="none"></path>
<text x="1660.0" y="619.0" stroke="none">0..*</text>
<path d="M1695.0 242.5 L1695 287 L1695 627 L1695.0 627.0 " fill="none"></path>
<path d="M3294.0 230.0 L3294 287 L3294 558.5 L3294.0 558.5 " fill="none"></path>
<path d="M2990.5 177.5 L2990.5 287 L3192.2141982864136 558.5 L3192.2 558.5 " fill="none"></path>
<path d="M2753.3 1084.0 L2753.25 1104 L3160.75 1229.5557722308893 L3160.8 1229.6 " fill="none"></path>
<g stroke-dasharray="6 6">
<path d="M3921.5 162.8 L3921.5 287 L3921.5 412.5 L3921.5 412.5 " fill="none"></path>
</g>
<path d="M3926.8 162.8 L3921.5 162.8 L3916.2 162.8 L3921.5 149.5 Z"></path>
<path d="M3921.5 978.5 L3921.5 1104 L3627.75 1214.0343764817449 L3627.8 1214.0 " fill="none"></path>
<path d="M3662.0 206.0 L3744.75 287 L3445.1695226438187 558.5 L3445.2 558.5 " fill="none"></path>
<text x="3533.0" y="635.0" stroke="none">0..*</text>
<path d="M3578.6 206.0 L3568 287 L3568 643 L3568.0 643.0 " fill="none"></path>
<g data-name="App">
<g fill="#eee8d5" stroke="#33322E" data-name="App">
<rect x="0.0" y="109.5" height="48.0" width="47.0" data-name="App"></rect>
<path d="M0.0 141.5 L47.0 141.5" fill="none" data-name="App"></path>
<path d="M0.0 149.5 L47.0 149.5" fill="none" data-name="App"></path>
</g>
<g transform="translate(0, 109.5)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="App" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="App" data-compartment="0">
<a id="..\semillero\src\app\app.ts.App" xlink:href="..\semillero\src\app\app.ts"><text x="15.5" y="14.1" stroke="none" text-anchor="middle" data-name="App" data-compartment="0">App</text></a>
</g>
</g>
<g transform="translate(0, 141.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="App" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" data-name="App" data-compartment="1">
</g>
</g>
<g transform="translate(0, 149.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="App" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" data-name="App" data-compartment="2">
</g>
</g>
</g>
<g data-name="AuthUser">
<g fill="lightgray" stroke="#33322E" data-name="AuthUser">
<rect x="95.0" y="635.0" height="121.0" width="169.0" data-name="AuthUser"></rect>
<path d="M95.0 667.0 L264.0 667.0" fill="none" data-name="AuthUser"></path>
<path d="M95.0 748.0 L264.0 748.0" fill="none" data-name="AuthUser"></path>
</g>
<g transform="translate(95, 635)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="AuthUser" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="AuthUser" data-compartment="0">
<a id="..\semillero\src\app\core\models.ts.AuthUser" xlink:href="..\semillero\src\app\core\models.ts"><text x="76.5" y="14.1" stroke="none" text-anchor="middle" data-name="AuthUser" data-compartment="0">AuthUser</text></a>
</g>
</g>
<g transform="translate(95, 667)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="AuthUser" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="AuthUser" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="AuthUser" data-compartment="1">+id: string | number</text>
<text x="0.0" y="30.3" stroke="none" data-name="AuthUser" data-compartment="1">+username: string</text>
<text x="0.0" y="46.5" stroke="none" data-name="AuthUser" data-compartment="1">+fullName: string</text>
<text x="0.0" y="62.7" stroke="none" data-name="AuthUser" data-compartment="1">+role: string</text>
</g>
</g>
<g transform="translate(95, 748)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="AuthUser" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" data-name="AuthUser" data-compartment="2">
</g>
</g>
</g>
<g data-name="AuthSession">
<g fill="lightgray" stroke="#33322E" data-name="AuthSession">
<rect x="87.0" y="81.0" height="105.0" width="185.0" data-name="AuthSession"></rect>
<path d="M87.0 113.0 L272.0 113.0" fill="none" data-name="AuthSession"></path>
<path d="M87.0 178.0 L272.0 178.0" fill="none" data-name="AuthSession"></path>
</g>
<g transform="translate(87, 81)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="AuthSession" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="AuthSession" data-compartment="0">
<a id="..\semillero\src\app\core\models.ts.AuthSession" xlink:href="..\semillero\src\app\core\models.ts"><text x="84.5" y="14.1" stroke="none" text-anchor="middle" data-name="AuthSession" data-compartment="0">AuthSession</text></a>
</g>
</g>
<g transform="translate(87, 113)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="AuthSession" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="AuthSession" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="AuthSession" data-compartment="1">+user: AuthUser</text>
<text x="0.0" y="30.3" stroke="none" data-name="AuthSession" data-compartment="1">+accessToken: string</text>
<text x="0.0" y="46.5" stroke="none" data-name="AuthSession" data-compartment="1">+expiresAt: string</text>
</g>
</g>
<g transform="translate(87, 178)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="AuthSession" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" data-name="AuthSession" data-compartment="2">
</g>
</g>
</g>
<g data-name="ApiEnvelope&lt;T&gt;">
<g fill="lightgray" stroke="#33322E" data-name="ApiEnvelope&lt;T&gt;">
<rect x="312.0" y="89.5" height="88.0" width="145.0" data-name="ApiEnvelope&lt;T&gt;"></rect>
<path d="M312.0 121.5 L457.0 121.5" fill="none" data-name="ApiEnvelope&lt;T&gt;"></path>
<path d="M312.0 169.5 L457.0 169.5" fill="none" data-name="ApiEnvelope&lt;T&gt;"></path>
</g>
<g transform="translate(312, 89.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ApiEnvelope&lt;T&gt;" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ApiEnvelope&lt;T&gt;" data-compartment="0">
<a id="..\semillero\src\app\core\models.ts.ApiEnvelope&lt;T&gt;" xlink:href="..\semillero\src\app\core\models.ts"><text x="64.5" y="14.1" stroke="none" text-anchor="middle" data-name="ApiEnvelope&lt;T&gt;" data-compartment="0">ApiEnvelope&lt;T&gt;</text></a>
</g>
</g>
<g transform="translate(312, 121.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ApiEnvelope&lt;T&gt;" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="ApiEnvelope&lt;T&gt;" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="ApiEnvelope&lt;T&gt;" data-compartment="1">+ok: boolean</text>
<text x="0.0" y="30.3" stroke="none" data-name="ApiEnvelope&lt;T&gt;" data-compartment="1">+data: T</text>
</g>
</g>
<g transform="translate(312, 169.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ApiEnvelope&lt;T&gt;" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" data-name="ApiEnvelope&lt;T&gt;" data-compartment="2">
</g>
</g>
</g>
<g data-name="InvimaDataset">
<g fill="lightgray" stroke="#33322E" data-name="InvimaDataset">
<rect x="497.0" y="73.0" height="121.0" width="206.0" data-name="InvimaDataset"></rect>
<path d="M497.0 105.0 L703.0 105.0" fill="none" data-name="InvimaDataset"></path>
<path d="M497.0 186.0 L703.0 186.0" fill="none" data-name="InvimaDataset"></path>
</g>
<g transform="translate(497, 73)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaDataset" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="InvimaDataset" data-compartment="0">
<a id="..\semillero\src\app\core\models.ts.InvimaDataset" xlink:href="..\semillero\src\app\core\models.ts"><text x="95.0" y="14.1" stroke="none" text-anchor="middle" data-name="InvimaDataset" data-compartment="0">InvimaDataset</text></a>
</g>
</g>
<g transform="translate(497, 105)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaDataset" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="InvimaDataset" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="InvimaDataset" data-compartment="1">+key: string</text>
<text x="0.0" y="30.3" stroke="none" data-name="InvimaDataset" data-compartment="1">+id: string</text>
<text x="0.0" y="46.5" stroke="none" data-name="InvimaDataset" data-compartment="1">+name: string</text>
<text x="0.0" y="62.7" stroke="none" data-name="InvimaDataset" data-compartment="1">+defaultCategory: string</text>
</g>
</g>
<g transform="translate(497, 186)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaDataset" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" data-name="InvimaDataset" data-compartment="2">
</g>
</g>
</g>
<g data-name="InvimaCategory">
<g fill="lightgray" stroke="#33322E" data-name="InvimaCategory">
<rect x="743.0" y="81.0" height="105.0" width="154.0" data-name="InvimaCategory"></rect>
<path d="M743.0 113.0 L897.0 113.0" fill="none" data-name="InvimaCategory"></path>
<path d="M743.0 178.0 L897.0 178.0" fill="none" data-name="InvimaCategory"></path>
</g>
<g transform="translate(743, 81)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaCategory" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="InvimaCategory" data-compartment="0">
<a id="..\semillero\src\app\core\models.ts.InvimaCategory" xlink:href="..\semillero\src\app\core\models.ts"><text x="69.0" y="14.1" stroke="none" text-anchor="middle" data-name="InvimaCategory" data-compartment="0">InvimaCategory</text></a>
</g>
</g>
<g transform="translate(743, 113)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaCategory" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="InvimaCategory" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="InvimaCategory" data-compartment="1">+categoria: string</text>
<text x="0.0" y="30.3" stroke="none" data-name="InvimaCategory" data-compartment="1">+slug: string</text>
<text x="0.0" y="46.5" stroke="none" data-name="InvimaCategory" data-compartment="1">+total: number</text>
</g>
</g>
<g transform="translate(743, 178)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaCategory" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" data-name="InvimaCategory" data-compartment="2">
</g>
</g>
</g>
<g data-name="InvimaFilterOption">
<g fill="lightgray" stroke="#33322E" data-name="InvimaFilterOption">
<rect x="859.8" y="651.5" height="88.0" width="159.0" data-name="InvimaFilterOption"></rect>
<path d="M859.8 683.5 L1018.8 683.5" fill="none" data-name="InvimaFilterOption"></path>
<path d="M859.8 731.5 L1018.8 731.5" fill="none" data-name="InvimaFilterOption"></path>
</g>
<g transform="translate(859.75, 651.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaFilterOption" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="InvimaFilterOption" data-compartment="0">
<a id="..\semillero\src\app\core\models.ts.InvimaFilterOption" xlink:href="..\semillero\src\app\core\models.ts"><text x="71.5" y="14.1" stroke="none" text-anchor="middle" data-name="InvimaFilterOption" data-compartment="0">InvimaFilterOption</text></a>
</g>
</g>
<g transform="translate(859.75, 683.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaFilterOption" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="InvimaFilterOption" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="InvimaFilterOption" data-compartment="1">+value: string</text>
<text x="0.0" y="30.3" stroke="none" data-name="InvimaFilterOption" data-compartment="1">+total: number</text>
</g>
</g>
<g transform="translate(859.75, 731.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaFilterOption" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" data-name="InvimaFilterOption" data-compartment="2">
</g>
</g>
</g>
<g data-name="InvimaCatalogItem">
<g fill="lightgray" stroke="#33322E" data-name="InvimaCatalogItem">
<rect x="1245.0" y="440.5" height="510.0" width="279.0" data-name="InvimaCatalogItem"></rect>
<path d="M1245.0 472.5 L1524.0 472.5" fill="none" data-name="InvimaCatalogItem"></path>
<path d="M1245.0 942.5 L1524.0 942.5" fill="none" data-name="InvimaCatalogItem"></path>
</g>
<g transform="translate(1245, 440.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaCatalogItem" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="InvimaCatalogItem" data-compartment="0">
<a id="..\semillero\src\app\core\models.ts.InvimaCatalogItem" xlink:href="..\semillero\src\app\core\models.ts"><text x="131.5" y="14.1" stroke="none" text-anchor="middle" data-name="InvimaCatalogItem" data-compartment="0">InvimaCatalogItem</text></a>
</g>
</g>
<g transform="translate(1245, 472.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaCatalogItem" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="InvimaCatalogItem" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+source_dataset_key: string</text>
<text x="0.0" y="30.3" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+source_dataset_id: string</text>
<text x="0.0" y="46.5" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+source_dataset_name: string</text>
<text x="0.0" y="62.7" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+categoria_linea: string</text>
<text x="0.0" y="78.9" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+categoria_canonica: string</text>
<text x="0.0" y="95.1" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+categoria_slug: string</text>
<text x="0.0" y="111.3" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+expediente?: string</text>
<text x="0.0" y="127.5" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+registro_sanitario?: string</text>
<text x="0.0" y="143.7" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+producto?: string</text>
<text x="0.0" y="159.9" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+titular?: string</text>
<text x="0.0" y="176.1" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+estado_registro?: string</text>
<text x="0.0" y="192.3" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+fecha_expedicion?: string</text>
<text x="0.0" y="208.5" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+fecha_vencimiento?: string</text>
<text x="0.0" y="224.7" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+modalidad?: string</text>
<text x="0.0" y="240.9" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+grupo?: string</text>
<text x="0.0" y="257.1" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+marca?: string</text>
<text x="0.0" y="273.3" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+principio_activo?: string</text>
<text x="0.0" y="289.5" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+forma_farmaceutica?: string</text>
<text x="0.0" y="305.7" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+presentacion_comercial?: string</text>
<text x="0.0" y="321.9" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+atc?: string</text>
<text x="0.0" y="338.1" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+rol_nombre?: string</text>
<text x="0.0" y="354.3" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+rol_tipo?: string</text>
<text x="0.0" y="370.5" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+ciudad_titular?: string</text>
<text x="0.0" y="386.7" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+pais_titular?: string</text>
<text x="0.0" y="402.9" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+fabricante?: string</text>
<text x="0.0" y="419.1" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+importador?: string</text>
<text x="0.0" y="435.3" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+vigencia?: string</text>
<text x="0.0" y="451.5" stroke="none" data-name="InvimaCatalogItem" data-compartment="1">+score?: number</text>
</g>
</g>
<g transform="translate(1245, 942.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaCatalogItem" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" data-name="InvimaCatalogItem" data-compartment="2">
</g>
</g>
</g>
<g data-name="InvimaCatalogResponse">
<g fill="lightgray" stroke="#33322E" data-name="InvimaCatalogResponse">
<rect x="1267.0" y="73.0" height="121.0" width="235.0" data-name="InvimaCatalogResponse"></rect>
<path d="M1267.0 105.0 L1502.0 105.0" fill="none" data-name="InvimaCatalogResponse"></path>
<path d="M1267.0 186.0 L1502.0 186.0" fill="none" data-name="InvimaCatalogResponse"></path>
</g>
<g transform="translate(1267, 73)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaCatalogResponse" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="InvimaCatalogResponse" data-compartment="0">
<a id="..\semillero\src\app\core\models.ts.InvimaCatalogResponse" xlink:href="..\semillero\src\app\core\models.ts"><text x="109.5" y="14.1" stroke="none" text-anchor="middle" data-name="InvimaCatalogResponse" data-compartment="0">InvimaCatalogResponse</text></a>
</g>
</g>
<g transform="translate(1267, 105)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaCatalogResponse" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="InvimaCatalogResponse" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="InvimaCatalogResponse" data-compartment="1">+items: InvimaCatalogItem[]</text>
<text x="0.0" y="30.3" stroke="none" data-name="InvimaCatalogResponse" data-compartment="1">+total: number</text>
<text x="0.0" y="46.5" stroke="none" data-name="InvimaCatalogResponse" data-compartment="1">+limit: number</text>
<text x="0.0" y="62.7" stroke="none" data-name="InvimaCatalogResponse" data-compartment="1">+offset: number</text>
</g>
</g>
<g transform="translate(1267, 186)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaCatalogResponse" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" data-name="InvimaCatalogResponse" data-compartment="2">
</g>
</g>
</g>
<g data-name="InvimaFiltersResponse">
<g fill="lightgray" stroke="#33322E" data-name="InvimaFiltersResponse">
<rect x="937.0" y="81.0" height="105.0" width="290.0" data-name="InvimaFiltersResponse"></rect>
<path d="M937.0 113.0 L1227.0 113.0" fill="none" data-name="InvimaFiltersResponse"></path>
<path d="M937.0 178.0 L1227.0 178.0" fill="none" data-name="InvimaFiltersResponse"></path>
</g>
<g transform="translate(937, 81)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaFiltersResponse" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="InvimaFiltersResponse" data-compartment="0">
<a id="..\semillero\src\app\core\models.ts.InvimaFiltersResponse" xlink:href="..\semillero\src\app\core\models.ts"><text x="137.0" y="14.1" stroke="none" text-anchor="middle" data-name="InvimaFiltersResponse" data-compartment="0">InvimaFiltersResponse</text></a>
</g>
</g>
<g transform="translate(937, 113)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaFiltersResponse" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="InvimaFiltersResponse" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="InvimaFiltersResponse" data-compartment="1">+estados: InvimaFilterOption[]</text>
<text x="0.0" y="30.3" stroke="none" data-name="InvimaFiltersResponse" data-compartment="1">+modalidades: InvimaFilterOption[]</text>
<text x="0.0" y="46.5" stroke="none" data-name="InvimaFiltersResponse" data-compartment="1">+grupos: InvimaFilterOption[]</text>
</g>
</g>
<g transform="translate(937, 178)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaFiltersResponse" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" data-name="InvimaFiltersResponse" data-compartment="2">
</g>
</g>
</g>
<g data-name="InvimaSyncSummary">
<g fill="lightgray" stroke="#33322E" data-name="InvimaSyncSummary">
<rect x="1861.3" y="1225.0" height="153.0" width="186.0" data-name="InvimaSyncSummary"></rect>
<path d="M1861.3 1257.0 L2047.3 1257.0" fill="none" data-name="InvimaSyncSummary"></path>
<path d="M1861.3 1370.0 L2047.3 1370.0" fill="none" data-name="InvimaSyncSummary"></path>
</g>
<g transform="translate(1861.25, 1225)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaSyncSummary" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="InvimaSyncSummary" data-compartment="0">
<a id="..\semillero\src\app\core\models.ts.InvimaSyncSummary" xlink:href="..\semillero\src\app\core\models.ts"><text x="85.0" y="14.1" stroke="none" text-anchor="middle" data-name="InvimaSyncSummary" data-compartment="0">InvimaSyncSummary</text></a>
</g>
</g>
<g transform="translate(1861.25, 1257)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaSyncSummary" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="InvimaSyncSummary" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="InvimaSyncSummary" data-compartment="1">+datasets: number</text>
<text x="0.0" y="30.3" stroke="none" data-name="InvimaSyncSummary" data-compartment="1">+fetched: number</text>
<text x="0.0" y="46.5" stroke="none" data-name="InvimaSyncSummary" data-compartment="1">+persisted: number</text>
<text x="0.0" y="62.7" stroke="none" data-name="InvimaSyncSummary" data-compartment="1">+pages: number</text>
<text x="0.0" y="78.9" stroke="none" data-name="InvimaSyncSummary" data-compartment="1">+failed?: number</text>
<text x="0.0" y="95.1" stroke="none" data-name="InvimaSyncSummary" data-compartment="1">+requested?: number</text>
</g>
</g>
<g transform="translate(1861.25, 1370)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaSyncSummary" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" data-name="InvimaSyncSummary" data-compartment="2">
</g>
</g>
</g>
<g data-name="InvimaSyncResponse">
<g fill="lightgray" stroke="#33322E" data-name="InvimaSyncResponse">
<rect x="1893.0" y="49.0" height="169.0" width="283.0" data-name="InvimaSyncResponse"></rect>
<path d="M1893.0 81.0 L2176.0 81.0" fill="none" data-name="InvimaSyncResponse"></path>
<path d="M1893.0 210.0 L2176.0 210.0" fill="none" data-name="InvimaSyncResponse"></path>
</g>
<g transform="translate(1893, 49)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaSyncResponse" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="InvimaSyncResponse" data-compartment="0">
<a id="..\semillero\src\app\core\models.ts.InvimaSyncResponse" xlink:href="..\semillero\src\app\core\models.ts"><text x="133.5" y="14.1" stroke="none" text-anchor="middle" data-name="InvimaSyncResponse" data-compartment="0">InvimaSyncResponse</text></a>
</g>
</g>
<g transform="translate(1893, 81)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaSyncResponse" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="InvimaSyncResponse" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="InvimaSyncResponse" data-compartment="1">+ok: boolean</text>
<text x="0.0" y="30.3" stroke="none" data-name="InvimaSyncResponse" data-compartment="1">+alreadyRunning?: boolean</text>
<text x="0.0" y="46.5" stroke="none" data-name="InvimaSyncResponse" data-compartment="1">+job?: InvimaSyncJob | null</text>
<text x="0.0" y="62.7" stroke="none" data-name="InvimaSyncResponse" data-compartment="1">+summary?: InvimaSyncSummary</text>
<text x="0.0" y="78.9" stroke="none" data-name="InvimaSyncResponse" data-compartment="1">+failed?: { datasetKey: string</text>
<text x="0.0" y="95.1" stroke="none" data-name="InvimaSyncResponse" data-compartment="1">error: string</text>
<text x="0.0" y="111.3" stroke="none" data-name="InvimaSyncResponse" data-compartment="1">}[]</text>
</g>
</g>
<g transform="translate(1893, 210)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaSyncResponse" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" data-name="InvimaSyncResponse" data-compartment="2">
</g>
</g>
</g>
<g data-name="InvimaSyncJobDataset">
<g fill="lightgray" stroke="#33322E" data-name="InvimaSyncJobDataset">
<rect x="2087.3" y="1168.0" height="267.0" width="426.0" data-name="InvimaSyncJobDataset"></rect>
<path d="M2087.3 1200.0 L2513.3 1200.0" fill="none" data-name="InvimaSyncJobDataset"></path>
<path d="M2087.3 1427.0 L2513.3 1427.0" fill="none" data-name="InvimaSyncJobDataset"></path>
</g>
<g transform="translate(2087.25, 1168)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaSyncJobDataset" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="InvimaSyncJobDataset" data-compartment="0">
<a id="..\semillero\src\app\core\models.ts.InvimaSyncJobDataset" xlink:href="..\semillero\src\app\core\models.ts"><text x="205.0" y="14.1" stroke="none" text-anchor="middle" data-name="InvimaSyncJobDataset" data-compartment="0">InvimaSyncJobDataset</text></a>
</g>
</g>
<g transform="translate(2087.25, 1200)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaSyncJobDataset" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="InvimaSyncJobDataset" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="InvimaSyncJobDataset" data-compartment="1">+key: string</text>
<text x="0.0" y="30.3" stroke="none" data-name="InvimaSyncJobDataset" data-compartment="1">+datasetKey: string</text>
<text x="0.0" y="46.5" stroke="none" data-name="InvimaSyncJobDataset" data-compartment="1">+datasetId: string | null</text>
<text x="0.0" y="62.7" stroke="none" data-name="InvimaSyncJobDataset" data-compartment="1">+name: string</text>
<text x="0.0" y="78.9" stroke="none" data-name="InvimaSyncJobDataset" data-compartment="1">+status: &quot;pending&quot; | &quot;running&quot; | &quot;completed&quot; | &quot;failed&quot;</text>
<text x="0.0" y="95.1" stroke="none" data-name="InvimaSyncJobDataset" data-compartment="1">+fetched: number</text>
<text x="0.0" y="111.3" stroke="none" data-name="InvimaSyncJobDataset" data-compartment="1">+persisted: number</text>
<text x="0.0" y="127.5" stroke="none" data-name="InvimaSyncJobDataset" data-compartment="1">+pages: number</text>
<text x="0.0" y="143.7" stroke="none" data-name="InvimaSyncJobDataset" data-compartment="1">+warnings: string[]</text>
<text x="0.0" y="159.9" stroke="none" data-name="InvimaSyncJobDataset" data-compartment="1">+error: string | null</text>
<text x="0.0" y="176.1" stroke="none" data-name="InvimaSyncJobDataset" data-compartment="1">+startedAt: string | null</text>
<text x="0.0" y="192.3" stroke="none" data-name="InvimaSyncJobDataset" data-compartment="1">+updatedAt: string</text>
<text x="0.0" y="208.5" stroke="none" data-name="InvimaSyncJobDataset" data-compartment="1">+finishedAt: string | null</text>
</g>
</g>
<g transform="translate(2087.25, 1427)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaSyncJobDataset" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" data-name="InvimaSyncJobDataset" data-compartment="2">
</g>
</g>
</g>
<g data-name="InvimaSyncJob">
<g fill="lightgray" stroke="#33322E" data-name="InvimaSyncJob">
<rect x="2112.8" y="538.0" height="315.0" width="335.0" data-name="InvimaSyncJob"></rect>
<path d="M2112.8 570.0 L2447.8 570.0" fill="none" data-name="InvimaSyncJob"></path>
<path d="M2112.8 845.0 L2447.8 845.0" fill="none" data-name="InvimaSyncJob"></path>
</g>
<g transform="translate(2112.75, 538)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaSyncJob" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="InvimaSyncJob" data-compartment="0">
<a id="..\semillero\src\app\core\models.ts.InvimaSyncJob" xlink:href="..\semillero\src\app\core\models.ts"><text x="159.5" y="14.1" stroke="none" text-anchor="middle" data-name="InvimaSyncJob" data-compartment="0">InvimaSyncJob</text></a>
</g>
</g>
<g transform="translate(2112.75, 570)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaSyncJob" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="InvimaSyncJob" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="InvimaSyncJob" data-compartment="1">+id: string</text>
<text x="0.0" y="30.3" stroke="none" data-name="InvimaSyncJob" data-compartment="1">+status: &quot;running&quot; | &quot;completed&quot; | &quot;failed&quot;</text>
<text x="0.0" y="46.5" stroke="none" data-name="InvimaSyncJob" data-compartment="1">+requested: number</text>
<text x="0.0" y="62.7" stroke="none" data-name="InvimaSyncJob" data-compartment="1">+completed: number</text>
<text x="0.0" y="78.9" stroke="none" data-name="InvimaSyncJob" data-compartment="1">+failed: number</text>
<text x="0.0" y="95.1" stroke="none" data-name="InvimaSyncJob" data-compartment="1">+fetched: number</text>
<text x="0.0" y="111.3" stroke="none" data-name="InvimaSyncJob" data-compartment="1">+persisted: number</text>
<text x="0.0" y="127.5" stroke="none" data-name="InvimaSyncJob" data-compartment="1">+pages: number</text>
<text x="0.0" y="143.7" stroke="none" data-name="InvimaSyncJob" data-compartment="1">+concurrency?: number</text>
<text x="0.0" y="159.9" stroke="none" data-name="InvimaSyncJob" data-compartment="1">+pageSize?: number</text>
<text x="0.0" y="176.1" stroke="none" data-name="InvimaSyncJob" data-compartment="1">+datasets: InvimaSyncJobDataset[]</text>
<text x="0.0" y="192.3" stroke="none" data-name="InvimaSyncJob" data-compartment="1">+summary?: InvimaSyncSummary | null</text>
<text x="0.0" y="208.5" stroke="none" data-name="InvimaSyncJob" data-compartment="1">+error?: string | null</text>
<text x="0.0" y="224.7" stroke="none" data-name="InvimaSyncJob" data-compartment="1">+startedAt: string</text>
<text x="0.0" y="240.9" stroke="none" data-name="InvimaSyncJob" data-compartment="1">+updatedAt: string</text>
<text x="0.0" y="257.1" stroke="none" data-name="InvimaSyncJob" data-compartment="1">+finishedAt: string | null</text>
</g>
</g>
<g transform="translate(2112.75, 845)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaSyncJob" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" data-name="InvimaSyncJob" data-compartment="2">
</g>
</g>
</g>
<g data-name="InvimaSyncDatasetStats">
<g fill="lightgray" stroke="#33322E" data-name="InvimaSyncDatasetStats">
<rect x="1591.0" y="627.0" height="137.0" width="208.0" data-name="InvimaSyncDatasetStats"></rect>
<path d="M1591.0 659.0 L1799.0 659.0" fill="none" data-name="InvimaSyncDatasetStats"></path>
<path d="M1591.0 756.0 L1799.0 756.0" fill="none" data-name="InvimaSyncDatasetStats"></path>
</g>
<g transform="translate(1591, 627)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaSyncDatasetStats" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="InvimaSyncDatasetStats" data-compartment="0">
<a id="..\semillero\src\app\core\models.ts.InvimaSyncDatasetStats" xlink:href="..\semillero\src\app\core\models.ts"><text x="96.0" y="14.1" stroke="none" text-anchor="middle" data-name="InvimaSyncDatasetStats" data-compartment="0">InvimaSyncDatasetStats</text></a>
</g>
</g>
<g transform="translate(1591, 659)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaSyncDatasetStats" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="InvimaSyncDatasetStats" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="InvimaSyncDatasetStats" data-compartment="1">+key: string</text>
<text x="0.0" y="30.3" stroke="none" data-name="InvimaSyncDatasetStats" data-compartment="1">+id: string</text>
<text x="0.0" y="46.5" stroke="none" data-name="InvimaSyncDatasetStats" data-compartment="1">+name: string</text>
<text x="0.0" y="62.7" stroke="none" data-name="InvimaSyncDatasetStats" data-compartment="1">+localRows: number</text>
<text x="0.0" y="78.9" stroke="none" data-name="InvimaSyncDatasetStats" data-compartment="1">+selected: boolean</text>
</g>
</g>
<g transform="translate(1591, 756)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaSyncDatasetStats" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" data-name="InvimaSyncDatasetStats" data-compartment="2">
</g>
</g>
</g>
<g data-name="InvimaSyncStats">
<g fill="lightgray" stroke="#33322E" data-name="InvimaSyncStats">
<rect x="1542.0" y="24.5" height="218.0" width="306.0" data-name="InvimaSyncStats"></rect>
<path d="M1542.0 56.5 L1848.0 56.5" fill="none" data-name="InvimaSyncStats"></path>
<path d="M1542.0 234.5 L1848.0 234.5" fill="none" data-name="InvimaSyncStats"></path>
</g>
<g transform="translate(1542, 24.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaSyncStats" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="InvimaSyncStats" data-compartment="0">
<a id="..\semillero\src\app\core\models.ts.InvimaSyncStats" xlink:href="..\semillero\src\app\core\models.ts"><text x="145.0" y="14.1" stroke="none" text-anchor="middle" data-name="InvimaSyncStats" data-compartment="0">InvimaSyncStats</text></a>
</g>
</g>
<g transform="translate(1542, 56.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaSyncStats" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="InvimaSyncStats" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="InvimaSyncStats" data-compartment="1">+at: string</text>
<text x="0.0" y="30.3" stroke="none" data-name="InvimaSyncStats" data-compartment="1">+totals: { catalogRows: number</text>
<text x="0.0" y="46.5" stroke="none" data-name="InvimaSyncStats" data-compartment="1">rawRows: number</text>
<text x="0.0" y="62.7" stroke="none" data-name="InvimaSyncStats" data-compartment="1">categories: number</text>
<text x="0.0" y="78.9" stroke="none" data-name="InvimaSyncStats" data-compartment="1">datasetsWithData: number</text>
<text x="0.0" y="95.1" stroke="none" data-name="InvimaSyncStats" data-compartment="1">vigentes: number</text>
<text x="0.0" y="111.3" stroke="none" data-name="InvimaSyncStats" data-compartment="1">vencidos: number</text>
<text x="0.0" y="127.5" stroke="none" data-name="InvimaSyncStats" data-compartment="1">maxUpdatedAt: string | null</text>
<text x="0.0" y="143.7" stroke="none" data-name="InvimaSyncStats" data-compartment="1">}</text>
<text x="0.0" y="159.9" stroke="none" data-name="InvimaSyncStats" data-compartment="1">+datasets: InvimaSyncDatasetStats[]</text>
</g>
</g>
<g transform="translate(1542, 234.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaSyncStats" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" data-name="InvimaSyncStats" data-compartment="2">
</g>
</g>
</g>
<g data-name="AuthService">
<g fill="#eee8d5" stroke="#33322E" data-name="AuthService">
<rect x="3130.5" y="558.5" height="274.0" width="327.0" data-name="AuthService"></rect>
<path d="M3130.5 590.5 L3457.5 590.5" fill="none" data-name="AuthService"></path>
<path d="M3130.5 703.5 L3457.5 703.5" fill="none" data-name="AuthService"></path>
</g>
<g transform="translate(3130.5, 558.5)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="AuthService" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="AuthService" data-compartment="0">
<a id="..\semillero\src\app\core\services\auth.service.ts.AuthService" xlink:href="..\semillero\src\app\core\services\auth.service.ts"><text x="155.5" y="14.1" stroke="none" text-anchor="middle" data-name="AuthService" data-compartment="0">AuthService</text></a>
</g>
</g>
<g transform="translate(3130.5, 590.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="AuthService" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="AuthService" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="AuthService" data-compartment="1">-apiBase: &quot;/api/auth&quot;</text>
<text x="0.0" y="30.3" stroke="none" data-name="AuthService" data-compartment="1">-_token: WritableSignal&lt;string | null&gt;</text>
<text x="0.0" y="46.5" stroke="none" data-name="AuthService" data-compartment="1">-_user: WritableSignal&lt;AuthUser | null&gt;</text>
<text x="0.0" y="62.7" stroke="none" data-name="AuthService" data-compartment="1">+user: Signal&lt;AuthUser | null&gt;</text>
<text x="0.0" y="78.9" stroke="none" data-name="AuthService" data-compartment="1">+isAuthenticated: Signal&lt;boolean&gt;</text>
<text x="0.0" y="95.1" stroke="none" data-name="AuthService" data-compartment="1">-http: HttpClient</text>
</g>
</g>
<g transform="translate(3130.5, 703.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="AuthService" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="AuthService" data-compartment="2">
<text x="0.0" y="14.1" stroke="none" data-name="AuthService" data-compartment="2">-hydrate(): void</text>
<text x="0.0" y="30.3" stroke="none" data-name="AuthService" data-compartment="2">-setSession(): void</text>
<text x="0.0" y="46.5" stroke="none" data-name="AuthService" data-compartment="2">+clearSession(): void</text>
<text x="0.0" y="62.7" stroke="none" data-name="AuthService" data-compartment="2">+getAccessToken(): string | null</text>
<text x="0.0" y="78.9" stroke="none" data-name="AuthService" data-compartment="2">+login(): Observable&lt;AuthSession&gt;</text>
<text x="0.0" y="95.1" stroke="none" data-name="AuthService" data-compartment="2">+me(): Observable&lt;AuthUser&gt;</text>
<text x="0.0" y="111.3" stroke="none" data-name="AuthService" data-compartment="2">+logout(): Observable&lt;boolean&gt;</text>
</g>
</g>
</g>
<g data-name="InvimaService">
<g fill="#eee8d5" stroke="#33322E" data-name="InvimaService">
<rect x="3160.8" y="1124.0" height="355.0" width="467.0" data-name="InvimaService"></rect>
<path d="M3160.8 1156.0 L3627.8 1156.0" fill="none" data-name="InvimaService"></path>
<path d="M3160.8 1204.0 L3627.8 1204.0" fill="none" data-name="InvimaService"></path>
</g>
<g transform="translate(3160.75, 1124)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="InvimaService" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="InvimaService" data-compartment="0">
<a id="..\semillero\src\app\core\services\invima.service.ts.InvimaService" xlink:href="..\semillero\src\app\core\services\invima.service.ts"><text x="225.5" y="14.1" stroke="none" text-anchor="middle" data-name="InvimaService" data-compartment="0">InvimaService</text></a>
</g>
</g>
<g transform="translate(3160.75, 1156)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaService" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="InvimaService" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="InvimaService" data-compartment="1">-apiBase: &quot;/api/invima&quot;</text>
<text x="0.0" y="30.3" stroke="none" data-name="InvimaService" data-compartment="1">-http: HttpClient</text>
</g>
</g>
<g transform="translate(3160.75, 1204)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaService" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="InvimaService" data-compartment="2">
<text x="0.0" y="14.1" stroke="none" data-name="InvimaService" data-compartment="2">-buildExportParams(): HttpParams</text>
<text x="0.0" y="30.3" stroke="none" data-name="InvimaService" data-compartment="2">-buildFallbackFilename(): string</text>
<text x="0.0" y="46.5" stroke="none" data-name="InvimaService" data-compartment="2">-extractFilename(): string</text>
<text x="0.0" y="62.7" stroke="none" data-name="InvimaService" data-compartment="2">+getDatasets(): Observable&lt;{ items: InvimaDataset[]</text>
<text x="0.0" y="78.9" stroke="none" data-name="InvimaService" data-compartment="2">}&gt;</text>
<text x="0.0" y="95.1" stroke="none" data-name="InvimaService" data-compartment="2">+getCategories(): Observable&lt;{ items: InvimaCategory[]</text>
<text x="0.0" y="111.3" stroke="none" data-name="InvimaService" data-compartment="2">}&gt;</text>
<text x="0.0" y="127.5" stroke="none" data-name="InvimaService" data-compartment="2">+getFilterOptions(): Observable&lt;InvimaFiltersResponse&gt;</text>
<text x="0.0" y="143.7" stroke="none" data-name="InvimaService" data-compartment="2">+searchCatalog(): Observable&lt;InvimaCatalogResponse&gt;</text>
<text x="0.0" y="159.9" stroke="none" data-name="InvimaService" data-compartment="2">+sync(): Observable&lt;InvimaSyncResponse&gt;</text>
<text x="0.0" y="176.1" stroke="none" data-name="InvimaService" data-compartment="2">+getSyncStats(): Observable&lt;InvimaSyncStats&gt;</text>
<text x="0.0" y="192.3" stroke="none" data-name="InvimaService" data-compartment="2">+getSyncJob(): Observable&lt;{ ok: boolean</text>
<text x="0.0" y="208.5" stroke="none" data-name="InvimaService" data-compartment="2">job: InvimaSyncJob | null</text>
<text x="0.0" y="224.7" stroke="none" data-name="InvimaService" data-compartment="2">}&gt;</text>
<text x="0.0" y="240.9" stroke="none" data-name="InvimaService" data-compartment="2">+exportCatalog(): Observable&lt;InvimaExportFile&gt;</text>
<text x="0.0" y="257.1" stroke="none" data-name="InvimaService" data-compartment="2">+buildExportUrl(): string</text>
</g>
</g>
</g>
<g data-name="CatalogQuery">
<g fill="lightgray" stroke="#33322E" data-name="CatalogQuery">
<rect x="2390.0" y="0.0" height="267.0" width="225.0" data-name="CatalogQuery"></rect>
<path d="M2390.0 32.0 L2615.0 32.0" fill="none" data-name="CatalogQuery"></path>
<path d="M2390.0 259.0 L2615.0 259.0" fill="none" data-name="CatalogQuery"></path>
</g>
<g transform="translate(2390, 0)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="CatalogQuery" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="CatalogQuery" data-compartment="0">
<a id="..\semillero\src\app\core\services\invima.service.ts.CatalogQuery" xlink:href="..\semillero\src\app\core\services\invima.service.ts"><text x="104.5" y="14.1" stroke="none" text-anchor="middle" data-name="CatalogQuery" data-compartment="0">CatalogQuery</text></a>
</g>
</g>
<g transform="translate(2390, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="CatalogQuery" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="CatalogQuery" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="CatalogQuery" data-compartment="1">+q?: string</text>
<text x="0.0" y="30.3" stroke="none" data-name="CatalogQuery" data-compartment="1">+categorias?: string[]</text>
<text x="0.0" y="46.5" stroke="none" data-name="CatalogQuery" data-compartment="1">+datasets?: string[]</text>
<text x="0.0" y="62.7" stroke="none" data-name="CatalogQuery" data-compartment="1">+estados?: string[]</text>
<text x="0.0" y="78.9" stroke="none" data-name="CatalogQuery" data-compartment="1">+modalidades?: string[]</text>
<text x="0.0" y="95.1" stroke="none" data-name="CatalogQuery" data-compartment="1">+grupos?: string[]</text>
<text x="0.0" y="111.3" stroke="none" data-name="CatalogQuery" data-compartment="1">+fechaVencDesde?: string</text>
<text x="0.0" y="127.5" stroke="none" data-name="CatalogQuery" data-compartment="1">+fechaVencHasta?: string</text>
<text x="0.0" y="143.7" stroke="none" data-name="CatalogQuery" data-compartment="1">+fechaExpDesde?: string</text>
<text x="0.0" y="159.9" stroke="none" data-name="CatalogQuery" data-compartment="1">+fechaExpHasta?: string</text>
<text x="0.0" y="176.1" stroke="none" data-name="CatalogQuery" data-compartment="1">+onlyVigentes?: boolean</text>
<text x="0.0" y="192.3" stroke="none" data-name="CatalogQuery" data-compartment="1">+limit?: number</text>
<text x="0.0" y="208.5" stroke="none" data-name="CatalogQuery" data-compartment="1">+offset?: number</text>
</g>
</g>
<g transform="translate(2390, 259)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="CatalogQuery" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" data-name="CatalogQuery" data-compartment="2">
</g>
</g>
</g>
<g data-name="InvimaExportFile">
<g fill="lightgray" stroke="#33322E" data-name="InvimaExportFile">
<rect x="2655.0" y="81.0" height="105.0" width="178.0" data-name="InvimaExportFile"></rect>
<path d="M2655.0 113.0 L2833.0 113.0" fill="none" data-name="InvimaExportFile"></path>
<path d="M2655.0 178.0 L2833.0 178.0" fill="none" data-name="InvimaExportFile"></path>
</g>
<g transform="translate(2655, 81)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaExportFile" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="InvimaExportFile" data-compartment="0">
<a id="..\semillero\src\app\core\services\invima.service.ts.InvimaExportFile" xlink:href="..\semillero\src\app\core\services\invima.service.ts"><text x="81.0" y="14.1" stroke="none" text-anchor="middle" data-name="InvimaExportFile" data-compartment="0">InvimaExportFile</text></a>
</g>
</g>
<g transform="translate(2655, 113)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaExportFile" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="InvimaExportFile" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="InvimaExportFile" data-compartment="1">+blob: Blob</text>
<text x="0.0" y="30.3" stroke="none" data-name="InvimaExportFile" data-compartment="1">+filename: string</text>
<text x="0.0" y="46.5" stroke="none" data-name="InvimaExportFile" data-compartment="1">+contentType: string</text>
</g>
</g>
<g transform="translate(2655, 178)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="InvimaExportFile" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" data-name="InvimaExportFile" data-compartment="2">
</g>
</g>
</g>
<g data-name="LoginPageComponent">
<g fill="#eee8d5" stroke="#33322E" data-name="LoginPageComponent">
<rect x="3148.0" y="37.0" height="193.0" width="292.0" data-name="LoginPageComponent"></rect>
<path d="M3148.0 69.0 L3440.0 69.0" fill="none" data-name="LoginPageComponent"></path>
<path d="M3148.0 198.0 L3440.0 198.0" fill="none" data-name="LoginPageComponent"></path>
</g>
<g transform="translate(3148, 37)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="LoginPageComponent" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="LoginPageComponent" data-compartment="0">
<a id="..\semillero\src\app\features\auth\login-page.component.ts.LoginPageComponent" xlink:href="..\semillero\src\app\features\auth\login-page.component.ts"><text x="138.0" y="14.1" stroke="none" text-anchor="middle" data-name="LoginPageComponent" data-compartment="0">LoginPageComponent</text></a>
</g>
</g>
<g transform="translate(3148, 69)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="LoginPageComponent" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="LoginPageComponent" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="LoginPageComponent" data-compartment="1">-auth: AuthService</text>
<text x="0.0" y="30.3" stroke="none" data-name="LoginPageComponent" data-compartment="1">-router: Router</text>
<text x="0.0" y="46.5" stroke="none" data-name="LoginPageComponent" data-compartment="1">-route: ActivatedRoute</text>
<text x="0.0" y="62.7" stroke="none" data-name="LoginPageComponent" data-compartment="1">+loading: WritableSignal&lt;boolean&gt;</text>
<text x="0.0" y="78.9" stroke="none" data-name="LoginPageComponent" data-compartment="1">+error: WritableSignal&lt;string&gt;</text>
<text x="0.0" y="95.1" stroke="none" data-name="LoginPageComponent" data-compartment="1">+identifier: string</text>
<text x="0.0" y="111.3" stroke="none" data-name="LoginPageComponent" data-compartment="1">+password: string</text>
</g>
</g>
<g transform="translate(3148, 198)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="LoginPageComponent" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="LoginPageComponent" data-compartment="2">
<text x="0.0" y="14.1" stroke="none" data-name="LoginPageComponent" data-compartment="2">+submit(): void</text>
</g>
</g>
</g>
<g data-name="DashboardPageComponent">
<g fill="#eee8d5" stroke="#33322E" data-name="DashboardPageComponent">
<rect x="2873.0" y="89.5" height="88.0" width="235.0" data-name="DashboardPageComponent"></rect>
<path d="M2873.0 121.5 L3108.0 121.5" fill="none" data-name="DashboardPageComponent"></path>
<path d="M2873.0 169.5 L3108.0 169.5" fill="none" data-name="DashboardPageComponent"></path>
</g>
<g transform="translate(2873, 89.5)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="DashboardPageComponent" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="DashboardPageComponent" data-compartment="0">
<a id="..\semillero\src\app\features\dashboard\dashboard-page.component.ts.DashboardPageComponent" xlink:href="..\semillero\src\app\features\dashboard\dashboard-page.component.ts"><text x="109.5" y="14.1" stroke="none" text-anchor="middle" data-name="DashboardPageComponent" data-compartment="0">DashboardPageComponent</text></a>
</g>
</g>
<g transform="translate(2873, 121.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="DashboardPageComponent" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="DashboardPageComponent" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="DashboardPageComponent" data-compartment="1">-auth: AuthService</text>
<text x="0.0" y="30.3" stroke="none" data-name="DashboardPageComponent" data-compartment="1">+fullName: Signal&lt;string&gt;</text>
</g>
</g>
<g transform="translate(2873, 169.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="DashboardPageComponent" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" data-name="DashboardPageComponent" data-compartment="2">
</g>
</g>
</g>
<g data-name="CatalogPageComponent">
<g fill="#eee8d5" stroke="#33322E" data-name="CatalogPageComponent">
<rect x="2541.3" y="307.0" height="777.0" width="424.0" data-name="CatalogPageComponent"></rect>
<path d="M2541.3 339.0 L2965.3 339.0" fill="none" data-name="CatalogPageComponent"></path>
<path d="M2541.3 809.0 L2965.3 809.0" fill="none" data-name="CatalogPageComponent"></path>
</g>
<g transform="translate(2541.25, 307)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="CatalogPageComponent" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="CatalogPageComponent" data-compartment="0">
<a id="..\semillero\src\app\features\invima\catalog-page.component.ts.CatalogPageComponent" xlink:href="..\semillero\src\app\features\invima\catalog-page.component.ts"><text x="204.0" y="14.1" stroke="none" text-anchor="middle" data-name="CatalogPageComponent" data-compartment="0">CatalogPageComponent</text></a>
</g>
</g>
<g transform="translate(2541.25, 339)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="CatalogPageComponent" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="CatalogPageComponent" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="CatalogPageComponent" data-compartment="1">-invima: InvimaService</text>
<text x="0.0" y="30.3" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+loading: WritableSignal&lt;boolean&gt;</text>
<text x="0.0" y="46.5" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+error: WritableSignal&lt;string&gt;</text>
<text x="0.0" y="62.7" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+exporting: WritableSignal&lt;&quot;csv&quot; | &quot;xlsx&quot; | null&gt;</text>
<text x="0.0" y="78.9" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+exportMessage: WritableSignal&lt;string&gt;</text>
<text x="0.0" y="95.1" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+exportError: WritableSignal&lt;string&gt;</text>
<text x="0.0" y="111.3" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+items: WritableSignal&lt;InvimaCatalogItem[]&gt;</text>
<text x="0.0" y="127.5" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+total: WritableSignal&lt;number&gt;</text>
<text x="0.0" y="143.7" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+categories: WritableSignal&lt;InvimaCategory[]&gt;</text>
<text x="0.0" y="159.9" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+datasets: WritableSignal&lt;InvimaDataset[]&gt;</text>
<text x="0.0" y="176.1" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+estados: WritableSignal&lt;InvimaFilterOption[]&gt;</text>
<text x="0.0" y="192.3" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+modalidades: WritableSignal&lt;InvimaFilterOption[]&gt;</text>
<text x="0.0" y="208.5" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+grupos: WritableSignal&lt;InvimaFilterOption[]&gt;</text>
<text x="0.0" y="224.7" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+selectedCategories: WritableSignal&lt;string[]&gt;</text>
<text x="0.0" y="240.9" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+selectedDatasets: WritableSignal&lt;string[]&gt;</text>
<text x="0.0" y="257.1" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+limit: WritableSignal&lt;number&gt;</text>
<text x="0.0" y="273.3" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+offset: WritableSignal&lt;number&gt;</text>
<text x="0.0" y="289.5" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+page: Signal&lt;number&gt;</text>
<text x="0.0" y="305.7" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+hasMore: Signal&lt;boolean&gt;</text>
<text x="0.0" y="321.9" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+qText: string</text>
<text x="0.0" y="338.1" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+estado: string</text>
<text x="0.0" y="354.3" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+modalidad: string</text>
<text x="0.0" y="370.5" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+grupo: string</text>
<text x="0.0" y="386.7" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+fechaVencDesde: string</text>
<text x="0.0" y="402.9" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+fechaVencHasta: string</text>
<text x="0.0" y="419.1" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+fechaExpDesde: string</text>
<text x="0.0" y="435.3" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+fechaExpHasta: string</text>
<text x="0.0" y="451.5" stroke="none" data-name="CatalogPageComponent" data-compartment="1">+onlyVigentes: boolean</text>
</g>
</g>
<g transform="translate(2541.25, 809)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="CatalogPageComponent" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="CatalogPageComponent" data-compartment="2">
<text x="0.0" y="14.1" stroke="none" data-name="CatalogPageComponent" data-compartment="2">-buildQuery(): CatalogQuery</text>
<text x="0.0" y="30.3" stroke="none" data-name="CatalogPageComponent" data-compartment="2">-loadMetadata(): void</text>
<text x="0.0" y="46.5" stroke="none" data-name="CatalogPageComponent" data-compartment="2">-loadData(): void</text>
<text x="0.0" y="62.7" stroke="none" data-name="CatalogPageComponent" data-compartment="2">+applyFilters(): void</text>
<text x="0.0" y="78.9" stroke="none" data-name="CatalogPageComponent" data-compartment="2">+clearFilters(): void</text>
<text x="0.0" y="95.1" stroke="none" data-name="CatalogPageComponent" data-compartment="2">+toggleCategory(): void</text>
<text x="0.0" y="111.3" stroke="none" data-name="CatalogPageComponent" data-compartment="2">+isCategorySelected(): boolean</text>
<text x="0.0" y="127.5" stroke="none" data-name="CatalogPageComponent" data-compartment="2">+toggleDataset(): void</text>
<text x="0.0" y="143.7" stroke="none" data-name="CatalogPageComponent" data-compartment="2">+isDatasetSelected(): boolean</text>
<text x="0.0" y="159.9" stroke="none" data-name="CatalogPageComponent" data-compartment="2">+changeLimit(): void</text>
<text x="0.0" y="176.1" stroke="none" data-name="CatalogPageComponent" data-compartment="2">+nextPage(): void</text>
<text x="0.0" y="192.3" stroke="none" data-name="CatalogPageComponent" data-compartment="2">+prevPage(): void</text>
<text x="0.0" y="208.5" stroke="none" data-name="CatalogPageComponent" data-compartment="2">+download(): void</text>
<text x="0.0" y="224.7" stroke="none" data-name="CatalogPageComponent" data-compartment="2">+formatDate(): string</text>
<text x="0.0" y="240.9" stroke="none" data-name="CatalogPageComponent" data-compartment="2">+isVigente(): boolean</text>
<text x="0.0" y="257.1" stroke="none" data-name="CatalogPageComponent" data-compartment="2">+isVencido(): boolean</text>
</g>
</g>
</g>
<g data-name="SyncPageComponent">
<g fill="#eee8d5" stroke="#33322E" data-name="SyncPageComponent">
<rect x="3667.0" y="412.5" height="566.0" width="509.0" data-name="SyncPageComponent"></rect>
<path d="M3667.0 444.5 L4176.0 444.5" fill="none" data-name="SyncPageComponent"></path>
<path d="M3667.0 735.5 L4176.0 735.5" fill="none" data-name="SyncPageComponent"></path>
</g>
<g transform="translate(3667, 412.5)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="SyncPageComponent" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="SyncPageComponent" data-compartment="0">
<a id="..\semillero\src\app\features\invima\sync-page.component.ts.SyncPageComponent" xlink:href="..\semillero\src\app\features\invima\sync-page.component.ts"><text x="246.5" y="14.1" stroke="none" text-anchor="middle" data-name="SyncPageComponent" data-compartment="0">SyncPageComponent</text></a>
</g>
</g>
<g transform="translate(3667, 444.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="SyncPageComponent" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="SyncPageComponent" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="SyncPageComponent" data-compartment="1">-invima: InvimaService</text>
<text x="0.0" y="30.3" stroke="none" data-name="SyncPageComponent" data-compartment="1">-refreshMs: 10000</text>
<text x="0.0" y="46.5" stroke="none" data-name="SyncPageComponent" data-compartment="1">-refreshHandle: number | null</text>
<text x="0.0" y="62.7" stroke="none" data-name="SyncPageComponent" data-compartment="1">-announcedFinalJobId: string | null</text>
<text x="0.0" y="78.9" stroke="none" data-name="SyncPageComponent" data-compartment="1">+loading: WritableSignal&lt;boolean&gt;</text>
<text x="0.0" y="95.1" stroke="none" data-name="SyncPageComponent" data-compartment="1">+message: WritableSignal&lt;string&gt;</text>
<text x="0.0" y="111.3" stroke="none" data-name="SyncPageComponent" data-compartment="1">+statsError: WritableSignal&lt;string&gt;</text>
<text x="0.0" y="127.5" stroke="none" data-name="SyncPageComponent" data-compartment="1">+jobError: WritableSignal&lt;string&gt;</text>
<text x="0.0" y="143.7" stroke="none" data-name="SyncPageComponent" data-compartment="1">+datasets: WritableSignal&lt;InvimaDataset[]&gt;</text>
<text x="0.0" y="159.9" stroke="none" data-name="SyncPageComponent" data-compartment="1">+selected: WritableSignal&lt;string[]&gt;</text>
<text x="0.0" y="176.1" stroke="none" data-name="SyncPageComponent" data-compartment="1">+stats: WritableSignal&lt;InvimaSyncStats | null&gt;</text>
<text x="0.0" y="192.3" stroke="none" data-name="SyncPageComponent" data-compartment="1">+job: WritableSignal&lt;InvimaSyncJob | null&gt;</text>
<text x="0.0" y="208.5" stroke="none" data-name="SyncPageComponent" data-compartment="1">+baselineTotal: WritableSignal&lt;number | null&gt;</text>
<text x="0.0" y="224.7" stroke="none" data-name="SyncPageComponent" data-compartment="1">+baselineByDataset: WritableSignal&lt;Record&lt;string, number&gt;&gt;</text>
<text x="0.0" y="240.9" stroke="none" data-name="SyncPageComponent" data-compartment="1">+liveAdded: Signal&lt;number&gt;</text>
<text x="0.0" y="257.1" stroke="none" data-name="SyncPageComponent" data-compartment="1">+pageSize: number</text>
<text x="0.0" y="273.3" stroke="none" data-name="SyncPageComponent" data-compartment="1">+concurrency: number</text>
</g>
</g>
<g transform="translate(3667, 735.5)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="SyncPageComponent" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="SyncPageComponent" data-compartment="2">
<text x="0.0" y="14.1" stroke="none" data-name="SyncPageComponent" data-compartment="2">+ngOnDestroy(): void</text>
<text x="0.0" y="30.3" stroke="none" data-name="SyncPageComponent" data-compartment="2">-loadStats(): void</text>
<text x="0.0" y="46.5" stroke="none" data-name="SyncPageComponent" data-compartment="2">-loadJob(): void</text>
<text x="0.0" y="62.7" stroke="none" data-name="SyncPageComponent" data-compartment="2">-ensureBaseline(): void</text>
<text x="0.0" y="78.9" stroke="none" data-name="SyncPageComponent" data-compartment="2">-refreshLiveMessage(): void</text>
<text x="0.0" y="95.1" stroke="none" data-name="SyncPageComponent" data-compartment="2">-buildFinalMessage(): string</text>
<text x="0.0" y="111.3" stroke="none" data-name="SyncPageComponent" data-compartment="2">-captureBaselineFromCurrentStats(): void</text>
<text x="0.0" y="127.5" stroke="none" data-name="SyncPageComponent" data-compartment="2">+datasetDelta(): number</text>
<text x="0.0" y="143.7" stroke="none" data-name="SyncPageComponent" data-compartment="2">+formatNumber(): string</text>
<text x="0.0" y="159.9" stroke="none" data-name="SyncPageComponent" data-compartment="2">+formatDateTime(): string</text>
<text x="0.0" y="176.1" stroke="none" data-name="SyncPageComponent" data-compartment="2">+toggle(): void</text>
<text x="0.0" y="192.3" stroke="none" data-name="SyncPageComponent" data-compartment="2">+isSelected(): boolean</text>
<text x="0.0" y="208.5" stroke="none" data-name="SyncPageComponent" data-compartment="2">+selectAll(): void</text>
<text x="0.0" y="224.7" stroke="none" data-name="SyncPageComponent" data-compartment="2">+sync(): void</text>
</g>
</g>
</g>
<g data-name="OnDestroy">
<g fill="#eee8d5" stroke="#33322E" data-name="OnDestroy">
<rect x="3871.5" y="117.5" height="32.0" width="100.0" data-name="OnDestroy"></rect>
</g>
<g transform="translate(3871.5, 117.5)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="OnDestroy" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="OnDestroy" data-compartment="0">
<text x="42.0" y="14.1" stroke="none" text-anchor="middle" data-name="OnDestroy" data-compartment="0">OnDestroy</text>
</g>
</g>
</g>
<g data-name="MainLayoutComponent">
<g fill="#eee8d5" stroke="#33322E" data-name="MainLayoutComponent">
<rect x="3488.5" y="61.0" height="145.0" width="199.0" data-name="MainLayoutComponent"></rect>
<path d="M3488.5 93.0 L3687.5 93.0" fill="none" data-name="MainLayoutComponent"></path>
<path d="M3488.5 174.0 L3687.5 174.0" fill="none" data-name="MainLayoutComponent"></path>
</g>
<g transform="translate(3488.5, 61)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="MainLayoutComponent" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="MainLayoutComponent" data-compartment="0">
<a id="..\semillero\src\app\features\layout\main-layout.component.ts.MainLayoutComponent" xlink:href="..\semillero\src\app\features\layout\main-layout.component.ts"><text x="91.5" y="14.1" stroke="none" text-anchor="middle" data-name="MainLayoutComponent" data-compartment="0">MainLayoutComponent</text></a>
</g>
</g>
<g transform="translate(3488.5, 93)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="MainLayoutComponent" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="MainLayoutComponent" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="MainLayoutComponent" data-compartment="1">+auth: AuthService</text>
<text x="0.0" y="30.3" stroke="none" data-name="MainLayoutComponent" data-compartment="1">-router: Router</text>
<text x="0.0" y="46.5" stroke="none" data-name="MainLayoutComponent" data-compartment="1">+menu: MenuItem[]</text>
<text x="0.0" y="62.7" stroke="none" data-name="MainLayoutComponent" data-compartment="1">+initials: Signal&lt;string&gt;</text>
</g>
</g>
<g transform="translate(3488.5, 174)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="MainLayoutComponent" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="MainLayoutComponent" data-compartment="2">
<text x="0.0" y="14.1" stroke="none" data-name="MainLayoutComponent" data-compartment="2">+logout(): void</text>
</g>
</g>
</g>
<g data-name="MenuItem">
<g fill="lightgray" stroke="#33322E" data-name="MenuItem">
<rect x="3509.0" y="643.0" height="105.0" width="118.0" data-name="MenuItem"></rect>
<path d="M3509.0 675.0 L3627.0 675.0" fill="none" data-name="MenuItem"></path>
<path d="M3509.0 740.0 L3627.0 740.0" fill="none" data-name="MenuItem"></path>
</g>
<g transform="translate(3509, 643)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="MenuItem" data-compartment="0">
<g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="MenuItem" data-compartment="0">
<a id="..\semillero\src\app\features\layout\main-layout.component.ts.MenuItem" xlink:href="..\semillero\src\app\features\layout\main-layout.component.ts"><text x="51.0" y="14.1" stroke="none" text-anchor="middle" data-name="MenuItem" data-compartment="0">MenuItem</text></a>
</g>
</g>
<g transform="translate(3509, 675)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="MenuItem" data-compartment="1">
<g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="MenuItem" data-compartment="1">
<text x="0.0" y="14.1" stroke="none" data-name="MenuItem" data-compartment="1">+label: string</text>
<text x="0.0" y="30.3" stroke="none" data-name="MenuItem" data-compartment="1">+path: string</text>
<text x="0.0" y="46.5" stroke="none" data-name="MenuItem" data-compartment="1">+hint: string</text>
</g>
</g>
<g transform="translate(3509, 740)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="MenuItem" data-compartment="2">
<g transform="translate(8, 8)" fill="#33322E" data-name="MenuItem" data-compartment="2">
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>