dta-vision-ocr
Version:
Biblioteca Angular com PO UI para extração de dados estruturados via OCR a partir de imagens ou PDFs, retornando JSON configurável com suporte a processamento em lote.
1 lines • 60.4 kB
Source Map (JSON)
{"version":3,"file":"dta-vision-ocr.mjs","sources":["../../../projects/dta-vision-ocr/src/lib/shared/enums/sesstion-status.enum.ts","../../../projects/dta-vision-ocr/src/environments.ts","../../../projects/dta-vision-ocr/src/lib/core/services/signal-r.service.ts","../../../projects/dta-vision-ocr/src/lib/core/https/dta-vision-authentication-token.api.ts","../../../projects/dta-vision-ocr/src/lib/core/services/dta-vision-authentication-token.service.ts","../../../projects/dta-vision-ocr/src/lib/core/https/jwt-auth.api.ts","../../../projects/dta-vision-ocr/src/lib/core/https/session-id.api.ts","../../../projects/dta-vision-ocr/src/lib/modules/dta-vision-ocr/dta-vision-ocr.component.ts","../../../projects/dta-vision-ocr/src/lib/modules/dta-vision-ocr/dta-vision-ocr.component.html","../../../projects/dta-vision-ocr/src/public-api.ts","../../../projects/dta-vision-ocr/src/dta-vision-ocr.ts"],"sourcesContent":["export enum SessionStatusEnum {\r\n /**\r\n * PENDENTE ==> (APAGAR EM 10 MINUTOS)\r\n */\r\n Pendente = 1,\r\n \r\n /**\r\n * ATIVADO ==> (ATUALIZAR EM 10 MINUTOS E DEPOIS 10 MINUTOS)\r\n * E APAGAR SE CASO ULTRAPASSAR OS 10 MINUTOS.\r\n */\r\n Ativado = 2,\r\n \r\n /**\r\n * Documento Processado ==> Entrou no loop de documentos.\r\n */\r\n DocumentoProcessado = 3,\r\n \r\n /**\r\n * Consumido ==> Após a chamada do loop mandar uma chamada.\r\n */\r\n Consumido = 4,\r\n \r\n /**\r\n * EXPIRADO ==> (Apenas para os status Pendente e Ativo).\r\n */\r\n Expirado = 5,\r\n \r\n /**\r\n * Error .==> caso ocorra algum erro.\r\n */\r\n Error = 100\r\n }","export const environment = {\r\n production: false,\r\n api: {\r\n dtaAuth: {\r\n baseUrl: 'https://auth.dta.totvs.io/api/productKey/auth',\r\n endpoints: {\r\n token: '/token',\r\n refreshToken: '/refresh-token'\r\n }\r\n }\r\n },\r\n apiHost: 'https://visiondocument.dta.totvs.io/',\r\n apiHostWebApp: 'https://visiondocumentwebapp.dta.totvs.io/',\r\n sessionStorageKeys: {\r\n idTotvsVisionDocument: '',\r\n idProjetoDocument: '',\r\n userDocument: '',\r\n contingencyDocument: ''\r\n }\r\n};","import { EventEmitter, Injectable, Output } from '@angular/core';\r\nimport * as signalR from '@microsoft/signalr';\r\nimport { DocumentResponse, DocumentModel } from '../../shared/models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SignalRService {\r\n private hubConnection: signalR.HubConnection | undefined;\r\n public host: string = '';\r\n public messageReceived = new EventEmitter<{ menssagem: DocumentResponse, uniqueKey: number }>();\r\n @Output() public statusUpdated = new EventEmitter<{ status: any }>();\r\n \r\n public initializeConnection(sessionID: string): void {\r\n // Fechar conexão existente antes de criar uma nova\r\n this.closeConnection();\r\n \r\n this.hubConnection = new signalR.HubConnectionBuilder()\r\n .withUrl(`${this.host}documentHub?SESSIONID=${sessionID}`, {\r\n transport: signalR.HttpTransportType.WebSockets,\r\n withCredentials: false\r\n })\r\n .configureLogging(signalR.LogLevel.Information)\r\n .withAutomaticReconnect()\r\n .build();\r\n\r\n this.hubConnection.onclose(() => {\r\n console.error('Connection closed');\r\n });\r\n }\r\n\r\n private closeConnection(): void {\r\n if (this.hubConnection) {\r\n // Fechar a conexão e remover listeners\r\n this.hubConnection.stop().then(() => {\r\n console.log('Connection closed');\r\n }).catch(err => console.error('Error closing connection:', err));\r\n this.hubConnection = undefined;\r\n }\r\n }\r\n\r\n public async startConnection(): Promise<void> {\r\n if (this.hubConnection?.state === signalR.HubConnectionState.Connected) {\r\n await this.hubConnection.stop();\r\n }\r\n try {\r\n await this.hubConnection?.start();\r\n } catch (err) {\r\n console.error(\"Error iniciar Hub:\", err);\r\n }\r\n }\r\n\r\n public async joinSession(sessionID: string): Promise<void> {\r\n try {\r\n if (this.hubConnection?.state === signalR.HubConnectionState.Connected) {\r\n await this.hubConnection.invoke('JoinSession', sessionID);\r\n this.ensureListening();\r\n }\r\n } catch (err) {\r\n console.error(\"Error ao iniciar session:\", err);\r\n }\r\n }\r\n\r\n public async leaveSession(sessionID: string): Promise<void> {\r\n try {\r\n if (this.hubConnection?.state === signalR.HubConnectionState.Connected) {\r\n await this.hubConnection.invoke('LeaveSession', sessionID);\r\n // Após deixar a sessão, feche a conexão para garantir limpeza total\r\n await this.hubConnection.stop();\r\n }\r\n } catch (err) {\r\n console.error(\"Error sair da session:\", err);\r\n }\r\n }\r\n\r\n public async formsLocal(sessionID: string | null, body: Array<DocumentModel | null>, idTotvs: string, idProjeto: string): Promise<Array<DocumentResponse> | undefined> {\r\n try {\r\n if (this.hubConnection?.state === signalR.HubConnectionState.Connected) {\r\n const bodyString = JSON.stringify(body);\r\n await this.hubConnection.invoke('SendMessage', sessionID, bodyString, idTotvs, idProjeto);\r\n }\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n return undefined;\r\n }\r\n\r\n private ensureListening(): void {\r\n // Primeiro, verifique se já temos a conexão\r\n if (!this.hubConnection) {\r\n return;\r\n }\r\n \r\n // Remova handlers existentes para evitar duplicações\r\n this.hubConnection.off(\"ReceiveMessage\");\r\n this.hubConnection.off(\"StatusUpdated\");\r\n \r\n // Registre os novos handlers\r\n this.hubConnection.on(\"ReceiveMessage\", (message) => {\r\n const documentResponse: DocumentResponse = JSON.parse(message);\r\n const uniqueKey = new Date().getTime();\r\n this.messageReceived.emit({ menssagem: documentResponse, uniqueKey });\r\n });\r\n \r\n this.hubConnection.on(\"StatusUpdated\", (status: any) => {\r\n this.statusUpdated.emit({ status });\r\n });\r\n \r\n }\r\n \r\n // Método para limpar recursos quando o componente é destruído\r\n public dispose(): void {\r\n this.closeConnection();\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { AuthenticationDtaModel, AuthenticationDtaResponseModel } from '../../shared/models/authentication-dta.model';\r\nimport { environment } from '../../../environments';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DtaVisionAuthenticationTokenApi {\r\n private readonly baseUrl = environment.api.dtaAuth.baseUrl;\r\n\r\n constructor(private readonly http: HttpClient) {}\r\n\r\n /**\r\n * Gera um novo token de autenticação\r\n */\r\n postToken(authenticationDtaModel: AuthenticationDtaModel): Observable<AuthenticationDtaResponseModel> {\r\n return this.http.post<AuthenticationDtaResponseModel>(`${this.baseUrl}${environment.api.dtaAuth.endpoints.token}`, authenticationDtaModel);\r\n }\r\n\r\n /**\r\n * Faz refresh do token atual\r\n */\r\n postRefreshToken(tokenJwt: string): Observable<AuthenticationDtaResponseModel> {\r\n const headers = new HttpHeaders().set('Authorization', `Bearer ${tokenJwt}`);\r\n return this.http.post<AuthenticationDtaResponseModel>(`${this.baseUrl}${environment.api.dtaAuth.endpoints.refreshToken}`, {}, { headers });\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { Observable, of, map, throwError } from 'rxjs';\r\nimport { DtaVisionAuthenticationTokenApi } from '../https/dta-vision-authentication-token.api';\r\nimport { AuthenticationDtaModel, AuthenticationDtaResponseModel } from '../../shared/models/authentication-dta.model';\r\nimport { environment } from '../../../environments';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DtaVisionAuthenticationTokenService {\r\n private readonly storageKey = 'jwtDtaVision';\r\n private readonly authModelStorageKey = 'authModelDtaVision'; // para salvar o modelo no storage\r\n private readonly expWarningSeconds = 300; // 5 minutos\r\n\r\n constructor(private readonly dtaVisionAuthenticationTokenApi: DtaVisionAuthenticationTokenApi) {}\r\n\r\n /**\r\n * Gera o token e armazena no sessionStorage\r\n */\r\n generateAndStoreToken(authenticationDtaModel: AuthenticationDtaModel): Observable<AuthenticationDtaResponseModel> {\r\n return this.dtaVisionAuthenticationTokenApi.postToken(authenticationDtaModel).pipe(\r\n map(response => {\r\n if (response.token) {\r\n sessionStorage.setItem(this.storageKey, response.token);\r\n }\r\n return response;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Faz refresh do token atual e armazena no sessionStorage\r\n */\r\n refreshToken(tokenJwt: string): Observable<AuthenticationDtaResponseModel> {\r\n return this.dtaVisionAuthenticationTokenApi.postRefreshToken(tokenJwt).pipe(\r\n map(response => {\r\n if (response.token) {\r\n sessionStorage.setItem(this.storageKey, response.token);\r\n }\r\n return response;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Verifica se o token armazenado é válido (não expirado)\r\n */\r\n isTokenValid(): boolean {\r\n const token = this.getToken();\r\n if (!token) return false;\r\n const payload = token.split('.')[1];\r\n if (!payload) return false;\r\n\r\n try {\r\n const decoded = JSON.parse(atob(payload));\r\n if (!decoded.exp) return false;\r\n const now = Math.floor(Date.now() / 1000);\r\n return decoded.exp > now;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Obtém o token JWT salvo no sessionStorage\r\n */\r\n getToken(): string | null {\r\n return sessionStorage.getItem(this.storageKey);\r\n }\r\n\r\n /**\r\n * Salva o model de autenticação no sessionStorage (como JSON)\r\n */\r\n setAuthModelToStorage() {\r\n const model: AuthenticationDtaModel = {\r\n totvsId: sessionStorage.getItem('idTotvsVisionDocument') ?? environment.sessionStorageKeys.idTotvsVisionDocument,\r\n projectId: sessionStorage.getItem('idProjetoDocument') ?? environment.sessionStorageKeys.idProjetoDocument,\r\n user: sessionStorage.getItem('userDocument') ?? environment.sessionStorageKeys.userDocument,\r\n contingency: sessionStorage.getItem('contingencyDocument') ?? environment.sessionStorageKeys.contingencyDocument,\r\n applicationID: 1\r\n }\r\n\r\n sessionStorage.setItem(this.authModelStorageKey, JSON.stringify(model));\r\n }\r\n\r\n /**\r\n * Recupera o model de autenticação salvo no sessionStorage\r\n */\r\n getAuthModelFromStorage(): AuthenticationDtaModel | null {\r\n const data = sessionStorage.getItem(this.authModelStorageKey);\r\n return data ? JSON.parse(data) : null;\r\n }\r\n\r\n /**\r\n * Garante um token válido: se expirado, faz novo login,\r\n * se perto de expirar, faz refresh, senão retorna o atual\r\n */\r\n getTokenValidOrRefresh(): Observable<string> {\r\n const token = this.getToken();\r\n \r\n // Cria o modelo de autenticação usando os dados corretos do sessionStorage\r\n const authModel: AuthenticationDtaModel = {\r\n totvsId: sessionStorage.getItem('idTotvsVisionDocument') ?? environment.sessionStorageKeys.idTotvsVisionDocument,\r\n projectId: sessionStorage.getItem('idProjetoDocument') ?? environment.sessionStorageKeys.idProjetoDocument,\r\n user: sessionStorage.getItem('userDocument') ?? environment.sessionStorageKeys.userDocument,\r\n contingency: sessionStorage.getItem('contingencyDocument') ?? environment.sessionStorageKeys.contingencyDocument,\r\n applicationID: 1\r\n };\r\n \r\n // Não existe token? Gerar novo\r\n if (!token) {\r\n if (!authModel.totvsId || !authModel.projectId || !authModel.user) {\r\n return throwError(() => new Error('Dados de autenticação DTA-VISION-DOCUMENT incompletos no sessionStorage.'));\r\n }\r\n return this.generateAndStoreToken(authModel).pipe(\r\n map(res => {\r\n if (!res.token) throw new Error('Falha ao gerar novo token!');\r\n return res.token;\r\n })\r\n );\r\n }\r\n\r\n // Checar expiração e refresh\r\n const payload = token.split('.')[1];\r\n if (!payload) {\r\n if (!authModel.totvsId || !authModel.projectId || !authModel.user) {\r\n return throwError(() => new Error('Token inválido e dados de autenticação DTA-VISION-DOCUMENT incompletos.'));\r\n }\r\n return this.generateAndStoreToken(authModel).pipe(\r\n map(res => {\r\n if (!res.token) throw new Error('Falha ao gerar novo token!');\r\n return res.token;\r\n })\r\n );\r\n }\r\n\r\n let decoded: { exp: number };\r\n try {\r\n decoded = JSON.parse(atob(payload));\r\n } catch {\r\n if (!authModel.totvsId || !authModel.projectId || !authModel.user) {\r\n return throwError(() => new Error('Token inválido e dados de autenticação DTA-VISION-DOCUMENT incompletos.'));\r\n }\r\n return this.generateAndStoreToken(authModel).pipe(\r\n map(res => {\r\n if (!res.token) throw new Error('Falha ao gerar novo token!');\r\n return res.token;\r\n })\r\n );\r\n }\r\n\r\n const now = Math.floor(Date.now() / 1000);\r\n // Expirado já?\r\n if (!decoded.exp || decoded.exp <= now) {\r\n if (!authModel.totvsId || !authModel.projectId || !authModel.user) {\r\n return throwError(() => new Error('Token expirado e dados de autenticação DTA-VISION-DOCUMENT incompletos.'));\r\n }\r\n return this.generateAndStoreToken(authModel).pipe(\r\n map(res => {\r\n if (!res.token) throw new Error('Falha ao gerar novo token!');\r\n return res.token;\r\n })\r\n );\r\n }\r\n // Perto de expirar: faz refresh!\r\n if (decoded.exp - now < this.expWarningSeconds) {\r\n return this.refreshToken(token).pipe(\r\n map(res => {\r\n if (!res.token) throw new Error('Falha ao renovar token!');\r\n return res.token;\r\n })\r\n );\r\n }\r\n // Se chegou aqui, token está válido e seguro para uso!\r\n return of(token);\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { HttpClient, HttpHeaders } from \"@angular/common/http\";\r\nimport { Observable, of, BehaviorSubject } from \"rxjs\";\r\nimport { map, catchError } from \"rxjs/operators\";\r\nimport { environment } from \"../../../environments\";\r\n\r\nconst TOKEN_URL = `${environment.api.dtaAuth.baseUrl}${environment.api.dtaAuth.endpoints.token}`;\r\nconst REFRESH_URL = `${environment.api.dtaAuth.baseUrl}${environment.api.dtaAuth.endpoints.refreshToken}`;\r\n\r\ninterface TokenPayload {\r\n exp: number;\r\n [key: string]: any;\r\n}\r\n\r\ninterface Credentials {\r\n totvsId: string;\r\n projectId: string;\r\n user: string;\r\n contingency: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class JwtAuthApi {\r\n private readonly tokenSubject = new BehaviorSubject<{\r\n credentials: Credentials,\r\n token: string\r\n } | null>(null);\r\n\r\n constructor(private readonly http: HttpClient) { }\r\n\r\n getValidToken(credentials: Credentials): Observable<string> {\r\n const cache = this.tokenSubject.value;\r\n if (cache && this.isSameCredentials(credentials, cache.credentials) && !this.isTokenExpiring(cache.token)) {\r\n return of(cache.token);\r\n }\r\n\r\n if (cache && this.isSameCredentials(credentials, cache.credentials) && this.isTokenExpiring(cache.token)) {\r\n return this.refreshToken(cache.token).pipe(\r\n map(token => {\r\n this.tokenSubject.next({ credentials, token });\r\n return token;\r\n }),\r\n catchError(() => {\r\n return this.createToken(credentials).pipe(\r\n map(token => {\r\n this.tokenSubject.next({ credentials, token });\r\n return token;\r\n })\r\n );\r\n })\r\n );\r\n }\r\n\r\n return this.createToken(credentials).pipe(\r\n map(token => {\r\n this.tokenSubject.next({ credentials, token });\r\n return token;\r\n })\r\n );\r\n }\r\n\r\n private isSameCredentials(a: Credentials, b: Credentials): boolean {\r\n return (\r\n a.totvsId === b.totvsId &&\r\n a.projectId === b.projectId &&\r\n a.user === b.user &&\r\n a.contingency === b.contingency\r\n );\r\n }\r\n\r\n private createToken(credentials: Credentials): Observable<string> {\r\n return this.http.post<{ token: string }>(TOKEN_URL, credentials)\r\n .pipe(map(resp => resp.token));\r\n }\r\n\r\n private refreshToken(token: string): Observable<string> {\r\n const headers = new HttpHeaders().set('Authorization', `Bearer ${token}`);\r\n return this.http.post<{ token: string }>(REFRESH_URL, {}, { headers })\r\n .pipe(map(resp => resp.token));\r\n }\r\n\r\n private decodeJwt(token: string): TokenPayload | null {\r\n try {\r\n const base64 = token.split('.')[1].replace(/-/g, '+').replace(/_/g, '/');\r\n const jsonPayload = decodeURIComponent(atob(base64)\r\n .split('')\r\n .map(c => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))\r\n .join(''));\r\n return JSON.parse(jsonPayload);\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n private isTokenExpiring(token: string, rangeSeconds = 60): boolean {\r\n const payload = this.decodeJwt(token);\r\n if (!payload?.exp) return true;\r\n const nowSec = Math.floor(Date.now() / 1000);\r\n return (payload.exp - nowSec) < rangeSeconds;\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { ButtonDocumentModel, SessionIDModel } from \"../../shared/models\";\r\nimport { HttpClient, HttpHeaders } from \"@angular/common/http\";\r\nimport { Observable, switchMap } from \"rxjs\";\r\nimport { JwtAuthApi } from \"./jwt-auth.api\";\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SessionIdApi {\r\n constructor(private readonly http: HttpClient, private readonly jwtAuthApi: JwtAuthApi) { }\r\n\r\n post(\r\n host: string,\r\n idDTAVision: string,\r\n idProjeto: string,\r\n user: string,\r\n contingency: string,\r\n buttonDocumentModel: Array<ButtonDocumentModel>\r\n ): Observable<SessionIDModel> {\r\n const credentials = {\r\n totvsId: idDTAVision,\r\n projectId: idProjeto,\r\n user: user,\r\n contingency: contingency\r\n };\r\n return this.jwtAuthApi.getValidToken(credentials).pipe(\r\n switchMap(token => {\r\n const headers = new HttpHeaders()\r\n .set('Content-Type', 'application/json')\r\n .set('Authorization', `Bearer ${token}`);\r\n return this.http.post<SessionIDModel>(\r\n `${host}api/dta-vision-ocr/new-session`,\r\n buttonDocumentModel,\r\n { headers }\r\n );\r\n })\r\n );\r\n }\r\n\r\n delete(host: string, sessionID: string): Observable<any> {\r\n let headers = new HttpHeaders();\r\n headers = headers.set('Content-Type', 'application/json');\r\n headers = headers.set('SESSIONID', `${sessionID}`);\r\n return this.http.delete(`${host}api/dta-vision-ocr/session-id`, { headers, responseType: 'text' });\r\n }\r\n}","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { PoDialogService, PoModalComponent, PoModule, PoNotificationService } from '@po-ui/ng-components';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { SessionIdApi } from '../../core/https/session-id.api';\r\nimport { SignalRService } from '../../core/services';\r\nimport { ButtonDocumentModel, DocumentResponse, SessionIDModel } from '../../shared/models';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { SessionStatusEnum } from '../../shared/enums';\r\nimport { Subscription } from 'rxjs';\r\nimport { environment } from '../../../environments';\r\n\r\n@Component({\r\n selector: 'dta-vision-ocr',\r\n standalone: true,\r\n imports: [CommonModule, PoModule, FormsModule],\r\n templateUrl: './dta-vision-ocr.component.html',\r\n styleUrl: './dta-vision-ocr.component.css'\r\n})\r\nexport class DTAVisionOCRComponent implements OnInit, OnDestroy {\r\n @Input() public idDTAVision: string = '';\r\n @Input() public idProjeto: string = '';\r\n @Input() public listButtonsDocument: Array<ButtonDocumentModel> = [];\r\n @Input() public user: string = '';\r\n @Input() public contingency: string = '';\r\n @Output() informacaoEnviada = new EventEmitter<{\r\n menssagem: DocumentResponse,\r\n uniqueKey: number\r\n }>();\r\n \r\n loading: boolean = false;\r\n screenLock: boolean = false;\r\n\r\n doesNotDisplayMessage: boolean = localStorage?.getItem('doesNotDisplayMessage') === 'true';\r\n telaInicial: boolean = true;\r\n\r\n // Agora é SafeResourceUrl e será usada com [attr.src]\r\n iframeSrc?: SafeResourceUrl;\r\n\r\n sessionText: string = 'Sessão iniciada. Para gerar nova sessão, aguarde 1m 30s';\r\n private readonly host = environment.apiHost; // \"https://visiondocument.dta.totvs.io/\";\r\n private readonly hostWebApp = environment.apiHostWebApp; // \"https://visiondocumentwebapp.dta.totvs.io/\";\r\n private routeWeb = '#/doc/';\r\n private sessionID: string | null | undefined;\r\n statusDocument: SessionStatusEnum = SessionStatusEnum.Pendente;\r\n private statusSubscription: Subscription | undefined;\r\n\r\n isMobileDevice: boolean = false;\r\n sessionExpired: boolean = false;\r\n listDocumentUniqueKey: Array<number> = [];\r\n\r\n constructor(\r\n private readonly poNotificationService: PoNotificationService,\r\n private readonly signalRService: SignalRService,\r\n private readonly sessionIDApi: SessionIdApi,\r\n public poDialog: PoDialogService,\r\n private readonly route: ActivatedRoute,\r\n private readonly sanitizer: DomSanitizer\r\n ) {}\r\n\r\n @ViewChild(PoModalComponent, { static: true }) webAppModal?: PoModalComponent;\r\n\r\n ngOnInit(): void {\r\n // Check if sessionId is provided via route parameter\r\n const routeSessionId = this.route.snapshot.paramMap.get('sessionId');\r\n if (routeSessionId) {\r\n this.sessionID = routeSessionId;\r\n const objectOCR = {\r\n sessionID: routeSessionId,\r\n expiredAt: new Date(Date.now() + 10 * 60 * 1000).toISOString() // 10 minutes from now\r\n };\r\n sessionStorage.setItem('DTAVisionocrdata', JSON.stringify(objectOCR));\r\n }\r\n \r\n this.telaInicial = !this.doesNotDisplayMessage;\r\n this.signalRService.host = this.host;\r\n this.validateSession();\r\n this.openWebAppModal();\r\n this.initializeSignalRConnection();\r\n this.initializeSessionStatus();\r\n }\r\n\r\n private initializeSessionStatus() {\r\n this.statusSubscription = this.signalRService.statusUpdated.subscribe({\r\n next: (statusUpdate: { status: string; }) => {\r\n this.statusDocument = Number(statusUpdate.status);\r\n },\r\n error: (err: unknown) => console.error('Erro ao receber atualização de status:', err)\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.statusSubscription?.unsubscribe();\r\n this.signalRService.dispose();\r\n }\r\n\r\n documentProcess(): boolean {\r\n return this.statusDocument == SessionStatusEnum.DocumentoProcessado;\r\n }\r\n\r\n openDialog() {\r\n this.poDialog.confirm({\r\n title: 'Criar nova sessão',\r\n message: 'Tem certeza de que deseja criar uma nova sessão ?',\r\n confirm: () => this.newSession(),\r\n cancel: () => {},\r\n literals: { cancel: 'Cancelar', confirm: 'Criar nova sessão' },\r\n });\r\n }\r\n\r\n iniciarSessao(): void {\r\n this.telaInicial = false;\r\n }\r\n\r\n openWebAppModal(): void {\r\n this.sessionID = sessionStorage.getItem('DTAVisionocrdata')\r\n ? JSON.parse(sessionStorage.getItem('DTAVisionocrdata') ?? '').sessionID\r\n : null;\r\n\r\n if (this.sessionID == null || this.sessionID == undefined) {\r\n this.getSessionID();\r\n } else if (this.webAppModal) {\r\n this.setUrl();\r\n if (this.iframeSrc) {\r\n this.webAppModal.open();\r\n }\r\n }\r\n }\r\n\r\n closeWebAppModal() {\r\n if (this.webAppModal) {\r\n this.webAppModal.close();\r\n }\r\n }\r\n\r\n async newSession() {\r\n // Remove informações da sessão\r\n if (this.sessionID) {\r\n await this.signalRService.leaveSession(this.sessionID);\r\n }\r\n\r\n sessionStorage.removeItem('DTAVisionocrdata');\r\n this.telaInicial = true;\r\n this.sessionID = null;\r\n\r\n // Limpa o iframe e alterna a rota para forçar recarregamento\r\n this.iframeSrc = undefined;\r\n this.routeWeb = this.routeWeb === '#/doc/' ? '#/doc1/' : '#/doc/';\r\n\r\n // Reinicializa após um pequeno delay\r\n setTimeout(() => {\r\n this.ngOnInit();\r\n }, 100);\r\n }\r\n\r\n private validateSession(): void {\r\n const ocr = sessionStorage.getItem('DTAVisionocrdata');\r\n if (!ocr) return;\r\n\r\n const objectOCR = JSON.parse(ocr);\r\n this.sessionID = objectOCR.sessionID;\r\n this.setUrl();\r\n }\r\n\r\n // Monta e valida a URL do iframe; aplica whitelist de origem\r\n private setUrl() {\r\n if (!this.sessionID) return;\r\n\r\n const url = `${this.hostWebApp}${this.routeWeb}${this.sessionID}`;\r\n if (this.isAllowedUrl(url)) {\r\n this.iframeSrc = this.sanitizer.bypassSecurityTrustResourceUrl(url);\r\n } else {\r\n console.error('URL não permitida para iframe:', url);\r\n this.iframeSrc = undefined;\r\n }\r\n }\r\n\r\n private isAllowedUrl(url: string): boolean {\r\n try {\r\n const allowedOrigin = new URL(this.hostWebApp).origin;\r\n const urlOrigin = new URL(url, window.location.origin).origin;\r\n return urlOrigin === allowedOrigin;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n private async initializeSignalRConnection(): Promise<void> {\r\n try {\r\n if (this.sessionID && this.idProjeto) {\r\n this.signalRService.initializeConnection(this.sessionID);\r\n await this.signalRService.startConnection();\r\n this.joinSession(this.sessionID ?? '');\r\n\r\n this.signalRService.messageReceived.subscribe((data) => {\r\n if (this.listDocumentUniqueKey.includes(data.uniqueKey)) return;\r\n\r\n this.listDocumentUniqueKey.push(data.uniqueKey);\r\n this.listDocumentUniqueKey = this.listDocumentUniqueKey.slice(-5);\r\n\r\n this.informacaoEnviada.emit(data);\r\n this.sessionID = null;\r\n sessionStorage.removeItem('DTAVisionocrdata');\r\n });\r\n }\r\n } catch (error) {\r\n console.error('Erro ao iniciar conexão:', error);\r\n this.poNotificationService.error('Erro ao iniciar conexão. Verifique os detalhes no console.');\r\n }\r\n }\r\n\r\n private joinSession(sessionID: string): void {\r\n this.signalRService.joinSession(sessionID).then().catch(err => console.error(err));\r\n }\r\n\r\n private getSessionID(): void {\r\n if (this.listButtonsDocument.length === 0) {\r\n this.poNotificationService.error('Nenhum documento criado');\r\n return;\r\n }\r\n\r\n this.loading = true;\r\n this.screenLock = true;\r\n\r\n this.sessionIDApi.post(\r\n this.signalRService.host,\r\n this.idDTAVision,\r\n this.idProjeto,\r\n this.user,\r\n this.contingency,\r\n this.listButtonsDocument\r\n ).subscribe({\r\n next: (response: SessionIDModel) => {\r\n if (!response.sessionID) return;\r\n\r\n this.sessionID = response.sessionID;\r\n const objectOCR = {\r\n sessionID: response.sessionID,\r\n expiredAt: response.expiredAt\r\n };\r\n sessionStorage.setItem('DTAVisionocrdata', JSON.stringify(objectOCR));\r\n\r\n this.openWebAppModal();\r\n this.initializeSignalRConnection();\r\n },\r\n error: () => {\r\n this.loading = false;\r\n this.screenLock = false;\r\n },\r\n complete: () => {\r\n this.loading = false;\r\n this.screenLock = false;\r\n }\r\n });\r\n }\r\n\r\n onCheckboxChange() {\r\n localStorage.setItem('doesNotDisplayMessage', String(this.doesNotDisplayMessage));\r\n }\r\n}","<po-modal #webAppModal p-title=\"DTA Vision Document\" [p-hide-close]=\"true\">\r\n <po-loading-overlay [hidden]=\"!loading\" [p-screen-lock]=\"screenLock\">\r\n </po-loading-overlay>\r\n\r\n <div class=\"modal-content\" *ngIf=\"this.telaInicial\">\r\n <svg class=\"logo\" width=\"96\" height=\"96\" viewBox=\"0 0 96 96\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g clip-path=\"url(#clip0_112_3648)\">\r\n <mask id=\"mask0_112_3648\" style=\"mask-type:luminance\" maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"96\"\r\n height=\"96\">\r\n <path d=\"M96 0H0V96H96V0Z\" fill=\"white\" />\r\n </mask>\r\n <g mask=\"url(#mask0_112_3648)\">\r\n <mask id=\"mask1_112_3648\" style=\"mask-type:alpha\" maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"96\"\r\n height=\"96\">\r\n <path\r\n d=\"M48 96C74.5096 96 96 74.5096 96 48C96 21.4903 74.5096 0 48 0C21.4903 0 0 21.4903 0 48C0 74.5096 21.4903 96 48 96Z\"\r\n fill=\"#924242\" />\r\n </mask>\r\n <g mask=\"url(#mask1_112_3648)\">\r\n <path\r\n d=\"M47.04 94.08C73.0195 94.08 94.08 73.0195 94.08 47.04C94.08 21.0605 73.0195 0 47.04 0C21.0605 0 0 21.0605 0 47.04C0 73.0195 21.0605 94.08 47.04 94.08Z\"\r\n fill=\"#F2F2F2\" />\r\n <g opacity=\"0.4\">\r\n <path\r\n d=\"M221.76 86.622C204.962 86.88 192.543 86.3981 148.195 72.6726C73.3583 49.5105 41.7616 84.96 2.41178e-05 86.88C-2.6694e-05 79.5684 2.20514e-05 27.8399 5.36486e-07 16.32C37.6021 15.8399 59.0416 17.4017 118.863 39.9143C175.939 61.3934 190.562 16.3201 221.76 16.3201C221.76 26.4 221.76 76.8 221.76 86.622Z\"\r\n fill=\"#E042E3\" />\r\n </g>\r\n <g opacity=\"0.2\">\r\n <path\r\n d=\"M220.8 69.1201C204 74.4 187.179 93.5393 164.64 93.6C140.856 93.664 117.904 84.4963 90.2487 72.7441C41.4259 51.9973 5.27999 66.24 1.77264e-05 69.1201C2.22364e-06 63.36 -8.17627e-06 36.2743 8.5321e-06 23.5201C14.88 16.8 47.6413 13.5319 117.422 39.5581C171.928 59.887 215.04 26.4 220.8 23.52C220.8 34.56 220.8 60.96 220.8 69.1201Z\"\r\n fill=\"#DF6DFF\" />\r\n </g>\r\n <g opacity=\"0.2\">\r\n <path\r\n d=\"M276.481 97.4399C250.081 95.04 226.73 81.5462 186.241 84C107.041 88.8 85.9208 113.28 9.0922e-06 97.4399C9.0922e-06 71.5702 -1.59244e-05 44.6397 1.70347e-05 36.9599C20.1608 31.68 59.0599 16.9619 147.312 51.6165C218.325 79.5016 252.961 42.72 276.481 36.9599C276.481 47.5199 276.481 80.5993 276.481 97.4399Z\"\r\n fill=\"#045B8F\" />\r\n </g>\r\n <g opacity=\"0.7\">\r\n <path\r\n d=\"M273.6 52.1605C251.04 60.4801 240.48 77.3762 216.96 78.2399C188.776 79.2748 138.792 58.7341 99.36 52.1605C85.92 49.92 77.7418 47.9971 52.32 46.56C28.7043 45.225 20.16 46.0801 2.63617e-06 52.1605C2.63617e-06 29.3741 -7.43463e-06 32.1599 1.17914e-05 24.9599C19.68 22.08 39.36 17.76 83.52 29.2801C101.657 34.0116 133.375 46.681 149.53 53.1205C216 81.1198 228.48 32.16 273.6 24.9599C273.6 37.0273 273.6 28.2697 273.6 52.1605Z\"\r\n fill=\"#A541A7\" />\r\n </g>\r\n </g>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M48 5.48573C24.52 5.48573 5.48573 24.52 5.48573 48C5.48573 71.4803 24.52 90.5145 48 90.5145C71.4802 90.5145 90.5145 71.4802 90.5145 48C90.5145 24.52 71.4803 5.48573 48 5.48573ZM0 48C0 21.4903 21.4903 0 48 0C74.5099 0 96 21.4903 96 48C96 74.5099 74.5099 96 48 96C21.4903 96 0 74.5099 0 48Z\"\r\n fill=\"url(#paint0_linear_112_3648)\" />\r\n </g>\r\n </g>\r\n <defs>\r\n <linearGradient id=\"paint0_linear_112_3648\" x1=\"72\" y1=\"0.959995\" x2=\"21.12\" y2=\"87.36\"\r\n gradientUnits=\"userSpaceOnUse\">\r\n <stop stop-color=\"#1271A9\" />\r\n <stop offset=\"1\" stop-color=\"#A826AB\" />\r\n </linearGradient>\r\n <clipPath id=\"clip0_112_3648\">\r\n <rect width=\"96\" height=\"96\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n\r\n <h3 class=\"c-modal-title po-font-title\">Boas-vindas ao DTA Vision Document</h3>\r\n <p class=\"c-modal-subtext po-font-text\">Este é o assistente para envio otimizado de documentos. Assim que você\r\n concluir o upload dos documentos, as informações serão carregadas automaticamente no sistema.</p>\r\n <po-accordion class=\"c-modal-accordion-instructions\">\r\n <po-accordion-item p-label=\"Orientações para envio dos documentos\">\r\n <div class=\"instruction-item\">\r\n <i class=\"ph ph-seal-check\"></i>\r\n <p class=\"po-font-text\">Tamanho do documento: Até 2MP</p>\r\n </div>\r\n <div class=\"instruction-item\">\r\n <i class=\"ph ph-seal-check\"></i>\r\n <p class=\"po-font-text\">Imagem legível e na horizontal</p>\r\n </div>\r\n <div class=\"instruction-item\">\r\n <i class=\"ph ph-seal-check\"></i>\r\n <p class=\"po-font-text\">Documentos suportados: PNG, JPEG, JPG, WEBP e PDF (máximo de 10 páginas por PDF).</p> \r\n </div>\r\n </po-accordion-item>\r\n </po-accordion>\r\n <p class=\"c-modal-subtext\">Lembre-se, a sessão para upload dos documentos dura 10 minutos. Caso o tempo se esgote, o\r\n processo deverá ser reiniciado. <strong>Quando estiver pronto, clique em Avançar!</strong></p>\r\n \r\n <div style=\"margin-bottom: 16px;\">\r\n <po-checkbox \r\n p-label=\"Não exibir a mensagem de boas-vindas novamente.\"\r\n [(ngModel)]=\"doesNotDisplayMessage\"\r\n (p-change)=\"onCheckboxChange()\">\r\n </po-checkbox>\r\n </div>\r\n \r\n <po-modal-footer *ngIf=\"this.telaInicial\">\r\n <po-button p-icon=\"ph ph-caret-right\" p-label=\"Iniciar Sessão\" p-kind=\"primary\"\r\n (p-click)=\"iniciarSessao()\"></po-button>\r\n <po-button p-label=\"Fechar\" (p-click)=\"closeWebAppModal()\"></po-button>\r\n </po-modal-footer>\r\n </div>\r\n \r\n <div class=\"session-info\" *ngIf=\"!telaInicial && iframeSrc\">\r\n <iframe\r\n [attr.src]=\"iframeSrc\"\r\n class=\"full-height-iframe\"\r\n title=\"Web Viewer\">\r\n </iframe>\r\n </div>\r\n <po-modal-footer *ngIf=\"!this.telaInicial\">\r\n <po-button p-label=\"Criar nova sessão\" (p-click)=\"openDialog()\" \r\n p-icon=\"ph ph-arrows-clockwise\"> </po-button>\r\n <po-button p-label=\"Fechar\" (p-click)=\"closeWebAppModal()\"></po-button>\r\n </po-modal-footer>\r\n</po-modal>","/*\r\n * Public API Surface of dta-vision-ocr\r\n*/\r\n\r\nexport * from './lib/modules/dta-vision-ocr/dta-vision-ocr.component';\r\nexport * from './lib/shared/models';\r\nexport * from './lib/core/services';\r\nexport * from './lib/core/https/dta-vision-authentication-token.api';\r\nexport * from './environments';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.DtaVisionAuthenticationTokenApi","map","i2.JwtAuthApi","i1","i2.SignalRService","i3.SessionIdApi"],"mappings":"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"}