File size: 22,280 Bytes
d4b7c04
f641e6a
d4b7c04
03c3684
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d4b7c04
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f641e6a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0e6871c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
from typing import Dict, List, Optional
from pydantic import BaseModel, Field, validator, field_validator
from datetime import datetime


class PsxStock(BaseModel):
    script_code: str
    script_name: str
    ldcp: str
    open: str
    high: str
    low: str
    current: str
    change: str
    volume: str
    trend: str


class PsxMarketResponse(BaseModel):
    sectors: Dict[str, List[PsxStock]]
    

    
class CircuitBreaker(BaseModel):
    lower_limit: float = Field(..., alias="lowerLimit")
    upper_limit: float = Field(..., alias="upperLimit")
    current_price: float = Field(..., alias="currentPrice")

class DayRange(BaseModel):
    low: float
    high: float
    current: float

class YearRange(BaseModel):
    low: float
    high: float
    current: float

class TradingStats(BaseModel):
    open_price: Optional[float] = Field(None, alias="open")
    high_price: Optional[float] = Field(None, alias="high")
    low_price: Optional[float] = Field(None, alias="low")
    close_price: Optional[float] = Field(None, alias="close")
    volume: Optional[int] = None
    ask_price: Optional[float] = Field(None, alias="askPrice")
    ask_volume: Optional[int] = Field(None, alias="askVolume")
    bid_price: Optional[float] = Field(None, alias="bidPrice")
    bid_volume: Optional[int] = Field(None, alias="bidVolume")
    ldcp: Optional[float] = None
    var: Optional[float] = None
    haircut: Optional[float] = None
    pe_ratio: Optional[float] = Field(None, alias="peRatio")

class QuoteData(BaseModel):
    company_name: str = Field(..., alias="companyName")
    symbol: str
    sector: str
    current_price: float = Field(..., alias="currentPrice")
    change: float
    change_percent: float = Field(..., alias="changePercent")
    circuit_breaker: CircuitBreaker
    day_range: DayRange = Field(..., alias="dayRange")
    year_range: YearRange = Field(..., alias="yearRange")
    trading_stats: TradingStats = Field(..., alias="tradingStats")
    one_year_change: Optional[float] = Field(None, alias="oneYearChange")
    ytd_change: Optional[float] = Field(None, alias="ytdChange")

class FinancialResult(BaseModel):
    date: str
    title: str
    document_link: Optional[str] = Field(None, alias="documentLink")
    pdf_link: Optional[str] = Field(None, alias="pdfLink")

class FinancialEntry(BaseModel):
    period: str
    sales: Optional[float] = None
    profit_after_tax: Optional[float] = Field(None, alias="profitAfterTax")
    eps: Optional[float] = None

class Financials(BaseModel):
    annual: List[FinancialEntry]
    quarterly: List[FinancialEntry]

class RatioEntry(BaseModel):
    period: str
    gross_profit_margin: Optional[float] = Field(None, alias="grossProfitMargin")
    net_profit_margin: Optional[float] = Field(None, alias="netProfitMargin")
    eps_growth: Optional[float] = Field(None, alias="epsGrowth")
    peg: Optional[float] = None

class CompanyProfile(BaseModel):
    business_description: str = Field(..., alias="businessDescription")
    key_people: List[Dict[str, str]] = Field(..., alias="keyPeople")
    address: str
    website: str
    registrar: str
    auditor: str
    fiscal_year_end: str = Field(..., alias="fiscalYearEnd")

class EquityProfile(BaseModel):
    market_cap: float = Field(..., alias="marketCap")
    shares: int
    free_float_units: int = Field(..., alias="freeFloatUnits")
    free_float_percent: float = Field(..., alias="freeFloatPercent")

class CompanyData(BaseModel):
    # quote: QuoteData
    # profile: CompanyProfile
    # equity: EquityProfile
    announcements: List[FinancialResult]
    financials: Financials
    ratios: List[RatioEntry]
    timestamp: datetime = Field(default_factory=datetime.now)



class CircuitBreakerRow(BaseModel):
    symbol: str
    ldcp: float
    open: float
    high: float
    low: float
    current: float
    change: float
    change_percent: float
    volume: int

    @field_validator(
        "ldcp", "open", "high", "low", "current", "change", "change_percent",
        mode="before"
    )
    @classmethod
    def parse_float(cls, v):
        return float(v.replace(",", "").replace("%", ""))

    @field_validator("volume", mode="before")
    @classmethod
    def parse_int(cls, v):
        return int(v.replace(",", ""))



## Currency Model


from typing import Optional
from pydantic import BaseModel



class CountryName(BaseModel):
    field_1inch: str = Field(..., alias='1inch')
    aave: str
    ada: str
    aed: str
    afn: str
    agix: str
    akt: str
    algo: str
    all: str
    amd: str
    amp: str
    ang: str
    aoa: str
    ape: str
    apt: str
    ar: str
    arb: str
    ars: str
    atom: str
    aud: str
    avax: str
    awg: str
    axs: str
    azn: str
    bake: str
    bam: str
    bat: str
    bbd: str
    bch: str
    bdt: str
    bgn: str
    bhd: str
    bif: str
    bmd: str
    bnb: str
    bnd: str
    bob: str
    brl: str
    bsd: str
    bsv: str
    bsw: str
    btc: str
    btg: str
    btn: str
    btt: str
    busd: str
    bwp: str
    byn: str
    byr: str
    bzd: str
    cad: str
    cake: str
    cdf: str
    celo: str
    cfx: str
    chf: str
    chz: str
    clp: str
    cnh: str
    cny: str
    comp: str
    cop: str
    crc: str
    cro: str
    crv: str
    cspr: str
    cuc: str
    cup: str
    cve: str
    cvx: str
    czk: str
    dai: str
    dash: str
    dcr: str
    dfi: str
    djf: str
    dkk: str
    doge: str
    dop: str
    dot: str
    dydx: str
    dzd: str
    egld: str
    egp: str
    enj: str
    eos: str
    ern: str
    etb: str
    etc: str
    eth: str
    eur: str
    fei: str
    fil: str
    fjd: str
    fkp: str
    flow: str
    flr: str
    frax: str
    ftt: str
    gala: str
    gbp: str
    gel: str
    ggp: str
    ghs: str
    gip: str
    gmd: str
    gmx: str
    gnf: str
    gno: str
    grt: str
    gt: str
    gtq: str
    gusd: str
    gyd: str
    hbar: str
    hkd: str
    hnl: str
    hnt: str
    hot: str
    hrk: str
    ht: str
    htg: str
    huf: str
    icp: str
    idr: str
    ils: str
    imp: str
    imx: str
    inj: str
    inr: str
    iqd: str
    irr: str
    isk: str
    jep: str
    jmd: str
    jod: str
    jpy: str
    kas: str
    kava: str
    kcs: str
    kda: str
    kes: str
    kgs: str
    khr: str
    kmf: str
    knc: str
    kpw: str
    krw: str
    ksm: str
    kwd: str
    kyd: str
    kzt: str
    lak: str
    lbp: str
    ldo: str
    leo: str
    link: str
    lkr: str
    lrc: str
    lrd: str
    lsl: str
    ltc: str
    ltl: str
    luna: str
    lunc: str
    lvl: str
    lyd: str
    mad: str
    mana: str
    mbx: str
    mdl: str
    mga: str
    mina: str
    mkd: str
    mkr: str
    mmk: str
    mnt: str
    mop: str
    mru: str
    mur: str
    mvr: str
    mwk: str
    mxn: str
    myr: str
    mzn: str
    nad: str
    near: str
    neo: str
    nexo: str
    nft: str
    ngn: str
    nio: str
    nok: str
    npr: str
    nzd: str
    okb: str
    omr: str
    one: str
    op: str
    ordi: str
    pab: str
    paxg: str
    pen: str
    pepe: str
    pgk: str
    php: str
    pi: str
    pkr: str
    pln: str
    pol: str
    pyg: str
    qar: str
    qnt: str
    qtum: str
    ron: str
    rpl: str
    rsd: str
    rub: str
    rune: str
    rvn: str
    rwf: str
    sand: str
    sar: str
    sbd: str
    scr: str
    sdg: str
    sek: str
    sgd: str
    shib: str
    shp: str
    sle: str
    sll: str
    snx: str
    sol: str
    sos: str
    srd: str
    std: str
    stn: str
    stx: str
    sui: str
    svc: str
    syp: str
    szl: str
    thb: str
    theta: str
    tjs: str
    tmt: str
    tnd: str
    ton: str
    top: str
    trx: str
    try_: str = Field(..., alias='try')
    ttd: str
    tusd: str
    twd: str
    twt: str
    tzs: str
    uah: str
    ugx: str
    uni: str
    usd: str
    usdc: str
    usdd: str
    usdp: str
    usdt: str
    uyu: str
    uzs: str
    ves: str
    vet: str
    vnd: str
    vuv: str
    waves: str
    wemix: str
    woo: str
    wst: str
    xaf: str
    xag: str
    xau: str
    xaut: str
    xcd: str
    xcg: str
    xch: str
    xdc: str
    xdr: str
    xec: str
    xem: str
    xlm: str
    xmr: str
    xof: str
    xpf: str
    xrp: str
    xtz: str
    yer: str
    zar: str
    zec: str
    zil: str
    zmk: str
    zmw: str
    zwl: str



class PkrRates(BaseModel):
    """Model for PKR exchange rates against various currencies"""
    
    inch: float = Field(..., alias='1inch')
    aave: Optional[float] = 0.000027870604
    ada: Optional[float] = 0.01212527
    aed: Optional[float] = 0.013141508
    afn: Optional[float] = 0.22735161
    agix: Optional[float] = 0.046521451
    akt: Optional[float] = 0.010385581
    algo: Optional[float] = 0.036216193
    all: Optional[float] = 0.29080989
    amd: Optional[float] = 1.36284581
    amp: Optional[float] = 2.24984732
    ang: Optional[float] = 0.0064189272
    aoa: Optional[float] = 3.27135551
    ape: Optional[float] = 0.026637767
    apt: Optional[float] = 0.0036678014
    ar: Optional[float] = 0.0017025592
    arb: Optional[float] = 0.02994547
    ars: Optional[float] = 4.99480145
    atom: Optional[float] = 0.0016563239
    ats: Optional[float] = 0.041480256
    aud: Optional[float] = 0.0050590778
    avax: Optional[float] = 0.00037492198
    awg: Optional[float] = 0.0064052552
    axs: Optional[float] = 0.0024467576
    azm: Optional[float] = 30.44265554
    azn: Optional[float] = 0.0060885311
    bake: Optional[float] = 1.34151212
    bam: Optional[float] = 0.0058958256
    bat: Optional[float] = 0.026497622
    bbd: Optional[float] = 0.0071567097
    bch: Optional[float] = 0.000006389789
    bdt: Optional[float] = 0.43772915
    bef: Optional[float] = 0.12160414
    bgn: Optional[float] = 0.0058958256
    bhd: Optional[float] = 0.0013454614
    bif: Optional[float] = 10.57869332
    bmd: Optional[float] = 0.0035783548
    bnb: Optional[float] = 0.0000056818118
    bnd: Optional[float] = 0.0045205631
    bob: Optional[float] = 0.024734743
    brl: Optional[float] = 0.018678264
    bsd: Optional[float] = 0.0035783548
    bsv: Optional[float] = 0.00020956946
    bsw: Optional[float] = 1.81327133
    btc: Optional[float] = 0.000000051457291  # 5.1457291e-8
    btg: Optional[float] = 0.0041817238
    btn: Optional[float] = 0.32404079
    btt: Optional[float] = 10075.74928564
    busd: Optional[float] = 0.0035764397
    bwp: Optional[float] = 0.046911298
    byn: Optional[float] = 0.010237608
    byr: Optional[float] = 102.37607704
    bzd: Optional[float] = 0.0071995125
    cad: Optional[float] = 0.0048731761
    cake: Optional[float] = 0.0026684964
    cdf: Optional[float] = 8.1224622
    celo: Optional[float] = 0.039886713
    cfx: Optional[float] = 0.062977778
    chf: Optional[float] = 0.0027485132
    chz: Optional[float] = 0.084007786
    clp: Optional[float] = 3.08238532
    cnh: Optional[float] = 0.024695302
    cny: Optional[float] = 0.024721696
    comp: Optional[float] = 0.00017687447
    cop: Optional[float] = 13.09720649
    crc: Optional[float] = 1.72893021
    cro: Optional[float] = 0.043457367
    crv: Optional[float] = 0.013495293
    cspr: Optional[float] = 0.99753074
    cuc: Optional[float] = 0.0035783548
    cup: Optional[float] = 0.085787938
    cve: Optional[float] = 0.33240757
    cvx: Optional[float] = 0.001812335
    cyp: Optional[float] = 0.0017643013
    czk: Optional[float] = 0.073152658
    dai: Optional[float] = 0.0035784301
    dash: Optional[float] = 0.000088593379
    dcr: Optional[float] = 0.00014578477
    dem: Optional[float] = 0.0058958256
    dfi: Optional[float] = 5.35164713
    djf: Optional[float] = 0.63819024
    dkk: Optional[float] = 0.022531693
    doge: Optional[float] = 0.03161875
    dop: Optional[float] = 0.2223377
    dot: Optional[float] = 0.0025389979
    dydx: Optional[float] = 0.031888397
    dzd: Optional[float] = 0.46388719
    eek: Optional[float] = 0.047166605
    egld: Optional[float] = 0.00068601026
    egp: Optional[float] = 0.16730156
    enj: Optional[float] = 0.15902853
    eos: Optional[float] = 0.040239152
    ern: Optional[float] = 0.053675323
    esp: Optional[float] = 0.50156856
    etb: Optional[float] = 0.55621057
    etc: Optional[float] = 0.0003995226
    eth: Optional[float] = 0.0000017365799
    eur: Optional[float] = 0.0030144878
    eurc: Optional[float] = 0.0030166921
    fei: Optional[float] = 0.0035090934
    fil: Optional[float] = 0.0035277925
    fim: Optional[float] = 0.01792333
    fjd: Optional[float] = 0.0078727543
    fkp: Optional[float] = 0.0026213082
    flow: Optional[float] = 0.07995228
    flr: Optional[float] = 0.36052625
    frax: Optional[float] = 0.0036090592
    frf: Optional[float] = 0.019773744
    ftt: Optional[float] = 0.010051534
    gala: Optional[float] = 0.83330051
    gbp: Optional[float] = 0.0026213082
    gel: Optional[float] = 0.009591452
    ggp: Optional[float] = 0.0026213082
    ghc: Optional[float] = 393.42404137
    ghs: Optional[float] = 0.039342404
    gip: Optional[float] = 0.0026213082
    gmd: Optional[float] = 0.26411095
    gmx: Optional[float] = 0.00054220394
    gnf: Optional[float] = 31.40305737
    gno: Optional[float] = 0.000027069202
    grd: Optional[float] = 1.02718671
    grt: Optional[float] = 0.12436019
    gt: Optional[float] = 0.0004932477
    gtq: Optional[float] = 0.027422428
    gusd: Optional[float] = 0.0035820834
    gyd: Optional[float] = 0.74824559
    hbar: Optional[float] = 0.03468262
    hkd: Optional[float] = 0.02797238
    hnl: Optional[float] = 0.094857481
    hnt: Optional[float] = 0.0031545799
    hot: Optional[float] = 8.77272144
    hrk: Optional[float] = 0.022712658
    ht: Optional[float] = 0.014406174
    htg: Optional[float] = 0.46996889
    huf: Optional[float] = 1.14312086
    icp: Optional[float] = 0.0014210805
    idr: Optional[float] = 60.2210084
    iep: Optional[float] = 0.002374102
    ils: Optional[float] = 0.011043883
    imp: Optional[float] = 0.0026213082
    imx: Optional[float] = 0.020578292
    inj: Optional[float] = 0.0010994197
    inr: Optional[float] = 0.32404079
    iqd: Optional[float] = 4.68801963
    irr: Optional[float] = 4575.15188598
    isk: Optional[float] = 0.43718127
    itl: Optional[float] = 5.83686224
    jep: Optional[float] = 0.0026213082
    jmd: Optional[float] = 0.55854612
    jod: Optional[float] = 0.0025370536
    jpy: Optional[float] = 0.5464799
    kas: Optional[float] = 0.10824109
    kava: Optional[float] = 0.061803407
    kcs: Optional[float] = 0.00041413697
    kda: Optional[float] = 0.44424418
    kes: Optional[float] = 0.46130149
    kgs: Optional[float] = 0.31295651
    khr: Optional[float] = 14.37682204
    klay: Optional[float] = 0.05966859
    kmf: Optional[float] = 1.48303077
    knc: Optional[float] = 0.023756734
    kpw: Optional[float] = 3.22057115
    krw: Optional[float] = 5.15615217
    ksm: Optional[float] = 0.00074242121
    kwd: Optional[float] = 0.0010966712
    kyd: Optional[float] = 0.0029556765
    kzt: Optional[float] = 1.77225517
    lak: Optional[float] = 76.63134176
    lbp: Optional[float] = 321.24646567
    ldo: Optional[float] = 0.010060335
    leo: Optional[float] = 0.00040689885
    link: Optional[float] = 0.00039577489
    lkr: Optional[float] = 1.10636398
    lrc: Optional[float] = 0.10452585
    lrd: Optional[float] = 0.6665422
    lsl: Optional[float] = 0.057056562
    ltc: Optional[float] = 0.000064180737
    ltl: Optional[float] = 0.010408423
    luf: Optional[float] = 0.12160414
    luna: Optional[float] = 0.055650373
    lunc: Optional[float] = 103.17056374
    lvl: Optional[float] = 0.002118582
    lyd: Optional[float] = 0.022530779
    mad: Optional[float] = 0.032674995
    mana: Optional[float] = 0.033309473
    mbx: Optional[float] = 0.067994222
    mdl: Optional[float] = 0.060616726
    mga: Optional[float] = 15.70701508
    mgf: Optional[float] = 78.53507542
    mina: Optional[float] = 0.052000424
    mkd: Optional[float] = 0.18573365
    mkr: Optional[float] = 0.0000021884969
    mmk: Optional[float] = 7.5133109
    mnt: Optional[float] = 12.76193802
    mop: Optional[float] = 0.028811551
    mro: Optional[float] = 1.42969127
    mru: Optional[float] = 0.14296913
    mtl: Optional[float] = 0.0012941196
    mur: Optional[float] = 0.16422284
    mvr: Optional[float] = 0.05529167
    mwk: Optional[float] = 6.20471537
    mxn: Optional[float] = 0.061423027
    mxv: Optional[float] = 0.0070874814
    myr: Optional[float] = 0.013980479
    mzm: Optional[float] = 228.55055252
    mzn: Optional[float] = 0.22855055
    nad: Optional[float] = 0.057056562
    near: Optional[float] = 0.0033478921
    neo: Optional[float] = 0.0012221448
    nexo: Optional[float] = 0.0041653116
    nft: Optional[float] = 10324.6074446
    ngn: Optional[float] = 4.85024477
    nio: Optional[float] = 0.13151867
    nlg: Optional[float] = 0.0066430568
    nok: Optional[float] = 0.034016339
    npr: Optional[float] = 0.51870829
    nzd: Optional[float] = 0.0059255473
    okb: Optional[float] = 0.000044555727
    omr: Optional[float] = 0.0013744249
    one: Optional[float] = 1.34065259
    op: Optional[float] = 0.018308592
    ordi: Optional[float] = 0.0012187735
    pab: Optional[float] = 0.0035783548
    paxg: Optional[float] = 0.0000007115336  # 7.115336e-7
    pen: Optional[float] = 0.011999961
    pepe: Optional[float] = 737.8067472
    pgk: Optional[float] = 0.015333169
    php: Optional[float] = 0.20716718
    pi: Optional[float] = 0.018629944
    pkr: Optional[float] = 1.0
    pln: Optional[float] = 0.012697271
    pol: Optional[float] = 0.033052428
    pte: Optional[float] = 0.60435054
    pyg: Optional[float] = 23.44895477
    qar: Optional[float] = 0.013025212
    qnt: Optional[float] = 0.000048647043
    qtum: Optional[float] = 0.0034882245
    rol: Optional[float] = 153.53159924
    ron: Optional[float] = 0.01535316
    rpl: Optional[float] = 0.0020615425
    rsd: Optional[float] = 0.35404644
    rub: Optional[float] = 0.27456613
    rune: Optional[float] = 0.0085832862
    rvn: Optional[float] = 0.56276866
    rwf: Optional[float] = 5.21546965
    sand: Optional[float] = 0.038975081
    sar: Optional[float] = 0.013418831
    sbd: Optional[float] = 0.028782375
    scr: Optional[float] = 0.052206617
    sdd: Optional[float] = 214.75529922
    sdg: Optional[float] = 2.14755299
    sek: Optional[float] = 0.031929605
    sgd: Optional[float] = 0.0045205631
    shib: Optional[float] = 518.99655842
    shp: Optional[float] = 0.0026213082
    sit: Optional[float] = 0.72239185
    skk: Optional[float] = 0.090814459
    sle: Optional[float] = 0.081765145
    sll: Optional[float] = 81.76514481
    snx: Optional[float] = 0.011623316
    sol: Optional[float] = 0.000040638459
    sos: Optional[float] = 2.04303502
    spl: Optional[float] = 0.00059639247
    srd: Optional[float] = 0.13559105
    srg: Optional[float] = 135.59105178
    ssp: Optional[float] = 16.29194282
    std: Optional[float] = 74.1291884
    stn: Optional[float] = 0.074129188
    stx: Optional[float] = 0.012988158
    sui: Optional[float] = 0.0034980047
    svc: Optional[float] = 0.031310605
    syp: Optional[float] = 0.3957423
    szl: Optional[float] = 0.057056562
    thb: Optional[float] = 0.11116065
    theta: Optional[float] = 0.016388406
    tjs: Optional[float] = 0.033782985
    tmm: Optional[float] = 62.54995053
    tmt: Optional[float] = 0.01250999
    tnd: Optional[float] = 0.010272105
    ton: Optional[float] = 0.0024115185
    top: Optional[float] = 0.0084204575
    trl: Optional[float] = 156077.25045115
    trx: Optional[float] = 0.012694543
    try_: float = Field(..., alias='try')
    ttd: Optional[float] = 0.024142566
    tusd: Optional[float] = 0.0035839966
    tvd: Optional[float] = 0.0050590778
    twd: Optional[float] = 0.11230099
    twt: Optional[float] = 0.0068069886
    tzs: Optional[float] = 9.23521055
    uah: Optional[float] = 0.15408012
    ugx: Optional[float] = 12.66715156
    uni: Optional[float] = 0.00098728734
    usd: Optional[float] = 0.0035783548
    usdc: Optional[float] = 0.0035786866
    usdd: Optional[float] = 0.0035802976
    usdp: Optional[float] = 0.0035803197
    usdt: Optional[float] = 0.003579871
    uyu: Optional[float] = 0.13856147
    uzs: Optional[float] = 43.73539013
    val: Optional[float] = 5.83686224
    veb: Optional[float] = 140480603.3195581
    ved: Optional[float] = 1.40480603
    vef: Optional[float] = 140480.60331956
    ves: Optional[float] = 1.40480603
    vet: Optional[float] = 0.40967996
    vnd: Optional[float] = 92.87837846
    vuv: Optional[float] = 0.42560658
    waves: Optional[float] = 0.0063235068
    wemix: Optional[float] = 0.011294285
    woo: Optional[float] = 0.19966932
    wst: Optional[float] = 0.0097052715
    xaf: Optional[float] = 1.97737435
    xag: Optional[float] = 0.000046224216
    xau: Optional[float] = 0.00000070955592  # 7.0955592e-7
    xaut: Optional[float] = 0.0000007159874  # 7.159874e-7
    xbt: Optional[float] = 0.000000051485012  # 5.1485012e-8
    xcd: Optional[float] = 0.0096659557
    xcg: Optional[float] = 0.0064189272
    xch: Optional[float] = 0.0011740879
    xdc: Optional[float] = 0.095836852
    xdr: Optional[float] = 0.0026022409
    xec: Optional[float] = 417.58644553
    xem: Optional[float] = 4.50114505
    xlm: Optional[float] = 0.020355646
    xmr: Optional[float] = 0.000010185332
    xof: Optional[float] = 1.97737435
    xpd: Optional[float] = 0.0000020938589
    xpf: Optional[float] = 0.35972408
    xpt: Optional[float] = 0.0000017299438
    xrp: Optional[float] = 0.0023407297
    xtz: Optional[float] = 0.0085248659
    yer: Optional[float] = 0.85292226
    zar: Optional[float] = 0.057056562
    zec: Optional[float] = 0.000010949103
    zil: Optional[float] = 0.79280654
    zmk: Optional[float] = 65.25187985
    zmw: Optional[float] = 0.06525188
    zwd: Optional[float] = 1.29500661
    zwg: Optional[float] = 0.091476953
    zwl: Optional[float] = 228.57567566


class ExchangeRateResponse(BaseModel):
    """Main model for exchange rate data"""
    date: datetime
    pkr: PkrRates



class CurrencyResponse(BaseModel):
    country: str
    currency: float
    
class CurrencyCountryResponse(BaseModel):
    response: List[CurrencyResponse]